Hallo zusammen,
ich stehe leider gerade etwas auf dem Schlauch. Ich versuche ein DOIF einzusetzen, um meine Wohnraumlüftung ein wenig intelligenter zu machen und scheitere damit. Die Syntax wird von FHEM akzeptiert, aber die Bedingung wird scheinbar nie erfüllt, obwohl aus meiner Sicht die Readings die "richtigen" Werte haben. Das Ganze sieht so aus:
Internals:
CFGFN
DEF ([Heizung:Aussentemperatur] <18 and [Jahreszeit:state] eq "Sommer")
(set Lueftung dim 60)
DOELSEIF ([Heizung:Aussentemperatur] >18 and [Jahreszeit:state] eq "Sommer")
(set Lueftung dim 0)
FUUID 62bd5224-f33f-9c6a-1de0-4d7bb902cc5b5c60
MODEL FHEM
NAME Lueftungssteuerung
NOTIFYDEV global,Jahreszeit,Heizung
NR 2844
NTFY_ORDER 50-Lueftungssteuerung
STATE initialized
TYPE DOIF
VERSION 26020 2022-05-03 16:28:02
READINGS:
2022-07-21 06:38:02 Device Heizung
2022-07-18 07:05:52 cmd 0
2022-07-21 06:38:02 e_Heizung_Aussentemperatur 19.8
2022-07-18 07:05:52 mode enabled
2022-07-18 07:05:52 state initialized
Regex:
accu:
collect:
cond:
Heizung:
0:
Aussentemperatur ^Heizung$:^Aussentemperatur:
1:
Aussentemperatur ^Heizung$:^Aussentemperatur:
Jahreszeit:
0:
state ^Jahreszeit$:^state:
1:
state ^Jahreszeit$:^state:
condition:
0 ::ReadingValDoIf($hash,'Heizung','Aussentemperatur') <18 and ::ReadingValDoIf($hash,'Jahreszeit','state') eq "Sommer"
1 ::ReadingValDoIf($hash,'Heizung','Aussentemperatur') >18 and ::ReadingValDoIf($hash,'Jahreszeit','state') eq "Sommer"
do:
0:
0 set Lueftung dim 60
1:
0 set Lueftung dim 0
2:
helper:
NOTIFYDEV global,Jahreszeit,Heizung
event Aussentemperatur: 19.8
globalinit 1
last_timer 0
sleeptimer -1
triggerDev Heizung
triggerEvents:
Aussentemperatur: 19.8
triggerEventsState:
Aussentemperatur: 19.8
internals:
readings:
all Heizung:Aussentemperatur Jahreszeit:state
trigger:
uiState:
uiTable:
Attributes:
room Dachboden
Könnt ihr mir helfen, wo mein Problem liegt?
Danke und Gruß
Matthias
Mir fallen zwei Dinge ein:
1) wird überhaupt ein Event vom Device Heizung getriggert? Mache davon mal ein List. Das Device Jahreszeit ist wahrscheinlich statisch, daher kann du das auch mit [?Jahreszeit:state] definieren.
2) in der Referenz wird ein < oder > immer unmittelbar nach dem []-Device geschrieben - ob das eine Rolle spielt, wage ich aber zu bezweifeln.
Vielen Dank für die schnelle Antwort.
Hier das List der Heizung:
Internals:
DEF /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0 ./89_VCONTROL300_VScotHO1.cfg 180 300
DeviceName /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0@4800,8,E,2
FUUID 5eba285a-f33f-9c6a-9d5b-756576c196911b1b
INTERVAL 180
NAME Heizung
NR 24
PROTOCOL 300
STATE defined
TYPE VCONTROL300
UPDATESTATUS INACTIVE
Helper:
DBLOG:
Abgastemperatur:
DBLogging:
TIME 1658380624.29921
VALUE 30
Aussentemperatur:
DBLogging:
TIME 1658380622.3485
VALUE 20.5
Aussentemperatur_Gedaempft:
DBLogging:
TIME 1658380623.50578
VALUE 26
Betriebsart:
DBLogging:
TIME 1658380624.50976
VALUE 2
Brennerlaufzeit:
DBLogging:
TIME 1658380624.61579
VALUE 29813.57
Brennerlaufzeit_Today:
DBLogging:
TIME 1658380624.65245
VALUE 0.00
Brennerlaufzeit_TodayStart:
DBLogging:
TIME 1658354522.6996
VALUE 29813.57
Brennerlaufzeit_Yesterday:
DBLogging:
TIME 1658354522.67745
VALUE 0.00
Brennerleistung:
DBLogging:
TIME 1658380622.25524
VALUE 0
Brennerstarts:
DBLogging:
TIME 1658380623.56123
VALUE 26372
Brennerstarts_Today:
DBLogging:
TIME 1658380623.61398
VALUE 0.00
Brennerstarts_TodayStart:
DBLogging:
TIME 1658354523.37674
VALUE 26372.00
Brennerstarts_Yesterday:
DBLogging:
TIME 1658354523.35483
VALUE 0.00
Brennerstatus:
DBLogging:
TIME 1658380622.53363
VALUE 0
Fehler01:
DBLogging:
TIME 1658380622.77451
VALUE 00
Fehler02:
DBLogging:
TIME 1658380623.44753
VALUE 00
Fehler03:
DBLogging:
TIME 1658380622.7105
VALUE 00
Fehler04:
DBLogging:
TIME 1658380622.47897
VALUE 00
Fehler05:
DBLogging:
TIME 1658380624.02106
VALUE 00
Fehler06:
DBLogging:
TIME 1658380623.33146
VALUE 00
Fehler07:
DBLogging:
TIME 1658380623.18736
VALUE 00
Fehler08:
DBLogging:
TIME 1658380622.19373
VALUE 00
Fehler09:
DBLogging:
TIME 1658380623.90211
VALUE 00
Fehler10:
DBLogging:
TIME 1658380621.7859
VALUE 00
Heizkennlinie_Neigung:
DBLogging:
TIME 1658380624.24969
VALUE 1.4
Heizkennlinie_Niveau:
DBLogging:
TIME 1658380623.05226
VALUE 0
Kesseltemperatur_Ist:
DBLogging:
TIME 1658380623.8472
VALUE 29
Kesseltemperatur_Soll:
DBLogging:
TIME 1658380624.43601
VALUE 20
Kollektortemperatur:
DBLogging:
TIME 1658380623.96017
VALUE 29.3
Modulation:
DBLogging:
TIME 1658380624.14593
VALUE 0
Nachladeunterdr�ckung:
DBLogging:
TIME 1658380621.62105
VALUE 1
Party_Raumtemperatur_Soll:
DBLogging:
TIME 1658380622.58912
VALUE 20
Partybetrieb_Status:
DBLogging:
TIME 1658380624.70016
VALUE 0
Raumtemperatur_Soll:
DBLogging:
TIME 1658380622.94021
VALUE 22
Red_Raumtemperatur_Soll:
DBLogging:
TIME 1658380621.72142
VALUE 16
Ruecklauftemperatur:
DBLogging:
TIME 1658380621.56862
VALUE 29.75
SolarSpeichertemperatur:
DBLogging:
TIME 1658380623.25084
VALUE 41.9
Solarleistung:
DBLogging:
TIME 1658380623.78225
VALUE 37425
Solarleistung_Today:
DBLogging:
TIME 1658380623.80057
VALUE 0.00
Solarleistung_TodayStart:
DBLogging:
TIME 1658354523.68261
VALUE 37425.00
Solarleistung_Yesterday:
DBLogging:
TIME 1658354523.63047
VALUE 16.00
Solarpumpe:
DBLogging:
TIME 1658380624.19524
VALUE 0
Solarstunden:
DBLogging:
TIME 1658380622.11976
VALUE 8099
Solarstunden_Today:
DBLogging:
TIME 1658380622.15534
VALUE 0.00
Solarstunden_TodayStart:
DBLogging:
TIME 1658354522.04331
VALUE 8099.00
Solarstunden_Yesterday:
DBLogging:
TIME 1658354521.98652
VALUE 6.00
Sparbetrieb_Status:
DBLogging:
TIME 1658380624.55392
VALUE 0
Speicherladepumpe_Status:
DBLogging:
TIME 1658380624.08694
VALUE 0
Stoerung:
DBLogging:
TIME 1658380622.01493
VALUE 0
Umschaltventil:
DBLogging:
TIME 1658380622.06416
VALUE 1
Umwaelzpumpe_intern_Leistung:
DBLogging:
TIME 1658380622.99649
VALUE 40
Umwaelzpumpe_intern_Status:
DBLogging:
TIME 1658380621.89896
VALUE 1
UpdateStatus:
DBLogging:
TIME 1658380624.73766
VALUE Inactive
UpdateTime:
DBLogging:
TIME 1658380624.71834
VALUE 2022-07-21_07:17:04
Volumenstrom:
DBLogging:
TIME 1658380623.68421
VALUE 15
Vorlauftemperatur:
DBLogging:
TIME 1658380622.64765
VALUE 0
WW-Temp-Oben:
DBLogging:
TIME 1658380621.66977
VALUE 60.7
Warmwasserspeicher_Ist:
DBLogging:
TIME 1658380623.7639
VALUE 60.7
Warmwasserspeicher_Soll:
DBLogging:
TIME 1658380622.31549
VALUE 40
Zirkulationspumpe:
DBLogging:
TIME 1658380621.96565
VALUE 0
Zirkulationspumpe_Frequenz:
DBLogging:
TIME 1658380623.1164
VALUE 1
Zirkulationspumpe_Zeit:
DBLogging:
TIME 1658380622.82428
VALUE 5
READINGS:
2022-07-21 07:17:04 Abgastemperatur 30
2022-07-21 07:17:02 Aussentemperatur 20.5
2022-07-21 07:17:03 Aussentemperatur_Gedaempft 26
2022-07-21 07:17:04 Betriebsart 2
2022-04-22 08:11:16 Brenner off
2022-04-22 08:11:16 Brenner-Betriebsstunden 3018.8
2022-07-21 07:17:04 Brennerlaufzeit 29813.57
2022-07-21 07:17:04 Brennerlaufzeit_Today 0.00
2022-07-21 00:02:02 Brennerlaufzeit_TodayStart 29813.57
2022-07-21 00:02:02 Brennerlaufzeit_Yesterday 0.00
2022-07-21 07:17:02 Brennerleistung 0
2022-07-21 07:17:03 Brennerstarts 26372
2022-07-21 07:17:03 Brennerstarts_Today 0.00
2022-07-21 00:02:03 Brennerstarts_TodayStart 26372.00
2022-07-21 00:02:03 Brennerstarts_Yesterday 0.00
2022-07-21 07:17:02 Brennerstatus 0
2022-07-21 07:17:02 Fehler01 00
2022-07-21 07:17:03 Fehler02 00
2022-07-21 07:17:02 Fehler03 00
2022-07-21 07:17:02 Fehler04 00
2022-07-21 07:17:04 Fehler05 00
2022-07-21 07:17:03 Fehler06 00
2022-07-21 07:17:03 Fehler07 00
2022-07-21 07:17:02 Fehler08 00
2022-07-21 07:17:03 Fehler09 00
2022-07-21 07:17:01 Fehler10 00
2022-04-22 08:11:16 HW-Version 52000
2022-04-22 08:11:16 HZ-BrennerStarts 26184
2022-04-22 08:11:16 HZ-BrennerStarts_Today 2.00
2022-04-22 00:02:46 HZ-BrennerStarts_TodayStart 26182.00
2022-04-22 00:02:46 HZ-BrennerStarts_Yesterday 9.00
2022-04-22 08:11:16 HZ-Stoerung off
2022-04-22 08:11:16 HZ-Temp-Aussen-Tiefpass 11.7
2022-07-21 07:17:04 Heizkennlinie_Neigung 1.4
2022-07-21 07:17:03 Heizkennlinie_Niveau 0
2022-04-22 08:11:16 Kesseltemperatur 25.5
2022-07-21 07:17:03 Kesseltemperatur_Ist 29
2022-07-21 07:17:04 Kesseltemperatur_Soll 20
2022-07-21 07:17:03 Kollektortemperatur 29.3
2022-07-21 07:17:04 Modulation 0
2022-07-21 07:17:01 Nachladeunterdr�ckung 1
2022-07-21 07:17:02 Party_Raumtemperatur_Soll 20
2022-07-21 07:17:04 Partybetrieb_Status 0
2022-07-21 07:17:02 Raumtemperatur_Soll 22
2022-07-21 07:17:01 Red_Raumtemperatur_Soll 16
2022-07-21 07:17:01 Ruecklauftemperatur 29.75
2022-07-21 07:17:03 SolarSpeichertemperatur 41.9
2022-04-22 08:11:16 Solarertrag 3265.5
2022-07-21 07:17:03 Solarleistung 37425
2022-07-21 07:17:03 Solarleistung_Today 0.00
2022-07-21 00:02:03 Solarleistung_TodayStart 37425.00
2022-07-21 00:02:03 Solarleistung_Yesterday 16.00
2022-07-21 07:17:04 Solarpumpe 0
2022-07-21 07:17:02 Solarstunden 8099
2022-07-21 07:17:02 Solarstunden_Today 0.00
2022-07-21 00:02:02 Solarstunden_TodayStart 8099.00
2022-07-21 00:02:01 Solarstunden_Yesterday 6.00
2022-07-21 07:17:04 Sparbetrieb_Status 0
2022-07-21 07:17:04 Speicherladepumpe_Status 0
2022-07-21 07:17:02 Stoerung 0
2022-07-21 07:17:02 Umschaltventil 1
2022-07-21 07:17:02 Umwaelzpumpe_intern_Leistung 40
2022-07-21 07:17:01 Umwaelzpumpe_intern_Status 1
2022-07-21 07:17:04 UpdateStatus Inactive
2022-07-21 07:17:04 UpdateTime 2022-07-21_07:17:04
2022-07-21 07:17:03 Volumenstrom 15
2022-07-21 07:17:02 Vorlauftemperatur 0
2022-07-21 07:17:01 WW-Temp-Oben 60.7
2022-04-22 08:11:16 WW-Temp-Soll 10
2022-07-21 07:17:03 Warmwasserspeicher_Ist 60.7
2022-07-21 07:17:02 Warmwasserspeicher_Soll 40
2022-07-21 07:17:01 Zirkulationspumpe 0
2022-07-21 07:17:03 Zirkulationspumpe_Frequenz 1
2022-07-21 07:17:02 Zirkulationspumpe_Zeit 5
helper:
Attributes:
DbLogInclude .*
group Geräte
room HWR
Dasmit dem statisch verstehe ich nicht ganz. Das Device Heizung ist eine Art Schalter, den ich manuell setzen kann. Meinst du das mit statisch?
Mit statisch meinte ich, dass es kein Device ist, was periodisch neue Werte erhält/enthält.
Laut List gibt es keine Einschränkungen im event-on-update-reading oder event-on-change-reading, also sollten auch Events getriggert werden.
Dann fällt mir im Moment auch nur das Leerzeichen vor dem > auf, denn im List vom DOIF stolpere ich über
condition:
0 ::ReadingValDoIf($hash,'Heizung','Aussentemperatur') <18 and ::ReadingValDoIf($hash,'Jahreszeit','state') eq "Sommer"
1 ::ReadingValDoIf($hash,'Heizung','Aussentemperatur') >18 and ::ReadingValDoIf($hash,'Jahreszeit','state') eq "Sommer"
... hier stand Unsinn ...
Wie werden denn die Readings in "Heizung" gesetzt? Falls das eine "Eventhandler-Kette" ist, (die z.B. einen dummy befüllt), klappt das so nicht, siehe den aktuellen Parallelfall (samt Link zu etwas mehr Hintergrundinfo) https://forum.fhem.de/index.php/topic,128468.0.html.
Das Leerzeichen habe ich mal rausgenommen. Mal sehen was das bewirkt.
Die Readings kommen aus einem Modul das sich VCONTROL300 nennt. Das fragt regelmäßig die Parameter der Heizung ab und schreibt diese in die Readings. Den anderen Thread muss ich nochmal genauer lesen. Auf den ersten Blick konnte ich das nicht ganz erfassen.
In deinem ersten Post kann man sehen, dass die Temperatur ankommt (06:38:02), du das DOIF danach (07:05:52) neu initialisiert hast (defmod). Offenbar wird deine Temperatur selten aktualisiert.
Die Definition sieht ok aus.
Jetzt musst du nur noch list-Output von Jahreszeit posten und viel Geduld mitbringen bis die Temperatur wieder etwas sendet (das siehst du am e_-Reading im DOIF).
Eigentlich wird die Temperatur sehr regelmäßig aktualisiert. Hier der aktuelle Output:
Internals:
DEF ([Heizung:Aussentemperatur]<18 and [Jahreszeit:state] eq "Sommer")
(set Lueftung dim 60)
DOELSEIF ([Heizung:Aussentemperatur]>18 and [Jahreszeit:state] eq "Sommer")
(set Lueftung dim 0)
FUUID 62bd5224-f33f-9c6a-1de0-4d7bb902cc5b5c60
MODEL FHEM
NAME Lueftungssteuerung
NOTIFYDEV Jahreszeit,global,Heizung
NR 59
NTFY_ORDER 50-Lueftungssteuerung
STATE initialized
TYPE DOIF
VERSION 26020 2022-05-03 16:28:02
READINGS:
2022-07-21 10:31:40 Device Heizung
2022-07-21 10:19:33 cmd 0
2022-07-21 10:31:40 e_Heizung_Aussentemperatur 22.5
2022-07-21 10:19:33 mode enabled
2022-07-21 10:19:33 state initialized
Regex:
accu:
collect:
cond:
Heizung:
0:
Aussentemperatur ^Heizung$:^Aussentemperatur:
1:
Aussentemperatur ^Heizung$:^Aussentemperatur:
Jahreszeit:
0:
state ^Jahreszeit$:^state:
1:
state ^Jahreszeit$:^state:
condition:
0 ::ReadingValDoIf($hash,'Heizung','Aussentemperatur')<18 and ::ReadingValDoIf($hash,'Jahreszeit','state') eq "Sommer"
1 ::ReadingValDoIf($hash,'Heizung','Aussentemperatur')>18 and ::ReadingValDoIf($hash,'Jahreszeit','state') eq "Sommer"
do:
0:
0 set Lueftung dim 60
1:
0 set Lueftung dim 0
2:
helper:
NOTIFYDEV Jahreszeit,global,Heizung
event Aussentemperatur: 22.5
globalinit 1
last_timer 0
sleeptimer -1
triggerDev Heizung
triggerEvents:
Aussentemperatur: 22.5
triggerEventsState:
Aussentemperatur: 22.5
internals:
perlblock:
readings:
all Heizung:Aussentemperatur Jahreszeit:state
trigger:
uiState:
uiTable:
Attributes:
room Dachboden
Und das List von Jahreszeit:
Internals:
FUUID 62bd5141-f33f-9c6a-26d9-f197b0bb2fb070ab
NAME Jahreszeit
NR 58
STATE state Sommer
TYPE dummy
READINGS:
2022-06-30 09:32:22 state state Sommer
Attributes:
devStateIcon Sommer:weather_summer:Herbst Frühling:weather_pollen:Sommer Herbst:weather_wind:Winter Winter:weather_winter:Frühling
room Global
setList state:Winter,Frühling,Sommer,Herbst
Naja, wenn man im state "state Sommer" stehen hat, dann kann es auch nicht funktionieren ;)
Ich sehe was du mir sagst, allerdings kann ich den Fehler noch nicht lösen. Ich weiß nicht, woher dieses "state Summer" kommt. Das Device sieht so aus:
Internals:
FUUID 62bd5141-f33f-9c6a-26d9-f197b0bb2fb070ab
NAME Jahreszeit
NR 58
STATE state Sommer
TYPE dummy
READINGS:
2022-06-30 09:32:22 state state Sommer
Attributes:
devStateIcon Sommer:weather_summer:Herbst Frühling:weather_pollen:Sommer Herbst:weather_wind:Winter Winter:weather_winter:Frühling
room Global
setList state:Winter,Frühling,Sommer,Herbst
Versuchs mal mit
attr Jahreszeit readingList state
Der Vorschlag hat glaube ich zumindest geholfen was der Wert des Readings angeht. Allerdings "greift" das DOIF immer noch nicht:
Hier nochmal das Listing:
Internals:
DEF ([Heizung:Aussentemperatur]<18 and [Jahreszeit:state] eq "Sommer")
(set Lueftung dim 60)
DOELSEIF ([Heizung:Aussentemperatur]>18 and [Jahreszeit:state] eq "Sommer")
(set Lueftung dim 0)
FUUID 62bd5224-f33f-9c6a-1de0-4d7bb902cc5b5c60
MODEL FHEM
NAME Lueftungssteuerung
NOTIFYDEV Jahreszeit,global,Heizung
NR 59
NTFY_ORDER 50-Lueftungssteuerung
STATE cmd_2
TYPE DOIF
VERSION 26020 2022-05-03 16:28:02
READINGS:
2022-07-21 13:49:39 Device Heizung
2022-07-21 12:20:50 cmd 2
2022-07-21 12:20:50 cmd_event Jahreszeit
2022-07-21 12:20:50 cmd_nr 2
2022-07-21 13:49:39 e_Heizung_Aussentemperatur 28
2022-07-21 12:20:50 e_Jahreszeit_state Sommer
2022-07-21 10:19:33 mode enabled
2022-07-21 12:20:50 state cmd_2
Regex:
accu:
collect:
cond:
Heizung:
0:
Aussentemperatur ^Heizung$:^Aussentemperatur:
1:
Aussentemperatur ^Heizung$:^Aussentemperatur:
Jahreszeit:
0:
state ^Jahreszeit$:^state:
1:
state ^Jahreszeit$:^state:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Heizung','Aussentemperatur')<18 and ::ReadingValDoIf($hash,'Jahreszeit','state') eq "Sommer"
1 ::ReadingValDoIf($hash,'Heizung','Aussentemperatur')>18 and ::ReadingValDoIf($hash,'Jahreszeit','state') eq "Sommer"
do:
0:
0 set Lueftung dim 60
1:
0 set Lueftung dim 0
2:
helper:
NOTIFYDEV Jahreszeit,global,Heizung
event Aussentemperatur: 28
globalinit 1
last_timer 0
sleeptimer -1
timerdev Heizung
timerevent Aussentemperatur: 28
triggerDev Heizung
timerevents:
Aussentemperatur: 28
timereventsState:
Aussentemperatur: 28
triggerEvents:
Aussentemperatur: 28
triggerEventsState:
Aussentemperatur: 28
internals:
perlblock:
readings:
all Heizung:Aussentemperatur Jahreszeit:state
trigger:
uiState:
uiTable:
Attributes:
room Dachboden
Zitat von: Matthias182 am 21 Juli 2022, 13:52:24
Der Vorschlag hat glaube ich zumindest geholfen was der Wert des Readings angeht. Allerdings "greift" das DOIF immer noch nicht:
Hier nochmal das Listing:
Internals:
2022-07-21 12:20:50 cmd 2
2022-07-21 12:20:50 cmd_event Jahreszeit
2022-07-21 12:20:50 cmd_nr 2
2022-07-21 13:49:39 e_Heizung_Aussentemperatur 28
2022-07-21 12:20:50 e_Jahreszeit_state Sommer
2022-07-21 10:19:33 mode enabled
2022-07-21 12:20:50 state cmd_2
Doch, cmd_2 wurde ausgeführt, was man gut erkennen kann.
Heute Nacht hat es tatsächlich funktioniert. Gestern sah das noch nicht so aus.
Vielen Dank allen, die hier geholfen haben.