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

Offline PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 926
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #15 am: 27 Juni 2022, 14:46:07 »
Hi!

Verwende ich auch (image: eclipse-mosquitto:latest). Das macht's aber nur noch merkwürdiger.
Ok, der Punkt ist wohl, dass Net::MQTT::Simple kein Auth unterstützt und Net::MQTT::Simple::Auth kein SSL, aber Net::MQTT::Simple::SSL wiederum (natürlich) SSL erfordert, was bei Dir nicht der Fall ist. D. h. Du und ich verwenden andere Pakete, von denen >=1 im Eimer ist. Was für ein Murks.

**edit**
Bringt nichts, da kommt dann gleich der nächste Fehler ;)
Wenn man's richtig ändert, funktioniert das
Das Patchen der Auth.pm? Das ist aber leider keine Lösung für ein Tool, das irgendwann lepresenced ablösen soll.

Leider fehlt mir die Zeit, das MQTT per Hand nachzubauen. Meine letzte Hoffnung, wäre dass das SSL-Modul auch eine Klartextverbindung toleriert. Das werde ich mal testen.

Patrick
« Letzte Änderung: 27 Juni 2022, 15:04:53 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 drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1854
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #16 am: 27 Juni 2022, 15:04:37 »
Das Patchen der Auth.pm? Das ist aber leider keine Lösung für ein Tool, das irgendwann lepresenced ablösen soll.

Ja, nein, eh nicht. Ich wollte nur wissen, ob's funktioniert. Hätte gesucht, ob man irgendwo einen Patch für die Library einbringen könnte. Aber auf die Schnelle nichts gefunden. Das wär nämlich die beste Lösung.

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1854
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #17 am: 27 Juni 2022, 15:22:26 »
  if (!defined($mqttfingerprint)) {
    if ($mqttuser && $mqttpass) {
      $ENV{MQTT_SIMPLE_ALLOW_INSECURE_LOGIN} = 1;
      $mqtt = Net::MQTT::Simple->new($mqttserver);
      $mqtt->login($mqttuser,$mqttpass);
    } else {
      $mqtt = Net::MQTT::Simple->new($mqttserver);
    }
  } else {
    $mqtt = Net::MQTT::Simple::SSL->new($mqttserver, {SSL_fingerprint => $mqttfingerprint});
    if ($mqttuser && $mqttpass) {
      $mqtt->login($mqttuser, $mqttpass);
    }
  }

Geht. Net::MQTT::Simple kann eh Login. Man muss es nur - wenn ohne SSL - explizit erlauben.
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 926
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #18 am: 27 Juni 2022, 15:43:12 »
  if (!defined($mqttfingerprint)) {
    if ($mqttuser && $mqttpass) {
      $ENV{MQTT_SIMPLE_ALLOW_INSECURE_LOGIN} = 1;
      $mqtt = Net::MQTT::Simple->new($mqttserver);
      $mqtt->login($mqttuser,$mqttpass);
    } else {
      $mqtt = Net::MQTT::Simple->new($mqttserver);
    }
  } else {
    $mqtt = Net::MQTT::Simple::SSL->new($mqttserver, {SSL_fingerprint => $mqttfingerprint});
    if ($mqttuser && $mqttpass) {
      $mqtt->login($mqttuser, $mqttpass);
    }
  }

Geht. Net::MQTT::Simple kann eh Login. Man muss es nur - wenn ohne SSL - explizit erlauben.
Sehr cool! Ich habe zwar das Gefühl, dass das tote Pferd damit nur noch länger defibrilliert wird, aber das ist schonmal ein Lichtblick.

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 drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1854
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #19 am: 27 Juni 2022, 15:45:34 »
Sehr cool! Ich habe zwar das Gefühl, dass das tote Pferd damit nur noch länger defibrilliert wird, aber das ist schonmal ein Lichtblick.

Hihi. Aber wenigstens brauchen wir so das toteste Pferd nicht mehr ;D
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1854
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #20 am: 27 Juni 2022, 16:31:06 »
Blöde Frage: Wie bekomme ich aus dem Lastseen eine ordentlich Uhrzeit raus?

So:
$DEVICETOPIC/lastseen:.* {"lastseen"=>strftime "%Y-%m-%d %H:%M:%S", localtime($EVENT)}
« Letzte Änderung: 27 Juni 2022, 16:56:29 von drhirn »
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1854
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #21 am: 27 Juni 2022, 18:17:30 »
Hier mal als Beispiel mein FHEM-Device:
defmod mqttTest MQTT2_DEVICE
attr mqttTest IODev Mosquitto
attr mqttTest devicetopic ble2mqtt/7C_2F_80_AF_1A_F8
attr mqttTest event-on-change-reading .*
attr mqttTest readingList $DEVICETOPIC/rssi:.* rssi\
$DEVICETOPIC/lastseen:.* {"lastseen"=>strftime "%Y-%m-%d %H:%M:%S", localtime($EVENT)}\
$DEVICETOPIC/present:.* { $EVENT ? {state=>'present'} : {state=>'absent'} }

Hab aber noch ein paar Fragen:
1. Wie stoppe ich das Tool wieder, wenn ich's als Daemon gestartet habe?
2. --absentinterval geht (noch) nicht, oder?
3. Warum minimal 30s absentinterval?
4. Ist noch ein dritter Status "away" nach x Stunden absent geplant? Der wäre für mich wichtig.
« Letzte Änderung: 27 Juni 2022, 18:37:38 von drhirn »
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 926
Antw:lepresenced - hciconfig hcitool gatttool deprecated
« Antwort #22 am: 30 Juni 2022, 11:31:01 »
Hi!

Danke für Deine Tests, den Patch und Konfigurationsbeispiele.

1. Wie stoppe ich das Tool wieder, wenn ich's als Daemon gestartet habe?
Zunächst mal durch kill/killall. Eine PID-Datei wird auch unter /var/run angelegt, so dass Du es auch sauber über kill $PID beenden könntest. Prinzipiell kannst Du Dir damit einen Systemd-Service bauen.
Das ginge alles natürlich noch schöner und automatisch mit einem DEB-Paket. Leider verwendet ble2mqttd CPAN-Module, für die es keine Debian-Pakete gibt, daher verfolge ich das aktuell nicht.

2. --absentinterval geht (noch) nicht, oder?
Gerade mal den Code überflogen. Müsste eigentlich berücksichtigt werden. Wo geht es denn bei Dir schief?

3. Warum minimal 30s absentinterval?
Das ist ein Versuch, den User vor fehlerträchtigen Einstellungen zu schützen. Das Problem ist hier, dass bluetoothctl bei meinen Tests keine Duplicates anzeigt, auch wenn ich sie explizit angefordert habe. Im Ergebnis sieht ble2mqttd weniger Beacons als es tatsächlich gibt. Setzt man nun absentinterval zu niedrig, führen diese übersehenen Beacons zu (falschen) absents. Wenn Du damit experimentieren möchtest, kannst Du einfach den Check in Zeile 190 auskommentieren. Die 30s sind aber nicht in Stein gemeißelt, also gerne Feedback, was bei Dir funktioniert.

4. Ist noch ein dritter Status "away" nach x Stunden absent geplant? Der wäre für mich wichtig.
Nein. Ich möchte offen gestanden auch nicht zu viel Logik in ble2mqttd auslagern, das eigentlich nur nackte Informationen an FHEM weitergeben soll. Streng genommen ist das present-topic eigentlich auch schon zuviel, da man in FHEM über lastseen die Anwesenheit auswerten und beliebig personalisieren kann.

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