Neue Versionen und Support zum Modbus-Modul

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

Vorheriges Thema - Nächstes Thema

beaune

Zitat von: StefanStrobel am 15 April 2024, 18:33:21
Zitat von: beaune am 15 April 2024, 14:51:00Da wäre es gut, wenn man irgendwie definieren könnte, dass genau diese beiden Werte möglichst gleichzeitig gelesen werden. Also bräuchte man vielleicht so etwas wie ne Gruppenbildung von Objekten: eine Gruppe für die (wenigen) Parameter, die man zeitgleich braucht, und ne andere für den Rest. Vielleicht gibts auch andere Lösungen. Daher erstmal meine Frage: gibt es hier schon einen Mechanismus, den man nutzen könnte?

obj-[cdih][0-9]+-group


ist für so etwas gedacht. Solche Werte stehen ja in der Regel hintereinander.

Gruss
  Stefan



Ich muß nochmal nachfragen... Die Werte stehen bei mir relativ weit auseinander, so dass ich folgende Fehlermeldung bekomme:
2024.04.17 10:19:06 3: PV: CreateUpdateHash found group 1 span 70 is longer than defined maximum 10
Ausschnitt aus meiner Definition:
attr PV obj-i0002-group 1-2
attr PV obj-i0002-name 0x02
attr PV obj-i0002-poll 1
attr PV obj-i0002-reading GridPower
attr PV obj-i0002-showGet 1
attr PV obj-i0002-type signed short big

attr PV obj-i0070-group 1-1
attr PV obj-i0070-len 2
attr PV obj-i0070-name 0x46
attr PV obj-i0070-poll 1
attr PV obj-i0070-reading FeedinPower
attr PV obj-i0070-showGet 1
attr PV obj-i0070-unpack s>

attr PV dev-i-combine 10

Hast Du dafür auch ne Lösung? Ich kann ja nicht alle 70 Register auf einen Schlag lesen...

Gruß
Beaune

StefanStrobel

Hallo Beaune,

theoretisch ist sogar das Lesen von 120 Register mit einem Request machbar. Ob Dein Derät da mitspielt, musst Du testen. Einfach mal combine z.B. auf 80 setzen.

Gruss
   Stefan

tobmaster1985

Hi

Ich habe vergeblich versucht, input Register zu scannen, es wurden immer die holding Register gescannt und die entsprechenden attr/readings mit "h" angelegt.

Im Verbose Log lies sich folgendes finden:
ProcessRequestQueue called from Fhem internal timer as queue:SH10RT_Test, qlen 1, request: request: id 1, scanobj fc 3 i4999, len 1, tid 249, master device SH10RT_Test (scan objs), queued 0.01 secs ago
Warum fc 3 für Register i4999 ? Es müsste fc 4 sein.

Daraufhin habe ich mir die Funktionen in der 98_Modbus.pm angesehen und den Fehler in der Funktion GetFC gefunden:
Der fc in in einem Hash gesucht, jedoch nicht gefunden und bleibt es dann beim Default fc 3.

Der Fehler liegt in der Zeile:

if ($fcMap{$fc}{type} && $fcMap{$fc}{type} eq $type && exists $fcMap{$fc}{$op} && exists $fcMap{$fc}{default}) {
$op enthält beim Scan "scanobj" und das existiert in dem Hash nicht, es gibt nur read und write im Hash.

So funktioniert der Scan korrekt:

if ($fcMap{$fc}{type} && $fcMap{$fc}{type} eq $type && exists $fcMap{$fc}{$fcKey} && exists $fcMap{$fc}{default}) {
ProcessRequestQueue called from Fhem internal timer as queue:SH10RT_Test, qlen 1, request: request: id 1, scanobj fc 4 i4999, len 1, tid 189, master devi
ce SH10RT_Test (scan objs), queued 0.00 secs ago

VG
Tobias


StefanStrobel

Hallo Tobias,

erschreckend, dass der Bug jahrelang unentdeckt geblieben ist, aber die Scan-Funktion wurde offenbar selten und wenn überhaupt dann mit holding registern verwendet.
Danke für den Hinweis, habe es geändert und checke es gleich ein.

Gruss
   Stefan

300P

Ich hab bislang nur h-Register beim scannen genutzt, bei den i-registern kam nichts. Dachte es läge an mir bzw. an den jeweiliegen Geräten das da nichts kam....😮

Hab aber auch nie dann im Logbuch oder oder auf irgendwelche Fehlermeldungen geachtet da ich es dann manuell gemacht habe, soweit dies notweding.🤷
FHEM 6.3 - Raspberry Pi 3 / Pi 4 - VControl300 mit VITOVALOR 300P - SMAEM - SMAInverter - DbLog/DbRep - MariaDB/QNAP - div. HTTPMOD - div. Modbus ser+TCP - SolarForecast - Tibber + Ladung mit SMA-SBS25