Ich habe mich mal wieder mit Bluetooth und BLE beschäftigt.
Ich habe ein super simples Python Script für den Pi geschrieben:
#!/usr/bin/python
import bluetooth
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/bl/remote"
mqtt_publish="/device/bl/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)
print "In/Out Board"
while True:
print "Scanning " + time.strftime("%a, %d %b %Y %H:%M:%S")
#print "Scanning " + time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime())
client.loop_start()
result = bluetooth.lookup_name('40:9C:28:01:F3:82', timeout=5)
if (result != None and anw1 =="false"):
print "Danny: in"
message="{\"devicename\":\"Danny\",\"model\":\"presenter\", \"room\":\"labor\", \"infoart\":\"present\",\"value\":\"true\"}"
client.publish(mqtt_publish, message, qos=1)
anw1="true"
if (result == None and anw1 =="true"):
print "Danny: out"
message="{\"devicename\":\"Danny\",\"model\":\"presenter\", \"room\":\"labor\", \"infoart\":\"present\",\"value\":\"false\"}"
if anw1 =="true": client.publish(mqtt_publish, message, qos=1)
anw1="false"
result = bluetooth.lookup_name('98:CA:33:BF:0F:5D', timeout=5)
if (result != None and anw2 =="false"):
print "Mom: in"
message="{\"devicename\":\"Mom-PPI\",\"model\":\"presenter\", \"room\":\"labor\", \"infoart\":\"present\",\"value\":\"true\"}"
client.publish(mqtt_publish, message, qos=1)
anw2="true"
if (result == None and anw2 =="true"):
print "Mom: out"
message="{\"devicename\":\"Mom-PPI\",\"model\":\"presenter\", \"room\":\"labor\", \"infoart\":\"present\",\"value\":\"false\"}"
client.publish(mqtt_publish, message, qos=1)
anw2="false"
time.sleep(1)
Das Script scannt jede 5 Sekunden welche Bluetoothgeräte in Reichweite sind und wenn die Mac Adresse übereinstimmt dann sendet Sie per MQTT, und wenn es das Gerät wieder weg ist, wird diese Info auch via MQTT gesendet…