Neuigkeiten:

Am Sonntag den 8.12.2024 kann es ab ca. 8:00 Uhr zu kurzzeitigen Einschränkungen / Ausfällen bei den Diensten des FHEM Vereines kommen.
Die Server müssen mal gewartet und dabei neu gestartet werden ;)

Hauptmenü

GELÖST: Modbusattr akzeptiert ein Setreading öfters nicht

Begonnen von Kulli, 20 November 2022, 00:37:01

Vorheriges Thema - Nächstes Thema

Kulli

Hi

Ich nutz ein Modbus RTU sowie modbusattr, um mit einer Arduino Platine zu kommunizieren.
Alles Super soweit, aber:
Zwischendurch sagt fhem:
2022.11.19 23:19:57 3 : setreading HeizungCtr DreiwegeVentil 1 : Usage: setreading <name> [YYYY-MM-DD HH:MM:SS] <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.


was nicht stimmt! Gebe ich das in der Kommandozeile ein geht es, aber nicht immer.
Es scheint als wenn die readings immer wieder neu erstellt werden, wenn sie gelesen werden.

Das reading ist ein:
attr HeizungCtr obj-h30006-poll 1
attr HeizungCtr obj-h30006-reading DreiwegeVentil
attr HeizungCtr obj-h30006-set 1
attr HeizungCtr obj-h30006-type I16


Hat wer eine Idee was das sein kann??

LG
Uwe

StefanStrobel

Hallo Uwe,

setreading ist eine Funktion des Fhem-Frameworks, die nichts mit Modbus zu tun hat.
Damit kannst Du Readings erzeugen und einen Wert setzen, egal ob das Reading schon existiert oder nicht.
Wann / von wo rufst Du das denn auf?

Gruß
    Stefan

Kulli

Hi

Ich versuchte auch das set zu nutzen, dann bekomme ich aber immer ein "Define HeizungCtr first...

Schreibe ich "set HeizungCtr DreiwegeVentil 1" ins command field, bekomme ich die Meldung oben.
Nutze ich die set funktion auf der Webseite des devices (oben, die set / get funktion), dann geht es, aber bei ca 80% der sets bekomme ich ein Timeout:
"Timeout in Readanswer".
An meiner Elektronik liegt es nicht. Mit Profilab Expert habe ich einen ModbusRTU gebaut, der genau die gleichen Requests alle 0,5 Sekunden absetzt, nach ca 9h hatte ich nicht einen
Error gehabt.

Wo / was kann ich tun um mehr debug infos zu bekommen?

LG
Uwe

Kulli

#3
Update:
Verbose=5

Result vom Versuch einen Wert zu setzen (bekam timeout)

2022.11.20 13:18:56 4: HeizungCtr: set called with Pumpe_Sollwert (h30009) setVal = 57
2022.11.20 13:18:56 5: HeizungCtr: GetSetChecks with force
2022.11.20 13:18:56 5: HeizungCtr: GetSetChecks returns success
2022.11.20 13:18:56 5: HeizungCtr: set packed hex 3537 with s> to hex 0039
2022.11.20 13:18:56 4: HeizungCtr: DoRequest called from SetLDFn created new request, read buffer empty,
request: id 4, write fc 6 h30009, len 1, value 0039, master device HeizungCtr, reading Pumpe_Sollwert (set Pumpe_Sollwert)
2022.11.20 13:19:06 4: HeizungCtr: GetUpdate (V4.4.04 - 17.7.2021) called from Fhem internal timer
2022.11.20 13:19:06 4: HeizungCtr: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 10.0 sec at 13:19:16.482, interval 10



und hier ein Log wo das write geklappt hat:
2022.11.20 13:25:06 4: HeizungCtr: set called with Pumpe_Sollwert (h30009) setVal = 55
2022.11.20 13:25:06 5: HeizungCtr: GetSetChecks with force
2022.11.20 13:25:06 5: HeizungCtr: GetSetChecks returns success
2022.11.20 13:25:06 5: HeizungCtr: set packed hex 3535 with s> to hex 0037
2022.11.20 13:25:06 4: HeizungCtr: DoRequest called from SetLDFn created new request, read buffer empty,
request: id 4, write fc 6 h30009, len 1, value 0037, master device HeizungCtr, reading Pumpe_Sollwert (set Pumpe_Sollwert)
2022.11.20 13:25:06 5: HeizungCtr: ParseDataString called from HandleResponse with data hex 0037, type h, adr 30009, op write
2022.11.20 13:25:06 5: HeizungCtr: SplitDataString called from ParseDataString with data hex 0037, type h, adr 30009, valuesLen 1, op write
2022.11.20 13:25:06 5: HeizungCtr: CreateDataObjects called from ParseDataString with objList h30009
2022.11.20 13:25:06 5: HeizungCtr: CreateDataObjects sortedList h30009
2022.11.20 13:25:06 5: HeizungCtr: CreateParseInfoCache called
2022.11.20 13:25:06 5: HeizungCtr: CreateDataObjects unpacked 0037 with s> to 55
2022.11.20 13:25:06 4: HeizungCtr: CreateDataObjects assigns value 55 to Pumpe_Sollwert
2022.11.20 13:25:06 5: HeizungCtr: ParseDataString created 1 readings
2022.11.20 13:25:07 4: HeizungCtr: GetUpdate (V4.4.04 - 17.7.2021) called from Fhem internal timer
2022.11.20 13:25:07 4: HeizungCtr: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 10.0 sec at 13:25:17.236, interval 10
2022.11.20 13:25:07 5: HeizungCtr: CreateUpdateHash full object list: h30000 h30001 h30002 h30003 h30004 h30005 h30006 h30007 h30008 h30009
2022.11.20 13:25:07 5: HeizungCtr: CreateUpdateHash will request h30000 len 1 VorlaufTemp



Nächster missglückter Versuch inkl verbose vom adapter = 5:
2022.11.20 13:28:29 4: HeizungCtr: set called with Pumpe_Sollwert (h30009) setVal = 55
2022.11.20 13:28:29 5: HeizungCtr: GetSetChecks with force
2022.11.20 13:28:29 5: HeizungCtr: GetSetChecks returns success
2022.11.20 13:28:29 5: HeizungCtr: set packed hex 3535 with s> to hex 0037
2022.11.20 13:28:29 4: HeizungCtr: DoRequest called from SetLDFn created new request, read buffer empty,
request: id 4, write fc 6 h30009, len 1, value 0037, master device HeizungCtr, reading Pumpe_Sollwert (set Pumpe_Sollwert)
2022.11.20 13:28:29 5: ModbusHzg: QueueRequest called from DoRequest with h30009, qlen 0 from master HeizungCtr through io device ModbusHzg
2022.11.20 13:28:29 5: ModbusHzg: ProcessRequestQueue called from QueueRequest as direct:ModbusHzg, qlen 1, force, request: request: id 4, write fc 6 h30009, len 1, value 0037, master device HeizungCtr, reading Pumpe_Sollwert (set Pumpe_Sollwert), queued 0.00 secs ago
2022.11.20 13:28:29 5: ModbusHzg: checkDelays commDelay, last communication with same device was 2.330 secs ago, required delay is 0.5
2022.11.20 13:28:29 5: ModbusHzg: checkDelays busDelayRead, last activity on bus was 1.106 secs ago, required delay is 1
2022.11.20 13:28:29 5: ModbusHzg: checkDelays clientSwitchDelay, last read with different id was 1.106 secs ago, required delay is 0
2022.11.20 13:28:29 5: ModbusHzg: checkDelays sendDelay, last send to same device was 2.451 secs ago, required delay is 0.1
2022.11.20 13:28:29 4: ModbusHzg: ProcessRequestQueue (V4.4.04 - 17.7.2021) qlen 1, sending 0406753900370248 via /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AB0OIOVK-if00-port0@9600,8,n,1, read buffer empty,
request: id 4, write fc 6 h30009, len 1, value 0037, master device HeizungCtr, reading Pumpe_Sollwert (set Pumpe_Sollwert), queued 0.00 secs ago
2022.11.20 13:28:29 5: ModbusHzg: Send called from ProcessRequestQueue
2022.11.20 13:28:29 5: DevIo_SimpleWrite ModbusHzg: 0406753900370248
2022.11.20 13:28:29 5: ModbusHzg: ReadAnswer called from SetLDFn
2022.11.20 13:28:29 5: ModbusHzg: ReadAnswer remaining timeout is 2.99549508094788
2022.11.20 13:28:32 3: ModbusHzg: Timeout in Readanswer, read buffer empty,

es scheint als wenn die Kommunikation nicht suuber ist...


Und hier hat es mal komplett funktioniert:
2022.11.20 13:33:45 5: ModbusHzg: Send called from ProcessRequestQueue
2022.11.20 13:33:45 5: DevIo_SimpleWrite ModbusHzg: 0406753900370248
2022.11.20 13:33:45 5: ModbusHzg: ReadAnswer called from SetLDFn
2022.11.20 13:33:45 5: ModbusHzg: ReadAnswer remaining timeout is 2.99256086349487
2022.11.20 13:33:46 5: ModbusHzg: ReadAnswer got: 0406753900370248
2022.11.20 13:33:46 5: ModbusHzg: ParseFrameStart called from ReadAnswer protocol RTU expecting id 4
2022.11.20 13:33:46 4: ModbusHzg: ParseFrameStart (RTU, master) extracted id 4, fCode 6 and potential data 75390037
2022.11.20 13:33:46 5: ModbusHzg: HandleResponse called from ReadAnswer
2022.11.20 13:33:46 5: ModbusHzg: ParseResponse called from HandleResponse
2022.11.20 13:33:46 5: ModbusHzg: CheckChecksum (called from ParseResponse): 0248 is valid
2022.11.20 13:33:46 5: ModbusHzg: now parsing response data objects, master is HeizungCtr relay is undefined
2022.11.20 13:33:46 5: HeizungCtr: ParseDataString called from HandleResponse with data hex 0037, type h, adr 30009, op write
2022.11.20 13:33:46 5: HeizungCtr: SplitDataString called from ParseDataString with data hex 0037, type h, adr 30009, valuesLen 1, op write
2022.11.20 13:33:46 5: HeizungCtr: CreateDataObjects called from ParseDataString with objList h30009
2022.11.20 13:33:46 5: HeizungCtr: CreateDataObjects sortedList h30009
2022.11.20 13:33:46 5: HeizungCtr: CreateParseInfoCache called
2022.11.20 13:33:46 5: HeizungCtr: CreateDataObjects unpacked 0037 with s> to 55
2022.11.20 13:33:46 4: HeizungCtr: CreateDataObjects assigns value 55 to Pumpe_Sollwert
2022.11.20 13:33:46 5: HeizungCtr: ParseDataString created 1 readings
2022.11.20 13:33:46 4: ModbusHzg: HandleResponse done, current frame / read buffer: 0406753900370248, id 4, fCode 6,
request: id 4, write fc 6 h30009, len 1, value 0037, master device HeizungCtr, reading Pumpe_Sollwert (set Pumpe_Sollwert), queued 1.05 secs ago, sent 1.05 secs ago,
response: id 4, fc 6, h30009, len 1, values 0037
2022.11.20 13:33:46 5: ModbusHzg: ResetExpect for HandleResponse from response to idle
2022.11.20 13:33:46 5: ModbusHzg: DropFrame called from ReadAnswer - drop 0406753900370248

RATLOS!
Abschlusswiderstände sind drin.
Also ich check erst mal die Verdrahtung und melde mich dann wieder...

Kulli

Hi

Entwarnung :-)
Es scheint als wenn die Spannung am Modbus nicht ausreichend war um die 0 sauber zu setzen. Ich habe die Widerstände zw +5V und A sowie B und GND etwas verkleinert und jetzt öäuft es sauber.
An einem der Arduino leuchtete zwischendurch immer die RX durchgehend, was nicht korrekt ist.

LG
Uwe