Hallo,
um einen Wecker zu nutzen, möchte ich mir die Weckzeit mit einem Slider o.Ä. einstellen, also nicht in der fhem.cfg die Werte per Hand eintragen. Dabei bin ich auf viel Material gestoßen, aber es funktioniert bei mir bislang nichts.
Bisher ist die Zeit so definiert und lässt sich einstellen:
define Weckzeit dummy
attr Weckzeit group Wecker
attr Weckzeit setList state:time
attr Weckzeit webCmd state
Daraufhin möchte ich dann eine Funktion ausführen lassen, falls der Wecker eingeschaltet ist. Das funktioniert mit fest eingestellten Werten alles gut, aber nicht mit der Variablen Weckzeit.
Wie muss ich die hier eintragen?
define Weckstart at ???
Alle bisherigen Versuche waren falsch :( Kann mir bitte jemand helfen?
DOIF kann Zeiten aus Readings Auswerten.
Hm, erfolgreich lief der Versuch über DOIF nicht wirklich, nur dass es keinen angezeigten Fehler verursacht. Aber passieren tut nichts. Weder vom DOIF noch vom DOELSE. Das hängt jetzt aber vlt. auch eher an den Formaten der Variable Weckzeit und Timenow. Da weiß ich aber nicht, wie ich die auf ein Format bringen kann oder sonst irgendwie sinnvoll vergleichen kann... So habe ich das momentan umgesetzt:
define Weckstart DOIF ([Weckzeit] eq Timenow()) ({fhem("set MyTTS tts Guten Tag")}) DOELSE ({system('sudo python2 /opt/fhem/log/SerielleBefehle/Nachtan.py&');;})
Über at geht das nicht einfacher?
Lies dir bitte noch mal die deutsche Commandref zu DOIF durch.
Okay, habe es jetzt angepasst aber mit der Variablen komm ich noch nicht so richtig klar. Sollte nicht [Weckzeit] vom Format reichen? Aber auch mit Weckzeit.getHours():Weckzeit.getMinutes() gehts nicht.
So siehts momentan aus:
define Weckstart DOIF ([Weckzeit] and [Value("Wecken") eq "an"]) ({fhem("set MyTTS tts Hier sind Tempw Grad Guten Tag")}) DOELSE ({system('sudo python2 /opt/fhem/log/SerielleBefehle/Nachtan.py&');;})
attr Weckstart do always
Merkwürdig ist auch, dass auch das DOELSE nicht ausgeführt wird... Wo könnte das Problem liegen? :-\
EDIT:
Auch in der einfachsten Grundversion läuft es nicht bei mir:
define Weckstart DOIF ([19:55]) ( {fhem("set MyTTS tts Hier sind Tempw Grad Guten Tag")}) DOELSE ({system('sudo python2 /opt/fhem/log/SerielleBefehle/Nachtan.py&');;})
Die Befehle {fhem("set MyTTS tts Hier sind Tempw Grad Guten Tag")} funktionieren ansonsten aber, es scheint hier also weiterhin an der Funktion zu liegen.
Zitat von: ChHerrm am 24 August 2015, 19:04:35
Sollte nicht [Weckzeit] vom Format reichen?
Nein, Zeiten stehen in eckigen Klammern, Readings auch, also müssen bei Zeiten aus Readings doppelt eckige Klammern stehen.
Zitat von: ChHerrm am 24 August 2015, 19:04:35
[Value("Wecken") eq "an"])
Wie bist du auf diesen Ausdruck gekommen?
Zitat von: ChHerrm am 24 August 2015, 19:04:35
Merkwürdig ist auch, dass auch das DOELSE nicht ausgeführt wird...
Wann sollte es denn deiner Meinung nach ausgeführt werden? Das DOIF tut ja nur etwas bei bestimmten Ereignissen.
1. Ja stimmt, die doppelten eckigen Klammern sind mir aufgefallen und die hatte ich auch schon geändert. Habs nur vergessen gehabt hier zu vermerken. Aber auch mit doppelten klappt das nicht.
Die Befehle werden aber weiterhin nicht abgearbeitet. Hier ist wohl erstmal der Fehler zu suchen, danach wohl erst im Zusammenhang mit der Variablen. Oder?
2. Das [Value("Wecken") eq "an"] hat mit dem Problem erst einmal nichts zu tun. Das soll später überprüfen, ob der Wecker an oder aus gestellt ist. Zum besseren Verständnis befindet sich ein Bild davon im Anhang.
Momentan habe ich das jetzt folgendes gebaut mit neuen und unbenutzten Variablen, mit keiner Abhängigkeit von anderen Dingen:
define Weckbeginn DOIF ([23:29]) ( {system ('sudo mplayer /media/WecktonDschungel.mp3');;}) DOELSE ([23:29]) ({system('sudo python2 /opt/fhem/log/SerielleBefehle/Nachtan.py&');;})
Erstmal müsste doch das so laufen oder? Das ist ja nun sogar unabhängig von jeder Variable etc. Bei DOELSE habe ich einfach auch mal die Bedingung mit reingeschrieben. Die system-Befehle einzeln funktionieren. Im Anhang außerdem die genaueren Informationen zu der Variablen. Da scheint er ja etwas registriert zu haben um 23:29 oder?
Danke jedenfalls schon mal für deine Geduld! :)
Zitat von: ChHerrm am 24 August 2015, 23:31:25
2. Das [Value("Wecken") eq "an"] hat mit dem Problem erst einmal nichts zu tun.
Die Abfrage ist aber falsch formuliert es gilt [Reading] eq "gleich"
DOELSE hat keine Bedingung. Dein Beispiel tut nur etwas um 23:29 Uhr und sonst wartet es, es wird nicht noch einmal angestoßen und wenn, dann wäre DOELSE sofern es ein DOELSEIF sein sollte die selbe Bedingung.
DOELSE würde greifen, wenn zur bestimmten Uhrzeit Wecken auf aus steht.
Okay, aber auch sonst geht es ja nicht. Wo wäre denn noch der Fehler zu suchen? Hier ist doch eigentlich gar nichts weiter dabei was falsch sein könnte oder?
define Weckbeginn DOIF ([09:39]) ( {system ('sudo mplayer /media/WecktonDschungel.mp3');;}) DOELSE ({system('sudo python2 /opt/fhem/log/SerielleBefehle/Nachtan.py&');;})
EDIT:
Okay er braucht noch ein do always um das wahrzunehmen, meint dann aber: Unknown command {system, try help. Unknown command }
So muss es doch aber angenommen werden, mit geschweiften Klammern oder?
Problem gelöst, es geht scheinbar nicht mit einem Befehl für {system}, sondern nur mit einem set XYZ on. Also am besten einen dummy einführen und dann mit einem notify den Befehl {system} ausführen.
Danke für die Hilfe!
Geht es beim at vielleicht mit modifyTimeSpec: http://fhem.de/commandref_DE.html#at
set myat modifyTimeSpec {(Value("Weckzeit"))}