NEWS
[gelöst] opensprinkler json parsen
-
Hi zusammen,
ich betreibe bei mir zuhause eine Bewässerungsanlage auf Basis von Rainbird und OpensprinklerPi (Vers: 2.1.9).
Jetzt würde ich gerne über die API die Laufzeiten erfassen.
Die API-url sieht da wie folgt aus:http://192.168.178.41:8080/js?pw=a6d82bced638de3def1e9bbb4983225c
und die Ausgabe sieht wie folgt aus
{"sn":[0,0,0,0,0,0,0,0],"nstations":8}
Die Ausgabe bedeutet das es max 8 Regenkreise sind und die jeweiligen 0 das die Station nicht läuft.
Würde Station 1 bzw Kreis 1 laufen dann würde das so aussehen:{"sn":[1,0,0,0,0,0,0,0],"nstations":8}
Wie kann ich das json am besten parsen um die Kreise in eienm jeweiligen Datenpunkt zu erhalten?
Gruß
Johnny -
@PrinzEisenherz1
Vorschlag:const url = 'http://192.168.178.41:8080/js?pw=a6d82bced638de3def1e9bbb4983225c'; const dpPath = '0_userdata.0.Rainbird.Kreis'; // 8 Datenpunkte "Kreis1 ... 8", Typ "boolean" schedule('* * * * *', function() { // jede Minute request(url, function(error, response, result) { let arr = JSON.parse(result).sn; for(let i = 0; i < arr.length; i++) { setState(dpPath + (i + 1), !!arr[i], true); } }); });
Die 8 Datenpunkte müssen vorher unter "0_userdata.0" erstellt werden.
-
Super. Vielen Dank. Hat super geklappt. Danke
-
Hi, endlich mal noch jemand mit diesem vollkommen genialen Opensprinkler Board
Gucke mal in die 2.2 Version (spezieller MQTT tree), da soll eine MQTT Implementierung drin sein.
Hat den Vorteil dass du nicht aktiv per cron und API den Status abfragen musst, sondern Änderungen direkt über den MQTT Adapter im ioBroker in Realtime gepushed kriegst und dann bei Änderungen auf den Status im Script 'normal' reagieren kannst.[https://opensprinkler.com/forums/topic/timeplan-firmware-2-20/](link url)
ich setze übigens schon seit 8 Jahren für das raspi-Board die alternative 'SIP' Firmware von Dan in CA ein (hieß vormals OSPI); die hat die MQTT Implementierung schon seit Jahren.
[https://dan-in-ca.github.io/SIP/](link url)
-
Super,danke für die Info. Frage zu SIP, gibt es dafür auch ein App? Und kann SIP auch Zimmerman und Eto?
Gruß Johnny
-
Hallo, ich habe diese Lösung umgesetzt. Vielen Dank für die Hilfe wie man diese Punkte richtig parsen kann.
Ich habe zwei Sachen verändert:- statt unter "0_userdata.0.Rainbird.Kreis" liegen bei mir die Punkte in Javascript unter "javascript.0.opensprinkler.kreis".
- Ich frage alle 15 Sekunden ab
Alles läuft wie gewünscht.
const url = 'http://10.0.1.175/js?pw=24e24cb0a659595c91c840c448ebe5'; const dpPath = 'javascript.0.opensprinkler.kreis'; // 8 Datenpunkte "Kreis1 ... 8", Typ "boolean" schedule('*/15 * * * * *', function() { // jede Minute request(url, function(error, response, result) { let arr = JSON.parse(result).sn; for(let i = 0; i < arr.length; i++) { setState(dpPath + (i + 1), !!arr[i], true); } }); });
Danke für Eure Hilfe...
Beste Grüße Elluminatus!