devStateIcon: Perl Funktion ausführen

Begonnen von Topgun, 18 Januar 2015, 23:38:20

Vorheriges Thema - Nächstes Thema

Topgun

Hallo,

ich frage mit dem PRESENCE-Modul mein NAS (QNAP) ab. Das funktioniert.
Zusätzlich habe ich 2 Perl-Funktionen geschrieben um das NAS zu starten und zu stoppen:


sub QNAP_PowerOn
{
  my $qnap_mac = "00:18:9B:D4:52:00";
  my $ret = "";
  $ret .= qx(/usr/bin/wakeonlan $qnap_mac);
  $ret =~ s,[\r\n]*,,g;    # remove CR from return-string
  Log 3, "QNAP_PowerOn: $ret";
}
sub QNAP_PowerOff
{
  my $ret = "";
  $ret .= qx(/usr/bin/ssh admin\@qnap /sbin/poweroff);
  $ret =~ s,[\r\n]*,,g;    # remove CR from return-string
  Log 3, "QNAP_PowerOff: $ret";
}

Diese funktionen auch (kann sie mit einem Notify ausführen).

Was ich jetzt gerne noch hätte, wäre dass ich sie auch durch einen Klick auf das Symbol in dem PRESENCE-Modul starten / bzw. stoppen kann.

Dazu habe ich:

define presence_QNAP PRESENCE lan-ping qnap 60 60
attr presence_QNAP devStateIcon present:general_an@00FF00:{QNAP_PowerOff()} absent:general_aus@FF0000:{QNAP_PowerOn()}
attr presence_QNAP room hidden


Ein Klick bringt mir aber:
Unknown argument {(QNAP_PowerOn())}, choose one of statusRequest

Kann man die Perl-Funktionen bei devStateIcon nicht aufrufen?

KernSani

Hi,

Ich kenne das PRESENCE-Modul nicht (steht auf der "muss ich mir mal ansehen"-Liste), aber das DevStateIcon an sich kann keine Aktionen ausführen, du kannst nur angeben, welche Aktion (Statusänderung) bei Click ausgeführt werden soll.
Bin mir nicht sicher, ob PRESENCE das richtige Modul ist, um Rechner ein- und auszuschalten. Ich mache das mit WOL. Wenn du bei PRESENCE bleiben willst, brauchst du wahrscheinlich noch einen Dummy, auf den du dann mit einem NOTIFY (alternativ DOIF) reagieren kannst.

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Topgun

So etwas hatte ich "befürchtet".
Das PRESENCE-Modul will ich ja auch nicht unbedingt als Ein-/Aus-Schalter nutzen. Dafür habe ich ja die Perl-Funktionen die auf WOL zurückgreifen.
Ich wollte nur alles zusammen haben (Ein-/Aus-Schalter und Status-Abfrage, ob das NAS läuft). Ein DUMMY bekommt ja nicht mit, wenn ich das NAS "von Hand" starte.
Oder kann ich bei einem DUMMY-Schalter eine Status-Abfrage (wie ein Ping) mit einbauen?

Topgun

Hab es nach etwas stöbern und Hirnschmalz noch hinbekommen.

Es gibt nur noch eine Perlfunktion:

sub QNAP_Power
{
  my $state = shift;
  my $qnap_mac = "00:08:9B:C3:5D:00";
  my $ret = "";
  if (lc $state eq "on") {
    $ret .= qx(/usr/bin/wakeonlan $qnap_mac);
    $ret =~ s,[\r\n]*,,g; # remove CR
  } elsif (lc $state eq "off") {
    $ret .= qx(/usr/bin/ssh admin\@qnap /sbin/poweroff);
    $ret =~ s,[\r\n]*,,g; # remove CR
  } else {
    $ret .= "Unknown state $state";
  }
  Log 3, "QNAP_Power: ($state): $ret";
}


Und in FHEM habe ich jetzt:

define presence_QNAP PRESENCE lan-ping qnap 60 60
attr presence_QNAP devStateIcon present:general_an@00FF00:off absent:general_aus@FF0000:on
attr presence_QNAP eventMap /power on:on/ /power off:off/
attr presence_QNAP group Verfügbarkeit
attr presence_QNAP powerCmd {QNAP_Power("%ARGUMENT")}
attr presence_QNAP room hidden
attr presence_QNAP webCmd :


Damit funktioniert es so, wie ich will  ;D