Neues Modul: 74_BleTagBattery - Batterie Informationen für BLE Tags

Begonnen von mumpitzstuff, 27 Februar 2017, 21:29:50

Vorheriges Thema - Nächstes Thema

stoxx

ZitatNeben ok oder nicht ok wird auch ein batteryLevel erzeugt. Verwende doch einfach das für deinen Batteriewarnungstrigger.
Habe ich mir auch schon überlegt, aber da ich ein notify für alle Devices habe, welches bei battery readings mit dem Text "low" triggert, wollte ich hier keine Ausnahme machen und habe einfach den Grenzwert im Modul Code geändert.

viele gruesse
stoxx
FHEM 5.8 auf Raspberry mit CUL, FS20, FHT, HMS, BLE, Z-Wave ..

Amenophis86

Ich habe aktuell drei GTags im Einsatz und verwende nur das Bluetooth Modul des Pi zum Überwachen der Tags und auslesen der Batterie. Leider kommt bei nur 2 Tags die Batteriewerte an. Den Wert RETRY_SLEEP passe ich doch in der Datei  /opt/fhem/contrib/PRESENCE/lepresenced an, oder? Und reicht es, wenn ich danach den Service einfach stoppe und neustarte, oder muss ich noch mehr machen um den neuen Wert zu nutzen?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

mumpitzstuff

Wie schon beschrieben, kann man von der Lösung nicht viel erwarten. Starten/Stoppen sollte aber reichen. Guck doch mal ob du alle drei bekommst wenn du den Service stoppst vorher. Wenn das schon mal geht, dann Beginn mit einer sehr großen Zeit z.b. 5 min und geh dann langsam runter bis es nicht mehr geht und rechne dann wieder 20% Sicherheit drauf.

Amenophis86

Ok, wollte nur sicher gehen, dass es mit Start und stop geht und ich nicht ewig versuche und die Grundvoraussetzung schon falsch ist. Danke :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

stiefl


jschuppe

Hallo,

erst mal danke für das Modul. Mein GTag wird problemlos ausgelesen, mein "TrackR bravo" wird aber wohl nicht unterstützt ( https://secure.thetrackr.com/ ).

Viele Grüße

mumpitzstuff

Wenn das so ist, dann scheint sich dieser nicht an die Bluetooth Spezifikation zu halten. Wenn du ein Android Handy hast, dann gibts diverse BLE Scanner Tools, die auch die Services und UUIDs eines Gerätes auslesen können. Wenn du da irgendwas findest das nach Batteriestatus aussieht, dann lass es mich wissen und ich baue es ein. Ansonsten kannst du auch mal das Device auf verbose 5 stellen, vielleicht läuft auch in meinem Modul etwas falsch. Falls du sowas wie lepresenced laufen hast, kann es auch daran liegen.

PsychoD

#52
Moin,

auf meinem Raspberry Pi mit OSMC als Distribution habe ich gatttool installiert und kann es eigentlich auch ausführen, bekomme im Log aber immer:
2017.12.31 17:47:50 1: PERL WARNING: Can't exec "gatttool": No such file or directory at ./FHEM/74_BleTagBattery.pm line 279.

Woran kann das liegen?

Guten Rutsch euch allen!

VG
Psy

//edit:
Im Pfad ist es eigentlich und sollte auch so aufgerufen werden können. Merkwürdig!

osmc@wohnzimmer:~$ which gatttool
/usr/local/bin/gatttool
osmc@wohnzimmer:~$ gatttool
Usage:
  gatttool [OPTION...]

Help Options:
  -h, --help                                Show help options
  --help-all                                Show all help options
  --help-gatt                               Show all GATT commands
  --help-params                             Show all Primary Services/Characteristics arguments
  --help-char-read-write                    Show all Characteristics Value/Descriptor Read/Write arguments

Application Options:
  -i, --adapter=hciX                        Specify local adapter interface
  -b, --device=MAC                          Specify remote Bluetooth address
  -t, --addr-type=[public | random]         Set LE address type. Default: public
  -m, --mtu=MTU                             Specify the MTU size
  -p, --psm=PSM                             Specify the PSM for GATT/ATT over BR/EDR
  -l, --sec-level=[low | medium | high]     Set security level. Default: low
  -I, --interactive                         Use interactive mode


osmc@wohnzimmer:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin:/usr/osmc/bin:/opt/vc/bin


betateilchen

vermutlich liegt gatttool in Deiner Distribution nicht in einem Pfad, der bei der Suche nach ausführbaren Dateien automatisch berücksichtigt wird. Das Modul ruft gatttool ohne Pfadangabe auf und verläßt sich darauf, dass das Programm im Suchpfad gefunden wird.

Folgende Möglichkeiten hast Du:


  • ändere die Pfad-Variable in Deiner Systemumgebung
  • verlinke bzw. kopiere das Programm gatttool in ein Programmverzeichnis, das bereits im Pfad enthalten ist
  • ändere die Zeile 279 in der Moduldatei und gib dort den gesamten Pfad zur Datei gatttool mit an
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

PsychoD

Hallo,

Danke! Ich habe zum Test die dritte Variante genommen, werde aber wohl die zweite nachrüsten. :)

Nun bekomme ich jedoch die folgenden Fehler im log:

2018.01.01 18:01:43 1: PERL WARNING: Argument "ok" isn't numeric in numeric lt (<) at (eval 5210) line 1.
2018.01.01 18:01:43 3: eval: pr_gtag_battery: warning in condition c01


Woran kann das denn wohl liegen?

VG

Amenophis86

Habe ne Frage zum Modul, löst das setzen des Batteriewerts kein Event des Geräts aus bei welchem der Wert gesetzt wird? Ich habe nämlich folgendes am laufen. Auf meinem zweiten PI läuft lepresenced und BleTagBattery auf einem Bluetoothsender. Da stört es mich nicht, wenn die beiden sich mal in die Quere kommen. Jetzt wollte ich mittels RFHEM und einem Notify den Batteriewert an meine Hauptinstanz senden, wenn der Wert sich ändert. Aber das notify triggert nicht und es sieht aus, als ob der Batteriewert geschrieben wird aber für das GTag Device kein Event auslöst. Wie kann ich dann das Event abgreifen und das Reading an die Hauptinstanz senden? Im Eventmonitor ist

2018-01-01 19:04:19 BleTagBattery AE.GTag.BatteryCheck active das einzige Event welches ich sehe beim Auslösen der Batterieabfrage.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

mumpitzstuff

Die Werte werden durch diesen Code erzeugt:

readingsBeginUpdate( $targetHash );
readingsBulkUpdate( $targetHash, "batteryLevel", $param[2 + ($i * 3)] );
readingsBulkUpdate( $targetHash, "battery", ($param[2 + ($i * 3)] > 15 ? "ok" : "low") );
readingsEndUpdate( $targetHash, 1 );


Im Wiki finde ich dazu unter readingsBulkUpdate dann:

$changed (optional): Flag, ob ein Event für dieses Update erzeugt werden soll (Wert: 1). Oder ob definitiv kein Event erzeugt werden soll (Wert: 0). Wenn nicht gesetzt, wird aufgrund entsprechender Attribute in der Definition von $hash entschieden, ob ein Event zu erzeugen ist, oder nicht (Attribute: event-on-change-reading, event-on-update-reading, event-min-interval, ...)

Daraus würde ich entnehmen, dass bei dir aufgrund irgend welcher event... Attribute die Events nicht durch kommen. Bei readingsEndUpdate gebe ich ja auch noch explizit an, dass die Events ausgelöst werden sollen. Mehr kann ich eigentlich nicht tun.

Oder liege ich falsch?


Amenophis86

Oh man, du hast recht. Ich hab mich schon gewundert, weil ich den Codeteil gesehen hatte und er eigentlich gut war. Hatte wirklich ein event-on-change drinnen und daher kein Event mehr erzeugt. Manchmal sieht man den Wald vor lauter Bäumen nicht. Ich danke dir.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

ReviloEgros

#58
Hallo Gemeinde,

nun brauche ich mal euer Schwarmwissen. Nachdem ich gestern im FHEM Log gesehen habe, das das Timeout für den Blocking-Run von BleTagBattery erreicht und der Prozess gekillt wurde, habe ich etwas nachgeforscht. Der letzte Batteriestatus ist von vor 2 Tagen auf allen 5 Tags. Wenn ich gatttool von Hand ausführe, bekomme ich nun immer ein Connection refused, egal was ich versuche. An FHEM oder den Bluetooth einstellungen wurde nichts verändert, habe ich alles doppelt und dreifach gecheckt. Ich verwende die Gigaset G-Tags. Das einzige, was evtl geupdated wurde (kann mich nicht genau erinnern) war raspbian selbst. Auch andere Lösungsansätze wie ,,btmgmt le on" brachten keinen Erfolg. In der main.conf von bluez steht auch nachwievor DisablePlugins=pnat, EnableLE=true und AttributeServer=true. Auch ein kompletter reboot des Pi half nicht. Für presence und BleTagBattery verwende ich zwei unterschiedliche Bluetooth Dongle. Den internen vom Pi, und einen externen damit sich die beiden nicht in die quere kommen. Lief bisher wunderbar... Jetzt stehe ich auf dem Schlauch und weiß nicht mehr weiter, warum es von heut auf morgen ohne zutun nicht mehr geht. Jemand eine Idee?

ReviloEgros

Nach nochmal ausgiebiegen rumprobieren und auch tauschen der Schnitstellen in FHEM als auch lepresenced ging es nachwievor nicht. Auch auf der Konsole konnte sich gatttool nicht verbinden. Dann habe ich das ganze über bluetoothctl probiert (irgendwo gelesen das gatttool deprecated sei) und siehe da, es konnte sich verbinden. Danach nochmal gatttool probiert, welches sich daraufhin auch verbinden konnte!? Ich habe keinen blassen schimmer wieso, aber nun läuft es wieder. Also falls jemand mal das selbe Problem haben sollte, einfach mal mit bluetoothctl testen.