FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Tsadan am 09 August 2023, 12:13:02

Titel: Attribut als Parameter an Shellscript übergeben
Beitrag von: Tsadan am 09 August 2023, 12:13:02
Hallo liebe Mitstreiter,

ich habe eine eher kosmetische Frage zu Shellcripts.

Ich verwende das Modul PRESENCE um festzustellen, ob bestimmte Geräte in meinem WLAN eingeloggt sind, oder nicht.
Herfür habe ich ein shellscript geschrieben, welches die MAC-Adresse des zu überprüfenden Gerätes als Parameter verlangt.
Ich möchte, wenn möglich, zukünftig den Wert eines Attributs an das Script übergeben, anstatt die MAC-Adresse im "def"-Teil des  Device zu verwenden.

Das Listing meines PRESENCE devices sieht so aus:

DEF        shellscript "/opt/scripts/wlc_client_present.sh 8c:b8:4a:d3:d5:d9"

   FUUID      61d736f0-f33f-9996-e966-e6c70707e4ae388b
   INTERVAL_NORMAL 30
   INTERVAL_PRESENT 30
   MODE       shellscript
   NAME       P_Markus
   NOTIFYDEV  global
   NR         166
   NTFY_ORDER 50-P_Markus
   STATE      present
   TYPE       PRESENCE
   eventCount 21249
   READINGS:
     2023-08-09 11:22:48   model           shellscript
     2023-08-09 11:25:57   presence        present
     2023-08-09 11:25:57   state           present
   helper:
     CURRENT_STATE present
     DISABLED   0
     call       /opt/scripts/wlc_client_present.sh 8c:b8:4a:d3:d5:d9
Attributes:
   alias      Markus
   group      Presence
   mac        8c:b8:4a:d3:d5:d9
   room       FHEM->Presence,Startseite
   userattr   mac
   verbose    5

Dem erfahrenen Mitstreiter wird aufgefallen sein, dass ich bereits ein userattr "mac" angelegt und mit der MAC-Adresse des zu suchenden Gerätes befüllt habe.

Was mir bisher leider nicht gelungen ist, ist das Attribut "mac" so an das shellscript zu übergeben, dass das Script funktioniert.

Ich habe bisher folgende Versuche unternommen, welche alle mit der Fehlermeldung
fork failed, rescheduling next check in 30 seconds
abbrachen:
shellscript ""/opt/scripts/wlc_client_present.sh" {AttrVal("$name","mac","")}"
shellscript "/opt/scripts/wlc_client_present.sh" ´fhem{AttrVal("$name","mac","")}´
shellscript "/opt/scripts/wlc_client_present.sh fhem{AttrVal("$name","mac","")}"

Ich habe auch schon probiert, zuerst Variablen zu definieren, noch dem Prinzip
my $mac = {AttrVal("$name","mac","")} ; shellscript "/opt/scripts/wlc_client_present.sh $mac"
, das mag aber das Modul PRESENCE offenbar nicht und verlangt, dass mein def mit einer der zulässigen Optionen beginnt.

Hat da evtl. jemand einen Tipp, was ich noch probieren könnte ?

Vielen lieben Dank schon mal und viele Grüße
Tsadan 
Titel: Aw: Attribut als Parameter an Shellscript übergeben
Beitrag von: TomLee am 09 August 2023, 15:53:46
Vermutlich kann man kein Perl verwenden im shell-script Modus ?

Lies doch den Attributwert im Script aus statt ihn zu übergeben:

mac=$(perl fhem.pl 7072 "{AttrVal('P_Markus','mac','none')}")
Titel: Aw: Attribut als Parameter an Shellscript übergeben
Beitrag von: Tsadan am 09 August 2023, 16:06:31
Hallo TomLee,

danke für deine Antwort. Grundsätzlich könnte man das machen, allerdings wird das Script an vielen Stellen, nicht nur in FHEM genutzt. Ich könnte vllt. ein Wrapper-Script schreiben, welches die FHEM-Abfrage erledigt.

Wie wäre denn der Syntax, wenn ich an Stelle von P_Markus den Namen des aufrufenden PRESENCE-Devices verwenden möchte (ich habe ja nicht nur ein PRESENCE_Device und möchte ja nicht für jedes einzelne einen Wrapper benötigen) ?

Ob sich das lohnt, muss ich allerdings noch mal für mich bewerten. Am Ende wollte ich es mir vereinfachen, die MAC-Adresse von Geräten anpassen zu können. Mein Gefühl geht in die Richtung, dass es besser funktioniert, ein Attribut zu ändern, als die Definition des Gerätes.

Geht es denn grundsätzlich, ein Attribut an ein PRESENCE-shellscript zu übergeben ?

Danke und Gruß
Tsadan
Titel: Aw: Attribut als Parameter an Shellscript übergeben
Beitrag von: TomLee am 09 August 2023, 16:14:59
Ich hab nur wenig Erfahrung mit der Programmierung, das war nur so eine Idee, wie ich es halt verstanden hab, viel mehr helfen kann ich auch nicht.

ZitatWie wäre denn der Syntax, wenn ich an Stelle von P_Markus den Namen des aufrufenden PRESENCE-Devices verwenden möchte (ich habe ja nicht nur ein PRESENCE_Device und möchte ja nicht für jedes einzelne einen Wrapper benötigen) ?

Ich denke/vermute das müsste der Modulautor in dem Modul ergänzen, das der Devicename als Parameter übergeben werden kann / Perl in der DEF im shell-script angegeben werden kann.
Titel: Aw: Attribut als Parameter an Shellscript übergeben
Beitrag von: TomLee am 09 August 2023, 16:27:57
ZitatMein Gefühl geht in die Richtung, dass es besser funktioniert, ein Attribut zu ändern, als die Definition des Gerätes.

Mein Gefühl sagt mir, das es evtl. noch besser/einfacher ist die MAC ganz simpel in ein Reading zu schreiben (mit setreading), statt in einem Attribut einzutragen.
Titel: Aw: Attribut als Parameter an Shellscript übergeben
Beitrag von: TomLee am 09 August 2023, 16:48:04
Vlt. noch was (manche User haben jetzt schon Schweißausbrüche und bekommen langsam Pickel):

ZitatModule: 73_PRESENCE.pm Maintainer: JoWiemann Forum: Unterstützende Dienste
Titel: Aw: Attribut als Parameter an Shellscript übergeben
Beitrag von: Tsadan am 09 August 2023, 16:59:50
Jupp, dann werde ich mal dort weiterschauen.

Danke trotzdem !
Titel: Aw: Attribut als Parameter an Shellscript übergeben
Beitrag von: betateilchen am 09 August 2023, 17:02:09
Das ist doch kein Problem des PRESENCE devices (schon gar nicht des zugehörigen Moduls), sondern mangelndes Verständnis der FHEM Logik.

Zum Zeitpunkt des DEF eines fhem-devices gibt es in diesem device weder readings noch attribute, auf die man zugreifen oder mit denen man irgendwas anfangen könnte.
Titel: Aw: Attribut als Parameter an Shellscript übergeben
Beitrag von: Tsadan am 09 August 2023, 17:18:04
@Betateilchen
ZitatDas ist doch kein Problem des PRESENCE devices (schon gar nicht des zugehörigen Moduls)
... dessen bin ich mir vollkommen bewusst und habe es auch nicht behauptet.
Zitat,sondern mangelndes Verständnis der FHEM Logik.
... daher frage ich...

ZitatZum Zeitpunkt des DEF eines fhem-devices gibt es in diesem device weder readings noch attribute, auf die man zugreifen oder mit denen man irgendwas anfangen könnte.
So habe ich das auch verstanden. Aber ich kann ja ein Attribut für das PRESENCE-Device anlegen, sobald es existiert.
Ich verstehe nur nicht, wie ich den Inhalt dieses manuell hinzugefügten Attributs and das shellscript übergeben kann und ob das überhaupt geht.

Vielleicht bin ich ja total auf dem Holzweg mit meiner Idee.

Viele Grüße
Tsadan
Titel: Aw: Attribut als Parameter an Shellscript übergeben
Beitrag von: betateilchen am 10 August 2023, 13:19:32
Von wo aus willst Du denn nach dem define des device und dem attr Deines Parameters das shellscript aufrufen?
Titel: Aw: Attribut als Parameter an Shellscript übergeben
Beitrag von: JoWiemann am 10 August 2023, 13:45:17
Zitat von: Tsadan am 09 August 2023, 17:18:04So habe ich das auch verstanden. Aber ich kann ja ein Attribut für das PRESENCE-Device anlegen, sobald es existiert.

Dann kannst Du aber auch im Define die MAC angeben.

Grüße Jörg

Titel: Aw: Attribut als Parameter an Shellscript übergeben
Beitrag von: betateilchen am 10 August 2023, 14:04:52
Zitat von: JoWiemann am 10 August 2023, 13:45:17Dann kannst Du aber auch im Define die MAC angeben.

Grüße Jörg

Vermutlich ist das aber hier gar nicht das Thema, das versuche ich ja gerade herauszufinden.
Titel: Aw: Attribut als Parameter an Shellscript übergeben
Beitrag von: Tsadan am 23 August 2023, 12:27:17
Moin und sorry für die Verzögerung,

ich habe im Urlaub noch mal über das ganze nachgedacht und bin zu dem Schluss gekommen, dass mein Ansatz wohl keine wirklichen Vorteile bringt.
Ich habe ja bisher auch einfach im define die MAC geändert, wenn jemand ein neues Telefon verwendet.

Im Grunde ging es von der Idee her darum, ein Inventar von Geräten in einem Verzeichnisdienst zu pflegen. Wenn ich in diesem Verzeichnis-Eintrag dann für einen Nutzer ein neues Telefon mit neuer MAC eintrage, sollte die neue MAC automatisiert in das Presence device eingetragen werden. Somit ändert sich ja nicht die "Person", deren Anwesenheit ich mit dem Presence device überwachen möchte, sondern nur die MAC des Telefons dieser Person. Logisch wäre also für mich, dass das Presence device (aka der Nutzer) unangetastet bleibt, sich aber die MAC als Attribut ändert.

Das muss natürlich nicht aus jedem Blickwinkel Sinn ergeben. Ich denke, wir können das Thema auch beenden, es ist ja nicht so, dass etwas gar nicht klappt, sondern eher eine Art kosmetische Frage.

Ich danke Euch für Eure Beiträge und Antworten, mir hat es trotzdem weitergeholfen !
Bis Bald

Tsadan