Moin zusammen,
nach einer ganzen Weile habe ich es nun geschafft meinen RaspPi meinen Schlüsselbunddongle zu scannen und demnach einen Status an IP-Symcon via Webhook zu senden.
##Meine Hardware##
[ul]
[li]USB BT Dongle (LogiLink BT0015 USB bluetooth V4.0 EDR Class1 Micro: Amazon.de: Computer & Zubehör)
[/li][li]Dongle für den Schlusselbund (Gigaset G-tag Bluetooth Schlüsselfinder: Amazon.de: Elektronik)
[/li][li]RaspPi mit Raspian Jessie Lite
[/li][/ul]
Hier meine Anleitung dazu
- Zur Installation des iBeacon bin ich der Anleitung unter https://learn.adafruit.com/downloads/pdf/pibeacon-ibeacon-with-a-raspberry-pi.pdf gefolgt. WICHTIG: Nur einschließlich Schritt 1 im zweiten Absatz abarbeiten (1. Check for your USB Module)
Danach müsst ihr das Modul noch starten. Dazu folgenden Befehl eingeben
/tools/hciconfig hci0 up
- via SSH auf dem RaspPi
sudo apt-get install screen
nach der Installation
screen
tools/hcitool lescan
Screen verlassen mit STRG + A + D
- nötigen Scripte erstellen (z.B. im Homeverzeichnis)
ibeacon_scan.sh
#!/bin/bash
# iBeacon Scan by lahlor based on Radius Networks RAW data convert
while read -t 10 line
do
count=$[count + 1]
if [ "$capturing" ]; then
if [[ $line =~ ^[0-9a-fA-F]{2}\ [0-9a-fA-F] ]]; then
packet="$packet $line"
else
if [[ $packet =~ ^04\ 3E\ 2A\ 02\ 01\ .{26}\ 02\ 01\ .{14}\ 02\ 15 ]]; then
UUID=`echo $packet | sed 's/^.\{69\}\(.\{47\}\).*$/\1/'`
UUID=`echo $UUID | sed -e 's/\ //g' -e 's/^\(.\{8\}\)\(.\{4\}\)\(.\{4\}\)\(.\{4\}\)\(.\{12\}\)$/\1-\2-\3-\4-\5/'`
echo $UUID
fi
capturing=""
packet=""
fi
fi
if [ ! "$capturing" ]; then
if [[ $line =~ ^\> ]]; then
packet=`echo $line | sed 's/^>.\(.*$\)/\1/'`
capturing=1
fi
fi
if [[ $count == "20" ]]; then
exit
fi
done
Führt das Script einmal aus, während der Dongle erreichbar ist. Gebt dazu folgendes ein
sudo /home/pi/ibeacon/bluez-5.35/tools/hcidump --raw | /home/pi/ibeacon_scan.sh
Ihr solltet die UUID des Dongles angezeigt bekommen. Kopiert diesen irgendwohin, da er im nächsten Script eingetragen werden muss.
presence.sh
#!/bin/bash
# iBeacon Presence Check by lahlor
is_beacon_in_range () {
while read -t 10 line
do
if [[ `echo $line | grep "XXXXXXXXXXXXXXXXXXXXXXXXXXX"` ]]; then
echo 1
exit
fi
done
echo 0
}
result=$(is_beacon_in_range)
#echo $result
if [ $result -eq 1 ];then
#echo "is 1"
sudo wget -O - -q http://127.0.0.1:3777/hook/ibeacon?Status=1 1>/dev/null &
else
#echo "is not 1"
sudo wget -O - -q http://127.0.0.1:3777/hook/ibeacon?Status=0 1>/dev/null &
fi
unter XXXXXXXX tragt ihr eure UUID des Dongles ein. Die IP für der IP-Symcon kann ebenfalls geändert werden, wenn 127.0.0.1 nicht richtig sein sollte.
- IP-Symcon Anpassung
Erstellt ein Dummy Modul (iBeacon). Darunter eine Boolean Variable (Profil ~Presence) und ein Script „Hook“.
In dem Script kommt folgendes rein
<?
error_reporting(0);
//IPS_LogMessage("WebHook GET", print_r($_GET, false));
//IPS_LogMessage("WebHook POST", print_r($_POST, false));
//IPS_LogMessage("WebHook IPS", print_r($_IPS, false));
if ($_GET['Status'] == 1)
{
SetValue(17794 /*[iBeacon\Lars]*/, true);
}
if ($_GET['Status'] == 0)
{
SetValue(17794 /*[iBeacon\Lars]*/, false);
}
?>
Denkt dran, die Objekt ID im Script mit der Booelan Variable abzugleichen.
Als letztes müsst ihr noch unter den Kern Instanzen > WebHook das Script verknüpfen.
- Script automatisch laufen lassen
sudo crontab -e
folgendes einfügen (bitte auf die Pfade zu den Scripten achten und ggf. anpassen)
* * * * * sudo timeout 15 /home/pi/ibeacon/bluez-5.35/tools/hcidump --raw | /home/pi/ibeacon_scan.sh | /home/pi/presence.sh >/dev/null 2>&1
Nun sollte sich der Status in IPS automatisch alle ~ 1 Minute aktualisieren. Wird der Dongle nicht mehr vom RaspPi erreicht, wird der Status auf Abwesend gestellt. Ist der Dongle erreichbar, ist der Status Anwesend. Darauf aufbauend, kann man weitere Scripte erstellen, die das Licht ein und ausschalten.
Viel Spaß!
Sollte es Probleme geben, einfach melden.