patch um aus PRESENCE wake on lan auszulösen

Begonnen von justme1968, 04 Juli 2014, 20:27:17

Vorheriges Thema - Nächstes Thema

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

marvin78

Das heißt, man spart sich Dummys für diese Art Aufgaben. Sehr schön!

Markus Bloch

Finde ich prinzipell gut. Währe es nicht besser hier "AnalyzeCommandChain" zu verwenden statt ein perl eval?

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus Bloch

Ich brings ein, sobald ich Zeit dazu habe ;-)
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Markus Bloch

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
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

das klingt gut.

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

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus Bloch

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
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

ja. mit den % platzhaltern geht das. als von mir aus ok :)

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus Bloch

Habs auf AnalyzeCommandChain geändert und alles nochmal umbenannt ;-)

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

karl0123

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


justme1968

laut code solltest du undef zurück geben bei ok.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

karl0123


justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

karl0123