ESP32 MQTT BT Erkennung RSSI Item Number wird geNULLt?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Lux73
Beiträge: 61
Registriert: 26. Dez 2019 12:32
Answers: 0
Wohnort: Bielefeld

ESP32 MQTT BT Erkennung RSSI Item Number wird geNULLt?

Beitrag von Lux73 »

Gute Morgen,

ich habe mein OH 4.1 um einen ESP32 mit BT erweitert und nutze dieses um zuverlässig Präsenz zuhause zu erkennen. Smartphone Erkennung allein reicht nicht immer in allen Fällen aus (Handy leer, WLAN manuell abgestellt aus diversen Gründen etc.)

Habe dies auch erfolgreich mit in einer:

Code: Alles auswählen

Group:Switch:OR(ON, OFF)	gPraesenz
Gruppe umgesetzt wo alle Geräte enthalten sind...

Jetzt möchte ich bei den BT iBeacons welche vom ESP32 gescannt werden und den Status dann an den MQTT Broker gesendet werden noch eine "zuletzt online" Funktion nachrüsten.

Dafür wollte ich die Empfangsstärke der iBeacon's nutzen, wenn die nicht mehr upgedatet wird ist klar das der letzte Timestamp dessen auch gleichzeitig das Datum/Uhrzeit von zuletzt online ist...

Jetzt habe ich das Problem das der ESP32 alle 30 Sekunden für jeweils 15 Sekunden scannt und alle gefundenen BT MAC Adressen in ein Topic schreibt:

Code: Alles auswählen

esp32/OMG_ESP32_BLE/BTtoMQTT/undecoded
mqtt_broker_scanner.PNG
und damit anscheinend - sollte er nach meinem iBeacon ein anderes Gerät finden - die in OpenHAB gesendete RSSI sofort mit einem "NULL" überschreibt :shock:

Code: Alles auswählen

2024-03-06 11:41:59.498 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from NULL to -80
2024-03-06 11:42:06.005 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from -80 to NULL
2024-03-06 11:42:15.530 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from NULL to -80
2024-03-06 11:42:15.966 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from -80 to NULL
2024-03-06 11:42:25.564 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from NULL to -77
2024-03-06 11:42:25.666 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from -77 to NULL
2024-03-06 11:42:41.640 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from NULL to -81
2024-03-06 11:42:42.358 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from -81 to NULL
2024-03-06 11:42:55.670 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from NULL to -79
2024-03-06 11:42:56.201 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from -79 to NULL
2024-03-06 11:43:15.684 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from NULL to -80
2024-03-06 11:43:17.907 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from -80 to NULL
2024-03-06 11:43:27.721 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from NULL to -79
2024-03-06 11:43:28.236 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from -79 to NULL
2024-03-06 11:43:41.770 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from NULL to -81
2024-03-06 11:43:42.205 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Praesenz_Michael_iBeacon_RSSI' changed from -81 to NULL
so ist das irgendwie nicht gewüscht von mir :mrgreen: komme aber irgedwie nicht weiter...

esp32_ibeacon.things:

Code: Alles auswählen

//###############
Thing mqtt:topic:esp32bridge		"ESP32 BLE Bridge"		(mqtt:broker:mosquitto)		@ "Expert" {
	Channels:
		Type string : state			[stateTopic="esp32/OMG_ESP32_BLE/LWT"]
		Type string : installed_version		[stateTopic="esp32/OMG_ESP32_BLE/RLStoMQTT", transformationPattern="JSONPATH:$.installed_version"]
		Type string : blepresence		[stateTopic="esp32/OMG_ESP32_BLE/BTtoMQTT/undecoded"]
		Type string : ibeacon_mic_rssi		[stateTopic="esp32/OMG_ESP32_BLE/BTtoMQTT/undecoded", transformationPattern="JSONPATH:$..[?(@.id==\"DC:0D:30:16:CF:1A\")].rssi"]
}
ibeacon.items:

Code: Alles auswählen

Switch Switch_Praesenz_Michael_iBeacon			"Präsenz Michael iBeacon [MAP(praesenz.map):%s]"					<bluetooth>					(gPraesenz)			{expire="60s,command=OFF"}
Number Praesenz_Michael_iBeacon_RSSI			"Präsenz Michael iBeacon RSSI [%d]"							<none>										{channel="mqtt:topic:esp32bridge:ibeacon_mic_rssi", unit="%"}
//DateTime Praesenz_Michael_iBeacon_Timestamp		"Präsenz Michael iBeacon Timestamp [%1$td.%1$tm.%1$tY %1$tH:%1$tM:%1$tS]"		<time>										{channel="mqtt:topic:esp32bridge:ibeacon_mic_rssi" [profile="timestamp-change"]}
Die Frage ist jetzt warum er mir mein Item "Praesenz_Michael_iBeacon_RSSI" sofort wieder nullt obwohl ich doch m.e. schon ein Thing angelegt habe welches doch nur nach "meiner" MAC Adresse scannt...

Nochmal kurz zusammengefasst was ich möchte: die letzte Empfangsstärke soll als Number erhalten bleiben und dann möchte ich per "{[profile="timestamp-change"]}" ein weiteres Item nutzen um die zuletzt online Funktion umzusetzen

Sorry für den ellenlangen Text aber ansonsten versteht mann evtl nicht was ich genau erreichen möchte und wo es momentan hakt :mrgreen:

Grüße
Michael
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
APU2c4|Debian11.8|OpenHAB4.1.1@Zulu17|mosquitto|hostapd|dnsmasq|influxdb|grafana|zigbee2mqtt / Huawei MediaPad T5|FullyKioskBrowser
Zigbee: CC2652RB|7x Hue|3xIlluminize 5110.40|1xFLS-PP|4xDanfoss Ally|Aqara 5xMCCGQ11LM/6xWSDCGQ11LM/6xGZCGQ01LM/4xRTCGQ11LM/2xRTCGQ13LM/1xDJT11LM/1xRTCZCGQ11LM|TuYa 2xTS011F/3xTS0601|1xCC2530.ROUTER
MQTT: Tasmota11.1.0|8xDelock 11826|3xShelly1|3xBlitzwolf SHP8|1xGosund SP112

Benutzeravatar
udo1toni
Beiträge: 13987
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: ESP32 MQTT BT Erkennung RSSI Item Number wird geNULLt?

Beitrag von udo1toni »

Der Punkt ist, Du fragst ein Topic ab und suchst im gelieferten JSON nach dem Wert in einem Feld. Dieses Feld steht aber gar nicht im JSON zur Verfügung. Per Definition ist der Wert dieses Feldes also... null.

Lösen lässt sich dieses Problem aber relativ einfach mit einer verketteten Transformation.

Code: Alles auswählen

transformationPattern="REGEX:(.*DC:0D:30:16:CF:1A.*)∩JSONPATH:$..[?(@.id=='DC:0D:30:16:CF:1A')].rssi"
REGEX übergibt den vollständigen Sting, falls die Zeichenkette DC:0D:30:16:CF:1A enthalten ist, ansonsten einen leeren String. JSONPath wird einen leeren String aber ignorieren, denn damit ist klar, dass kein gültiges JSON zur Auswertung vorliegt. ImJSONPath Ausdruck kannst Du das doppelte Anführungszeichen auch mit dem einfachen Anführungszeichen ersetzen, es ist ja nicht Teil des Suchstrings, sondern dient der Abgrenzung.

REGEX muss natürlich installiert sein. :)

Das Sonderzeichen zur Verkettung der beiden Transformations heißt im Englischen Intersection, im deutschen heißt es korrekt Schnittmenge, Microsoft hat in der Zeichentabelle daraus aber Durchschnitt gemacht, was mathematisch und logisch etwas völlig anderes ist ;) aber was soll's.

Das Symbol ist auch im Hilfetext zu dem Feld aufgeführt, man kann es also von dort bequem kopieren.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Lux73
Beiträge: 61
Registriert: 26. Dez 2019 12:32
Answers: 0
Wohnort: Bielefeld

Re: ESP32 MQTT BT Erkennung RSSI Item Number wird geNULLt?

Beitrag von Lux73 »

Junge, was du so alles weißt :shock: :mrgreen:

da wäre ich im Leben nicht drauf gekommen ^^

komme leider erst am Wochenende dazu deinen Tip umzusetzen

Gebe dann Rückmeldung ;)

Vielen Dank schonmal!

Grüße aus Bielefeld
Michael
APU2c4|Debian11.8|OpenHAB4.1.1@Zulu17|mosquitto|hostapd|dnsmasq|influxdb|grafana|zigbee2mqtt / Huawei MediaPad T5|FullyKioskBrowser
Zigbee: CC2652RB|7x Hue|3xIlluminize 5110.40|1xFLS-PP|4xDanfoss Ally|Aqara 5xMCCGQ11LM/6xWSDCGQ11LM/6xGZCGQ01LM/4xRTCGQ11LM/2xRTCGQ13LM/1xDJT11LM/1xRTCZCGQ11LM|TuYa 2xTS011F/3xTS0601|1xCC2530.ROUTER
MQTT: Tasmota11.1.0|8xDelock 11826|3xShelly1|3xBlitzwolf SHP8|1xGosund SP112

Lux73
Beiträge: 61
Registriert: 26. Dez 2019 12:32
Answers: 0
Wohnort: Bielefeld

Re: ESP32 MQTT BT Erkennung RSSI Item Number wird geNULLt?

Beitrag von Lux73 »

Guten Morgen,

deine REGEX Erweiterung funktioniert wie gewünscht!

btw. das Sonderzeichen kannte ich schon, hab ich bei einigen anderen .things Files schon im Einsatz 🙊

Vielen Dank nochmal für deine allseits kompetente und schnelle Hilfe 😎👍

Schönen Sonntag

Grüße
Michael
APU2c4|Debian11.8|OpenHAB4.1.1@Zulu17|mosquitto|hostapd|dnsmasq|influxdb|grafana|zigbee2mqtt / Huawei MediaPad T5|FullyKioskBrowser
Zigbee: CC2652RB|7x Hue|3xIlluminize 5110.40|1xFLS-PP|4xDanfoss Ally|Aqara 5xMCCGQ11LM/6xWSDCGQ11LM/6xGZCGQ01LM/4xRTCGQ11LM/2xRTCGQ13LM/1xDJT11LM/1xRTCZCGQ11LM|TuYa 2xTS011F/3xTS0601|1xCC2530.ROUTER
MQTT: Tasmota11.1.0|8xDelock 11826|3xShelly1|3xBlitzwolf SHP8|1xGosund SP112

Benutzeravatar
udo1toni
Beiträge: 13987
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: ESP32 MQTT BT Erkennung RSSI Item Number wird geNULLt?

Beitrag von udo1toni »

Immer gerne :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten