Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. setState mit eigenem Kennzeichen versehen

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    setState mit eigenem Kennzeichen versehen

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

      Hallo
      wie kann man dem Wert eines Objektes mitgeben (eigene ID) wer den Wert geschrieben hat?

      Hintergrund ist ein allgemeiner Alarm-Auslöser, der von mehreren Scripten beschrieben werden kann.
      Wenn der Alarmzustand eines Scriptes beendet ist, dann soll der Alarm nur dann gelöscht werden können,
      wenn der letzte Alarmauslöser auch von diesem Script gesetzt wurde.

      Oder gibt es hierzu eine elegantere Methode, z.B. dass der letzte Alarm angezeigt wird, bis
      alle Auslöser ihren Alarm auch wieder gelöscht haben, das wäre ideal.
      Wobei der Alarm verschiedene Typen haben soll, z.B. Alarm 4 von ID 333, Alarm 1 von ID 555 usw.

      setState("javascript.0.zigbee.0.AlarmLicht", {val: 3, ID: xyz})

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

        @hanss sagte:

        setState("javascript.0.zigbee.0.AlarmLicht", {val: 3, ID: xyz})

        Datenpunkte vom Typ "Objekt" können es aufnehmen. Aber nicht den Bezeichner val im Objekt verwenden, denn val hat in Datenpunkten eine besondere Bedeutung.

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

          @paul53
          Ich kriegs einfach nicht hin.
          Wann verwendet man denn getState und getObject?

          createState("javascript.0.zigbee.0.Test", {    
                      name: "objekt",
                      type: 'object',
              });
          
          var Alarm = {
             Wert: 0,
             Last: ''
          };
          
          Alarm.Wert = 5
          Alarm.Last = "Heizung"
          setState("javascript.0.zigbee.0.Test", Alarm)
          
          Alarm = getObject("javascript.0.zigbee.0.Test")
          var x = Alarm.Wert
          var y = Alarm.Last
          
          log("Lesen- Wert: " + x + " Last: "+y)
          
          paul53 2 Replies Last reply Reply Quote 0
          • paul53
            paul53 @hanss last edited by

            @hanss
            createState() und setState() arbeiten asynchron, was bedeutet, dass man nicht sofort den Wert mit getState() einlesen kann. Man erhält den "alten" Wert.

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

              @hanss sagte:

              Alarm = getObject("javascript.0.zigbee.0.Test")

              ist falsch. Richtig:

              Alarm = getState("javascript.0.zigbee.0.Test").val;
              

              Besser:

              on("javascript.0.zigbee.0.Test", function(dp) {
                 Alarm = dp.state.val;
                 log("Lesen- Wert: " + Alarm.Wert + " Last: " + Alarm.Last);
              });
              
              hanss 1 Reply Last reply Reply Quote 0
              • hanss
                hanss @paul53 last edited by

                @paul53 sagte in setState mit eigenem Kennzeichen versehen:

                @hanss sagte:

                Alarm = getObject("javascript.0.zigbee.0.Test")

                ist falsch. Richtig:

                Alarm = getState("javascript.0.zigbee.0.Test").val;
                

                Und wie erhalte ich dann:
                var x = Alarm.Wert // Fehlermeldung

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

                  @hanss sagte:

                  Und wie erhalte ich dann:
                  var x = Alarm.Wert // Fehlermeldung

                  Genau so. Bringt der Compiler eine Fehlermeldung, Javascript zur Laufzeit oder der Editor ? Eine rote Wellenlinie im Editor kannst Du ignorieren.

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

                    @paul53
                    zur Laufzeit: TypeError: Cannot read property 'Wert' of null

                    Es ist auch im Objekt nichts von Alarm oder Wert oder Last eingetragen:

                    {
                      "common": {
                        "name": "objekt",
                        "type": "object",
                        "unit": "",
                        "role": "state"
                      },
                      "native": {},
                      "type": "state",
                      "from": "system.adapter.javascript.0",
                      "user": "system.user.admin",
                      "ts": 1584874455228,
                      "_id": "javascript.0.zigbee.0.Test",
                      "acl": {
                        "object": 1636,
                        "state": 1636,
                        "owner": "system.user.admin",
                        "ownerGroup": "system.group.administrator"
                      }
                    }
                    
                    paul53 2 Replies Last reply Reply Quote 0
                    • paul53
                      paul53 @hanss last edited by paul53

                      @hanss sagte:

                      Cannot read property 'Wert' of null

                      Nach einem 2. Script-Start sollte der Fehler nicht mehr kommen, da dann setState() den Wert geschrieben hat.

                      Script_temp.JPG

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

                        @hanss sagte:

                        Es ist auch im Objekt nichts von Alarm oder Wert oder Last eingetragen:

                        Das darf auch nicht im statischen Objekt erscheinen, sondern im Zustand (state) des Datenpunktes.

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

                          @paul53

                          Egal wie oft ich dieses Script starte, der Fehler erscheint immer:

                          createState("javascript.0.zigbee.0.Test", {    
                                      name: "objekt",
                                      type: 'object',
                              });
                          
                          var Alarm = {
                             Wert: 0,
                             Last: ''
                          };
                          
                          Alarm.Wert = 4
                          Alarm.Last = "Heizung"
                          setState("javascript.0.zigbee.0.Test", Alarm)
                          
                          Alarm = getState("javascript.0.zigbee.0.Test").val;
                          
                          var x = Alarm.Wert
                          var y = Alarm.Last
                          
                          log("Lesen-Wert: " + x + " Last: "+y)
                          
                          paul53 2 Replies Last reply Reply Quote 0
                          • paul53
                            paul53 @hanss last edited by

                            @hanss sagte:

                            Egal wie oft ich dieses Script starte, der Fehler erscheint immer:

                            Das Script läuft unter der Instanz javascript.0 ?

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

                              @paul53
                              Jawohl

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

                                @hanss
                                Welche Javascript-Version ?

                                hanss 1 Reply Last reply Reply Quote 0
                                • OliverIO
                                  OliverIO last edited by OliverIO

                                  Wenn du der einzige bist, der den State beschreibt, dann schreib doch einfach Ein JSON Objekt mit zwei Attributen rein (Value und Source)
                                  Dann musst du nicht so viel rum experimentieren

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

                                    @paul53
                                    Node.js: v10.19.0 Script Engine 4.4.3

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

                                      @hanss sagte:

                                      Node.js: v10.19.0 Script Engine 4.4.3

                                      Damit muss es funktionieren so wie mit meiner Version 4.4.0.

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

                                        @paul53
                                        Könntest Du freundlicherweise einmal das Script von oben einmal bei Dir laufen lassen?
                                        (Egal wie oft ich dieses Script starte, der Fehler erscheint immer:)

                                        Jetzt funktionierts, ich weis aber nicht warum, ich habe nur die Kommentare aus dem
                                        Script gelöscht.

                                        Vielen, vielen Dank.

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

                                          @hanss sagte:

                                          setState("javascript.0.zigbee.0.Test", Alarm)

                                          Hat auch bei mir nicht funktioniert.

                                          setState("javascript.0.zigbee.0.Test", Alarm, true);
                                          

                                          funktioniert.

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

                                            @paul53
                                            Du hast recht, das true macht´s aus.
                                            Mann, da war die MSBasic Syntax ja richtig einfach dagegen.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            845
                                            Online

                                            32.0k
                                            Users

                                            80.5k
                                            Topics

                                            1.3m
                                            Posts

                                            setstate kennzeichen id
                                            3
                                            20
                                            631
                                            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