FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: JensS am 10 Januar 2022, 18:29:08

Titel: [gelöst: ]Tasmota-BLE BridgeRegex für FlowerCare
Beitrag von: JensS am 10 Januar 2022, 18:29:08
Stehe mal wieder auf dem Schlauch...tele/BTtoMQTT/SENSOR {"Time":"2022-01-10T18:14:19","Flora6ab3c3": "mac":"c47c8d6ab3c3","Temperature":22.3,"Illuminance":43,"Moisture":73,"Fertility":1004,"RSSI":-86},"Flora6aab20": "mac":"c47c8d6aab20","Temperature":23.2,"Illuminance":74,"Moisture":44,"Fertility":931,"RSSI":-66}}
Wie setzt man ein BridgeRegex nicht auf ein Topic, sondern auf eine Message an?
Herauskommen sollen Devices nach dem Schema "Flora_<mac>".

Gruß Jens
Titel: Antw:Tasmota-BLE BridgeRegex für FlowerCare
Beitrag von: JensS am 10 Januar 2022, 19:10:09
Hab's hinbekommen. Zwar etwas eingeschränkt in der Namensgebung aber extra Devices.BTtoMQTT:tele/BTtoMQTT/SENSOR:.*?Flora6(.*?)\".* "Flora_$1"
Nun sind die Readings auch nicht die Schönsten, aber brauchbar.defmod MQTT2_Flora_aab20 MQTT2_DEVICE Flora_aab20
attr MQTT2_Flora_aab20 readingList tele/BTtoMQTT/SENSOR:.* { json2nameValue($EVENT) }
attr MQTT2_Flora_aab20 room neue-Geräte

setstate MQTT2_Flora_aab20 2022-01-10 19:04:19 ESP32_Temperature 43.9
setstate MQTT2_Flora_aab20 2022-01-10 19:04:18 Flora6aab20_Moisture 44
setstate MQTT2_Flora_aab20 2022-01-10 19:04:18 Flora6aab20_RSSI -70
setstate MQTT2_Flora_aab20 2022-01-10 19:04:18 Flora6aab20_mac c47c8d6aab20
setstate MQTT2_Flora_aab20 2022-01-10 19:04:18 IODev MQTT2Server
setstate MQTT2_Flora_aab20 2022-01-10 19:04:19 TempUnit C
setstate MQTT2_Flora_aab20 2022-01-10 19:04:19 Time 2022-01-10T19:04:19
setstate MQTT2_Flora_aab20 2022-01-10 19:04:18 associatedWith MQTT2_BTtoMQTT
Titel: Antw:Tasmota-BLE BridgeRegex für FlowerCare
Beitrag von: MadMax-FHEM am 10 Januar 2022, 19:12:39
Gibt es einen Grund für die Einbindung per mqtt statt dem fhem Modul BTFlowerSens (oder so ähnlich)?

Gruß, Joachim
Titel: Antw:Tasmota-BLE BridgeRegex für FlowerCare
Beitrag von: JensS am 10 Januar 2022, 19:22:27
Ich hatte zuvor ein Python-Script auf einen RPI3+ erfolgreich zu laufen, wollte das aber auf einen ESP32 portieren.
OpenMQTT war ein Versuch aber dort gab es Schwierigkeiten bei der Abfrage. Entweder die Sensoren zu häufig oder nicht vollständig gescannt.
Dann bin ich auf Tasmota-BLE gestoßen, welches zuverlässig scannt und das Abfrage-Intervall gut definierbar ist.

Gerade dachte ich "Heureka" - nun bin ich wieder etwas ernüchtert, da die Log für eine durch die Bridge angelegtes Device so aussieht:2022-01-10_19:04:18 MQTT2_Flora_aab20 Flora6aab20_mac: c47c8d6aab20
2022-01-10_19:04:18 MQTT2_Flora_aab20 Time: 2022-01-10T19:04:18
2022-01-10_19:04:18 MQTT2_Flora_aab20 Flora6aab20_RSSI: -70
2022-01-10_19:04:18 MQTT2_Flora_aab20 Flora6aab20_Moisture: 44
2022-01-10_19:04:19 MQTT2_Flora_aab20 TempUnit: C
2022-01-10_19:04:19 MQTT2_Flora_aab20 ESP32_Temperature: 43.9
2022-01-10_19:04:19 MQTT2_Flora_aab20 Time: 2022-01-10T19:04:19
2022-01-10_19:09:11 MQTT2_Flora_aab20 Flora6c8ea4_mac: c47c8d6c8ea4
2022-01-10_19:09:11 MQTT2_Flora_aab20 Flora6c8ea4_Fertility: 231
2022-01-10_19:09:11 MQTT2_Flora_aab20 Flora6ab2f4_Temperature: 23.3
2022-01-10_19:09:11 MQTT2_Flora_aab20 Flora6c8ea4_Temperature: 25.5
2022-01-10_19:09:11 MQTT2_Flora_aab20 Flora6ab2f4_Fertility: 459
2022-01-10_19:09:11 MQTT2_Flora_aab20 Flora6ab2f4_mac: c47c8d6ab2f4
2022-01-10_19:09:11 MQTT2_Flora_aab20 Flora6ab2f4_RSSI: -61
2022-01-10_19:09:11 MQTT2_Flora_aab20 Flora6ab2f4_Moisture: 41
2022-01-10_19:09:11 MQTT2_Flora_aab20 Time: 2022-01-10T19:09:11
2022-01-10_19:09:11 MQTT2_Flora_aab20 Flora6ab2f4_Illuminance: 35
2022-01-10_19:09:11 MQTT2_Flora_aab20 Flora6c8ea4_Illuminance: 172
2022-01-10_19:09:11 MQTT2_Flora_aab20 Flora6c8ea4_Moisture: 31
2022-01-10_19:09:11 MQTT2_Flora_aab20 Flora6c8ea4_RSSI: -68
2022-01-10_19:09:12 MQTT2_Flora_aab20 Flora6ab3c3_mac: c47c8d6ab3c3
2022-01-10_19:09:12 MQTT2_Flora_aab20 Flora6ab3c3_Fertility: 998
2022-01-10_19:09:12 MQTT2_Flora_aab20 Flora6c9084_Illuminance: 324
2022-01-10_19:09:12 MQTT2_Flora_aab20 Flora6ab3c3_Temperature: 22.3
2022-01-10_19:09:12 MQTT2_Flora_aab20 Time: 2022-01-10T19:09:12
2022-01-10_19:09:12 MQTT2_Flora_aab20 Flora6c9084_Moisture: 2
2022-01-10_19:09:12 MQTT2_Flora_aab20 Flora6c9084_RSSI: -83
2022-01-10_19:09:12 MQTT2_Flora_aab20 Flora6c9084_mac: c47c8d6c9084
2022-01-10_19:09:12 MQTT2_Flora_aab20 Flora6c9084_Fertility: 31
2022-01-10_19:09:12 MQTT2_Flora_aab20 Flora6ab3c3_Moisture: 73
2022-01-10_19:09:12 MQTT2_Flora_aab20 Flora6ab3c3_RSSI: -89
2022-01-10_19:09:12 MQTT2_Flora_aab20 Flora6ab3c3_Illuminance: 60
2022-01-10_19:09:12 MQTT2_Flora_aab20 Flora6c9084_Temperature: -0.7
2022-01-10_19:09:13 MQTT2_Flora_aab20 Flora6aab20_Temperature: 23.1
2022-01-10_19:09:13 MQTT2_Flora_aab20 Flora6aab20_Moisture: 44
2022-01-10_19:09:13 MQTT2_Flora_aab20 Flora6aab20_RSSI: -71
2022-01-10_19:09:13 MQTT2_Flora_aab20 Flora6aab20_Illuminance: 53
2022-01-10_19:09:13 MQTT2_Flora_aab20 Time: 2022-01-10T19:09:13
2022-01-10_19:09:13 MQTT2_Flora_aab20 Flora6aab20_mac: c47c8d6aab20
2022-01-10_19:09:13 MQTT2_Flora_aab20 Flora6aab20_Fertility: 920
2022-01-10_19:09:19 MQTT2_Flora_aab20 ESP32_Temperature: 44.4
2022-01-10_19:09:19 MQTT2_Flora_aab20 TempUnit: C
2022-01-10_19:09:19 MQTT2_Flora_aab20 Time: 2022-01-10T19:09:19
Titel: Antw:Tasmota-BLE BridgeRegex für FlowerCare
Beitrag von: rudolfkoenig am 10 Januar 2022, 19:37:30
Soweit ich sehe, ist das gezeigte Message kein gueltiges JSON, speziell die Stelle "Flora6ab3c3": "mac":"c47c8d6ab3c3" stoert mich.

Die Aufgabe hier ist eine MQTT-Message mehreren Geraeten zuzuweisen, wo man jeweils Teile auswertet.

bridgeRegexp kann das nicht, sie reagiert allergisch (vulgo meldet Fehler), wenn ein Message mehreren clientIDs zugeordnet werden kann.

Man kann aber fuer jeden Sensor ein MQTT2_DEVICE manuell anlegen, jedem das gleiche readingsList mit diesem einem Topic vergeben, und sie im json2nameValue Aufruf unterschiedlich filtern bzw. mit unterschiedlichen jsonMap umbenennen.

Vorausgesetzt, dass meine Theorie, wie man aus dem kaputten JSON was Korrektes macht, stimmt.
Titel: Antw:Tasmota-BLE BridgeRegex für FlowerCare
Beitrag von: Beta-User am 10 Januar 2022, 19:49:03
Evtl. gibt es eine SetOption, (89?), mit der jede BT-Id einen sensor-Topic bekommt...?
Titel: Antw:Tasmota-BLE BridgeRegex für FlowerCare
Beitrag von: JensS am 10 Januar 2022, 21:30:29
Zitat von: rudolfkoenig am 10 Januar 2022, 19:37:30
Soweit ich sehe, ist das gezeigte Message kein gueltiges JSON
Sorry, irgendwie sind einige Klammern verloren gegangen.
Nun nochmal ein Auszug - diesmal als Zitat. Es handelt sich um ein JSON mit einem Textelement und zwei JSON-Elementen.
Zitattele/BTtoMQTT/SENSOR {"Time":"2022-01-10T21:26:13","Flora6ab3c3":{"mac":"c47c8d6ab3c3","Moisture":73,"RSSI":-85},"Flora6ab2f4":{"mac":"c47c8d6ab2f4","Moisture":41,"RSSI":-65}}
Titel: Antw:Tasmota-BLE BridgeRegex für FlowerCare
Beitrag von: JensS am 10 Januar 2022, 21:34:00
Zitat von: Beta-User am 10 Januar 2022, 19:49:03
Evtl. gibt es eine SetOption, (89?), mit der jede BT-Id einen sensor-Topic bekommt...?
Leider nein.
Titel: Antw:Tasmota-BLE BridgeRegex für FlowerCare
Beitrag von: Beta-User am 11 Januar 2022, 05:13:59
Zitat von: JensS am 10 Januar 2022, 21:34:00
Leider nein.
Scheint umgezogen zu sein: https://tasmota.github.io/docs/Commands/#ble-mi-sensors dort MI32Option<x> mit x=6:
Zitatx=6 (from v 9.0.2.1) 1 -> always use MQTT Topic like tele/tasmota_ble/<name> containing only one sensor
Titel: Antw:Tasmota-BLE BridgeRegex für FlowerCare
Beitrag von: JensS am 11 Januar 2022, 14:36:03
Die erste Version war ein notify auf das Bridge-Device:defmod FloraBridgeNotify notify MQTT2_FloraBridge:.* {
my $Florastring = $EVTPART0;
my $Floraname = $Florastring;
my $Florareading = $Florastring;
my $Florawert = $EVTPART1;
$Floraname =~ s/_.*//;
$Florareading =~ s/^Flora.{6}_//;
$Florareading =~ s/://;
if ($Floraname =~ /Flora6/){
  if(!exists($defs{$Floraname})){
    fhem("defmod $Floraname dummy");
fhem("attr $Floraname room Sensoren");
fhem("attr $Floraname stateFormat Feuchte: Moisture % | Dünger: Fertility µS | Temp: Temperature °C | Licht: Illuminance lux | Signal: RSSI")};
  fhem("setreading $Floraname $Florareading $Florawert")
  }
}

Durch der Tipp von @Beta-User - Vielen Dank dafür! - werden nun von der Bridge separate Devices angelegt.

Gruß und Dank an alle!
Jens
Titel: Antw:Tasmota-BLE BridgeRegex für FlowerCare
Beitrag von: Beta-User am 11 Januar 2022, 14:58:41
?

Warum nicht über bridgeRegexp?!? Das sieht seltsam aus, was du da zusammenge-perl-t hast...

Alternativ: Alle "Sub-Devices" im Hauptdevice einfangen und via gezieltem "lege das Device an" einmalig ein MQTT2_DEVICE via attrTemplate anlegen (analog zu dem, wie es bei OpenMQTTGateway gelöst ist).

Nachtrag: Schau dir mal das attrTemplate "tasmota_zigbee2tasmota_bridge" an - das ist evtl. mehr oder weniger direkt verwendbar...
Titel: Antw:Tasmota-BLE BridgeRegex für FlowerCare
Beitrag von: JensS am 11 Januar 2022, 16:38:45
Sorry, meine letzte Nachricht war missverständlich. Der Code war nur eine Übergangslösung. Jetzt nutze ich natürlich eine angepasste bridgeRegexp:attr MQTT2_ESP32_BLE bridgeRegexp tele/tasmota_ble/Flora6.*:.*?mac":"(.*?)".* "FlowerCare_$1"
Gruß Jens
Titel: Antw:Tasmota-BLE BridgeRegex für FlowerCare
Beitrag von: Beta-User am 11 Januar 2022, 16:46:07
Ah, ok.

Wegen der übrigen supporteten BLE-Devices würde ich das ggf. so verallgemeinern:
name:tasmota_bt2tasmota_bridge
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd|stat).*
desc:This is a very early version of a template meant to configure a bridge device showing some basic info about the microcontroller (mcu) itself. For further details on bluetooth2tasmota visit https://tasmota.github.io/docs/Bluetooth_ESP32/ and  https://tasmota.github.io/docs/Commands/#ble-esp32<br>NOTE: Initial version, not yet tested...<br>Most likely will be subject to changes!!!
order:A_06t01
farewell:template has been applied successfully.\n Note: some changes have been applied to the mcu firmware settings. Incoming messages from bluetooth devices now should be forwarded to different FHEM devices, make sure, you have a TYPE=autocreate device active.
par:CMNDTOPIC;Command topic prefix, without trailing /;{ AttrVal('DEVICE','readingList','') =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}cmnd$3" : undef }
par:TELETOPIC;info topic prefix, without trailing /;{ AttrVal('DEVICE','readingList','') =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}tele$3" : undef }
par:STATTOPIC;ack topic prefix, without trailing /;{ AttrVal('DEVICE','readingList','') =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}stat$3" : undef }
par:BRIDGETOPIC;bridgeRegexp to be set;{ my $rL = AttrVal('DEVICE','readingList',''); $rL =~ m,([^:]*)\btele(/.*/)LWT:, ? qq{${1}tele${2}([^/]+)} : $rL =~ m,([^:]*/)tele/LWT:, ? qq{${1}([^/]+)/tele} : undef }
par:IO_DEV;Currently used IO;{ AttrVal('DEVICE','IODev',InternalVal('DEVICE','IODev',undef)->{NAME}) }
set IO_DEV publish CMNDTOPIC/Backlog StateText1 off; StateText2 on; StateText3 toggle; StateText4 hold; SetOption26 1; MI32Option6 1; SaveData 1
par:ICON;ICON as set, defaults to MQTT;{ AttrVal('DEVICE','icon','mqtt') }
attr DEVICE icon ICON
attr DEVICE bridgeRegexp \
  BRIDGETOPIC/SENSOR:.* "bt2t_$1"
attr DEVICE readingList \
  TELETOPIC/LWT:.* LWT\
  TELETOPIC/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ?  json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }\
  TELETOPIC/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  TELETOPIC/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  STATTOPIC/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  STATTOPIC/POWER:.* LED
attr DEVICE setStateList on off
attr DEVICE stateFormat LWT\
<a href="http://IPAddress" target="_blank">Hostname</a><br>
attr DEVICE devStateIcon Online:10px-kreis-gruen@green Offline:10px-kreis-rot@red
set IO_DEV publish CMNDTOPIC/restart 1
attr DEVICE model tasmota_bt2tasmota_bridge
deletereading -q DEVICE (?!associatedWith|IODev).*
setreading DEVICE attrTemplateVersion 20220111


Falls ich nichts mehr dazu höre, wird es so mal eingecheckt, ansonsten können wir auch gerne versuchen, gleich ein attrTemplate für den Flora zu basteln. (Als Referenz: Es gäbe schon ein attrTemplate "OpenMQTTGateway_BT_mi_flora_sensor", das man vermutlich ganz gut ausschlachten kann)
Titel: Antw:Tasmota-BLE BridgeRegex für FlowerCare
Beitrag von: JensS am 11 Januar 2022, 16:49:59
Danke.  :)