NEWS
Wie Error handling
-
Hallo zusammen
Ich habe da ein kleines Script, welches die Infos meines Dyson Luftreinigers auslesen kann.
Das Script funktioniert soweit - nur, wenn es mal nicht funktioniert, stürzt gleich die komplette Javascript Instanz ab und startet sich neu.Das Script geht auf die Dyson Server und bezieht so die Informationen. Doch hin und wieder kommt der Status "Connection refused" zurück. Wie kann ich das Script anpassen, damit dann einfach in den Logs "Connection Refused" aufgeführt wird, anstatt dass sich gleich die Javascript Instanz aufhängt?
var DysonPureLink = require('../../dyson-purelink') var pureLink = new DysonPureLink("myemailadress", "mypassword"); var dyson; schedule("*/5 * * * *", function () { createState("Dyson.Temperature", 0); createState("Dyson.Humidity", 0); createState("Dyson.AirQuality", 0); createState("Dyson.LogFanStatus", 0); createState("Dyson.LogAutoOnStatus", 0); createState("Dyson.LogRotationStatus", 0); createState("Dyson.LogFanSpeed", 0); pureLink.getDevices().then(devices => { if(!devices) { log('No devices found'); } else { log('Device found'); dyson = devices[0]; //dyson.getTemperature().then(t => createState("Dyson.Temperature", t)) //Temperature DB Neu dyson.getTemperature().then(t => setState("Dyson.Temperature", t)) //Temperature DB Existiert dyson.getRelativeHumidity().then(t => setState("Dyson.Humidity", t)) dyson.getAirQuality().then(t => setState("Dyson.AirQuality", t)) dyson.getFanStatus().then(t => setState("Dyson.LogFanStatus", t)) dyson.getFanSpeed().then(t => setState("Dyson.LogFanSpeed", t)) dyson.getAutoOnStatus().then(t => setState("Dyson.LogAutoOnStatus", t)) dyson.getRotationStatus().then(t => setState("Dyson.LogRotationStatus", t)) } }).catch(err => console.error(err)) });
Fehlermeldung:
-
Mit einem klassischen
try catch
block...
Ich habe mir den Code der verwendeten Module nicht angesehen aber es ist auf jeden Fall das MQTT Module welches einen Fehler wirft.. Es wird aber dem Code-Syntax vom Script nach ein Promise erwartet.. Und da MQTT einen Fehler schmeißt und kein Promise zurück gibt wird deinthen ... catch ..
nie erreicht werden..Also z.B. so:
var DysonPureLink = require('../../dyson-purelink') var pureLink = new DysonPureLink("myemailadress", "mypassword"); var dyson; schedule("*/5 * * * *", function () { createState("Dyson.Temperature", 0); createState("Dyson.Humidity", 0); createState("Dyson.AirQuality", 0); createState("Dyson.LogFanStatus", 0); createState("Dyson.LogAutoOnStatus", 0); createState("Dyson.LogRotationStatus", 0); createState("Dyson.LogFanSpeed", 0); try { pureLink.getDevices().then(devices => { if (!devices) { log('No devices found'); } else { log('Device found'); dyson = devices[0]; //dyson.getTemperature().then(t => createState("Dyson.Temperature", t)) //Temperature DB Neu dyson.getTemperature().then(t => setState("Dyson.Temperature", t)) //Temperature DB Existiert dyson.getRelativeHumidity().then(t => setState("Dyson.Humidity", t)) dyson.getAirQuality().then(t => setState("Dyson.AirQuality", t)) dyson.getFanStatus().then(t => setState("Dyson.LogFanStatus", t)) dyson.getFanSpeed().then(t => setState("Dyson.LogFanSpeed", t)) dyson.getAutoOnStatus().then(t => setState("Dyson.LogAutoOnStatus", t)) dyson.getRotationStatus().then(t => setState("Dyson.LogRotationStatus", t)) } }).catch(err => console.error(err)) } catch (e) { log('Fehler: ' + e); } });
-
@BuZZy
Vielen, vielen Dank!Wieder etwas dazu gelernt. Funktioniert so perfekt.