Neue Versionen und Support zum Modbus-Modul

Begonnen von StefanStrobel, 20 August 2017, 12:11:08

Vorheriges Thema - Nächstes Thema

StefanStrobel

Noch eine Idee:

In Deinem ersten Log-Auszug zu dem Thema waren ziemlich viele Verbindungen gleichzeitig offen. Kannst Du in dem Log mal weiter zurück schauen, wann / wie die Aufgebaut werden? Eigentlich sollte für einen Master nur eine Verbindung offen sein. Solange er die nicht schließt, sollte er sie weiter verwenden. Wenn der jedoch in schneller Folge für jeden Request neue Verbindungen aufmacht und Fhem mit dem Schließen nicht nachkommt, kann das auch das Problem sein.
Dann müsstest Du den Servertimeout deutlich kürzer einstellen, z.B. auf 5 Sekunden.

Zitat von: Mariomgn am 21 November 2022, 07:01:16
ich habe nun einen Auszug aus dem Log, warum Fhem sich aufhängt.
2022.11.21 01:16:27 3: Data4PLC_192.168.0.250_53888: read from TCP server connection got null -> closing
2022.11.21 01:16:27 3: Data4PLC_192.168.0.250_53888: _UnDef is closing Data4PLC_192.168.0.250_53888
2022.11.21 01:16:27 3: Data4PLC_192.168.0.250_53889: read from TCP server connection got null -> closing
2022.11.21 01:16:27 3: Data4PLC_192.168.0.250_53889: _UnDef is closing Data4PLC_192.168.0.250_53889
2022.11.21 01:17:48 3: Data4PLC_192.168.0.250_53890: read from TCP server connection got null -> closing
2022.11.21 01:17:48 3: Data4PLC_192.168.0.250_53890: _UnDef is closing Data4PLC_192.168.0.250_53890
2022.11.21 01:17:48 3: Data4PLC_192.168.0.250_53892: read from TCP server connection got null -> closing
2022.11.21 01:17:48 3: Data4PLC_192.168.0.250_53892: _UnDef is closing Data4PLC_192.168.0.250_53892
2022.11.21 01:17:48 3: Data4PLC_192.168.0.250_53893: read from TCP server connection got null -> closing
2022.11.21 01:17:48 3: Data4PLC_192.168.0.250_53893: _UnDef is closing Data4PLC_192.168.0.250_53893
2022.11.21 01:17:48 3: Data4PLC_192.168.0.250_53894: read from TCP server connection got null -> closing
2022.11.21 01:17:48 3: Data4PLC_192.168.0.250_53894: _UnDef is closing Data4PLC_192.168.0.250_53894
2022.11.21 01:19:29 3: Data4PLC_192.168.0.250_53896: read from TCP server connection got null -> closing
2022.11.21 01:19:29 3: Data4PLC_192.168.0.250_53896: _UnDef is closing Data4PLC_192.168.0.250_53896
2022.11.21 01:19:29 3: Data4PLC_192.168.0.250_53898: read from TCP server connection got null -> closing
2022.11.21 01:19:29 3: Data4PLC_192.168.0.250_53898: _UnDef is closing Data4PLC_192.168.0.250_53898
2022.11.21 01:19:29 3: Data4PLC_192.168.0.250_53899: read from TCP server connection got null -> closing
2022.11.21 01:19:29 3: Data4PLC_192.168.0.250_53899: _UnDef is closing Data4PLC_192.168.0.250_53899
2022.11.21 01:19:29 1: Accept failed (Data4PLC: Too many open files)
2022.11.21 01:19:29 1: Accept failed (Data4PLC: Too many open files)
2022.11.21 01:19:29 1: Accept failed (Data4PLC: Too many open files)
2022.11.21 01:19:29 1: Accept failed (Data4PLC: Too many open files)
2022.11.21 01:19:29 1: Accept failed (Data4PLC: Too many open files)
2022.11.21 01:19:29 1: Accept failed (Data4PLC: Too many open files)
2022.11.21 01:19:29 1: Accept failed (Data4PLC: Too many open files)
2022.11.21 01:


Gruss
   Stefan

Mariomgn

Hallo Stefan,

ich habe auf dem Master jetzt Connection Timeout auf 5000ms und Massage Timeout auf 1000ms gestellt und werde morgen noch einmal berichten.


MfG Mario

Mariomgn

Ich nochmal :-)

Fehler hat sich gerade wieder aufgebaut....

Ich habe mir mein Programm in der SPS noch mal genauer angeschaut und ein SPS Analyzer das Ganze beobachten lassen.

Was soll ich sagen... Fhem ist zu langsam ;D ;D :-X

Durch einen kleinen Fehler wurden die ganze Zeit zehn Register alle zwei Millisekunden (Zykluszeit der SPS) abgefragt. 8)

Ich habe das jetzt auch auf fünf Sekunden Intervall geändert.

Taxor

Hallo zusammen  :)

Ich integriere gerade eine Nibe S1255 Wärmepumpe per Modbus TCP/IP in FHEM. Aktuell komme ich mit dem Parameter -expr nicht zurecht bzw. fehlt mir mangels Perl-Kenntnissen wohl der richtige syntax.
Nibe gibt bei Prio (Register 1028) 5 verschiedene Werte zurück (10 - aus, 20 - Warmwasser, 30 - Heizung, 40 - Pool, 60 - Kühlung), je nachdem, was die Wärmepumpe gerade tut. Wie muss ich -expr verwenden, um statt der Zahlen die Entsprechung als Wort anzeigen zu lassen? In der Wiki bin ich leider nicht fündig geworden.

Viele Grüße
Taxor


StefanStrobel

Hallo Taxor,

dafür gibt es die -map Attribute.

Gruss
   Stefan



Taxor

Vielen Dank!!! Habs mit dem -map hinbekommen. Da war der notwendige Syntax ja deutlich einfacher als erwartet ;-)

Viele Grüße

spiderman

#1041
Ich habe meinen Wechselrichter per Modbus integriert inkl. ca. 3 Bildschirmseiten voll mit Readings und Attributen. Beim Löschen des Gerätes reagiert fhem nicht mehr und wird neu gestartet, ohne das das Device gelöscht wurde. Im Logfile ist folgendes zu finden:

2022.12.01 16:19:06 3: SH10rt_Fast: _UnDef is preparing SH10rt_Fast for deletion
2022.12.01 16:19:06 1: PERL WARNING: Deep recursion on subroutine "Modbus::DoClose" at ./FHEM/98_Modbus.pm line 4275.
2022.12.01 16:19:06 1: PERL WARNING: Deep recursion on subroutine "Modbus::SetStates" at ./FHEM/98_Modbus.pm line 1717.
Out of memory!

Folgende Version ist betroffen:

98_Modbus.pm     26497 2022-10-07 17:27:36Z StefanStrobel
98_ModbusAttr.pm 25963 2022-04-14 16:52:16Z StefanStrobel

ch.eick

Zitat von: spiderman am 02 Dezember 2022, 08:23:42
Ich habe meine Wechselrichter per Modbus integriert inkl. ca. 3 Bildschirmseiten voll mit Readings und Attributen. Beim Löschen des Gerätes reagiert fhem nicht mehr und wird neu gestartet, ohne das das Device gelöscht wurde. Im Logfile ist folgendes zu finden:

2022.12.01 16:19:06 3: SH10rt_Fast: _UnDef is preparing SH10rt_Fast for deletion
2022.12.01 16:19:06 1: PERL WARNING: Deep recursion on subroutine "Modbus::DoClose" at ./FHEM/98_Modbus.pm line 4275.
2022.12.01 16:19:06 1: PERL WARNING: Deep recursion on subroutine "Modbus::SetStates" at ./FHEM/98_Modbus.pm line 1717.
Out of memory!

Folgende Version ist betroffen:

98_Modbus.pm     26497 2022-10-07 17:27:36Z StefanStrobel
98_ModbusAttr.pm 25963 2022-04-14 16:52:16Z StefanStrobel
Moin.

Hast Du denn wirklich zuwenig Speicher?

fhem@raspberrypi:~$ top
top - 08:38:29 up 58 days, 18:37,  3 users,  load average: 0,43, 0,41, 0,44
Tasks: 214 total,   1 running, 213 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2,6 us,  1,4 sy,  0,0 ni, 96,0 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
MiB Mem :   3794,0 total,   1081,7 free,   2126,0 used,    586,4 buff/cache
MiB Swap:    100,0 total,      0,0 free,    100,0 used.   1344,9 avail Mem


- Du könntest das Device zuerst mal deaktivieren
- im Anschluss eventuell die vielen Attribute mit einer Maske, in kleineren Gruppen löschen

Mein Wechselrichter Device geht ebenfalls als RAW Definition über 400 Zeilen und das kann ich einfach löschen.

FVERSION 98_ModbusAttr.pm:0.259630/2022-04-14


VG   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

spiderman

#1043
Mein fhem läuft in einer VM unter Proxmox mit 8GB auf einem Intel Nuc i5. Deine oben aufgezeigte Löschstrategie habe ich dann auch gemacht und die Attribute nach und nach gelöscht und dann schlussendlich device. Die VM hat 1GB in gebrauch. Also eigentlich Speicher satt.

StefanStrobel

Das sieht nach einem Bug aus.
Neue Version kommt.

Gruss
   Stefan

StefanStrobel

Anbei eine neue Version zum Testen.
ich habe auch das Handling von STATE vs. state (hoffentlich) in Ordnung gebracht.

Gruss
   Stefan

ChristianA

Hallo,

seit einigen Tagen läuft bei mir die Modbus Verbindung nicht mehr stabil. Nach einem Neustart funktioniert es für 1-2 Stunden, dann können keine Werte mehr gelesen werden. Im Logfile bekomme ich folgende Meldungen

2022.12.09 20:33:50 3: PMR09: Timeout waiting for a modbus response, read buffer empty,
request: id 10, read fc 3 h709, len 1, master device WMZ, reading Ventilstellung (getUpdate for Ventilstellung len 1), queued 2.01 secs ago, sent 2.00 secs ago
...
2022.12.09 20:59:06 3: PMR09: Timeout waiting for a modbus response, read buffer empty,
request: id 10, read fc 3 h748, len 1, master device WMZ, reading FW_Spreizung (getUpdate for FW_Spreizung len 1), queued 18.03 secs ago, sent 2.00 secs ago


Habe momentan keine Plan wo ich ansetzen kann. Habe schon einen Teil der Abfragen abgeschalten, trotzdem funktioniert es nicht dauerhaft.

Schönen Gruß
Christian

Roger

Hi Stefan,
ich habe ein DC communication module PZEM-017, was Modbus spricht.
Ich kann mit ModbusAttr auch wunderbar alle Register lesen und die notwendigen schreiben.

Nur das Kommando zum Reset der Energy bekomme ich nicht hin.
Das Kommando hat nur 4 Bytes: <slave-Modbus-ID>+0x42+CRC high byte+CRC low byte

Kann man das mit ModbusAttr rausschicken?
Wenn ja, wie?

Vorab Dank (auch für das geniale Modul)
//Roger

Zotac, BBB, RPIs mit 10*FHEM
2*HM-LAN, 2*JeeLink, 2*RS485, SignalESP
HomeMatic, PCA301 Komponenten, ModBus: Stromzähler, Fronius WR, Shelly

StefanStrobel

Hallo Roger,

function code 0x42 bzw. 66 existiert nicht im Standard, aber ich könnte das vermutlich ins Modul einbauen.
Ich schau mal ob ich da einen eleganten Weg finde.

Gruss
   Stefan

StefanStrobel

Hallo Christian,

wenn etwas nicht funktioniert, solltest Du verbose auf 5 setzen und einen größeren Ausschnitt aus dem Log posten, damit man sehen kann, was passiert.
Zudem wäre Dein Konfiguration im Detail hilfreich.

Gruss
   Stefan