NEWS
Pi 3 als Bluetooth LE Scanner (Beispielscript)
-
Nachdem ich dann auf einmal 3 geblockte geräte hatte und gesehen hatte, dass die erste Kombination ganz anders aussah, habe ich versucht diesen Datenpunkt (new device blocked) zu loggen, um dann diese Eintreäge zu vergleichen.
Leider steht in der Spalte "Wert" nur "null" `
Das Problem habe ich leider ganz oft mit Datenpunkten vom Typ String. `
Habe jetzt ausser influxdb auch sql und history aktiviert, in history wird es korrekt, ind influx und sql als "null" angezeigt.
Was ist die erste Angabe - ID des Geräts??? `
Ich verstehe "was ist die erste Angabe - ID des Geräts nicht?".
Der Datenpunkt ist als Typ String definiert. Im SQL-Adapter sollte man die Datenpunkte String, Boolean und Number speichern können. Warum da oft "null" drin steht…? Ich fürchte, dass es ein Fehler im SQL-Adapter ist.
Du bist da schon einen Schritt weiter in der Fehleranalyse. History funktioniert, die SQL-Varianten nicht.
Bei Deinem M3 glaub ich auch eher, dass es nicht an noble liegt, sondern daran, dass wir die BluetoothHardware noch "nicht sehen". `
Dann ist die Meldung:Bluetoothscanner: noble.state ist nicht powerdOn. noble.state: poweredOff
aber irreführend `
Noble kennt folgende Zustände, die Abhängig vom.. nun ja.. Zustand sind:
state = <"unknown" | "resetting" | "unsupported" | "unauthorized" | "poweredOff" | "poweredOn">
Die kann man selbst nicht ändern. Man kann nur im Skript darauf reagieren, wenn sich der Zustand ändert. Dank Deiner Hilfe und M3 Hardware konnte ich einen Fehler abfangen, der bei mir selbst nie aufgetreten ist (Bluetooth hat ja funktioniert).
dazu:
NOTE: noble.state must be poweredOn before scanning is started.
Die Zeile oben soll also aussagen, das der benötigte noble Status nicht auf "poweredOn" steht und danach wird der Status ausgegeben, bei Dir "poweredOff" (<- das Problem Deines M3).
Wie soll ich es umformulieren, damit es nicht missverständlich ist?
Die Zeile sehen aber nur diejenigen, bei denen noble nicht aktiv wird, z.. wg. Bluetooth-Problemen.
kann ich der Hardware noch irgendwie eine Brille aufsetzen, damit die uns besser sieht? `
Ich dachte das Thema wolltest Du abbrechen? g Dein Post von gestern.
Ich suche mal, ob ich was dazu finde. Wir müssen auf der Linux-Ebene irgendwie ein Feedback Deines Bluetooth-Moduls bekommen. hcitools, bluetoothctl, und "sudo service bluetooth restart" haben ja nicht die gewünschte Erkenntnis gebracht.
Noble sehe ich da aber nicht als Ursache. Das Problem liegt weiter vorne.
-
ch verstehe "was ist die erste Angabe - ID des Geräts nicht?".
Der Datenpunkt ist als Typ String definiert. `
Wie sag ich's mainam Kinde? Der Datenpunkt enthält mehrere Informationen, durch Komma getrennt.Mich interessiert die Bedeutung der ersten "Zahl" (sonst muss ich mich wieder durch 100 Zeilen Code kämpfen).
Ich hatte den Verdacht, dass dies eine eindeutige ID für ein Gerät sein könnte, anhand derer ich sehen kann, ob es immer wieder das selbe Gerät ist.
Diese Vermutung erhärtet sich nun, da der Eintrag der gester irgendwann um 15:xx war, anscheinend heute um 14:59 wieder auftauchte. Habe leider nur noch die ersten 4 Digits im Kopf, da der influx das ja leider nicht aufgezeichnet hat. Das könnte der Briefträger gewesen sein.
Noble kennt folgende Zustände, die Abhängig vom.. nun ja.. Zustand sind: `
Dann habe ich das wohl nicht korrekt verstanden. Ich hielt diese Meldung für den Zustand Noble-Scanner, nicht noble-BTdeviceIch dachte das Thema wolltest Du abbrechen? `
Wollte ich auch, aber ich mag keine nicht funktionierenden Sachen - und gehrt nicht gibt's nicht, auch wenn ich nicht alles verstehe probiere ich dann solange, bis ich es denke zu verstehen.Außßerdem wollte ich dich unterstützen - klappt leider nicht so einfach, wie ich gehofft hatte
Gruß
Rainer
Sag mir, ob und wie ich noch was für dich tun kann.
-
ch verstehe "was ist die erste Angabe - ID des Geräts nicht?".
Der Datenpunkt ist als Typ String definiert. `
Wie sag ich's mainam Kinde? Der Datenpunkt enthält mehrere Informationen, durch Komma getrennt.Mich interessiert die Bedeutung der ersten "Zahl" (sonst muss ich mich wieder durch 100 Zeilen Code kämpfen).
Ich hatte den Verdacht, dass dies eine eindeutige ID für ein Gerät sein könnte, anhand derer ich sehen kann, ob es immer wieder das selbe Gerät ist.
Diese Vermutung erhärtet sich nun, da der Eintrag der gester irgendwann um 15:xx war, anscheinend heute um 14:59 wieder auftauchte. Habe leider nur noch die ersten 4 Digits im Kopf, da der influx das ja leider nicht aufgezeichnet hat. Das könnte der Briefträger gewesen sein. `
Ach sooooo….
Ja, das ist die ID, mit der sich ein Gerät eindeutig identifizieren lässt.
Es entspricht der Mac-Adresse. Normalerweise gibt es zu der Mac-Adresse einen eingetragenen Hersteller. Das ist hier nicht der Fall. D.h., die wird frei dynamisch generiert. Es gibt drei Arten von IDs/Mac-Adressen im Bluetooth. Die häufigste ist public, der man direkt einen Hersteller zuweisen kann (macht das Skript, wenn es eine Internetverbindung hat).
An den Manufacturer-Data siehst Du, dass es ein Apple Gerät ist (4c00...). Von Apple habe ich Geräte gefunden, die sich brav mit einer öffentlichen und gleichbleibenden Mac melden und welche, die dauernd Ihre ID ändern (Datenschutzfeature?). Diese habe ich bei mir auf die Blacklist gesetzt, da sich die Geräte dann im Laufe der Zeit mehrmals eingetragen haben. Der Apple Pencil war z.B. so ein Kandidat.
Wenn Du auch mal gefüllte Objekte haben willst (da wird z.B. auch eingetragen, wann das Gerät zuletzt "gesehen" wurde), dann lösch am Besten die Blacklists.
Die Stellen, an denen die Blacklists gefüllt werden mit [] ersetzen:
`var bluetoothBlacklistMac = []; var bluetoothBlacklistLocalName = []; var bluetoothBlacklistManufacturerData = []; [/code]` ~~[quote]~~ ~~[quote]~~Ich dachte das Thema wolltest Du abbrechen? ` ` Wollte ich auch, aber ich mag keine nicht funktionierenden Sachen - und gehrt nicht gibt's nicht, auch wenn ich nicht alles verstehe probiere ich dann solange, bis ich es denke zu verstehen. Außßerdem wollte ich dich unterstützen - klappt leider nicht so einfach, wie ich gehofft hatte :( Gruß Rainer Sag mir, ob und wie ich noch was für dich tun kann. ` ` Für mich war das schon perfekt :!: . Fehlerfall "kein aktives noble" konnte ich abfangen. Bei den SQL-Historie und dem Datenpunkt, der nciht beschrieben wird, vermute ich den Fehler in den iobroker.Adaptern (SQL und Javascript). Ansonsten... works as designed... :lol: Ein M3 ist in den Skript-Spezifikationen nicht vorgesehen :lol: Spaß beiseite... das mit dem M3 bekommen wir auch noch hin. Ich hab nur noch nichts gefunden dazu (Details: M3 und Bluetooth).
-
Ich wäre immernoch daran interessiert, den Texas Instrument CC2650 Sensortag http://www.ti.com/tool/cc2650stk mittels Adapter zu nutzen.
Ich lasse einen CC2650 springen für den der es macht 8-)
-
4.) Bluetooth Scanner Skript (Post Nr. 3) in Skripte kopieren und starten `
Nun muss ich nur noch wissen wie ich das runtergeladene bluetooth_BLE_0.4.0 script in iobroker bekomme.Inhalt mit bestimmtem Programm öffnen, kopieren und einsetzen?
-
4.) Bluetooth Scanner Skript (Post Nr. 3) in Skripte kopieren und starten `
Nun muss ich nur noch wissen wie ich das runtergeladene bluetooth_BLE_0.4.0 script in iobroker bekomme.Inhalt mit bestimmtem Programm öffnen, kopieren und einsetzen? `
In ioBroker Skripte ein neues Skript anlegen und speichern.
Das heruntergeladene Skript in einem Editor öffnen und dann in das leere neue Skript im Browser reinkopieren und speichern.
Starten.
-
Ok. So hätte ich es auch gemacht. Bin nur am Öffnen gescheitert. Muss es ein bestimmter Editor sein?
-
Ok. So hätte ich es auch gemacht. Bin nur am Öffnen gescheitert. Muss es ein bestimmter Editor sein? `
Der Editor sollte echten Text beherrschen und kein verkapptes kleines Word sein. Ich glaube der Standard-Windows-Texteditor ist da nicht optimal. Unter Windows ist wohl z.B. pspad eine Alternative.
Du kannst das Skript aber auch direkt von der ioBroker Webseite kopieren:
http://www.iobroker.net/?page_id=3690&lang=de
Oben rechts vom Skript gibt es einen Button "copy". Dann strg-c und mit strg-v in iobroker einfügen.
-
@ruhr70:`Der Editor sollte echten Text beherrschen und kein verkapptes kleines Word sein. Ich glaube der Standard-Windows-Texteditor ist da nicht optimal. Unter Windows ist wohl z.B. pspad eine Alternative.
Für Windows empfehle ich Notepad++
https://notepad-plus-plus.org/
Absolutes Spitzentool!
-
So, läuft nun auch. Die Beschreibung ist echt super. Habe mich nur mit dem Script zum Runterladen etwas doof angestellt. Habe es schließlich mit Geany geöffnet und reinkopiert.
Meine drei G-tags sind auch heute angekommen zum Ausprobieren. Bei mir kommt bei dem Device aber nur eine Zeile. Ist das normal? Anzeige von Entfernung bzw. Empfangsstärke hätte ich auch gerne.
EDIT: habe den zweiten G-Tag aktiviert und schwupps….zeigt alles an. Aber nicht der Erste!?
EDIT2: habe dann das erste Device gelöscht über Mülleimer "alle Kinder löschen". Nun ist es nicht mehr da, aber auch nicht in der Blacklist. Wie bekomme ich das gelöschte Device wieder in die Liste? Ich möchte es ja mit den vollständigen Infos wie beim zweiten Device auch.
Übrigens: das erste Device hatte ich vorher an die Handy APP gekoppelt wo es dann nicht erkannt wurde vom Raspi. Dann aus der APP gelöscht und es wurde vom Raspi sofort erkannt (mit den fehlenden Infos)... das sei erwähnt falls das einen Unterschied ausmacht.
1146_bt-scanner2.png -
So, läuft nun auch. Die Beschreibung ist echt super. Habe mich nur mit dem Script zum Runterladen etwas doof angestellt. Habe es schließlich mit Geany geöffnet und reinkopiert.
Meine drei G-tags sind auch heute angekommen zum Ausprobieren. Bei mir kommt bei dem Device aber nur eine Zeile. Ist das normal? Anzeige von Entfernung bzw. Empfangsstärke hätte ich auch gerne.
EDIT: habe den zweiten G-Tag aktiviert und schwupps….zeigt alles an. Aber nicht der Erste!?
EDIT2: habe dann das erste Device gelöscht über Mülleimer "alle Kinder löschen". Nun ist es nicht mehr da, aber auch nicht in der Blacklist. Wie bekomme ich das gelöschte Device wieder in die Liste? Ich möchte es ja mit den vollständigen Infos wie beim zweiten Device auch.
Übrigens: das erste Device hatte ich vorher an die Handy APP gekoppelt wo es dann nicht erkannt wurde vom Raspi. Dann aus der APP gelöscht und es wurde vom Raspi sofort erkannt (mit den fehlenden Infos)... das sei erwähnt falls das einen Unterschied ausmacht. `
Das nur der Channel angezeigt wurde, hatte ich leider auch schon einmal. Allerdings nicht reproduzierbar.
Wenn Du ein G-Tag an der G-Tag angemeldet hast, ist es für das Skript nicht mehr sichtbar. Wenn Du es in der App wieder abmeldest, dann ist es wieder da. Die Erfahrung hattest Du ja auch schon gemacht.
Das gelöschte Gerät dürfte noch in dem Datenpunkt javascript.0.Bluetooth.InfoDevices.ListAll auftauchen.
Du kannst zwei Dinge tun:
1.)
Das Gerät in dem Datenpunkt javascript.0.Bluetooth.InfoDevices.ListAll löschen. Dann sollte es wieder angelegt werden. Allerdings habe ich das so nie getestet.
2.) oder einfach das Skript stoppen, 30 Sekunden warten und dann alle Datenpunkte löschen, in dem Du den Zweig Bluetooth auswählst und diesen inkl. aller Unterpunkte löschst. Einmal Objekte aktualisieren und das Skript wieder starten.
Wenn Du das dann wieder hast, dass für ein Gerät nur der Channel angelegt wird, kannst DU das noch einmal wiederholen oder wir müssen mit den Logs auf Debug2 Level ran.
Ich habe das Skript bei mir auf max. 10 Geräte eingestellt, die innerhalb kürzester Zeit gefunden und angelegt wurden. Und das Skript läuft seit Tagen stabil durch.
-
2.) oder einfach das Skript stoppen, 30 Sekunden warten und dann alle Datenpunkte löschen, in dem Du den Zweig Bluetooth auswählst und diesen inkl. aller Unterpunkte löschst. Einmal Objekte aktualisieren und das Skript wieder starten.
Wenn Du das dann wieder hast, dass für ein Gerät nur der Channel angelegt wird, kannst DU das noch einmal wiederholen oder wir müssen mit den Logs auf Debug2 Level ran.
. `
Hab ich nun zweimal gemacht. Nützt nichts.Aber ich habe wohl ein größeres Problem
1146_unbenannt.png -
Hab ich nun zweimal gemacht. Nützt nichts.
Aber ich habe wohl ein größeres Problem `
Nein, Du hast kein größeres Problem. Das läuft auch so.
Mir ist das noch nicht aufgefallen, weil auf dem Raspberry Pi 3 noch eine alte ioBroker Version läuft. Die neue meckert, wenn man die Datentypen unsauber benutzt. Habe ich wohl gemacht :oops:
Ist aber kein großer Akt das zu korrigieren.
Wenn Du 40 MB Ram übrig hast, kannst Du eine eigene Javascript-Instanz für das Skript aufmachen (ist dann wie ein eigener Adapter) und den Loglevel auf Error stellen. Dann läuft das Log nicht voll.
Ich komme leider erst am Wochenende dazu das Skript zu überarbeiten. Das Thema, dass nur der Channel angelegt wird, dürfte allerdings etwas knifflig werden, da ich es nicht nachstellen kann. Die Datenpunkttypen korrigiere ich.
-
Hab ich nun zweimal gemacht. Nützt nichts. `
Was Du noch mal machen kannst.
Den Bluetooth-Zweig noch einmal löschen und in den Javascript-Adapter Einstellungen für die Instanz den Haken bei "erlaube setObject" rausnehmen.
Eventuell geht es dann. Ansonsten hilft es den Fehler einzugrenzen.
-
Hab ich nun zweimal gemacht. Nützt nichts. `
Was Du noch mal machen kannst.
Den Bluetooth-Zweig noch einmal löschen und in den Javascript-Adapter Einstellungen für die Instanz den Haken bei "erlaube setObject" rausnehmen.
Eventuell geht es dann. Ansonsten hilft es den Fehler einzugrenzen. `
Alles gut! Nix gemacht und heute Morgen werden alle drei G-Tags komplett angezeigtDie Warnungen bleiben, aber machen wohl kein Problem. Ich teste mal deine Hinweise aus…
-
Selbst heilender Code
Gesendet von iPhone mit Tapatalk
-
Hab jetzt mal etwas mit den drei G-Tags rumgespielt.
2 werde ich permanent in die Autos legen. So soll dann in VIS angezeigt werden, ob die Autos da sind.
Zusätzlich könnte ich mir abends eine Nachricht zuschicken lassen, wenn das Auto nicht in der Nähe ist, dann steht es wahrscheinlich auf der anderen Straßenseite wo man Werkstags nur von 14:00 - 7:00 Uhr parken darf. Ich fahre meist gegen 7:15 - 7:30 zur Arbeit
Schick wäre es auch zu sehen welches Auto vorne steht, aber das scheint von der Auflösung nicht zu klappen:
1146_g-tag-empfang.gif -
Schick wäre es auch zu sehen welches Auto vorne steht, aber das scheint von der Auflösung nicht zu klappen: `
Interessanter Anwendungsfall. Zur Erkennung der Reihenfolge der Autos kann ich mir vorstellen, dass die Genauigkeit dazu nicht ausreicht.
Du könntest aber die schwankenden Entfernungen in Mittelwerte umwandeln und dann mal schauen, ob eine Unterscheidung je nach Stellplatz besser wird.
-
Schick wäre es auch zu sehen welches Auto vorne steht, aber das scheint von der Auflösung nicht zu klappen: `
Interessanter Anwendungsfall. Zur Erkennung der Reihenfolge der Autos kann ich mir vorstellen, dass die Genauigkeit dazu nicht ausreicht.
Du könntest aber die schwankenden Entfernungen in Mittelwerte umwandeln und dann mal schauen, ob eine Unterscheidung je nach Stellplatz besser wird. `
Ja, genau. Daran habe ich auch gleich gedacht. Aber beim Umsetzen der Programmierung hätte ich mein Problem -
Ja, genau. Daran habe ich auch gleich gedacht. Aber beim Umsetzen der Programmierung hätte ich mein Problem `
Schau Dir das mal an den Charts an, ob das was bei Dir bringt. In Flot bekommst Du eine gewisse Glättung hin,wenn Du bei dem Datenpunkt unter "Art" statt "minmax" "mittel" einstellst.
Wenn das was bringt, kann man ein Miniskript schreiben, welche einen "geglätteten" Datenpunkt erzeugt.
Wenn Du die Warnungen weghaben willst:
Der Datenpunkt war im Skript falsch angelegt:
"Distanz" : { "init": 0, "dp": { "name": 'Bluetooth Device Distanz', "desc": 'Bluetooth Device errechnete Entfernung', "type": 'number', "unit": 'm', "role": 'value' }
Unter "type" stand dort "float" (gibt es als Type in ioBroker nicht).
Wenn Du das so im Skript änderst (solltest Du wg. möglicher neuer Geräte trotzdem tun), hat das keine Auswirkung, da die Datenpunkte schon angelegt sind.
Zur Korrektur:
Die Distanz-Datenpunkte in den Objekten korrigieren (Objekte/Datenpunkt, Zahrad für Einstellungen). Dort steht unter "Allgemein/Type"nun wahrscheinlich "boolean". Das muss für jedes Gerät auf "Zahl" geändert werden.