Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. English
    3. ioBroker general
    4. How to replace null with 0 using alias-manager

    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

    How to replace null with 0 using alias-manager

    This topic has been deleted. Only users with topic management privileges can see it.
    • apollon77
      apollon77 @Tomasz Nowak last edited by

      @tomasz-nowak Crashes? Logs please 🙂

      Also I would like to see the Core JSON of the created alias object because that matters (not a UI) 😉

      Go into Admin please, Objects Tab, go to that state and enable expert mode, klick on pencil on right side, in dialog "raw" and copy the json please here

      Tomasz Nowak 1 Reply Last reply Reply Quote 0
      • Tomasz Nowak
        Tomasz Nowak @apollon77 last edited by

        @apollon77

        This is JSON for an alias object:

        {
          "from": "system.adapter.admin.0",
          "user": "system.user.admin",
          "ts": 1619609676629,
          "common": {
            "name": "Scene ID",
            "role": "level",
            "type": "number",
            "read": true,
            "write": true,
            "alias": {
              "id": "zwave2.0.Node_014.Scene_Activation.sceneId",
              "read": "val == null?0:val"
            }
          },
          "native": {},
          "acl": {
            "object": 1636,
            "owner": "system.user.admin",
            "ownerGroup": "system.group.administrator",
            "state": 1636
          },
          "_id": "alias.0.Fibaro_Dimmer_1_SceneID.sceneId",
          "type": "state"
        }
        

        and this is for the source object:

        {
          "type": "state",
          "common": {
            "role": "level",
            "read": true,
            "write": true,
            "name": "Scene ID",
            "type": "number",
            "min": 1,
            "max": 255
          },
          "native": {
            "nodeId": 14,
            "valueId": {
              "commandClass": 43,
              "endpoint": 0,
              "property": "sceneId"
            }
          },
          "from": "system.adapter.zwave2.0",
          "user": "system.user.admin",
          "ts": 1619558168447,
          "_id": "zwave2.0.Node_014.Scene_Activation.sceneId",
          "acl": {
            "object": 1636,
            "state": 1636,
            "owner": "system.user.admin",
            "ownerGroup": "system.group.administrator"
          }
        }
        

        Thanks

        Tomasz Nowak 1 Reply Last reply Reply Quote 0
        • Tomasz Nowak
          Tomasz Nowak @Tomasz Nowak last edited by

          Mqtt-client crash log is here (I've created an issue out of this):
          https://github.com/Pmant/ioBroker.mqtt-client/issues/45

          tnowak created this issue in Pmant/ioBroker.mqtt-client

          closed Uncaught exception: Cannot read property 'from' of null #45

          apollon77 1 Reply Last reply Reply Quote 0
          • apollon77
            apollon77 @Tomasz Nowak last edited by

            @tomasz-nowak js-controller Version??

            Tomasz Nowak 1 Reply Last reply Reply Quote 0
            • Tomasz Nowak
              Tomasz Nowak @apollon77 last edited by

              @apollon77

              • JS-Controller version: 3.2.16
              • Node version: v12.22.1
              • Operating system: docker image @ Raspberry OS
              • all adapters in current released versions
              1 Reply Last reply Reply Quote 0
              • apollon77
                apollon77 last edited by

                Ok, jetuzt mal ganz genau: was ist der exakte wert?

                • In allen screenshots ist gar kein Wert zu sehen - auch nicht "null"
                • Der mqtt-client Adapter crasht weil der state an sich "null" ist - also NICHT "state wert ist null" sondern es gibt gar keinen state!! Nix
                • Aliasse greifen dann nicht weil Sie nur Werte mappen - bedeutet also das der resulting Alias auch "keinen Wert hat"

                Am besten dazu jetzt mal

                iobroker state get zwave2.0.Node_014.Scene_Activation.sceneId

                machen und Ausgabe posten.

                Tomasz Nowak 1 Reply Last reply Reply Quote 0
                • Tomasz Nowak
                  Tomasz Nowak @apollon77 last edited by

                  @apollon77 said in How to replace null with 0 using alias-manager:

                  Ok, jetuzt mal ganz genau: was ist der exakte wert?

                  • In allen screenshots ist gar kein Wert zu sehen - auch nicht "null"
                  • Der mqtt-client Adapter crasht weil der state an sich "null" ist - also NICHT "state wert ist null" sondern es gibt gar keinen state!! Nix
                  • Aliasse greifen dann nicht weil Sie nur Werte mappen - bedeutet also das der resulting Alias auch "keinen Wert hat"

                  Am besten dazu jetzt mal

                  iobroker state get zwave2.0.Node_014.Scene_Activation.sceneId

                  machen und Ausgabe posten.

                  Yes, no value is seen on the screenshots because there no value at all for most of the time. It gets "26" or "24" depending on number of clicks, but only for a second. Then it returns to empty / null.
                  Now, because mqtt-client can't handle this correctly, I've been trying to alias this object somehow to push it to MQTT anyway. So, I can not rewrite empty object with any custom value (such as "0" for instance)?

                  Tomasz Nowak 1 Reply Last reply Reply Quote 0
                  • Tomasz Nowak
                    Tomasz Nowak @Tomasz Nowak last edited by Tomasz Nowak

                    Thats strange:

                    8ab9a02c-3dbe-4017-9d17-a043a51690fb-image.png

                    And I still see this object in ioBroker admin panel

                    paul53 1 Reply Last reply Reply Quote 0
                    • apollon77
                      apollon77 last edited by apollon77

                      Ok nicht englishc.

                      Nicht Dinge vermischen!!

                      Es gibt Objekte - das siehst Du im Admin. Und Objekte haben (vielleicht) einen Wert. Ein Wert kann da sein und einen value haben und der Wert kann auch NICHT da sein (weil nie gesetzt wurde, weil expired oder weil gelöscht.

                      Also: Jetzt wieder zwave2 Frage ... warum existiert der state nicht?

                      Tomasz Nowak 1 Reply Last reply Reply Quote 0
                      • Tomasz Nowak
                        Tomasz Nowak @apollon77 last edited by

                        @apollon77

                        That issue I've also reported here 🙂
                        https://github.com/AlCalzone/ioBroker.zwave2/issues/597

                        tnowak created this issue in AlCalzone/ioBroker.zwave2

                        closed Scene_Activation.sceneId null value seems to be crashing mqtt-client #597

                        apollon77 1 Reply Last reply Reply Quote 0
                        • apollon77
                          apollon77 @Tomasz Nowak last edited by

                          @tomasz-nowak ;üsste man umformulieren!

                          Wie gesagt der crash ist ein Fehler in mqtt-client! Die Frage an zwave2 ist warum der state gelöscht wird

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

                            @tomasz-nowak
                            If the state expires after a second, use a script:

                            on({id: 'zwave2.0.Node_014.Scene_Activation.sceneId'}, function(dp) {
                                setState('0_userdata.0.Fibaro_Dimmer_1_SceneID.sceneId', dp.state.val, true);
                                setTimeout(function() {
                                    setState('0_userdata.0.Fibaro_Dimmer_1_SceneID.sceneId', 0, true);
                                }, 1000);
                            });
                            
                            Tomasz Nowak 1 Reply Last reply Reply Quote 1
                            • Tomasz Nowak
                              Tomasz Nowak @paul53 last edited by Tomasz Nowak

                              I've never used Javascript in ioBroker, but I have installed Javascript adapter now, created that channel and object under 0_userdata.0 and......
                              WOW, it works as it should !!!!!!!!!!!!
                              I get 26 and 24 values on 1- and 2-click and then the objects turns to 0. And it works with mqtt-client putting it to the broker just fine:

                              9be4e581-c53e-4147-a0ce-0a7deb513310-image.png

                              Thank you @paul53 for this quick solution! 🙌

                              I hope mqtt-client (and probably zwave2) adapters will be address with this issue in the future, but for now I may switch my lights again!

                              AlCalzone 1 Reply Last reply Reply Quote 0
                              • AlCalzone
                                AlCalzone Developer @Tomasz Nowak last edited by

                                @tomasz-nowak sagte in How to replace null with 0 using alias-manager:

                                and probably zwave2

                                I can only repeat myself: This is not a problem in zwave2. It just uses the expire feature for states which mqtt-client doesn't handle correctly.

                                Tomasz Nowak paul53 2 Replies Last reply Reply Quote 1
                                • Tomasz Nowak
                                  Tomasz Nowak @AlCalzone last edited by Tomasz Nowak

                                  Yes, that's true.

                                  And for the record, this issue (with Fibaro sceneId) is totally solved with two PR's to mqtt-client adapter proposed by @AlCalzone (#46 & #47) and merged by @apollon77

                                  You guys are amazing!

                                  1 Reply Last reply Reply Quote 1
                                  • paul53
                                    paul53 @AlCalzone last edited by

                                    @alcalzone sagte: It just uses the expire feature for states

                                    Wozu ist ein Datenpunkt ohne Zustand gut? Bringt es irgend einen Vorteil, state.expire zu nutzen?

                                    AlCalzone apollon77 2 Replies Last reply Reply Quote 0
                                    • AlCalzone
                                      AlCalzone Developer @paul53 last edited by

                                      @paul53 Im vorliegenden Fall handelt es sich um Events, die eigentlich nur exakt in dem Moment, in dem sie empfangen werden, eine Bedeutung haben (z.B. kurzer Knopfdruck). Damit man trotzdem sowohl darauf reagieren kann, als auch im Admin etwas sieht, habe ich mich entschieden, diese für jeweils 1 Sekunde im State zu speichern.

                                      Expire macht diese Funktion recht praktisch, weil sich ioBroker bzw. die Datenbank dann ums Timeout kümmert und man nicht selbst jeden State tracken muss.
                                      Das Zurücksetzen funktioniert so auch dann noch, wenn innerhalb der Sekunde der Adapter beendet wird.

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

                                        @paul53 Naja Formal ist es ein Unterschied (auf einer reinen Datenebene) ob ein State einen Wert hat - und ja formal ist auch "null" ein Wert der eine spezifische Bedeutung haben kann. Damit braucht es eine Abgrenzung zu "es ist kein Wert da" und das ist genau der Fall hier.

                                        Auch das zurücksetzen von Werten (einige Adapter machen bei "Button" States die an sich immer nur auf true getriggert werden extra timeouts damit der Button wieder auf false zurückgesetzt wird (weil User das gern in Visus so haben wollen ... no offense 😉 ) Wenn aber jetzt der Adapter beendet wird oder das Skript nicht mehr läuft bleibt das halt auf true stehen.

                                        Mit expires kann du den Wert automatisiert "clearen" weil das in der Verantwortung der Datenbank liegt (File-DB bzw Redis sorgt dafür)

                                        Mit expires kann man auch durchaus Überwachungen bauen. Zum Beispiel funktionieren die wie system.adapter.alive so, dass diese alle 15s neu gesetzt werden mit einem expire von 30s oder so. So lange also der prozess läuft expired das nie weil es immer neu gesetzt wird.
                                        Wenn jetzt der Adater komisch hängenbleibt, sodass er nicht crasht aber auch nicht regelmässig alive setzen kann wird der state expiren ... das registriert der Controller und reragiert durch kill des prozesses und neustart ...

                                        Also es gibt durchaus sinnvolle Anwendungsformen.

                                        Die die @AlCalzone beschrieben hat könnte man für alle buttons nutzen (wenn es mit alles visus und der User erwartung kompatibel wäre 😉 )

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

                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        931
                                        Online

                                        31.9k
                                        Users

                                        80.1k
                                        Topics

                                        1.3m
                                        Posts

                                        9
                                        25
                                        2397
                                        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