DOIF Definition mit Zeit Temperatur und Zeitintervall

Begonnen von gNomeX, 17 Dezember 2015, 18:23:46

Vorheriges Thema - Nächstes Thema

gNomeX

Hallo ich brauch mal eure Hilfe bitte.

define Wearmelampe2 DOIF ([18:00-03:30])(set wlamp2 on)(set wlamp2 off) DOELSE ([Temp_Mitte:temperature ] > 40 or [03:31-17:59]) (set wlampe2 off)
attr Wearmelampe2 repeatcmd 660
attr Wearmelampe2 wait 0,300


##wlamp2 soll zwischen 18:30 und 3:30 einschalten alle 6 minuten 5 minuten lang

##wlamp2 soll Nicht einschalten zwischen 3:31 und 17:59 UND nicht bei einer Temperatur ÜBER 40 grad.

Könnt ihr mir mal  ein wenig auf die sprünge Helfen?

Ellert

Wie zeigt sich der Fehler genau? Schau mal hier: http://forum.fhem.de/index.php/topic,16311.msg106131.html#msg106131

ZitatWill nicht so wie ich.

Ist ein bisschen dürftig.

Otto123

http://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitintervallen gibt es jede Menge Beispiele.
Ich hoffe Dein FHEM ist aktuell, DOIF wurde ständig weiter entwickelt.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

gNomeX



Zitat von: Ellert am 17 Dezember 2015, 19:04:32
Wie zeigt sich der Fehler genau?

Die Lampe ist aus.

Zitat von: Otto123 am 17 Dezember 2015, 20:01:39
http://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitintervallen gibt es jede Menge Beispiele.
Ich hoffe Dein FHEM ist aktuell, DOIF wurde ständig weiter entwickelt.

Gruß Otto

Fhem läuft auf 5.7

Das DOIF Wiki habe ich mehrfach gelesen dadurch ist auch mein DOIF Code entsandten

Otto123

define Wearmelampe2 DOIF ([18:00-03:30])(set wlamp2 on-for-timer 300)
attr Wearmelampe2 repeatcmd 360


Für deine erste Anforderung, die Zweite verstehe ich nicht. Tut mir leid

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

gNomeX

Zitat von: Otto123 am 17 Dezember 2015, 21:22:39
define Wearmelampe2 DOIF ([18:00-03:30])(set wlamp2 on-for-timer 300)
attr Wearmelampe2 repeatcmd 360


Für deine erste Anforderung, die Zweite verstehe ich nicht. Tut mir leid

Gruß Otto

Danke Otto.

So eine lösung hatte ich am anfang.

aber ich will ein WorstCase vermeiden und zwar das die Wärmelampe die Bartagame Röstet.

deswegen dachte ich das

DOELSE ([Temp_Mitte:temperature ] > 40 or [03:31-17:59]) (set wlampe2 off)

das dadurch die lampe selbst innerhalb der schaltzeit die lampe aus bleibt weil die Temperatur zu hoch ist.

Otto123

1. DOELSE ist nicht DOELSEIF! Also DOELSE könnte am Ende einfach stehen mit set Lampe off - keine Bedingung!
2. Dein Zeitintverall mit Temperaturüberwachung ist genau (bis auf ein halbe Stunde) die fehlende Zeitscheibe mit der ohne!? Also wenn dann doch immer mit Temperaturüberwachung:

define Wearmelampe2 DOIF ([18:00-03:30] and [Temp_Mitte:temperature ] < 40) (set wlamp2 on-for-timer 300)

Als Text: die Lampe geht zwischen 18:00 bis 3:30 an wenn die Temperatur kleiner 40 grad ist.

Wenn Du die 5 min noch mit separater Temp Überwachung willst, solltest Du das separat machen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

gNomeX

OK ich verstehe so langsam.

Das war mein erster ansatz der auch die Lampe angemacht hat und nach 45 minuten wieder aus.
define Wearmelampe DOIF ([Temp_Mitte:temperature ] < 30 or [9:00-16:30]) (set wlampe1 on-for-timer 2700)  DOELSEIF ([Temp_Mitte:temperature ] > 40 or [16:31-8:59]) (set wlampe1 off)
attr Wearmelampe cmdpause 360


Das problem war sie ist nicht wieder an gegangen.

Ich würde sie auch
um 8 uhr on-for-timer 2700
um 12 uhr on-for-timer 2700
um 16 uhr on-for-timer 2700

schalten aber sie muß innerhalb der 45 Minuten aus gehen wenn sie über 40 grad erreicht.

PS ich hoffe du verstehst was ich meine  ;)

Otto123

#8
Es hängt ein Leben davon ab?
Dann mach eine Temperatursteuerung unabhängig von FHEM, also nur mit Hardware (oder Sensor und Schalter direkt gepeered).
Und schalte diese Steuerung nach belieben an und aus mit DOIF und Zeitscheiben.

Alternativ mach ein THRESHOLD
define HeizungTerrarium THRESHOLD Temp_Mitte:temperature wlampe1
set HeizungTerrarium desired 35
set HeizungTerrarium hysteresis 5



DOIF für Zeitsteuerung
define di_HzgTerrarium DOIF ([09:00-16:30]) (set HeizungTerrarium desired 35) DOELSE (set HeizungTerrarium desired 30)



Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

gNomeX

#9
Guten Morgen.

Danke für  den Code.

Nach Rücksprache  mit meiner Regierung

werde ich die uv a/b Wärme Lampe alle 4 Stunden für je 1 std schalten

Und den Trashold  für  die ganztägigen Wärme Lampen einzeln schalten.

Da im Terrarium 3 Wärme Zonen sind die bei ganztägigen Betrieb eine konstante Temperatur haben.

wenn also die Temperatur in der Mitte über 40 Grad ist schaltet die ganztägige wärmelampen Mitte dann ab.
Wenn ich den Code  fertig habe Poste ich ihn mal damit ihr Profis mal einen Blick drauf werfen könnt.

//Edit:
So ... Habe Fertig. Bitte steinigen wenn was Falsch ist!! sonnst lerne ich es nie

define HeizungTerrarium_Links THRESHOLD Temp_Links:temperature WLamp_Links
attr HeizungTerrarium_Links number_format %.1f
attr HeizungTerrarium_Links state_cmd1_gt off
attr HeizungTerrarium_Links state_cmd2_lt on
attr HeizungTerrarium_Links state_format _m _dv _sc

define di_HzgTerrarium_Links DOIF ([07:00-17:00]) (set HeizungTerrarium_Links desired 30) DOELSE (set HeizungTerrarium_Links desired 20)

define HeizungTerrarium_Mitte THRESHOLD Temp_Mitte:temperature WLamp_Mitte
attr HeizungTerrarium_Mitte number_format %.1f
attr HeizungTerrarium_Mitte state_cmd1_gt off
attr HeizungTerrarium_Mitte state_cmd2_lt on
attr HeizungTerrarium_Mitte state_format _m _dv _sc

define di_HzgTerrarium_Mitte DOIF ([07:00-17:00]) (set HeizungTerrarium_Mitte desired 35) DOELSE (set HeizungTerrarium_Mitte desired 30)

define HeizungTerrarium_Rechts THRESHOLD Temp_Rechts:temperature WLamp_Rechts
attr HeizungTerrarium_Rechts number_format %.1f
attr HeizungTerrarium_Rechts state_cmd1_gt off
attr HeizungTerrarium_Rechts state_cmd2_lt on
attr HeizungTerrarium_Rechts state_format _m _dv _sc

define di_HzgTerrarium_Rechts DOIF ([07:00-17:00]) (set HeizungTerrarium_Rechts desired 30) DOELSE (set HeizungTerrarium_Rechts desired 30)

define di_HeizLamp1 DOIF ([8:00])(set HeizLamp1 on-for-timer 2700) DOELSE (set HeizLamp1 off)
attr di_HeizLamp1 cmdpause 11700
attr di_HeizLamp1 repeatsame 3
## Hier schaltet die UV A/B Wärme Lampe um 8 Uhr an für 45 Minuten und nach 3 Std 15 min nochmal das ganze dann insgesamt 3 mal


normal wäre das ja dann 8 Uhr 12 Uhr und 16 Uhr richtig?

Damian

define di_HeizLamp1 DOIF ([8:00])(set HeizLamp1 on-for-timer 2700) DOELSE (set HeizLamp1 off)
attr di_HeizLamp1 cmdpause 11700
attr di_HeizLamp1 repeatsame 3
## Hier schaltet die UV A/B Wärme Lampe um 8 Uhr an für 45 Minuten und nach 3 Std 15 min nochmal das ganze dann insgesamt 3 mal


Das wird nicht funktionieren. Denn das Modul wird nur ein mal um 8:00 Uhr getriggert und sonst nicht.

Die Lösung lässt sich aber mit dem neuen Attribut repeatcmd realisieren : siehe http://fhem.de/commandref_DE.html#DOIF_repeatcmd

on-for-timer schaltet doch auch wieder aus, daher ist DOELSE nicht nur sinnfrei sondern auch wirkungslos, weil  es keinen Trigger gibt, der die Bedingung unwahr werden lässt.

Unter dem obigen Link findest du aber ein Beispiel, welches dein Problem löst ;)

Gruß

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gNomeX

#11
Ahhhh schau an. Danke  ;D

define di_HeizLamp1 DOIF ([8:00])(set HeizLamp1 on-for-timer 2700) DOELSE (set HeizLamp1 off)
attr di_HeizLamp1 repeatcmd 11700
attr di_HeizLamp1 repeatsame 3
## Hier schaltet die UV A/B Wärme Lampe um 8 Uhr an für 45 Minuten und nach 3 Std 15 min nochmal das ganze dann insgesamt 3 mal

So ist es dann richtig?


Hatte mich an
Zitat
Anwendungsbeispiel: Die Meldung soll maximal dreimal erfolgen mit einer Pause von mindestens 10 Minuten

define di_washer DOIF ([Watt]<2) (set pushmeldung "washer finished")
attr di_washer repeatsame 3
attr di_washer cmdpause 600 

orientiert.


was mir aber auch aufgefallen ist in meinen Codes

define di_HzgTerrarium_Mitte DOIF ([07:00-17:00]) (set HeizungTerrarium_Mitte desired 35) DOELSE (set HeizungTerrarium_Mitte desired 30)

läßt das Licht weiter brennen auch nach 17 Uhr. Da in der Nacht eine Temperatur von 22 Grad sind

Ich habe das auf

define di_HzgTerrarium_Mitte DOIF ([07:00-17:00]) (set HeizungTerrarium_Mitte desired 35) DOELSE (set HeizungTerrarium_Mitte desired 20)

Geändert

Aber was ich noch nicht so verstehe

was passiert wenn ich die Temperatur 35 Grad erreicht habe... Dann geht die Lampe ja wieder aus..

bis sie unter 20 Grad gefallen ist?

Damian

define di_HeizLamp1 DOIF ([8:00])(set HeizLamp1 on-for-timer 2700) DOELSE (set HeizLamp1 off)
attr di_HeizLamp1 repeatcmd 11700
attr di_HeizLamp1 repeatsame 3
## Hier schaltet die UV A/B Wärme Lampe um 8 Uhr an für 45 Minuten und nach 3 Std 15 min nochmal das ganze dann insgesamt 3 mal


Wie schon geschrieben, macht in dieser Konstellation DOELSE keinen Sinn daher:


define di_HeizLamp1 DOIF ([08:00])(set HeizLamp1 on-for-timer 2700)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gNomeX

Zitat von: Damian am 18 Dezember 2015, 19:55:14
define di_HeizLamp1 DOIF ([8:00])(set HeizLamp1 on-for-timer 2700) DOELSE (set HeizLamp1 off)
attr di_HeizLamp1 repeatcmd 11700
attr di_HeizLamp1 repeatsame 3
## Hier schaltet die UV A/B Wärme Lampe um 8 Uhr an für 45 Minuten und nach 3 Std 15 min nochmal das ganze dann insgesamt 3 mal


Wie schon geschrieben, macht in dieser Konstellation DOELSE keinen Sinn daher:


define di_HeizLamp1 DOIF ([08:00])(set HeizLamp1 on-for-timer 2700)


sorry das böse copy paste sollte natürlich ohne DOELSE sein .. hatte das schon beim ersten mal verstanden aber nicht geädert ^^

Damian

Zitat von: gNomeX am 18 Dezember 2015, 20:24:18
sorry das böse copy paste sollte natürlich ohne DOELSE sein .. hatte das schon beim ersten mal verstanden aber nicht geädert ^^

Ach ja, es muss noch:

attr di_HeizLamp1 do always

damit jeden Tag um 8:00 Uhr die Sache funktioniert.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF