sorry, ich habe deine Anfrage ganz übersehen, war keine Absicht...
Ich hole die Werte in node-red über einen Status-Request http://xxx/json?cmd=status. Danach kannst du auf einen erfolgreichen Abruf (HTTP-Status-Code 200) prüfen und daraufhin den JSON-Parser aufrufen.
Daraufhin verarbeite ich die Variablen dann in einer function weiter.
Dort hast du dann das geparste JSON-Object schön im Zugriff.
Das Script in dem function node macht dann im Prinzip nur die Werte lesbar, damit ich sie in iobroker.vis anzeigen lassen kann. Gespeichert werden die Werte im Moment zum Teil in der CCU, teilweise auch in iobroker-Objekten. Da bin ich gerade am umstellen weg von der CCU-Speicherung auf iobroker.
Code: Alles auswählen
var status = "";
var stopped = false;
var statusdauer = "";
var mode = "";
var timer = "";
var timer_nextstart;
var maehzeit = 0;
var batterie = 0;
var wlan = 0;
if (msg.payload.successful) {
var numhours = Math.floor(msg.payload.status.duration / 3600);
var numminutes = Math.floor((msg.payload.status.duration % 3600) / 60);
var numseconds = (msg.payload.status.duration % 3600) % 60;
//node.warn("STATUS RAW.: " + msg.payload.status.duration);
//node.warn("STATUSDAUER: " + numhours + ", " + numminutes + ", " + numseconds);
statusdauer = numhours + "h " + numminutes + "m " + numseconds + "s";
//node.warn("STATUSSTRING: " + statusdauer);
if (msg.payload.status.stopped ) {
stopped = "gestoppt";
} else {
stopped = "laeuft;"
}
maehzeit = msg.payload.status.hours;
batterie = msg.payload.status.battery;
wlan = msg.payload.wlan.signal;
switch ( msg.payload.status.mode ){
case 0: mode = "Auto";
break;
case 1: mode = "Manuell";
break;
case 2: mode = "Home";
break;
case 3: mode = "Demo";
break;
default: mode = "Unbekannt";
break;
}
switch ( msg.payload.timer.status ){
case 0: timer = "Deaktiviert";
break;
case 1: timer = "Aktiv";
break;
case 2: timer = "Standby";
timer_nextstart = msg.payload.timer.next.date + ", " + msg.payload.timer.next.time
break;
default: timer = "Unbekannt";
break;
}
switch ( msg.payload.status.status ){
case 0: status = "Status wird ermittelt";
break;
case 1: status = "parkt";
break;
case 2: status = "maeht";
break;
case 3: status = "sucht Ladestation";
break;
case 4: status = "laedt auf";
break;
case 5: status = "sucht (Warten auf Umsetzen im Manuell-Modus)";
break;
case 7: status = "Fehler: " + msg.payload.error.error_message;
break;
case 8: status = "hat Schleifensignal verloren";
break;
case 16: status = "ist abgeschaltet";
break;
case 17: status = "schlaeft";
break;
default: status = "unbekannter Status";
break;
}
} else {
status = "Statusabruf nicht erfolgreich";
}
global.set("statusAutoMower", msg.payload.status.status);
node.warn("statusAutoMower: " + global.get("statusAutoMower") + " = " + status);
return [ {payload:status},
{payload:statusdauer},
{payload:stopped},
{payload:mode},
{payload:timer},
{payload:timer_nextstart},
{payload:maehzeit},
{payload:batterie},
{payload:wlan} ];
Für den Messerwechsel-Hinweis hab ich mir ein iobroker-Objekt definiert, welches die Standzeit des Messers enthält. Daraus und aus der Mähzeit errechne ich mir dann, wann der Hinweis angezeigt wird. Rückgesetzt wird das ganze dann über den Button und die Zeit läuft von vorne.
Gruß
Uwe