HowTo - Anwesenheitserkennung mit Bluetooth

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

Moderatoren: Cyrelian, seppy

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

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von Steinspiel »

Nabend,
peter-pan hat geschrieben: 15. Feb 2020 20:18 Frage ist bei dir das REST Api installiert (PaperUI) ?
Ja, die/das hatte ich gleich damals installiert als ich versucht hatte raus zu finden wie das funktioniert...

peter-pan hat geschrieben: 15. Feb 2020 20:18 Dann solltest du eigentlich alle Infos haben.
Auf jeden Fall bin ich jetzt durch Deine Screenshots schon mal weiter als alles quergelese bisher gebracht hat!
Gut, in "Response Body" sehe ich meine Daten, WAS mach ich jetzt damit oder daraus, eine Regel? Denn im LogViewer sehe ich "GTag_1" immer noch nicht!
peter-pan hat geschrieben: 15. Feb 2020 20:18 Aber ehrich gesagt, ich finde die MQTT-Variante eleganter ;) . Das ist natürlichg Geschmackssache.
Nach dem was ich gelesen habe scheint solch ein "Broker" jede Menge Möglichkeiten zu bieten um Daten "anderer" Programme ab zu fragen. Aber ich glaube ich bin froh wenn ich so halbwegs hinter das hier steige um mich dann so langsam nach vorn zu arbeiten... ;)
Wie gesagt, ein paar Hinweise wie ich mit den jetzt gewonnenen Daten weiter mache, würden mich freuen!
bis dann, Steinspiel

Benutzeravatar
udo1toni
Beiträge: 13856
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von udo1toni »

peter-pan hat geschrieben: 15. Feb 2020 20:18 Frage ist bei dir das REST Api installiert (PaperUI) ?
Ich bin ja immer Korinthenkacker...

Die REST API ist fester Bestandteil von openHAB und kann nicht "nicht installiert" werden. Der installierbare Teil ist die REST API Dokumentation die man nicht unbedingt braucht, sie macht aber die Arbeit einfacher, da sie die notwendigen Aufrufe interaktiv und passend zum eigenen System liefert.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von peter-pan »

udo1toni hat geschrieben: 15. Feb 2020 23:53 Die REST API ist fester Bestandteil von openHAB
...sorry, ich meinte natürlich "REST Documentation", so wie du es auch beschrieben hast. :oops:
Steinspiel hat geschrieben: 15. Feb 2020 21:03 Gut, in "Response Body" sehe ich meine Daten
...und genau zwei Zeilen darüber findest du die "Curl - Anweisung" mit den Werten, die du in das Script einsetzen musst

Code: Alles auswählen

......
#configuration
openhab_url="192.168.10.10"
openhab_port="8484"
.......
und natürlich auch das/die Daten-Pärchen für deine(n) GTag:

Code: Alles auswählen

openhab_items=("GTag_1")
gtag_ids=("7C:2F:80:C3:9F:18")
Wenn das passt, solltest du nach einem manuellen Aufruf

Code: Alles auswählen

[20:14:18] hab@ohtest:/usr/local/gtag_presence$ sudo ./presence_detection.sh
oder wenn du die Cron-Anweisung bereits aktiviert hast, das, oder so ähnlich, in deiner Sitemap sehen
gtag.jpg
bzw. so eine oder ähnliche Meldung im Logger

Code: Alles auswählen

2020-02-16 02:47:42.042 [INFO ] [jsr223.jython.absence detection     ] - GTag_1 has switched to ON
... und wenn das alles klappt, kannst du deine Regel bauen, die dir z.B. eine Mitteilung sendet, wenn der GTag nicht mehr "ON" ist und das Fenster noch offen steht.

... und ich kann dazu auch meinen "Popel-Fitness-Tracker" noch mit einbinden :D und sozusagen als Bluetooth-Trigger-Item verwenden.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

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

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von eiGelbGeek »

peter-pan hat geschrieben: 15. Feb 2020 19:13 ...ok, hab die Logik verstanden(noch nicht im Detail), aber Expire, will ich mir nicht mehr unbedingt hochladen (OH1)
Als alternative kannst du natürlich auch einen einfachen Timer in einer Rule benutzen... ich finde Expire nur einfacher zu handhaben... mal sehen ob das Expire Binding für OH3 ein Update bekommt ... sonst muss ich auch einiges bei mir umbauen :mrgreen: :mrgreen: :mrgreen:

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

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von Steinspiel »

Moin,

Zuerst, obwohl diese GTag`s für mich wichtig sind, zum einen das sie "laufen" zum anderen das ich endlich schnalle wie es funktioniert, kann ich erst heute Antworten...

Ich bin jetzt ALLES noch einmal durchgegangen:

Ein ITEM ist in Datei angelegt

Code: Alles auswählen

Switch GTag_1 "Gtag Schlüssel 1"
Ich habe nur ein ITEM angelegt (der besseren Übersicht wegen) obwohl ich bereits zwei GTags aktiviert habe.

ITEM ist in Paper UI sichtbar, aber ich denke das auch nur deshalb, weil es in der *.ITEMS angelegt ist.

Bild

die Installation auf Raspberry mit

Code: Alles auswählen

sudo apt install jq bluez
ist durchgeführt

auslesen der GTags mit

Code: Alles auswählen

sudo hcitool lescan
funktioniert (beide aktivierten Gtags werden angezeigt)

Bild

Script ist eingerichtet, Daten eingetragen und die Rechte sind angepasst

Bild

Cronjob ist eingerichtet

Bild

In der Rest API UI wird mir das eine eingerichtete ITEM angezeigt. Auffällig gegenüber Deinem Screenshot: bei mir wird "http://openhab***" und nicht wie bei Dir die IP Adresse angezeigt.

Bild

peter-pan hat geschrieben: 16. Feb 2020 02:59 ...und genau zwei Zeilen darüber findest du die "Curl - Anweisung" mit den Werten, die du in das Script einsetzen musst
Diese Daten hatte ich ja schon vorher in das Script eingefügt.
peter-pan hat geschrieben: 16. Feb 2020 02:59 Wenn das passt, solltest du nach einem manuellen Aufruf

Code: Alles auswählen

sudo ./presence_detection.sh
habe ich mehrfach eingegeben und das kommt dabei raus:

Bild

Im LogViewer gab es allerdings keine Anzeige die auf den GTag schließen ließ!
peter-pan hat geschrieben: 16. Feb 2020 02:59 oder wenn du die Cron-Anweisung bereits aktiviert hast, das, oder so ähnlich, in deiner Sitemap sehen
An meiner Sitemap hat sich nichts geändert.

Bild

Allerdings weiß ich nicht ob ich die richtig eingerichtet habe:

Code: Alles auswählen

            Frame label="GTag - Test" {
            Switch item=GTag_1   label="Gtag Schlüssel 1 gruen"
Was meinst Du, ist das was bei "presence_detection" angezeigt wird eine Meldung das der GTag "da" ist und ich ihn nur noch nicht sehe?
Ich glaube ich stehe ziemlich auf dem Schlauch und kann mich nur für Deine Geduld bedanken... ;-)
bis dann, Steinspiel

Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von peter-pan »

... also ich hab das vorhin auch mal mit der REST Api Version ausprobiert und auch die funktioniert bei mir einwandfrei.

Was ich bei deinen Ausführungen soweit erkennen kann sollte das auch eigentlich funktionieren. Was das Anlegen des Items anbelangt ist es eigentlich egal, ob du die PaperUI benutzt oder die text-basierende Version. Nur solltest du das nicht gleichzeitig tun (für das selbe Item).

Was mir aber aufgefallen ist, dass in deiner REST Docs die URL als "openhab" angezeigt wird und nicht die IP-Adresse (192.168.178.y) und das der Status (state) "NULL" ist. Das sieht für mich so aus, als ob das Item nicht von dem "curl" gefunden wird. Das ist schon etwas komisch. Aber vielleicht ist das SetUp bedingt.

Also als Information aus dem Logger(Test-RasPi) bekomme ich:

Code: Alles auswählen

2020-02-17 17:14:42.033 [ome.event.ItemCommandEvent] - Item 'GTag_1' received command ON
 2020-02-17 17:14:42.070 [INFO ] [jsr223.jython.absence detection     ] - GTag_1 has switched to ON
Das funktioniert bei mir sogar über zwei RasPis. Auf dem einen läuft das Script(Test) mit der Suche und auf dem anderen wird das Item in OH befüllt.(Ip-Adresse ist dann die vom Produktions-Rechner)
Logger - Produktions-RasPi:

Code: Alles auswählen

2020-02-17 17:20:50.368 [ome.event.ItemCommandEvent] - Item 'GTag_1' received command ON
2020-02-17 17:20:50.379 [vent.ItemStateChangedEvent] - GTag_1 changed from OFF to ON
Vielleicht ein Tipp am Rande; Füge mal zwei Zeilen (nach dem sleep 1) in dein Script ein, so:

Code: Alles auswählen

#!/bin/bash

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

#configuration
openhab_url="192.168.178.xx"
openhab_port="8080"
openhab_items=("GTag_1")
gtag_ids=("7C:2F:80:C3:9F:18")

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


sleep 1

echo $filename   # das sind die neuen Zeilen
cat $filename     # das sind die neuen Zeilen


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]}$
  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_por$
    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_po$
    fi
  fi
done
rm $filename
Die Zeilen kannst du wieder auskommentieren (mit Hashtag) oder löschen

Wenn das nicht hilft, weiss ich auch nicht mehr. :(
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

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

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von eiGelbGeek »

peter-pan hat geschrieben: 17. Feb 2020 17:40 Was mir aber aufgefallen ist, dass in deiner REST Docs die URL als "openhab" angezeigt wird und nicht die IP-Adresse (192.168.178.y)
Das wird nur von openhabian ein gesetzter Hostname sein, ansprechen über IP geht immer.

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

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von eiGelbGeek »

Mache mal folgendes in der Command Zeile... nur um zu testen und ggf den Fehler einzugrenzen.. ich sehe keinen Fehler in deiner Konfiguration.

Code: Alles auswählen

curl -X POST --header "Content-Type: text/plain" --header "Accept: application/json" -d "ON" "http://192.168.178.XX:8080/rest/items/GTag_1"
anschliessend frage noch mal den Status des Items ab.... dann sollte dieser ON sein... und damit wäre schonmal sicher gestellt, das es nicht an openhab liegt, sondern irgendwas im Script falsch läuft. Ist es immer noch NULL dann läuft in deiner openhab Konfiguration irgendwas falsch.

Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von peter-pan »

eiGelbGeek hat geschrieben: 18. Feb 2020 13:00 Das wird nur von openhabian ein gesetzter Hostname sein, ansprechen über IP geht immer.
Genau, das habe ich auch gemeint. Also bei mir funktioniert es ja mit der IP-Adresse. Mich hat nur gewundert, das beim OP die IP-Adresse nicht angezeigt wird, sondern evtl. das Alias, oder REST funktioniert bei ihm nicht. :|

Das mit dem Einfügen der zwei Zeilen habe ich deswegen gepostet, weil nach dem Copy/Paste deines Scriptes und einem manuellen Aufruf des Scriptes bei mir erst mal auch nichts passiert ist. Aber nachdem ich die zwei "echos" eingebaut hatte lief's dann. Ich hab sie dann wieder rausgenommen. Ab da war alles ok. Ich vermute mal, dass der Copy/Paste in den Nano-Editor irgendwie was vergessen hat (diletantisch gesagt) und durch die Änderung dann alles wieder in Ordnung gebracht hat. Diese Verhalten hatte ich sowohl im MQTT- als auch im REST-Script.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

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

Re: HowTo - Anwesenheitserkennung mit Bluetooth

Beitrag von Steinspiel »

Leute: et jeht ! :D :lol: :D :lol:
eiGelbGeek hat geschrieben: 18. Feb 2020 13:05 Mache mal folgendes in der Command Zeile...
[...]
Ich habe Deinen Befehl in der Command Zeile eingefügt, den Status abgefragt und gut! Die Tags werden im LogView angezeigt, Super!

Habe dann den halben Nachmittag probiert: 2. GTag eingerichtet, ne einfache Rule zum schalten zweier Lampen erstellt und die Tags dann immer runter in den Keller gebracht damit sie außer Sendereichweite sind und wieder hochgetragen ... ;-)

Eines ist mir aufgefallen, bootet der Raspberry neu, funktioniert die Tags NICHT und die RestAPI Abfrage ergibt NULL.
Ich muß dann die Switches in der SiteMap einmal von Hand schalten damit die Abfrage ON oder OFF ergibt (je nachdem ob sie im Keller waren oder nicht). Lohnt es sich das automatisieren das sie nach einem Neustart automatisch wieder online sind oder ist das aufwendig?

Egal wie, ich freu mich und ich danke euch alle die so viel Geduld mit mir hatten!

Eines habe ich noch: den Cronjob habe ich jetzt auf eine Minute gesetzt und eigentlich will ich die Abfrage alle paar Sekunden haben damit das Licht schnell schaltet wenn die Haustür aufgeht. Spricht irgendwas dagegen wie z.B. viele Schreibzugriffe auf das Script / SDCard oder was weiß ich?

Und wäre das der richtige Befehl im Skript?

Code: Alles auswählen

0/5 0 0? * * * bash /usr/local/gtag_presence/presence_detection.sh >/dev/null 2>&1
Nochmals vielen Dank!
bis dann, Steinspiel

Antworten