Hallo,
ich möchte gerade abhängig von der Außentemperatur meine Lüftersteuerng modifizieren, bei bestimmten Temperaturen soll die Lüftung ausgeschaltet werden. Dazu habe ich folgendes DOIF definiert:
define DisableFanAtHighTemperatures DOIF ([LWZ:outside_temp] > 23) (set LWZ p07FanStageDay 0) DOELSEIF ([LWZ:outside_temp] < 23) (set LWZ p07FanStageDay 1)
Dabei ist LWZ:outside_temp ein Userreading meiner Heizung:
attr LWZ userReadings p_HCw:sGlobal.* {((split ' ',ReadingsVal("LWZ","sGlobal",0))[89])}, Rel_humidity:sGlobal.* {((split ' ',ReadingsVal("LWZ","sGlobal",0))[92])}, return_temp:sGlobal.* {((split ' ',ReadingsVal("LWZ","sGlobal",0))[5])}, flow_temp:sGlobal.* {((split ' ',ReadingsVal("LWZ","sGlobal",0))[3])}, wanted_temp:sHC1.* {((split ' ',ReadingsVal("LWZ","sHC1",0))[11])}, heating_current_temp:sHC1.* {((split ' ',ReadingsVal("LWZ","sHC1",0))[13])}, outside_temp:sGlobal.* {((split ' ',ReadingsVal("LWZ","sGlobal",0))[1])}, dhw_temp:sGlobal.* {((split ' ',ReadingsVal("LWZ","sGlobal",0))[9])}, inside_temp:sHC1.* {((split ' ',ReadingsVal("LWZ","sHC1",0))[27])}, CopHC:sHeatHCDay.* {sprintf("%.2f", ReadingsNum("LWZ","sHeatHCDay",1) / ReadingsNum("LWZ","sElectrHCDay",1))}, CopDHW:sHeatDHWDay.* {sprintf("%.2f", ReadingsNum("LWZ","sHeatDHWDay",1) / ReadingsNum("LWZ","sElectrDHWDay",1))}, outside_temp_min:statOutside_tempDay.* {((split ' ',ReadingsVal("LWZ","statOutside_tempDay",0))[1])}, outside_temp_av:statOutside_tempDay.* {((split ' ',ReadingsVal("LWZ","statOutside_tempDay",0))[3])}, outside_temp_max:statOutside_tempDay.* {((split ' ',ReadingsVal("LWZ","statOutside_tempDay",0))[5])}, outside_temp_av_yesterday:statOutside_tempDayLast.* {((split ' ',ReadingsVal("LWZ","statOutside_tempDayLast",0))[3])}
Das wird also aus sGlobal extrahiert. Mein Problem ist nun, dass der DOIF nie triggert, also nie ausgelöst wird. Meine Vermutung war nun dass es evtl. an dem Userreading liegen könnte. Im Eventlog sehe ich nicht dass das DOIF überhaupt je ausgeführt wird. Habt ihr eine Idee wie das richtig geht? Vielen Dank!
ZitatKann ein Userreading ein DOIF triggern?
-> ja
Besser wäre ein komplettes list (des DOIF und) des Devices mit dem userReadings, also von LWZ?
Schon mal den Eventmonitor geöffnet und geschaut, ob Events kommen, also vom userReadings
p_HCwoutside_temp?
EDIT: und nat. von sGlobal. Weil wenn das keinen Event erzeugt, dann wird das userReadings ja nie "berechnet"... Oder existiert das userReadings
p_HCwoutside_temp? (all das wäre mit einem simplen list beantwortet 8) )
Evtl. event-on- Attribute gesetzt?
Würde man in einem list gesehen haben...
EDIT: wobei Zitat von: Jackie am 27 Juni 2024, 10:17:04[LWZ:outside_temp]
-> das userReadings heißt doch nicht outside_temp ?Ok, kommt weiter hinten im userReadings ;)
Gruß, Joachim
Hallo Jackie,
eine Grundvoraussetzung für ein Triggern ist das Vorhandensein eines entsprechenden Events.
Wenn ein Reading (egal ob es ein reguläres oder ein userReading ist) kein Event liefert, dann gibt es keinen Trigger für ein DOIF oder notify.
Man kann das Vorhandenseins von Events in einem Device mit event-on-change-reading und ähnlichen Attributen steuern, um bspw. die Anzahl von relevanten Events etc. zu reduzieren, was meist eine gute Idee ist.
Ob ein Event vorliegt, und wie es genau aussieht, kannst du im Event monitor sehen.
Bitte lies die entsprechenden Stichworte im Fhem Wiki oder der commandref nach, dann sollte vieles klarer werden.
Viele Grüße Gisbert
edit: Joachim war schneller
Zitat von: Jackie am 27 Juni 2024, 10:17:04define DisableFanAtHighTemperatures DOIF ([LWZ:outside_temp] > 23) (set LWZ p07FanStageDay 0) DOELSEIF ([LWZ:outside_temp] < 23) (set LWZ p07FanStageDay 1)
Am Rande (auch das wäre mit einem list wohl erkennbar): eine Hysterese hast du vorgesehen? Ansonsten wird das DOIF (wenn es dann mal auslöst ;) ) "ständig" hin-und-her schalten...
Gruß, Joachim