Raspberry Pi + Python + MQTT + BLE = BTL Scanner

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…

@drapple

Hi, finde das sehr interessant. Könntest Du nähere Angaben dazu machen?

Danke,
Jürgen

@ immergut

welche Info hättest du den gerne ?

Habe mit MQTT bisher noch gar keine Erfahrung.
Möchte mehrere Gigaset G-Tags als Anwesenheitserkennung nutzen. Ist das damit zuverlässig möglich?
Was muss ich dafür wo installieren?
Zu deinem Script: Was ist b1 - b6?
Du siehst, viele Fragen und keine Ahnung:(

Grüße,
Jürgen

@drapple

Habe mit MQTT bisher noch gar keine Erfahrung.
Möchte mehrere Gigaset G-Tags als Anwesenheitserkennung nutzen. Ist das damit zuverlässig möglich?
Was muss ich dafür wo installieren?
Zu deinem Script: Was ist b1 - b6?
Du siehst, viele Fragen und keine Ahnung
Wenn ich das Python-Script auf dem Raspi ausführe, kommt zu aller erst mal ein Error:
ImportError: No module named proximity

Grüße,
Jürgen