Skip to content
  • Home
  • 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
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Bitfield übersetzen/konvertieren

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Bitfield übersetzen/konvertieren

Scheduled Pinned Locked Moved Skripten / Logik
javascript
19 Posts 6 Posters 2.1k Views 5 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.
  • D darkbrain85

    @paul53

    Danke für den Hinweis, aber da stehe ich noch immer auf dem Schlauch. Ich sollte vielleicht hinzufügen, das meine Scriptkenntnisse aus ganz viel copy&paste bestehen.

    Einfache Sachen bekomme ich hin, aber hier bin ich gerade wirklich überfordert... :-D

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

    @darkbrain85
    Versuche es mal so:

    // Binärwert 12 Bit decodieren und in Datenpunkte schreiben
    const idModbus = '...'; // ID zuweisen !
    const idWP = 'Waermepumpe.';
    const idsWP = [
        'Quellenpumpe',
        'Heizungspumpe',
        'Freigabe',
        'Verdichter_1',
        'Verdichter_2',
        'ext_Waermeerzeuger',
        'Alarm',
        'MV_Kuehlen',
        'MV_Warmwasser',
        'MV_Poolheizung',
        'Solarbetrieb',
        'Kaeltekreis_4_Wege_Ventil'
    ];
    
    for(let i = 0; i < idsWP.length; i++) {
        createState(idWP + idsWP[i], false, {type: 'boolean', name: idsWP[i], read: true, write: false});
    }
    
    on(idModbus, function(dp) {
        let val = dp.state.val;
        for(let i = 0; i < idsWP.length; i++) {
            setState(idWP + idsWP[i], !!(val & 1), true);
            val = val >> 1;
        }
    });
    

    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

    1 Reply Last reply
    0
    • D Offline
      D Offline
      darkbrain85
      wrote on last edited by darkbrain85
      #5

      Die neuen Objekte werden angelegt, aber leider bleiben alle auf "false".
      Natürlich habe ich oben entsprechend die ID des Modbus Objekts eingefügt. Diese ändert sich auch entsprechend.

      Müsste der Wert nicht erst zu einem Binärwert konvertiert werden?
      Ich habe mal die einzelnen Werte der Schleife in's Log schreiben lassen.

      09:27:10.611	info	javascript.0 (19111) script.js.common.Skript_1: 2
      09:27:10.611	info	javascript.0 (19111) script.js.common.Skript_1: 1
      09:27:10.611	info	javascript.0 (19111) script.js.common.Skript_1: 0
      09:27:10.611	info	javascript.0 (19111) script.js.common.Skript_1: 0
      09:27:10.612	info	javascript.0 (19111) script.js.common.Skript_1: 0
      09:27:10.612	info	javascript.0 (19111) script.js.common.Skript_1: 0
      09:27:10.612	info	javascript.0 (19111) script.js.common.Skript_1: 0
      09:27:10.612	info	javascript.0 (19111) script.js.common.Skript_1: 0
      09:27:10.612	info	javascript.0 (19111) script.js.common.Skript_1: 0
      09:27:10.612	info	javascript.0 (19111) script.js.common.Skript_1: 0
      09:27:10.612	info	javascript.0 (19111) script.js.common.Skript_1: 0
      09:27:10.613	info	javascript.0 (19111) script.js.common.Skript_1: 0
      09:27:10.613	info	javascript.0 (19111) script.js.common.Skript_1: 0
      
      

      Das scheint also zu funktionieren. Jetzt frage ich mich nur noch, warum nicht entsprechend der Wert des jeweiligen Objekts nicht auf "true" geht.

      paul53P 1 Reply Last reply
      0
      • D darkbrain85

        Die neuen Objekte werden angelegt, aber leider bleiben alle auf "false".
        Natürlich habe ich oben entsprechend die ID des Modbus Objekts eingefügt. Diese ändert sich auch entsprechend.

        Müsste der Wert nicht erst zu einem Binärwert konvertiert werden?
        Ich habe mal die einzelnen Werte der Schleife in's Log schreiben lassen.

        09:27:10.611	info	javascript.0 (19111) script.js.common.Skript_1: 2
        09:27:10.611	info	javascript.0 (19111) script.js.common.Skript_1: 1
        09:27:10.611	info	javascript.0 (19111) script.js.common.Skript_1: 0
        09:27:10.611	info	javascript.0 (19111) script.js.common.Skript_1: 0
        09:27:10.612	info	javascript.0 (19111) script.js.common.Skript_1: 0
        09:27:10.612	info	javascript.0 (19111) script.js.common.Skript_1: 0
        09:27:10.612	info	javascript.0 (19111) script.js.common.Skript_1: 0
        09:27:10.612	info	javascript.0 (19111) script.js.common.Skript_1: 0
        09:27:10.612	info	javascript.0 (19111) script.js.common.Skript_1: 0
        09:27:10.612	info	javascript.0 (19111) script.js.common.Skript_1: 0
        09:27:10.612	info	javascript.0 (19111) script.js.common.Skript_1: 0
        09:27:10.613	info	javascript.0 (19111) script.js.common.Skript_1: 0
        09:27:10.613	info	javascript.0 (19111) script.js.common.Skript_1: 0
        
        

        Das scheint also zu funktionieren. Jetzt frage ich mich nur noch, warum nicht entsprechend der Wert des jeweiligen Objekts nicht auf "true" geht.

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

        @darkbrain85 sagte:

        Wert des jeweiligen Objekts nicht auf "true" geht.

        Sorry, mein Fehler: Habe oben Zeile 26 korrigiert in

                setState(idWP + idsWP[i], !!(val & 1), 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

        D S 2 Replies Last reply
        0
        • paul53P paul53

          @darkbrain85 sagte:

          Wert des jeweiligen Objekts nicht auf "true" geht.

          Sorry, mein Fehler: Habe oben Zeile 26 korrigiert in

                  setState(idWP + idsWP[i], !!(val & 1), true);
          
          D Offline
          D Offline
          darkbrain85
          wrote on last edited by darkbrain85
          #7

          @paul53

          Das scheint vorerst zu klappen! Ich konnte jetzt spontan nur die Pumpen testen, da ich den Verdichter nicht unnötig starten will, aber es sieht gut aus!

          Vielen vielen Dank für Deine Unterstützung! :+1:

          Edit: Jetzt konnte ich fast alle Werte testen! Läuft!

          1 Reply Last reply
          0
          • paul53P paul53

            @darkbrain85 sagte:

            Wert des jeweiligen Objekts nicht auf "true" geht.

            Sorry, mein Fehler: Habe oben Zeile 26 korrigiert in

                    setState(idWP + idsWP[i], !!(val & 1), true);
            
            S Offline
            S Offline
            Schwabe_CH
            wrote on last edited by
            #8

            @paul53

            Hallo
            Ich stelle mich eigentlich bei copy&paste nicht so schusselig an, aber nun habe ich doch etwas viel Zeit mit lesen und probieren aufgewendet und wäre um direkte Hilfe froh.

            Ich möchte den Betriebsstatus (sowie weitere Daten) meines Stiebel-Eltron Wärmepumpen ISG auslesen und in er InfluxDB speichern und die Informationen zur neunen E3/DC PV-Anlage gegenüber zu stellen.

            Ich denke ich habe alles wie beschrieben eingetragen und entsprechend angepasst. Aber auch bei mir sind alle Werte aus JS auf false.

            Wenn ich diese Werte parallel in node-red (16Bit Array) auslese habe ich den 2. Wert auf true.

            Ich vermute, ich habe ein Durcheinander mit der ID oder Namen im JS gemacht.
            Ich habe schon mehrere Varianten ausprobiert aber nun seh ich vor lauter Bäumen den Wald nicht mehr.

            Nachfolgend Screenshots meiner Eingaben.

            Bildschirmfoto 2021-05-20 um 19.35.03.png
            Bildschirmfoto 2021-05-20 um 19.33.54.png
            Bildschirmfoto 2021-05-20 um 19.35.41.png
            Bildschirmfoto 2021-05-20 um 19.34.36.png

            Danke vielmal

            paul53P 1 Reply Last reply
            0
            • S Schwabe_CH

              @paul53

              Hallo
              Ich stelle mich eigentlich bei copy&paste nicht so schusselig an, aber nun habe ich doch etwas viel Zeit mit lesen und probieren aufgewendet und wäre um direkte Hilfe froh.

              Ich möchte den Betriebsstatus (sowie weitere Daten) meines Stiebel-Eltron Wärmepumpen ISG auslesen und in er InfluxDB speichern und die Informationen zur neunen E3/DC PV-Anlage gegenüber zu stellen.

              Ich denke ich habe alles wie beschrieben eingetragen und entsprechend angepasst. Aber auch bei mir sind alle Werte aus JS auf false.

              Wenn ich diese Werte parallel in node-red (16Bit Array) auslese habe ich den 2. Wert auf true.

              Ich vermute, ich habe ein Durcheinander mit der ID oder Namen im JS gemacht.
              Ich habe schon mehrere Varianten ausprobiert aber nun seh ich vor lauter Bäumen den Wald nicht mehr.

              Nachfolgend Screenshots meiner Eingaben.

              Bildschirmfoto 2021-05-20 um 19.35.03.png
              Bildschirmfoto 2021-05-20 um 19.33.54.png
              Bildschirmfoto 2021-05-20 um 19.35.41.png
              Bildschirmfoto 2021-05-20 um 19.34.36.png

              Danke vielmal

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

              @schwabe_ch
              Die ID des Triggers stimmt nicht.

              const idModbus = 'modbus.0.inputRegisters.32500_Betriebstatus';
              

              Als Zielordner würde ich angeben:

              const idWp = '0_userdata.0.Waermepumpe.Betriebstatus.';
              

              Bitte Code immer in Code tags posten!

              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

              S 1 Reply Last reply
              0
              • paul53P paul53

                @schwabe_ch
                Die ID des Triggers stimmt nicht.

                const idModbus = 'modbus.0.inputRegisters.32500_Betriebstatus';
                

                Als Zielordner würde ich angeben:

                const idWp = '0_userdata.0.Waermepumpe.Betriebstatus.';
                

                Bitte Code immer in Code tags posten!

                S Offline
                S Offline
                Schwabe_CH
                wrote on last edited by
                #10

                @paul53

                Danke für die superschnelle Antwort. ;-)

                Ich habe alles vorhandene entfernt und "neu angefangen".
                Dabei ist schon mal ein Fehler von mir aufgefallen. Betriebsstatus mit 2 * s. :-(

                // Binärwert 12 Bit decodieren und in Datenpunkte schreiben
                const idModbus = 'modbus.0.inputRegisters.32500_Betriebsstatus'; // ID zuweisen !
                const idWP = '0_userdata.0.Waermepumpe.Betriebsstatus.';
                const idsWP = [
                   'B0_HK1_Pumpe',
                   'B1_HK2_Pumpe',
                   'B2_Aufheizprogramm',
                   'B3_NHZ_Stufen_in_Betieb',
                   'B4_WP_im_Heizbetrieb',
                   'B5_WP_im_Warmwasserbetrieb',
                   'B6_Verdichter_in_Betrieb',
                   'B7_Sommerbetrieb_aktiv',
                   'B8_Kuehlbetrieb_aktiv',
                   'B9_Abtauen',
                   'B10_Silentmode1',
                   'B11_Silentmode2'
                ];
                
                for(let i = 0; i < idsWP.length; i++) {
                   createState(idWP + idsWP[i], false, {type: 'boolean', name: idsWP[i], read: true, write: false});
                }
                
                on(idModbus, function(dp) {
                   let val = dp.state.val;
                   for(let i = 0; i < idsWP.length; i++) {
                       setState(idWP + idsWP[i], !!(val & 1), true);
                       val = val >> 1;
                   }
                });
                

                Das Ergebnis ist jedoch immer noch alles "false".

                Bildschirmfoto 2021-05-24 um 11.36.07.png

                Node-red zeigt mir aber

                24.5.2021, 11:33:56node: 7702536.90156ac
                msg.payload : array[16]
                array[16]
                [0 … 9]
                0: false
                1: true
                2: false
                3: false
                4: false
                5: false
                6: false
                7: false
                8: false
                9: false
                [10 … 15]
                10: false
                11: false
                12: false
                13: false
                14: false
                15: false

                Was wiederum mit "modbus.0.inputRegisters.32500_Betriebsstatus" als Ausgabewert 2 übereinstimmen würde.

                Liegt es evtl. am Datentype - Unsigned 16 bit

                Bildschirmfoto 2021-05-24 um 11.58.38.png

                paul53P 2 Replies Last reply
                0
                • S Schwabe_CH

                  @paul53

                  Danke für die superschnelle Antwort. ;-)

                  Ich habe alles vorhandene entfernt und "neu angefangen".
                  Dabei ist schon mal ein Fehler von mir aufgefallen. Betriebsstatus mit 2 * s. :-(

                  // Binärwert 12 Bit decodieren und in Datenpunkte schreiben
                  const idModbus = 'modbus.0.inputRegisters.32500_Betriebsstatus'; // ID zuweisen !
                  const idWP = '0_userdata.0.Waermepumpe.Betriebsstatus.';
                  const idsWP = [
                     'B0_HK1_Pumpe',
                     'B1_HK2_Pumpe',
                     'B2_Aufheizprogramm',
                     'B3_NHZ_Stufen_in_Betieb',
                     'B4_WP_im_Heizbetrieb',
                     'B5_WP_im_Warmwasserbetrieb',
                     'B6_Verdichter_in_Betrieb',
                     'B7_Sommerbetrieb_aktiv',
                     'B8_Kuehlbetrieb_aktiv',
                     'B9_Abtauen',
                     'B10_Silentmode1',
                     'B11_Silentmode2'
                  ];
                  
                  for(let i = 0; i < idsWP.length; i++) {
                     createState(idWP + idsWP[i], false, {type: 'boolean', name: idsWP[i], read: true, write: false});
                  }
                  
                  on(idModbus, function(dp) {
                     let val = dp.state.val;
                     for(let i = 0; i < idsWP.length; i++) {
                         setState(idWP + idsWP[i], !!(val & 1), true);
                         val = val >> 1;
                     }
                  });
                  

                  Das Ergebnis ist jedoch immer noch alles "false".

                  Bildschirmfoto 2021-05-24 um 11.36.07.png

                  Node-red zeigt mir aber

                  24.5.2021, 11:33:56node: 7702536.90156ac
                  msg.payload : array[16]
                  array[16]
                  [0 … 9]
                  0: false
                  1: true
                  2: false
                  3: false
                  4: false
                  5: false
                  6: false
                  7: false
                  8: false
                  9: false
                  [10 … 15]
                  10: false
                  11: false
                  12: false
                  13: false
                  14: false
                  15: false

                  Was wiederum mit "modbus.0.inputRegisters.32500_Betriebsstatus" als Ausgabewert 2 übereinstimmen würde.

                  Liegt es evtl. am Datentype - Unsigned 16 bit

                  Bildschirmfoto 2021-05-24 um 11.58.38.png

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

                  @schwabe_ch sagte: Das Ergebnis ist jedoch immer noch alles "false".

                  Hat sich denn der Wert von "modbus.0.inputRegisters.32500_Betriebsstatus" mal geändert? Es wird nur bei Wertänderung getriggert.

                  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

                  1 Reply Last reply
                  0
                  • S Schwabe_CH

                    @paul53

                    Danke für die superschnelle Antwort. ;-)

                    Ich habe alles vorhandene entfernt und "neu angefangen".
                    Dabei ist schon mal ein Fehler von mir aufgefallen. Betriebsstatus mit 2 * s. :-(

                    // Binärwert 12 Bit decodieren und in Datenpunkte schreiben
                    const idModbus = 'modbus.0.inputRegisters.32500_Betriebsstatus'; // ID zuweisen !
                    const idWP = '0_userdata.0.Waermepumpe.Betriebsstatus.';
                    const idsWP = [
                       'B0_HK1_Pumpe',
                       'B1_HK2_Pumpe',
                       'B2_Aufheizprogramm',
                       'B3_NHZ_Stufen_in_Betieb',
                       'B4_WP_im_Heizbetrieb',
                       'B5_WP_im_Warmwasserbetrieb',
                       'B6_Verdichter_in_Betrieb',
                       'B7_Sommerbetrieb_aktiv',
                       'B8_Kuehlbetrieb_aktiv',
                       'B9_Abtauen',
                       'B10_Silentmode1',
                       'B11_Silentmode2'
                    ];
                    
                    for(let i = 0; i < idsWP.length; i++) {
                       createState(idWP + idsWP[i], false, {type: 'boolean', name: idsWP[i], read: true, write: false});
                    }
                    
                    on(idModbus, function(dp) {
                       let val = dp.state.val;
                       for(let i = 0; i < idsWP.length; i++) {
                           setState(idWP + idsWP[i], !!(val & 1), true);
                           val = val >> 1;
                       }
                    });
                    

                    Das Ergebnis ist jedoch immer noch alles "false".

                    Bildschirmfoto 2021-05-24 um 11.36.07.png

                    Node-red zeigt mir aber

                    24.5.2021, 11:33:56node: 7702536.90156ac
                    msg.payload : array[16]
                    array[16]
                    [0 … 9]
                    0: false
                    1: true
                    2: false
                    3: false
                    4: false
                    5: false
                    6: false
                    7: false
                    8: false
                    9: false
                    [10 … 15]
                    10: false
                    11: false
                    12: false
                    13: false
                    14: false
                    15: false

                    Was wiederum mit "modbus.0.inputRegisters.32500_Betriebsstatus" als Ausgabewert 2 übereinstimmen würde.

                    Liegt es evtl. am Datentype - Unsigned 16 bit

                    Bildschirmfoto 2021-05-24 um 11.58.38.png

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

                    @schwabe_ch
                    Wenn schon bei Skriptstart die richtigen Werte gesetzt werden sollen, verwende eine Funktion, die auch bei Skriptstart aufgerufen wird.

                    // Binärwert 12 Bit decodieren und in Datenpunkte schreiben
                    const idModbus = 'modbus.0.inputRegisters.32500_Betriebsstatus'; // ID zuweisen !
                    const idWP = '0_userdata.0.Waermepumpe.Betriebsstatus.';
                    const idsWP = [
                       'B0_HK1_Pumpe',
                       'B1_HK2_Pumpe',
                       'B2_Aufheizprogramm',
                       'B3_NHZ_Stufen_in_Betieb',
                       'B4_WP_im_Heizbetrieb',
                       'B5_WP_im_Warmwasserbetrieb',
                       'B6_Verdichter_in_Betrieb',
                       'B7_Sommerbetrieb_aktiv',
                       'B8_Kuehlbetrieb_aktiv',
                       'B9_Abtauen',
                       'B10_Silentmode1',
                       'B11_Silentmode2'
                    ];
                    
                    function word2bits(val) {
                       for(let i = 0; i < idsWP.length; i++) {
                           if(existsState(idWP + idsWP[i])) setState(idWP + idsWP[i], !!(val & 1), true);
                           else createState(idWP + idsWP[i], !!(val & 1), {type: 'boolean', name: idsWP[i], read: true, write: false});
                           val = val >> 1;
                       }
                    }
                     
                    word2bits(getState(idModbus).val); // Skriptstart
                    on(idModbus, 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

                    S H 2 Replies Last reply
                    0
                    • paul53P paul53

                      @schwabe_ch
                      Wenn schon bei Skriptstart die richtigen Werte gesetzt werden sollen, verwende eine Funktion, die auch bei Skriptstart aufgerufen wird.

                      // Binärwert 12 Bit decodieren und in Datenpunkte schreiben
                      const idModbus = 'modbus.0.inputRegisters.32500_Betriebsstatus'; // ID zuweisen !
                      const idWP = '0_userdata.0.Waermepumpe.Betriebsstatus.';
                      const idsWP = [
                         'B0_HK1_Pumpe',
                         'B1_HK2_Pumpe',
                         'B2_Aufheizprogramm',
                         'B3_NHZ_Stufen_in_Betieb',
                         'B4_WP_im_Heizbetrieb',
                         'B5_WP_im_Warmwasserbetrieb',
                         'B6_Verdichter_in_Betrieb',
                         'B7_Sommerbetrieb_aktiv',
                         'B8_Kuehlbetrieb_aktiv',
                         'B9_Abtauen',
                         'B10_Silentmode1',
                         'B11_Silentmode2'
                      ];
                      
                      function word2bits(val) {
                         for(let i = 0; i < idsWP.length; i++) {
                             if(existsState(idWP + idsWP[i])) setState(idWP + idsWP[i], !!(val & 1), true);
                             else createState(idWP + idsWP[i], !!(val & 1), {type: 'boolean', name: idsWP[i], read: true, write: false});
                             val = val >> 1;
                         }
                      }
                       
                      word2bits(getState(idModbus).val); // Skriptstart
                      on(idModbus, function(dp) {
                         word2bits(dp.state.val);
                      });
                      
                      S Offline
                      S Offline
                      Schwabe_CH
                      wrote on last edited by
                      #13

                      @paul53

                      Ein grosses DANKESCHÖN !! ;-)

                      bfc2c3de-2eed-4cba-9a6b-e71d3de1b0cd-image.png

                      Bildschirmfoto 2021-05-24 um 13.15.19.png

                      Nun kann ich weitermachen mit meinem kleinen Projekt.

                      Noch einen schönen Pfingstmontag.

                      mickymM 1 Reply Last reply
                      0
                      • S Schwabe_CH

                        @paul53

                        Ein grosses DANKESCHÖN !! ;-)

                        bfc2c3de-2eed-4cba-9a6b-e71d3de1b0cd-image.png

                        Bildschirmfoto 2021-05-24 um 13.15.19.png

                        Nun kann ich weitermachen mit meinem kleinen Projekt.

                        Noch einen schönen Pfingstmontag.

                        mickymM Online
                        mickymM Online
                        mickym
                        Most Active
                        wrote on last edited by
                        #14

                        @schwabe_ch Wenn Du eh mit NodeRed arbeitest, da gibts eine tolle Buffer Node. ;)

                        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                        S 1 Reply Last reply
                        1
                        • mickymM mickym

                          @schwabe_ch Wenn Du eh mit NodeRed arbeitest, da gibts eine tolle Buffer Node. ;)

                          S Offline
                          S Offline
                          Schwabe_CH
                          wrote on last edited by
                          #15

                          @mickym
                          Danke für den Hinweis.
                          „Mit Nodered arbeitest“ das wäre zu schön, für den Moment war es das Produkt welches mir im Zusammenhang mit Modbus als erstes in die Finger kam. Wir haben seit 2 Monaten eine E3/DC Pro . Damit fing das ganze an. Nun taste ich mich langsam vor.
                          Buffer Node? Hast Du mir wohl einen Link dazu, unter suchen erhalte ich 50 Seiten 😎 wo finde ich mehr Informationen?

                          mickymM 1 Reply Last reply
                          0
                          • S Schwabe_CH

                            @mickym
                            Danke für den Hinweis.
                            „Mit Nodered arbeitest“ das wäre zu schön, für den Moment war es das Produkt welches mir im Zusammenhang mit Modbus als erstes in die Finger kam. Wir haben seit 2 Monaten eine E3/DC Pro . Damit fing das ganze an. Nun taste ich mich langsam vor.
                            Buffer Node? Hast Du mir wohl einen Link dazu, unter suchen erhalte ich 50 Seiten 😎 wo finde ich mehr Informationen?

                            mickymM Online
                            mickymM Online
                            mickym
                            Most Active
                            wrote on last edited by mickym
                            #16

                            @schwabe_ch
                            Man muss bissi ausprobieren, aber ich finde die Node ziemlich mächtig. Anhand der Screenshots kannst Dir ja schon mal ein Eindruck verschaffen und ist ja auch schnell installiert bzw. wieder deinstalliert.

                            https://flows.nodered.org/node/node-red-contrib-buffer-parser

                            Auf der Seite sind auch einige Beispielflows zum Testen.

                            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                            1 Reply Last reply
                            0
                            • paul53P paul53

                              @schwabe_ch
                              Wenn schon bei Skriptstart die richtigen Werte gesetzt werden sollen, verwende eine Funktion, die auch bei Skriptstart aufgerufen wird.

                              // Binärwert 12 Bit decodieren und in Datenpunkte schreiben
                              const idModbus = 'modbus.0.inputRegisters.32500_Betriebsstatus'; // ID zuweisen !
                              const idWP = '0_userdata.0.Waermepumpe.Betriebsstatus.';
                              const idsWP = [
                                 'B0_HK1_Pumpe',
                                 'B1_HK2_Pumpe',
                                 'B2_Aufheizprogramm',
                                 'B3_NHZ_Stufen_in_Betieb',
                                 'B4_WP_im_Heizbetrieb',
                                 'B5_WP_im_Warmwasserbetrieb',
                                 'B6_Verdichter_in_Betrieb',
                                 'B7_Sommerbetrieb_aktiv',
                                 'B8_Kuehlbetrieb_aktiv',
                                 'B9_Abtauen',
                                 'B10_Silentmode1',
                                 'B11_Silentmode2'
                              ];
                              
                              function word2bits(val) {
                                 for(let i = 0; i < idsWP.length; i++) {
                                     if(existsState(idWP + idsWP[i])) setState(idWP + idsWP[i], !!(val & 1), true);
                                     else createState(idWP + idsWP[i], !!(val & 1), {type: 'boolean', name: idsWP[i], read: true, write: false});
                                     val = val >> 1;
                                 }
                              }
                               
                              word2bits(getState(idModbus).val); // Skriptstart
                              on(idModbus, function(dp) {
                                 word2bits(dp.state.val);
                              });
                              
                              H Offline
                              H Offline
                              HelmutLinner
                              wrote on last edited by
                              #17

                              @paul53 Hi danke für das Skript,
                              funktioniert einwandfrei zum Lesen. Gibt es noch eine Möglichkeit dass ich auch Schreiben kann in die Einzelnen Bit? Ich will darüber ein und aus befehle an eine Steuerung mit Codesys schicken.
                              Viele Grüße Helmut

                              paul53P 1 Reply Last reply
                              0
                              • H HelmutLinner

                                @paul53 Hi danke für das Skript,
                                funktioniert einwandfrei zum Lesen. Gibt es noch eine Möglichkeit dass ich auch Schreiben kann in die Einzelnen Bit? Ich will darüber ein und aus befehle an eine Steuerung mit Codesys schicken.
                                Viele Grüße Helmut

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

                                @helmutlinner sagte: Möglichkeit dass ich auch Schreiben kann in die Einzelnen Bit?

                                Siehe hier.

                                function writeBit(val, set, bit) {
                                   let x = 1  << bit;
                                   if(set) return val | x;
                                   return val & ~x;
                                }
                                

                                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

                                1 Reply Last reply
                                0
                                • D darkbrain85

                                  Hi!

                                  Ich habe ein kniffeliges Problem, bei dem ihr mir sicher behilflich sein könnte.

                                  Ich lese meine Waterkotte Wärmepumpe per Modbus aus. Dabei erhalte ich auch diverse Werte. Funktioniert sehr gut.

                                  Den Zustand einzelner Komponenten kann ich allerdings nur als bitfield in einem gemeinsamen Register abrufen. Hier erhalte ich einen Integer Wert den ich entsprechend interpretieren müsste.
                                  Hier mal die Liste aus der Doku:

                                  521d80f2-9fb9-4fa1-8e78-15e4b396b5bb-image.png

                                  Ich müsste also den Integer Wert übersetzen und dann die einzelnen Zustände zuordnen.
                                  Beim Betrieb der Heizungsumwälzpumpe erhalte ich z.B. den Wert 2.

                                  Gibt es dafür irgendwo ein Beispiel, oder kann mir da jemand auf die Sprünge helfen?

                                  Danke Euch jetzt schon!

                                  wendy2702W Online
                                  wendy2702W Online
                                  wendy2702
                                  wrote on last edited by wendy2702
                                  #19

                                  @darkbrain85 sagte in Bitfield übersetzen/konvertieren:

                                  Hi!

                                  Ich habe ein kniffeliges Problem, bei dem ihr mir sicher behilflich sein könnte.

                                  Ich lese meine Waterkotte Wärmepumpe per Modbus aus. Dabei erhalte ich auch diverse Werte. Funktioniert sehr gut.

                                  Den Zustand einzelner Komponenten kann ich allerdings nur als bitfield in einem gemeinsamen Register abrufen. Hier erhalte ich einen Integer Wert den ich entsprechend interpretieren müsste.
                                  Hier mal die Liste aus der Doku:

                                  521d80f2-9fb9-4fa1-8e78-15e4b396b5bb-image.png

                                  Ich müsste also den Integer Wert übersetzen und dann die einzelnen Zustände zuordnen.
                                  Beim Betrieb der Heizungsumwälzpumpe erhalte ich z.B. den Wert 2.

                                  Gibt es dafür irgendwo ein Beispiel, oder kann mir da jemand auf die Sprünge helfen?

                                  Danke Euch jetzt schon!

                                  Ist zwar schon was älter aber gerade erst gesehen.

                                  Kannst du mir sagen welche WP das ist, welches Register und wie eingestellt im Adapter?

                                  Hast du eine Übersicht über alle Register die man lesen/schreiben kann?

                                  Bitte keine Fragen per PN, die gehören ins Forum!

                                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                  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

                                  512

                                  Online

                                  32.7k

                                  Users

                                  82.3k

                                  Topics

                                  1.3m

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

                                  • Don't have an account? Register

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