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

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

Vorheriges Thema - Nächstes Thema

mumpitzstuff

Die Readings tauchen bei deinen g-tags auf und nicht im Device bletagbattery, in deinem Fall Sonja_Cam und Sonja_Cam1.

Gasmast3r

Zitat von: mumpitzstuff am 01 Oktober 2019, 00:41:28
Die Readings tauchen bei deinen g-tags auf und nicht im Device bletagbattery, in deinem Fall Sonja_Cam und Sonja_Cam1.
Im log ist alles zu sehen aber er schreibt die readings nicht ins jeweilige Device.

Wie kann ich das ändern?

Gesendet mit Tapatalk

mumpitzstuff

Setz mal das Attribut disabled aktiv auf 0 bitte und lass es manuell noch einmal laufen. Hattest du das device mal auf disabled stehen und hast dann das Attribut einfach gelöscht? Kann sein, dass es in diesem Fall nicht korrekt zurückgesetzt wird...

Gasmast3r

Hy habe das jetzt so gelöst,
1 die Batterie Abfrage gelöscht
2 die PM Datei gelöscht
3 Update durchgeführt
4 Batterie Abfrage neu definiert
Und Zack alles geht

Gesendet mit Tapatalk


eispeer

#124
Hallo zusammen.

Ich möchte hier kurz meine Erfahrungen mit dem Modul teilen.

Ich habe 5 GTAGs als Resident Device in FHEM registriert. Ich benutze 2 Bluetooth Dongle am Raspberry.
Der erste (hci0) wird von presenced und lepresenced genutzt um die Resident Devices upzudaten.
Der zweite (hci1), seit heute im Einsatz, wird für dieses Modul BleTagBattery genutzt. Im Attribut hciDevice ist hci1 gesetzt.

Es kam jedoch immer wieder vor, dass bei der Abfrage des Batterie-Status

call gatttool char read loop: X, result: connect error: Transport endpoint is not connected (107)

im Log ausgegeben wurde und kein Batteriestatus ermittelt werden konnte.
Es hat sich herrausgestellt, dass der presenced-Daemon den neuen, zweiten Bluetooth Dongle hci1 einfach benutzt hat, da im Standard dem presenced kein Interface zugewiesen wird.
Das sieht man in der Prozessliste wie folgt:


ps aux
sh -c hcitool name 7C:2F:80:xx:yy:zz 2>/dev/null
hcitool name 7C:2F:80:xx:yy:zz


Dieser Aufruf vom hcitool nimmt sich das erste, verfügbare Interface (hci1) und blockiert es, wenn hci0 vom lepresenced genutzt wird. Somit blockiert auch die BleTagBattery Abfrage.
Leider kann man dem preseced in der Version presenced 10988 2016-03-04 17:27:36Z kein hci Interface per Konfig zuordnen.
Es bleibt einem nur den Aufruf des hcitool anzupassen. Ich habe also

/usr/sbin/presenced

ab der Zeile 364 bis 367:


if( -x "$hcitool")
{
     $return = qx(hcitool name $address 2>/dev/null);
}


wie folgt um das Interface hci0 erweitert.


if( -x "$hcitool")
{
     $return = qx(hcitool -i hci0 name $address 2>/dev/null);
}


Somit bleibt hci1 frei für das BleTagBattery und die Batterieabfrage flutscht problemlos durch.


Mein zweites Problem äusserte sich wie folgt:
Es wurden nur die ersten beiden GTAGs mit einem Batteriestatus versehen. Die übrigen 3 haben nie einen Batteriestatus bekommen.
Die Batterieabfrage wurde immer wieder durch einen Timeout abgebrochen. Scheinbar bevor die letzten 3 Tags abgefragt wurden.
Dies aüßerte sich in den Logs wie folgt:

(GTAGBattery) Sub BleTagBattery_BlockingAborted - BlockingCall process terminated unexpectedly: timeout

Es stellte sich heraus, dass ein Timeout immer erfolgte, als eines der ersten beiden Devices abwesend war.
Ein ein Verbose 5 auf dem BleTagBattery Device und ein wenig Logfilerecherche ergab folgendes:


Sub BleTagBattery_Run (GTAGBattery) - start blocking call
Sub BleTagBattery_stateRequest (GTAGBattery) - state request called
Sub BleTagBattery_BlockingRun (GTAGBattery) - device found. device: GTAG_Black1
Sub BleTagBattery_BlockingRun (GTAGBattery) - device name: Gigaset G-tag
Sub BleTagBattery_BlockingRun (GTAGBattery) - device address: 7C:2F:80:xx:yy:zz
Sub BleTagBattery_BlockingRun (GTAGBattery) - tag already saved in hash
Sub BleTagBattery_readSensorValue (GTAGBattery) - call gatttool char read loop: 0, result: connect error: Connection refused (111)
Sub BleTagBattery_readSensorValue (GTAGBattery) - call gatttool char read loop: 1, result: connect error: Connection refused (111)
Sub BleTagBattery_readSensorValue (GTAGBattery) - call gatttool char read loop: 2, result: connect error: Connection refused (111)
Sub BleTagBattery_readSensorValue (GTAGBattery) - call gatttool char read loop: 3, result: connect error: Connection refused (111)
Sub BleTagBattery_readSensorValue (GTAGBattery) - call gatttool char read loop: 4, result: connect error: Connection refused (111)
Sub BleTagBattery_readSensorValue (GTAGBattery) - invalid gatttool response
Sub BleTagBattery_BlockingRun (GTAGBattery) - tag not supported
Sub BleTagBattery_BlockingRun (GTAGBattery) - processing gatttool response for device GTAG_Black1. batteryLevel:
Sub BleTagBattery_BlockingRun (GTAGBattery) - device found. device: GTAG_Black2
Sub BleTagBattery_BlockingRun (GTAGBattery) - device name: Gigaset G-tag
Sub BleTagBattery_BlockingRun (GTAGBattery) - device address: 7C:2F:80:aa:bb:cc
Sub BleTagBattery_BlockingRun (GTAGBattery) - tag already saved in hash
Timeout for BleTagBattery_BlockingRun reached, terminated process 15948
(GTAGBattery) Sub BleTagBattery_BlockingAborted - BlockingCall process terminated unexpectedly: timeout


Es wurde der erste GTAG abgefragt, obwohl er gar nicht anwesend war. Diese Abfrage (5x) dauert in Summe so lange, dass alle weiteren Abfragen durch einen Timeout abgebrochen werden, wie beim Abfragen des 2. GTAGs zu sehen ist.

Laut Quellcode im Modul dürfte dies nicht vorkommen, da eine Batterieabfrage nur stattfinden soll, wenn der GTAG present ist:

Modul-Code ab Zeile 211:

$deviceList = fhem( "list $device", 1 );

if ( $deviceList =~ m/STATE\s+present/ ) {       


Ein List des Devices erbrachte bei mir folgendes:

list GTAG_Black1:

Internals:
   ADDRESS    7C:2F:80:xx:yy:zz
   CFGFN      FHEM/residents.cfg
   CHANGED   
   DEF        lan-bluetooth 7C:2F:80:xx:yy:zz 127.0.0.1:5222 20
   DeviceName 127.0.0.1:5222
   ...
   STATE      absent
   TYPE       PRESENCE
   Helper:
     DBLOG:
       presence:
         logdb:
           ...
   READINGS:
     2019-11-29 12:00:34   battery         ok
     2019-11-29 12:00:34   batteryLevel    94
     2019-11-28 12:46:48   command_accepted yes
     2019-11-29 12:36:39   device_name     Gigaset G-tag
     2019-11-29 12:29:06   model           lan-bluetooth
     2019-11-29 12:39:39   presence        absent
     2019-11-29 12:36:39   room            HWR LE
     2019-11-29 12:39:39   state           absent
   helper:
     ABSENT_COUNT 5
     CURRENT_STATE present
     CURRENT_TIMEOUT normal
Attributes:
    ...


Vergleicht man die Abfrage aus dem Modulcode und die Ausgabe des Device List wird klar, warum das Battery Modul fälschlich davon ausgeht, dass ein GTAG anwesend ist.
STATE ist einmal absent, nämlich in den Internals und einmal present, nämlich im helper mit CURRENT_STATE present.

Starte ich fhem neu, verschwindet im helper Bereich auch das CURRENT_STATE present. Es kommt aber immer wieder, sobald ein GTAG ein Mal als present erkannt wurde.

Schön ist, dass im helper zwischen dem "CURRENT_STATE" und dem "present" nur ein Leerzeichen ist und in den Internals zwischen "STATE" und "present" mehrere Leerzeichen sind.

Ich habe den Modulcode mal wie folgt angepasst:


$deviceList = fhem( "list $device", 1 );

if ( $deviceList =~ m/STATE\s{2,}present/ ) {


Das Modul soll einen GTAG nur abfragen, wenn mehr als zwei Leerzeichen zwischen STATE und present ist.
Dies funktioniert!
Im Log wird ein nicht anwesender GTAG nun übersprungen und die hinteren GTAGs werden erfolgreich abgefragt:


Sub BleTagBattery_BlockingRun (GTAGBattery) - device found. device: GTAG_Black1
Sub BleTagBattery_BlockingRun (GTAGBattery) - device not present.
Sub BleTagBattery_BlockingRun (GTAGBattery) - device found. device: GTAG_Black2
Sub BleTagBattery_BlockingRun (GTAGBattery) - device not present.
Sub BleTagBattery_BlockingRun (GTAGBattery) - device found. device: GTAG_Green1
Sub BleTagBattery_BlockingRun (GTAGBattery) - device not present.
Sub BleTagBattery_BlockingRun (GTAGBattery) - device found. device: GTAG_Orange1
Sub BleTagBattery_BlockingRun (GTAGBattery) - device name: Gigaset G-tag
Sub BleTagBattery_BlockingRun (GTAGBattery) - device address: 7C:2F:80:aa:bb:cc
Sub BleTagBattery_BlockingRun (GTAGBattery) - tag already saved in hash
Sub BleTagBattery_readSensorValue (GTAGBattery) - call gatttool char read loop: 0, result: handle: 0x001b value: 64
Sub BleTagBattery_readSensorValue (GTAGBattery) - processing gatttool response: 64
Sub BleTagBattery_BlockingRun (GTAGBattery) - processing gatttool response for device GTAG_Orange1. batteryLevel: 100
Sub BleTagBattery_BlockingRun (GTAGBattery) - device found. device: GTAG_Red1
Sub BleTagBattery_BlockingRun (GTAGBattery) - device not present.
Sub BleTagBattery_BlockingRun (GTAGBattery) - device found. device: GTAG_White1
Sub BleTagBattery_BlockingRun (GTAGBattery) - device not present.
Sub BleTagBattery_BlockingDone (GTAGBattery) - set readings batteryLevel and battery of device: GTAG_Orange1
Sub BleTagBattery_BlockingDone (GTAGBattery) - done


Vielleicht helfen meine Erkenntnisse ja irgendjemandem bei der Fehlersuche weiter.
Bin ich vielleicht nicht der einzige, der einen helper Bereich mit fehlerhaftem CURRENT_STATE hat?

Vielleicht kann der Modulautor ja die Anpassung zur Abfrage der Leerzeichen in den Modulcode überführen...

Vielen Dank auf alle Fälle für das Modul.
Peer
Raspberry PI, CUL 433Mhz, CUL 868Mhz v3.4, HM-CC-RT-DN, HM-CFG-USB, ELRO IT

mumpitzstuff


Jamo

Hallo Peer,
super Analyse. Auch ich habe das Problem, das mehrere GTAGs nicht abgefragt werden, und der Batteriestatus nicht aktualisiert wird (oder erst nach mehreren Tagen wo ich dann aber zwischendurch auch FHEM wieder neu starte). Ich habe allerdings nie eine Analyse gemacht, ich dachte das liegt irgendwie an der Bluetooth Verbindung.
Aber ich habe gerade nachgesehen, ich habe auch den helper Bereich mit CURRENT_STATE present.

Den Code habe ich wie von Dir vorgeschlagen schonmal geändert, ich beobachte.

Danke! ! !
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

mumpitzstuff

@eispeer: Ich habe mal eine neue Version eingecheckt. Könntest du dir bitte ansehen, ob die bei dir funktioniert? Einfach "update all" und danach "shutdown restart" machen.

Jamo

Hallo mumpitzstuff,
ich glaube das funktioniert noch nicht richtig. Ich habe gesehen, das Du den helper auf public gesetzt hast.
Ich habe insgesamt 5 GTAGS, von denen werden nur "Gast"und "Vater"gefunden, hier mal die beiden listings.
Die definitionen sind für alle GTags gleich, alle werden mit collectrord abgeholt.
Die anderen 3 gerden nicht gefunden, obwohl die auch present sind.

Internals:
   FUUID      abcdef-ghij-klmn-1234-af12345e9ecebc14
   NAME       myBleTagBattery
   NR         3812
   STATE      active
   TYPE       BleTagBattery
   VERSION    0.0.4
   READINGS:
     2019-12-03 19:42:36   state           active
   helper:
     Presence_Vater_Orange_collect public
     Presence_Gast_Orange_collect public
Attributes:
   group      SERVER
   room       Energy,Presence,System
   webCmd     statusRequest

Internals:
   ADDRESS    ME:IN:EM:AC:AD:DR
   DEF        lan-bluetooth ME:IN:EM:AC:AD:DR 127.0.0.1:5222 60 60
   DeviceName 127.0.0.1:5222
   FD         37
   FUUID      abcdef-ghij-klmn-1234-af12345e9ecebc14
   INTERVAL_NORMAL 60
   INTERVAL_PRESENT 60
   MODE       lan-bluetooth
   NAME       Presence_Gast_Orange_collect
   NOTIFYDEV  global
   NR         2713
   NTFY_ORDER 50-Presence_Gast_Orange_collect
   PARTIAL   
   STATE      present schlafLE / flurLE,schlafLE,wohnLE
   TYPE       PRESENCE
   READINGS:
     2019-01-28 03:00:00   LastLowBattMailSent 1
     2019-12-03 14:48:01   battery         ok
     2019-12-03 14:48:01   batteryLevel    94
     2019-12-03 08:47:06   command_accepted yes
     2019-12-03 20:28:21   daemon          lepresenced V0.9
     2019-12-03 20:28:21   device_name     Gigaset G-tag
     2019-12-03 20:28:21   model           lan-lepresenced
     2019-12-03 20:28:21   presence        present
     2019-12-03 20:28:21   room            schlafLE
     2019-12-03 20:28:21   rooms           flurLE,schlafLE,wohnLE
     2019-12-03 20:28:21   rssi            -67
     2019-12-03 20:28:21   rssi_flurLE     -71
     2019-12-03 20:28:21   rssi_schlafLE   -67
     2019-12-03 20:28:21   rssi_wohnLE     -73
     2019-12-03 20:21:00   rssi_zeroLE     -75
     2019-12-03 20:28:21   state           present
     2019-12-03 08:47:41   status          present
   helper:
     CURRENT_STATE present
     CURRENT_TIMEOUT normal
     DISABLED   0
     PRESENT_COUNT 0
Attributes:
   absenceThreshold 2
   disable    0
   event-on-change-reading battery,batteryLevel,presence,state
   group      PRESENCE
   room       Presence
   sortby     050
   stateFormat state room / rooms
   verbose    0
   webCmd     statusRequest
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

mumpitzstuff

Was meinst du mit helper auf public gesetzt?

Hattest du andere Ergebnisse als du die Änderungen von eispeer übernommen hattest?

Könntest du vielleicht das verbose lvl auf 5 setzen und mir den entsprechenden Logauszug zukommen lassen? Ich würde gern wissen, ob das Modul in einen Timeout rennt oder die anderen Tags nur nicht als anwesend erkennt.

Jamo

Vergiss meinen Kommentar mit helper, das war Unsinn.

Unten der Log. Die devices werden zwar gefunden, aber als 'not present'gemeldet. Also am timeout liegt es nicht.

Zur info: Ich habe 6 GTags, Vater/Mutter/Gast, und RED/White/Black.
Zur Zeit des laufes sind Vater/Gast, und RED/White/Black present.
Alle sind über collectord und lepresenced V0.9 wie folgt eingebunden: lan-bluetooth ME:IN:EM:AC:AD:DR 127.0.0.1:5222 60 60

Ich habe zuerst gedacht es liegt am Stateformat, bei den RED/White/Black hatte ich das stateformat geändert auf "room / rooms" geändert,
damit war das Internal STATE dann auch ohne 'present', also       "STATE      wohnLE / flurLE,schlafLE,wohnLE,zeroLE".
Habe das stateformat jetzt geändert das der Internal STATE jetzt "STATE    present wohnLE / flurLE,schlafLE,wohnLE,zeroLE" ist, aber er findet die trotzdem nicht.

Oder muss der Internal STATE genau 'present' sein?

Danke schonmal falls Du noch eine Idee hast?

PS: Habe jetzt den statformat kompett gelöscht, werden trotzdem nicht als 'present'gefunden. Irgendwie nimmt er immer nur den ersten als present .....


....


2019.12.04 08:16:52 4: Sub BleTagBattery_readSensorValue (myBleTagBattery) - call gatttool char read loop: 0, result: handle: 0x001b value: 4b

2019.12.04 08:16:52 4: Sub BleTagBattery_readSensorValue (myBleTagBattery) - processing gatttool response: 4b
2019.12.04 08:16:52 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - processing gatttool response for device Presence_Vater_Orange_collect. batteryLevel: 75
2019.12.04 08:16:52 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device found. device: Presence_Vater_iPhone_BT
2019.12.04 08:16:52 5: Cmd: >list Presence_Vater_iPhone_BT<
2019.12.04 08:16:52 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device name: iPhoneXL
2019.12.04 08:16:52 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device address: ME:IN:EM:AC:AD:DR
2019.12.04 08:16:52 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - try to connect with public

2019.12.04 08:16:53 4: Sub BleTagBattery_readSensorValue (myBleTagBattery) - call gatttool char read loop: 0, result: connect error: Software caused connection abort (103)

2019.12.04 08:16:53 4: Sub BleTagBattery_readSensorValue (myBleTagBattery) - invalid gatttool response
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - try to connect with random
2019.12.04 08:16:53 4: Sub BleTagBattery_readSensorValue (myBleTagBattery) - call gatttool char read loop: 0, result: connect: No route to host (113)

2019.12.04 08:16:53 4: Sub BleTagBattery_readSensorValue (myBleTagBattery) - invalid gatttool response
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - tag not supported
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - processing gatttool response for device Presence_Vater_iPhone_BT. batteryLevel:
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device found. device: Presence_GTag_Black_collect
2019.12.04 08:16:53 5: Cmd: >list Presence_GTag_Black_collect<
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device not present.
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device found. device: Presence_GTag_RED_collect
2019.12.04 08:16:53 5: Cmd: >list Presence_GTag_RED_collect<
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device not present.
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device found. device: Presence_GTag_White_collect
2019.12.04 08:16:53 5: Cmd: >list Presence_GTag_White_collect<
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device not present.
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device found. device: Presence_Gast_Orange_collect
2019.12.04 08:16:53 5: Cmd: >list Presence_Gast_Orange_collect<
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device name: Gigaset G-tag
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device address: ME:IN:EM:AC:AD:DR
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - tag already saved in hash
2019.12.04 08:16:53 4: Sub BleTagBattery_readSensorValue (myBleTagBattery) - call gatttool char read loop: 0, result: connect: No route to host (113)

2019.12.04 08:16:53 4: Sub BleTagBattery_readSensorValue (myBleTagBattery) - invalid gatttool response
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - tag not supported
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - processing gatttool response for device Presence_Gast_Orange_collect. batteryLevel:
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device found. device: Presence_Gast_iBTon_collect
2019.12.04 08:16:53 5: Cmd: >list Presence_Gast_iBTon_collect<
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device not present.
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device found. device: Presence_Mutter_Green_collect
2019.12.04 08:16:53 5: Cmd: >list Presence_Mutter_Green_collect<
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device not present.
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device found. device: Presence_Mutter_iBTon_collect
2019.12.04 08:16:53 5: Cmd: >list Presence_Mutter_iBTon_collect<
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingRun (myBleTagBattery) - device not present.
2019.12.04 08:16:53 5: Cmd: >{BlockingStart('25520')}<
2019.12.04 08:16:53 5: Cmd: >{BleTagBattery_BlockingDone('myBleTagBattery|Presence_Vater_Orange_collect|75|none')}<
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingDone (myBleTagBattery) - set readings batteryLevel and battery of device: Presence_Vater_Orange_collect
2019.12.04 08:16:53 4: Sub BleTagBattery_BlockingDone (myBleTagBattery) - done
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

mumpitzstuff

Kannst du mir bitte ein list vom ersten g-tag (den funktionierenden) zukommen lassen und einen der danach nicht erkannt wird?

Jamo

Gerne:
Gast + White.

Internals:
   ADDRESS    ME:IN:EI:IP:AD:DR
   DEF        lan-bluetooth ME:IN:EI:IP:AD:DR 127.0.0.1:5222 60 60
   DeviceName 127.0.0.1:5222
   FD         37
   FUUID      tada
   INTERVAL_NORMAL 60
   INTERVAL_PRESENT 60
   MODE       lan-bluetooth
   NAME       Presence_Gast_Orange_collect
   NOTIFYDEV  global
   NR         2713
   NTFY_ORDER 50-Presence_Gast_Orange_collect
   PARTIAL
   STATE      present flurLE / flurLE,schlafLE
   TYPE       PRESENCE
   READINGS:
     2019-01-28 08:55:47   BatterieWechsel 28.01.2019 (7 Monate - last: 16.04.2018 / 07.10.2017)
     2019-01-28 03:00:00   LastLowBattMailSent 1
     2019-04-24 13:33:21   absentSince     2019-04-24 13:33:21
     2019-12-04 08:49:42   battery         ok
     2019-12-04 08:49:42   batteryLevel    94
     2019-12-04 08:59:26   command_accepted yes
     2019-12-04 11:16:38   daemon          lepresenced V0.9
     2019-12-04 11:16:38   device_name     Gigaset G-tag
     2019-12-04 11:16:38   lastabsent      2019-11-17 18:00:39
     2019-12-04 11:16:38   lastpresent     2019-12-04 11:16:38
     2019-12-04 11:16:38   model           lan-lepresenced
     2019-12-04 11:16:38   presence        present
     2019-04-24 13:42:07   presentSince    2019-04-24 13:42:07
     2019-12-04 11:16:38   room            flurLE
     2019-12-04 11:16:38   rooms           flurLE,schlafLE
     2019-12-04 11:16:38   rssi            -70
     2019-12-04 11:16:38   rssi_flurLE     -70
     2019-12-04 11:16:38   rssi_schlafLE   -71
     2019-12-04 09:52:27   rssi_wohnLE     -71
     2019-12-04 09:52:27   rssi_zeroLE     -78
     2019-12-04 11:16:38   state           present
     2019-12-04 08:59:38   status          present
   helper:
     CURRENT_STATE present
     CURRENT_TIMEOUT normal
     DISABLED   0
     PRESENT_COUNT 0
Attributes:
   absenceThreshold 2
   comment    4C:66:41:3C:63:CF
   event-on-change-reading battery,batteryLevel,presence,state
   group      PRESENCE
   room       Presence
   sortby     050
   stateFormat state room / rooms
   userReadings status:(present|absent) { ReadingsVal($name,"state","nA") eq "present" ? "present" : "absent" },
absentSince:status:.absent   {if (ReadingsVal($name,"status","nA") eq "absent")  {ReadingsTimestamp($name,"status","nA")} else {ReadingsVal($name,"absentSince","nA")}},
presentSince:status:.present {if (ReadingsVal($name,"status","nA") eq "present") {ReadingsTimestamp($name,"status","nA")} else {ReadingsVal($name,"presentSince","nA")}},
lastpresent {if (ReadingsVal($name,"state","nA") eq "present") {ReadingsTimestamp($name, "state", "nA")} else {ReadingsVal($name,"lastpresent","nA")}},
lastabsent  {if (ReadingsVal($name,"state","nA") eq "absent")  {ReadingsTimestamp($name, "state", "nA")} else {ReadingsVal($name,"lastabsent","nA")}}
   verbose    0
   webCmd     statusRequest


Internals:
   ADDRESS    ME:IN:EI:IP:AD:DR
   CHANGED
   DEF        lan-bluetooth ME:IN:EI:IP:AD:DR 127.0.0.1:5222 60 60
   DeviceName 127.0.0.1:5222
   FD         36
   FUUID      tada
   INTERVAL_NORMAL 60
   INTERVAL_PRESENT 60
   MODE       lan-bluetooth
   NAME       Presence_GTag_White_collect
   NOTIFYDEV  global
   NR         2671
   NTFY_ORDER 50-Presence_GTag_White_collect
   PARTIAL
   STATE      present flurLE / flurLE,schlafLE
   TYPE       PRESENCE
   READINGS:
     2019-02-26 00:23:53   BatterieWechsel 01.03.2019 (9 Monate - last: 01.06.2018)
     2019-11-27 04:30:56   battery         ok
     2019-11-27 04:30:56   batteryLevel    47
     2019-12-04 08:55:38   command_accepted yes
     2019-12-04 11:15:02   daemon          lepresenced V0.9
     2019-12-04 11:15:02   device_name     Gigaset G-tag
     2019-12-04 11:15:02   model           lan-lepresenced
     2019-12-04 11:15:02   presence        present
     2019-12-04 11:15:02   room            flurLE
     2019-12-04 11:15:02   rooms           flurLE,schlafLE
     2019-12-04 11:15:02   rssi            -72
     2019-12-04 11:15:02   rssi_flurLE     -72
     2019-12-04 11:15:02   rssi_schlafLE   -81
     2019-12-04 09:51:39   rssi_wohnLE     -49
     2019-12-04 09:51:38   rssi_zeroLE     -85
     2019-12-04 11:15:02   state           present
   helper:
     CURRENT_STATE present
     CURRENT_TIMEOUT normal
     PRESENT_COUNT 0
Attributes:
   absenceThreshold 3
   alias      PresenceWhite
   event-on-change-reading battery,batteryLevel,presence,state
   group      PRESENCE,SERVER
   room       Favourites,Presence
   sortby     042
   stateFormat {myPresenceGTagCollectStateFormat($name)}
   verbose    0
   webCmd     statusRequest
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

mumpitzstuff

Das ist wirklich mehr als eigenartig. Es wird jeweils das richtige Device abgefragt, allerdings schlägt ab dem 2. diese Abfrage fehl:

if ( $deviceList =~ m/\s+STATE\s+present/ )

Wenn ich jetzt aber beide von dir geposteten Listings bei https://regex101.com/ eingebe und als regexp:

\s+STATE\s+present

habe ich bei beiden Devices ein Match. Ich kann mir deshalb nur noch vorstellen, das diese Zeile:

$deviceList = fhem( "list $device", 1 );

manchmal Bullshit ausgibt.

Könntest du bitte mal lokal versuchen die Zeile 263 von:

Log3 $name, 4, "Sub BleTagBattery_BlockingRun ($name) - device not present.";

in das hier zu ändern?

Log3 $name, 4, "Sub BleTagBattery_BlockingRun ($name) - device not present.\n".$deviceList;

Danach "shutdown restart" nicht vergessen und bletagsbattery einmal starten und das Logfile ansehen.

Jamo

Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack