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 @smile last edited by

      @smile Aber wenn ich mir die Sensorik so durchschaue sind das alles ganz normale Sensoren die auch einzeln erhältlich sind und die auch bei mir zum Teil verbaut sind.

      PMS5003 - ca 25 € - Feinstaub PM1, 2,5, 10
      BME680 - ca. 3 € - Temp., Druck, Feuchte, VOC, CO2
      Xadow (Grove) Mutichannel Gas Sensor - ca. 40 € - für verschiedene andere Gase
      WemosD1 - ca. 3 € - als Basis der ganzen Geschichte mit Tasmota bespielt.

      Dazu kannst du dir aus der ganzen Liste noch deine Lieblingssensoren (Genauigkeit) auswählen:
      https://tasmota.github.io/docs/Supported-Peripherals/

      smile 1 Reply Last reply Reply Quote 0
      • haselchen
        haselchen Most Active @Chaot last edited by haselchen

        @Chaot
        @paul53
        @fastfoot

        Eigentlich genau das, was ich gesucht habe.
        Ich bekomme aus meinem Regensensor ein paar Werte. Ich will nur den Regenerkennungswert ON oder OFF haben.

        {"idx":10,"RSSI":10,"command":"switchlight","switchcmd":"Off"}
        

        Script sieht so aus:

        //Script zur Zerlegung der JSON Daten in einzelne Datenpunkte
        //Idee: Chaot
        // Umsetzung: paul53
         
        var json = "mqtt.0.Wetterstation.in"/*Regenerkennung*/;
        var Switch = "javascript.0.Wetterstation.Regenerkennung"/*AN oder AUS*/;
        
        
        on(json, function(dp) {
           var obj = JSON.parse(dp.state.val);
           setState(Switch, parseFloat(obj.switchcmd));
        });
        

        Datenpunkt ist angelegt als Logikwert.
        Fehlermeldung im Log und Datenpunkt ist leer.

        2020-11-03 13:08:30.193 - warn: javascript.0 (18363) Wrong type of javascript.0.Wetterstation.Regenerkennung: "number". Please fix, while deprecated and will not work in next versions.
        2020-11-03 13:08:30.194 - warn: javascript.0 (18363) at Object. (script.js.Regenerkennung:11:4)
        

        d10f3f4e-8964-495a-89c3-8493dcdd80c8-image.png

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

          @haselchen sagte:

          Datenpunkt ist angelegt als Logikwert.

          Dann:

             setState(Switch, obj.switchcmd == "On", true);
          
          haselchen 1 Reply Last reply Reply Quote 0
          • haselchen
            haselchen Most Active @paul53 last edited by haselchen

            @paul53

            Geändert, aber trotzdem erscheint kein on oder off im Datenpunkt 😞

            //Script zur Zerlegung der JSON Daten in einzelne Datenpunkte
            //Idee: Chaot
            // Umsetzung: paul53
             
            var json = "mqtt.0.Wetterstation.in"/*Regenerkennung*/;
            var Switch = "javascript.0.Wetterstation.Regenerkennung"/*AN oder AUS*/;
            
            
            on(json, function(dp) {
               var obj = JSON.parse(dp.state.val);
               setState(Switch, obj.switchcmd == "On", true);
            });
            
            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @haselchen last edited by paul53

              @haselchen sagte:

              trotzdem erscheint kein on oder off im Datenpunkt

              Ein Datenpunkt vom Typ "Logikwert" kennt nur false und true.
              Wenn Du "On" oder "Off" haben möchtest, muss der Datenpunkt vom Typ "Zeichenkette" sein.

              haselchen 1 Reply Last reply Reply Quote 0
              • haselchen
                haselchen Most Active @paul53 last edited by

                @paul53

                Und wie bekomme ich das jetzt hin, dass dort der Wert aus dem Json erscheint (On,Off)?

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

                  @haselchen sagte:

                  Wert aus dem Json erscheint (On,Off)?

                  Datenpunkt-Typ ändern in "Zeichenkette" und

                     setState(Switch, obj.switchcmd, true);
                  
                  haselchen 1 Reply Last reply Reply Quote 1
                  • haselchen
                    haselchen Most Active @paul53 last edited by

                    @paul53

                    Schon der Hammer, wie Du das so aus dem Ärmel schüttelst.
                    Noch eine Verständnisfrage, wenn ich den Datenpunkt im Blockly triggern will, ist wahrscheinlich true oder false doch am Sinnvollsten oder?

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

                      @haselchen sagte:

                      wenn ich den Datenpunkt im Blockly triggern will, ist wahrscheinlich true oder false doch am Sinnvollsten oder?

                      Man kann innerhalb des Triggers auch einen String-Vergleich machen.

                      falls Wert == "On"
                      mache ...
                      sonst ...
                      

                      Allerdings sollte Standard sein, dass Datenpunkte, die nur zwei Zustände annehmen können, vom Typ "Logikwert" sind. Es gibt ja noch die Zustandstexte (common.states).

                      haselchen F 2 Replies Last reply Reply Quote 1
                      • haselchen
                        haselchen Most Active @paul53 last edited by

                        @paul53

                        Hab mir beide Varianten offen gehalten....true/false on/off.
                        Danke für die schnelle Hilfe.

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

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

                          Es gibt ja noch die Zustandstexte (common.states).

                          wozu dienen die genau, soweit ich verstanden habe wirken die sich nur auf die Ansicht im Objektbaum aus? Für eine entsprechende Ansicht/Ausgabe im Skript oder VIS müsste man die extra abfragen(mit getObject())?

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

                            @fastfoot sagte:

                            Für eine entsprechende Ansicht/Ausgabe im Skript oder VIS müsste man die extra abfragen(mit getObject())?

                            Ja.

                            1 Reply Last reply Reply Quote 1
                            • smile
                              smile @Chaot last edited by

                              @Chaot Klar, man kann fast immer mit diversen einzelnen China Sensoren alles günstiger hinbekommen. Wobei ich Sauerstoff Wert jetzt noch bei keinem von den von dir genannten gesehen habe.

                              Für mich ist es aber mittlerweile auch ein gewisser Luxus wenn ich weniger Geräte verwalten / einbinden / pflegen muss. Und wenn ich hier ein Gerät habe, mit einer App dazu, und einer MQTT Anbindung, eine Firmware die geupdatet wird etc.. dann ist das für mich sehr angenehm.
                              Aber natürlich wie immer: Jeder wie er lieber mag / das Budget ermöglicht.

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

                                @smile Da hast du natürlich Recht wenn du die Sensorik als AllInOne Gerät haben möchtest ist das eine wohl teure aber elegante Lösung.
                                Ich kann zwar nicht nachvollziehen was der Sauerstoffwert bringt, aber das ist an der Stelle auch nicht so wichtig.
                                Es scheint auch tatsächlich keinen wirklichen Sauerstoffsensor zu geben.

                                In meinem Fall ist es halt so, das ich die Sensoren nur dort einsetze wo sie auch gebraucht werden. Also der Feinstaubsensor oberhalb der Haustür zur Straße hin, der CO Sensor an der Heizungsanlage und diverse Luftqualitätssensoren BME680 bzw. CCS811 in den Wohnräumen.
                                Das wären dann auf die Geräte hochgerechnet so um die knapp 3000 € und das ist mir auch mit Mengenrabatt zu heftig.
                                Zudem ist dann auch der DIY Spaß weg der zum ioBroker nach meiner Meinung zwingend dazugehört 😊

                                smile 1 Reply Last reply Reply Quote 1
                                • smile
                                  smile @Chaot last edited by

                                  @Chaot Alles gut, kann ich auch total verstehen die Herangehensweise.
                                  Für mich ist das Gesamtpaket hier angenehmer alles in einem zu haben, was nicht heißt dass ich den Preis nicht auch gehoben finde.
                                  Der Hersteller hat mir gesagt dass die Summe an Sensoren wirklich nicht günstig in der Produktion sind und sie sollen auch sehr genau sein - hier ein Vergleich zu starten wird aber wohl sicherlich schwierig 😉

                                  Nundenn, trotzdem nun ein Gerät mehr welches mit iobroker wunderbar harmoniert - darüber freue ich mich 🙂

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

                                    @Chaot Hallo kanst du mir ziegen wie die Datenpunkte konfiguriert werden müßen.
                                    Ich habe auch die EMS-ESP von BBQ Kees und Lese über Domoticz aus.
                                    Würde aber gern alles im Iobroker haben.
                                    Über MQ TT habe ich die Daten im Iobroker.
                                    MfG

                                    Chaot 1 Reply Last reply Reply Quote 0
                                    • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            414
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

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