Raspberry Pi als iBeacon Scanner für Schlüsselbunddongle

Jap ich leider :0( stand ist noch so wie oben.

Hi,

also zunächst muss im Hintergrund immer hcitool lescan laufen. Am Besten du machst es über screen und lässt es damit parallel laufen. Dann führe mal

/home/pi/ibeacon/bluez-5.35/tools/hcidump --raw | /home/pi/ibeacon_scan.sh

aus. Es sollte die UUID deines Beacons angezeigt werden.
Wenn du nur

./ibeacon_scan.sh

ausführst kann auch nichts passieren, da das Script Input braucht. Ich verwende „while read line“ und das bezieht sich auf den Output des anderen Scripts (hier: hcidump --raw).

Super Lars !

Das wars … läuft … vielen Dank !!!

Andreas

Hallo Lars,
ich versuche dein Projekt nachzubauen.
Dabei stehe ich im Moment an der Stelle wo ich sh ibeacon_scan.sh ausführen soll.

Ich bekomme immer einen Fehler in Zeile 4 angegeben:

ibeacon_scan.sh: 4: read: Illegal option -t

was mache ich da falsch?

LG
Werner

screen gibt auch nichts her?!?
Kann das sein, dass ich nicht über putty arbeiten darf?
Ich habe nämlich keinen Monitor am Pi angeschlossen.

Hallo Werner,

wie sieht denn deine Zeile 4 aus? Kannst du das mal schicken?
Doch du kannst über Putty arbeiten, da ich das auch nur mache und keinen Bildschirm dran habe.
Ist dein USB Dongle denn aktiv? Was gibt er dir aus, wenn du „/tools/hciconfig“ eingibst?
Bekommst du deinen Dongle über „/tools/hcitool lescan“ angezeigt?

DAnke für die schnelle Antwort.

die Zeile ist genau wie in deinem Script:

while read -t 10 line
do usw.

dongel ist aktiv:

hci0:   Type: BR/EDR  Bus: USB
        BD Address: 00:1A:7D:DA:71:09  ACL MTU: 310:10  SCO MTU: 64:8
        UP RUNNING
        RX bytes:1202 acl:0 sco:0 events:69 errors:0
        TX bytes:862 acl:0 sco:0 commands:69 errors:0
CODE]
-----------------------------------
hcitool lescan
LE Scan ...
7C:2F:80:AD:8D:1F (unknown)
7C:2F:80:AD:8D:1F (unknown)
7C:2F:80:AD:8D:1F Gigaset G-tag
7C:2F:80:AD:8D:1F (unknown)
7C:2F:80:AD:8D:1F (unknown)
7C:2F:80:AD:8D:1F Gigaset G-tag
7C:2F:80:AD:8D:1F (unknown)
7C:2F:80:AD:8D:1F Gigaset G-tag
7C:2F:80:AD:8D:1F (unknown)
7C:2F:80:AD:8D:1F (unknown)
7C:2F:80:AD:8D:1F Gigaset G-tag
7C:2F:80:AD:8D:1F (unknown)
7C:2F:80:AD:8D:1F Gigaset G-tag

usw.

bei eingabe von screen kommt erstmal nur ein Fenster und dann?
![Bildschirmfoto vom 2016-03-12 17:42:03.png|779x827](upload://6Y99jIgvQhm8wCboNY22gW1q7Mu.png)

Ok, das sieht alles erst einmal sehr gut aus. Bei screen musst du in dem Fenster aus deinem Screenshot irgendeine Taste drücken, damit du eine neue Session aufmachen kannst. In dieser neuen Session lässt du dann /tools/hcitool lescan dauerhaft laufen und beendest die Session durch STRG + a + d
Dadurch läuft diese im Hintergrund einfach weiter (auch wenn du die SSH Session beendest < putty schließt).
Mittels screen -r (r steht für reattach) kannst du wieder in die Session reingreifen.
So und nun zu deinem beacon_scan Script. Mir ist es schleierhaft, dass du da einen Fehler bekommst.
Kannst du bitte dein Script hier einmal komplett posten und einen Screenshot, wie du es aufrufst und wo ich den Fehler in der Console sehen kann?
Ps.: Schau nochmal auf Seite 1 ob du wirklich das beacon_scan Script richtig ausführst.

Ha das mit dem Bedienen von screen war gut, ds läuft perfekt.

hier mein script:


#!/bin/bash
# iBeacon Scan by lahlor based on Radius Networks RAW data convert

while read -t 10 line
  do
    count=$[count + 1]
    if [ "$capturing" ]; then
      if [[ $line =~ ^[0-9a-fA-F]{2}\ [0-9a-fA-F] ]]; then
        packet="$packet $line"
      else
        if [[ $packet =~ ^04\ 3E\ 2A\ 02\ 01\ .{26}\ 02\ 01\ .{14}\ 02\ 15 ]]; then
          UUID=`echo $packet | sed 's/^.\{69\}\(.\{47\}\).*$/\1/'`
          UUID=`echo $UUID | sed -e 's/\ //g' -e 's/^\(.\{8\}\)\(.\{4\}\)\(.\{4\}\)\(.\{4\}\)\(.\{12\}\)$/\1-\2-\3-\4-\5/'`
        echo $UUID
        fi
        capturing=""
        packet=""
      fi
    fi
        if [ ! "$capturing" ]; then
            if [[ $line =~ ^\> ]]; then
                packet=`echo $line | sed 's/^&gt;.\(.*$\)/\1/'`
                capturing=1
            fi
        fi
if [[ $count == "20" ]]; then
exit
fi
  done  


und der Aufruf:

[root@raspi2:~# sh ibeacon_scan.sh
ibeacon_scan.sh: 4: read: Illegal option -t
root@raspi2:~# /CODE]

Ok alles klar. Ich glaube ich muss meine Anleitung nochmal anpassen. Damit du die UUID herausfinden kannst, führe bitte folgendes aus (passe ggf. die Pfade zu den Scripten an)

sudo /home/pi/ibeacon/bluez-5.35/tools/hcidump --raw | /home/pi/ibeacon_scan.sh

Damit solltest du die UUID bekommen, die du dann in dem presence.sh Script einfügen kannst. Dann nur noch den Cronjob eintragen und die IPS Einstellung vornehmen.

Super danke dir das wars! :loveips:

Das freut mich zu hören!:loveips:

Moin,

würde gerne das Projekt nachbauen.
Kann ich schon den Raspi 3 nehmen mit intergrierten Bluetooth ?

Gruß Sven

Hi Sven,

leider besitze ich keinen Pi3 hätte es sonst bereits selbst getestet. Aber wenn du es zeitlich schaffst, probiere es einfach aus. Nachdem Bluez installiert ist, solltest du die Interfaces sehen und ansprechen können. Soweit ich weiss, soll der Pi3 einen LE fähigen Bluetooth haben <-- korrigiert mich, wenn ich falsch liege :slight_smile:

jo so ist es.

(BCM43143, Low Energy)

muss ich beim Kauf noch was beachten ?

würde den hier kaufen: http://www.amazon.de/Raspberry-Modell-Starterkit-offizielles-Speicherkarte/dp/B01CIUNZFG/ref=pd_sim_sbs_147_1?ie=UTF8&dpID=51HqW2t-BkL&dpSrc=sims&preST=AC_UL160_SR160%2C160&refRID=1W43G849D2EPHN5K5FBS

Gruß Sven

Hi,

nein musst du eigentlich nicht. Hast in dem Paket alles was du brauchst. Wollte es irgendwan auch nochmal kaufen. Habe aber noch einen alten Pi und brauche noch keinen neune/weiteren.

ok habs gekauft und melde mich dann ob es funktioniert.
will den Raspi gleichzeitig als minicomputer für mein Touchdisplay nutzen im Flur.

Gruß Sven

so habs geschafft fast !
Der PI3 läuft und ich komme bis hierher:


root@raspberrypi:~/bluez/bluez-5.38/tools/hcitool lescan
LE Scan ...
7C:2F:80:AC:00:FF (unknown)
7C:2F:80:8F:0F:D1 (unknown)
7C:2F:80:8F:0F:D1 Gigaset G-tag
7C:2F:80:AC:00:FF Gigaset G-tag


root@raspberrypi:~# /root/bluez/bluez-5.38/tools/hcidump --raw | /root/ibeacon_scan.sh

[b]hier kommt leider nix ![/b]


root@raspberrypi:~# cat ibeacon_scan.sh
#!/bin/bash
# iBeacon Scan by lahlor based on Radius Networks RAW data convert

while read -t 10 line
  do
    count=$[count + 1]
    if [ "$capturing" ]; then
      if [[ $line =~ ^[0-9a-fA-F]{2}\ [0-9a-fA-F] ]]; then
        packet="$packet $line"
      else
        if [[ $packet =~ ^04\ 3E\ 2A\ 02\ 01\ .{26}\ 02\ 01\ .{14}\ 02\ 15 ]]; then
          UUID=`echo $packet | sed 's/^.\{69\}\(.\{47\}\).*$/\1/'`
          UUID=`echo $UUID | sed -e 's/\ //g' -e 's/^\(.\{8\}\)\(.\{4\}\)\(.\{4\}\)\(.\{4\}\)\(.\{12\}\)$/\1-\2-\3-\4-\5/'`
        echo $UUID
        fi
        capturing=""
        packet=""
      fi
    fi
        if [ ! "$capturing" ]; then
            if [[ $line =~ ^\> ]]; then
                packet=`echo $line | sed 's/^&gt;.\(.*$\)/\1/'`
                capturing=1
            fi
        fi
if [[ $count == "20" ]]; then
exit
fi
  done

Gruß Sven

auch wenn ich folgendes alleine ausführe kommt nix:


root@raspberrypi:~/bluez/bluez-5.38# tools/hcidump --raw
HCI sniffer - Bluetooth packet analyzer ver 5.38
device: hci0 snap_len: 1500 filter: 0xffffffff





root@raspberrypi:~/bluez/bluez-5.38# tools/hciconfig
hci0:   Type: BR/EDR  Bus: UART
        BD Address: B8:27:EB:8E:42:B2  ACL MTU: 1021:8  SCO MTU: 64:1
        UP RUNNING
        RX bytes:881 acl:0 sco:0 events:48 errors:0
        TX bytes:1549 acl:0 sco:0 commands:44 errors:0


Hi,

der lescan Prozess muss immer parallel im Hintergund laufen. Nur dann kann das Script bzw im Dump was angezeigt werden. Am einfachsten ueber screen ne neue Sitzung aufmachen und darin den Lescan laufen lassen. Schau in meine Anleitung da ist alles 1:1 beschrieben mit screen.