anbei ein kleiner patch um aus dem PRESENCE modul ein wake on lan (oder anderes) auszulösen.
sobald das attribut wolFn gesetzt ist hat das presence device ein zusätzliches set <name> wol
kommando. wenn dieses aufgerufen wird wird der inhalt von wolFn per eval ausgeführt.
wolFn kann dann z.b. mit attr <name> wolFn fhem("set <wol_device> on")
ein on durch ein passendes WOL device ausgelöst werden oder eine eigene sub die das wol triggert. wenn man in der wolFn state abfragt kann man abhängig vom aktuellen zustand ein anderes kommando senden. z.b. on bei absent und off bei present.
die erweiterung dupliziert also nicht funktionalität die z.b. im WOL modul vorhanden ist sondern erlaubt nur das triggern aus dem PRESENCE device damit das ganze z.b. per devStateIcon auf das icon des device gelegt werden kann:attr <name> devStateIcon present:power-green absent:power-black:wol
nach dem wolFn ausgeführt wurde wird der state auf set-wol gesetzt. damit kann man das icon auf etwas anderes setzen um anzuzeigen das wol getriggert wurde. sobald die nächste presence abfrage gelaufen ist zeigt state wieder das ergeniss der presence prüfung an.
ein anderer anwendungsfall wäre über eine passende konfiguration einen rechner (htpc oder ähnliches) nach einem klick auf das on icon per ssh runter zu fahren. oder natürlich auch beides.
gruss
andre
Das heißt, man spart sich Dummys für diese Art Aufgaben. Sehr schön!
Finde ich prinzipell gut. Währe es nicht besser hier "AnalyzeCommandChain" zu verwenden statt ein perl eval?
Gruß
Markus
im prinzip ja. aber :)
ein argument dagegen wäre das man beim eval das device noch setzen könnte und dann im perl teil zur verfügung hat. also noch ein my $DEVICE = $hash->{NAME};
direkt vor das eval setzen und man könnte dann z.b. den namen des presence devices verwenden um das WOL zugehörige WOL device zu finden und die gleiche wolFn für mehr als ein device verwenden. oder über das def die ip für das ssh kommando.
gruss
andre
Ich brings ein, sobald ich Zeit dazu habe ;-)
Hi Andre,
ich habe das ganze etwas genereller eingechecked. Das ganze heißt powerOnFn und führt eben bei einem set <name> powerOn den Perl-Ausdruck aus dem Attribut powerOnFn aus.
Der Ausdruck kann Platzhalter beinhalten, die zum Zeitpunkt der Ausführung durch die entsprechenden Werte ersetzt werden. Die Details dazu stehen in der Commandref.
Ab morgen via update verfügbar.
Viele Grüße
Markus
das klingt gut.
wobei die generelle version vielleicht besser nur powerFn heissen sollte. man kann damit ja auch aus schalten :)
gruss
andre
joar gut, aber um nochmal auf das eval zu kommen. Zusammen mit den Platzhaltern könnte man ja das nun auch mit AnalyzeCommandChain machen. Die Platzhalter würden nachwievor ersetzt, nur eben das das dann als FHEM Kommando ausgeführt wird (z.B. "set Steckdose on" oder eben mit perl {powerOn(....)} ).
Ich glaube für den Enduser währe AnalyzeCommandChain einfacher.
Ich würde das gerne darauf ändern wollen. Dann könnte man direkt die bezeichnung noch anpassen. (in powerCmd oder sowas).
Gruß
Markus
ja. mit den % platzhaltern geht das. als von mir aus ok :)
gruss
andre
Habs auf AnalyzeCommandChain geändert und alles nochmal umbenannt ;-)
Viele Grüße
Markus
Was muss man denn hier in einer möglichen PERL-Funktion zurück geben, damit PRESENCE nicht powerCmd failed zurück gibt und im Reading anzeigt? Meine Befehle werden ausgeführt (NAS wird gestartet und auch ausgeschaltet), es kommt aber trotzdem immer ein failed zurück. Ich habe versucht nichts oder 1 zurück zu geben (aus der PERL Funktion).
So sieht mein PRESENCE aus:
Internals:
ADDRESS 192.168.178.31
CHANGED
DEF lan-ping 192.168.178.31 90 90
MODE lan-ping
NAME EG.bu.XX.ServerOnline.pres
NR 480
STATE present
TIMEOUT_NORMAL 90
TIMEOUT_PRESENT 90
TYPE PRESENCE
CHANGETIME:
Helper:
Dblog:
Powercmd:
Logdb:
TIME 1406115738.39832
VALUE executed
State:
Logdb:
TIME 1406116792.23981
VALUE present
Readings:
2014-07-23 13:56:08 powerCmd failed
2014-07-23 14:02:58 state present
Helper:
Attributes:
alias check Server online
devStateIcon present:rc_GREEN:off absent:rc_RED:on
event-on-change-reading state
eventMap /power on:on/ /power off:off/
powerCmd {StartStopServer("%ARGUMENT")}
room Funktionen
laut code solltest du undef zurück geben bei ok.
gruss
andre
Hm. Danke. Klingt etwas unlogisch...
jein...
es funktioniert so wie andere fhem set und get commandos. sobald sie etwas zurück geben wird das als (fehler) meldung interpretiert und angezeigt. wenn undef zurück kommt wird nichts angezeigt und du bleibst z.b. in fhemweb auf der aktuellen seite.
die implementierung verwendet die normalen internen fhem mechanismen. du kannst in der powerFn auch ein normales fhem set verwenden und da ist 'nichts' der ok zustand.
gruss
andre
Ok. danke!
braucht man denn noch das wol-device (also das modul wol)?
das kommt damit wie du sein device ein und aus schaltest. per wol über das wol modul. andere per steckdosen adapter oder zum runterfahren per ssh oder oder oder.
das hängt vom device ab.
gruss
andre
wäre cool wenn man die Funktionalitäten wol und presence zusammenlegen könnte. habe das seit ca 6 Monaten in einem eigenen Modul (nur lan/wlan) und würde gerne auf was offizielles umsteigen.
sprich es wäre toll wenn man das presence-device gleich mit optionaler Angabe der mac definieren könnte (und das device gleich mit "on" schlatfläche angelegt wird) und so sofort aufwecken könnte (zb per default der versuch über wakeonlan/etherwake oder so). die option eigene wol und shutdown befehle zusätzlich zu intergieren find ich sehr gut (stichwort steckdosen, unterschiedliche os usw).
ich hab dir mal mein flickwerk angehängt zur verdeutlichung (an mitleser bitte nicht nutzen!!).
die idee hinter dem patch war ja genau keine funktionalität die es woanders schon gibt zu duplizieren. zumal es 1001 möglichkeit gibt wie man ein device aufwecken oder schlafen legen kann. wol z.b. eben über dS WOL modul. das musst du doch einfach nur aus der powerFn aufrufen.
gruss
andre