Hallo,
für die optimale Ausnutzung meines Doppelstromtarifes für meine Luft-Wasser-Wärmepumpe müßte ich wissen, ob am nächsten Tag Feiertag ist, weil dann der Strom auch tagsüber billiger ist.
Fürs Wochenende kann ich ja $wday==5 benutzen. Mit dem holiday Modul kann ich aber leider nur bestimmen, ob "heute" ein Feiertag ist.
Gibt es schon eine entsprechende Funktion oder hat jemand eine Idee, wie man das anderweitig lösen könnte?
Gruß
Tupol
http://fhem.de/commandref.html#holiday (http://fhem.de/commandref.html#holiday)
get <name> tomorrow
Zitat von: rudolfkoenig am 19 April 2014, 08:51:37
http://fhem.de/commandref.html#holiday (http://fhem.de/commandref.html#holiday)
get <name> tomorrow
Wäre schön als Reading im holiday-modul zu haben. Dann könnte man es elegant bei if/IF abfragen.
Gruß
Damian
Zitat von: Damian am 19 April 2014, 10:01:14
Wäre schön als Reading im holiday-modul zu haben. Dann könnte man es elegant bei if/IF abfragen.
Es ist doch eigentlich völlig egal, ob Du ein Reading auslesen und auswerten musst, oder das Ergebnis eines "get bla tomorrow".
Zitat von: betateilchen am 19 April 2014, 11:09:50
Es ist doch eigentlich völlig egal, ob Du ein Reading auslesen und auswerten musst, oder das Ergebnis eines "get bla tomorrow".
statt:
define HeizungKinoAn at *06:00 IF (fhem("get nrw tomorrow") ne "none") (set KinoHeizung on)
define HeizungKinoAn at *06:00 IF ([nrw:tomorrow] ne "none") (set KinoHeizung on)
das verstehe ich unter "elegant", weil kürzer.
Gruß
Damian
Kürzer ja, aber haarsträubend zu lesen.
Wo viele User ohnehin schon Riesenprobleme damit haben, runde und geschweifte Klammern auseinanderzuhalten und zu verstehen, seit neuestem auch noch die eckigen Klammern (die für mich beim Lesen in Bezug auf perl gedanklich immer etwas mit einem array zu tun haben!) einzusetzen, sehe ich nach wie vor einen völligen Irrweg (genau wie bei Laminatfußböden und Landhausstil)
Ausserdem kannst Du Dir das Reading tomorrow in Deiner holiday Instanz völlig problemlos selbst hinzufügen, indem Du einfach per nächtlichem at ein setreading() ausführst.
Zitat von: betateilchen am 19 April 2014, 11:33:29
Kürzer ja, aber haarsträubend zu lesen.
Wo viele User ohnehin schon Riesenprobleme damit haben, runde und geschweifte Klammern auseinanderzuhalten und zu verstehen
Warum wohl, weil der Ausgangspunkt (notify, at usw.) FHEM-Welt ist, und nicht Perl und da helfen auch keine schlauen Perlbücher. Und auch die erste geschweifte Klammer (z. B. bei notify oder at) ist nicht Perl, sondern FHEM und das verstehen viele schon nicht. Wollte man komplett in Perl bleiben, dürfe es keinerlei FHEM-Befehle geben, sondern nur Perl-Funktionsaufrufe.
Da es mittlerweile aber recht viele FHEM-Befehle gibt, wirst du das Rad nicht zurück drehen können.
Gruß
Damian
es geht nicht darum, das Rad zurückzudrehen.
Aber Du wirst mir nicht allen Ernstes einreden wollen, dass mit IF irgendwas, das vorher schon mit verschachtelten if() komplex war, durch IF in irgendeiner Weise einfacher lesbar würde.
Ich vertrete die Meinung: Alles was über einen simplen fhem Befehl hinausgehört, gehört nicht in ein notify oder at, sondern in eine Funktion in die 99_myUtils. Da sind wir dann bei dem von Dir beschriebenen "Aufruf von perl Funktionen" denn an dieser Stelle sind wir dann bei reinem perl - und da helfen Perl-Bücher sehr wohl.
Die Ursache für viele Probleme sehe ich einfach in der historischen Entwicklung von fhem. Da hat sich die Unart eingebürgert, auch hochkomplexe Perl-Teile in den Ausführungsteil von notify oder at einzubauen, was zu den abstrusesten Sachen führt (als einfaches Beispiel sei hier die "fhem-Alarmanlage" genannt, wo das Chaos auf die Spitze getrieben wird)
Und diese historischen kruden "Lösungswege" werden einfach von vielen "fhem-Halbwissenden" an "fhem-Einsteiger" weitervererbt, einfach weil man es nicht besser/anders weiß/kennt.
Bei mir gibt es in notify und at nur noch Funktionsaufrufe. Eine 99_myUtils läßt sich einfach viel übersichtlicher und leichter handhaben und bearbeiten. Und in der 99_myUtils braucht niemand mehr ein IF und schon gar keinen fhem-Befehl (!) mit eckigen (!) Klammern.
Ich gebe gerne zu: Der Zusammenhang zwischen perl, fhem und all den daraus resultierenden Problemen (doppelte ;; etc.) hat sich auch mir lange nicht vollständig erschlossen und das ist aus der bestehenden fhem-Doku auch nicht schlüssig erlernbar. Aber inzwischen habe ich mich damit sehr intensiv auseinandergesetzt und komme ganz ohne solche für Anfänger nicht durchschaubaren Sonderlocken aus. Und dieses Wissen und die Arbeitsweise mit der 99_myUtils gebe ich hier im Forum auch gerne weiter.
Ich denke nicht, dass es wirklich zielführend ist, noch mehr Verwirrung wie z.B. durch noch mehr Klammerebenen zu stiften. Deshalb bleibe ich auch bei meiner ganz persönlichen Meinung: den IF Befehl hätte es wirklich nicht gebraucht. Das ist wie vor 30 Jahren mit den Zeilennummern in BASIC: Eigentlich die sinnloseste Erfindung ever, denn sie hält die Anwender davon ab, wirklich strukturiert nachzudenken, bevor man anfängt. Über die daraus resultierenden Spaghetticodes mag ich heute gar nicht mehr nachdenken :P
Die Fragestellung hier aus dem Thread lässt sich auch über eine eigene Funktion in der 99_myUtils auf einfachste Weise lösen:
sub morgenIstFeiertag {
return (CommandGet(undef, 'NRW tomorrow') ne 'none') ? 1 : 0;
}
Und in der at-Definition:
define HeizungKinoAn at *06:00 {fhem ("set KinoHeizung on") if morgenIstFeiertag; }
Noch kürzer als mit Deinem IF und die definierte Funktion "morgenIstFeiertag" läßt sich auch noch an anderen Stellen wiederverwenden.
Zitat von: betateilchen am 19 April 2014, 12:15:29
Die Fragestellung hier aus dem Thread lässt sich auch über eine eigene Funktion in der 99_myUtils auf einfachste Weise lösen:
sub morgenIstFeiertag {
return (CommandGet(undef, 'NRW tomorrow') ne 'none') ? 1 : 0;
}
Und in der at-Definition:
define HeizungKinoAn at *06:00 {fhem ("set KinoHeizung on") if morgenIstFeiertag; }
Noch kürzer als mit Deinem IF und die definierte Funktion "morgenIstFeiertag" läßt sich auch noch an anderen Stellen wiederverwenden.
Ob man auf diesen Code selbst gekommen wäre oder nicht und ob es einfacher (oder verständlicher) ist als ein Einzeiler in FHEM, soll jeder für sich selbst beurteilen.
Und ob es besser ist in einer ausgelagerten Perlroutine in jeder zweiten Zeile fhem("... aufzurufen, kann auch jeder selbst entscheiden ;)
Gruß
Damian
Zitat von: Damian am 19 April 2014, 12:37:36
Und ob es besser ist in einer ausgelagerten Perlroutine in jeder zweiten Zeile fhem("... aufzurufen
Das habe ich doch im ausgelagerten Teil überhaupt nirgends gemacht?
Mein Code sieht sogar noch viel schlimmer aus, weil ich eigentlich nur wissen will, ob heute ein Wochentag vor einem Feiertag ist.
my $WochentagVorFeiertag = ($we !=1 && (fhem("get by tomorrow") ne "none")) ;;\
;D
schlimmer gehts immer...
Seltsame Bemerkung. Was bezweckst Du damit?
Zitat von: Damian am 19 April 2014, 10:01:14
Wäre schön als Reading im holiday-modul zu haben. Dann könnte man es elegant bei if/IF abfragen.
Guckst Du hier: http://forum.fhem.de/index.php/topic,22774.0.html