Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [Gelöst] Diverse Werte aus einem Objekt auslesen

    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] Diverse Werte aus einem Objekt auslesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • Chaot
      Chaot @kratzsch last edited by

      @kratzsch Das Problem ist, dass die Daten als json Tabelle über den MQTT Adapter ankommen.
      Ich zerlege die dann per Script in einzelne Datenpunkte die ich benötige und stelle die dann in VIS dar bzw schreibe die dann auch in die influx DB.

      Heizung

      //Script zur Zerlegung der JSON Daten in einzelne Datenpunkte
      //Idee: Chaot
      // Umsetzung: paul53
      
      
      var json = "mqtt.0.ems-esp.boiler_data"/*BoilerDaten*/;
      var Vorl = "javascript.0.Heizung.Vorlauf"/*Vorlauf*/;
      var Rueckl = "javascript.0.Heizung.Ruecklauf"/*Ruecklauf*/;
      var Druck = "javascript.0.Heizung.Systemdruck"/*Systemdruck*/;
      var GasAn = "javascript.0.Heizung.GasAn"/*Gas aktiv*/;
      var Leistung = "javascript.0.Heizung.Leistung"/*Leistung*/;
      var OutTemp = "javascript.0.Heizung.OutTemp"/*Aussentemperatur*/;
      var BoilTemp = "javascript.0.Heizung.BoilTemp"/*Boilertemperatur*/;
      var BurnStarts = "javascript.0.Heizung.BurnStarts"/*Brennerstarts*/;
      var LaufzeitBrenner = "javascript.0.Heizung.LaufzeitBrenner"/*LaufzeitBrenner*/;
      var LaufzeitGesamt = "javascript.0.Heizung.LaufzeitGesamt"/*LaufzeitGesamt*/;
      var LaufzeitHeizung = "javascript.0.Heizung.LaufzeitHeizung"/*LaufzeitHeizung*/;
      
      
      on(json, function(dp) {
        var obj = JSON.parse(dp.state.val);
        setState(Vorl, parseFloat(obj.curFlowTemp));
        setState(Rueckl, parseFloat(obj.retTemp)); 
        setState(Druck, parseFloat(obj.sysPress));  
        setState(GasAn, obj.burnGas);
        setState(Leistung, obj.curBurnPow);
        setState(OutTemp, obj.outdoorTemp);
        setState(BoilTemp, obj.boilTemp);
        setState(BurnStarts, obj.burnStarts);
        setState(LaufzeitBrenner, obj.burnWorkMin);   
        setState(LaufzeitGesamt, obj.UBAuptime);
        setState(LaufzeitHeizung, obj.heatWorkMin);
      });
      

      Warmwasser:

      var json = "mqtt.0.ems-esp.boiler_data_ww"/*BoilerDaten*/;
      var WWist = "javascript.0.Heizung.WarmwasserIst"/*Warmwasser Ist*/;
      var WWsoll = "javascript.0.Heizung.WarmwasserSoll"/*Warmwasser Soll*/;
      var WWAn = "javascript.0.Heizung.WarmwasserAn"/*Warmwasser aktiv*/;
      var WWFlow = "javascript.0.Heizung.WarmwasserDurchfluss"/*Warmwasser Durchfluss*/;
      var LaufzeitWW = "javascript.0.Heizung.LaufzeitWW"/*LaufzeitWW*/;
      
      on(json, function(dp) {
        var obj = JSON.parse(dp.state.val);
        setState(WWist, parseFloat(obj.wWCurTemp));
        setState(WWAn, obj.wWActivated);
        setState(WWFlow, obj.wWCurFlow);   
        setState(WWsoll, parseFloat(obj.wWSelTemp));
        setState(LaufzeitWW, obj.wWWorkM);
      });
      

      Die Datenpunkte musst du dir manuell anlegen. Entsprechend kannst du sie dann dorthin legen wo sie dir am liebsten sind und du sie schnell erreichst.
      Normalerweise würde ich sie in den Ordner 0_userdata.0 legen, der ja dafür auch vorgesehen ist. Aber als die Scripte entstanden sind gab es diesen Ordner noch nicht und ich habe noch keine Zeit/Lust gefunden meine Scripte und die VIS entsprechend umzuschreiben.

      K 1 Reply Last reply Reply Quote 0
      • K
        kratzsch @Chaot last edited by

        @Chaot Hallo und vielen dank für die schnelle Antwort.
        Wo ich die datenpunkte anlege habe ich schon heraus gefunden. Aber wie mussen die Datenpunkte Konfiguriert werden. Das bekomme ich noch nicht hin.Vielicht kannst du image
        vom Datenpunkten senden .
        Vielen Dank im voraus.

        Chaot 1 Reply Last reply Reply Quote 0
        • Chaot
          Chaot @kratzsch last edited by

          @kratzsch Den Datenpunkt legst du entsprechend der Datenart an.
          Also der Datenpunkt "javascript.0.Heizung.Systemdruck" beispielsweise ist eine Zahl mit bar als Einheit.
          Type - number
          Unit - bar
          min -
          max - 3

          K 1 Reply Last reply Reply Quote 0
          • K
            kratzsch @Chaot last edited by

            @Chaot Nochmal Danke Datenpungt habe ich angelegt dein Script übernommen aber leider werden keine werde in denn Datenpunkt geschrieben.
            Ich habe woll noch einen Fehler denn ich noch nicht gefunden habe.
            Unbenannt.PNG

            Unbenannt1.PNG
            Vielicht kannst du hier noch einen Fehler erkennen.

            Chaot paul53 2 Replies Last reply Reply Quote 0
            • Chaot
              Chaot @kratzsch last edited by

              @kratzsch erste Zeile:
              mAtt.0.... anstelle von mQtt.0

              K 1 Reply Last reply Reply Quote 0
              • K
                kratzsch @Chaot last edited by

                @Chaot Danke aber ich muss leider wieder nach fehlern suchen klapt noch nicht

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

                  @kratzsch sagte:

                  Fehler erkennen.

                  Laut Bild:

                  const OutTemp = '0_userdata.0.javascript.0.Heizung.OutTemp';
                  
                  1 Reply Last reply Reply Quote 0
                  • Chaot
                    Chaot @kratzsch last edited by Chaot

                    @kratzsch Ist der Wert den du abfragen willst überhaupt in der json drin? Die Heizungen liefern alle ganz unterschiedliche Werte, je nach Modell.
                    Versuche doch mal Druck oder Vorlauftemperatur abzufragen.
                    Stimmt der Datenpunkt aus der json auch überein oder hast du von mir die Namen übernommen? Auch hier kann es Unterschiede geben.
                    Du könntest ja man die json hier posten damit man eventuell das Script entsprechend entwerfen kann.
                    Bitte keinen Screenshot sondern in Code Tags packen.

                    @paul53 Das ist mir ja gar nicht aufgefallen. Logisch das das nicht gehen kann.

                    K 1 Reply Last reply Reply Quote 0
                    • K
                      kratzsch @Chaot last edited by

                      @Chaot said in [Gelöst] Diverse Werte aus einem Objekt auslesen:

                      Code Tags

                      Die Werte die ich abfragen möchte stehen im Mqtt Adapter. Wie das mit den Code Tags geht weis ich leider nicht.
                      Ich bin dabei mir vieles anzueignen da ich jetzt in Rente bin und eine beschäftigung brauche.
                      Allso hier noch mal ein Screenshot leider.Aber vielicht möchte ich etwas machen das nicht möglich ist.Unbenannt3.PNG
                      Unbenannt4.PNG

                      paul53 Chaot 2 Replies Last reply Reply Quote 0
                      • paul53
                        paul53 @kratzsch last edited by paul53

                        @kratzsch sagte:

                        Wie das mit den Code Tags geht weis ich leider nicht.

                        Oben </> anklicken und dann den Text (Code, Logs) hinein kopieren.

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

                          @paul53 Also ich bin schon sehr überrascht über eure hielfbereitschaft das ist einfach Klasse.
                          Und hier noch die Daten die in Mqtt geschrieben werden als beispiel die Boiler Daten.```
                          {"heatingActive":"off","tapwaterActive":"off","wWComfort":"Hot","wWSelTemp":60,"wWSetTemp":60,"wWDisinfectionTemp":70,"selFlowTemp":31,"selBurnPow":100,"curBurnPow":0,"pumpMod":100,"wWType":"buffer","wWChargeType":"charge pump","wWCircPump":"on","wWCircPumpMode":"continuous","wWCirc":"on","outdoorTemp":9.1,"wWCurTemp":58.2,"wWCurFlow":0,"curFlowTemp":31,"boilTemp":31,"wwStorageTemp1":58.2,"wWActivated":"on","wWOneTime":"off","wWDisinfecting":"off","wWCharging":"off","wWRecharging":"off","wWTempOK":"on","wWActive":"off","burnGas":"off","flameCurr":0,"heatPump":"on","fanWork":"off","ignWork":"off","wWHeat":"off","heatingActivated":"on","heatingTemp":48,"pumpModMax":100,"pumpModMin":100,"pumpDelay":7,"burnMinPeriod":10,"burnMinPower":0,"burnMaxPower":100,"boilHystOn":-6,"boilHystOff":6,"wWStarts":13087,"wWWorkM":65127,"UBAuptime":6548566,"burnStarts":112008,"burnWorkMin":389687,"heatWorkMin":324763,"serviceCode":"0Y","serviceCodeNumber":0}

                          Hier mein versuchs Script
                          

                          var json = "mqtt.0.ems-esp.boiler_data"/BoilerDaten/;
                          var OutTemp = "javascript.0.Heizung.OutTemp"/Aussentemperatur/;
                          var BoilTemp = "javascript.0.Heizung.BoilTemp"/Boilertemperatur/
                          var Vorl = "javacript.0.Heizung.Vorlauf"/Vorlauf/;
                          var Activehet = "javacript.0.Heizung.activehet"/Activ/;

                          on(json, function(dp) {
                          var obj = JSON.parse(dp.state.val);
                          setState(OutTemp, obj.outdoorTemp);

                          });

                          1 Reply Last reply Reply Quote 0
                          • Chaot
                            Chaot @kratzsch last edited by

                            @kratzsch
                            Du hast in der Zeile 2,3 und 4 die Position der Datenpunkte angegeben:

                            'javascript.0.Heizung.OutTemp'
                            

                            Laut deinem Bild darüber mit den von dir angelegten Datenpunkten sind die aber bei

                            '0_userdata.0.javascript.0.Heizung.OutTemp'
                            

                            Also entweder die Datenpunkte richtig anlegen und dann das Script an die richtige Stelle verweisen, oder das Script jetzt an die aktuellen Datenpunkte verweisen.
                            Aber ich würde das ehrlich gesagt so machen das es dauerhaft so bleiben kann. Also den Ordner javascript.0 den du unter 0_userdata.0 angelegt hast wieder löschen und dort mit der richtigen oder sinnvollen Ordner und Datenstruktur anfangen.

                            1. Unter 0_userdate.0 einen neuen Ordner anlegen - Heizung wäre eine gute Wahl.
                            2. Unter dem neuen Ordner Heizung die benötigten Datenpunkte erstellen.
                            3. im Script die Zeilen 2 bis 4 auf diese Datenpunkte verweisen
                            '0_userdata.0.Heizung.******'
                            

                            Dann sollte das klappen.

                            K 1 Reply Last reply Reply Quote 0
                            • K
                              kratzsch @Chaot last edited by

                              @Chaot So ich habe es nochmal versucht leider ohner erfolg.Hier noch mal mein Script und der Datenpunkt.

                              var json = "mqtt.0.ems-esp.boiler_data"/*BoilerDaten*/;
                              var outdoorTemp = "0_userdata.0.Heizung.outdoorTemp"/*outdoorTemp*/;
                              
                              
                              
                              on(json, function(dp) {
                                 var obj = JSON.parse(dp.state.val);
                              setState(outdoorTemp, obj.outdoorTemp);
                              
                              });```
                              Objekt bearbeiten 0_userdata.0.Heizung.outdoorTemp
                              Name
                              Typ
                              
                                  Allgemein
                                  Nativ
                                  Zugriffskontrolle
                                  Weitere (nur lesend)
                                  Raw (nur Experten)
                              
                              Rolle
                              Art
                              Beschreibung
                              Maßeinheit
                              minimaler Wert 
                              
                              paul53 2 Replies Last reply Reply Quote 0
                              • paul53
                                paul53 @kratzsch last edited by paul53

                                @kratzsch sagte:

                                on(json, function(dp) { 
                                   var obj = JSON.parse(dp.state.val); 
                                   setState(outdoorTemp, obj.outdoorTemp);
                                });
                                

                                Es wird nur getriggert, wenn sich der Inhalt des JSON-Datenpunktes ändert. Vorher passiert nichts.

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

                                  @paul53 Ok Danke schön aber ich denke das ich auf denn richtigen weg bin dank deiner Grossen Hielfe,

                                  Chaot 1 Reply Last reply Reply Quote 0
                                  • Chaot
                                    Chaot @kratzsch last edited by

                                    @kratzsch Kleiner Tip: Den MQTT Adapter kurz anhalten und neu starten. Dann sollte der Datenpunkt neu geschrieben werden.

                                    K 1 Reply Last reply Reply Quote 0
                                    • K
                                      kratzsch @Chaot last edited by

                                      @Chaot Leider immer noch nicht geklappt.Muss für die Zeile 1 auch ein datenpunkt erstellt werden.

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

                                        @kratzsch sagte:

                                        var json = "mqtt.0.ems-esp.boiler_data"/BoilerDaten/;

                                        Wenn ich das mit dem Bild oben vergleiche, ist die ID falsch. Laut Bild richtig:

                                        var json = "mqtt.0.boiler_data";
                                        
                                        Chaot 1 Reply Last reply Reply Quote 0
                                        • Chaot
                                          Chaot @paul53 last edited by

                                          @paul53 sagte in [Gelöst] Diverse Werte aus einem Objekt auslesen:

                                          var json = "mqtt.0.boiler_data";

                                          Verstehe ich jetzt auch nicht warum das ohne Ordnerstruktur da liegt, aber du hast Recht!

                                          K 1 Reply Last reply Reply Quote 0
                                          • K
                                            kratzsch @Chaot last edited by

                                            @Chaot Hallo
                                            Einmal hat es geklappt und der Wert wurde geladen aber leider nur einmal.Hier der Log Eintrag.``
                                            code_2020-11-23 20:05:23.744 - info: history.0 (799) enabled logging of 0_userdata.0.Heizung.outdoorTemp, Alias=false
                                            text

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            820
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            ventilation
                                            7
                                            57
                                            15269
                                            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