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
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')}")
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
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.
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.
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
Jupp, dann werde ich mal dort weiterschauen.
Danke trotzdem !
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.
@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
Von wo aus willst Du denn nach dem define des device und dem attr Deines Parameters das shellscript aufrufen?
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
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.
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