Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Werte on Objekten aktualisieren sich nicht

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.2k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.6k

Werte on Objekten aktualisieren sich nicht

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascriptcommunication
8 Beiträge 3 Kommentatoren 676 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • C Offline
    C Offline
    chucky
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  0
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  457

                  Online

                  32.7k

                  Benutzer

                  82.4k

                  Themen

                  1.3m

                  Beiträge
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2025
                  logo
                  • Anmelden

                  • Du hast noch kein Konto? Registrieren

                  • Anmelden oder registrieren, um zu suchen
                  • Erster Beitrag
                    Letzter Beitrag
                  0
                  • Home
                  • Aktuell
                  • Tags
                  • Ungelesen 0
                  • Kategorien
                  • Unreplied
                  • Beliebt
                  • GitHub
                  • Docu
                  • Hilfe