Neue Versionen und Support zum Modbus-Modul

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

Vorheriges Thema - Nächstes Thema

ch.eick

Hallo Stefan

Zitat von: StefanStrobel am 24 März 2021, 17:54:59
das mit den Klammern ist klar: die sind nicht erlaubt.
Im Modbus-Modul habe ich es vor langer Zeit versäumt, die erlaubten Zeichen zu prüfen und wenn ich das jetzt nachträglich mache, dann gibt es viele Beschwerden.
Aber die Konsequenz ist eben dass man per Attribut auch unerlaubte Readng-Namen definieren kann.
(siehe https://wiki.fhem.de/wiki/DevelopmentModuleAPI#goodReadingName)
Okay, dann bereinige ich die reading namen :-)


Zitat
Probier doch mal mit einem anderen Tool per ModbusTCP etwas von dem Device zu lesen und ob dort auch die Verbindung getrennt wird.
Es kann schon sein, dass die Firmware oder Konfiguration doch nicht ganz identisch ist und das Device daher nach einer Minute die TCP-Verbindung schließt. Das ist eigentlich auch gar nicht schlimm. Fhem baut sie dann ja wieder auf. Um die störenden Meldungen wegzubekommen kann man das Attribut silentReconnect setzen.
Welche Tools gibt es denn da?

Ich habe zwei Wechselrichter, bei denen ich die FW aus dem selben File aktualisiert habe.
Am zweiten WR sind nur noch keine Strings angeschlossen und ich habe gestern noch gesehen, dass er aus "Aus" gegangen ist. Trotzdem antwortet die LAN Schnittstelle.

Ich schau dann mal, wie es ist, wenn er komplett Installiert ist. Sollte es dann immer noch so sein teste ich mal das Attribut silentReconnect und melde mich wieder.

Aufgefallen ist es mir nur, weil ich ein stateFormat mit HTML habe und im Moment wechselt ständig connect/disconnect , was das stateFormat dann überschreibt.
Das Device ist jetzt auf disable 1 und es flackert nicht mehr :-)

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

Tomk

#751
Hallo, ich habe heute ein Update gemacht und bekomme das log file voll geschrieben:
Use of uninitialized value $val in concatenation (.) or string at ./FHEM/98_Modbus.pm line 3467

Bin ich alleine?

Danke euch schon mal vorab!

Liegt nicht an diesem Modul, sondern am Rasenmäher dessen Status über modbus übertragen wird. Sorry für die Falschmeldung.

Mastodon

Hallo,

ich habe vor einigen Tagen seit langer Zeit mal wieder ein FHEM-Update durchgeführt und sehe nun Probleme mit meinem ModbusAttr-Device (Solarlader). Ausgelesen wird ein Epever MPPT Gerät. Vor dem Update hat das problemlos funktioniert. Nun wird allerdings ein einzelner Wert nicht mehr automatisch (alle 5 Minuten) aktualisiert. Im log-file taucht folgende Meldung auf:

Solarlader: Timeout waiting for a modbus response, current frame / read buffer: 010402059e3b, id 1, fCode 4,
request: id 1, read fc 4 i12544, len 1, master device Solarlader, reading PanelVoltage (getUpdate for PanelVoltage len 1), queued 2.23 secs ago, sent 2.00 secs ago, error: Invalid checksum 9e3b received. Calculated 817a

Der Fehler tritt nicht auf, wenn ich die Auswahl der auszulesenden Datensätze auf den fehlenden Wert (obj-i12544) einschränke. Sobald ich das Coils-Register (obj-c2) hinzunehme, taucht die Fehlermeldung wieder auf. Manuell lässt sich der Wert über den "get"-Befehl problemlos auslesen. Wo liegt hier der Fehler?

Hier meine Definition:

Internals:
   DEF        1 300 192.168.188.47:23 RTU
   DeviceName 192.168.188.47:23
   EXPECT     idle
   FD         4
   FUUID      5ced6f5c-f33f-b582-0318-1940751ee0562821
   IODev      Solarlader
   Interval   300
   LASTOPEN   1618764431.74967
   MODBUSID   1
   MODE       master
   MODULEVERSION Modbus 4.4.01 - 18.3.2021
   NAME       Solarlader
   NOTIFYDEV  global
   NR         439
   NTFY_ORDER 50-Solarlader
   PARTIAL   
   PROTOCOL   RTU
   STATE      Batterie: BattCapacityRemaining %  Battspannung V BattPowerL W PANEL: 0.66 W Panelspannung V LAST: 0 W
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   nextOpenDelay 60
   OLDREADINGS:
   QUEUE:
   READ:
     BUFFER     
   READINGS:
     2021-04-18 19:17:14   BatteryCurrent  0.05
     2021-04-18 19:17:15   BatteryLevel    68
     2021-04-18 19:17:14   BatteryPowerL   0.53
     2021-04-18 19:17:14   BatteryVoltage  13.36
     2021-04-18 19:17:16   ConsEnergyTodL  0.02
     2021-04-18 19:17:16   ConsEnergyTodL_Wh 20
     2021-04-18 19:17:16   GenEnergyTodL   0.06
     2021-04-18 19:17:16   GenEnergyTodL_Wh 60
     2021-04-18 19:17:15   LoadCurrent     0
     2021-04-18 19:17:15   LoadPowerL      0
     2021-04-18 19:17:14   LoadVoltage     0
     2021-04-18 19:17:11   ManualControlLoad 0
     2021-04-18 19:17:14   PanelCurrent    0.03
     2021-04-18 19:17:14   PanelPowerL     0.66
     2021-04-18 17:15:36   PanelVoltage    15.35
     2021-04-18 19:17:15   Temperature_battery 25
     2021-04-18 19:17:15   Temperature_case 29.62
     2021-04-18 19:17:15   Temperature_sink 29.6
     2021-04-18 19:17:16   TotalConsEnergyL 37.6
     2021-04-18 19:17:16   TotalGenEnergyL 87.66
     2021-04-18 18:47:11   state           opened
   REMEMBER:
     lid        1
     lname      Solarlader
     lrecv      1618766236.45454
     lsend      1618766236.40814
   defptr:
     Solarlader 1
   gotReadings:
     TotalGenEnergyL 87.66
   lastRead:
     c0         1618763310.37581
     c2         1618766231.9835
     i12544     1618758936.14383
     i12545     1618766234.14724
     i12546     1618766234.31589
     i12548     1618766234.50324
     i12549     1618766234.68588
     i12550     1618766234.84331
     i12556     1618766234.98282
     i12557     1618766235.12037
     i12558     1618766235.26276
     i12561     1618766235.39352
     i12562     1618766235.52501
     i12570     1618766235.73491
     i12571     1618766235.87044
     i13060     1618766236.02721
     i13066     1618766236.14372
     i13068     1618766236.30614
     i13074     1618766236.45715
Attributes:
   dev-c-defShowGet 1
   dev-i-defShowGet 1
   event-on-change-reading .*
   obj-c2-poll 1
   obj-c2-reading ManualControlLoad
   obj-c2-set 1
   obj-i12544-expr $val/100
   obj-i12544-poll 1
   obj-i12544-reading PanelVoltage
   obj-i12545-expr $val/100
   obj-i12545-poll 1
   obj-i12545-reading PanelCurrent
   obj-i12546-expr $val/100
   obj-i12546-poll 1
   obj-i12546-reading PanelPowerL
   obj-i12548-expr $val/100
   obj-i12548-poll 1
   obj-i12548-reading BatteryVoltage
   obj-i12549-expr $val/100
   obj-i12549-poll 1
   obj-i12549-reading BatteryCurrent
   obj-i12550-expr $val/100
   obj-i12550-poll 1
   obj-i12550-reading BatteryPowerL
   obj-i12556-expr $val/100
   obj-i12556-poll 1
   obj-i12556-reading LoadVoltage
   obj-i12557-expr $val/100
   obj-i12557-poll 1
   obj-i12557-reading LoadCurrent
   obj-i12558-expr $val/100
   obj-i12558-poll 1
   obj-i12558-reading LoadPowerL
   obj-i12561-expr $val/100
   obj-i12561-poll 1
   obj-i12561-reading Temperature_case
   obj-i12562-expr $val/100
   obj-i12562-poll 1
   obj-i12562-reading Temperature_sink
   obj-i12570-poll 1
   obj-i12570-reading BatteryLevel
   obj-i12571-expr $val/100
   obj-i12571-poll 1
   obj-i12571-reading Temperature_battery
   obj-i13060-expr $val/100
   obj-i13060-poll 1
   obj-i13060-reading ConsEnergyTodL
   obj-i13066-expr $val/100
   obj-i13066-poll 1
   obj-i13066-reading TotalConsEnergyL
   obj-i13068-expr $val/100
   obj-i13068-poll 1
   obj-i13068-reading GenEnergyTodL
   obj-i13074-expr $val/100
   obj-i13074-poll 1
   obj-i13074-reading TotalGenEnergyL
   room       Solaranlage
   stateFormat Batterie: BattCapacityRemaining %  Battspannung V BattPowerL W PANEL: PanelPowerL W Panelspannung V LAST: LoadPowerL W
   userReadings ConsEnergyTodL_Wh { ((ReadingsVal("Solarlader","ConsEnergyTodL",0)-ReadingsVal("Solarladerenergie","fixSL",0))*1000)+ReadingsVal("Solarladerenergie","fix0",0)}, GenEnergyTodL_Wh { ReadingsVal("Solarlader","GenEnergyTodL",0)*1000}


   userattr   dev-c-read dev-c-write event-on-change-reading obj-c0-showGet obj-c2-showGet obj-i12544-showGet obj-i12545-showGet obj-i12546-showGet obj-i12548-showGet obj-i12549-showGet obj-i12550-showGet obj-i12556-showGet obj-i12557-showGet obj-i12558-showGet obj-i12561-showGet obj-i12562-showGet obj-i12570-expr obj-i12570-showGet obj-i12571-showGet obj-i13060-showGet obj-i13066-showGet obj-i13074-showGet stateFormat

laserrichi

Zitat von: Mastodon am 18 April 2021, 19:29:54

Solarlader: Timeout waiting for a modbus response, current frame / read buffer: 010402059e3b, id 1, fCode 4,
request: id 1, read fc 4 i12544, len 1, master device Solarlader, reading PanelVoltage (getUpdate for PanelVoltage len 1), queued 2.23 secs ago, sent 2.00 secs ago, error: Invalid checksum 9e3b received. Calculated 817a

Der Fehler tritt nicht auf, wenn ich die Auswahl der auszulesenden Datensätze auf den fehlenden Wert (obj-i12544) einschränke. Sobald ich das Coils-Register (obj-c2) hinzunehme, taucht die Fehlermeldung wieder auf. Manuell lässt sich der Wert über den "get"-Befehl problemlos auslesen. Wo liegt hier der Fehler?

Hi, also ich weis nicht ob dir mein Modul genau dafür schon bekannt ist
https://forum.fhem.de/index.php/topic,111967.0.html

Wenn ich bei meinen einmal solche effekte hatte half ein reboot von fhem oder auch mal des Solarladers.
Die Software im Solarlader kann man mit manchen Abfragen bzw. setzen von Werten auch schon einmal durcheinander bringen.
Zumindest hatte ich das schon bei meiner fhem implementierung geschafft ;-)
Man kann auch mehrere Readings in einem rutsch abfragen.

Welchen Adapter hast du auf IP ? Stimmt da die Baudrate auch ?
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

Mastodon

Zitat von: laserrichi am 18 April 2021, 21:28:39
Hi, also ich weis nicht ob dir mein Modul genau dafür schon bekannt ist
https://forum.fhem.de/index.php/topic,111967.0.html

Wenn ich bei meinen einmal solche effekte hatte half ein reboot von fhem oder auch mal des Solarladers.
Die Software im Solarlader kann man mit manchen Abfragen bzw. setzen von Werten auch schon einmal durcheinander bringen.
Zumindest hatte ich das schon bei meiner fhem implementierung geschafft ;-)
Man kann auch mehrere Readings in einem rutsch abfragen.

Welchen Adapter hast du auf IP ? Stimmt da die Baudrate auch ?

Hallo laserrichi,

nein, das Modul kannte ich noch nicht. Deshalb bin ich Dir umso dankbarer, dass Du mich darauf hingewiesen hast. Installiert, definiert und funktioniert. Ich werde beobachten, ob es im weiteren Betrieb irgendwelche Auffälligkeiten gibt. Ich habe gerade einen Victron BMV-700 Batteriemonitor eingebunden und muss die Programmperipherie sowieso anpassen. Die Einbindung des neuen EPEVER-Moduls kommt also gerade zur rechten Zeit. 
FHEM-Reboot hat vorher leider nicht geholfen. Den Solarlader hatte ich bisher keinem Reboot unterworfen. Ich benutze einen Selbstbau-Adapter auf ESP8266-Basis zur Kommunikation über WLAN. Die Baudrate sollte stimmen.

StefanStrobel

Wenn Werte beim automatischen Abfragen fehlen, aber einzeln erfolgreich abgefragt werden können, dann liegt es meistens am "combine". Jedes Gerät hat sein eigens Maximum bezüglich der Werte, die innerhalb eines Requests gelesen werden können. Wenn man combine zu hoch einstellt, dann gibt es Probleme...

Gruss
     Stefan

laserrichi

Hallo Stefan,

du wolltest doch auf deine Wunschliste mal Function code 43 (Hex 2b) Encapsulated Interface Transport setzen.
Oder hattest du das wieder verworfen ?
Ist ja auch sowieso nur nice to have.

Gruß Laserrichi
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

StefanStrobel

Hallo Laserrichi,

ich hab mir das mal angesehen und den Eindruck bekommen, dass man das nicht so einfach über Attribute umsetzen kann.

Zitat
The MODBUS Encapsulated Interface (MEI)Transport is a mechanism for tunneling service
requests and method invocations, as well as their returns, inside MODBUS PDUs .
The primary feature of the MEI Transport is the encapsulation of method invocations or
service requests that are part of a defined interface as well as method invocation returns or
service responses.

Das kann alles sein.
Vermutlich könnte man eigenen Perl-Code aufrufen um die Inhalte je nach Gerät zu interpretieren.
Deshalb habe ich es bisher nicht weiter verfolgt.
Was war denn Dein Anwendungsfall?

Gruss
   Stefan

laserrichi

Hallo Stefan,

ok verstehe. Es wäre nur nice to have gewesen. Damit wird bei epever Laderegler die Version Seriennummer usw. ausgelesen.

Gruß laserrichi
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

laserrichi

nochmal eine Frage.
Ich möchte in meinen Modul bei "set"  werte von anderen Readings mit einbauen.

'setexpr' => 'sprintf("%02d", ReadingsVal($name,"einzulesendesreading")',

Hintergrund ist, das ich im Modbus Device manche Werte nur kombiniert setzen kann, diese jedoch als einzelne Readings vorhanden sind.

D.h. wenn ich einen Wert verändere, muss ich die anderen reading register ebenfalls beim set mitschicken.
kann ich bei setexpr eigentlich das so in der Art einbauen ? $name $device oder vieleicht anders ?

RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

StefanStrobel

Hallo laserrichi,

einfach mit ReadingsVal, so wie Du es angedeutet hast.

Gruss
   Stefan

Vorhand

Hallo Stefan, du konntest schon mal in Sachen DimplexBrauchwasserWP bei "stolus" helfen, so dass die Kommunikation funktionierte. Ich hab' zwar alles gelesen -  kein Erfolg.
Hier sind die beiden lists:
ModBusLine
Internals:
   DEF        /dev/ttyUSB0@19200,8,E,1
   DeviceName /dev/ttyUSB0@19200,8,E,1
   EXPECT     response
   FD         4
   FUUID      6096a1e6-f33f-0224-74ab-cb4e1fe42a94885e
   LASTOPEN   1620556537.41282
   MODE       master
   NAME       ModBusLine
   NOTIFYDEV  global
   NR         15
   NTFY_ORDER 50-ModBusLine
   PARTIAL   
   PROTOCOL   RTU
   STATE      opened
   SerialConn 1
   TYPE       Modbus
   devioLoglevel 3
   nextOpenDelay 60
   nextQueueRun 1620563905.75668
   nextTimeout 1620563907.73818
   FRAME:
   QUEUE:
     HASH(0x3148cd8)
     HASH(0x3149728)
     HASH(0x31493b0)
     HASH(0x31a32d8)
     HASH(0x30cb1c8)
     HASH(0x31af040)
     HASH(0x322ae48)
     HASH(0x32411f0)
     HASH(0x31a4378)
     HASH(0x3149530)
     HASH(0x31a43d8)
     HASH(0x31a23a0)
     HASH(0x30bf2f8)
     HASH(0x30d33c8)
     HASH(0x316f4c0)
     HASH(0x30cb300)
     HASH(0x31a61a8)
     HASH(0x31a4468)
     HASH(0x31493c8)
     HASH(0x2528df8)
     HASH(0x322e078)
   READ:
     BUFFER     
   READINGS:
     2021-05-09 12:35:37   state           opened
   REMEMBER:
     lid        2
     lname      ModBusLine
     lrecv      1620563900.71293
     lsend      1620563904.75499
   REQUEST:
     ADR        16
     DBGINFO    getUpdate for WW_Hysterese_K len 1
     FCODE      3
     FRAME      ��
     LEN        1
     MODBUSID   2
     OPERATION  read
     QUEUED     1620563899.53765
     READING    WW_Hysterese_K
     SENT       1620563904.73818
     TYPE       h
     MASTERHASH:
       DEF        2 60
       FUUID      6096b410-f33f-0224-1063-7d1e95ce7a4a04f0
       IODev      ModBusLine
       Interval   60
       MODBUSID   2
       MODE       master
       MODULEVERSION Modbus 4.4.02 - 31.3.2021
       NAME       DHW300
       NOTIFYDEV  global
       NR         16
       NTFY_ORDER 50-DHW300
       PROTOCOL   RTU
       STATE      opened
       TYPE       ModbusDHW300
       FRAME:
       READ:
       READINGS:
         2021-05-09 11:30:04   state           opened
       REMEMBER:
         lrecv      1620563900.71623
         lsend      1620563904.75499
       gotReadings:
       lastRead:
   defptr:
     DHW300     2
Attributes:
   room       DHW300

DHW300
Internals:
   DEF        2 60
   FUUID      6096b410-f33f-0224-1063-7d1e95ce7a4a04f0
   IODev      ModBusLine
   Interval   60
   MODBUSID   2
   MODE       master
   MODULEVERSION Modbus 4.4.02 - 31.3.2021
   NAME       DHW300
   NOTIFYDEV  global
   NR         16
   NTFY_ORDER 50-DHW300
   PROTOCOL   RTU
   STATE      opened
   TYPE       ModbusDHW300
   FRAME:
   READ:
   READINGS:
     2021-05-09 11:30:04   state           opened
   REMEMBER:
     lrecv      1620563141.01976
     lsend      1620563139.97051
   gotReadings:
   lastRead:
Attributes:
   room       DHW300

Mache ich da was grundsätzlich falsch? In der DHW300 habe ich im Menü PVO anstatt BWS als Modus eingestellt, so wie es auch für den Dimplex PV-Optimizer vorgegeben ist.
Meine get Anfragen enden alle mit "Timeout in Readanswer"
Danke
Viele Grüße
Raspi,Homatic,ESP,Fronius,KIA-PHEV,DHW300,Mi,Shelly

StefanStrobel

Hallo Vorhand,

Bist Du denn sicher, dass die Kommunikationsparameter stimmen?
19200,8,E,1 sowie Modbusid 2?

Gruß
    Stefan

Vorhand

Diese Parameter habe ich auch an der BW-Wärmepumpe eingestellt.
Zunächst hatte ich mit USB1 definiert und nur disconnect bekommen. Als ich auf USB0 umstellte erschien opened.
Ist der Status opened keine Bestätigung für eine Verbindung?
Viele Grüße
Raspi,Homatic,ESP,Fronius,KIA-PHEV,DHW300,Mi,Shelly

StefanStrobel

Hallo,

der Status opened bedeutet, dass eine serielle Schnittstelle geöffnet wurde.
Mit Modbus hat das noch nichts zu tun.
Ich würde mit dmesg schauen was passiert, wenn Du den Adapter kurz rausziehst und wieder reinsteckst.
Eventuell hast Du ja die falsche geöffnet...

Gruß
    Stefan