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. Mittels einer Funktion einem Objekt einen Wert mit setState zuweisen

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    12
    1
    286

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

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

Mittels einer Funktion einem Objekt einen Wert mit setState zuweisen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 3 Kommentatoren 2.0k Aufrufe
  • Ä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.
  • G Offline
    G Offline
    George_Best
    schrieb am zuletzt editiert von
    #1

    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 Antwort Letzte Antwort
    0
    • frankjokeF Offline
      frankjokeF Offline
      frankjoke
      schrieb am zuletzt editiert von
      #2

      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!

      Frank,

      NUC's, VM's und Raspi's unter Raspian, Ubuntu und Debian zum Testen.
      Adapter die ich selbst beigesteuert habe: BMW, broadlink2, radar2, systeminfo, km200, xs1 und einige im Anmarsch!

      1 Antwort Letzte Antwort
      0
      • G Offline
        G Offline
        George_Best
        schrieb am zuletzt editiert von
        #3

        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 Antwort Letzte Antwort
        0
        • frankjokeF Offline
          frankjokeF Offline
          frankjoke
          schrieb am zuletzt editiert von
          #4

          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

          Frank,

          NUC's, VM's und Raspi's unter Raspian, Ubuntu und Debian zum Testen.
          Adapter die ich selbst beigesteuert habe: BMW, broadlink2, radar2, systeminfo, km200, xs1 und einige im Anmarsch!

          1 Antwort Letzte Antwort
          0
          • V Offline
            V Offline
            vw-arneth
            schrieb am zuletzt editiert von
            #5

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

            749

            Online

            32.5k

            Benutzer

            81.6k

            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