Guten Morgen Zusammen,
so, ich bräuchte mal euren Rat, da ich auf dem Schlauch stehe.
Mein NAS verbraucht im StandBy mehr Strom als der gute alte WiFi-Obi Socket, darum soll bei nicht Nutzung des NAS, dieses vom Stromnetz genommen werden.
Der NAS lässt sich über WOL starten und stoppen.
> Schön wäre es, wenn man 4 State's hätte, ON/OFF/Start/Shutdown.
Meine Idee wäre jetzt, ein Dummy, welches sich ON/OFF schalten lässt, dann ein DOIF, bei dem bei ON die Steckdose auf ON geschaltet wird, nach 15s via WOL den NAS startet.
Bei OFF dann via WOL den Shutdown durchführt.
([Dummy.IT.NAS.Power:"^ON$"])
(set IT.NAS.Steckdose ON; sleep 15; set WOL.NAS.FS ON)
DOELSEIF ([Dummy.IT.NAS.Power:"^OFF$"])
(set WOL.NAS.FS OFF)
Nun habe ich aber das Problem, die Steckdose soll erst nach x Minuten abgeschaltet werden, da der NAS früher vom WOL als "isRunning: false" erkannt wird, aber noch im Shutdown ist.
Hier hänge ich etwas und weiß nicht so recht weiter, hoffe mir kann jemand helfen.
Danke und beste Grüße
Gear
Commanref unter Attribute findest du die Lösung.
Es gibt ein Attr mit dem du die Verzögerungen festlegst.
Hallo Gear,
in DOIF werden anders als in FHEM sonst die Befehle mit Komma und nicht mit Semikolon getrennt.
Ich würde aber die Befehle einzeln klammern und alles mit wait machen.
(set IT.NAS.Steckdose ON)(set WOL.NAS.FS ON)
attr ... wait 0,15:x minuten
Gruß Otto
Bin da ganz bei Otto: Zeitverzögerungen im DOIF einfach per zweitem Ausführungsteil und angepassem wait. Mache ich nur so.
Was noch fehlt:
Wenn ich das richtig verstanden habe, wollte der TE zum Abschalten eigentlich auf [WOL:isRunning] eq "false" reagieren (vielleicht wegen schwankender Zeiten zum Herunterfahren). Dafür würde ich einen dritten Zweig definieren - auch hier bietet sich die Verzögerung mit "wait" einfach an. Zur ermittelten Ausschaltzeit reichlich dazugeben - auf zwei Minuten mehr Stromverbrauch kommt es da echt nicht an.
seh ich auch so.
und wen alles läuft wie gedacht würde ich den dummy wegrationalisieren. Ich denke die Funktion bekommt man in das DOIF.
Gruß Otto
Ok, habe das mal so umgebaut, dass ich beim WOL Dev nicht ON:OFF, sondern Start:Shutdown nutze.
Mein DOIF sieht nun so aus:
([WOL.NAS.FS:"^Start$"])
(set IT.NAS.Steckdose ON)
(set WOL.NAS.FS ON)
DOELSEIF ([WOL.NAS.FS:"^Shutdown$"])
(set WOL.NAS.FS OFF)
Das wait sieht so aus:
0,15:0
Nun, ich könnte jetzt einfach einen weitere Befehl für die 2. Sequenz einbauen, welcher die Steckdose abschaltet und gut ist.
Jedoch würde ich gerne eine Bedingung für das Abschalten der Spannungsversorgung mit einbauen, es soll geprüft werden, ob der NAS noch via WOL als Running gekennzeichnet ist.
> Wenn das der Fall ist, dann würde ich einfach erneut die 2. Sequenz starten.
Kann ich in der 2. Sequenz eine Abfrage machen, welche via IF/ELSE den Zustand des WOL "isRunning: false" prüft?
einfach noch hinten an.
DOELSEIF ([WOL.NAS.FS:state] eq "off") (set IT.NAS.Steckdose OFF)
wait 0,15:0:300
Die ersten beiden Zweige werden durch Event getriggert der hier durch den state des WOL Gerätes.
Gruß Otto
An und für sich, ok.
Der Start des NAS dauert mehr als 1 Min.
Ich sehe hier zwei Probleme:
> Die 15s wait für das Starten des NAS werden durch deinen CMD unterbrochen, wenn WOL das DOIF triggert, somit startet der NAS nicht.
> Wenn der Trigger kommt und der NAS noch am Starten ist, dann wird das DOIF nach 300s die Power abdrehen, auch wenn der NAS läuft.
>> Also wenn ich das ganze richtig verstehe, da beide Fälle gerade bei mir passiert sind. :o ;D
Ja da wirst Du Recht haben :-[
Ich habe mich von deinem Wunsch leiten lassen, aber nimm doch auch einfach den Event?
DOELSEIF ([WOL.NAS.FS:"^off$"]) (set IT.NAS.Steckdose OFF)
Der dürfte doch erst kommen wenn die NAS wirklich runtergefahren ist (also WOL der Meinung ist)
Teste bitte mit einem Dummy ;) oder einen andere Steckdose
Das mim Dummy ist eine gute Idee! ^^
Das Problem ist, das "state" im intervall aktualisiert wird, also müsste ich nach dem von dir erwähnten Code ein weiteres Einbauen, welches auf true reagiert, um den Timer zu unterbrechen.
DOELSEIF ([WOL.NAS.FS:"^on$"]) ()
Edit:
Bringt auch nichts gegen den 15s Timer... xD
event-on-change-reading .*
wird das mit den Events aber richten.
Du kannst auch auf isRunning triggern
([WOL.NAS.FS:"^isRunning:.false$"])
Kannst Dir das ja im Eventmonitor anzeigen lassen und ein "Gerüst" DOIF erzeugen
Gruß Otto
Ohw... :-[
Ich hab schon viel zu lange in FHEM nichts mehr gemacht, da stand ich echt voll auf dem Schlauch.
Danke für die Hilfe, jetzt funktioniert es.
Beste Grüße und einen schönen Sonntag
Gear