[gelöst] $we und $hour in DOIF

Begonnen von mthome, 08 April 2019, 07:48:59

Vorheriges Thema - Nächstes Thema

mthome

Hallo zusammen,

ich habe ein Problem an meiner Fenster/Thermostatsteuerung. Ich möchte, dass wenn ein Fenster aufgeht, das Heizthermostat zu geht.

Das Funktioniert auch gut. Jetz möchte ich aber, dass wenn das Fenster wieder zugemacht wird und eine bestimmte Uhrzeit ist, die Heizung wieder angeschaltet wird. Dazu habe ich ein DOIF erstellt:

([sensor.fenster.sz.Schlafzimmerfenster:basicSet] eq "255") (set heizung.sz tmEnergySaveHeating)
DOELSEIF ([sensor.fenster.sz.Schlafzimmerfenster:basicSet] eq "0")
{
if (($we==1 and $hour => 4 and $hour <9) or ($hour >= 15 and $hour <22) or ($we==0 and $hour > 3 and $hour <6))
{fhem("set heizung.sz tmHeating");
Log 1, "Heizung SZ nochmals an $we $hour";
}
}


Leider haben wohl die $we und $hour keine Werte - siehe Log:

2019.04.07 22:08:20 1: PERL WARNING: Useless use of private variable in void context at (eval 273952) line 1.
2019.04.07 22:08:20 3: eval: { if (($we==1 and $hour => 4 and $hour <9) or ($hour >= 15 and $hour <22) or ($we==0 and $hour > 3 and $hour <6)) {fhem("set heizung.sz tmHeating"); Log 1, "Heizung SZ nochmals an $we $hour"; } }


Jetzt (endlich) meine Frage: Ich dachte $hour und $we sind globale Variablen. Ist dem nicht so? Muss ich die im Perlteil selber zuweisen?
Z.B. mit ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();

Danke,
mthome

Damian

Zitat von: mthome am 08 April 2019, 07:48:59

Jetzt (endlich) meine Frage: Ich dachte $hour und $we sind globale Variablen. Ist dem nicht so? Muss ich die im Perlteil selber zuweisen?
Z.B. mit ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();


Die Variablen sind nur in den DOIF-Bedingungen bekannt - hier herrscht die Perl-Welt, in den DOIF-Ausführungszweigen herrscht dagegen die FHEM-Welt, also keine Perl-Variablen.

Als Alternative: DOIF-Perl-Modus nutzen, hier herrscht grundsätzlich Perl-Welt, damit sind in diesem Modus die Zeitvariablen auch in if-Abfragen bekannt.

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

Otto123

Moin,

und einfach DOIF nutzen? Warum im Ausführungsteil eine Zeitabfrage die ich in der Bedingung erledigen kann?
(([05:00-09:00|7] or [16:00-22:00] or [04:00-06:00|8]) and [sensor.fenster.sz.Schlafzimmerfenster:basicSet] eq "0")


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

mthome

Hallo Otto,

manchmal ist es so naheliegend und man erkennt es trotzdem nicht  ;D. Vielen Dank - so werde ich es machen.

Vielen Dank nochmals für Eure Hilfe!

doman75

ich würde noch mit Fragezeichen vor den Zeiten arbeiten, sonst löst auch die Zeit aus.

Grüße
Swen

mthome

Zitat von: doman75 am 08 April 2019, 09:55:49
ich würde noch mit Fragezeichen vor den Zeiten arbeiten, sonst löst auch die Zeit aus.

Wie meinst Du das? Reicht die Klammer nicht aus?

Danke,
mthome

Otto123

(([?05:00-09:00|7] or [?16:00-22:00] or [?04:00-06:00|8]) and [sensor.fenster.sz.Schlafzimmerfenster:basicSet] eq "0")

Dann würde die Zeit nicht triggern sondern nur der Fensterkontakt. Das ist so wie Dein Ansatz war.
Wenn Du willst das früh um 5 der Zustand des Fensterkontaktes abgefragt wird obwohl der sich gerade nicht ändert, dann mach es ohne Fragezeichen.

Steht natürlich in der Doku. 8)

Das Verhalten hängt auch davon ab ob dein Fensterkontakt wiederholende Events wirft obwohl sich der Zustand nicht ändert. Stichwort  event-on-change-reading.

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

mthome

Danke nochmals.....habe auch gerade eifrig gelesen und in sind ja wirklich viele viele Beispiele in der Doku  :-[

Schönen Abend zusammen!