Ich habe mich mal wieder mit Bluetooth und BLE beschäftigt.
Ich habe ein super simples Python Script für den Pi geschrieben:
from proximity import *
import time
import paho.mqtt.client as paho
import json
#Config
mqtt_username="lol"
mqtt_password="lol"
mqtt_server="192.168.4.5"
mqtt_port="1883"
mqtt_subscribe="/device/ble/remote/"
mqtt_publish="/device/ble/status/"
global anw1
global anw2
anw1="false"
anw2="false"
def on_subscribe(client, userdata, mid, granted_qos):
print("Subscribed: "+str(mid)+" "+str(granted_qos))
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload))
client = paho.Client(client_id="pwm", clean_session=True, userdata=None, protocol=paho.MQTTv31)
client.on_subscribe = on_subscribe
client.on_message = on_message
client.username_pw_set(mqtt_username, mqtt_password)
client.connect(mqtt_server, mqtt_port,60)
client.subscribe(mqtt_subscribe, qos=1)
b1="e2c56db5dffb48d2b060d0f5a71096e1"
b2="069e7943160f02011b0bff4c00090603"
b3="4152554ef99b4a3b86d0947070693a78"
b4="ce2a63cd69c80e02011a0aff4c001005"
b5="fe024f5843424d5f6d762d4a49000001"
b6="0100018a1819930b770b02010607ff4c"
scanner = Scanner(loops=3)
pi="false"
piweg=0
while True:
for beacon in scanner.scan():
#print beacon
mac=beacon.split(',')[0]
uuid=beacon.split(',')[1]
major=beacon.split(',')[2]
minor=beacon.split(',')[3]
db1=beacon.split(',')[4]
db2=beacon.split(',')[5] #RFFI !
if uuid =="b9407f30f5f8466eaff925556b57fe6d":
print "UUID: "+uuid +" Major: "+major +" Minor: "+minor +" Mac: "+mac +" RFFI:",db1,db2
if uuid =="b9407f30f5f8466eaff925556b57fe6d" and pi=="false":
print "pi beacon da"
pi="true"
piweg=0;
message="{\"devicename\":\"Danny BTL\",\"model\":\"presenter\", \"room\":\"labor\", \"infoart\":\"present\",\"value\":\"true\"}"
client.publish(mqtt_publish, message, qos=1)
if uuid =="b9407f30f5f8466eaff925556b57fe6d" and pi=="true":
piweg=0
if uuid !="b9407f30f5f8466eaff925556b57fe6d" and pi=="true":
piweg=piweg +1
#print piweg
if uuid !="b9407f30f5f8466eaff925556b57fe6d" and pi=="true" and piweg >=30:
print "pi nicht beacon da"
pi="false"
message="{\"devicename\":\"Danny BTL\",\"model\":\"presenter\", \"room\":\"labor\", \"infoart\":\"present\",\"value\":\"false\"}"
client.publish(mqtt_publish, message, qos=1)
client.loop_start()
Das Script scannt dauerhaft welche BLE-Geräte in Reichweite sind und wenn die UUID Adresse übereinstimmt dann sendet Sie per MQTT, und wenn es das Gerät wieder weg ist, wird diese Info auch via MQTT gesendet…