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 catchblock...
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.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden