Ankündigung

Einklappen
Keine Ankündigung bisher.

Einbindung von Modbus TCP

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • bmx
    antwortet
    Hm, wie alt ist denn dein SHNG bzw das Plugin? Bei mir steht da (im develop branch) statt num ein int für port und cycle drin ...?

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    Ich habe den Cycle auf 30s und das klappt bei mir. Auch im Admin-Web wird es so angezeigt.

    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    Was mir gerade noch aufgefallen ist ... Das Plugin übernimmt gar nicht die cycle time, die ich im plugin.yaml definiere:

    Code:
    solaredge:
        plugin_name: modbus_tcp
        instance: solaredge
        host: 192.168.178.67
        port: 1502
        cycle: 60
        plugin_enabled: true
    Laut WebIF lese ich mit Default 300s aus. (was auch zu den Database Werten passt)
    Was mache ich falsch?

    Und aktuell bleibt es dabei. Jeder zweite Wert, d.h. alle 600s schlägt fehl.

    grafik.png
    Angehängte Dateien

    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    Node-Red oder was ähnliches kann ich eigentlich ausschließen. Habe (und hatte) nichts in der Art installiert.
    Kann es sein, dass sich die beiden Instanzen irgendwie in die Quere kommen? Ich meine aber, das lief auch schon gut parallel.
    Das einzige, was ich​ neu dazu genommen habe, ist, dass ich per jsonread meine Batterie auslese, was ja grundsätzlich erstmal nicht zusammenhängt.
    Meine Batterie wiederum kommuniziert aber via Modbus mit meinem Wechselrichter ... könnte das evtl. ein Problem sein? Ich kenn mich da leider nicht so gut aus ...

    Zitat von bmx Beitrag anzeigen
    Bei mir wird über einen crontab genau in der 57. Sekunde abgefragt, das ganze dauert dann knapp eine Sekunde und das ist dann erledigt.
    Du steuerst das Auslesen mit einem extra crontab? Ich setze einfach nur die "cycle time" in der plugin.yaml ...
    Wie setzt Du das denn genau um?

    Einen Kommentar schreiben:


  • bmx
    antwortet
    Bei mir wird über einen crontab genau in der 57. Sekunde abgefragt, das ganze dauert dann knapp eine Sekunde und das ist dann erledigt.

    Bei der Google Suche nach "seconds into read of 8 bytes without response from slave before it closed connection" erscheinen einige mit ähnlichen Problemen.
    Unter anderem bei HomeAssistant ist ein Problem von jemand gewesen der mal mit Node Red gespielt hatte und da wohl noch was aktiv zu sein schien.
    Ich vermute Du kannst sowas ausschliessen?

    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    Ja, kann natürlich sein. Bei dir scheint das aber ja auch eher zufällig zu sein. Bei mir aber super regelmäßig. Irgendwie würde ich dann auch erwarten, dass - wenn man weniger häufig Werte abholt - es weniger häufig auftritt. Wie häufig rufst Du denn ab? Ich habe mal zwischen 30s und 300s gespielt. "Gefühlt" geht bei mir jede zweite Anfrage schief, egal bei welcher cycle time ...

    Einen Kommentar schreiben:


  • bmx
    antwortet
    Deine Solaredge Fehler kann ich bestätigen:


    Code:
    2023-12-09  03:56:57 ERROR    plugins.modbus_tcp se_inverter@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.20.68:1502): Connection unexpectedly closed 0.000308990478515625 seconds into read of 8 bytes without response from slave before it closed connection
    2023-12-09  17:52:57 ERROR    plugins.modbus_tcp se_inverter@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.20.68:1502): Connection unexpectedly closed 2.3365020751953125e-05 seconds into read of 8 bytes without response from slave before it closed connection
    ​
    Ich bin auf dem aktuellen develop branch unterwegs. Ich vermute das der Solaredge Wechselrichter nur eine modbus Verbindung zur Zeit erlaubt und die interne Verbindung zum zugehörigen Zähler dann schlicht gewinnt.

    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    Hallo zusammen,

    ich hatte eine ganze Weile den Modbus Plugin mit zwei Geräten recht stabil am laufen. Bis vor einiger Zeit lief das alles recht problemlos. Jetzt ist mir aufgefallen, dass ich immer wieder folgende Fehlermeldungen bekomme. Unterschiedlich für meine beiden Geräte, eine Paradigma Heizung und ein Solaredge Wechselrichter:

    Code:
    2023-12-09  13:12:18 ERROR    plugins.modbus_tcp  paradigma@: read error: Modbus Error: [Input/Output] Modbus Error: [Invalid Message] No response received, expected at least 8 bytes (0 received) InputRegister.40.1 (address.slaveUnit) regCount:1
    2023-12-09  13:17:14 ERROR    plugins.modbus_tcp  solaredge@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.178.67:1502): Connection unexpectedly closed 0.007294893264770508 seconds into read of 8 bytes without response from unit before it closed connection
    2023-12-09  13:27:15 ERROR    plugins.modbus_tcp  solaredge@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.178.67:1502): Connection unexpectedly closed 0.01136159896850586 seconds into read of 8 bytes without response from unit before it closed connection
    2023-12-09  13:37:17 ERROR    plugins.modbus_tcp  solaredge@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.178.67:1502): Connection unexpectedly closed 0.0036919116973876953 seconds into read of 8 bytes without response from unit before it closed connection
    2023-12-09  13:37:20 ERROR    plugins.modbus_tcp  paradigma@: read error: Modbus Error: [Input/Output] Modbus Error: [Invalid Message] No response received, expected at least 8 bytes (0 received) InputRegister.7.1 (address.slaveUnit) regCount:1
    2023-12-09  13:47:18 ERROR    plugins.modbus_tcp  solaredge@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.178.67:1502): Connection unexpectedly closed 0.005329132080078125 seconds into read of 8 bytes without response from unit before it closed connection
    2023-12-09  13:57:19 ERROR    plugins.modbus_tcp  solaredge@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.178.67:1502): Connection unexpectedly closed 0.001871347427368164 seconds into read of 8 bytes without response from unit before it closed connection
    2023-12-09  14:07:20 ERROR    plugins.modbus_tcp  solaredge@: something went wrong in the poll_device function: Modbus Error: [Connection] ModbusTcpClient(192.168.178.67:1502): Connection unexpectedly closed 0.019519329071044922 seconds into read of 8 bytes without response from unit before it closed connection
    
    ​
    In regelmäßigen Abständen klappt die Abfrage nicht. Aktuell habe 300s cycle Time eingestellt, d.h., beim Solaredge klappt jede zweite Abfrage nicht, bei der Paradigma in unregelmäßigen Abständen. Wenn ich die cycle Time ändere, verändern sich die Abstände der Fehler, sie bleiben aber nicht aus.

    Wie gesagt, früher lief das besser. Ich muss aber gestehen, ich weiß nicht, was ich geändert haben könnte, was den Fehler verursacht.

    Hat jemand von euch eine Idee??

    Einen Kommentar schreiben:


  • Tom Bombadil
    antwortet
    Huch, ich dachte, wir hätten die damals alle umgestellt?

    O.o

    /tom

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    Fehler gefunden. Die Erklärung steht in Post https://knx-user-forum.de/forum/supp...01#post1906201.

    Ich habe die Version 3.1.3 der Bibliothek pymodbus installiert und die passt nicht zum Plugin im aktuellen Master 1.9.5. Ich habe probeweise den Code gemäss dem Post angepasst und nun kann ich das Item im Fronius schreiben und der Wert bleibt auch.

    Das Plugin im Develop ist hier übrigens auch noch auf dem alten Stand und kann nur mit Version <3 von pymodbus eingesetzt werden.

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    Zitat von Tom Bombadil Beitrag anzeigen
    Geraten: Ist 'unit' nicht für gewöhnlich ein INT/Byte? Das Zeichen '1' könnte evtl. 49 ergeben; außerdem speichert Python Strings auf mehrere Arten mit 1/2/4 Bytes pro Character - erwartet wird aber ein einzelnes Byte (Zahl 0...255) für die Unit.

    Lass mal testweise die Anführungsstriche bei modBusUnit: '1' weg ...

    /tom
    Habe die Definition angepasst:

    HTML-Code:
        StorCtl_Mod:                       # [StorCtl_Mod] Activate hold/discharge/charge storage control mode. Bitfield value. (bit 0: CHARGE, bit 1: DiSCHARGE)
            type: num
            modBusAddress: 40358           # 40359 bitfield16
            modBusUnit: 1
            modBusDataType: 'uint16'       # bitfield16 (0 bis 0x7FFF)
            modBusDirection: 'read_write'
            modBusObjectType: 'HoldingRegister'
            visu_acl: rw
    Leider kommt die Fehlermeldung weiterhin:

    HTML-Code:
    2023-12-08  13:49:42 ERROR    plugins.modbus_tcp  something went wrong in the __write_Registers function: __init__() got multiple values for argument 'unit'
    Ich verwende die Version 1.9.5. Testweise habe ich versucht das Plugin modbus_tcp aus dem Develop zu nehmen, aber da gibt es Fehlermeldungen, so dass das Plugin scheinbar nicht mehr läuft.

    Einen Kommentar schreiben:


  • Tom Bombadil
    antwortet
    Zitat von manhartm Beitrag anzeigen
    got multiple values for argument 'unit'
    Geraten: Ist 'unit' nicht für gewöhnlich ein INT/Byte? Das Zeichen '1' könnte evtl. 49 ergeben; außerdem speichert Python Strings auf mehrere Arten mit 1/2/4 Bytes pro Character - erwartet wird aber ein einzelnes Byte (Zahl 0...255) für die Unit.

    Lass mal testweise die Anführungsstriche bei modBusUnit: '1' weg ...

    /tom
    Zuletzt geändert von Tom Bombadil; 08.12.2023, 13:28.

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    Habe einen ersten Fehler in meiner Item-Definition gefunden:

    HTML-Code:
        StorCtl_Mod:                       # [StorCtl_Mod] Activate hold/discharge/charge storage control mode. Bitfield value. (bit 0: CHARGE, bit 1: DiSCHARGE)
            type: num
            modBusAddress: 40358           # 40359 bitfield16
            modBusUnit: '1'
            modBusDataType: 'uint16'       # bitfield16 (0 bis 0x7FFF)
            modBusDirection: 'read_write'
            modBusObjectType: 'HoldingRegister'
            visu_acl: rw
    Ohne den modBusObjectType explizit in den Attributen des Items wird das Item nicht geschrieben. Nun sehe ich im Log:

    HTML-Code:
    2023-12-08  12:45:53 DEBUG    plugins.modbus_tcp  update_item:PV_GEN_24.StorCtl_Mod value:3 regToWrite:HoldingRegister.40358.1
    2023-12-08  12:45:53 INFO     plugins.modbus_tcp  connected to ModbusTcpClient(192.168.10.211:502)
    2023-12-08  12:45:53 DEBUG    plugins.modbus_tcp  write 3 to HoldingRegister.40358.1 (address.slaveUnit) dataType:uint16
    2023-12-08  12:45:53 ERROR    plugins.modbus_tcp  something went wrong in the __write_Registers function: __init__() got multiple values for argument 'unit'
    Leider ist die Fehlermeldung nicht sehr hilfreich. Hat jemand hier eine Idee ?

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    Zitat von manhartm Beitrag anzeigen
    Ich verwende das Plugin für die Abfrage der Register meines Wechselrichters Fronius Gen24. Das Lesen der Register funktioniert einwandfrei.

    Nun wollte ich das Register PV_GEN_24.StorCtl_Mod schreiben. Trage ich den Wert 3 ein, wird nach kurzer Zeit der Wert 0 wieder angezeigt.
    Ich habe für das Plugin modbus_tcp das Logging auf DEBUG umgeschaltet und in einem kleinen Test-Plugin das Item PV_GEN_24.StorCtl_Mod gelesen und geschrieben.

    In der Logdatei finde ich zu diesem Item folgende Einträge:

    HTML-Code:
    2023-12-08  12:03:02 DEBUG    plugins.modbus_tcp  parse item: PV_GEN_24.StorCtl_Mod
    2023-12-08  12:03:02 INFO     plugins.modbus_tcp  parse item: PV_GEN_24.StorCtl_Mod Attributes {'regAddr': 40358, 'slaveUnit': 1, 'dataType': 'uint16', 'factor': 1, 'byteOrder': '>', 'wordOrder': '>', 'item': Item: PV_GEN_24.StorCtl_Mod, 'value': 0, 'objectType': 'HoldingRegister', 'dataDir': 'read_write'}
    ...
    2023-12-08  12:03:21 DEBUG    plugins.modbus_tcp  read HoldingRegister.40358.1 (address.slaveUnit) regCount:1 result:ReadHoldingRegistersResponse (1)
    ...
    2023-12-08  12:03:56 DEBUG    plugins.modbus_tcp  read HoldingRegister.40358.1 (address.slaveUnit) regCount:1 result:ReadHoldingRegistersResponse (1)
    ...
    2023-12-08  12:04:26 DEBUG    plugins.modbus_tcp  read HoldingRegister.40358.1 (address.slaveUnit) regCount:1 result:ReadHoldingRegistersResponse (1)
    ...
    2023-12-08  12:04:50 DEBUG    plugins.modbus_tcp  read HoldingRegister.40358.1 (address.slaveUnit) regCount:1 result:ReadHoldingRegistersResponse (1)
    ...
    Ich finde keine Schreibzugriffe auf das Item im Log. Ich würde erwarten, dass im Plugin die Routine "__write_Registers" aufgerufen wird und ich einen entsprechenden Eintrag "write ..." in der Log-Datei finden würde.

    Einen Kommentar schreiben:


  • bmx
    antwortet
    Zitat von Tom Bombadil Beitrag anzeigen
    Lieber eine Bibliothek mit items-Dateien für ein allgemeingültiges ModbusTCP-Plugin, als 20 verschiedene Modbus-Implementierungen, denen man ständig hinterherhechelt - und sich bei jeder woanders reindenken und rumwurschteln muss
    So würde ich das auch sehen. Lieber ein Plugin was alles abdeckt und ein paar structs oder item.yaml mitbringt in einzelnen Dateien als jeden Code in zig Variationen aufgequirlt.


    Einen Kommentar schreiben:

Lädt...
X