FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: justme1968 am 04 Juli 2014, 20:27:17

Titel: patch um aus PRESENCE wake on lan auszulösen
Beitrag von: justme1968 am 04 Juli 2014, 20:27:17
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
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: marvin78 am 05 Juli 2014, 12:14:27
Das heißt, man spart sich Dummys für diese Art Aufgaben. Sehr schön!
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: Markus Bloch am 07 Juli 2014, 22:38:25
Finde ich prinzipell gut. Währe es nicht besser hier "AnalyzeCommandChain" zu verwenden statt ein perl eval?

Gruß
Markus
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: justme1968 am 07 Juli 2014, 22:47:12
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
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: Markus Bloch am 09 Juli 2014, 18:05:01
Ich brings ein, sobald ich Zeit dazu habe ;-)
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: Markus Bloch am 13 Juli 2014, 00:09:04
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
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: justme1968 am 13 Juli 2014, 00:41:02
das klingt gut.

wobei die generelle version vielleicht besser nur powerFn heissen sollte. man kann damit ja auch aus schalten :)

gruss
  andre
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: Markus Bloch am 14 Juli 2014, 17:38:21
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
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: justme1968 am 14 Juli 2014, 17:48:03
ja. mit den % platzhaltern geht das. als von mir aus ok :)

gruss
  andre
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: Markus Bloch am 15 Juli 2014, 00:02:53
Habs auf AnalyzeCommandChain geändert und alles nochmal umbenannt ;-)

Viele Grüße

Markus
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: karl0123 am 23 Juli 2014, 14:05:53
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

Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: justme1968 am 23 Juli 2014, 17:02:19
laut code solltest du undef zurück geben bei ok.

gruss
  andre
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: karl0123 am 23 Juli 2014, 17:56:50
Hm. Danke. Klingt etwas unlogisch...
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: justme1968 am 23 Juli 2014, 17:59:58
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
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: karl0123 am 23 Juli 2014, 18:10:03
Ok. danke!
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: chris1284 am 23 Juli 2014, 18:56:42
braucht man denn noch das wol-device (also das modul wol)?
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: justme1968 am 23 Juli 2014, 19:09:52
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
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: chris1284 am 23 Juli 2014, 19:37:09
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!!).
Titel: Antw:patch um aus PRESENCE wake on lan auszulösen
Beitrag von: justme1968 am 23 Juli 2014, 20:15:59
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