NEWS
Axios: Fail to parse JSON data','code':-1
-
Ich bekomme seit heute ein Fehler von Axios wenn ich versuche eine elgato Keylight einzuschalten.
Ich habe nichts verändert und verstehe nicht so ganz wo das Problem liegt. Die Status Abfrage funktioniert weiterhin und ich bekomme die Daten ausgelesen.
Fehler beim einschalten:
function func_elgato_on(){ var On_Key_Light_1 = getState(id_On_Key_Light_1).val; var Brightness_Key_Light_1 = getState(id_Brightness_Key_Light_1).val; var Temperature_Key_Light_1 = getState(id_Temperature_Key_Light_1).val; var Status_Update_Key_Light_1 = getState(id_Status_Update_Key_Light_1).val; var Switch_Key_Light_1 = getState(id_Switch_Key_Light_1).val; if(!change){ Switch_change = true; const axios = require('axios'); axios({ method: 'put', url: 'http://192.168.178.75:9123/elgato/lights', headers: {'Content-Type':'application/x-www-form-urlencoded'} , data: { "lights":[{ "brightness":Brightness_Key_Light_1, "temperature":Temperature_Key_Light_1, "on":1}], "numberOfLights":1 }, timeout: 4500, responseType: 'json' }) .then((response) => { if(debugging){ console.log('data:' +response.data); console.log('Status: ' +response.status); console.log('Header:' +response.headers); } if(response.status = 200){ //Umwandeln in String var data_string = JSON.stringify(response.data) //Ergebnisse var _Status = response.data.lights[0].on; var _Helligkeit = response.data.lights[0].brightness; var _Temperatur = response.data.lights[0].temperature; if(_Status == 1){ if(debugging){ log('Elgato Key light air wurde über ioBroker eingeschaltet --- Helligkeit: '+_Helligkeit +' --- Temperatur: '+_Temperatur); } setState(id_On_Key_Light_1,_Status); } else{ if(logging){ log('Elgato Key light air wurde nicht eingeschaltet (iobroker)'); //log('Helligkeit: '+_Helligkeit +' --- Temperatur: '+_Temperatur); } } if(debugging){ log('Status: '+_Status); log('Helligkeit: '+_Helligkeit); log('Temperatur: '+_Temperatur); } } else{ if(logging){ log('Hier stimmt etwas nicht. Elgato Key Light air Meldung: '+response.status) } } }) .catch( (error) => { // handle error log('Key Light air sollte eingeschaltet werden. Fehlermeldung: '+error,'warn'); if (error.response) { // The request was made and the server responded with a status code // that falls out of the range of 2xx if(debugging){ log('Fehler: '+error) log(error.response.data); log(error.response.status); log(error.response.headers); } } else if (error.request) { log('Request Error beim einschalten vom Key Light air','warn'); // The request was made but no response was received // `error.request` is an instance of XMLHttpRequest in the browser and an instance of // http.ClientRequest in node.js if(debugging){ console.log(error.request); } } else { // Something happened in setting up the request that triggered an Error log('sonstiger Fehler beim Einschalten vom Key Light air: '+error,'warn'); } } ); } else{ change= false; log('Schaltbefehl wurde unterdrückt (Schaltung wahrscheinlich über App)'); } }
was geht:
function func_elgato_status(){ var On_Key_Light_1 = getState(id_On_Key_Light_1).val; var Brightness_Key_Light_1 = getState(id_Brightness_Key_Light_1).val; var Temperature_Key_Light_1 = getState(id_Temperature_Key_Light_1).val; var Status_Update_Key_Light_1 = getState(id_Status_Update_Key_Light_1).val; var Switch_Key_Light_1 = getState(id_Switch_Key_Light_1).val; if(Status_Update_Key_Light_1){ setStateDelayed(id_Status_Update_Key_Light_1,false,5000); } change= false; if(!Switch_change){ const axios = require('axios'); axios({ method: 'get', url: 'http://192.168.178.75:9123/elgato/lights', timeout: 4500, responseType: 'json' }) .then((response) => { if(debugging){ log('data:' +response.data); log(response.data.lights[0].temperature) log(response.data.lights[0].brightness) log(response.data.lights[0].on) log('Status: ' +response.status); log('Header:' +response.headers); } if(response.status = 200){ //Umwandeln in String var data_string = JSON.stringify(response.data) //Ergebnisse var _Status = response.data.lights[0].on; var _Helligkeit = response.data.lights[0].brightness; var _Temperatur = response.data.lights[0].temperature; if(On_Key_Light_1 != _Status){ setState(id_On_Key_Light_1,_Status); change = true; } if(Brightness_Key_Light_1 != _Helligkeit){ setState(id_Brightness_Key_Light_1,_Helligkeit); change = true; } if(Temperature_Key_Light_1 != _Temperatur){ setState(id_Temperature_Key_Light_1,_Temperatur); change = true; } if(_Status == 1 && !Switch_Key_Light_1){ setState(id_Switch_Key_Light_1,true); change = true; } else if (_Status == 0 && Switch_Key_Light_1){ setState(id_Switch_Key_Light_1,false); change = true; } if(change){ if(_Status == 1){ if(logging){ log('Elgato Key light air wurde per App eingeschaltet --- Helligkeit: '+_Helligkeit +' --- Temperatur: '+_Temperatur); } } else{ if(logging){ log('Elgato Key light air wurde per App ausgeschaltet'); //log('Helligkeit: '+_Helligkeit +' --- Temperatur: '+_Temperatur); } } } if(debugging){ log('Status: '+_Status); log('Helligkeit: '+_Helligkeit); log('Temperatur: '+_Temperatur); } } else{ if(logging){ log('Hier stimmt etwas nicht. Elgato Key Light air Meldung: '+response.status) } } }) .catch( (error) => { // handle error log('Fehler bei der Abfrage der Elgator Key Light air: '+error,'warn'); } ); } else{ Switch_change = false; if(debugging){ log('Switch change wird geändert in false'); } } }
Hat jemand eine Idee wo das Problem liegen könnte?
-
Kann mir vielleicht jemand helfen?
Ich habe weiter recherchiert werde aber leider nicht fündig.
Wenn ich am Mac Terminal
#!/bin/bash curl --location --request PUT 'http://192.168.178.75:9123/elgato/lights' \ --header 'Content-Type: application/json' \ --data-raw '{"lights":[{"on":1}],"numberOfLights":1}'
ausführe funktioniert es nicht weiterhin. Also an der Lampe liegt es nicht. Es kann nur an Axiom liegen.
-
@cash du solltest schon den korrekten content-type verwenden er is json und nicht form-urlencoded
-
@tombox genau das war das Problem. Es geht wieder. Danke für den Hinweis. Komisch das es vorher über ein Jahr lang, obwohl falsch, lief...
-
@cash
falls es dich interessiert es gibt jetzt auch ein Adapter für Elgato Key Light hier der Forum post dazu https://forum.iobroker.net/topic/62334/test-elgato-key-light-adapter -
@issi sehr cool. Danke für den Hinweis. Bleibe aber vorerst bei meinen Script da ich von meinen 3 elgatos nur eine steuern möchte und ich den Status auch nur Mo-Fr. von 7:00 - 16:00 abfrage. Somit vermeide ich unnötige Abfragen in meinen Netz. Falls mein Script dann mal wieder nicht läuft steige ich aber wahrscheinlich um.