HowTo - Anwesenheitserkennung mit Bluetooth

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

eiGelbGeek
Beiträge: 226
Registriert: 11. Aug 2019 06:39
Answers: 4

HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von eiGelbGeek »

#Presence Detection einrichten! (REST API)

#openHAB Items anlegen

Code: Alles auswählen

Switch GTag_1 "Gtag Schlüssel 1"
Switch GTag_2 "Gtag Schlüssel 2"
Switch GTag_3 "Gtag Schlüssel 3"
#Installation auf RaspberryPI

Code: Alles auswählen

sudo apt install jq bluez
#GTag IDs auslesen und notieren, wenn sie nirgends aufgedruckt sind ;-)

Code: Alles auswählen

sudo hcitool lescan
#Script einrichten

Code: Alles auswählen

sudo mkdir /usr/local/gtag_presence/

Code: Alles auswählen

sudo nano /usr/local/gtag_presence/presence_detection.sh
###### openhab_url und openhab_port anpassen! openhab_items und gtag_ids anpassen. Reihenfolge beachten! ######

Code: Alles auswählen

#!/bin/bash

###########################################
# Openhab presence detection using G-Tags #
#                             version 0.1 #
#                 copyright by eiGelbGeek #
###########################################

#configuration
openhab_url="192.168.10.10"
openhab_port="8484"
openhab_items=("GTag_1" "GTag_2" "GTag_3")
gtag_ids=("78:8F:88:99:89:6D" "78:8F:80:99:8D:88" "78:28:88:99:C8:38")

#From here changes can lead to loss of function!
filename=/tmp/bluetooth_devices.$$
hcitool lescan > $filename & sleep 10
pkill --signal SIGINT hcitool
sleep 1
for ((i=0;i<${#gtag_ids[@]};++i)); do
  searchresult=$(grep -c ${gtag_ids[i]} $filename)
  current_state="$(curl -X GET --header "Accept: application/json" "http://$openhab_url:$openhab_port/rest/items/${openhab_items[i]}" | jq -r '.state')"
  if [ $searchresult -gt 0 ]; then
    if [ $current_state == "OFF" ]; then
      curl -X POST --header "Content-Type: text/plain" --header "Accept: application/json" -d "ON" "http://$openhab_url:$openhab_port/rest/items/${openhab_items[i]}"
    fi
  else
    if [ $current_state == "ON" ]; then
      curl -X POST --header "Content-Type: text/plain" --header "Accept: application/json" -d "OFF" "http://$openhab_url:$openhab_port/rest/items/${openhab_items[i]}"
    fi
  fi
done
rm $filename
#Script Rechte anpassen!

Code: Alles auswählen

sudo chmod u+x /usr/local/gtag_presence/presence_detection.sh
#Cronjob einrichten (in diesen Beispiel wird alle 2 Minuten nach den GTags gesucht)

Code: Alles auswählen

sudo crontab -e

Code: Alles auswählen

0-59/2 * * * * bash /usr/local/gtag_presence/presence_detection.sh >/dev/null 2>&1

eiGelbGeek
Beiträge: 226
Registriert: 11. Aug 2019 06:39
Answers: 4

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von eiGelbGeek »

#MQTT Presence Detection einrichten!

#openHAB Items anlegen

Code: Alles auswählen

Switch GTag_1 "G-Tag 1" { channel="mqtt:topic:presence:GTag_1" }
Switch GTag_2 "G-Tag 2" { channel="mqtt:topic:presence:GTag_2" }
Switch GTag_3 "G-Tag 3" { channel="mqtt:topic:presence:GTag_3" }
#openHAB Thing anlegen

Code: Alles auswählen

Thing mqtt:topic:presence "MQTT - Presence - GTags" (mqtt:broker:YOURBROKER) {
    Channels:
      Type switch : GTag_1 "GTag 1" [ stateTopic="/geeknet/presence/GTag_1/status" ]
      Type switch : GTag_2 "GTag 2" [ stateTopic="/geeknet/presence/GTag_2/status" ]
      Type switch : GTag_3 "GTag 3" [ stateTopic="/geeknet/presence/GTag_3/status" ]
}
#Installation auf RaspberryPI

Code: Alles auswählen

sudo apt install jq bluez mosquitto-clients
#GTag IDs auslesen und notieren, wenn sie nirgends aufgedruckt sind ;-)

Code: Alles auswählen

sudo hcitool lescan
#Script einrichten

Code: Alles auswählen

sudo mkdir /usr/local/gtag_presence/

Code: Alles auswählen

sudo nano /usr/local/gtag_presence/presence_detection.sh
###### Script ANFANG - mqtt_broker_ip, mqtt_broker_port und mqtt_topic anpassen! openhab_items und gtag_ids anpassen. Reihenfolge beachten! ######

Code: Alles auswählen

#!/bin/bash

########################################
# MQTT presence detection using G-Tags #
#                          version 0.2 #
#              copyright by eiGelbGeek #
########################################

#configuration
mqtt_broker_ip="192.168.10.15"
mqtt_broker_port="1883"
mqtt_topic="/geeknet/presence/"
openhab_items=("GTag_1" "GTag_2" "GTag_3")
gtag_ids=("78:8F:88:99:89:6D" "78:8F:80:99:8D:88" "78:28:88:99:C8:38")

#From here changes can lead to loss of function!
filename=/tmp/bluetooth_devices.$$
hcitool lescan > $filename & sleep 10
pkill --signal SIGINT hcitool
sleep 1

for ((i=0;i<${#gtag_ids[@]};++i)); do
  searchresult=$(grep -c ${gtag_ids[i]} $filename)
  if [ $searchresult -gt 0 ]; then
      mosquitto_pub -h $mqtt_broker_ip -p $mqtt_broker_port -t $mqtt_topic${openhab_items[i]}/status -m ON
  else
      mosquitto_pub -h $mqtt_broker_ip -p $mqtt_broker_port -t $mqtt_topic${openhab_items[i]}/status -m OFF
  fi
done
rm $filename
#Script Rechte anpassen!

Code: Alles auswählen

sudo chmod u+x /usr/local/gtag_presence/presence_detection.sh
#Cronjob einrichten (in diesen Beispiel wird alle 2 Minuten nach den GTags gesucht)

Code: Alles auswählen

sudo crontab -e

Code: Alles auswählen

0-59/2 * * * * bash /usr/local/gtag_presence/presence_detection.sh >/dev/null 2>&1

Benutzeravatar
Steinspiel
Beiträge: 394
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von Steinspiel »

Moin,
eiGelbGeek hat geschrieben: 1. Feb 2020 02:18 [...]
#Script einrichten

Code: Alles auswählen

sudo mkdir /usr/local/gtag_presence/

Code: Alles auswählen

sudo nano /usr/local/gtag_presence/presence_detection.sh
###### Script ANFANG - mqtt_broker_ip, mqtt_broker_port und mqtt_topic anpassen! openhab_items und gtag_ids anpassen. Reihenfolge beachten! ######
Also bis hier war ich ja richtig ein wenig stolz auf mich wie ich Deine Anleitung umgesetzt habe : es lief! :-)

Aber: beim "#Script einrichten" wurde die Datei aufgerufen die ich in Teil 1 angelegt hatte! Ist das richtig? Falls ja, soll ich diese "MQTT - Sache" einfach unten anhängen, speichern und gut?

Und dann noch: openhab_itms + gtag_ids anpassen kriege ich hin, aber woher bekomme ich die Daten für
mqtt_broker_ip / mqtt_broker_port / mqtt_topic ?
Ich habe was über Mosquitto, Mosca usw gelesen. das ist ein Dienst, oder? Muss ich vorher was aktivieren / installieren was noch nicht geschehen ist oder wie erfahre ich die IP Adresse und restliche Daten?

Würde mich freuen wenn Du mir noch über diese Hürde helfen könntest.
schönen Abend...
bis dann, Steinspiel

Benutzeravatar
Steinspiel
Beiträge: 394
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von Steinspiel »

Steinspiel hat geschrieben: 1. Feb 2020 20:02 [...]
Würde mich freuen wenn Du mir noch über diese Hürde helfen könntest.
Das ist ein Binding, stimmts?
Ich mache mich gleich drann.... :-(
bis dann, Steinspiel

eiGelbGeek
Beiträge: 226
Registriert: 11. Aug 2019 06:39
Answers: 4

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von eiGelbGeek »

Das sind 2 verschiedene Methoden ... einmal über RestAPI und einmal über MQTT :mrgreen:

Wenn du es über die Rest API eingerichtet hast, dann musst du nichts mehr machen ....

Also entweder Beitrag 1 oder 2 :)

Benutzeravatar
Steinspiel
Beiträge: 394
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von Steinspiel »

Nabend,

Zuerst dachte ich das auch das es zwei verschieden Sachen wären, aber dann... ;-(

OK, dann lass ich das mal alles so wie es ist und probiere mit der REST API weiter. Ich bin mir sicher Du hörst noch von mir. ;-)
bis dann, Steinspiel

Benutzeravatar
Steinspiel
Beiträge: 394
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von Steinspiel »

Da bin ich schon wieder und ziemlich Ratlos dazu...
Die Konfiguration bei mir nach Deinem REST API Beispiel scheint ja geklappt zu haben, denn eine Fehlermeldung hatte ich ja nicht.

Nur wie prüfe ich ab die G-Tag online sind? Im EventLog ist nichts von ihnen zu sehen (auch nach einem Neustart nicht)
Meine Regel die bei Erkennen eines G-Tag erst einmal ein Licht einschaltet hat scheinbar für mich keine Fehler, funktioniert aber trotzdem nicht:

Code: Alles auswählen

rule "G_Tag"

when
    Item GTag_1 changed from OFF to ON                    // G-Tag ist Anwesend
then
        
    Flur2_an_aus.sendCommand(ON)                           // Lampe Flur_2, An

end
In einer (Test) Sitemap eingebunden brache auch keine Erfolge...
Wie mach ich das am besten?

Und in diesem Zusammenhang: Wie teste ich später Regeln am besten? Da ja nur alle zwei Minuten eine Abfrage erfolgt (wenn es denn funktioniert) müsste ich ja immer zwei Minuten das Haus verlassen... Oder kann man die G-Tag anders Offline bringen - Rules anpassen - wieder Online bringen?
Ach ja, hat diese "Bluetooth Abfrage" ein eigenes Log in denen es immer reinschreibt?

Du siehst, noch eine Menge an Fragen... ;-)
bis dann, Steinspiel

eiGelbGeek
Beiträge: 226
Registriert: 11. Aug 2019 06:39
Answers: 4

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von eiGelbGeek »

Irgendwo muss bei dir noch ein Fehler sein, wenn im Openhab Log nichts auftaucht...

Frag mal den Zustand von GTag_1 in der RestAPI ab... ich vermute mal das dieser NULL ist?

Steinspiel hat geschrieben: 1. Feb 2020 22:50 Und in diesem Zusammenhang: Wie teste ich später Regeln am besten? Da ja nur alle zwei Minuten eine Abfrage erfolgt (wenn es denn funktioniert) müsste ich ja immer zwei Minuten das Haus verlassen... Oder kann man die G-Tag anders Offline bringen - Rules anpassen - wieder Online bringen?
Du setzt einfach das GTag_1 Item über die RestAPI wieder auf OFF ... beim nächsten Scan geht es dann wieder auf ON und führt die Regel aus.

Wenn du dann die 2 Minuten bis zur nächsten Ausführung nicht warten willst, kannst du das Script natürlich auch von Hand ausführen.

Code: Alles auswählen

sudo bash /usr/local/gtag_presence/presence_detection.sh
Wenn du absolut nicht weiter kommst, können wir auch heute Nachmittag/Abend über z.b. TeamViewer das zusammen einrichten und testen :mrgreen:

Benutzeravatar
Steinspiel
Beiträge: 394
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von Steinspiel »

Moin,

Ich dachte immer ich geh spät schlafen... ;-)
eiGelbGeek hat geschrieben: 2. Feb 2020 04:38 Irgendwo muss bei dir noch ein Fehler sein, wenn im Openhab Log nichts auftaucht...
Also: ich habe jetzt ein "sauberes" Backup von Vorgestern gebootet(da hatte ich ja noch nichts gemacht mit den G-Tags) und

smarthome.event.ItemAddedEvent
smarthome.event.ItemStateEvent
smarthome.event.ThingAddedEvent
smarthome.event.ThingStatusInfoEvent

auf INFO gesetzt, die restlichen "smarthome.event.*" Logs stehen auf ERROR.

Dann habe ich alle Deine Anweisungen zur REST API Einrichtung ohne Fehlermeldung so umgesetzt wie sie da standen -> Im LogViewer tauchte nichts auf!
eiGelbGeek hat geschrieben: 2. Feb 2020 04:38 [...]
Frag mal den Zustand von GTag_1 in der RestAPI ab... ich vermute mal das dieser NULL ist?
Da geht es bei mir schon los: ich weiß das REST API eine Programm Schnittstelle ist aber ob ich die in openHAB extra einrichten muss ö.ä. ????

Ein Beispiel für meinen Fall habe ich gefunden: http://localhost:8080/rest/items/GTag_1
In der Shell bringt das natürlich nichts, im Browser kann diese Seite nicht aufgerufen werden... :-(
Aber in der *.items Datei in VS Code wird, wenn ich mit der Maus über das Item gehe ein "NULL" angezeigt

Ich glaube eine TeamViewer Sitzung würde mir helfen, nicht nur bei diesem Problem auch fürs allgemeine Verständniss...

Danke bis hier hin, Ich schreibe gleich mal eine PN...
bis dann, Steinspiel

Tomzk
Beiträge: 55
Registriert: 5. Nov 2019 11:04

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von Tomzk »

Hi eiGelbGeek,

ich bin gerade dabei Variante 2 per Mqtt zum laufen zu bekommen.
Was muss ich tuen, wenn mein MQTT Broker ein Benutzer/Passwort hat (nutze Mosquitto). Sehe im bash keine Möglichkeit dies zu ergänzen oder ist es egal?
Die Things habe ich über Items und dem passenden channel verbinden können. Mein Problem besteht gerade darin, dass ich wenn ich MQTT fx öffne, leider keine topics, die im bash definiert wurden finde.

Danke und Gruß
Tom

Antworten