FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: hugo am 17 April 2024, 22:15:11

Titel: [gelöst] Modbus Urlaubssteuerung Heizung
Beitrag von: hugo am 17 April 2024, 22:15:11
Hallo zusammen,
ich wollte meine Urlaubssteuerung der Heizung etwas smarter machen, momentan geht sie nur in den Absenkbetrieb.
Da ich eine Thermosolaranlage auf dem Dach habe, war meine Überlegung die erzeugte Wärme auch in der Urlaubszeit zum Heizen der FBH nutzen, falls genügend Wärme im Puffer vorhanden ist.
Die Steuerung erfolgt über Modbus. Leider funktioniert das untenstehende DoIf nur teilweise. Es wird immer nur ein Befehl des Blocks ausgeführt, obwohl die sets einzeln ausgeführt, alle funktionieren. Ich habe auch schon mit "wait getestet ohne Erfolg.

Hat jemand eine Idee?

defmod di.UrlaubHeizung DOIF
([ETA_PU15_Modbus:ETA_Kollektorpumpe] eq "Ein" and
 [ETA_PU15_Modbus:ETA_Puffer_Unten] > 35 and
 [urlaub:tomorrow] ne "none"
)
(
    (set ETA_PU15_Modbus ETA_FBH_ein Ein)
    (set ETA_PU15_Modbus ETA_Taste_Heizen Ein)
    (set ETA_PU15_Modbus ETA_Temp_Schieber 900)
)   
DOELSEIF
([ETA_PU15_Modbus.ETA_FBH_ein] eq "Ein" and
 [ETA_PU15_Modbus:ETA_Puffer_Unten] < 33
 [urlaub:tomorrow] ne "none"
)
(
    (set ETA_PU15_Modbus ETA_FBH_ein Aus)
    (set ETA_PU15_Modbus ETA_Taste_Absenken Ein)
    (set ETA_PU15_Modbus ETA_Temp_Schieber 100)
)   
DOELSEIF
([urlaub:tomorrow] eq "none" and
 [urlaub:today] ne "none"
)
(
    (set ETA_PU15_Modbus ETA_Kessel_ein Ein)
    (set ETA_PU15_Modbus.ETA_FBH_ein Ein)
    (set ETA_PU15_Modbus.ETA_Taste_Auto Ein)
)   

Gruß Josef
Titel: Aw: Modbus Urlaubssteuerung Heizung
Beitrag von: Damian am 18 April 2024, 10:38:04
Du solltest die Befehle mit Komma oder Semikolon trennen, wenn du keine zusätzliche Verzögerung zwischen den Befehlen brauchst:

...(set ETA_PU15_Modbus ETA_FBH_ein Ein, set ETA_PU15_Modbus ETA_Taste_Heizen Ein, set ETA_PU15_Modbus ETA_Temp_Schieber 900)...
Titel: Aw: Modbus Urlaubssteuerung Heizung
Beitrag von: hugo am 24 April 2024, 17:30:07
Hallo Damian,
Danke für die Antwort. Habe mein DoIf jetzt mit abgespeckter Version erstmal am laufen. Mit deiner Version von Befehlsausführung.

Nach langen testen habe ich folgendes festgestellt, dass es beim sendnen auf die Reihenfolge und einem größeren Zeitlichen Abstand an kommt.

Also bis jetzt funktioniert es mit dem Wait.


define di.UrlaubHeizung DOIF ([ETA_PU15_Modbus:ETA_Kollektorpumpe] eq "Ein" and\
 [ETA_PU15_Modbus:ETA_Puffer_Unten] > 30 and \
 [urlaub:tomorrow] ne "none"\
)\
 (\
  set ETA_PU15_Modbus ETA_FBH_ein Ein, \
  set ETA_PU15_Modbus ETA_Taste_Heizen Ein)\
DOELSEIF\
([ETA_PU15_Modbus.ETA_FBH_ein] eq "Ein" and \
 [ETA_PU15_Modbus:ETA_Puffer_Unten] < 50 and\
 [urlaub:tomorrow] ne "none"\
)\
(\
 set ETA_PU15_Modbus ETA_Taste_Absenken Ein,\
 set ETA_PU15_Modbus ETA_FBH_ein Aus\
)\

attr di.UrlaubHeizung DbLogExclude .*
attr di.UrlaubHeizung disable 1
attr di.UrlaubHeizung wait 0,120:0,120
#   DEF        ([ETA_PU15_Modbus:ETA_Kollektorpumpe] eq "Ein" and
# [ETA_PU15_Modbus:ETA_Puffer_Unten] > 30 and
# [urlaub:tomorrow] ne "none"
#)
# (
#  set ETA_PU15_Modbus ETA_FBH_ein Ein,
#  set ETA_PU15_Modbus ETA_Taste_Heizen Ein)
#DOELSEIF
#([ETA_PU15_Modbus.ETA_FBH_ein] eq "Ein" and
# [ETA_PU15_Modbus:ETA_Puffer_Unten] < 50 and
# [urlaub:tomorrow] ne "none"
#)
#(
# set ETA_PU15_Modbus ETA_Taste_Absenken Ein,
# set ETA_PU15_Modbus ETA_FBH_ein Aus
#)
#
#   FUUID      66058372-f33f-046a-0942-c83b06b5b6350d6c
#   MODEL      FHEM
#   NAME       di.UrlaubHeizung
#   NOTIFYDEV  global
#   NR         94
#   NTFY_ORDER 50-di.UrlaubHeizung
#   STATE      deactivated
#   TYPE       DOIF
#   VERSION    27740 2023-07-10 09:31:11
#   disableNotifyFn 1
#   eventCount 42
#   READINGS:
#     2024-04-24 16:33:13   mode            deactivated
#     2024-04-24 16:33:13   state           deactivated
#   Regex:
#   attr:
#     cmdState:
#     wait:
#       0:
#         0
#         120
#       1:
#         0
#         120
#     waitdel:
#   condition:
#   do:
#     0:
#   helper:
#     NOTIFYDEV  global
#   uiState:
#   uiTable:
#
setstate di.UrlaubHeizung deactivated
setstate di.UrlaubHeizung 2024-04-24 16:33:13 mode deactivated
setstate di.UrlaubHeizung 2024-04-24 16:33:13 state deactivated

Gruß Josef