PRESENCE: 2 Vorschläge/Wünsche: konfigurierbarer Ping-Count und Modus "shellscript"

Begonnen von Uli Zappe, 30 März 2013, 05:55:52

Vorheriges Thema - Nächstes Thema

Uli Zappe

Hallo Markus,

zunächst mal herzlichen Dank für Dein PRESENCE-Modul! Das spart mir viel Arbeit, denn sonst hätte ich mir selbst eine ping-Abfrage zimmern müssen.

Allerdings geht es in meinem Fall gar nicht um An-/Abwesenheitserkennung. Vielmehr möchte ich in FHEM den Schlaf-/Wach-Status diverser Geräte in meinem lokalen Netzwerk erfassen (hauptsächlich Computer, aber auch anderer Geräte wie z.B. ein Projektor).

Das zeigt, dass PRESENCE viel universeller verwendbar ist, als Du vielleicht zunächst im Sinn hattest. Aber für diese erweiterte Anwendung wären ein paar Ergänzungen optimal.

Konkret hätte ich zwei Vorschläge/Wünsche:


1. Ein einstellbarer Ping-Count. Du hast den Count im Moment fest auf 4 gesetzt. Für den Anwendungsfall, den Du im Kopf hattest, ist das sicher sinnvoll. Für meinen Anwendungsfall wäre 1 oder 2 viel besser, da sich dann einerseits eine zeitnahere Statusanzeige verwirklichen lässt, während andererseits die Zuverlässigkeit bei verkabelten Netzwerkgeräten hoch genug ist, dass 1 oder 2 ausreicht.

Mein Vorschlag für den Aufruf wäre:
define <name> PRESENCE lan-ping <ip-address> [ <check-interval> [ <present-check-interval> [<ping-count>] ] ](Man muss dann zwar immer auch present-check-interval angeben, wenn man ping-count spezifizieren will, aber das ist ja kein großes Problem.)


2. Ein zusätzlicher Modus "shellscript". Es kann Spezialfälle geben, wo eine zyklische Ping- (oder auch Bluetooth-)Abfrage nicht funktioniert, aber andere zyklische Abfragen möglich wären. Mein Projektor ist so ein Fall: Der antwortet auch im Ruhezustand auf Pings, aber über ein spezielles TCP-Kommando lässt sich der Ruhe-/Wachzustand abfragen. Solche Spezialfälle ließen sich prima integrieren, wenn PRESENCE alternativ die Spezifikation eines individuellen Shellscripts erlauben würde, das als Exit-Wert 0 bei Anwesenheit/Wachzustand und 1 bei Abwesenheit/Schlafzustand zurückliefern muss.

Mein Vorschlag für den Aufruf wäre:
define <name> PRESENCE shellscript </path/to/script> [ <check-interval> [ <present-check-interval>] ]

Beides müsste sich ja ziemlich einfach in PRESENCE ergänzen lassen (ich dachte aber, es ist besser, wenn Du das machst, statt dass ich in Deinem Modul herumfummle) und würde den Einsatzbereich erweitern.

Markus Bloch

Hallo Uli,

Ja, das währe möglich. Kann ich aber erst in einer Woche machen, wenn ich wieder aus dem Urlaub zurück bin.

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)

Uli Zappe

Zitat von: Markus Bloch schrieb am Sa, 30 März 2013 09:06Ja, das währe möglich.
Klasse, vielen Dank! :)

ZitatKann ich aber erst in einer Woche machen, wenn ich wieder aus dem Urlaub zurück bin.
Logo, null Problem!

Dir einen schönen Osterurlaub!

Uli

justme1968

es wäre schön statt dem shellscript auch eine perl funktion aufrufen zu können. rückgabe wert auch 0 oder 1. etwa so wie an anderen stellen in fhem auch:define <name> PRESENCE {...} [ <check-interval> [ <present-check-interval>] ]

dann hätte ich endlich meine snmp wlan erkennung :)

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

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

Uli Zappe

Zitat von: justme1968 schrieb am Sa, 30 März 2013 17:30es wäre schön statt dem shellscript auch eine perl funktion aufrufen zu können. rückgabe wert auch 0 oder 1. etwa so wie an anderen stellen in fhem auch:
Wie ist das eigentlich generell bei Perl-Funktionen, die auf diese Art in FHEM (fhem.cfg) konfiguriert werden? Werden die einmal kompiliert beim Einlesen von fhem.cfg, oder bei jedem einzelnen Aufruf der Funktion erneut?

Denn wenn letzteres, ergäbe eine Perl-Funktion hier von der CPU-Belastung her nicht so viel Sinn, da sie alle paar Sekunden neu kompiliert werden müsste.

justme1968

zum einen wäre selbst das resourcen schonender als ein shellscript aufzurufen zum anderen musst du ja nicht ein ganzes programm in der perlfunc unterbringen sondern z.b. nur den aufruf einer funktion in 99_myUtils.

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

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

Uli Zappe

Zitat von: justme1968 schrieb am Mo, 01 April 2013 15:58zum einen wäre selbst das resourcen schonender als ein shellscript aufzurufen
"shellscript" ist vielleicht ein unglücklicher Ausdruck dafür, etwas über die Shell (in Kontrast zu FHEM's direktem Perl-Zugriff) aufzurufen, was ja durchaus auch ein kompiliertes C-Programm sein kann.

Ich hatte das Problem mit einem kleinen Progrämmchen, das nur eine ganz kurze TCP-Kommunikation mit einem Gerät im Netzwerk durchführt: Zuerst schnell in Perl geschrieben, hat es bei jeder Ausführung kurzzeitig eine CPU-Last von ca. 70% erzeugt und eine user time von ca. 0,7s beansprucht. Deswegen habe ich es dann in C reimplementiert, da braucht es 0,02s user time; die CPU-Last konnte ich aufgrund der Kürze der Zeit gar nicht erfassen. Ist also schon ein Riesenunterschied.

Zitatzum anderen musst du ja nicht ein ganzes programm in der perlfunc unterbringen sondern z.b. nur den aufruf einer funktion in 99_myUtils.
Da hast Du natürlich recht. :) Auf diese naheliegende Idee bin ich nicht gekommen - gut, es ist auch noch nicht klar, ob Perl-Aufrufe in PRESENCE gehen werden, aber das allein ist natürlich bereits ein starkes Argument dafür.

Markus Bloch

Zitat von: justme1968 schrieb am Sa, 30 März 2013 17:30es wäre schön statt dem shellscript auch eine perl funktion aufrufen zu können. rückgabe wert auch 0 oder 1. etwa so wie an anderen stellen in fhem auch:define <name> PRESENCE {...} [ <check-interval> [ <present-check-interval>] ]

dann hätte ich endlich meine snmp wlan erkennung :)

gruss
  andre
Kannst du mir mal fix ein Beispiel zeigen, damit ich mal Guttenbergen kann? ;-)
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

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

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

Markus Bloch

Da werden die Kommandos aber nur ausgeführt und nicht das Ergebnis evaluiert. Das Ausführen generell ist kein Problem, das Problem ist aber aus so einer Befehlskette einen Rückgabewert zu erhalten.

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

schau dir devState icon in fhem.pl an. da kann man icon und kommando zurueck geben.

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

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

Markus Bloch

alles klar :-)

Vielen Dank

Mach ich. Ich denke mal am Wochenende kann ich das machen. Dann wahrscheinlich aber erstmal nur als Patch wegen 5.4 Release, da das ja ein neues Feature währe ;-)

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)

Markus Bloch

Hallo zusammen,

ab morgen gibts via update eine neue PRESENCE Version:

folgende Neuerungen:

Neuere Mode: shellscript:

define <name> PRESENCE shellscript </path/to/script> [ <check-interval> [ <present-check-interval> ] ]

Bsp:
define Handy PRESENCE shellscript "/opt/test_bluetooth_ping.sh 7C:61:93:6D:5F:0B" 30 60


Neuere Mode: function:

define <name> PRESENCE function {...} [ <check-interval> [ <present-check-interval> ] ]

Bsp:
define Test PRESENCE function {snmpCheck()} 30 60


Beide Modis sind aktuell noch nicht in der Doku, da ich mal so langsam zu Bett gehen müsste ;-)

Bitte probiert mal beide Sachen aus und gebt Feedback. Die Doku werde ich noch nachreichen.

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)

Uli Zappe


Markus Bloch

Kleine Infos zu den Rückgabewerten (hatte ich ganz vergessen).

shellscript: Das Skript muss eine 0 (abwesend) oder 1 (anwesend) auf der Konsole ausgeben. Der exit-Code wird nicht ausgewertet.
function: Die Funktion muss als return-Wert 0 oder 1 zurückgeben.

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)