Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst]Wie Modbus Holding Register für Zeit verändern?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst]Wie Modbus Holding Register für Zeit verändern?

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

      Ich habe über die Modbus Anbindung meines Growatt Wechselrichters u.a. ein Register, dass eine Startzeit beinhaltet. Diese Startzeit möchte ich gerne mit setState per Javascript verändern. Das klappt nur teilweise:

      Das steht in der Anleitung:
      The format for each byte in RTU mode is:
      Coding System: 8–bit binary, hexadecimal 0–9, A–F
      Two hexadecimal characters contained in each
      8–bit field of the message

      Ausgelesen wird das selbe Holdingregister getrennt nach Stunde und Minute:
      laut Anleitung ist es dieses Register (im Modbusadapter muss man 40001 dazuzählen, damit es gefunden wird)
      Bildschirmfoto 2024-01-28 um 12.27.40.jpg
      Bildschirmfoto 2024-01-28 um 20.36.00.jpg
      ergibt dann diese Objekte:
      Bildschirmfoto 2024-01-28 um 20.37.18.jpg

      setState('modbus.0.holdingRegisters.41101_Bat_First_Start_Time_1_hour'/*41101 Bat First Start Time 1 Hour*/,10);
      setState('modbus.0.holdingRegisters.41101_Bat_First_Start_Time_1_Minute'/*41101 Bat First Start Time 1 Minute*/,5);
      

      diese Javascriptbefehle ändern die beiden Objekte kurz auf die gewünschte Zeit (Zahl ist dann grün). Sobald allerdings die beiden Register aber vom Modbus Adapter neu ausgelesen werden, wird die Stundenzahl rot und dann auf 0 gesetzt. Die Minutenzahl wird akzeptiert und bleibt.

      irgendwie greife ich wohl nicht sauber auf das gemeinsame Register für Minuten und Stunde zu. Fehlt da eine Bestätigung? Muss ich vielleicht die gesamte Zeit (Stunden und Minuten) mit einem setState übergeben?

      Nur wie müsste der Befehl bitte richtig lauten?

      Danke

      P 1 Reply Last reply Reply Quote 0
      • P
        pingo @pingo last edited by

        So das Problem ist gelöst. Man muss das Acknowledgment mitliefern. Das ist das zusätzliche "false" im Befehl.
        Zusätzlich muss man in 16-bit schreiben und dabei folgende Zahl übergeben:
        Stunde * 256 + Minute. Im Beispiel unten wird 10h 5min übergeben

        setState('modbus.0.holdingRegisters.41101_Bat_First_Start_Time_1_16bit'/*41101 Bat First Start Time 1 16bit*/,2565,false);
        
        P 1 Reply Last reply Reply Quote 0
        • P
          pingo @pingo last edited by

          Nachtrag: und man muss immer zusätzlich das Register "Load_first_bat_first_grid_first" (bei mir 1044) zum Schreiben der Zeit auf 1 setzen!

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

          Support us

          ioBroker
          Community Adapters
          Donate

          979
          Online

          31.8k
          Users

          80.0k
          Topics

          1.3m
          Posts

          1
          3
          181
          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