Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Mittels einer Funktion einem Objekt einen Wert mit setState zuweisen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Mittels einer Funktion einem Objekt einen Wert mit setState zuweisen

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

      Guten Abend zusammen,

      ich versuche gerade meine Status-Aufrufe meiner ETA-Heizung zu "modularisieren". D.h. ich möchte eine Funktion entwerfen, der als Argumente

      • IP-Adresse

      • Art des Status

      übergeben werden und ein Objekt mit Inhalt des Status (ist ein XML) zurückgibt.

      Die Funktion, der Aufruf usw. funktioniert schon sehr gut. Wenn ich dem globalen Objekt direkt in der Funktion den Status übergebe klappt es. Aber genau das will ich ja aufgrund der "Modularisierung" nicht….

      ! ````
      var parseString = require('xml2js').parseString;
      var request = require('request');
      var Test_Objekt_JS_2;
      var arr_test = [];
      var arr_test_test;
      ! var IP_Adress = '192.xxxxxx';
      var ETA_Status_Kessel = '/user/var//112/10021/0/0/12000';
      var ETA_Status_Heizkreis = '/user/var//112/10101/0/0/12090';
      ! function ETA_Status_Aufruf(IP_Adress_A, Get_Status){
      Gesamt_Get=(['http://',IP_Adress_A,':8080', Get_Status].join(''));
      console.log(Gesamt_Get);
      request(Gesamt_Get, function (error, response, body) {
      if (!error && response.statusCode == 200) {

        parseString(body, {
              explicitArray: false,
              mergeAttrs: true
           }, 
           function (err, result) {
              if (err) {
                 log("Fehler: " + err);
              } else {
                arr_test = (JSON.stringify(result.eta));
                log(arr_test);
             // return arr_test;
              }
           });
      

      } else {

      }
      });
      //return arr_test;
      }
      setState("javascript.0.scriptEnabled.ETA-Heizung.ETA_RAW_KesselStatus", ETA_Status_Aufruf(IP_Adress, ETA_Status_Kessel));
      setState("javascript.0.scriptEnabled.ETA-Heizung.ETA_RAW_KesselStatus", ETA_Status_Aufruf(IP_Adress, ETA_Status_Kessel));

      
      Zwei Probleme habe ich dabei:
      
      1.) Wie gebe in das Objekt ("arr_test") als Ergebnis des Funktionaufrufs zurück? Meine fehlgeschlagenen Versuche sind die auskommentierten "// return arr_test"
      
      2.) Wie weiße ich das Ergebnis einem globalen Objekt (z.B. "javascript.0.scriptEnabled.ETA-Heizung.ETA_RAW_KesselStatus") zu?
      

      setState("javascript.0.scriptEnabled.ETA-Heizung.ETA_RAW_KesselStatus", ETA_Status_Aufruf(IP_Adress, ETA_Status_Kessel));

      brachte leider keinen Erfolg. :cry:
      
      Hat jemand eine Idee? Ich bin über jegliche Hilfe sehr, sehr dankbar!
      1 Reply Last reply Reply Quote 0
      • frankjoke
        frankjoke last edited by

        Der Grund liegt daran dass du den SetState in der callback vom request machen musst!

        Ansonsten wird SetState aufgerufen wenn die Daten noch nicht da sind!

        Übrigens, könntest auch meinen systeminfo-adapter (https://github.com/frankjoke/ioBroker.systeminfo) verwenden und damit die Teile auslesen und states generieren lassen 🙂

        Ach ja, im Text hast du von XML gesprochen, im source ist es JSON, egal, der systeminfo-Adapter könnte beides!

        1 Reply Last reply Reply Quote 0
        • G
          George_Best last edited by

          Vielen Dank für die Antwort.

          Ich habe jetzt die globale Variable als String der Funktion mitgegeben. Die Zuweisung setState erfolgt nun innerhalb der Funktion.

          Falls es jemand interessiert - hier der Code

          ! var parseString = require('xml2js').parseString; var request = require('request'); var Test_Objekt_JS_2; var arr_test = []; var arr_test_test; ! var IP_Adress = '192.168.178.13'; var ETA_Status_Kessel = '/user/var//112/10021/0/0/12000'; var ETA_Status_KesselStoerung = '/user/var//112/10241/0/11149/2001' //"AUS" = keine Stoerung var ETA_Status_KesselSolltemperatur = '/user/var//112/10021/0/0/12001'; var ETA_Status_KesselIsttemperatur = '/user/var//112/10021/0/0/12161'; var ETA_Status_KesselIsttemperatur_unten = '/user/var//112/10021/0/0/12300'; ! var ETA_Status_KesselVorlauf_Soll = '/user/var//112/10021/0/11121/2120'; var ETA_Status_KesselVorlauf_Soll = '/user/var//112/10021/0/11121/2121'; ! var ETA_Status_WarmWasser_Status = '/user/var//112/10111/0/0/12129'; var ETA_Status_WarmWasser_Solltemperatur = '/user/var//112/10111/0/0/12132'; var ETA_Status_WarmWasser_TemperaturSpeicherOben = '/user/var//112/10111/0/0/12271'; ! var ETA_Status_Heizkreis = '/user/var//112/10101/0/0/12090'; ! var ETA_global_var_KesselStatus = 'javascript.0.scriptEnabled.ETA-Heizung.ETA_RAW_KesselStatus'; var ETA_global_var_Heizkreis = 'javascript.0.scriptEnabled.ETA-Heizung.ETA_RAW_HeizungStatus'; ! function ETA_Status_Aufruf(IP_Adress_A, Get_Status, global_var_ETA){ Gesamt_Get=(['http://',IP_Adress_A,':8080', Get_Status].join('')); console.log(Gesamt_Get); request(Gesamt_Get, function (error, response, body) { if (!error && response.statusCode == 200) { parseString(body, { explicitArray: false, mergeAttrs: true }, function (err, result) { if (err) { log("Fehler: " + err); } else { arr_test = (JSON.stringify(result.eta)); setState(global_var_ETA, arr_test); log(arr_test); } }); } else { } }); } ! // manueller Aufruf: ETA_Status_Aufruf(IP_Adress, ETA_Status_Kessel, ETA_global_var_KesselStatus); ETA_Status_Aufruf(IP_Adress, ETA_Status_Heizkreis, ETA_global_var_Heizkreis); ! // manueller Aufruf OHNE Callback //ETA_Status_Aufruf(IP_Adress, ETA_Status_Kessel); //ETA_Status_Aufruf(IP_Adress, ETA_Status_Heizkreis); //ETA_Status_Aufruf(IP_Adress, ETA_Status_KesselStoerung); ! // Aufruf Interval 30 Minuten Intervall = setInterval(function () { ETA_Status_Aufruf(IP_Adress, ETA_Status_Kessel, ETA_global_var_KesselStatus); ETA_Status_Aufruf(IP_Adress, ETA_Status_Heizkreis, ETA_global_var_Heizkreis); }, 1800000); !

          Danke auch für den Tipp bezüglich "Systeminfo". Das muss ich mir mal ansehen.

          Hierzu noch eine Frage - der Adapter taucht ja nicht in der "offiziellen" Liste der Adapter im Reiter "Adapter" auf. Gibt es eine Übersicht o.ä. aller Adapter?

          1 Reply Last reply Reply Quote 0
          • frankjoke
            frankjoke last edited by

            Freut mich George wenn's funktioniert!

            Wegen den Adaptern, du kannst in im Systemsetu (der '*' im Admin) unter 'Aktiver Verwahrungsort' 'latest' einstellen, dan sihst du alle neuen Adapter und Versionisupdates bestehender bevor sie in die 'default'-liste aufgenommen werden.

            Ich muss noch an der Beschreibung arbeiten da der Adapter sehr viele Möglichkeiten bietet Informationen vom lokalen oder externen systemen abzufragen, habe angefangen mit dem thread http://forum.iobroker.net/viewtopic.php?f=20&t=9163

            1 Reply Last reply Reply Quote 0
            • V
              vw-arneth last edited by

              Hallo Zusammen,

              ich bin auch besitzer eines ETA ofens. Und würde auch gerne meine Daten abfragen.

              Habe viele fragen dazu. Habe leider keinen plan da ich iobroker erst seit 3 Tagen benutze.

              Wäre jemand so freundlich mir eine kurze schritt für schritt anleitung dafür zu schreiben?

              Vielen dank.

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

              Support us

              ioBroker
              Community Adapters
              Donate

              597
              Online

              31.7k
              Users

              79.8k
              Topics

              1.3m
              Posts

              3
              5
              1523
              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