neue Variable für MORGEN Wochenende/kein Wochenende

Begonnen von MichaelO, 23 Februar 2017, 18:15:15

Vorheriges Thema - Nächstes Thema

MichaelO

Moin,

ich verwende den ein oder anderen Ausdruck, der abhängig davon, ob am Folgetag Wochenende oder ein Feiertag ist, Dinge anders tut. Z.B. geht Freitags und vor Feiertagen die Flurlampe erst später aus, weil man ja länger aufbleiben kann, wobei Sonntags und an Feiertagen vor Wochentagen die Lampe "normal" ausgeht, da man ja am nächsten Tag raus muss und früher ins Bett springt. Bisher löse ich das z.B. in einem DOIF über

[?BRB_Feiertag:tomorrow] ne "none"

wobei ich bei allen Ausdrücken, die auf den heutigen Tag testen, die folgende Syntax verwenden kann:

[<time>|012345678] 0-8 entspricht: 0-Sonntag, 1-Montag, ... bis 6-Samstag sowie 7 für Wochenende und Feiertage (entspricht $we) und 8 für Arbeitstage (entspricht !$we).

Jetzt wäre es doch sehr praktisch, wenn es z.B. eine Variable gäbe, die Anzeigt, ob MORGEN Wochenende/kein Wochenende bzw. Feiertag/kein Feiertag ist. So etwas wie $twe. dadurch könnte man den ein oder anderen Ausdruck ggf. vereinfachen. DOIF könnte dann neben 0-8 bei Zeitausdrücken auch noch 9 und A akzeptieren, wobei 9 = $twe und A = !$twe sein könnte.

Oder gibt es das schon und ich habe übersehen? Oder ist der Ansatz vielleicht nicht praktikabel?

Gruß
Michael

betateilchen

ob morgen Feiertag ist, findest Du heraus, wenn Du in Deinem FHEM einen Feiertagskalender ("help holiday") hinterlegst. Dann gibt es ein Reading für "tomorrow"

Und Wochenende ist morgen meistens dann, wenn heute Freitag ist.

Sowas läßt sich mit (geschätzt) drei bis fünf Zeilen perl Code in der 99_myUtils.pm bewerkstelligen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

KernSani

Ich hatte mal die Überlegung (aber noch nicht umgesetzt) das über einen Dummy zu lösen, der täglich neu befüllt wird mit 01234, wenn morgen Feiertag, dann wird die entsprechend Zahl weggelassen (also wenn Mittwoch Feiertag wird der Dummy Dienstags kurz nach Mitternacht mit 0134 befüllt).
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

MichaelO

#3
Ja und nein... wie Du am Beispiel meines DOIF sehen kannst,  verwende ich da tomorrow. Ich kenne dieses Reading, das ist also kein Problem.

Wenn der Feiertag (also $we) aber auf einem Wochentag liegt, dann ist $we morgen eben auch dann, wenn heute nicht Freitag ist.

Ich (persönlich) fände es also einfacher, wenn man mit einer globalen Variable  in Abhängigkeit des heutigen Tages und des Feiertagskalenders angezeigt bekommt, ob MORGEN ein Wochenende/Feiertag ist oder nicht. Natürlich kann man das individuell lösen, aber dann würde man fhem nicht vorwärts bringen.

War aber nur ein Gedanke.

betateilchen

Zitat von: MichaelO am 23 Februar 2017, 18:28:04
Wenn der Feiertag (also $we) aber auf einem Wochentag liegt, dann ist $we morgen eben auch dann, wenn heute nicht Freitag ist.

Das Verhalten kannst Du aber ändern. Dafür gibt es ein Attribut.

Zitat von: MichaelO am 23 Februar 2017, 18:28:04
War aber nur ein Gedanke.

typisches DOIF Denken... *grusel*
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Phill

Ist zwar schon etwas älter, aber ich kann das nicht so stehen lassen.

Zitat von: betateilchen am 23 Februar 2017, 20:07:21
Das Verhalten kannst Du aber ändern. Dafür gibt es ein Attribut.

Da es die Variable $we für Morgen gar nicht gibt kann es dafür auch kein Attribut geben welches das Verhalten ändert. Ist also falsch. Dein nicht genanntes Attribut welches vermutlich holiday2we von global ist, bezieht sich nur auf $we also heute.

Und zur Vollständigkeit, mal etwas produktives:
Ob man extra ein $twe zur Verfügung stellen muss glaube ich nicht, weil wo hört man da auf? Gestern, Übermorgen oder wie mein Sohn gerne sagt Übergestern...  ;D

Wer das hier seiner 99_myUtils.pm hinzufügt hat eine Funktion die zumindest morgen wiederspiegelt.

sub IsWeTomorrow(;$) {
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime();
return 1 if ++$wday >= 6;
my $wedev = AttrVal("global", "holiday2we", undef) || $_[0];
IsDevice($wedev) && (ReadingsVal($wedev, "tomorrow",undef) ne "none");
}


In Perlcode genau wie DOIF's kann dann &IsWeTomorrow wie "$we für morgen" verwenden.
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html