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. [gelöst]Variablen Übergabe aus MODBUS an Homematic

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

[gelöst]Variablen Übergabe aus MODBUS an Homematic

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
17 Beiträge 3 Kommentatoren 4.0k Aufrufe
  • Ä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.
  • M Offline
    M Offline
    mguenther
    schrieb am zuletzt editiert von
    #6

    @paul53:

    Vorschlag:

    const idSrc = "modbus.0.holdingRegisters.214_REG_HC_TEMP_IN2";
    const idDst = "hm-rega.0.31793";
    
    setState(idDst, getState(idSrc).val); // Scriptstart
    
    on(idSrc, idDst); // Aktualisierung bei Wertänderung
    ```` `  
    

    super, das klappt.

    EDIT:

    ! Mühsam ernährt sich das Eichhörnchen… bin ja noch Anfänger, habe ne Menge gelesen, aber noch nicht alles verstanden. Die Änderungen mit on{} hingegen schon... :)
    ! Wie bekomme ich aber den Austausch z.B. alle 15min hin? im Blockly brech ich mir die Finger, bekomme von der Idee her als Bsp:

    Intervall = setInterval(function () {
    .....
    }, 900000);
    >! ````
    >! und dann? ich kann ja nicht 1:1 copy & paste machen - kann doch nicht richtig sein - die Fkt on in einem Zeitintervall aufzurufen…
    ich war zu doof. Ich rufe das Skript jetzt alle 15min auf:
    ```
    `[code]Intervall = setInterval(function () {
    	setState(idDst, getState(idSrc).val);
    },900000);
    [/code]`
    richtig?
    ```
    1 Antwort Letzte Antwort
    0
    • M Offline
      M Offline
      mguenther
      schrieb am zuletzt editiert von
      #7

      Ist eine Übergabe eigentlich auch in beide Richtungen möglich? so in etwa?

      const idSrc1 = "modbus.0.holdingRegisters.214_REG_HC_TEMP_IN2";
      const idDst1 = "hm-rega.0.31793";
      const idSrc2 = "modbus.0.holdingRegisters.213_REG_HC_TEMP_IN1";
      const idDst2 = "hm-rega.0.31794";
      const idSrc3 = "hm-rega.0.31807";
      const idDst3 = "modbus.0.holdingRegisters.100_REG_FAN_SPEED_LEVEL";
      
      Intervall = setInterval(function () {
      	setState(idDst1, getState(idSrc1).val); // Scriptstart
      	setState(idDst2, getState(idSrc2).val); // Scriptstart
       	setState(idDst3, getState(idSrc3).val); // Scriptstart
          }, 900000);
      

      mein "hm-rega.0.31807" nimmt den Wert nicht an… :(

      kann das intervall eigentlich auch in einr Schleife ausgeführt werden? Wahrscheinlich muss ich den Variablenname irgendwie zusammensetzen

      sowas in etwa:

      for i=1 to 3

      setState(idDst_i, getState(idSrc_i).val); // Scriptstart

      ohje, lang ists her mit meinen Programmierkenntnissen..

      1 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #8

        @mguenther:

        Ich rufe das Skript jetzt alle 15min auf: `
        Weshalb das ? Eine Aktualisierung des Wertes in der SV genügt immer dann, wenn sich der Wert der Quelle ändert. Das macht

        on(idSrc, idDst); // Aktualisierung bei Wertänderung
        

        @mguenther:

        Ist eine Übergabe eigentlich auch in beide Richtungen möglich? so in etwa? `
        Ja.
        @mguenther:

        mein "hm-rega.0.31807" nimmt den Wert nicht an… :( `
        Das ist die Quelle (idSrc3).
        @mguenther:

        kann das intervall eigentlich auch in einr Schleife ausgeführt werden? Wahrscheinlich muss ich den Variablenname irgendwie zusammensetzen `
        Nein, den Variablennamen kann man nicht zusammensetzen.

        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 Antwort Letzte Antwort
        0
        • M Offline
          M Offline
          mguenther
          schrieb am zuletzt editiert von
          #9

          @paul53:

          Weshalb das ? Eine Aktualisierung des Wertes in der SV genügt immer dann, wenn sich der Wert der Quelle ändert. Das macht

          on(idSrc, idDst); // Aktualisierung bei Wertänderung
          ```` `  
          

          Modbus prüft alle 5sek(?) den Status und schreibt den WErt quasi neu. Dieser wird dann auch immer an die CCU übertragen. Ich dachte, ich ruf aber nur alle 15min den Wert auf, um die CCU nicht "vollzuballern"…

          Ich übertrage ja auch nicht nur ein Wert, sondern eben mehrere...

          1 Antwort Letzte Antwort
          0
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #10

            @mguenther:

            Modbus prüft alle 5sek(?) den Status und schreibt den WErt quasi neu. `
            Es wird sich aber nicht alle 5 s der <u>Wert</u> ändern ? Es wird nur getriggert und an die CCU gesendet, wenn sich der Wert ändert !

            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 Antwort Letzte Antwort
            0
            • M Offline
              M Offline
              mguenther
              schrieb am zuletzt editiert von
              #11

              doch, genau das geschieht. Hätte ich vorher auch nicht gedacht. z.B. springt ein Wert immer um 22.1°. Mal ist er 22.2°, mal 22.1°, dann wieder 22.0° usw. Ich hatte zuerst gesucht, ob ich z.B. die Temperatur nur in 0.5er Schritten mir auswerten lassen kann, habs aber nicht hinbekommen.

              hier mal ein Screenshot der Variablen in HM:
              6305_prot_hm.png

              teilweise sind es sogar auch 2sec. Die 5 sec waren von mir vorhin geschätzt…

              1 Antwort Letzte Antwort
              0
              • M Offline
                M Offline
                mguenther
                schrieb am zuletzt editiert von
                #12

                gibt es ne Möglichkeit, den Wert auf 0.5° zu runden? Ich kenne von früher noch die Möglichkeit mit Wert verdoppeln (22.2 –> 44.4), runden (44.4 --> 44.0), halbieren (44.0 -> 22.0) oder 21.7 --> 43,4, 43.4 -->43, 43-->21.5

                nur, wie setz ich das um?

                der Rest klappt übrigens spitze - danke dir....

                1 Antwort Letzte Antwort
                0
                • M Offline
                  M Offline
                  mguenther
                  schrieb am zuletzt editiert von
                  #13

                  etwas googlen und Grips anstrengen sollte auch noch bei mir helfen:

                  EDIT:

                  […]

                  const idSrc1 = "modbus.0.holdingRegisters.214_REG_HC_TEMP_IN2";
                  const idDst1 = "hm-rega.0.31793";
                  const idSrc2 = "modbus.0.holdingRegisters.213_REG_HC_TEMP_IN1";
                  const idDst2 = "hm-rega.0.31794";
                  const idSrc3 = "hm-rega.0.31807";
                  const idDst3 = "modbus.0.holdingRegisters.100_REG_FAN_SPEED_LEVEL";
                  
                  var idSrc1_1 = Math.round(getState(idSrc1).val*2)/2;
                  var idSrc2_1 = Math.round(getState(idSrc2).val*2)/2;
                  setState(idDst1, idSrc1_1); // Scriptstart
                  setState(idDst2, idSrc2_1); // Scriptstart
                  setState(idDst3, getState(idSrc3).val); // Scriptstart
                  on(idSrc1_1, idDst1); // Aktualisierung bei Wertänderung
                  on(idSrc2_1, idDst2); // Aktualisierung bei Wertänderung
                  on(idSrc3, idDst3); // Aktualisierung bei Wertänderung
                  

                  so müsste es funktioneren

                  danke paul

                  1 Antwort Letzte Antwort
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #14

                    @mguenther:

                    gibt es ne Möglichkeit, den Wert auf 0.5° zu runden? `

                    val1 = Math.round(2 * val1) / 2;
                    

                    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 Antwort Letzte Antwort
                    0
                    • M Offline
                      M Offline
                      mguenther
                      schrieb am zuletzt editiert von
                      #15

                      @paul53:

                      @mguenther:

                      gibt es ne Möglichkeit, den Wert auf 0.5° zu runden? `

                      val1 = Math.round(2 * val1) / 2;
                      ```` `  
                      

                      habe in dem Post über dir "meine" Lsg abgeändert. Danke an dich!! Spitzenforum hier…

                      1 Antwort Letzte Antwort
                      0
                      • paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #16

                        @mguenther:

                        dachte, so müsste es funktioneren `
                        Leider nicht so richtig.

                        const idSrc1 = "modbus.0.holdingRegisters.214_REG_HC_TEMP_IN2";
                        const idDst1 = "hm-rega.0.31793";
                        const idSrc2 = "modbus.0.holdingRegisters.213_REG_HC_TEMP_IN1";
                        const idDst2 = "hm-rega.0.31794";
                        const idSrc3 = "hm-rega.0.31807";
                        const idDst3 = "modbus.0.holdingRegisters.100_REG_FAN_SPEED_LEVEL";
                        
                        var val1 = Math.round(2 * getState(idSrc1).val) / 2;
                        var val2 = Math.round(2 * getState(idSrc2).val) / 2;
                        
                        setState(idDst1, val1); // Scriptstart
                        setState(idDst2, val2); // Scriptstart
                        setState(idDst3, getState(idSrc3).val); // Scriptstart
                        
                        on(idSrc1, function(dp) {
                           var val = Math.round(2 * dp.state.val) / 2;
                           if(val != val1) {
                              setState(idDst1, val);
                              val1 = val;
                           }   
                        });
                        on(idSrc2, function(dp) {
                           var val = Math.round(2 * dp.state.val) / 2;
                           if(val != val2) {
                              setState(idDst2, val);
                              val2 = val;
                           }   
                        });
                        on(idSrc3, idDst3); // Aktualisierung bei Wertänderung
                        
                        

                        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 Antwort Letzte Antwort
                        0
                        • M Offline
                          M Offline
                          mguenther
                          schrieb am zuletzt editiert von
                          #17

                          habs gerade gemerkt - Ich probiere es weiter… :D

                          EDIT:

                          funzt... danke!

                          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

                          539

                          Online

                          32.6k

                          Benutzer

                          82.1k

                          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