Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] opensprinkler json parsen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] opensprinkler json parsen

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      PrinzEisenherz1 last edited by PrinzEisenherz1

      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

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @PrinzEisenherz1 last edited by paul53

        @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.

        E 1 Reply Last reply Reply Quote 0
        • P
          PrinzEisenherz1 last edited by

          Super. Vielen Dank. Hat super geklappt. Danke

          1 Reply Last reply Reply Quote 0
          • V
            vondefenn last edited by vondefenn

            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)

            1 Reply Last reply Reply Quote 0
            • P
              PrinzEisenherz1 last edited by

              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

              1 Reply Last reply Reply Quote 0
              • E
                Elluminatus @paul53 last edited by Elluminatus

                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:

                1. statt unter "0_userdata.0.Rainbird.Kreis" liegen bei mir die Punkte in Javascript unter "javascript.0.opensprinkler.kreis".
                2. 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!

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                877
                Online

                31.8k
                Users

                80.0k
                Topics

                1.3m
                Posts

                4
                6
                1010
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo