From ccf4ad1a415b72f37e40eafab787776b3b7683bc Mon Sep 17 00:00:00 2001
From: markusbloch <>
Date: Mon, 20 May 2013 11:31:38 +0000
Subject: [PATCH] new mode "shellscript" (checked in with Rev 3067),
documentation updates
git-svn-id: https://svn.fhem.de/fhem/trunk@3200 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/CHANGED | 2 ++
fhem/FHEM/73_PRESENCE.pm | 62 +++++++++++++++++++++++++++++++---------
2 files changed, 50 insertions(+), 14 deletions(-)
diff --git a/fhem/CHANGED b/fhem/CHANGED
index 98c34e12c..628046883 100644
--- a/fhem/CHANGED
+++ b/fhem/CHANGED
@@ -1,5 +1,7 @@
# Add changes at the top of the list. Keep it in ASCII
- SVN
+ - feature: PRESENCE: new mode "shellscript" to use own
+ scripts or binaries for presence recognition
- feature: YAMAHA_AVR: new set command to select scenes
- feature: PRESENCE: new attribute ping_count
- feature: userReadings may have a filter
diff --git a/fhem/FHEM/73_PRESENCE.pm b/fhem/FHEM/73_PRESENCE.pm
index be49f7282..71c8d954f 100755
--- a/fhem/FHEM/73_PRESENCE.pm
+++ b/fhem/FHEM/73_PRESENCE.pm
@@ -909,7 +909,8 @@ PRESENCE_ProcessAbortedScan($)
lan-ping - A presence check of a device via network ping in your LAN/WLAN
fritzbox - A presence check by requesting the device state from the FritzBox internals (only available when running FHEM on a FritzBox!)
local-bluetooth - A presence check by searching directly for a given bluetooth device nearby
- function - A presence check by using your own perl function which returns a presence status
+ function - A presence check by using your own perl function which returns a presence state
+ shellscript - A presence check by using an self-written script or binary which returns a presence state
lan-bluetooth - A presence check of a bluetooth device via LAN network by connecting to a presenced or collectord instance
@@ -918,31 +919,48 @@ PRESENCE_ProcessAbortedScan($)
Mode: lan-ping
define <name> PRESENCE lan-ping <ip-address> [ <check-interval> [ <present-check-interval> ] ]
- Checks for a network device via PING requests and reports its presence state.
+ Checks for a network device via PING requests and reports its presence state.
+ Example
+ define iPhone PRESENCE lan-ping 192.168.179.21
Mode: fritzbox
define <name> PRESENCE fritzbox <device-name> [ <check-interval> [ <present-check-interval> ] ]
- Checks for a network device by requesting the internal state on a FritzBox via ctlmgr_ctl. The device-name must be the same as shown in the network overview of the FritzBox
-
+ Checks for a network device by requesting the internal state on a FritzBox via ctlmgr_ctl. The device-name must be the same as shown in the network overview of the FritzBox
+ This check is only applicaple when FHEM is running on a FritzBox!
+ Example
+ define iPhone PRESENCE fritzbox iPhone-4S
Mode: local-bluetooth
define <name> PRESENCE local-bluetooth <bluetooth-address> [ <check-interval> [ <present-check-interval> ] ]
Checks for a bluetooth device and reports its presence state. For this mode the shell command "hcitool" is required (provided with a bluez installation under Debian via APT), as well
as a functional bluetooth device directly attached to your machine.
+ Example
+ define iPhone PRESENCE local-bluetooth 0a:8d:4f:51:3c:8f
Mode: function
define <name> PRESENCE function {...} [ <check-interval> [ <present-check-interval> ] ]
Checks for a presence state via perl-code. You can use a self-written perl function to obtain the presence state of a specific device (e.g. via SNMP check).
- The function must return 0 (absent) or 1 (present).
+ The function must return 0 (absent) or 1 (present). An example can be found in the FHEM-Wiki.
+ Example
+ define iPhone PRESENCE function {snmpCheck("10.0.1.1","0x44d77429f35c")}
+ Mode: shellscript
+ define <name> PRESENCE shellscript "<path> [<arg1>] [<argN>]..." [ <check-interval> [ <present-check-interval> ] ]
+
+ Checks for a presence state via shell script. You can use a self-written script or binary in any language to obtain the presence state of a specific device (e.g. via SNMP check).
+ The shell must return 0 (absent) or 1 (present) on console (STDOUT). Any other values will be treated as an error
+ Example
+ define iPhone PRESENCE shellscript "/opt/check_device.sh iPhone"
Mode: lan-bluetooth
Checks for a bluetooth device with the help of presenced or collectord. They can be installed where-ever you like, just must be accessible via network.
The given device will be checked for presence status.
- define <name> PRESENCE <ip-address>[:port] <bluetooth-address> [ <check-interval> ]
+ define <name> PRESENCE lan-bluetooth <ip-address>[:port] <bluetooth-address> [ <check-interval> ]
The default port is 5111 (presenced). Alternatly you can use port 5222 (collectord)
+ Example
+ define iPhone PRESENCE lan-bluetooth 127.0.0.1:5222 0a:4f:36:d8:f9:89
presenced
The presence is a perl network daemon, which provides presence checks of multiple bluetooth devices over network.
It listens on TCP port 5111 for incoming connections from a FHEM PRESENCE instance or a running collectord.
@@ -1112,6 +1130,7 @@ Options:
- fritzbox - Eine Erkennung aufgrund der internen Abfrage des Status auf der FritzBox (nur möglich, wenn FHEM auf einer FritzBox läuft)
- local-bluetooth - Eine Erkennung auf Basis von Bluetooth-Abfragen durch den FHEM Server. Das Gerät muss dabei in Empfangsreichweite sein, aber nicht sichtbar sein
- function - Eine Erkennung mithilfe einer selbst geschriebenen Perl-Funktion, welche den Anwesenheitsstatus ermittelt.
+ - shellscript - Eine Erkennung mithilfe eines selbst geschriebenen Skriptes oder Programm (egal in welcher Sprache).
- lan-bluetooth - Eine Erkennung durch Bluetooth-Abfragen via Netzwerk (LAN/WLAN) in ein oder mehreren Räumen
@@ -1120,33 +1139,48 @@ Options:
Modus: lan-ping
define <name> PRESENCE lan-ping <IP-Addresse oder Hostname> [ <Interval> [ <Anwesend-Interval> ] ]
- Prüft ob ein Gerät über Netzwerk (üblicherweise WLAN) auf Ping-Anfragen reagiert und setzt entsprechend den Anwesenheitsstatus.
-
+ Prüft ob ein Gerät über Netzwerk (üblicherweise WLAN) auf Ping-Anfragen reagiert und setzt entsprechend den Anwesenheitsstatus.
+ Beispiel
+ define iPhone PRESENCE lan-ping 192.168.179.21
Modus: fritzbox
define <name> PRESENCE fritzbox <Gerätename> [ <Interval> [ <Anwesend-Interval> ] ]
Prüft ob ein Gerät welches per WLAN mit der FritzBox verbunden ist, erreichbar durch Abfrage des Status mit dem Befehl ctlmgr_ctl.
- Der Gerätename (Parameter: <Gerätename>) muss dem Namen entsprechen, welcher im Menüpunkt "Heimnetz" auf der FritzBox-Oberfläche angezeigt wird.
-
+ Der Gerätename (Parameter: <Gerätename>) muss dem Namen entsprechen, welcher im Menüpunkt "Heimnetz" auf der FritzBox-Oberfläche angezeigt wird.
+ Dieser Modus ist nur verwendbar, wenn FHEM auf einer FritzBox läuft!
+ Beispiel
+ define iPhone PRESENCE fritzbox iPhone-4S
Modus: local-bluetooth
define <name> PRESENCE local-bluetooth <Bluetooth-Adresse> [ <Interval> [ <Anwesend-Interval> ] ]
Prüft ob ein Bluetooth-Gerät abgefragt werden kann und meldet dies als Anwesenheit. Für diesen Modus wird der Shell-Befehl "hcitool" benötigt
(wird durch das Paket bluez bereitgestellt), sowie ein funktionierender Bluetooth-Empfänger (intern oder als USB-Stick)
+ Beispiel
+ define iPhone PRESENCE local-bluetooth 0a:4f:36:d8:f9:8
Modus: function
define <name> PRESENCE function {...} [ <Interval> [ <Anwesend-Interval> ] ]
Prüft den Anwesenheitsstatus mithilfe einer selbst geschriebenen Perl-Funktion (z.B. SNMP Abfrage).
- Diese Funktion muss 0 (Abwesend) oder 1 (Anwesend) zurückgeben.
+ Diese Funktion muss 0 (Abwesend) oder 1 (Anwesend) zurückgeben. Ein entsprechendes Beispiel findet man im FHEM-Wiki.
+ Beispiel
+ define iPhone PRESENCE function {snmpCheck("10.0.1.1","0x44d77429f35c")
+ Mode: shellscript
+ define <name> PRESENCE shellscript "<Skript-Pfad> [<arg1>] [<argN>]..." [ <Interval> [ <Anwesend-Interval> ] ]
+
+ Prüft den Anwesenheitsstatus mithilfe eines selbst geschrieben Skripts oder Programmes (egal in welcher Programmier-/Skriptsprache)
+ Der Aufruf dieses Skriptes muss eine 0 (Abwesend) oder 1 (Anwesend) auf der Kommandozeile (STDOUT) ausgeben. Alle anderen Werte/Ausgaben werden als Fehler behandelt.
+ Beispiel
+ define iPhone PRESENCE shellscript "/opt/check_device.sh iPhone"
Modus: lan-bluetooth
Prüft ein Bluetooth-Gerät auf Anwesenheit über Netzwerk mit Hilfe von presenced oder collectord. Diese können auf jeder Maschine installiert werden,
welche eine Standard-Perl-Umgebung bereitstellt und über Netzwerk erreichbar ist.
- define <name> PRESENCE <IP-Adresse>[:Port] <Bluetooth-Adresse> [ <Interval> ]
-
- Der Standardport ist 5111 (presenced). Alternativ kann man den Port 5222 (collectord) nutzen. Generell ist der Port aber frei wählbar.
+ define <name> PRESENCE lan-bluetooth <IP-Adresse>[:Port] <Bluetooth-Adresse> [ <Interval> ]
+ Der Standardport ist 5111 (presenced). Alternativ kann man den Port 5222 (collectord) nutzen. Generell ist der Port aber frei wählbar.
+ Beispiel
+ define iPhone PRESENCE lan-bluetooth 127.0.0.1:5222 0a:4f:36:d8:f9:8
presenced
Der presenced ist ein Perl Netzwerk Dienst, welcher eine Bluetooth-Anwesenheitserkennung von ein oder mehreren Geräten über Netzwerk bereitstellt.
Dieser lauscht standardmäßig auf TCP Port 5111 nach eingehenden Verbindungen von dem PRESENCE Modul oder einem collectord.