NEWS
if Problem
-
Hallo,
würde gerne den Status meines Mowers in einen Datenpunkt schreiben. Nun macht mein if statement leider nicht das, was es soll. Hier der codelet sStatus =getState('husqvarna-automower.0.2fac1184-8924-45d0-bcf1-a764b18c8bf5.mower.activity').val; console.log(sStatus) let sActiviy = "Bitte am Gerät prüfen"; if (sStatus="PARKED_IN_CS") sActiviy ="Parkt bis auf Weiteres" if (sStatus = "GOING_HOME") sActiviy="Auf dem Weg in die Ladestation"; if (sStatus = "MOWING") sActiviy = "Mäht"; if (sStatus ="CHARGING") sActiviy="Aufladevorgang"; if (sStatus ="LEAVING") sActiviy = "Verlässt die Ladestation"; if (sStatus = "STOPPED_IN_GARDEN") sActiviy = "Im Garten gestoppt. Manuelles eingreifen erforderlich"; setState('0_userdata.0.Mower.Status',sActiviy) console.log(sActiviy) console.log(sStatus)
wenn ich nun das erste mal sStatus in der Console mir anzeigen lasse, kommt der richtige Wert "PARKED_IN_CS"
Wenn ich nun das zweite mal sStatus aufrufe und auch sActivity kommt nicht wie erwartet "PARKED_IN_CS" "Parkt bis auf Weiteres"
sondern der letzte Wert "Stopped in Garden" "Im Garten gestoppt. Manuelles eingreifen erforderlich"
wo liegt mein Fehler?
-
@jones1975 sagt: wo liegt mein Fehler?
Es fehlt ein Trigger, der auf Veränderung des Datenpunktes "...activity" reagiert.
Mit Trigger:const idStatus = 'husqvarna-automower.0.2fac1184-8924-45d0-bcf1-a764b18c8bf5.mower.activity'; var sStatus =getState(idStatus).val; function translate() { console.log(sStatus) let sActiviy = "Bitte am Gerät prüfen"; if (sStatus == "PARKED_IN_CS") sActiviy ="Parkt bis auf Weiteres"; if (sStatus == "GOING_HOME") sActiviy="Auf dem Weg in die Ladestation"; if (sStatus == "MOWING") sActiviy = "Mäht"; if (sStatus == "CHARGING") sActiviy="Aufladevorgang"; if (sStatus == "LEAVING") sActiviy = "Verlässt die Ladestation"; if (sStatus == "STOPPED_IN_GARDEN") sActiviy = "Im Garten gestoppt. Manuelles eingreifen erforderlich"; setState('0_userdata.0.Mower.Status', sActiviy, true); console.log(sActiviy); } translate(); // Skriptstart on(idStatus, function(dp) { // triggert bei Wertänderung sStatus = dp.state.val; translate(); });
EDIT: Vergleiche korrigiert.
-
@paul53 vielen Dank. Klar der Trigger macht Sinn
Dachte nur nicht, dass ich eine Function dafür bräuchte. Mal schauen ob es läuft, wenn der Mäher wieder rausfährt.
-
@jones1975 sagte: Dachte nur nicht, dass ich eine Function dafür bräuchte.
Wenn man auf die Übersetzung beim Skriptstart verzichtet, kommt man ohne die zusätzliche Funktion aus.
const idStatus = 'husqvarna-automower.0.2fac1184-8924-45d0-bcf1-a764b18c8bf5.mower.activity'; const idActivity = '0_userdata.0.Mower.Status'; on(idStatus, function(dp) { // triggert bei Wertänderung let sStatus = dp.state.val; console.log(sStatus) let sActiviy = "Bitte am Gerät prüfen"; if (sStatus == "PARKED_IN_CS") sActiviy ="Parkt bis auf Weiteres"; else if (sStatus == "GOING_HOME") sActiviy="Auf dem Weg in die Ladestation"; else if (sStatus == "MOWING") sActiviy = "Mäht"; else if (sStatus == "CHARGING") sActiviy="Aufladevorgang"; else if (sStatus == "LEAVING") sActiviy = "Verlässt die Ladestation"; else if (sStatus == "STOPPED_IN_GARDEN") sActiviy = "Im Garten gestoppt. Manuelles eingreifen erforderlich"; setState(idActivity, sActiviy, true); console.log(sActiviy); });
EDIT: Vergleiche korrigiert.
-
@jones1975
Vergleiche werden in JS mit==
notiert ... wie in @paul53 's Beispielen schön zu sehen.