Neue Versionen und Support zum Modbus-Modul

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

Vorheriges Thema - Nächstes Thema

StefanStrobel

Hallo tomix,

bei Modbus-TCP-Slaves ist es durchaus üblich, dass die TCP-Verbindung nach einer Weile geschlossen wird.
silentReconnect ist dann der richtige Weg.

Du kannst auch mit dem Attribut closeAfterResponse einstellen, dass die TCP-Verbindung nur bei Bedarf aufgebaut und nach der Antwort auch wieder geschlossen wird.

Gruss
   Stefan

StefanStrobel

Zitat von: ansgru am 26 Januar 2022, 21:16:09
Das geht leider nicht weil einzelne Relais ein FF 00 erwarten als Befehl zum einschalten (resp. 55 00 für ein Toggle), das Schalten aller Relais aber ein FF FF. Mit dev-c-brokenFC5 kann ich ja nur global den zu senden Wert zum Aktivieren eines Coils festlegen wenn ich das richtig verstanden habe?
ja, dev-c-brokenFC5 wirkt global.

Zitat
Hmmm, ich habe noch einen völlig anderen Ansatz: wie wäre es, wenn ich pro Register mit einem zusätzlichen Flag angeben kann, welcher Function Code verwendet werden soll? Also ein obj-[ih][1-9][0-9]*-overrideFC? Die Funktionsweise wäre dann wie folgt: ich würde für das Schalten der Relais "Holding Register Objekte" definieren (also obj-h255-reading statt obj-c255-reading) und zusätzlich ein obj-h255-overrideFC 5. Also ähnlich wie dev-([cdih]-)*write|read ABER pro Register UND intern würde Modbus.pm in diesem Beispiel h255 intern als Holding Register behandeln und nur in der Kommunikation den gewählten FC verwenden. Bei dev*write|read ist es ja so, dass - wenn ich z.B. dev-h-write 5 definiere - alle Holding Registers fortan als Coils betrachtet werden und ich damit wieder keine individuellen Werte wie FF FF, FF 00 individuell pro Register definieren kann.

Ja, das wäre keine größere Änderung. Bei FC5 und FC6 würde es sogar funktionieren. Bei anderen Codes aber nicht, da die Nachrichten nicht immer gleich aufgebaut sind. ich sollte dann zumindest in der Doku dazuschreiben, dass man dieses Attribut nur verwenden sollte, wenn man die Modbus-Spec gelesen und verstanden hat, was man damit tut ;-)

Ich versuche das demnächst mal einzubauen und poste dann eine Version zum Testen.

Gruss
   Stefan

StefanStrobel

Hallo Stephan,

kannst Du Deine Konfiguration noch posten?

Wer triggert eigentlich den set Charge_Current?

Gruss
   Stefan

StefanStrobel

Hallo,

anbei eine neue Version zum Testen.
es gibt neue Attribute obj-XX-overrideFCread und obj-XX-overrideFCwrite um die function codes für das Lesen und Schreiben eines einzelnen Objekts zu überschreiben.
Zudem habe ich das Handling von Timeouts so geändert, dass schon vor dem Parsen eines Replies der Timeout-zurückgesetzt wird. Eventuell hilft das bei dem von Stephan beschriebenen Problem.

Gruss
   Stefan

RaKoHe

Moin Stefan,

danke für die neue Version.

Wenn ich nur die beiden Module update(der Rest ist ziemlich alt) funktioniert es, hatte allerdings im Browser mehrere Lost Connection Meldungen.

Nach einem update all(exclude Modbus und ModbusAttr) bekomme ich Fehler beim Start.


2022.02.10 09:57:02 1: PERL WARNING: Subroutine TryCall redefined at ./FHEM/98_Modbus.pm line 4997, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ObjKey redefined at ./FHEM/98_Modbus.pm line 4974, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine DevInfo redefined at ./FHEM/98_Modbus.pm line 4948, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ObjInfo redefined at ./FHEM/98_Modbus.pm line 4867, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ObjAttr redefined at ./FHEM/98_Modbus.pm line 4840, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine LRC redefined at ./FHEM/98_Modbus.pm line 4824, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine CRC redefined at ./FHEM/98_Modbus.pm line 4804, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine compObjTA redefined at ./FHEM/98_Modbus.pm line 4790, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine compObjGroups redefined at ./FHEM/98_Modbus.pm line 4766, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine compObjCombi redefined at ./FHEM/98_Modbus.pm line 4750, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ResetExpect redefined at ./FHEM/98_Modbus.pm line 4736, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine DropBuffer redefined at ./FHEM/98_Modbus.pm line 4720, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ShowBuffer redefined at ./FHEM/98_Modbus.pm line 4700, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine DevLockingKey redefined at ./FHEM/98_Modbus.pm line 4683, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine GetLogHash redefined at ./FHEM/98_Modbus.pm line 4641, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine UnregAtIODev redefined at ./FHEM/98_Modbus.pm line 4580, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine RegisterAtIODev redefined at ./FHEM/98_Modbus.pm line 4552, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine IsRegisteredAtIODev redefined at ./FHEM/98_Modbus.pm line 4534, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine CheckIOCompat redefined at ./FHEM/98_Modbus.pm line 4492, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine GetIOHash redefined at ./FHEM/98_Modbus.pm line 4471, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine SetIODev redefined at ./FHEM/98_Modbus.pm line 4423, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine CheckDisable redefined at ./FHEM/98_Modbus.pm line 4389, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine GetSetChecks redefined at ./FHEM/98_Modbus.pm line 4354, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ResponseTimeout redefined at ./FHEM/98_Modbus.pm line 4275, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ServerTimeout redefined at ./FHEM/98_Modbus.pm line 4250, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine SetStates redefined at ./FHEM/98_Modbus.pm line 4220, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine CountTimeouts redefined at ./FHEM/98_Modbus.pm line 4175, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine CheckChecksum redefined at ./FHEM/98_Modbus.pm line 4105, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine AddFrameError redefined at ./FHEM/98_Modbus.pm line 4092, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine DropFrame redefined at ./FHEM/98_Modbus.pm line 4057, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine LogFrame redefined at ./FHEM/98_Modbus.pm line 4045, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine FrameText redefined at ./FHEM/98_Modbus.pm line 4028, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ResponseText redefined at ./FHEM/98_Modbus.pm line 4014, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine RequestText redefined at ./FHEM/98_Modbus.pm line 3991, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine GetUpdate redefined at ./FHEM/98_Modbus.pm line 3948, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine CombineUpdateHash redefined at ./FHEM/98_Modbus.pm line 3874, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine CreateUpdateHash redefined at ./FHEM/98_Modbus.pm line 3773, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine SendFrame redefined at ./FHEM/98_Modbus.pm line 3720, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine PackFrame redefined at ./FHEM/98_Modbus.pm line 3681, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine PackResponse redefined at ./FHEM/98_Modbus.pm line 3634, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine PackRequest redefined at ./FHEM/98_Modbus.pm line 3585, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine PackObj redefined at ./FHEM/98_Modbus.pm line 3477, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ProcessRequestQueue redefined at ./FHEM/98_Modbus.pm line 3388, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine CheckDelays redefined at ./FHEM/98_Modbus.pm line 3304, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine NextRequestFromQueue redefined at ./FHEM/98_Modbus.pm line 3277, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine QueueRequest redefined at ./FHEM/98_Modbus.pm line 3215, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine DoRequest redefined at ./FHEM/98_Modbus.pm line 3179, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine GetFC redefined at ./FHEM/98_Modbus.pm line 3132, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine CreateResponse redefined at ./FHEM/98_Modbus.pm line 3084, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine RelayResponse redefined at ./FHEM/98_Modbus.pm line 3042, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine RelayRequest redefined at ./FHEM/98_Modbus.pm line 2978, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine GetRelayIO redefined at ./FHEM/98_Modbus.pm line 2924, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ParseRequest redefined at ./FHEM/98_Modbus.pm line 2822, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine HandleRequest redefined at ./FHEM/98_Modbus.pm line 2746, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ParseDataString redefined at ./FHEM/98_Modbus.pm line 2706, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine CreateDataObjects redefined at ./FHEM/98_Modbus.pm line 2629, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine CreateParseInfoCache redefined at ./FHEM/98_Modbus.pm line 2604, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine SplitDataString redefined at ./FHEM/98_Modbus.pm line 2527, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine WriteObject redefined at ./FHEM/98_Modbus.pm line 2477, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine arrayEncoding redefined at ./FHEM/98_Modbus.pm line 2458, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ScanFormat redefined at ./FHEM/98_Modbus.pm line 2416, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ScanReadingName redefined at ./FHEM/98_Modbus.pm line 2386, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ParseResponse redefined at ./FHEM/98_Modbus.pm line 2268, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine HandleResponse redefined at ./FHEM/98_Modbus.pm line 2165, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ParseFrameStart redefined at ./FHEM/98_Modbus.pm line 2107, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine SkipGarbageCheck redefined at ./FHEM/98_Modbus.pm line 2058, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ReadAnswer redefined at ./FHEM/98_Modbus.pm line 1948, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ReadFn redefined at ./FHEM/98_Modbus.pm line 1844, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine HandleGaps redefined at ./FHEM/98_Modbus.pm line 1812, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine HandleServerConnection redefined at ./FHEM/98_Modbus.pm line 1774, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ReadyFn redefined at ./FHEM/98_Modbus.pm line 1746, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine DoClose redefined at ./FHEM/98_Modbus.pm line 1685, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine OpenCB redefined at ./FHEM/98_Modbus.pm line 1666, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine DoOpen redefined at ./FHEM/98_Modbus.pm line 1577, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine NotifyFn redefined at ./FHEM/98_Modbus.pm line 1530, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ScanIds redefined at ./FHEM/98_Modbus.pm line 1463, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ScanObjects redefined at ./FHEM/98_Modbus.pm line 1417, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine SaveAsModule redefined at ./FHEM/98_Modbus.pm line 1345, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine createAttrsFromParseInfo redefined at ./FHEM/98_Modbus.pm line 1298, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine ControlSet redefined at ./FHEM/98_Modbus.pm line 1143, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine SetLDFn redefined at ./FHEM/98_Modbus.pm line 1079, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine FormatSetVal redefined at ./FHEM/98_Modbus.pm line 1028, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine GetLDFn redefined at ./FHEM/98_Modbus.pm line 992, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine UpdateGetSetList redefined at ./FHEM/98_Modbus.pm line 939, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine SetLDActive redefined at ./FHEM/98_Modbus.pm line 916, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine SetLDInactive redefined at ./FHEM/98_Modbus.pm line 897, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine AttrLDFn redefined at ./FHEM/98_Modbus.pm line 761, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine AttrFn redefined at ./FHEM/98_Modbus.pm line 735, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine UndefLDFn redefined at ./FHEM/98_Modbus.pm line 715, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine UndefFn redefined at ./FHEM/98_Modbus.pm line 691, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine DefineLDFn redefined at ./FHEM/98_Modbus.pm line 570, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine DefineFn redefined at ./FHEM/98_Modbus.pm line 538, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine InitializeLD redefined at ./FHEM/98_Modbus.pm line 510, <$fh> line 1399.
2022.02.10 09:57:02 1: PERL WARNING: Subroutine Initialize redefined at ./FHEM/98_Modbus.pm line 488, <$fh> line 1399.


Mit sonnigen Grüßen

Ralf

StefanStrobel

Hallo Ralf,

starte doch einfach Dein Fhem mal neu.

Gruß
   Stefan

RaKoHe

#891
Moin Stefan,

leider auch nach Shutdown restart und reboot noch vorhanden.
Jetzt wird line 1400 ausgegeben.
Auch nach 3x Neustart noch.

Nach Update inklusive Modbus und ModbusAttr funktioniert die Abfrage der Doepke Register nicht mehr weil scheinbar dev-d-brokenFC2
fehlt.

Mit sonnigen Grüßen

Ralf

StefanStrobel

Hallo Ralf,

das ist seltsam. An dem Code für dev-d-brokenFC2 hat sich nichts geändert und die Warnings kann ich bei mir nicht nachvollziehen.
Um das zu klären bräuchte ich einen deutlich größeren Ausschnitt aus dem Log bei verbose 5. Am besten auch die Konfiguration Deiner Geräte, die etwas mit Modbus zu tun haben.
Der Fix für Doepke erzeugt ja auch einen Eintrag im Log wenn er ausgeführt wird.

Gruss
   Stefan

RaKoHe

Moin Stefan,

Danke für die Antwort.
Die Warnings werden scheinbar durch einen Fehler in der myUtils verursacht.
Ich suche den Fehler selber:-)

Die Versionen der Modbus Module vom 09.02. funktionieren bei mir.

Mit sonnigen Grüßen

Ralf

Aurel_B

Hallo Stefan,

sorry für die späte Antwort, es ging einige Zeit bis ich die neue Version endlich testen konnte. Absolut phantastisch, jetzt klappt alles wie gewünscht :-) Hier als Referenz meine (absolut reduzierte) Config falls jemand zufällig auch das "Waveshare Modbus RTU Relay" verwenden möchte:


defmod Waveshare_Relay ModbusAttr 1 10
attr Waveshare_Relay obj-c0-reading Relay0
attr Waveshare_Relay obj-c0-set 1
attr Waveshare_Relay obj-c1-reading Relay1
attr Waveshare_Relay obj-c1-set 1

(weitere Relais analog....)

attr Waveshare_Relay obj-h255-overrideFCwrite 5
attr Waveshare_Relay obj-h255-reading Alle_Relais
attr Waveshare_Relay obj-h255-set 1


Mit set Waveshare_Relay Alle_Relais 65535 lassen sich alle Relais an- und mit set Waveshare_Relay Alle_Relais 0 alle Relais abschalten. Die einzelnen Relais lassen sich mit set Waveshare_Relay Relais[0-7] 1|0 schalten. Mehr brauche ich nicht. Vielen herzlichen Dank für die rasche Umsetzung!

Schade, dass sich das Waveshare Relay nicht an den Standard hält. Die Hardware ist nämlich super verarbeitet, auch vom Modbus/RS485 USB Adapter (dem hochwertigen im Metallgehäuse https://www.waveshare.com/product/iot-communication/wired-comm-converter/rs232-rs485-can/usb-to-rs232-485-ttl.htm) bin ich sehr angetan, der funktioniert hervorragend und scheint auch sehr robust zu sein.

Beste Grüsse, Anton

abc2006

Hi Stefan,

danke für deine schnelle Reaktion und die neuen Dateien.

Ich hab die bei mir eingespielt, der Fehler tritt trotzdem auf.

meine Konfiguration (ich nehme an du meinst ein list):


Internals:
   DEF        1 5 192.168.0.49:502 TCP
   DeviceName 192.168.0.49:502
   EXPECT     response
   FD         28
   FUUID      62057813-f33f-4040-fc6d-0c6e8e9966865e61
   IODev      alfen_Socket_aussen
   Interval   5
   LASTOPEN   1646131815.17942
   MODBUSID   1
   MODE       master
   MODULEVERSION Modbus 4.4.04 - 17.7.2021
   NAME       alfen_Socket_aussen
   NOTIFYDEV  global
   NR         597
   NTFY_ORDER 50-alfen_Socket_aussen
   PARTIAL   
   PROTOCOL   TCP
   STATE      charging in progress Ladestrom: 16 A Ladeleistung: 10317 W NoP: 3
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   nextOpenDelay 60
   nextQueueRun 1646132330.1194
   nextTimeout 1646132331.1171
   FRAME:
   QUEUE:
     HASH(0x559927b2f7b0)
     HASH(0x559927b11b90)
     HASH(0x5599280cfd00)
     HASH(0x5599281478d8)
     HASH(0x559927c431c0)
     HASH(0x559927b01cb8)
     HASH(0x559927ce3668)
     HASH(0x559927ee26a8)
     HASH(0x559927bc72c8)
   READ:
     BUFFER     
   READINGS:
     2022-03-01 11:58:45   ActualAppliedMaxCurrent 16
     2022-03-01 11:58:45   Availability    1
     2022-03-01 11:58:46   Charge_Current  16
     2022-03-01 11:58:46   Charge_with_1_or_3_phases 3
     2022-03-01 11:58:48   CurrentPhaseL1  15
     2022-03-01 11:58:48   CurrentPhaseL2  15.1
     2022-03-01 11:58:48   CurrentPhaseL3  15.2
     2022-03-01 11:58:49   Fzg_angeschlossen Fahrzeug angeschlossen
     2022-03-01 11:58:49   Laden_moeglich  Laden moeglich
     2022-03-01 11:58:45   MaxCurrentValidTimeRemaining 276
     2022-03-01 11:58:45   Mode3State      C2
     2022-03-01 11:58:49   Mode3State_     charging in progress
     2022-03-01 11:58:44   RealEnergyDeliveredSum 1158.737 Wh
     2022-03-01 11:58:44   RealEnergyDeliveredSumL1 NaN
     2022-03-01 11:58:44   RealEnergyDeliveredSumL2 NaN
     2022-03-01 11:58:44   RealEnergyDeliveredSumL3 NaN
     2022-03-01 11:58:49   RealPowerSum    10317
     2022-03-01 11:58:47   VoltPhase1      226.2
     2022-03-01 11:58:47   VoltPhase2      227.9
     2022-03-01 11:58:48   VoltPhase3      227.1
     2022-03-01 11:58:49   actual_charge_power 10286.21
     2022-03-01 11:50:15   state           opened
   REMEMBER:
     lid        1
     lname      alfen_Socket_aussen
     lrecv      1646132329.01702
     lsend      1646132329.11925
   REQUEST:
     ADR        362
     DBGINFO    getUpdate for RealEnergyDeliveredSumL1 len 4
     FCODE      3
     FRAME      �j
     LEN        4
     MODBUSID   1
     OPERATION  read
     QUEUED     1646132327.34868
     READING    RealEnergyDeliveredSumL1
     SENT       1646132329.1171
     TID        246
     TYPE       h
     MASTERHASH:
   defptr:
     alfen_Socket_aussen 1
   gotReadings:
     RealPowerSum 10317
   lastRead:
     h1200      1646132325.14273
     h1201      1646132325.36805
     h1206      1646132325.59799
     h1208      1646132325.81839
     h1210      1646132326.04309
     h1215      1646132326.26842
     h306       1646132327.56858
     h308       1646132327.81812
     h310       1646132328.06868
     h320       1646132328.31812
     h322       1646132328.56796
     h324       1646132328.79219
     h344       1646132329.01839
     h362       1646132324.24258
     h366       1646132324.46937
     h370       1646132324.69332
     h374       1646132324.91881
Attributes:
   dev-h-defPoll 1
   dev-type-FLOAT16-len 2
   dev-type-FLOAT16-unpack f>
   dev-type-FLOAT32-len 4
   dev-type-FLOAT32-unpack f>
   dev-type-FLOAT64-len 4
   dev-type-FLOAT64-unpack d>
   dev-type-SIGNED16-len 1
   dev-type-SIGNED16-unpack n!
   dev-type-STRING17-len 17
   dev-type-STRING17-unpack Z*
   dev-type-STRING5-len 5
   dev-type-STRING5-unpack Z*
   dev-type-UNSIGNED16-len 1
   dev-type-UNSIGNED16-unpack S>
   dev-type-UNSIGNED32-len 2
   dev-type-UNSIGNED32-unpack L>
   dev-type-UNSIGNED64-len 4
   dev-type-UNSIGNED64-unpack Q>
   event-on-change-reading RealEnergyDeliveredSum:0.1,RealPowerSum:10,ActualAppliedMaxCurrent
   event-on-update-reading MaxCurrentValidTimeRemaining,Mode3State
   obj-h1200-reading Availability
   obj-h1200-type UNSIGNED16
   obj-h1201-reading Mode3State
   obj-h1201-type STRING5
   obj-h1206-reading ActualAppliedMaxCurrent
   obj-h1206-type FLOAT32
   obj-h1208-reading MaxCurrentValidTimeRemaining
   obj-h1208-type UNSIGNED32
   obj-h1210-allowWrite 1
   obj-h1210-hint 0,6,7,8,9,10,11,12,13,14,15,16
   obj-h1210-reading Charge_Current
   obj-h1210-set 1
   obj-h1210-type FLOAT16
   obj-h1215-allowWrite 1
   obj-h1215-hint 1,3
   obj-h1215-reading Charge_with_1_or_3_phases
   obj-h1215-set 1
   obj-h1215-type UNSIGNED16
   obj-h256-expr int($val)/10
   obj-h306-expr int(10*$val)/10
   obj-h306-reading VoltPhase1
   obj-h306-type FLOAT32
   obj-h308-expr int(10*$val)/10
   obj-h308-reading VoltPhase2
   obj-h308-type FLOAT32
   obj-h310-expr int(10*$val)/10
   obj-h310-reading VoltPhase3
   obj-h310-type FLOAT32
   obj-h320-expr int(10*$val)/10
   obj-h320-reading CurrentPhaseL1
   obj-h320-type FLOAT32
   obj-h322-expr int(10*$val)/10
   obj-h322-reading CurrentPhaseL2
   obj-h322-type FLOAT32
   obj-h324-expr int(10*$val)/10
   obj-h324-reading CurrentPhaseL3
   obj-h324-type FLOAT32
   obj-h344-expr int($val)
   obj-h344-reading RealPowerSum
   obj-h344-type FLOAT32
   obj-h362-reading RealEnergyDeliveredSumL1
   obj-h362-type FLOAT64
   obj-h366-reading RealEnergyDeliveredSumL2
   obj-h366-type FLOAT64
   obj-h370-reading RealEnergyDeliveredSumL3
   obj-h370-type FLOAT64
   obj-h374-expr $val/1000
   obj-h374-format %.3f Wh
   obj-h374-reading RealEnergyDeliveredSum
   obj-h374-type FLOAT64
   room       tesla
   stateFormat Mode3State_ Ladestrom: ActualAppliedMaxCurrent A Ladeleistung: RealPowerSum W NoP: Charge_with_1_or_3_phases
   userReadings Mode3State_ {my $M3state = ReadingsVal($name,"Mode3State",-1);
if($M3state =~ /A/ ){
return "EVSE ready and standby";
} elsif($M3state =~ /B1/ ){
return "EV connected to EVSE";
} elsif($M3state =~ /B2/ ){
return "charging approved by EVSE";
} elsif($M3state =~ /C1/ ){
return "charging approved by EV, but not by EVSE";
} elsif($M3state =~ /C2/ ){
return "charging in progress";
} elsif($M3state =~ /D1/ ){
return "ventilated charging approved by EV, but not by EVSE";
} elsif($M3state =~ /D2/ ){
return "ventilated charging in progress";
} elsif($M3state =~ /E/ ){
return "Error inside Vehicle";
} elsif($M3state =~ /F/ ){
return "Error inside Wallbox";
}
},
Fzg_angeschlossen {my $M3state = ReadingsVal($name,"Mode3State",-1);
if($M3state =~ /A/ ){
return "Kein Fahrzeug angeschlossen";
} else{
return "Fahrzeug angeschlossen";
}
},
Laden_moeglich {my $M3state = ReadingsVal($name,"Mode3State",-1);
if($M3state =~ /[CD]/ ){
return "Laden moeglich";
} else{
return "Laden nicht moeglich";
}
},
energy_last_charge {
if(ReadingsVal($name,"Mode3State",-1) )
{}
},
actual_charge_power {
my $powerL1 = ReadingsVal($name,"CurrentPhaseL1",-1) * ReadingsVal($name,"VoltPhase1",-1);
my $powerL2 = ReadingsVal($name,"CurrentPhaseL2",-1) * ReadingsVal($name,"VoltPhase2",-1);
my $powerL3 = ReadingsVal($name,"CurrentPhaseL3",-1) * ReadingsVal($name,"VoltPhase3",-1);
my $power_total = $powerL1 + $powerL2 + $powerL3;

}
   verbose    3

Pre: Da ich jetzt mehrfach die Begriffe geändert hab, hier ein kurzes Wording: Aussen an meinem Parkplatz hängt eine Wallbox an der Wand. Diese wird durch ModbusAttr gesteuert. Ich nenn die jetzt einfach Wallbox, dann ist klar dass ich nichts in FHEM meine.

Das set Charge_Current wird von einem DOIF
https://github.com/abc2006/alfen/blob/main/DF_ueberschussladung_raw.pl 
gesetzt, welches aus diversen Faktoren den zulässigen Ladestrom berechnet.
Dabei ist mir aufgefallen, dass das ModbusAttr tatsächlich mehrfach mit den set's beschossen wurde - das habe ich in den letzten Tagen reduziert.
Versucht habe ich, es komplett zu beheben, ich bin aber nicht sicher, dass das geklappt hat.

[ kurz ein bisschen OT: ]
U.a. deswegen hätte ich eine Bitte:

Auf verbose 2 (laut Attr-Hilfe "2 - major events/alarms") würde ich erwarten, dass er loggt, wenn ein set-Befehl eingeht
Auf verbose 3 (laut Attr-Hilfe "3 - commands sent out will be logged") würde ich erwarten, dass er loggt, wenn er eine Abfrage (egal ob set oder get) an die Wallbox schickt

Leider bekomme ich auf Lvl 2 gar nichts, auf 3 nur die Timeouts und erst auf Lvl 4 dann mehr Infos - das sind dann aber bereits zuviele, um zb herauszufinden, wie oft tatsächlich ein set-Befehl bei ModbusAttr ankommt oder gar an die Wallbox gesendet wird.

Kannst du mir noch folgen? Evtl könnte man hier die verschiedenen level noch etwas anpassen oder ich habe das System dahinter noch nicht durchschaut.
[BTT]

Die Wallbox hat einen Timer (Reading MaxCurrentValidTimeRemaining). Dieser läuft von 300 Sekunden (konfigurierbar) abwärts auf 0. Mit jedem set Charge_Current, was bei der Wallbox ankommt, wird der Timer wieder auf 300 zurückgesetzt. Wenn der Timer bei 0 ankommt, schaltet die Wallbox in einen safe-Mode (konfigurierbar), weil sie annimmt, dass die Verbindung unterbrochen ist.  Durch den Timer kann ich relativ genau feststellen, wann ein set charge_current bei der Wallbox angekommen ist - allerdings nicht, ob es zwischendurch von ModbusAttr verschluckt wurde (durch den Timeout).

Jetzt wieder zu deiner Frage:
Nachdem ich jetzt die set Charge_Current stark reduziert habe, treten trotzdem  noch Timeouts (und freezes) auf. Hier nochmal ein Auszug aus dem Log:



2022.03.01 12:06:29.592 2: set_charge_current() EVENTS MaxCurrentValidTimeRemaining: 291
2022.03.01 12:06:29.596 5: set_charge_current() available_charge_current 12
2022.03.01 12:06:29.596 5: set_charge_current() ret_ueberschuss 0
2022.03.01 12:06:34.590 2: set_charge_current() EVENTS MaxCurrentValidTimeRemaining: 286
2022.03.01 12:06:34.597 5: set_charge_current() available_charge_current 13
2022.03.01 12:06:34.600 5: set_charge_current() ret_ueberschuss 0
2022.03.01 12:06:39.615 2: set_charge_current() EVENTS MaxCurrentValidTimeRemaining: 281
2022.03.01 12:06:39.620 5: set_charge_current() available_charge_current 15
2022.03.01 12:06:41.625 3: alfen_Socket_aussen: Timeout in Readanswer, current frame / read buffer: 00e50000000701030400000119, id 1, fCode 3, tid 229,
request: id 1, read fc 3 h1208, len 2, tid 229, master device alfen_Socket_aussen, reading MaxCurrentValidTimeRemaining (getUpdate for MaxCurrentValidTimeRemaining len 2), queued 5.49 secs ago, sent 2.14 secs ago,
response: id 1, fc 3, h1208, len 2, values 00000119
2022.03.01 12:06:41.965 3: set_charge_current() set alfen_Socket_aussen Charge_Current 15
2022.03.01 12:06:41.965 5: set_charge_current() ret_ueberschuss 0
2022.03.01 12:06:41.971 1: Perfmon: possible freeze starting at 12:06:40, delay is 1.971
2022.03.01 12:06:45.966 2: set_charge_current() EVENTS MaxCurrentValidTimeRemaining: 295
2022.03.01 12:06:45.976 5: set_charge_current() available_charge_current 18
2022.03.01 12:06:45.978 5: set_charge_current() ret_ueberschuss 0
2022.03.01 12:06:50.467 2: set_charge_current() EVENTS MaxCurrentValidTimeRemaining: 291
2022.03.01 12:06:50.476 5: set_charge_current() available_charge_current 20
2022.03.01 12:06:50.478 5: set_charge_current() ret_ueberschuss 0
2022.03.01 12:06:55.489 2: set_charge_current() EVENTS MaxCurrentValidTimeRemaining: 286
2022.03.01 12:06:55.497 5: set_charge_current() available_charge_current 20
2022.03.01 12:06:55.497 5: set_charge_current() ret_ueberschuss 0
2022.03.01 12:07:00.464 2: set_charge_current() EVENTS MaxCurrentValidTimeRemaining: 281
2022.03.01 12:07:00.471 5: set_charge_current() available_charge_current 18
2022.03.01 12:07:02.475 3: alfen_Socket_aussen: Timeout in Readanswer, current frame / read buffer: 004b0000000701030400000119, id 1, fCode 3, tid 75,
request: id 1, read fc 3 h1208, len 2, tid 75, master device alfen_Socket_aussen, reading MaxCurrentValidTimeRemaining (getUpdate for MaxCurrentValidTimeRemaining len 2), queued 5.48 secs ago, sent 2.13 secs ago,
response: id 1, fc 3, h1208, len 2, values 00000119
2022.03.01 12:07:02.813 3: set_charge_current() set alfen_Socket_aussen Charge_Current 16
2022.03.01 12:07:02.813 5: set_charge_current() ret_ueberschuss 0
2022.03.01 12:07:02.818 1: Perfmon: possible freeze starting at 12:07:01, delay is 1.818
2022.03.01 12:07:06.814 2: set_charge_current() EVENTS MaxCurrentValidTimeRemaining: 295
2022.03.01 12:07:06.819 5: set_charge_current() available_charge_current 18
2022.03.01 12:07:06.820 5: set_charge_current() ret_ueberschuss 0
2022.03.01 12:07:11.290 2: set_charge_current() EVENTS MaxCurrentValidTimeRemaining: 291


Hoffe das war jetzt nicht zu verwirrend, wird für mich selbst langsam ziemlich komplex.
Danke für deine Hilfe,

Stephan


FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

laserrichi

#896
Hallo Stefan,

habe eine Frage zu
obj-[cdih][1-9][0-9]*-hint
    this is used for set options and tells fhemweb what selection to display for the set option (list or slider etc.)


wie bekomme ich das mit einem Slider hin ? Ich bekomme nur per Drop Down Zahlen zum auswählen.
Hast du dafür ein Beispiel ?  so das auch die min max werte berücksichtigt werden ?

EDIT:  2 Std. suchen Try&Error....
nach dem Post hier kam die Erleuchtung mit der Lösung:

slider,5,1,75

5= min,  1 = Schrittweite, 75 = max.
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 Stephan,

Könntest Du bitte nochmal einen Log-Auszug mit Verbose 5 posten? In dem letzten sehe ich zwar den Timeout, aber leider nicht den Kontext drum herum.
Das mit dem set aus einem DOIF, der auf ein Event des selben Devices triggert, könnte ein Teil des Problems sein.
Ohne explizites nonPrioritizedSet "drängelt sich dann das set vor" während der letzte Request noch gar nicht fertig abgearbeitet ist.
In einem ausführlichen Log müsste ich das aber sehen können.

Gruss
   Stefan


R1F800

Hallo Stefan,

da ich nun eine PV aufs Dach bekomme will ich demnächst die WP entsprechend der Leistung meiner PV steuern.
Hat der ModBus eine Möglichkeit die Settings in der ECODAN zu den SG Inputklemmen auch als SET Befehl zu senden?

Sprich IN11/IN12 der Klemmen TBI.3-8/10 (Eingang SmartGrid) mittels SET Befehl über Modbus?

ch.eick

Zitat von: R1F800 am 25 März 2022, 10:22:20
Hallo Stefan,

da ich nun eine PV aufs Dach bekomme will ich demnächst die WP entsprechend der Leistung meiner PV steuern.
Hat der ModBus eine Möglichkeit die Settings in der ECODAN zu den SG Inputklemmen auch als SET Befehl zu senden?

Sprich IN11/IN12 der Klemmen TBI.3-8/10 (Eingang SmartGrid) mittels SET Befehl über Modbus?
Das hängt davon ab, ob der ModBus der WP das unterstützt. Oft kann man Register nur lesen und nicht schreiben.
Dazu solltest Du in der ModBus spezifikation der WP etwas finden können.

Gruß
    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