Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Werte on Objekten aktualisieren sich nicht

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    208

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    7.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.7k

Werte on Objekten aktualisieren sich nicht

Werte on Objekten aktualisieren sich nicht

Scheduled Pinned Locked Moved Skripten / Logik
javascriptcommunication
8 Posts 3 Posters 609 Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    chucky
    wrote on last edited by
    #1

    Hallo zusammen
    Ich befasse mich seit kurzen mit iobroker und Javascript.
    Ich übertrage ein Word, in welchem die 16 bit’s, Zustände von Ausgängen einer SPS sind (Lampen Steckdosen usw.). In iobroker möchte ich diese nun bitweise auslesen und Objekten zuweisen, welche ich dann in der Vis darstellen kann. Einmalig funktioniert das auch, jedoch werden die Werte bei Änderungen nicht aktualisiert. Was muss ich anpassen, dass die Werte aktualisiert werden? unterstehend mein bisheriger Code.

    Besten Dank im Voraus für eure Inputs.

    var SPSOutWord_02 = getState('modbus.2.inputRegisters.30003_SPSEingangssWord_2').val;
    
    
    //Check of Bit in Word 1 oder 0 ist
    function BitCheck(Word, Bit) {
        if ((Word >> Bit)&1)
                return 1;
            else
                return 0;}
    
    
    // Bit Check SPS Ausgang Word 2
    var word = 'QW00_'
    var schritt=0
    var schrittst
    for (schritt = 0; schritt <16; schritt ++){
        schrittst = String(schritt);
        if (schritt < 10){
               schrittst = '0' + String(schritt);}
            else {
               schrittst = String(schritt);}
    
        createState('WagoSPS.Out.'+ word + schrittst);
        setState('WagoSPS.Out.'+ word + schrittst, BitCheck(SPSOutWord_02, schritt));
    }
    
    paul53P 1 Reply Last reply
    0
    • C chucky

      Hallo zusammen
      Ich befasse mich seit kurzen mit iobroker und Javascript.
      Ich übertrage ein Word, in welchem die 16 bit’s, Zustände von Ausgängen einer SPS sind (Lampen Steckdosen usw.). In iobroker möchte ich diese nun bitweise auslesen und Objekten zuweisen, welche ich dann in der Vis darstellen kann. Einmalig funktioniert das auch, jedoch werden die Werte bei Änderungen nicht aktualisiert. Was muss ich anpassen, dass die Werte aktualisiert werden? unterstehend mein bisheriger Code.

      Besten Dank im Voraus für eure Inputs.

      var SPSOutWord_02 = getState('modbus.2.inputRegisters.30003_SPSEingangssWord_2').val;
      
      
      //Check of Bit in Word 1 oder 0 ist
      function BitCheck(Word, Bit) {
          if ((Word >> Bit)&1)
                  return 1;
              else
                  return 0;}
      
      
      // Bit Check SPS Ausgang Word 2
      var word = 'QW00_'
      var schritt=0
      var schrittst
      for (schritt = 0; schritt <16; schritt ++){
          schrittst = String(schritt);
          if (schritt < 10){
                 schrittst = '0' + String(schritt);}
              else {
                 schrittst = String(schritt);}
      
          createState('WagoSPS.Out.'+ word + schrittst);
          setState('WagoSPS.Out.'+ word + schrittst, BitCheck(SPSOutWord_02, schritt));
      }
      
      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by paul53
      #2

      @chucky sagte:

      werden die Werte bei Änderungen nicht aktualisiert.

      Es fehlt der Trigger. getState() liest nur bei Skriptstart ein.

      Anmerkung: In Javascript / ioBroker verwendet man keine binären Werte (0/1), sondern boolesche Werte (false/true).

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      UncleSamU 1 Reply Last reply
      0
      • paul53P paul53

        @chucky sagte:

        werden die Werte bei Änderungen nicht aktualisiert.

        Es fehlt der Trigger. getState() liest nur bei Skriptstart ein.

        Anmerkung: In Javascript / ioBroker verwendet man keine binären Werte (0/1), sondern boolesche Werte (false/true).

        UncleSamU Offline
        UncleSamU Offline
        UncleSam
        Developer
        wrote on last edited by
        #3

        @paul53 sagte in Werte on Objekten aktualisieren sich nicht:

        Es fehlt der Trigger.

        Ein Trigger ist on() oder auch subscribe() (ist beides dasselbe).

        Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
        ♡-lichen Dank an meine Sponsoren

        C 1 Reply Last reply
        0
        • UncleSamU UncleSam

          @paul53 sagte in Werte on Objekten aktualisieren sich nicht:

          Es fehlt der Trigger.

          Ein Trigger ist on() oder auch subscribe() (ist beides dasselbe).

          C Offline
          C Offline
          chucky
          wrote on last edited by
          #4

          Hallo UncleSam und paul53

          Besten Dank für eure Rückmeldung und Hinweis.
          OK. Das bedeutet, das Programm wird nicht zyklisch durchlaufen sondern reagiert nur auf einen Trigger?

          Ich habe ein paar Beispiele mit dem Trigger gefunden. Könnt ihr mir einen Tipp geben wie ich das mit der Schlaufe aufbauen kann?

          paul53P 1 Reply Last reply
          0
          • C chucky

            Hallo UncleSam und paul53

            Besten Dank für eure Rückmeldung und Hinweis.
            OK. Das bedeutet, das Programm wird nicht zyklisch durchlaufen sondern reagiert nur auf einen Trigger?

            Ich habe ein paar Beispiele mit dem Trigger gefunden. Könnt ihr mir einen Tipp geben wie ich das mit der Schlaufe aufbauen kann?

            paul53P Offline
            paul53P Offline
            paul53
            wrote on last edited by paul53
            #5

            @chucky sagte:

            Könnt ihr mir einen Tipp geben

            Etwa so:

            const idWord2 = 'modbus.2.inputRegisters.30003_SPSEingangssWord_2';
            const path = '0_userdata.0.WagoSPS.Out.QW00_';
            
            function word2bits(word) {
                for (let schritt = 0; schritt < 16; schritt++){
                    let schrittst = String(schritt);
                    if (schritt < 10) schrittst = '0' + schrittst;
                    if(existsState(path + schrittst)) setState(path + schrittst, (word >> schritt) & 1, true);
                    else createState(path + schrittst, (word >> schritt) & 1, {type: 'number', role: 'value'});
                }
            }
            
            word2bits(getState(idWord2).val); // Skriptstart
            
            on(idWord2, function(dp) {
                word2bits(dp.state.val);
            });
            

            Aber: @paul53 sagte in Werte on Objekten aktualisieren sich nicht: Anmerkung: In Javascript / ioBroker verwendet man keine binären Werte (0/1), sondern boolesche Werte (false/true):

            const idWord2 = 'modbus.2.inputRegisters.30003_SPSEingangssWord_2';
            const path = '0_userdata.0.WagoSPS.Out.QW00_';
            
            function word2bits(word) {
                for (let schritt = 0; schritt < 16; schritt++){
                    let schrittst = String(schritt);
                    if (schritt < 10) schrittst = '0' + schrittst;
                    if(existsState(path + schrittst)) setState(path + schrittst, !!((word >> schritt) & 1), true);
                    else createState(path + schrittst, !!((word >> schritt) & 1), {type: 'boolean', role: 'indicator'});
                }
            }
            
            word2bits(getState(idWord2).val); // Skriptstart
            
            on(idWord2, function(dp) {
                word2bits(dp.state.val);
            });
            

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            C 1 Reply Last reply
            0
            • paul53P paul53

              @chucky sagte:

              Könnt ihr mir einen Tipp geben

              Etwa so:

              const idWord2 = 'modbus.2.inputRegisters.30003_SPSEingangssWord_2';
              const path = '0_userdata.0.WagoSPS.Out.QW00_';
              
              function word2bits(word) {
                  for (let schritt = 0; schritt < 16; schritt++){
                      let schrittst = String(schritt);
                      if (schritt < 10) schrittst = '0' + schrittst;
                      if(existsState(path + schrittst)) setState(path + schrittst, (word >> schritt) & 1, true);
                      else createState(path + schrittst, (word >> schritt) & 1, {type: 'number', role: 'value'});
                  }
              }
              
              word2bits(getState(idWord2).val); // Skriptstart
              
              on(idWord2, function(dp) {
                  word2bits(dp.state.val);
              });
              

              Aber: @paul53 sagte in Werte on Objekten aktualisieren sich nicht: Anmerkung: In Javascript / ioBroker verwendet man keine binären Werte (0/1), sondern boolesche Werte (false/true):

              const idWord2 = 'modbus.2.inputRegisters.30003_SPSEingangssWord_2';
              const path = '0_userdata.0.WagoSPS.Out.QW00_';
              
              function word2bits(word) {
                  for (let schritt = 0; schritt < 16; schritt++){
                      let schrittst = String(schritt);
                      if (schritt < 10) schrittst = '0' + schrittst;
                      if(existsState(path + schrittst)) setState(path + schrittst, !!((word >> schritt) & 1), true);
                      else createState(path + schrittst, !!((word >> schritt) & 1), {type: 'boolean', role: 'indicator'});
                  }
              }
              
              word2bits(getState(idWord2).val); // Skriptstart
              
              on(idWord2, function(dp) {
                  word2bits(dp.state.val);
              });
              
              C Offline
              C Offline
              chucky
              wrote on last edited by
              #6

              @paul53

              Vielen Dank für das Beispiel. Habe es soeben getestet, funktioniert einwandfrei! Habe die werte "0 und 1" durch "true und false" ersetzt. Ebenfalls "number" durch "boolean".

              Noch für mein Verständnis:
              der Funktionsaufruf in Zeile 13, ruft die Funktion bei Skript Start auf.
              Der Trigger "on" in Zeile 15, überwacht den Wert von "idword2" und ruft bei Veränderung die Funktion(in Zeile) wieder auf. Der Wert in Klammern (dp.state.val) bezieht sich auf "idWord2" von der Zeile 15?

              Ach übrigens: das Überprüfen des bestehendes Objekt mittels "existState" finde ich ein sehr elegante Lösung

              paul53P 1 Reply Last reply
              0
              • C chucky

                @paul53

                Vielen Dank für das Beispiel. Habe es soeben getestet, funktioniert einwandfrei! Habe die werte "0 und 1" durch "true und false" ersetzt. Ebenfalls "number" durch "boolean".

                Noch für mein Verständnis:
                der Funktionsaufruf in Zeile 13, ruft die Funktion bei Skript Start auf.
                Der Trigger "on" in Zeile 15, überwacht den Wert von "idword2" und ruft bei Veränderung die Funktion(in Zeile) wieder auf. Der Wert in Klammern (dp.state.val) bezieht sich auf "idWord2" von der Zeile 15?

                Ach übrigens: das Überprüfen des bestehendes Objekt mittels "existState" finde ich ein sehr elegante Lösung

                paul53P Offline
                paul53P Offline
                paul53
                wrote on last edited by
                #7

                @chucky sagte:

                Funktionsaufruf in Zeile 13, ruft die Funktion bei Skript Start auf.

                Ja.

                @chucky sagte in Werte on Objekten aktualisieren sich nicht:

                Der Trigger "on" in Zeile 15, überwacht den Wert von "idword2" und ruft bei Veränderung die Funktion(in Zeile) wieder auf.

                Ja, wenn sich der Wert ändert.

                @chucky sagte in Werte on Objekten aktualisieren sich nicht:

                Der Wert in Klammern (dp.state.val) bezieht sich auf "idWord2" von der Zeile 15?

                Ja, das ist der Wert des Trigger-Datenpunktes.

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                C 1 Reply Last reply
                0
                • paul53P paul53

                  @chucky sagte:

                  Funktionsaufruf in Zeile 13, ruft die Funktion bei Skript Start auf.

                  Ja.

                  @chucky sagte in Werte on Objekten aktualisieren sich nicht:

                  Der Trigger "on" in Zeile 15, überwacht den Wert von "idword2" und ruft bei Veränderung die Funktion(in Zeile) wieder auf.

                  Ja, wenn sich der Wert ändert.

                  @chucky sagte in Werte on Objekten aktualisieren sich nicht:

                  Der Wert in Klammern (dp.state.val) bezieht sich auf "idWord2" von der Zeile 15?

                  Ja, das ist der Wert des Trigger-Datenpunktes.

                  C Offline
                  C Offline
                  chucky
                  wrote on last edited by
                  #8

                  @paul53
                  Beten Dank für deine Rückmeldung und Hilfe, ist eine super Sache!

                  Ich wünsche dir einen schönen Abend
                  Gruss Chucky

                  1 Reply Last reply
                  0
                  Reply
                  • Reply as topic
                  Log in to reply
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  108

                  Online

                  32.4k

                  Users

                  81.3k

                  Topics

                  1.3m

                  Posts
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  ioBroker Community 2014-2025
                  logo
                  • Login

                  • Don't have an account? Register

                  • Login or register to search.
                  • First post
                    Last post
                  0
                  • Recent
                  • Tags
                  • Unread 0
                  • Categories
                  • Unreplied
                  • Popular
                  • GitHub
                  • Docu
                  • Hilfe