Raspberry Pi als iBeacon Scanner für Schlüsselbunddongle

ok hat jetzt funktioniert.
Ich hab zuerst das Script gestartet und dann den scan.
Die UID hab ich jetzt. Auf dem Handyscaner sind die letzten Stellen aber anders.
Probiere morgen dann den Rest mit der UID.

Gruss Sven

Hi,

Die UUID unterscheidet sich tatsaechlich, aber das macht keinen Unterschied. Nutze immer die UUID aus dem Script.

nun ja also so richtig funktionierts mit dem pi3 nicht.
als erstes habe ich zwei UID für ein tracker.
Beide gehen nicht beim presence.sh Script.

Was mich wundert ist , das der Tracker im Listing / Scan nur einmal erscheind.
Kann es sein das hier BTEL greift ?


root@raspberrypi:~# hcitool lescan
LE Scan ...
7C:2F:80:AC:00:FF (unknown)
7C:2F:80:AC:00:FF Gigaset G-tag
7C:2F:80:8F:0F:D1 (unknown)
7C:2F:80:8F:0F:D1 Gigaset G-tag
54:F6:89:76:E5:3C (unknown)
54:F6:89:76:E5:3C (unknown)


root@raspberrypi:~/bluez/bluez-5.38# /root/bluez/bluez-5.38/tools/hcidump --raw | /root/ibeacon_scan.sh
123480AC-00FF-BBC5-0302-0F1800000000
1234808F-0FD1-BBC5-0302-0F1800000000

Wenn ihr den lescan macht kommt dann euer Tracker immer wieder neu ?

Gruss Sven

so bin jetzt ein wenig weiter mit der Auswertung.
der Befehl „hcitool lescan“ läuft zwar, aber es kommen maximal neue Geräte dazu. Der Raspi3 selber sucht von sich aus nur ein mal. Zumindesdens ist das so im Sniffer zu erkennen.

Hat schon jemand gleiche Erfahrungen gemacht ?

Gruß Sven

Moin, also es liegt wohl an lescan. Wenn ich einen normalen scan on mache funktioniert es soweit so gut.
Bin aber nicht der Überzeugung den Bluetooth Datenverkehr ab zu hören und deshalb auf Anwesend oder Abwesend zu stellen. Ich werde mir eher eine Lösung basteln sich mit dem Gerät zu connecten und wenn das erfolgreich war, dann setzte ich den Status.

Gruß Sven

Ich hab so eine Prozedur auf mehreren Raspis laufen und bin damit zufrieden, hatte ich mal kurz hier beschrieben

Ich werde mir eher eine Lösung basteln sich mit dem Gerät zu connecten und wenn das erfolgreich war, dann setzte ich den Status.

Sehr gut!
Das wäre dann die Lösung, an der ich bisher gescheitert bin und auch nirgends im Netz eine Rezeptur gefunden habe. Bin aber von diversen „iBeacon Development Kits“ zurückgeschreckt, weil die meist für Android ausgelegt sind. Mit gatttool kam ich auch nicht klar.

Lasse uns bitte an Deiner Lösung teilhaben :loveips:

Viele Grüsse
Harald

Hallo lahlor,

deine Methode läuft bei mir mit einem G-Tag einwandfrei. (Lescan starte ich jedoch als cronjob, somit ist die Sache etwas „rebootfester“)

Füge ich jedoch einen 2. G-Tag hinzu wird es instabil.
Heißt dieser wird sporadisch als abwesend erkannt obwohl er nicht bewegt wurde.
Scanne ich nur diesen 2. Tag läuft es wieder einwandfrei.

Wie wäre die Beste Möglichkeit 2 Tags zu scannen ?

Aktuell lasse ich 2 presence.sh Scripte mit 30 Sekunden Zeitversatz laufen. (finde ich suboptimal).

Für etwas Hilfe wäre ich dankbar.

Bye

gmop

Hi gmop,

ich muss gestehen, dass ich es derzeit auch nur über zwei „presence“ Scripte abbilde und durchaus auch das ein oder andere mal falsche Werte erhalte. Ich bin selbst nicht super glücklich damit, aber mir fehlt derzeit einfach die Zeit etwas daran zu ändern :slight_smile:

Wenn einer von euch bereits einen guten Workaround gefunden hat, oder Verbesserungen hat, kann dies gerne hier teilen.:stuck_out_tongue:

Hallo lahlor,

Danke für dein Feedback.
Mittlerweile konnte ich das Problem lösen.

Im „ibeacon_scan.sh“ muss der Wert „while read -t 10 line“ von 10 erhöht werden. (hier habe ich 20 eingetragen. Den Timeout habe ich ebenfalls auf 40 verdoppelt und natürlich die Werte in presence.sh angepasst)
Nun erkennt er seit ca. 24 Stunden sauber ohne Aussetzer beide G-spots.
2 presence Scripte sind nun ebenfalls nicht mehr nötig.
Es reicht im vorhandenen eine 2. Abfrage samt Auswertung einzubauen.
Mittels crobntab läuft das Ganze bei mir alle 15 Sekunden.

Bye

gmop

Hallo zusammen,

ich hab mir mal bei ebxx so günstige Bluetooth Tags bestellt und versucht, die mit dem Skript hier zum Laufen zu bringen. Allerdings spuckt mir das „ibeacon_scan.sh“-Skript keine UUID aus. Wenn ich ein zusätzliches „echo“ in das Skript packe, kommt da schon was raus, allerdings kann ich nicht erkennen, was das genau ist. Deshalb die Frage, ob das schon mal jemand probiert hat? Oder kann vielleicht jemand helfen?

Gruß & Danke,
dfhome

Hallo zusammen,

hab´s hinbekommen; geh jetzt nicht über die UUID des Tags sondern über dessen MAC. Ich erweiter es grad noch auf zwei Tags, dann poste ich mal die Raspi-Skripte. Eventuell kann´s ja jemand gebrauchen.
Will jetzt noch per USB-Verlängerung über CAT den BT-Dongle in unseren Windfang legen, damit er sicher in Reichweite der Tags (die am Schlüsselbund hängen) ist. :slight_smile:

Gruß
dfhome

Danke allen für die guten Infos und Ideen.

Da ich ein zentrales (Windows) IPS habe und dezentral den Raspi mit den Scripts: wie kriege ich jetzt den Anwesend/Abwesend Status ins IPS?

Danny

Viele Grüsse
Harald

Hallo,
erstmal Danke für die tolle Anleitung. Generell läuft auch der Scan und die Anwesenheitskontrolle gut.
Ich habe jedoch das Problem, daß nach einem Reboot meines Raspberry der Scan nicht automatisch gestartet wird. Ich muss also über Putty den Befehl "…/tools/hcitool lescan " ausführen damit der Beacon gefunden wird. Dann kann ich Putty wieder schließen und und alles ist in Ordnung.
Wie kann ich jetzt automatisch den lescan-Befehl beim Reboot anstoßen?

Grüße,
Jürgen

ich löse das so:

Aber wir wollen doch, das der ibeacon auch automatisch nach einem Reboot wieder läuft, ohne per Hand zu starten :

sudo nano /etc/rc.local
Jetzt hat sich der Editor mit einer Seite geöffnet, dort kopiert man folgende Befehle vor „exit 0“ rein :

/ibeacon/ibeacon_start.sh
dann beendet man den Editor mit STRG+X, dann y zum speichern, und dann enter drücken, dann gelangt man wieder auf Shell.

fertig :slight_smile:

Da IPS automatisch gestartet wird, gibt es bei mir ein Start-Skript, das entsprechend in EventControl eingetragen ist (EventHandler\IPS-Start). Dort wird ganz einfach das IPS-Skript gestartet, das wiederum per PHP das Scan-Skript aufruft, also z.B.

// Dirs in Linux
$SkriptDir = IPS_GetKernelDir () . 'scripts/';
$DatenDir = '/tmp/';

   exec ('sh ' . $SkriptDir . 'BLEscan.sh');    // sudo hcitool lescan > /tmp/Lescan.txt & sleep 3;pkill --signal SIGINT hcitool;sleep 1;

Viele Grüsse
Harald

@drapple,
danke, das war der richtige Denkanstoß für mich.
Habe allerdings in der rc.local nicht die ibeacon_start.sh eingetragen, sondern den Pfad zu lescan: „/home/pi/bluez/bluez-5.41/tools/hcitool lescan“. Die ibeacon_start.sh wird ja bei mir schon im crontab aufgerufen. Mir hat ja beim Reboot nur der lescan gefehlt. Jetzt funktioniert es.:smiley:

@T30,
dein Ansatz ist auch gut. Da der BLE-Scanner aber auf einem anderen Raspi läuft als IPS, weiß ich nicht, wie ich das dann anpassen muss.

Vielen Dank für eure Hilfe!!

Jürgen

Hi ich würde gerne „sudo hcitool lescan“ dauerhaft in Endlosschleife ausführen und die das was er ausspuckt an IPS zur Weiterverarbeitung senden.

Wie könnte ich das Umsetzten ?

Endlosschleife wird nicht gehen, weil

  1. das hcitool befeuert ständig eine Ausgabe (die man in eine Datei umleiten kann). Irgendwann muß man das ja abbrechen, sonst läuft der Speicher voll.
  2. die PHP-Skripte dürfen ja nur eine begrenzte Laufzeit haben, bei Überschreiben einer bestimmten Zeit werden sie im Objekt-Baum rot markiert und letztendlich vom System beendet.

Ich verwende z.Z. wie hierbeschrieben eine Laufzeit von 3 Sekunden + eine Wartezeit von 1 Sekunde. Im worst-case führt das zu einer Erkennungszeit von bis zu 4 Sekunden. Ist vor allem dann blöd, wenn man vor dem Garagentor steht und darauf gewartet, dass es geöffnet wird.

Ich hab deshalb vor, das hcitool länger laufen zu lassen und permanent die Ausgabe-Datei zu überprüfen, bin aber mit dem Skript noch nicht soweit.

Solltest Du inzwischen weitergekommen sein, kannst Du ja mal Dein Zwischenergebnis posten;)

Vielleicht treffen wir uns ja auch mal bei einem Stammtisch :stuck_out_tongue:

Viel Grüsse
Harald

Hallo zusammen,

ich bekomme einfach die UUID meines G-TAG nicht ausgelesen.

Wenn ich „sudo /ibeacon/bluez-5.35/tools/hcidump --raw“ eingebe erscheint folgende Liste:

sudo /ibeacon/bluez-5.35/tools/hcidump --raw
HCI sniffer - Bluetooth packet analyzer ver 5.35
device: hci0 snap_len: 1500 filter: 0xffffffff
> 04 3E 28 02 01 03 00 D3 08 54 27 97 C0 1C 1B FF 75 00 42 04 
  01 80 60 C0 97 27 54 08 D3 C2 97 27 54 08 D2 01 00 00 00 00 
  00 00 BD 
> 04 3E 27 02 01 00 00 66 45 B3 26 C6 88 1B 02 01 06 02 08 00 
  03 03 61 FE 10 FF 03 00 00 30 58 00 00 01 88 63 DF 3D 69 74 
  12 BA 
> 04 3E 17 02 01 00 01 14 AB E5 7F 53 7B 0B 02 01 1A 07 FF 4C 
  00 10 02 0A 40 B0 
> 04 3E 0C 02 01 04 01 14 AB E5 7F 53 7B 00 B0 
> 04 3E 27 02 01 00 00 66 45 B3 26 C6 88 1B 02 01 06 02 08 00 
  03 03 61 FE 10 FF 03 00 00 30 58 00 00 01 88 63 DF 3D 69 74 
  12 C9 
> 04 3E 23 02 01 04 00 66 45 B3 26 C6 88 17 16 FF 03 00 00 30 
  58 00 00 01 88 63 DF 3D 69 74 88 C6 26 B3 45 66 12 C7 
> 04 3E 28 02 01 03 00 D3 08 54 27 97 C0 1C 1B FF 75 00 42 04 
  01 80 60 C0 97 27 54 08 D3 C2 97 27 54 08 D2 01 00 00 00 00 
  00 00 BD 

Wenn ich jedoch „sudo /ibeacon/bluez-5.35/tools/hcidump --raw | /ibeacon/ibeacon_scan.sh“ eingebe, dann bekomme ich keine Ausgabe.

Ich gehe davon aus, dass das Problem „VOR“ dem Rechner sitzt. Habe die Anleitung jetzt zig Mal durchgelesen, bekomme es aber irgendwie leider nicht gebacken. :frowning:

Jemand eine Idee oder einen Tipp, damit ich an meine UUID komme?