Neue Versionen und Support zum Modbus-Modul

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

Vorheriges Thema - Nächstes Thema

ch.eick

Zitat von: killah78 am 23 November 2020, 11:26:38
Eigenständig wird ab dem Aufruf von Apptime nichts mehr gelesen. Für kein Modbus-Gerät. Erst wieder nach dem Neustart von Fhem. Andere Geräte sind nicht betroffen.
Kannst Du mir die einzelnen Schritte für apptime mal schicken? Ich würde es dann so testen und schauen, ob es bei mir dann auch nicht mehr aktualisiert würde.
Ich habe apptime noch nie verwendet, weil Aufräumen bisher immer gelangt hat :-)
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

killah78

Ich gucke ab und zu mal in Apptime, um Verzögerungen zu sehen.
Da ist eigentlich nichts hinter. "apptime" eingeben, dann startet das im Hintergrund. Danach kann man dann mit erneutem Aufruf von zB "apptime max" die Prozesszeiten entsprechend sortiert aufzeigen lassen.
Ab dem Zeitpunkt, wenn ich das erste mal apptime eingebe, werden keine Modbus Devices mehr gelesen.

StefanStrobel

Hallo Gadget,

da funkt auch noch ein DevIo-interner Mechanismus rein. Der erste Aufruf von Open nach einem Close wird ignoriert weil dann $hash->{DevIoJustClosed} gesetzt ist.
Ich werde mal probieren den auszuhebeln wenn nextOpenDelay2 schon greift, dann sollten es auch 30 Sekunden sein.

Gruss / thanks
    Stefan

StefanStrobel

Hallo killah78,

ich habe versucht das bei mir nachzustellen.
nach Aufruf von apptime laufen die Modbus-Devices bei mir weiter. Im Log sieht man aber dass apptime sich eingeklinkt hat:

2020.11.24 18:08:43 5: PWP: GetUpdate called from apptime_getTiming
2020.11.24 18:08:43 4: PWP: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 10.0 sec at 2020-11-24 18:08:53, interval 10
2020.11.24 18:08:43 5: PWP: GetUpdate objects from attributes:


Kannst Du mal Deine Konfiguration posten? Irgend etwas muss bei Dir anders sein ...

Gruss
   Stefan

killah78

Hallo Stefan,
so, scheinbar funktioniert es wieder. Was ich gemacht habe: Ich habe die TSCUL Module entfernt.
In wie weit das damit zusammenhängt weiss ich nicht. Aber es funktioniert und ich bekomme auch einen Eintrag mit GetUpdate called from apptime_getTiming.
Liegt aber zumindest nicht am ModbusAttr.
Ich sollte mal weiter aufräumen und entfernen, was ich nicht benötige....
Viele Dank für deine Hilfe.
Viele Grüße

breitbanddilettant

#590
Hallo zusammen,

ich lese aus meiner Wärmepumpe (ME Ecodan) per modbus alle möglichen Register aus und schreibe auch einige:


###################################
######### Define Modbus ###########
###################################

define ModbusBus Modbus /dev/ttyUSB0@9600
setuuid ModbusBus 5dee511c-f33f-9858-4f2a-a99a0e6119e1eb3e
attr ModbusBus room Heizung

###################################
######### Define Ecodan ###########
###################################

define Ecodan ModbusAttr 1 30
setuuid Ecodan 5dee5132-f33f-9858-e581-6a34208d19a2f8d9
attr Ecodan userattr dev-h-defPoll obj-h102-expr obj-h102-reading obj-h104-expr obj-h104-reading obj-h106-expr obj-h106-reading obj-h108-expr obj-h108-reading obj-h110-expr obj-h110-reading obj-h112-expr obj-h112-reading obj-h114-expr obj-h114-reading obj-h116-expr obj-h116-reading obj-h118-expr obj-h118-reading obj-h12-expr obj-h12-reading obj-h127-reading obj-h25-hint obj-h25-max obj-h25-min obj-h25-polldelay obj-h25-reading obj-h25-set obj-h26-reading obj-h28-hint obj-h28-max obj-h28-min obj-h28-polldelay obj-h28-reading obj-h28-set obj-h282-reading obj-h283-expr obj-h283-reading obj-h284-reading obj-h285-expr obj-h285-reading obj-h286-reading obj-h287-expr obj-h287-reading obj-h29-hint obj-h29-max obj-h29-min obj-h29-polldelay obj-h29-reading obj-h29-set obj-h292-reading obj-h293-expr obj-h293-reading obj-h294-reading obj-h295-expr obj-h295-reading obj-h296-reading obj-h297-expr obj-h297-reading obj-h31-expr obj-h31-hint obj-h31-max obj-h31-min obj-h31-polldelay obj-h31-reading obj-h31-set obj-h31-setexpr obj-h33-expr obj-h33-hint obj-h33-max obj-h33-min obj-h33-polldelay obj-h33-reading obj-h33-set obj-h33-setexpr obj-h35-expr obj-h35-hint obj-h35-max obj-h35-min obj-h35-polldelay obj-h35-reading obj-h35-set obj-h35-setexpr obj-h37-hint obj-h37-max obj-h37-min obj-h37-polldelay obj-h37-reading obj-h37-set obj-h67-reading obj-h80-reading obj-h92-expr obj-h92-reading obj-h99-expr obj-h99-reading
attr Ecodan IODev ModbusBus
attr Ecodan dev-h-defPoll 1
attr Ecodan event-aggregator T-Aussen-median:300:none:median:300
attr Ecodan event-min-interval .*:130
#attr Ecodan event-on-change-reading .*
attr Ecodan obj-h102-expr $val/100
attr Ecodan obj-h102-reading TV-Ecodan
attr Ecodan obj-h104-expr $val/100
attr Ecodan obj-h104-reading TR-Ecodan
attr Ecodan obj-h106-expr $val/100
attr Ecodan obj-h106-reading T-Warmwasser
attr Ecodan obj-h108-expr $val/100
attr Ecodan obj-h108-reading TV-Z1
attr Ecodan obj-h110-expr $val/100
attr Ecodan obj-h110-reading TR-Z1
attr Ecodan obj-h112-expr $val/100
attr Ecodan obj-h112-reading TV-Z2
attr Ecodan obj-h114-expr $val/100
attr Ecodan obj-h114-reading TR-Z2
attr Ecodan obj-h116-expr $val/100
attr Ecodan obj-h116-reading TV-Ofen
attr Ecodan obj-h118-expr $val/100
attr Ecodan obj-h118-reading TR-Ofen
attr Ecodan obj-h12-expr $val == 8000 ? 0 : $val
attr Ecodan obj-h12-reading Error-Ecodan
attr Ecodan obj-h127-reading EinAus-Ausseneinheit
attr Ecodan obj-h25-hint 0,1
attr Ecodan obj-h25-max 1
attr Ecodan obj-h25-min 0
attr Ecodan obj-h25-polldelay 20
attr Ecodan obj-h25-reading EinAus-System
attr Ecodan obj-h25-set 1
attr Ecodan obj-h26-reading Arbeitsmodus
attr Ecodan obj-h28-hint 1,2,4
attr Ecodan obj-h28-max 4
attr Ecodan obj-h28-min 0
attr Ecodan obj-h28-polldelay 20
attr Ecodan obj-h28-reading AC-Modus-Z1
attr Ecodan obj-h28-set 1
attr Ecodan obj-h282-reading W-Verbrauch-Heizung-kW
attr Ecodan obj-h283-expr $val * 10
attr Ecodan obj-h283-reading W-Verbrauch-Heizung-W
attr Ecodan obj-h284-reading W-Verbrauch-Kuehlen-kW
attr Ecodan obj-h285-expr $val * 10
attr Ecodan obj-h285-reading W-Verbrauch-Kuehlen-W
attr Ecodan obj-h286-reading W-Verbrauch-Warmwasser-kW
attr Ecodan obj-h287-expr $val * 10
attr Ecodan obj-h287-reading W-Verbrauch-Warmwasser-W
attr Ecodan obj-h29-hint 1,2,4
attr Ecodan obj-h29-max 4
attr Ecodan obj-h29-min 0
attr Ecodan obj-h29-polldelay 20
attr Ecodan obj-h29-reading AC-Modus-Z2
attr Ecodan obj-h29-set 1
attr Ecodan obj-h292-reading W-Erzeugt-Heizung-kW
attr Ecodan obj-h293-expr $val * 10
attr Ecodan obj-h293-reading W-Erzeugt-Heizung-W
attr Ecodan obj-h294-reading W-Erzeugt-Kuehlen-kW
attr Ecodan obj-h295-expr $val * 10
attr Ecodan obj-h295-reading W-Erzeugt-Kuehlen-W
attr Ecodan obj-h296-reading W-Erzeugt-Warmwasser-kW
attr Ecodan obj-h297-expr $val * 10
attr Ecodan obj-h297-reading W-Erzeugt-Warmwasser-W
attr Ecodan obj-h31-expr $val/100
attr Ecodan obj-h31-hint 45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60
attr Ecodan obj-h31-max 60
attr Ecodan obj-h31-min 45
attr Ecodan obj-h31-polldelay 20
attr Ecodan obj-h31-reading Tsoll-Warmwasser
attr Ecodan obj-h31-set 1
attr Ecodan obj-h31-setexpr $val * 100
attr Ecodan obj-h33-expr $val/100
attr Ecodan obj-h33-hint 26,28,30,31,32,33,34,35,36,37,38,39,40
attr Ecodan obj-h33-max 43
attr Ecodan obj-h33-min 25
attr Ecodan obj-h33-polldelay 20
attr Ecodan obj-h33-reading Tsoll-Vorlauf-Z1
attr Ecodan obj-h33-set 1
attr Ecodan obj-h33-setexpr $val*100
attr Ecodan obj-h35-expr $val/100
attr Ecodan obj-h35-hint 26,28,30,31,32,33,34,35,36,37,38,39,40
attr Ecodan obj-h35-max 60
attr Ecodan obj-h35-min 10
attr Ecodan obj-h35-polldelay 20
attr Ecodan obj-h35-reading Tsoll-Vorlauf-Z2
attr Ecodan obj-h35-set 1
attr Ecodan obj-h35-setexpr $val*100
attr Ecodan obj-h37-hint 0,1
attr Ecodan obj-h37-max 1
attr Ecodan obj-h37-min 0
attr Ecodan obj-h37-polldelay 20
attr Ecodan obj-h37-reading Warmwasser-Start
attr Ecodan obj-h37-set 1
attr Ecodan obj-h67-reading Abtaubetrieb
attr Ecodan obj-h80-reading Waermequelle
attr Ecodan obj-h92-expr $val/10
attr Ecodan obj-h92-reading Tdelta-Warmwasser
attr Ecodan obj-h99-expr $val > (2**15) ? (($val-(2**16))/10) : $val/10
attr Ecodan obj-h99-reading T-Aussen
attr Ecodan room Heizung
attr Ecodan userReadings kW-Verbrauch-Kuehlen {ReadingsNum("Ecodan","W-Verbrauch-Kuehlen-kW",0) + (ReadingsNum("Ecodan","W-Verbrauch-Kuehlen-W",0)/1000)}, kW-Erzeugt-Kuehlen {ReadingsNum("Ecodan","W-Erzeugt-Kuehlen-kW",0) + (ReadingsNum("Ecodan","W-Erzeugt-Kuehlen-W",0)/1000)}, kW-Verbrauch-Heizung {ReadingsNum("Ecodan","W-Verbrauch-Heizung-kW",0) + (ReadingsNum("Ecodan","W-Verbrauch-Heizung-W",0)/1000)}, kW-Erzeugt-Heizung {ReadingsNum("Ecodan","W-Erzeugt-Heizung-kW",0) + (ReadingsNum("Ecodan","W-Erzeugt-Heizung-W",0)/1000)}, kW-Verbrauch-Warmwasser {ReadingsNum("Ecodan","W-Verbrauch-Warmwasser-kW",0) + (ReadingsNum("Ecodan","W-Verbrauch-Warmwasser-W",0)/1000)}, kW-Erzeugt-Warmwasser {ReadingsNum("Ecodan","W-Erzeugt-Warmwasser-kW",0) + (ReadingsNum("Ecodan","W-Erzeugt-Warmwasser-W",0)/1000)}, COP-Heizung {ReadingsNum("Ecodan","kW-Erzeugt-Heizung",0) / ReadingsNum("Ecodan","kW-Verbrauch-Heizung",0)},COP-Kuehlen {(ReadingsNum("Ecodan","AC-Modus-Z1",0) == 3) ? (ReadingsNum("Ecodan","kW-Erzeugt-Kuehlen",0) / ReadingsNum("Ecodan","kW-Verbrauch-Kuehlen",0)) : 0},COP-Warmwasser {ReadingsNum("Ecodan","kW-Erzeugt-Warmwasser",0) / ReadingsNum("Ecodan","kW-Verbrauch-Warmwasser",0)}, Tsoll-Warmwasser-Up {ReadingsNum("Ecodan","Tsoll-Warmwasser",0) + 1}, Tsoll-Warmwasser-Down {ReadingsNum("Ecodan","Tsoll-Warmwasser",0) - 1}, Tavg-Speicher {(ReadingsNum("Ecodan","TV-Z1",0) + ReadingsNum("Ecodan","TR-Z1",0) + ReadingsNum("1W_TVM_Speicher","temperature",0) + ReadingsNum("1W_TRM_Speicher","temperature",0))/4}, Tsoll-Vorlauf-Z1-Up {ReadingsNum("Ecodan","Tsoll-Vorlauf-Z1",0) + 1}, Tsoll-Vorlauf-Z1-Down {ReadingsNum("Ecodan","Tsoll-Vorlauf-Z1",0) - 1}, Tsoll-Vorlauf-Z2-Up {ReadingsNum("Ecodan","Tsoll-Vorlauf-Z2",0) + 1}, Tsoll-Vorlauf-Z2-Down {ReadingsNum("Ecodan","Tsoll-Vorlauf-Z2",0) - 1}, Error-Ofen {ReadingsNum("Ecodan","TV-Ofen",0) < 65 ? 0 : ReadingsNum("Ecodan","TV-Ofen",0)}, Brenner-Aktiv {(ReadingsNum("Ecodan","Arbeitsmodus",0) == 2 ? 1 : 0)*(ReadingsNum("Ecodan","TV-Ofen",0) > 55 ? 1 : 0)}, Arbeitsmodus-Inkl-Brenner {ReadingsNum("Ecodan","Arbeitsmodus",0) + (ReadingsNum("Ecodan","Brenner-Aktiv",0)*10)}, T-Aussen-median {ReadingsNum("Ecodan","T-Aussen",0)}


Die Wärmepumpe läuft mit zwei Heizzonen deren Solltemperaturen Tsoll-Vorlauf-Z1 und Tsoll-Vorlauf-Z2 sind.

Ich würde gerne den Sollwert der Vorlauftemperatur der Zone 1 automatisch anpassen, wenn sich die Vorlauftemperatur der Zone 2 ändert.

Das heißt also, dass ich Tsoll-Vorlauf-Z2 auf 31 setzte und das entsprechende holding Register geschrieben wird. Dann soll im Anschluss automatisch Tsoll-Vorlauf-Z1 auf den selben Wert wie Tsoll-Vorlauf-Z2 gesetzt werden und auch in das entsprechende Register geschrieben werden.

Leider kriege ich aber genau das nicht so richtig hin. Könnt ihr mir da weiterhelfen? Ich habe das schon mit einem Notify auf eine Änderung von Tsoll-Vorlauf-Z2 probiert und dann getriggert Tsoll-Vorlauf-Z1 schreiben lassen. Allerdings ist er dann mit dem zyklischen Auslesen der Register durcheinander gekommen und hatte viele modbus Zugriffs-Timeouts.

Danke und schöne Grüße,
Breitbanddilettant

gadget

Zitat von: breitbanddilettant am 03 Dezember 2020, 15:11:43
Ich würde gerne den Sollwert der Vorlauftemperatur der Zone 1 automatisch anpassen, wenn sich die Vorlauftemperatur der Zone 2 ändert.

Das heißt also, dass ich Tsoll-Vorlauf-Z2 auf 31 setzte und das entsprechende holding Register geschrieben wird. Dann soll im Anschluss automatisch Tsoll-Vorlauf-Z1 auf den selben Wert wie Tsoll-Vorlauf-Z2 gesetzt werden und auch in das entsprechende Register geschrieben werden.

Wie setzt Du denn Tsoll-Vorlauf-Z2 ? Über fhemweb ? Wenn Du hierfür einen z.B. einen Dummy verwendest, hindert dich ja niemand daran zwei notifys zu machen, die dann Z1 und Z2 setzen.
Mit einem DOIF würde das auch gehen, da kannst Du dann auch zwischen dem set für Z1 und Z2 z.B. einen wait einbauen oder mit cmdpause verhindern, dass da zu oft geändert wird usw.



breitbanddilettant

#592
Hallo gadget,

Du meinst so?

Dummy definieren:

define Tsoll-Vorlauf-Dummy dummy
attr Tsoll-Vorlauf-Dummy readingsList Tsoll-Vorlauf


Den Istwert holt sich ftui aus den Ecodan readings "Tsoll-Vorlauf-Z1" und "Tsoll-Vorlauf-Z2". Den neuen Sollwert schreibe ich in ftui in "Tsoll-Vorlauf"
Die Änderung dieses Dummy readings erzeugt dann ein notify und triggert eine z.B. "set Ecodan Tsoll-Vorlauf-Z1 30" Funktion.

define TriggerTsollVLZ1 notify Tsoll-Vorlauf-Dummy|Tsoll-Vorlauf-Dummy:.* set Ecodan Tsoll-Vorlauf-Z1 30


Jetzt sind wir aber bei dem Problem, dass der im notify auszuführende set Befehl wohl nur Werte und keine Variableninhalte verarbeiten kann - sprich: ich bekomme den Inhalt vom Dummy "Tsoll-Vorlauf" nicht an "Tsoll-Vorlauf-Z1" übergeben - ich kann da nur skalare Werte (30, 31, 32, ...) reinschreiben.

Da ich im Programmieren nicht sooooo fit bin, könntest du mir etwas beschreiben, wie das mit DOIF gehen würde? muss ich da eine Funktion in the myutils schreiben? Da kenne ich mich leider echt nicht so gut aus :-(


Vielen Dank und schöne Grüße

Schöne Grüße

gadget

Hi,

Ich meine sowas hier (per "Raw Definition importieren ") - dein Modbus Device habe ich mit einem dummy simuliert.



defmod di_TsollVorlauf DOIF ## wenn dieser Dummy ein Event erzeugt\
([d_TsollVorlauf])\
  ## diesen set ausfuehrern \
  (set d_Ecodan Tsoll-Vorlauf-Z1 [d_TsollVorlauf])\
  ## 10 Sekunden spaeter diesen hier - siehe wait\
  (set d_Ecodan Tsoll-Vorlauf-Z2 [d_TsollVorlauf])\

attr di_TsollVorlauf do always
attr di_TsollVorlauf room Spielwiese
attr di_TsollVorlauf wait 0,10

defmod d_Ecodan dummy
attr d_Ecodan readingList Tsoll-Vorlauf-Z1 Tsoll-Vorlauf-Z2
attr d_Ecodan room Spielwiese

defmod d_TsollVorlauf dummy
attr d_TsollVorlauf event-on-change-reading state
attr d_TsollVorlauf room Spielwiese
attr d_TsollVorlauf setList 16 17 18 19 20 21 22 23 25 27 29 31 33 35 37 40 44





Grüße, gadget

breitbanddilettant


breitbanddilettant

Hallo Zusammen,

ich habe nun ein neues Problem mit dem Modbus Interface. Ich bekomme immer mehr timeouts der readings und weiß nicht woran das liegt. Schon früher hatte ich timeouts. Nun habe ich vorhin fhem geupdated in der Hoffnung, dass es besser wird, und bekomme jetzt noch mehr timeouts.

Zitat
2020.12.04 14:54:43 2: eventTypes: loaded 352 events from ./log/eventTypes.txt
2020.12.04 14:54:43 3: ModbusBus: defined as /dev/ttyUSB0@9600
2020.12.04 14:54:43 3: Ecodan: defined with id 1, interval 60, protocol default (RTU), mode master
2020.12.04 14:54:43 3: Ecodan: RegisterAtIODev called from SetIODev registers Ecodan at ModbusBus with id 1, MODE master, PROTOCOL RTU
2020.12.04 14:54:49 3: HourCounter HourCounter Initialize.220 Init Done with Version 1.0.1.2 - 24.12.2014
2020.12.04 14:54:49 0: HourCounter WPVerbrauch_HourCounter Define.228 parameters: WPVerbrauch_HourCounter HourCounter GPIO15:Counter:.* GPIO15:Pinlevel:.low
2020.12.04 14:54:49 1: Including ./log/fhem.save
2020.12.04 14:54:49 3: Ecodan: RegisterAtIODev called from SetIODev registers Ecodan at ModbusBus with id 1, MODE master, PROTOCOL RTU
2020.12.04 14:54:49 3: Ecodan: Notify / Init: using ModbusBus for communication
2020.12.04 14:54:49 3: Opening ModbusBus device /dev/ttyUSB0
2020.12.04 14:54:49 3: Setting ModbusBus serial parameters to 9600,8,N,1
2020.12.04 14:54:49 3: ModbusBus device opened
2020.12.04 14:54:49 1: usb create starting
2020.12.04 14:54:49 3: Probing ZWDongle device /dev/serial0
2020.12.04 14:54:49 1: ZWDongle: Can't open /dev/serial0: Permission denied
2020.12.04 14:54:49 3: Probing ZWDongle device /dev/serial1
2020.12.04 14:54:50 3: Probing CUL device /dev/ttyAMA0
2020.12.04 14:54:50 3: Probing TCM_ESP3 device /dev/ttyAMA0
2020.12.04 14:54:50 3: Probing ZWDongle device /dev/ttyAMA0
2020.12.04 14:54:50 3: Probing SIGNALDuino device /dev/ttyAMA0
2020.12.04 14:54:50 3: Probing MYSENSORS device /dev/ttyAMA0
2020.12.04 14:54:50 3: Probing ArduCounter device /dev/ttyAMA0
2020.12.04 14:54:51 3: Probing ElsnerWS device /dev/ttyAMA0
2020.12.04 14:54:52 3: Probing FRM device /dev/ttyAMA0
2020.12.04 14:54:57 3: Probing CUL device /dev/ttyS0
2020.12.04 14:54:57 1: CUL: Can't open /dev/ttyS0: Permission denied
2020.12.04 14:54:57 1: usb create end
2020.12.04 14:54:57 0: Featurelevel: 6
2020.12.04 14:54:57 0: Server started with 31 defined entities (fhem.pl:23278/2020-12-02 perl:5.028001 os:linux user:fhem pid:2556)
2020.12.04 14:55:04 0: HourCounter WPVerbrauch_HourCounter Run.598 first run done countsOverall:2299318
2020.12.04 14:55:16 3: telnetForBlockingFn_1607090116: port 35235 opened
2020.12.04 14:59:00 3: ModbusBus: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 37, len 1 for device Ecodan reading Warmwasser-Start (getUpdate), queued 3.37 secs ago, sent 2.63 secs ago, read buffer empty
2020.12.04 14:59:01 3: ModbusBus: read got new data while idle, drop buffer 0103020000b844
2020.12.04 15:00:01 3: ModbusBus: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 99, len 1 for device Ecodan reading T-Aussen (getUpdate), queued 4.53 secs ago, sent 2.98 secs ago, read buffer empty
2020.12.04 15:00:01 3: ModbusBus: read got new data while idle, drop buffer 0103020028b85a
2020.12.04 15:00:07 3: ModbusBus: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 29, len 1 for device Ecodan reading AC-Modus-Z2 (getUpdate), queued 10.09 secs ago, sent 3.70 secs ago, read buffer empty
2020.12.04 15:00:07 3: ModbusBus: read got new data while idle, drop buffer 01030200017984
2020.12.04 15:00:15 3: ModbusBus: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 80, len 1 for device Ecodan reading Waermequelle (getUpdate), queued 17.97 secs ago, sent 3.34 secs ago, read buffer empty
2020.12.04 15:00:15 3: ModbusBus: read got new data while idle, drop buffer 0103020000b844

Hier meine Modubus Konfiguration:


###################################
######### Define Modbus ###########
###################################

define ModbusBus Modbus /dev/ttyUSB0@9600
setuuid ModbusBus 5dee511c-f33f-9858-4f2a-a99a0e6119e1eb3e
attr ModbusBus room Heizung

###################################
######### Define Ecodan ###########
###################################

define Ecodan ModbusAttr 1 60
setuuid Ecodan 5dee5132-f33f-9858-e581-6a34208d19a2f8d9
attr Ecodan userattr dev-h-defPoll obj-h102-expr obj-h102-reading obj-h104-expr obj-h104-reading obj-h106-expr obj-h106-reading obj-h108-expr obj-h108-reading obj-h110-expr obj-h110-reading obj-h112-expr obj-h112-reading obj-h114-expr obj-h114-reading obj-h116-expr obj-h116-reading obj-h118-expr obj-h118-reading obj-h12-expr obj-h12-reading obj-h127-reading obj-h25-hint obj-h25-max obj-h25-min obj-h25-polldelay obj-h25-reading obj-h25-set obj-h26-reading obj-h28-hint obj-h28-max obj-h28-min obj-h28-polldelay obj-h28-reading obj-h28-set obj-h282-reading obj-h283-expr obj-h283-reading obj-h284-reading obj-h285-expr obj-h285-reading obj-h286-reading obj-h287-expr obj-h287-reading obj-h29-hint obj-h29-max obj-h29-min obj-h29-polldelay obj-h29-reading obj-h29-set obj-h292-reading obj-h293-expr obj-h293-reading obj-h294-reading obj-h295-expr obj-h295-reading obj-h296-reading obj-h297-expr obj-h297-reading obj-h31-expr obj-h31-hint obj-h31-max obj-h31-min obj-h31-polldelay obj-h31-reading obj-h31-set obj-h31-setexpr obj-h33-expr obj-h33-hint obj-h33-max obj-h33-min obj-h33-polldelay obj-h33-reading obj-h33-set obj-h33-setexpr obj-h35-expr obj-h35-hint obj-h35-max obj-h35-min obj-h35-polldelay obj-h35-reading obj-h35-set obj-h35-setexpr obj-h37-hint obj-h37-max obj-h37-min obj-h37-polldelay obj-h37-reading obj-h37-set obj-h67-reading obj-h80-reading obj-h92-expr obj-h92-reading obj-h99-expr obj-h99-reading
attr Ecodan IODev ModbusBus
attr Ecodan dev-h-defPoll 1
attr Ecodan event-aggregator T-Aussen-median:300:none:median:300
attr Ecodan event-min-interval .*:190
attr Ecodan obj-h102-expr $val/100
attr Ecodan obj-h102-reading TV-Ecodan
attr Ecodan obj-h104-expr $val/100
attr Ecodan obj-h104-reading TR-Ecodan
attr Ecodan obj-h106-expr $val/100
attr Ecodan obj-h106-reading T-Warmwasser
attr Ecodan obj-h108-expr $val/100
attr Ecodan obj-h108-reading TV-Z1
attr Ecodan obj-h110-expr $val/100
attr Ecodan obj-h110-reading TR-Z1
attr Ecodan obj-h112-expr $val/100
attr Ecodan obj-h112-reading TV-Z2
attr Ecodan obj-h114-expr $val/100
attr Ecodan obj-h114-reading TR-Z2
attr Ecodan obj-h116-expr $val/100
attr Ecodan obj-h116-reading TV-Ofen
attr Ecodan obj-h118-expr $val/100
attr Ecodan obj-h118-reading TR-Ofen
attr Ecodan obj-h12-expr $val == 8000 ? 0 : $val
attr Ecodan obj-h12-reading Error-Ecodan
attr Ecodan obj-h127-reading EinAus-Ausseneinheit
attr Ecodan obj-h25-hint 0,1
attr Ecodan obj-h25-max 1
attr Ecodan obj-h25-min 0
attr Ecodan obj-h25-polldelay 20
attr Ecodan obj-h25-reading EinAus-System
attr Ecodan obj-h25-set 1
attr Ecodan obj-h26-reading Arbeitsmodus
attr Ecodan obj-h28-hint 1,2,4
attr Ecodan obj-h28-max 4
attr Ecodan obj-h28-min 0
attr Ecodan obj-h28-polldelay 20
attr Ecodan obj-h28-reading AC-Modus-Z1
attr Ecodan obj-h28-set 1
attr Ecodan obj-h282-reading W-Verbrauch-Heizung-kW
attr Ecodan obj-h283-expr $val * 10
attr Ecodan obj-h283-reading W-Verbrauch-Heizung-W
attr Ecodan obj-h284-reading W-Verbrauch-Kuehlen-kW
attr Ecodan obj-h285-expr $val * 10
attr Ecodan obj-h285-reading W-Verbrauch-Kuehlen-W
attr Ecodan obj-h286-reading W-Verbrauch-Warmwasser-kW
attr Ecodan obj-h287-expr $val * 10
attr Ecodan obj-h287-reading W-Verbrauch-Warmwasser-W
attr Ecodan obj-h29-hint 1,2,4
attr Ecodan obj-h29-max 4
attr Ecodan obj-h29-min 0
attr Ecodan obj-h29-polldelay 20
attr Ecodan obj-h29-reading AC-Modus-Z2
attr Ecodan obj-h29-set 1
attr Ecodan obj-h292-reading W-Erzeugt-Heizung-kW
attr Ecodan obj-h293-expr $val * 10
attr Ecodan obj-h293-reading W-Erzeugt-Heizung-W
attr Ecodan obj-h294-reading W-Erzeugt-Kuehlen-kW
attr Ecodan obj-h295-expr $val * 10
attr Ecodan obj-h295-reading W-Erzeugt-Kuehlen-W
attr Ecodan obj-h296-reading W-Erzeugt-Warmwasser-kW
attr Ecodan obj-h297-expr $val * 10
attr Ecodan obj-h297-reading W-Erzeugt-Warmwasser-W
attr Ecodan obj-h31-expr $val/100
attr Ecodan obj-h31-hint 45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60
attr Ecodan obj-h31-max 60
attr Ecodan obj-h31-min 45
attr Ecodan obj-h31-polldelay 20
attr Ecodan obj-h31-reading Tsoll-Warmwasser
attr Ecodan obj-h31-set 1
attr Ecodan obj-h31-setexpr $val * 100
attr Ecodan obj-h33-expr $val/100
attr Ecodan obj-h33-hint 26,28,30,31,32,33,34,35,36,37,38,39,40
attr Ecodan obj-h33-max 43
attr Ecodan obj-h33-min 25
attr Ecodan obj-h33-polldelay 20
attr Ecodan obj-h33-reading Tsoll-Vorlauf-Z1
attr Ecodan obj-h33-set 1
attr Ecodan obj-h33-setexpr $val*100
attr Ecodan obj-h35-expr $val/100
attr Ecodan obj-h35-hint 26,28,30,31,32,33,34,35,36,37,38,39,40
attr Ecodan obj-h35-max 60
attr Ecodan obj-h35-min 10
attr Ecodan obj-h35-polldelay 20
attr Ecodan obj-h35-reading Tsoll-Vorlauf-Z2
attr Ecodan obj-h35-set 1
attr Ecodan obj-h35-setexpr $val*100
attr Ecodan obj-h37-hint 0,1
attr Ecodan obj-h37-max 1
attr Ecodan obj-h37-min 0
attr Ecodan obj-h37-polldelay 20
attr Ecodan obj-h37-reading Warmwasser-Start
attr Ecodan obj-h37-set 1
attr Ecodan obj-h67-reading Abtaubetrieb
attr Ecodan obj-h80-reading Waermequelle
attr Ecodan obj-h92-expr $val/10
attr Ecodan obj-h92-reading Tdelta-Warmwasser
attr Ecodan obj-h99-expr $val > (2**15) ? (($val-(2**16))/10) : $val/10
attr Ecodan obj-h99-reading T-Aussen
attr Ecodan room Heizung
attr Ecodan userReadings kW-Verbrauch-Kuehlen {ReadingsNum("Ecodan","W-Verbrauch-Kuehlen-kW",0) + (ReadingsNum("Ecodan","W-Verbrauch-Kuehlen-W",0)/1000)}, kW-Erzeugt-Kuehlen {ReadingsNum("Ecodan","W-Erzeugt-Kuehlen-kW",0) + (ReadingsNum("Ecodan","W-Erzeugt-Kuehlen-W",0)/1000)}, kW-Verbrauch-Heizung {ReadingsNum("Ecodan","W-Verbrauch-Heizung-kW",0) + (ReadingsNum("Ecodan","W-Verbrauch-Heizung-W",0)/1000)}, kW-Erzeugt-Heizung {ReadingsNum("Ecodan","W-Erzeugt-Heizung-kW",0) + (ReadingsNum("Ecodan","W-Erzeugt-Heizung-W",0)/1000)}, kW-Verbrauch-Warmwasser {ReadingsNum("Ecodan","W-Verbrauch-Warmwasser-kW",0) + (ReadingsNum("Ecodan","W-Verbrauch-Warmwasser-W",0)/1000)}, kW-Erzeugt-Warmwasser {ReadingsNum("Ecodan","W-Erzeugt-Warmwasser-kW",0) + (ReadingsNum("Ecodan","W-Erzeugt-Warmwasser-W",0)/1000)}, COP-Heizung {ReadingsNum("Ecodan","kW-Erzeugt-Heizung",0) / ReadingsNum("Ecodan","kW-Verbrauch-Heizung",0)},COP-Kuehlen {(ReadingsNum("Ecodan","AC-Modus-Z1",0) == 3) ? (ReadingsNum("Ecodan","kW-Erzeugt-Kuehlen",0) / ReadingsNum("Ecodan","kW-Verbrauch-Kuehlen",0)) : 0},COP-Warmwasser {ReadingsNum("Ecodan","kW-Erzeugt-Warmwasser",0) / ReadingsNum("Ecodan","kW-Verbrauch-Warmwasser",0)}, Tsoll-Warmwasser-Up {ReadingsNum("Ecodan","Tsoll-Warmwasser",0) + 1}, Tsoll-Warmwasser-Down {ReadingsNum("Ecodan","Tsoll-Warmwasser",0) - 1}, Tavg-Speicher {(ReadingsNum("Ecodan","TV-Z1",0) + ReadingsNum("Ecodan","TR-Z1",0) + ReadingsNum("1W_TVM_Speicher","temperature",0) + ReadingsNum("1W_TRM_Speicher","temperature",0))/4}, Tsoll-Vorlauf-Z1-Up {ReadingsNum("Ecodan","Tsoll-Vorlauf-Z1",0) + 1}, Tsoll-Vorlauf-Z1-Down {ReadingsNum("Ecodan","Tsoll-Vorlauf-Z1",0) - 1}, Tsoll-Vorlauf-Z2-Up {ReadingsNum("Ecodan","Tsoll-Vorlauf-Z2",0) + 1}, Tsoll-Vorlauf-Z2-Down {ReadingsNum("Ecodan","Tsoll-Vorlauf-Z2",0) - 1}, Error-Ofen {ReadingsNum("Ecodan","TV-Ofen",0) < 65 ? 0 : ReadingsNum("Ecodan","TV-Ofen",0)}, Brenner-Aktiv {(ReadingsNum("Ecodan","Arbeitsmodus",0) == 2 ? 1 : 0)*(ReadingsNum("Ecodan","TV-Ofen",0) > 55 ? 1 : 0)}, Arbeitsmodus-Inkl-Brenner {ReadingsNum("Ecodan","Arbeitsmodus",0) + (ReadingsNum("Ecodan","Brenner-Aktiv",0)*10)}, T-Aussen-median {ReadingsNum("Ecodan","T-Aussen",0)}

######################################################################################
######### Define Dummy for setting two Modbus readings with the same value ###########
######################################################################################

define d_TsollVorlauf dummy
attr d_TsollVorlauf event-on-change-reading state
attr d_TsollVorlauf room Heizung
attr d_TsollVorlauf setList 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

define di_TsollVorlauf DOIF ([d_TsollVorlauf]) (set Ecodan Tsoll-Vorlauf-Z1 [d_TsollVorlauf]) (set Ecodan Tsoll-Vorlauf-Z2 [d_TsollVorlauf])
attr di_TsollVorlauf do always
attr di_TsollVorlauf room Heizung
attr di_TsollVorlauf wait 0,10


Könnt Ihr mir sagen, was hier dafür verantwortlich sein kann, dass sich timeouts häufen? Generiert das Modbus modul eine queue für alle readings (set wie auch get)?

Vielen Dank schonmal

StefanStrobel

Hallo breitbanddilettant,

auf den ersten Blick sieht das so aus, als ob Dein Slave erst nach 4 Sekunden antwortet und der Timeout immer kurz davor zuschlägt.
Nach dem Timeout kommt dann doch noch eine Antworte, die wird dann aber verworfen.
Setz doch mal den Timeout auf 5 Sekunden oder erzeuge ein Log mit Verbose 5 für ModbusBus und Ecodan.
Vielleicht kann man dann noch mehr Details erkennen.

Am Fhem-Update sollte es nicht liegen, da das Modbus-Modul schon lange nicht mehr im SVN aktualisiert wurde.
Eine neue Version gibt es bisher nur hier im Forum.

Gruss
   Stefan

breitbanddilettant

Hallo Stefan,

scheint auf den ersten Blick, als dass Attribut

attr Ecodan dev-timing-timeout 5

geholfen hat :-)
Ich warte mal die nächsten Tage ab.

Danke schonmal und schöne Grüße,
Konstantin

StefanStrobel

Hallo Konstantin,

es ist schon ungewöhnlich, dass ein Gerät so lange braucht um zu antworten.
Kannst Du das mal neu starten? Evt. liegt das Problem ja auf der Seite des Slave.

Gruss
   Stefan

cocojambo

#599
Ich benutze das Modul um einen SolarEdge Inverter mit zwei Modbuszähler und einer Batterie auszulesen. Bis auf ein paar Adressen werden alle Readings im Intervall aktuallisiert. Gebe ich zB. mit "Get SE_Inverter M_1_AC_Power_C_Battery_in_out" ein, wird der Wert im Reading jedesmal aktuallisiert, aber beim nächsten Intervall nicht mehr. Die beiden Zähler sind bis auf die Adressen gleich, aber nur Zähler 2 wird automatisch aktuallisiert.(siehe Anlage Screenshots)
Ich habe auch die Attribute und Readings gelöscht und "händisch" wieder eingegeben und dann "reload" . Danach erscheinen die Attribute mit allen Werte, aber es erfolgt immer noch keine Aktuallisierung der Readings.

Woran liegt das ? und wie kann ich das ändern?
Ich komme einfach nicht weiter.

Gruß aus Köln
Norbert
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000