Hallo,
ich habe noch viele FHT und drei Homatic Heizungsventile. Ich möchte die Ventilstellungen auswerten und habe folgende DOIF Abfrage gemacht.
define Ventilsteuerung_2 DOIF ([HZ_DB_v_r_Clima:ValvePosition] or [HZ_DB_h_r_Clima:ValvePosition] or [HZ_DB_T_F_Clima:ValvePosition] or [Bad_Heizung:actuator:d] or [Hobby_Heizung:actuator:d] or [Ich_Heizung:actuator:d] or [SZ_Heizung:actuator:d] or [WC_Heizung:actuator:d] or [WG_Heizung:actuator:d] or [WZ_Heizung:actuator:d] > 4) (set Ventilsteuerung_1 on)
Leider ist Das ergebnis nicht wie gewünscht.
Folgendes Ergenis wird angezeigt:
Device HZ_DB_T_F_Clima 2024-12-10 20:02:58
cmd 1 2024-12-10 18:16:35
cmd_event HZ_DB_h_r_Clima 2024-12-10 18:16:35
cmd_nr 1 2024-12-10 18:16:35
e_Bad_Heizung_actuator 0% 2024-12-10 19:11:47
e_HZ_DB_T_F_Clima_ValvePosition 0 2024-12-10 20:02:58
e_HZ_DB_h_r_Clima_ValvePosition 0 2024-12-10 20:01:47
e_HZ_DB_v_r_Clima_ValvePosition 1 2024-12-10 20:01:32
e_WC_Heizung_actuator 0% 2024-12-10 19:19:59
mode enabled 2024-12-10 18:01:45
state cmd_1 2024-12-10 18:16:35
und
Bad_Heizung (Bad Heizung) 20.7 C FHT
DOIFtools initialized DOIFtools
HZ_DB_T_F_Clima (Flur Tür) T: 13.8 desired: 6.0 valve: 0 CUL_HM
HZ_DB_h_r_Clima (Fenster hinten rechts) T: 14.2 desired: 14.0 valve: 0 CUL_HM
HZ_DB_v_r_Clima (Fenster vorne rechts) T: 14.0 desired: 14.0 valve: 1 CUL_HM
Hobby_Heizung (Hobbyraum Heizung) measured-temp: 18.1 FHT
Ich_Heizung (Ich-Zimmer Heizung) measured-temp: 18.7 FHT
SZ_Heizung (Schlafzimmer Heizung) 18.2 C FHT
Ventilsteuerung_1 (Ventilsteuerung) off dummy
WC_Heizung (WC Heizung) 18.4 C FHT
WG_Heizung (Wintergarten Heizung) 7.9 C FHT
WZ_Heizung (Wohnzimmer Heizung) 19.1 C FHT
Die Ventilstellung wird mir nicht angezeigt.
Laut den Beschreibungen ist der Aufruf richtig:
[Hobby_Heizung:actuator:d]
Was habe ich übersehen?
Gruß
Wilhelm
Das >4 gehört vor jedes OR.
Hier fände ich ein notify auch sinnvoller.
Habe ich eingebaut, das Ergebnis hat sich nicht geändert.
den DOIF Aufbau habe ich aus einer älteren Auswertung abgeschrieben.
Dann setze deine ganze OR Verknüpfung mal in eine runde Klammer, dann sollte es funktionieren.
Was möchtest du mit den or-Bedingungen bezwecken?
[HZ_DB_h_r_Clima:ValvePosition]
ohne einen Vergleich mit etwas, ist die Angabe genau dann wahr, wenn der Inhalt des Readings ungleich Null ist - sonst nicht.
Möchtest du das?
Mit der zusätzlichen runden Klammer scheint es zu funktionieren.
Ich möchte mit der Abfrage bezwecken, dass wenn ein Ventil über 5% geöffnet ist, die Pumpe eingeschaltet wird und wenn nicht, soll sie aus sein.
Schon mal mit nur einer Heizung probiert?
Im übrigen hatte ich das gleiche Problem, aber auf der CCU direkt, gelöst, indem ich die Werte addiert habe. Wenn viele Ventile nur ein wenig geöffnet sind, lief der Brenner an.
Aktuell ist es so, dass die Pumpe abgeschaltet wird, wenn die einstelligen Ventilwerte unter 5 sinken. Zweistellige Werte werden nicht berücksichtigt.
Zitat von: rud0815 am 11 Dezember 2024, 08:10:09Mit der zusätzlichen runden Klammer scheint es zu funktionieren.
Ich möchte mit der Abfrage bezwecken, dass wenn ein Ventil über 5% geöffnet ist, die Pumpe eingeschaltet wird und wenn nicht, soll sie aus sein.
Dann musst du bei jedem Ventil den Vergleich anstellen also:
[HZ_DB_v_r_Clima:ValvePosition] > 5 or [HZ_DB_h_r_Clima:ValvePosition] > 5 ...
Das ist nicht DOIF spezifisch, sondern Perl und funktioniert auch bei alle anderen mir bekannten Programmiersprachen, übrigens auch in Excel
alles andere funktioniert sonst "zufällig".
Zitat von: rud0815 am 11 Dezember 2024, 08:10:09dass wenn ein Ventil über 5% geöffnet ist
Wieso steht dann ein >4 im DOIF?
Zitat von: rud0815 am 10 Dezember 2024, 20:32:27Habe ich eingebaut, das Ergebnis hat sich nicht geändert.
Will ich sehen. Mein Vorschlag ist auch identisch mit dem von Damian.
Mein Aufruf siehtnun wie folgt aus:
define Ventilsteuerung_2 DOIF (([HZ_DB_v_r_Clima:ValvePosition] > 4 or [HZ_DB_h_r_Clima:ValvePosition] > 4 or [HZ_DB_T_F_Clima:ValvePosition] > 4 or [Bad_Heizung:actuator:d] > 4 or [Hobby_Heizung:actuator:d] > 4 or [Ich_Heizung:actuator:d] > 4 or [SZ_Heizung:actuator:d] > 4 or [WC_Heizung:actuator:d] > 4 or [WG_Heizung:actuator:d] > 4 or [WZ_Heizung:actuator:d]) > 4) (set Ventilsteuerung_1 on) DOELSE (set Ventilsteuerung_1 off)
Leider funktioniert es nicht so wie ich will.
Bad_Heizung:actuator steht auf 6 und
WC_Heizung:actuator auf 16.
Ventilsteuerung_1 wird nicht auf on geschaltet. Im Logfile steht nichts dazu.
langsam bin ich ratlos.
Wilhelm
Dann poste mal die Ausgabe von list von diesem Device in diesem Zustand.
Hi, du fragst ob deiner Klammersetzung ob ein logischer Vergleich > 4 ist (meistens nicht...)
(([HZ_DB_v_r_Clima:ValvePosition] ... [WZ_Heizung:actuator:d]
) > 4
) Das funktioniert nicht.
Außerdem müsste doch ein
define Ventilsteuerung_2 DOIF ([*.Clima:Valveposition:d] > 4 or [*.Heizung:actuator:d] > 4) (set Ventilsteuerung_1 on) DOELSE (set Ventilsteuerung_1 off)
Für deine Anwendung ausreichen?
Ansonsten noch:
Zitat von: Damian am 12 Dezember 2024, 13:16:37Dann poste mal die Ausgabe von list von diesem Device in diesem Zustand.
damian: hier der Listausdruck:
nternals:
CFGFN ./FHEM/Testarea.cfg
DEF (([HZ_DB_v_r_Clima:ValvePosition] > 4 or [HZ_DB_h_r_Clima:ValvePosition] > 4 or [HZ_DB_T_F_Clima:ValvePosition] > 4 or [Bad_Heizung:actuator:d] > 4 or [Hobby_Heizung:actuator:d] > 4 or [Ich_Heizung:actuator:d] > 4 or [SZ_Heizung:actuator:d] > 4 or [WC_Heizung:actuator:d] > 4 or [WG_Heizung:actuator:d] > 4 or [WZ_Heizung:actuator:d]) > 4) (set Ventilsteuerung_1 on) DOELSE (set Ventilsteuerung_1 off)
FUUID 675872c4-f33f-a974-b7ee-83e918915f0c8fad
MODEL FHEM
NAME Ventilsteuerung_2
NOTIFYDEV global,Ich_Heizung,SZ_Heizung,HZ_DB_T_F_Clima,WG_Heizung,HZ_DB_h_r_Clima,Bad_Heizung,WC_Heizung,WZ_Heizung,HZ_DB_v_r_Clima,Hobby_Heizung
NR 2267
NTFY_ORDER 50-Ventilsteuerung_2
STATE cmd_2
TYPE DOIF
VERSION 28546 2024-02-23 20:11:05
READINGS:
2024-12-12 15:36:23 Device HZ_DB_T_F_Clima
2024-12-11 16:50:35 cmd 2
2024-12-11 16:50:35 cmd_event WZ_Heizung
2024-12-11 16:50:35 cmd_nr 2
2024-12-12 02:51:44 e_Bad_Heizung_actuator 6%
2024-12-12 15:36:23 e_HZ_DB_T_F_Clima_ValvePosition 0
2024-12-12 15:35:30 e_HZ_DB_h_r_Clima_ValvePosition 0
2024-12-12 15:35:33 e_HZ_DB_v_r_Clima_ValvePosition 0
2024-12-12 02:54:29 e_Ich_Heizung_actuator 4%
2024-12-12 03:09:03 e_WC_Heizung_actuator 0%
2024-12-12 04:51:28 e_WG_Heizung_actuator 0%
2024-12-12 15:14:13 e_WZ_Heizung_actuator 4%
2024-12-10 18:01:45 mode enabled
2024-12-11 16:50:35 state cmd_2
Regex:
accu:
bar:
barAvg:
collect:
cond:
Bad_Heizung:
0:
actuator ^Bad_Heizung$:^actuator:
HZ_DB_T_F_Clima:
0:
ValvePosition ^HZ_DB_T_F_Clima$:^ValvePosition:
HZ_DB_h_r_Clima:
0:
ValvePosition ^HZ_DB_h_r_Clima$:^ValvePosition:
HZ_DB_v_r_Clima:
0:
ValvePosition ^HZ_DB_v_r_Clima$:^ValvePosition:
Hobby_Heizung:
0:
actuator ^Hobby_Heizung$:^actuator:
Ich_Heizung:
0:
actuator ^Ich_Heizung$:^actuator:
SZ_Heizung:
0:
actuator ^SZ_Heizung$:^actuator:
WC_Heizung:
0:
actuator ^WC_Heizung$:^actuator:
WG_Heizung:
0:
actuator ^WG_Heizung$:^actuator:
WZ_Heizung:
0:
actuator ^WZ_Heizung$:^actuator:
attr:
waitdel:
condition:
0 (::ReadingValDoIf($hash,'HZ_DB_v_r_Clima','ValvePosition') > 4 or ::ReadingValDoIf($hash,'HZ_DB_h_r_Clima','ValvePosition') > 4 or ::ReadingValDoIf($hash,'HZ_DB_T_F_Clima','ValvePosition') > 4 or ::ReadingValDoIf($hash,'Bad_Heizung','actuator','','d') > 4 or ::ReadingValDoIf($hash,'Hobby_Heizung','actuator','','d') > 4 or ::ReadingValDoIf($hash,'Ich_Heizung','actuator','','d') > 4 or ::ReadingValDoIf($hash,'SZ_Heizung','actuator','','d') > 4 or ::ReadingValDoIf($hash,'WC_Heizung','actuator','','d') > 4 or ::ReadingValDoIf($hash,'WG_Heizung','actuator','','d') > 4 or ::ReadingValDoIf($hash,'WZ_Heizung','actuator','','d')) > 4
do:
0:
0 set Ventilsteuerung_1 on
1:
0 set Ventilsteuerung_1 off
helper:
NOTIFYDEV global,Ich_Heizung,SZ_Heizung,HZ_DB_T_F_Clima,WG_Heizung,HZ_DB_h_r_Clima,Bad_Heizung,WC_Heizung,WZ_Heizung,HZ_DB_v_r_Clima,Hobby_Heizung
event ValvePosition: 0,boostTime: -,controlMode: auto,desired-temp: 6.0,measured-temp: 13.6,partyEnd: -,partyStart: -,partyTemp: -,T: 13.6 desired: 6.0 valve: 0
globalinit 1
last_timer 0
sleeptimer -1
timerdev HZ_DB_T_F_Clima
timerevent ValvePosition: 0,boostTime: -,controlMode: auto,desired-temp: 6.0,measured-temp: 13.6,partyEnd: -,partyStart: -,partyTemp: -,T: 13.6 desired: 6.0 valve: 0
triggerDev HZ_DB_T_F_Clima
timerevents:
ValvePosition: 0
boostTime: -
controlMode: auto
desired-temp: 6.0
measured-temp: 13.6
partyEnd: -
partyStart: -
partyTemp: -
T: 13.6 desired: 6.0 valve: 0
timereventsState:
ValvePosition: 0
boostTime: -
controlMode: auto
desired-temp: 6.0
measured-temp: 13.6
partyEnd: -
partyStart: -
partyTemp: -
state: T: 13.6 desired: 6.0 valve: 0
triggerEvents:
ValvePosition: 0
boostTime: -
controlMode: auto
desired-temp: 6.0
measured-temp: 13.6
partyEnd: -
partyStart: -
partyTemp: -
T: 13.6 desired: 6.0 valve: 0
triggerEventsState:
ValvePosition: 0
boostTime: -
controlMode: auto
desired-temp: 6.0
measured-temp: 13.6
partyEnd: -
partyStart: -
partyTemp: -
state: T: 13.6 desired: 6.0 valve: 0
internals:
perlblock:
readings:
all HZ_DB_v_r_Clima:ValvePosition HZ_DB_h_r_Clima:ValvePosition HZ_DB_T_F_Clima:ValvePosition Bad_Heizung:actuator Hobby_Heizung:actuator Ich_Heizung:actuator SZ_Heizung:actuator WC_Heizung:actuator WG_Heizung:actuator WZ_Heizung:actuator
trigger:
uiState:
uiTable:
Attributes:
tobi01001:
[*.Clima:Valveposition:d] den könnte ich verwenden.
Vom FS20 werden mir sachen angezeigt, die ich nicht möchte.
Wilhelm
Ich bin etwas verwirrt, ich habe den readinggroup, laut List als referenz genommen. Dieser zeigt andere Werte der Position an.
Internals:
CFGFN ./FHEM/Allgemein_271A.cfg
DEF <%sani_heating_temp>,<Isttemperatur>,<Solltemperatur>,<Ventilstellung>,<Fenster>,<Batterie>,<Mode> NAME=*.Heizung:measured-temp,desired-temp,actuator,window,[Bb]attery,mode,
FUUID 5e00e9a4-f33f-a974-314c-acee018e4e9f7b24
NAME FHT_Heizung
NR 167
NTFY_ORDER 50-FHT_Heizung
STATE Initialized
TYPE readingsGroup
changed 0
CONTENT:
Bad_Heizung 1
FHT_Heizung 1
Hobby_Heizung 1
Ich_Heizung 1
SZ_Heizung 1
WC_Heizung 1
WG_Heizung 1
WZ_C.S_Heizung 1
WZ_Heizung 1
CONTENT2:
DEVICES:
ARRAY(0x64439f8)
ARRAY(0x6e4d9e8)
ARRAY(0x6edadd8)
ARRAY(0x6294458)
ARRAY(0x5f8f848)
ARRAY(0x6f6f0e8)
ARRAY(0x651dfb8)
ARRAY(0x6e0f570)
ARRAY(0x6fee658)
ARRAY(0x6c79b48)
fhem:
lastDefChange 10
last_update 1734014508.69478
helper:
DEF
mapping %ALIAS
nameStyle style="color:red"
valueStyle style="text-align:center"
commands:
desired-temp desired-temp:
valueColumns:
eventdescription colspan="4"
valueFormat:
desired-temp %.1f °C
desired-temp.off %s
measured-temp %.1f °C
valueIcon:
battery.low batterie@red
battery.ok batterie@green
window.closed fts_window_1w@lightgreen
window.open fts_window_1w_open@red
Attributes:
alias Heizung
commands { 'desired-temp' => 'desired-temp:' }
group Heizungsübersicht
mapping %ALIAS
nameStyle style="color:red"
noheading 1
notime 1
room Allgemein
valueColumns { eventdescription => 'colspan="4"' }
valueFormat {"measured-temp" => "%.1f °C", "desired-temp" => "%.1f °C", "desired-temp.off" => "%s"}
valueIcon {'battery.ok' => 'batterie@green', 'battery.low' => 'batterie@red', 'window.closed' => 'fts_window_1w@lightgreen', 'window.open' => 'fts_window_1w_open@red'}
valueStyle style="text-align:center"
Die Klammern in Deinem DOIF-Def passen nicht.
Was ist denn falsch? Ich finde da keinen Fehler
Mindestens 10 mal geprüft und immer Übersehen. Mal sehen ob es jetzt läuft.
Danke für Hilfe. Nach dem letzten Klammer Fehler ist jetzt alles in Ordnung.
Das kommt davon, wenn man Änderungen nicht genau überprüft.
Wilhelm