Autor Thema: lepresenced - hciconfig hcitool gatttool deprecated  (Gelesen 8289 mal)

Online PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 979
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #30 am: 25 September 2022, 14:39:22 »
Hi!

wenn ich das richtig verstehe: “collectord” funktioniert mit dem MQTT Ansatz nicht mehr, oder?
Prinzipiell konnte man aus meiner Sicht collectord schon immer mit FHEM-Bordmitteln ersetzen.

Oder braucht man den dann gar nicht mehr? Dann läuft auf allen verteilten (RPi) clients das script, auf der fhem Haupinstanz kommt dann alles unter einem MQTT_Device zusammen.
So könnte man es tun, aber Du brauchst vermutlich zusätzlich noch eine Lösung, um die Status der verschiedenen Instanzen zusammenzuführen. Wenn es Dir nur um an- oder abwesend geht könntest Du das schnell und einfach über eine Structure lösen. Wenn Du mehr möchtest, also z. B. eine Info, in welchem Raum Du am wahrscheinlichsten bist, vielleicht mit einem Notify/DOIF.

Patrick


lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

Offline gestein

  • Hero Member
  • *****
  • Beiträge: 1255
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #31 am: 25 September 2022, 18:01:25 »
Hallo,

ich wollte mich damit mal ein bisschen spielen.
Nach der Installation des Tools und eines MQTT2-Servers bekomme ich nun ein MQTT2-Device und dort werden alle Bluetooth-Devices im Attribut readingList gespeichert:
ble2mqttd_Sepia_Client_:ble2mqtt/heartbeat:.* heartbeat
ble2mqttd_Sepia_Client_:ble2mqtt/5A_DF_B5_71_7E_5B/lastseen:.* lastseen
ble2mqttd_Sepia_Client_:ble2mqtt/5A_DF_B5_71_7E_5B/present:.* present
ble2mqttd_Sepia_Client_:ble2mqtt/F3_33_4E_A2_A7_EC/lastseen:.* lastseen
ble2mqttd_Sepia_Client_:ble2mqtt/F3_33_4E_A2_A7_EC/present:.* present
ble2mqttd_Sepia_Client_:ble2mqtt/EA_EA_66_97_10_F3/lastseen:.* lastseen
ble2mqttd_Sepia_Client_:ble2mqtt/EA_EA_66_97_10_F3/present:.* present
ble2mqttd_Sepia_Client_:ble2mqtt/59_50_EB_AA_53_98/lastseen:.* lastseen
ble2mqttd_Sepia_Client_:ble2mqtt/59_50_EB_AA_53_98/present:.* present
ble2mqttd_Sepia_Client_:ble2mqtt/F3_F4_96_4D_1C_C6/lastseen:.* lastseen
ble2mqttd_Sepia_Client_:ble2mqtt/F3_F4_96_4D_1C_C6/present:.* present
ble2mqttd_Sepia_Client_:ble2mqtt/58_9E_C6_0E_EC_AD/lastseen:.* lastseen
ble2mqttd_Sepia_Client_:ble2mqtt/58_9E_C6_0E_EC_AD/present:.* present
ble2mqttd_Sepia_Client_:ble2mqtt/79_49_3C_4B_9D_33/lastseen:.* lastseen
ble2mqttd_Sepia_Client_:ble2mqtt/79_49_3C_4B_9D_33/present:.* present
und etliche mehr

Ist das so gedacht?
D.h. ich muss nun manuell die MQTT2-Devices wie von drhirn anlegen?
https://forum.fhem.de/index.php/topic,127173.msg1226199.html#msg1226199

Danke im Voraus
lg, Gerhard

Online PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 979
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #32 am: 25 September 2022, 20:23:23 »
Hi!

Hallo,

ich wollte mich damit mal ein bisschen spielen.
Nach der Installation des Tools und eines MQTT2-Servers bekomme ich nun ein MQTT2-Device und dort werden alle Bluetooth-Devices im Attribut readingList gespeichert:

Ist das so gedacht?
Jein. Es ist so von MQTT2_SERVER gedacht. Der versucht zu raten, wie Du Deine Geräte gerne hättest. Ob Dir das was bringt, ist eine andere Frage.

D.h. ich muss nun manuell die MQTT2-Devices wie von drhirn anlegen?
Wenn Du es sauber und geordnet haben willst mit einem FHEM-Device pro MAC-Adresse ja.

Grüße
Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

Offline gestein

  • Hero Member
  • *****
  • Beiträge: 1255
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #33 am: 25 September 2022, 22:16:08 »
Verstehe. Danke.
Kann man das abstellen?

Meine Gtags laufen probeweise seit ein paar Stunden.
Mal sehen, wie sich das bewährt. Schaut gut aus :)

Ganz verstehe ich noch nicht, wie man nun collectord ersetzen kann.
Ich habe 3 Rechner, die einige Zimmer abdecken.
Dann müsste ich pro Rechner einen MQTT2-Server mit anderem Port anlegen und jeweils ein MQTT2-Device.
Oder?

Ist dann irgendwann geplant, den Rechnernamen oder eine andere Kennung mitzuschicken, damit man das unterscheiden kann?
Wäre auch der Batterielevel geplant?  ;)

Danke, lg, Gerhard

Online PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 979
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #34 am: 25 September 2022, 23:05:31 »
Hi!
Kann man das abstellen?
Uff, nutze das Modul nicht. Aber gehe davon aus, dass Du in der Commandref von MQTT2_SERVER etwas zu autocreate findest.

Meine Gtags laufen probeweise seit ein paar Stunden.
Mal sehen, wie sich das bewährt. Schaut gut aus :)
ble2mqttd nutzt gattool, was nach meiner Wahrnehmung um Welten stabiler ist.

Ganz verstehe ich noch nicht, wie man nun collectord ersetzen kann.
Ich habe 3 Rechner, die einige Zimmer abdecken.
Dann müsste ich pro Rechner einen MQTT2-Server mit anderem Port anlegen und jeweils ein MQTT2-Device.
Oder?

Ist dann irgendwann geplant, den Rechnernamen oder eine andere Kennung mitzuschicken, damit man das unterscheiden kann?
Ein MQTT2_SERVER reicht. Du musst nur bei jedem ble2mqttd ein anderes topic setzen und dann nach der "drhirn-Methode" für jede MAC-Adress-Raum-Kombination ein Device in FHEM, z. B.

Gerhard_Wohnzimmer
Gerhard_Flur
Gerlinde_Wohnzimmer
Gerlinde_Flur

Und dann fasst Du die Gerhards in einer structure zusammen und die Gerlindes in einer anderen. Damit bekommst Du dann einen hausweiten Gerhard-Status. Das jetzt erstmal ins Unreine gedacht. Habe das selbst noch nicht gemacht.

Etwas anspruchsvoller wird dann die Auswertung, in welchem Raum Du mit größter Wahrscheinlichkeit bist (-> rssi-Werte).

Wäre auch der Batterielevel geplant?  ;)
Das würde sich anbieten. Aber mir fehlt momentan zugegebenermaßen die Zeit, da weiter dran zu werkeln. Eigentlich hatte ich schon für ble2mqttd keine :)

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

Offline gestein

  • Hero Member
  • *****
  • Beiträge: 1255
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #35 am: 25 September 2022, 23:44:18 »
Hallo Patrick,

Danke.
Mit „autocreate no“ ist hier wieder Ruhe.

In der Hilfe von ble2mqttd kann ich zum Thema topic nichts finden.
Habe ich da vielleicht eine alte Version?

Mit etwas Warten kann ich natürlich leben  ;)
Danke, lg, Gerhard

Online PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 979
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #36 am: 26 September 2022, 08:45:13 »
Hi!

In der Hilfe von ble2mqttd kann ich zum Thema topic nichts finden.
Habe ich da vielleicht eine alte Version?
Nö, nur hat "irgendwer" vergessen, das in die Usage reinzupacken ;)

Einfach ble2mqttd zusätzlich mit
--mqtttopic ble2mqtt/flur
aufrufen.

Dann für jede Instanz in der drhirn-Definition
attr mqttTest devicetopic ble2mqtt/7C_2F_80_AF_1A_F8
durch
attr mqttTest devicetopic ble2mqtt/flur/7C_2F_80_AF_1A_F8
ersetzen.

Patrick
« Letzte Änderung: 26 September 2022, 13:27:46 von PatrickR »
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

Online PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 979
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #37 am: 26 September 2022, 08:54:13 »
Neue Version 0.05 mit angepasster Hilfe, keine funktionalen Änderungen.

/Edit: Anhang entfernt. Aktuelle Version in #59
« Letzte Änderung: 03 November 2022, 21:51:05 von PatrickR »
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

Offline gestein

  • Hero Member
  • *****
  • Beiträge: 1255
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #38 am: 26 September 2022, 13:28:41 »
Hallo,

ich habe mich an der neuen Version versucht.
Damit hätte man schon mal die Werte pro Raum:
devicetopic ble2mqttd/.*/58_9E_C6_0E_EC_AD
$DEVICETOPIC/rssi:.* {my $room=(split /\//,$TOPIC)[1]; {"rssi_$room"=>$EVENT}}
$DEVICETOPIC/lastseen:.* {my $room=(split /\//,$TOPIC)[1]; {"lastseen_$room"=>strftime "%Y-%m-%d %H:%M:%S", localtime($EVENT)}}
$DEVICETOPIC/present:.* {my $room=(split /\//,$TOPIC)[1]; $EVENT ? {state=>'present'} : {state=>'absent'} }
$DEVICETOPIC/present:.* {my $room=(split /\//,$TOPIC)[1]; $EVENT ? {"presence_$room"=>'present'} : {"presence_$room"=>'absent'} }
$DEVICETOPIC/LWT:.* LWT

Nun muss ich mir noch überlegen, wie ich die present-Werte aus den bekannten Räumen zusammenführe und richtig auswerte.
Und das mit dem LWT stimmt auch noch nicht  ;)

lg, Gerhard

Online PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 979
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #39 am: 26 September 2022, 18:23:57 »
Hi!

Damit hätte man schon mal die Werte pro Raum:
devicetopic ble2mqttd/.*/58_9E_C6_0E_EC_AD
$DEVICETOPIC/rssi:.* {my $room=(split /\//,$TOPIC)[1]; {"rssi_$room"=>$EVENT}}
$DEVICETOPIC/lastseen:.* {my $room=(split /\//,$TOPIC)[1]; {"lastseen_$room"=>strftime "%Y-%m-%d %H:%M:%S", localtime($EVENT)}}
$DEVICETOPIC/present:.* {my $room=(split /\//,$TOPIC)[1]; $EVENT ? {state=>'present'} : {state=>'absent'} }
$DEVICETOPIC/present:.* {my $room=(split /\//,$TOPIC)[1]; $EVENT ? {"presence_$room"=>'present'} : {"presence_$room"=>'absent'} }
$DEVICETOPIC/LWT:.* LWT
Ah, Du packst alle Infos zu einer Person in ein Gerät. Ggf. kann man in diesem Fall sogar die Auswertung mit einem (etwas größeren) Userreading lösen. Das könnte man dann sogar in 99_MyUtils auslagern und für alle Bewohner-Devices nutzen.

Und das mit dem LWT stimmt auch noch nicht  ;)
Ja, vor allem auch, weil ble2mqttd das Topic garnicht setzt. Bislang gibt es als schlechte Alternative das instanzweite Heartbeat-Topic.

Patrick
« Letzte Änderung: 26 September 2022, 19:06:32 von PatrickR »
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

Offline gestein

  • Hero Member
  • *****
  • Beiträge: 1255
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #40 am: 27 September 2022, 09:53:58 »
Hallo,

ja, das war meine Idee. Irgendwie habe ich gerne alles in einem Gerät, wenn es sinnvoll zusammengehört.
Prinzipiell klappt das mit dem userreading presence schon (ist aber relativ aufwändig und als Einzeiler unübersichtlich).
$DEVICETOPIC/present:.* {my $room=(split /\//,$TOPIC)[1]; my $presence="absent";foreach my $readingname (keys %{$defs{"$NAME"}->{READINGS}}) {if($readingname =~ "presence_" && ReadingsVal("$NAME","$readingname","absent") eq "present") {$presence="present";last}}; if($EVENT) {$presence="present"}; fhem "setreading $NAME state $presence";fhem "setreading $NAME presence $presence"; $EVENT ? {"presence_$room"=>'present'} : {"presence_$room"=>'absent'}}
Wenn man auch den Raum und die RSSI als userreading haben will, wird es noch etwas aufwändiger.
Damit hätte man dann 2 Funktionen in 99_myUtils.

Ich teste den Code mal mit 2 oder 3 Nebenstellen, bevor ich mehr dazu poste.

lg, Gerhard

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2001
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #41 am: 27 September 2022, 10:06:33 »
Ich wollte nur kurz anmerken, bevor du dir zu viel Arbeit antust: Das PRESENCE Modul kann auch auf Events hören. Löst nicht die Sache mit dem Raum, könnte aber sonst ein paar Dinge einfacher machen.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19664
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #42 am: 27 September 2022, 10:19:14 »
Vielleicht hilft es weiter - hatte mal was ähnliches angefangen für OpenMQTTGateway:

Es wird alles in ein MQTT2_DEVICE gepiped, das von den unterschiedlichen ESP's für einen BT-Tag empfangen wird:
define OMG_FFFFC424A12B MQTT2_DEVICE FFFFC424A12B
attr OMG_FFFFC424A12B userattr maxPresenceAge maxReadingsAge
attr OMG_FFFFC424A12B IODev MQTT2_FHEM_Server
attr OMG_FFFFC424A12B autocreate 0
attr OMG_FFFFC424A12B icon rfid_tag
attr OMG_FFFFC424A12B maxPresenceAge 1200
attr OMG_FFFFC424A12B maxReadingsAge 100000
attr OMG_FFFFC424A12B model OpenMQTTGateway_BT_gtag
attr OMG_FFFFC424A12B readingList home/(O[^/]*M[^/]*G[^/]*)/BTtoMQTT/FFFFC424A12B:.* { $TOPIC =~ m,home/(O[^/]*M[^/]*G[^/]*)/BTtoMQTT,;; json2nameValue($EVENT, "${1}_") }\
  home/(O[^/]*M[^/]*G[^/]*)/BTtoMQTT/FFFFC424A12B:.* { $TOPIC =~ m,home/(O[^/]*M[^/]*G[^/]*)/BTtoMQTT,;; {"last_IO"=>"$1"}}
attr OMG_FFFFC424A12B room Steuerung->Interfaces
attr OMG_FFFFC424A12B stateFormat Last IO: last_IO
attr OMG_FFFFC424A12B userReadings bestRecentGW:.*_rssi.* {identifyMyBestGW($name)}

PRESENCE auch via function:
define FFFFC424A12B_presence PRESENCE function { my $maxage = AttrVal("OMG_FFFFC424A12B","maxPresenceAge","300");;;; ReadingsAge("OMG_FFFFC424A12B","Last_IO","100000") < $maxage ? 1 : 0 }
Und hier noch die myUtils für das Ermitteln des "besten IO's":
sub identifyMyBestGW {
  my $name = shift;
  my $maxReadingsAge = shift // AttrVal($name,"maxReadingsAge",600);
 
  my $hash = $defs{$name};
  my @rssis = grep { $_ =~ /.*_rssi/ } sort keys %{ $hash->{READINGS} };
  my $bestGW = "unknown";
  my $bestGWold = ReadingsVal($name,"bestRecentGW","unknownGW");
  my $bestRSSI = -1000;
  my $currentRSSI = 0;
  for (@rssis) {
    if (ReadingsAge($name,$_,100) < $maxReadingsAge) {
      $currentRSSI = ReadingsVal($name,$_,-1100);
      if ($currentRSSI > $bestRSSI) {
        $bestRSSI = $currentRSSI ;
        $bestGW = $_;
      }
     
    }
  }
  $bestGW =~ s/_.*//g;
  return $bestGW ne $bestGWold ? $bestGW : undef;
}
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Offline gestein

  • Hero Member
  • *****
  • Beiträge: 1255
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #43 am: 27 September 2022, 10:44:19 »
Ich wollte nur kurz anmerken, bevor du dir zu viel Arbeit antust: Das PRESENCE Modul kann auch auf Events hören. Löst nicht die Sache mit dem Raum, könnte aber sonst ein paar Dinge einfacher machen.
Bis dato hatte ich für meine GTags je ein PRESENCE-Device mit lepresenced/collectord.
Das wurde dann im ROOMMATE ausgewertet.
Nun hatte ich versuchsweise das PRESENCE-Device durch das MQTT2-Device ersetzt.
Hatte im ersten Schritt mal funktioniert.
Werde mir aber gerne anschauen, ob diese Kette besser ist: MQTT2-Device (mit ble2mqttd) -> PRESENCE-Device -> ROOMMATE

@Beta-User: Vielen Dank. Sehr interessant. Das schaue ich mir auch gerne an.

lg, Gerhard

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19664
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #44 am: 27 September 2022, 11:14:57 »
Nachtrag noch...

Habe gesehen, dass das betr. attrTemplate auch noch ein update erfahren hat, damit nur noch ein Event-Stapel ausgelöst wird. Könnte man hier genauso machen, z.B. so (eleganter wäre es, den Reading-Wert vorab zu ermitteln):
$DEVICETOPIC/present:.* {my $room=(split /\//,$TOPIC)[1]; $EVENT ? {"presence_$room"=>'present', state=>'present' } : {"presence_$room"=>'absent', state=>'absent'} }
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

 

decade-submarginal