Mehrere Befehle hintereinander absetzen

Begonnen von OliWee, 11 April 2016, 17:21:43

Vorheriges Thema - Nächstes Thema

OliWee

Hi!

Ich fange gerade mit FHEM an und möchte mal zum Test einen kleinen "Wecker" basteln.
Folgendes Szenario:
Am Abend schau ich gemütlich einen Film an, mit viel Action, daher wird die Lautstärke aufgedreht. Wenn ich ins Bett geh, wird der Onkyo-Receiver per Fernbedienung ausgeschaltet. Er hat also den Status OFF, die Lautstärke ist auf 40 gestellt und die Source steht auf TV.
Wenn ich nun am nächsten Morgen ins Wohnzimmer komme, soll der Radio laufen, mit einer moderaten Lautstärke, damit mir meine eben frisch gemachte Frisur nicht vom Bass wieder weggeföhnt wird.
Das Problem:
Wenn ich einfach eine Befehlskette
set receiver on; set receiver volume 25; set receiver source FM
an einen Timer dranhänge, dann werden die Befehle wohl zu schnell hintereinander ausgeführt. Der Receiver kann wohl die Lautstärke und die Quelle erst ändern, wenn er eingeschaltet ist.
Was ich also jetzt benötige ist sowas:

Schalte den Receiver an, warte,bis er den Status "On" hat, und dann stell die Lautstärke auf 25 und die Quelle auf FM.

Wie ist sowas zu handhaben?
Für die Profis unter Euch wahrscheinlich ein Klacks, aber ich bin vermutlich zu doof dazu...

Gruß
Oli

Ellert

Das geht mit DOIF, siehe http://fhem.de/commandref_DE.html#DOIF und hier https://forum.fhem.de/index.php/topic,45373.0.html

define deinDOIF DOIF ([DeinTrigger]) (set receiver on) (set receiver volume 25) (set receiver source FM)

und das Attribut
attr deinDOIF wait 0,10,10


marvin78

Das einfachste wäre, die benötigte Zeit jeweils zu messen. Dann ist dein Stichwort für die commandref sleep.

Wenn du jeweils auf die Events reagieren möchtest könntest du temporäre notifies oder demnächst das neue Modul von justme1968 für eine stateMachine verwenden. Mit DOIF geht es auch, siehe Ellerts Beitrag.

OliWee

Wow, geht das schnell hier  :D

Das mit dem DOIF heißt aber wohl, dass jedesmal, wenn der Receiver angeschaltet wird, Lautstärke und Radio gesetzt werden, oder?
Ich möchte ja nur, dass das morgens passiert, und nicht jedesmal, wenn ich vor den Fernseher sitze. Oder verstehe ich da was falsch?

Die Lösung mit sleep ist sicher nicht so elegant, funktioniert aber prima. Vielen Dank, Euch zwei :)

Doggiebert

nein, als Trigger kannst Du dem DOIF ja auch eine Zeit mitgeben, schau mal in die Commandref dazu.
SW: FHEM 5.5, Raspian, XBMC, Testinstallation auf Win7
HW: Raspi B, 32GB SD, enocean Pi, RFXTRX433E, BSC - MwC-32, Onkyo TX-NR709, Samsung UE55F8090, Jung LS-Eno, permundo SmartPlug, KDG-FB 6490cable (ohne FHEM)

Ellert

ZitatDas mit dem DOIF heißt aber wohl, dass jedesmal, wenn der Receiver angeschaltet wird, Lautstärke und Radio gesetzt werden, oder?

[DeinTrigger] kann auch ein Zeitpunkt/Zeitspanne sein, schau mal in die Commandref.

define deinDOIF DOIF ([05:00-08:00] and [BewegungKueche:"motion"]) (set receiver on) (set receiver volume 25) (set receiver source FM)
DOELSE

OliWee

Aaasoooo :D

Ich glaub wir haben aneinander vorbeigeredet...
Ich brauch eine Verzögerung zwischen "set receiver on" und den anderen beiden Befehlen. Ich kann volume und input erst verändern, wenn der Receiver bereits an ist.

Der DOIF macht mir dann quasi den Trigger für diese Befehlskette.
Also dann sieht das ganze jetzt so aus:

define morgenRadio DOIF ([05:00-08:00] and [BewegungKueche:"motion"]) (set receiver on) (sleep 1) (set receiver volume 25) (set receiver source FM)
DOELSE


korrekt?

Doggiebert

SW: FHEM 5.5, Raspian, XBMC, Testinstallation auf Win7
HW: Raspi B, 32GB SD, enocean Pi, RFXTRX433E, BSC - MwC-32, Onkyo TX-NR709, Samsung UE55F8090, Jung LS-Eno, permundo SmartPlug, KDG-FB 6490cable (ohne FHEM)

CoolTux

Bitte informiere Dich darüber wie man Befehle von ein änder getrennt in DOIF schreibt.
Was Du dan brauchst ist wait 0,30,3
Der erste Befehl sofort der zweite 30 Sekunden verzögert der dritte 3 Sekunden verzögert.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

OliWee

Zitat von: CoolTux am 11 April 2016, 17:57:51
Bitte informiere Dich darüber wie man Befehle von ein änder getrennt in DOIF schreibt.
Was Du dan brauchst ist wait 0,30,3
Der erste Befehl sofort der zweite 30 Sekunden verzögert der dritte 3 Sekunden verzögert.
Ok,ich denke, jetzt hab ichs kapiert...

Sorry, CoolTux, aber aller Anfang ist schwer. Und ich hab hier soviel zu lesen, dass ich das eine oder andere übersehe...

Danke nochmal :)

CoolTux

Hast Du gefunden was ich meine oder bleibt da noch eine Frage von Dir? Dann einfach fragen  ;)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

OliWee

Nein passt alles.

Funktioniert prächtig :)