Habe hier mal ein Bluetooth Pairing mit einen RaspberryPi2 mit Bluetooth Dongle dokumentiert.
Sobald das Gerät in Reichweite/außer Reichweite wird eine URL aufgerufen.
Bluetooth Namen vergeben
nano /etc/machine-info
PRETTY_HOSTNAME=DoorPi
service bluetooth restart
Pairing (Bluetooth MAC Beispielhaft!)
sudo bluetoothctl
[bluetooth]# agent on
[bluetooth]# default-agent
[bluetooth]# scan on
Gerät koppeln
Ausgabe: [NEW] Device AA:BB:CC:DD:EE:FF
[bluetooth]# pair AA:BB:CC:DD:EE:FF
[agent] Confirm passkey 641018 (yes/no): yes
Gerät vertrauen
[bluetooth]# trust AA:BB:CC:DD:EE:FF
Bluetooth RSSI Script
Das RSSI Script, versucht eine Verbindung zur jeweiligen Bluetooth MAC Adresse.
Für die "in Range" Funktion benutze ich den RSSI Level. Sobald dieser dauerhaft >= 0 ist wird ein DoorPi
Web Event ausgelöst.
Wird der Wert -9 (sobald eine Mauer dazwischen) unterschritten wird ein weiteres Event im DoorPi ausgelöst.
Auch hier entsprechend die Device Adresse beispielhaft.
Folgendes an Deine Umgebung anpassen:
doorpikeyboard, keylesstaste,user & Password (door:pi), Port(@127.0.0.1:8080)
#Global VARS:
device="AA:BB:CC:DD:EE:FF"
doorpikeyboard=bluetooth
keylesstaste="keyless1"
btconnected=0
btcurrent=-1
counter=0
notconnected="0"
connected="1"
rssi=-1
reichweite=0
togreichweite=5
sendreichweite=5
ausserReichweite=-9
#Command loop:
while [ 1 ]; do
cmdout=$(hcitool rssi $device)
btcurrent=$(echo $cmdout | grep -c "RSSI return value") 2> /dev/null
rssi=$(echo $cmdout | sed -e 's/RSSI return value: //g')
if [ $btcurrent = $notconnected ]; then
echo "Attempting connection..."
rfcomm connect 0 $device 1 2> /dev/null >/dev/null &
sleep 1
fi
if [ $btcurrent = $connected ]; then
echo "Device connected. RSSI: "$rssi
if [ $rssi -ge 0 -a $togreichweite -ge 0 ]; then
reichweite=1
fi
if [ $rssi -le $ausserReichweite ]; then
reichweite=0
fi
togreichweite=$rssi
fi
if [ $reichweite -ne $sendreichweite ]; then
curl "http://door:pi@127.0.0.1:8080/control/trigger_event?event_name=OnKeyDown_{$doorpikeyboard}.{$keylesstaste}$
sendreichweite=$reichweite
fi
if [ $btconnected -ne $btcurrent ]; then
if [ $btcurrent -eq 0 ]; then
echo "GONE!"
reichweite=0
fi
if [ $btcurrent -eq 1 ]; then
echo "HERE!"
fi
btconnected=$btcurrent
fi
sleep 1
done
Alles anzeigen
nur ein Beispiel wie es bei mir funktioniert.