Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Hydrawise Bewässerung JSON in Datenpunkte speichern

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.3k

Hydrawise Bewässerung JSON in Datenpunkte speichern

Geplant Angeheftet Gesperrt Verschoben JavaScript
4 Beiträge 2 Kommentatoren 508 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • A Offline
    A Offline
    ah966
    schrieb am zuletzt editiert von
    #1

    Hallo!

    Über die API der Bewässerungssteuerung (Cloud) kann ich Daten im JSON-Format abfragen:

    var apiurl = "https://app.hydrawise.com/api/v1/statusschedule.php?api_key=" + apikey + "&tag=hydrawise_all";
    
    function getHydraData() {
        var request = require('request');
        request(apiurl, function (error, response, body) {
            if (!error && response.statusCode == 200) {
                
                    setHydraStates(JSON.parse(body), "watering_time", "string");
                    /* setHydraStates(JSON.parse(body), "watering_time", "number");
                    setHydraStates(JSON.parse(body), "status", "string");
                    setHydraStates(JSON.parse(body), "last_contact", "string"); */
                    setHydraStates(JSON.parse(body), "relays[0].name", "string");
    
                    // setState('javascript.0.hydrawise.watering_time', obj.watering_time);
                    
            } else {
                log("Error = " + error);
            }
            });
    }
    
    function setHydraStates(body, dpname, dptyp) {
        console.log('DPname: ' + dpname);
        var obj = body;
        var objval = obj[dpname];               // funktioniert für Non-nested
    
        // console.log(obj.relays[0].name);     // funktioniert mit nested!
    
    
        if (!getObject('javascript.0.hydrawise.' + dpname1)) {
            console.log(dpname1 + ' existiert nicht. Lege an...');
            createState('javascript.0.hydrawise.' + dpname1, {'type': dptyp, 'read': true, 'write': true, 'role': 'value', 'def': ""}, function() {
                setState('javascript.0.hydrawise.' + dpname1, obj[dpname]);
            });
        } else {
            setState('javascript.0.hydrawise.' + dpname1, obj[dpname]);
        }
    }
    
    getHydraData();
    

    Die Daten werden heruntergeladen und die Werte für "watering_time" und "status" bekomme ich in Datenpunkte rein.
    Diese sind auf der "obersten Ebene".

    Der JSON-Aufbau des Abrufs sieht so aus:

    87819872-a5e2-488f-8030-e95341ebc35e-grafik.png

    Ich kämpfe seit Tagen damit, die Werte unterhalb von "relays" in Datenpunkte zu setzen. Dabei ist mein größtes Problem wohl das Ansprechen des Objekts/Objektnamens(?) über eine Variable.

    In der oberen Funktion übergebe ich Werte an die untere. In Zeile 23 wird der Name des Keys/Objekts? korrekt ausgegeben.
    Eine Ausgabe von "objval" (Zeile 25) funktioniert mit Objekten der obersten Ebene, aber nicht mit z.B. relays[1].name.

    Mein Ziel war, nur an einer Stelle die Datenpunkte zu definieren, die ich haben will und dann die Funktionen des Rest machen zu lassen.
    Optimal wäre es natürlich, per Script den kompletten JSON-Inhalt in Datenpunkte abgespeichert zu bekommen.
    Da bin ich leider mit gescheitert.

    Hat jemand eine Idee, wie man das am Besten lösen könnte?
    Wie kann ich im Script den Namen übergeben, damit die untere Funktion auch mit verschachtelten Namen/Werten klarkommt?

    Danke.

    Viele Grüße,
    Andreas

    1 Antwort Letzte Antwort
    0
    • A Offline
      A Offline
      ah966
      schrieb am zuletzt editiert von
      #2

      Also um mein Script-Problem mit den verschachtelten Objekten (heißen die so?) zu verdeutlichen:

      var apiurl = "https://app.hydrawise.com/api/v1/statusschedule.php?api_key=" + apikey + "&tag=hydrawise_all";
      
      function logHydraData() {
          var request = require('request');
          request(apiurl, function (error, response, body) {
              if (!error && response.statusCode == 200) {
                  
                  var obj = JSON.parse(body);
      
                  var keynames = ["watering_time", "relays.0.name", "status"];
                  for (var key of keynames) {
                      // console.log('1:' + key + ': ' + obj.key);        // bringt bei allen Werten "undefined"
                      console.log('2:' + key + ': ' + obj[key]);          // bringt nur bei relays.0.name "undefined"
                  }
              }
          });
      }
      
      logHydraData();
      
      

      Ich habe es bisher nicht geschafft, den Wert von "relays.0.name" anzeigen zu lassen, wenn der Name in einer Variable übergeben wurde. Ergebnis war immer "undefined".

      Gibt es da noch eine alternative Schreibweise oder ist das gar nicht möglich?

      Viele Grüße,
      Andreas

      paul53P 1 Antwort Letzte Antwort
      0
      • A ah966

        Also um mein Script-Problem mit den verschachtelten Objekten (heißen die so?) zu verdeutlichen:

        var apiurl = "https://app.hydrawise.com/api/v1/statusschedule.php?api_key=" + apikey + "&tag=hydrawise_all";
        
        function logHydraData() {
            var request = require('request');
            request(apiurl, function (error, response, body) {
                if (!error && response.statusCode == 200) {
                    
                    var obj = JSON.parse(body);
        
                    var keynames = ["watering_time", "relays.0.name", "status"];
                    for (var key of keynames) {
                        // console.log('1:' + key + ': ' + obj.key);        // bringt bei allen Werten "undefined"
                        console.log('2:' + key + ': ' + obj[key]);          // bringt nur bei relays.0.name "undefined"
                    }
                }
            });
        }
        
        logHydraData();
        
        

        Ich habe es bisher nicht geschafft, den Wert von "relays.0.name" anzeigen zu lassen, wenn der Name in einer Variable übergeben wurde. Ergebnis war immer "undefined".

        Gibt es da noch eine alternative Schreibweise oder ist das gar nicht möglich?

        Viele Grüße,
        Andreas

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #3

        @ah966 sagte:

        Gibt es da noch eine alternative Schreibweise oder ist das gar nicht möglich?

        Ein Bezeichner darf nicht mit einer Ziffer beginnen, weshalb eine andere Schreibweise verwendet werden muss:

        relays['0'].name
        

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        1 Antwort Letzte Antwort
        0
        • A Offline
          A Offline
          ah966
          schrieb am zuletzt editiert von
          #4

          Hallo paul53,

          danke für Deine Antwort.

          Das hatte leider nicht geklappt, sondern brachte auch nur

          216b24fd-f7bf-4c9e-88ed-6b158a4be830-grafik.png

          Ich hab das jetzt so gelöst (nach etlichem Trial-and-Error):

          var apiurl = "https://app.hydrawise.com/api/v1/statusschedule.php?api_key=" + apikey + "&tag=hydrawise_all";
          
          function logHydraData() {
              var request = require('request');
              request(apiurl, function (error, response, body) {
                  if (!error && response.statusCode == 200) {
                      
                      var obj = JSON.parse(body);
          
                      // Objekte in root-Ebene
                      var rkeynames = ["watering_time", "name", "status"];
                      for (var rkey of rkeynames) {
                          console.log('2:' + rkey + ': ' + obj[rkey]);          // bringt nur bei relays.0.name "undefined"
                      }
                      
                      // Nested Objects, unterhalb relays
                      var nkeynames = ["name", "lastwater", "time", "run_seconds", "nicetime"];
                      
                      for (var i = 0; i < 5; i++) {       //  Index für Zone (Relays) bilden
                          var nkey = {};                  //  Var für Objekt
                          var idx = i;
                          for (nkey of nkeynames) {
                              // console.log(idx);
                              console.log(nkey + ': ' + obj.relays[idx][nkey]);
                          }
                      }
                  }
              });
          }
          
          logHydraData();
          
          

          Der Schlüssel lag darin, die Var "nkey" (Zeile 20) als Objekt zu definieren.

          Viele Grüße,
          Andreas

          1 Antwort Letzte Antwort
          0
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          864

          Online

          32.4k

          Benutzer

          81.5k

          Themen

          1.3m

          Beiträge
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
          ioBroker Community 2014-2025
          logo
          • Anmelden

          • Du hast noch kein Konto? Registrieren

          • Anmelden oder registrieren, um zu suchen
          • Erster Beitrag
            Letzter Beitrag
          0
          • Home
          • Aktuell
          • Tags
          • Ungelesen 0
          • Kategorien
          • Unreplied
          • Beliebt
          • GitHub
          • Docu
          • Hilfe