Präsenzerkennung (iPhone) via WLAN

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Präsenzerkennung (iPhone) via WLAN

Beitrag von Cyrelian »

Hi Jaccolino,

cool, das es läuft.
Nur das ich das richtig verstanden hab...es war der Eintrag in der

Code: Alles auswählen

/etc/sudoers
oder?

CU
Cyrelian

onkelbobby
Beiträge: 4
Registriert: 7. Apr 2016 20:55

Re: Präsenzerkennung (iPhone) via WLAN

Beitrag von onkelbobby »

Halo zusammen...

ich muss gleich vorwegnehmen, dass ich so gut wie gar nicht programmieren kann und mich anhand bislang von Tutorials soweit es möglich durchgehangen habe. Immerhin habe ich nun ein funktionsfähiges openHAB 1.8.1 auf nem Raspberry Pi 2 laufen und etliche Schalter (433Mhz), Dimmer (433Mhz) und Milights ans Laufen gebracht. Einige Regeln funktionieren auch schon sehr zuverlässig, doch ich schaffe es einfach nicht eine funktionierende Anwesenheitserkennung zu realisieren.

hier meine config:
meine items

Code: Alles auswählen

Switch MOB001 "Zu Hause [%s]"  { exec="<[/etc/opt/iphonedetect.sh:60000:REGEX((.*?))]" }
meine sitemap:

Code: Alles auswählen

	Frame label="Presence" {
		Text item=MOB001
		Switch item=MOB001 icon="present" valuecolor=[ON="green",OFF="blue"]}
und das shell script (MAC ist natürlich die richtige eingetragen):

Code: Alles auswählen

#!/bin/bash
declare -a DEVICES
hping3 -2 -c 10 -p 5353 -i u1 192.168.1.154 -q >/dev/null 2>&1
DEVICES=`arp -an | awk '{print $4}'`
CHECK="xx:xx:xx:xx:b6:d5"
if [[ ${DEVICES[*]} =~ $CHECK ]]
then
echo "ON"
else
echo "OFF"
fi
Das Scrip liegt im Ordner

Code: Alles auswählen

etc/opt
und sowohl das script selbst, als auch die Ordner sind ausführbar. Die Rückgabewerte des Scripts werden auch wunderbar von openHAB erkannt und entsprechend dargestellt.

Wie vorher schon beschrieben habe ich auch die

Code: Alles auswählen

etc/sudoers
entsprechend angepasst.

Das Script Ansicht funktioniert auch und ich kann mit

Code: Alles auswählen

arp -an | awk '{print $4}'
die erkannte MAC Adresse sehen. Mein Problem ist jedoch, dass die MAC Adresse dauerhaft angezeigt wird, obwohl WLAN am iPhone ausgeschaltet ist.

Leere ich nun den arp cache mit

Code: Alles auswählen

ip neigh flush all
und führe anschließend

Code: Alles auswählen

arp -an | awk '{print $4}'
aus wird <unvollständig> zurückgegeben und im openHAB OFF angezeigt - soweit alles gut.

Schalte ich nun das WLAN am iPhone an unf führe erneut

Code: Alles auswählen

hping3 -2 -c 10 -p 5353 -i u1 192.168.1.154 -q >/dev/null 2>&1
aus bekomme ich relativ schnell ein ON im openHAB. Wenn ich das WLAN nun wieder abschalte bleibt der Status allerdings auf ON also die MAC wird immer noch erkannt...

Habt Ihr eine Idee, woran das liegen kann?
Danke schon mal vorab
Grüße Bobby

Benutzeravatar
seppy
Beiträge: 738
Registriert: 24. Sep 2015 20:25
Answers: 4
Wohnort: Bonn

Re: Präsenzerkennung (iPhone) via WLAN

Beitrag von seppy »

Hi Bobby,

ganz blöde Frage, die MAC ist sicher die richtige und auch die vom iPhone? Ich frage nicht ohne Grund ... da ich mich in der Vergangenheit bereits selber reingelegt habe und auf die MAC meiner Dreambox gepingt habe :mrgreen:

Gruß,

Seppy
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren

- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung

onkelbobby
Beiträge: 4
Registriert: 7. Apr 2016 20:55

Re: Präsenzerkennung (iPhone) via WLAN

Beitrag von onkelbobby »

Hi Seppy,

Danke für die schnelle Antwort...
ja, die MAC ist definitiv die richtige ;-)

Zwischenzeitlich habe ich das Script um "sudo" erweitert

Code: Alles auswählen

#!/bin/bash
declare -a DEVICES
sudo hping3 -2 -c 10 -p 5353 -i u1 192.168.1.154 -q >/dev/null 2>&1
DEVICES=`sudo arp -an | awk '{print $4}'`
CHECK="xx:xx:xx:xx:b6:d5"
if [[ ${DEVICES[*]} =~ $CHECK ]]
then
echo "ON"
else
echo "OFF"
fi
und herausgefunden, dass das es funktioniert wenn ich es manuell im Terminal ausführe

Code: Alles auswählen

pi@raspberrypi:/etc/opt $ ./iphonedetect.sh
ON
pi@raspberrypi:/etc/opt $ ./iphonedetect.sh
OFF
Liegt der Fehler dann doch irgendwo in der Kommunikation mit openHAB?!?

Grüße
Bobby

Benutzeravatar
seppy
Beiträge: 738
Registriert: 24. Sep 2015 20:25
Answers: 4
Wohnort: Bonn

Re: Präsenzerkennung (iPhone) via WLAN

Beitrag von seppy »

Hi Bobby,

ich finde keinen Fehler, bin mir aber auch mit exec in der von Dir verwendeten Form nicht sicher. Da ich an dieser Stelle eher den Systemtools (also cron) vertraue, mache ich etwas anderes. Bei mir schaltet das Script aktiv über die REST API. Das sieht dann so aus:

Code: Alles auswählen

/usr/sbin/hping3 -2 -c 10 -p 5353 -i u1 192.168.000.000 -q >/dev/null
DEVICES=`/usr/sbin/arp -an | awk '{print $4}'`
if [[ $DEVICES == *48:XX:XX:XX:XX:XX* ]]
  then
    echo "Seppy anwesend"
    curl --max-time 2 --connect-timeout 2 --header "Content-Type: text/plain" --request POST --data "ON" http://homebox.heideweg.local/rest/items/PresenceSeppyMobile
  else
    echo "Seppy abwesend"
    curl --max-time 2 --connect-timeout 2 --header "Content-Type: text/plain" --request POST --data "OFF" http://homebox.heideweg.local/rest/items/PresenceSeppyMobile
fi
Den cron auf das detect script lasse ich einmal pro Minute laufen. Wenn ich am WE mal Ruhe habe, teste ich noch Deine Variante!

Grüße,

Seppy
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren

- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung

onkelbobby
Beiträge: 4
Registriert: 7. Apr 2016 20:55

Re: Präsenzerkennung (iPhone) via WLAN

Beitrag von onkelbobby »

Hallo Seppy,

danke... ich werde heute Abend mal Deine Variante ausprobieren.
Wo und wie muss ich denn den cron in openHAB integrieren, dass er das Script ausführt? Muss ich dafür ne Rule erstellen?

wo auf dem Raspberry liegt denn die /rest/items?

sorry, dass ich solche Anfängerfragen stelle ... ;-)

Grüße
Bobby

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Präsenzerkennung (iPhone) via WLAN

Beitrag von Cyrelian »

HI Bobby,

mir sind da ein paar Dinge in deiner Config aufgefallen:

1.)

Code: Alles auswählen

 { exec="<[/etc/opt/iphonedetect.sh:60000:REGEX((.*?))]" }
das Leerzeichen vor dem exec und am Ende hat bei mir immer wieder zu Problemen geführt.

2.)Du benutzt einen "Switch"

Code: Alles auswählen

Switch MOB001 "Zu Hause [%s]"  { exec="<[/etc/opt/iphonedetect.sh:60000:REGEX((.*?))]" }
Der Rückgabewert ist aber ein String (ON oder OFF)
Das habe ich so gelößt:

Code: Alles auswählen

String MOB002_WLAN "Handy 02 [%s]" (gPraesenz) {exec="<[/scripts/detectiphone02.sh:60000:REGEX((.*?))]"}
3.) Hast Du eine Rule?

Code: Alles auswählen

rule "Jemand ist zuhause"
	when
  		Item MOB001_WLAN changed or 
   		Item MOB002_WLAN changed or
   		System started
	then
		if (MOB001_WLAN.state == "Anwesend" || MOB002_WLAN.state == "Anwesend"){
			logInfo("PraesenzRules:", "Jemand ist zuhause")
		}
		if (MOB001_WLAN.state == "Abwesend" && MOB002_WLAN.state == "Abwesend"){
			logInfo("PraesenzRules:", "Alle unterwegs")
		}
end


rule "MOB002 ist Zuhause"
   when
		Item MOB002_WLAN changed or
		System started
   then
      	if (MOB002_WLAN.state == "Anwesend"){
      		logInfo("PraesenzRules:", "MOB002 ist Zuhause")
      		MOB002.postUpdate(ON)
      	}
      	else {
      		logInfo("PraesenzRules:", "MOB002 ist nicht Zuhause")
      		MOB002.postUpdate(OFF)	
      	}
end


rule "MOB001 ist Zuhause"
   when
		Item MOB001_WLAN changed or
		System started
   then
		if (MOB001_WLAN.state == "Anwesend"){
      		logInfo("PraesenzRules:", "MOB001 ist Zuhause")
      		MOB001.postUpdate(ON)
      	}
      	else {
      		logInfo("PraesenzRules:", "MOB001 ist nicht Zuhause")
      		MOB001.postUpdate(OFF)	
      	}
end
4.) Transform Datei

Code: Alles auswählen

ON=Anwesend
OFF=Abwesend
undefined=unbekannt
-=-Fehler bei der Initialisierung-
So läuft es bei mir einwandfrei.
Seppys Lösung hat den Vorteil, das man sich die Rule spart ;)

CU
Cyrelian

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Präsenzerkennung (iPhone) via WLAN

Beitrag von Cyrelian »

onkelbobby hat geschrieben:Hallo Seppy,

danke... ich werde heute Abend mal Deine Variante ausprobieren.
Wo und wie muss ich denn den cron in openHAB integrieren, dass er das Script ausführt? Muss ich dafür ne Rule erstellen?

wo auf dem Raspberry liegt denn die /rest/items?

sorry, dass ich solche Anfängerfragen stelle ... ;-)

Grüße
Bobby
1.) Cron Job, kommt in die "crontab" crontab --help
2.)/rest/items -> /etc/openhab/configurations/items/. Kannst auch einfach checken, wenn du im Browser folgendes aufrufst:

Code: Alles auswählen

http://ipvondeinemopenhab:8080/rest/items
Da kommt dann eine XML Datei mit allen Items und deren STATE,TYPE und LINK.

CU
Cyrelian

Benutzeravatar
seppy
Beiträge: 738
Registriert: 24. Sep 2015 20:25
Answers: 4
Wohnort: Bonn

Re: Präsenzerkennung (iPhone) via WLAN

Beitrag von seppy »

@Cyrelian: Danke :lol:
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren

- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Präsenzerkennung (iPhone) via WLAN

Beitrag von Cyrelian »

seppy hat geschrieben:@Cyrelian: Danke :lol:
aber gerne doch ;)

Antworten