Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. JSON, Zigbee und ein undefined

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    JSON, Zigbee und ein undefined

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

      @mrzee sagte:

      var obj = JSON.parse(dp.state.val).ZbReceived.Vibration_Sensor;
      setState(Modus, obj.AqaraVibrationMode, true);
      
      M 2 Replies Last reply Reply Quote 1
      • M
        mrzee @paul53 last edited by

        @paul53
        DANKE!!! Das hat mir den Tag gerettet!!

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

          @paul53
          Kommando zurück... der State wird zwar gesetzt, aber ich bekomme immer noch verschiedene "Error" - liegt das daran, dass ich nur ein einziges Element aus dem String verwende?

          Error in callback: TypeError: Cannot read property 'AqaraVibrationMode' of undefined
          
          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @mrzee last edited by paul53

            @mrzee sagte:

            liegt das daran, dass ich nur ein einziges Element aus dem String verwende?

            Nein. Anscheinend ist die Struktur des Datenpunkt-Wertes nicht immer gleich. Um das zu testen, ergänze um eine Log-Ausgabe. Um den Error-Log zu vermeiden prüfe:

            if(obj) setState(Modus, obj.AqaraVibrationMode, true);
            else log(dp.state.val, 'warn');
            
            M 1 Reply Last reply Reply Quote 0
            • M
              mrzee @paul53 last edited by mrzee

              @paul53

              Wir nähern uns dem ganzen an - ich habe einen Fehler gemacht: Ich wollte keinen booleschen Wert, sondern wirklich die Übernahme des Wertes aus dem JSON String (vibrate, tilt, drop) - setze ich das "true" ein, sind die Fehler weg.

              Aber ja, die Werte sind nicht immer gleich - in den gleichen Datenpunkt werden auch die Keep Alive Meldungen der Bridge geschrieben, da steht dann was völlig anderes in dem String.

              paul53 3 Replies Last reply Reply Quote 0
              • paul53
                paul53 @mrzee last edited by

                @mrzee sagte:

                die Werte sind nicht immer gleich - in den gleichen Datenpunkt werden auch die Keep Alive Meldungen der Bridge geschrieben, da steht dann was völlig anderes in dem String.

                Ist der Anfang immer gleich ?

                {"ZbReceived":{"Vibration_Sensor":{
                
                1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @mrzee last edited by paul53

                  @mrzee sagte:

                  wirklich die Übernahme des Wertes aus dem JSON String (vibrate, tilt, drop)

                  Das macht setState(Modus, obj.AqaraVibrationMode, true).

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

                    @mrzee sagte:

                    steht dann was völlig anderes in dem String.

                    Wenn ein beliebiger JSON-String enthalten sein kann, dann muss man alle Teile prüfen:

                    var obj = JSON.parse(dp.state.val);
                    if (obj && obj.ZbReceived && obj.ZbReceived.Vibration_Sensor) setState(Modus, obj.ZbReceived.Vibration_Sensor.AqaraVibrationMode, true);
                    
                    M 1 Reply Last reply Reply Quote 0
                    • M
                      mrzee @paul53 last edited by

                      @paul53

                      Danke dir, ich war die Tage unterwegs und bin noch nicht zum Testen gekommen. Ich hoffe, ich bekomme es die Tage hin.

                      Z 1 Reply Last reply Reply Quote 0
                      • Z
                        Zerosub @mrzee last edited by

                        @mrzee
                        wie ist denn hier dein Stand?
                        Ich bin ebenfalls seit geraumer Zeit mit der Tasmota ZbBridge unterwegs. Erstaunlich wie zuverlässig das mit der Sonoff Bridge funktioniert. Auch die Rechweite ist ziemlich gut.

                        Leider habe ich das gleiche Problem:
                        Die Werte im Sonoff Adapter sind nicht zuverlässig und werden auch bei einem KeepAlive verändert ...

                        Konntest Du mit der MQTT Methode etwas erreichen?
                        ich habe ziemlich nette Schalter gekauft (Aquara WXKG02LM) welche folgenden String per MQTT schicken:
                        {"ZbReceived":{"0x282B":{"Device":"0x282B","MultiInValue":1,"Endpoint":3,"LinkQuality":105}}}

                        Multivalue: ob kurz (0), lang(1) oder double(2) gedrückt wurde
                        Endpoint: Schalter1 (1) , Schalter2 (2) oder beide (3)

                        gibt es keine generelle Möglichkeit die MQTT Strings die rein kommen zu parsen?

                        1 Reply Last reply Reply Quote 0
                        • Z
                          zweigelt99 last edited by

                          @zerosub @paul53

                          Hallo, bin ebenfalls am zerlegen eines Json-String und bekomme es einfach nicht hin.

                          Hier mein String:

                          {"ZbReceived":{" Taster_allesaus":{"Device":"0x17EB","Name":" Taster_allesaus","0006!02":"","Power":2,"Endpoint":1,"LinkQuality":60}}}
                          

                          Hier mein Code:

                          var json = "mqtt.0.Heurigen.zbbridge.tele.17EB.SENSOR"/*Mqtt_string vom tasmota zbbridge*/;
                          
                          var Taster = "0_userdata.0.Heurigen.zbbridge.Taster_allesaus"/*1 oder 2*/;
                          
                            on(json, function(dp) {
                             var obj = JSON.parse(dp.state.val).ZbReceived.Taster_allesaus;
                             setState(Taster, obj.Power);
                          });
                          

                          Hier noch die Fehlermeldung aus dem Log:

                          ~~javascript.0	2021-02-13 19:37:15.766	error	(1182) at processImmediate (internal/timers.js:461:21)
                          javascript.0	2021-02-13 19:37:15.766	error	(1182) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5384:37)
                          javascript.0	2021-02-13 19:37:15.766	error	(1182) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:472:25)
                          javascript.0	2021-02-13 19:37:15.765	error	(1182) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1055:38)
                          javascript.0	2021-02-13 19:37:15.765	error	(1182) at Object.<anonymous> (script.js.Heurigen_zbbridge.Taster_allesausv3:15:25)
                          javascript.0	2021-02-13 19:37:15.764	error	(1182) Error in callback: TypeError: Cannot read property 'Power' of undefined~~
                          

                          Kann mir bitte jemand sagen wo der Fehler liegt?

                          Vielleicht hat auch jemand einen Link wie man an die Tasmota Zigbeebridge Befehle über den iobroker senden kann. Das ganze Thema scheint ja noch sehr jung zu sein.

                          Vielen Dank

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

                            @zweigelt99 sagte in JSON, Zigbee und ein undefined:

                            ved":{" Tast

                            Da ist ein Leerzeichen.
                            var obj = JSON.parse(dp.state.val).ZbReceived.[" Taster_allesaus"];

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

                              @fastfoot
                              Danke das wars.

                              1 Reply Last reply Reply Quote 0
                              • Z
                                zweigelt99 last edited by

                                Habe jetzt ein Heizkörperthermostat in iobroker eingebunden. Daten kommen auch am Datenpunkt richtig an.
                                Allerdings kommt auch eine Fehlermeldung.

                                javascript.0	2021-02-14 10:50:46.085	error	(1186) script.js.Heurigen_zbbridge.Therm_Tisch3: setForeignState: undefined is not a valid state value
                                javascript.0	2021-02-14 10:50:46.085	warn	(1186) at processImmediate (internal/timers.js:461:21)
                                javascript.0	2021-02-14 10:50:46.085	warn	(1186) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5384:37)
                                javascript.0	2021-02-14 10:50:46.085	warn	(1186) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:472:25)
                                javascript.0	2021-02-14 10:50:46.084	warn	(1186) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1055:38)
                                javascript.0	2021-02-14 10:50:46.084	warn	(1186) at Object.<anonymous> (script.js.Heurigen_zbbridge.Therm_Tisch3:19:5)
                                javascript.0	2021-02-14 10:50:46.084	warn	(1186) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1358:20)
                                javascript.0	2021-02-14 10:50:46.083	warn	(1186) You are assigning a undefined to the state "0_userdata.0.Heurigen.zbbridge.Thermostat.Tisch3_Ventilstellung" which expects a number. Please fix your code to use a number or change the state typ
                                

                                Kann ich diese Ignorieren?

                                Code

                                var json = "mqtt.0.Heurigen.zbbridge.tele.796D.SENSOR"/*Mqtt_string vom tasmota zbbridge*/;
                                
                                var TempIst = "0_userdata.0.Heurigen.zbbridge.Thermostat.Tisch3_Ist"/*Datenpunkt von0.0_userdata*/;
                                var TempSoll = "0_userdata.0.Heurigen.zbbridge.Thermostat.Tisch3_Soll";
                                var Motorstellung = "0_userdata.0.Heurigen.zbbridge.Thermostat.Tisch3_Ventilstellung";
                                
                                  on(json, function(dp) {
                                   var obj = JSON.parse(dp.state.val).ZbReceived.Therm_Tisch_3;/*Hier Name von ZigBee Gerät Eintregen*/
                                   setState(TempIst, obj.LocalTemperature);
                                    setState(TempSoll, obj.OccupiedHeatingSetpoint);
                                    setState(Motorstellung, obj.PIHeatingDemand);
                                });
                                
                                
                                paul53 1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @zweigelt99 last edited by paul53

                                  @zweigelt99 sagte: You are assigning a undefined to the state "0_userdata.0.Heurigen.zbbridge.Thermostat.Tisch3_Ventilstellung" which expects a number.

                                  obj.PIHeatingDemand existiert offenbar nicht.

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

                                    @paul53

                                    Ok, offensichtlich schickt das Thermostat nicht immer die selbe Info, wie kann ich dann die Fehlemeldung vermeiden?
                                    Weiter oben steht das Problem schon beschrieben aber irgendwie blicke ich nicht ganz durch.

                                    Die Fehlermeldung kommt bei allen 3 Datenpunkten.

                                    {"ZbReceived":{"Therm_Tisch_3":{"Device":"0x796D","Name":"Therm_Tisch_3","OccupiedHeatingSetpoint":20,"Endpoint":1,"LinkQuality":26}}}
                                    
                                    {"ZbReceived":{"Therm_Tisch_3":{"Device":"0x796D","Name":"Therm_Tisch_3","CurrentTemperatureSetPoint":20.5,"Endpoint":1,"LinkQuality":31}}}
                                    
                                    {"ZbReceived":{"Therm_Tisch_3":{"Device":"0x796D","Name":"Therm_Tisch_3","PIHeatingDemand":0,"Endpoint":1,"LinkQuality":31}}}
                                    
                                    paul53 1 Reply Last reply Reply Quote 0
                                    • paul53
                                      paul53 @zweigelt99 last edited by paul53

                                      @zweigelt99 sagte: wie kann ich dann die Fehlemeldung vermeiden?

                                          if(obj.LocalTemperature) setState(TempIst, obj.LocalTemperature, true);
                                          if(obj.CurrentTemperatureSetpoint) setState(TempSoll, obj.CurrentTemperatureSetPoint, true);
                                          if(obj.PIHeatingDemand != undefined) setState(Motorstellung, obj.PIHeatingDemand, true);
                                      
                                      Z 1 Reply Last reply Reply Quote 0
                                      • Z
                                        zweigelt99 @paul53 last edited by

                                        @paul53

                                        Danke für die Hilfe, jetzt bin ich Fehlerfrei,

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

                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        952
                                        Online

                                        31.7k
                                        Users

                                        79.8k
                                        Topics

                                        1.3m
                                        Posts

                                        6
                                        20
                                        1255
                                        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