ESPresense

Begonnen von The-Holgi, 31 August 2022, 15:28:19

Vorheriges Thema - Nächstes Thema

The-Holgi

Hallo,
bin gerade über ESPresense ,,gestolpert". https://espresense.com/
Da die Kommunikation über MQTT läuft, sollte es doch auch mit Fhem funktionieren.
Hat das schon Jemand getestet ?

Gruß Holger
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

choenig

Hi Holger,

ich habe gerade angefangen, ESPresense in mein FHEM zu integrieren, sehr cooles Projekt :)

Dafür hab' ich bislang 8 ESP32 DevKits im Haus verteilt und mir ein kleines MyUtils-Modul geschrieben, welches die Daten auswertet.

LG
Christian

The-Holgi

Hallo Christian,
hast du Lust ein bißchen mehr darüber zu erzählen, oder deinen MyUtils ,,Code" zu teilen?

Gruß Holger
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

choenig

Hi Holger,

gerne beides, den Code aber erst, nachdem ich ihn aufgeräumt habe :)

Das "Modul" wird zusammen mit einem MQTT2_Device verwendet. Das MQTT2_DEVICE lauscht auf dem `espresence/devices/.*` topic und ruft die MyUtils Funktion auf, die dann mittels der kürzesten Entfernung zum Device den aktuellen Raum für jedes Gerät, das ich beobachte, errechnet und in readings speichert. Das Vorgehen funktioniert aber nur gut, wenn viele ESP32s verteilt sind.

Die readings sehen dann ungefähr so aus:


dist_CHo_AppleWatch5_bad 7.04
dist_CHo_AppleWatch5_buero 1.16
dist_CHo_AppleWatch5_eingang ∞
dist_CHo_AppleWatch5_essbereich 7.54
dist_CHo_AppleWatch5_kueche ∞
dist_CHo_AppleWatch5_schlafzimmer 5.66
dist_CHo_AppleWatch5_sportzimmer 5.29
dist_CHo_AppleWatch5_waschraum ∞
dist_CHo_AppleWatch5_wohnzimmer 4.62
dist_CHo_iPhone12Pro_bad 5.86
dist_CHo_iPhone12Pro_buero 2.72
dist_CHo_iPhone12Pro_eingang ∞
dist_CHo_iPhone12Pro_essbereich 8.68
dist_CHo_iPhone12Pro_kueche ∞
dist_CHo_iPhone12Pro_schlafzimmer 8.2
dist_CHo_iPhone12Pro_sportzimmer 5.6
dist_CHo_iPhone12Pro_waschraum ∞
dist_CHo_iPhone12Pro_wohnzimmer 1.46
dist_INE_AppleWatch5_bad ∞
dist_INE_AppleWatch5_buero ∞
dist_INE_AppleWatch5_eingang ∞
dist_INE_AppleWatch5_essbereich ∞
dist_INE_AppleWatch5_kueche ∞
dist_INE_AppleWatch5_schlafzimmer ∞
dist_INE_AppleWatch5_sportzimmer ∞
dist_INE_AppleWatch5_waschraum ∞
dist_INE_AppleWatch5_wohnzimmer ∞
dist_INE_iPhone12Pro_bad ∞
dist_INE_iPhone12Pro_buero ∞
dist_INE_iPhone12Pro_eingang ∞
dist_INE_iPhone12Pro_essbereich ∞
dist_INE_iPhone12Pro_kueche ∞
dist_INE_iPhone12Pro_schlafzimmer ∞
dist_INE_iPhone12Pro_sportzimmer ∞
dist_INE_iPhone12Pro_waschraum ∞
dist_INE_iPhone12Pro_wohnzimmer ∞
lctn_CHo_AppleWatch5 buero
lctn_CHo_iPhone12Pro wohnzimmer
lctn_INE_AppleWatch5 -
lctn_INE_iPhone12Pro -
room_bad 0
room_buero 1
room_eingang 0
room_essbereich 0
room_kueche 0
room_schlafzimmer 0
room_sportzimmer 0
room_waschraum 0
room_wohnzimmer 1
total 2


Aufgrund der hohen Anzahl an Updates, die da berechnet werden, habe ich das auf meinem 2. FHEM laufen, in dem alles läuft, was ruhig dauern darf. Von da pumpe ich es per mqtt in mein Haupt-FHEM.

Das Hauptproblem ist noch, dass es doch immer wieder vorkommt, dass er im 2-5 Sekundentakt den Raum wechselt, wenn ich z.B. unterhalb des Büros im Wohnzimmer bin. Da muss ich noch eine Stabilisierung einbauen. Dabei möchte ich aber nicht die agilität verlieren, die ich zur Zeit habe. Der Raumwechsel wird in der Regel innerhalb von 5-10 Sekunden erkannt, und das "nach-Hause-kommen" sofort, wenn man vor dem Haus steht, da kommt Meine Unifi-basierte Lösung nicht mit.

Was mir noch fehlt, sind Ideen, wie man das ganze Verwenden kann :).

Zwei Anwendungsfälle habe ich umgesetzt:
* Im Keller-Flur bleibt so lange das Licht an, bis niemand mehr im Waschraum ist. Dadurch spare ich mir 2 Bewegungsmelder, die vorher den ganzen Bereich ausleuchten mussten.
* Im Dachgeschoss schliesse ich den Rolladen nicht mehr bei Regen, wenn jemand im Zimmer ist. Der hat das dann wohl selber unter Kontrolle und möchte Lüften.

Soweit erstmal

LG
Christian

Klaus Heynen

Hallo Christian,
hab das jetzt seit gestern auch mal ausprobiert (mit zus. angeschlossenen PIR Sensoren auf Port22).
Habe 5 Räume damit "vermient"
Ja, die Anzahl der readings ist schon beängstigend.
Vielleicht muss man da auf der ESPresense Seite mal schauen ob man es nicht anpassen kann.
Obwohl ich im Set-up Telemetrie aus geschaltet habe, sendet ESPresesne weiterhin die Daten.

Wäre schön wenn Du deinen Code bald veröffentlichen würdest.

Schön wäre eine Funktion die die einzelnen Räume miteinander Abgleicht in dem man Bewegungs- Zeitprofile erstellt und auswertet und auch die PIR Sensoren integriert. Denn BT schaut ja durch die Wände und da kann ja ein Beacon durchaus nahe am einem ESPresense sein aber leider auf der anderen Seite einer Wand.

Anwendung ist neben der Lichtsteuerung eine Steuerung der Heizung und der Audioanlage.


Grüße Klaus

choenig

Na gut,

hier ist mein Code.

Das ist mein MQTT2_DEVICE in meinem secondary-Fhem (hier muss <DEVICES_TO_WATCH_RE> angepasst werden):


defmod ESPresense MQTT2_DEVICE
attr ESPresense IODev mqtt2__client_mosquitto
attr ESPresense event-on-change-reading .*
attr ESPresense readingList espresense/devices/<DEVICES_TO_WATCH_RE>.*:.* { MyUtils_ESPresense_updateFromMQTT($NAME, $TOPIC, $EVENT) }
attr ESPresense room ESPresence
attr ESPresense timestamp-on-change-reading .*


Im Anhang ist mein 99_MyUtils_ESPresense.pm.

Der Code geht davon aus, dass die Räume keine Unterstriche enthalten, die Readings sind so aufgebaut:


dist_<DEVICE>_<ROOM> => aktueller Abstand des <DEVICE> zum <ROOM> ('∞' wenn nicht anwesend)
lctn_<DEVICE>        => aktueller Raum (location) des <DEVICE>    ('-' wenn nicht anwesend)
room_<ROOM>          => aktuelle Anzahl der Devices im <ROOM>     ('0' wenn nicht belegt)


Viel Spass damit :)

Das letzte, was mir so noch nicht gefällt, ist, dass die Geräte manchmal zwischen Räumen hin-und-herspringen. Das möchte ich noch verbessern. Gleichzeitig möchte ich aber die Agilität nicht verlieren. Mal sehen, was da so geht. Ach ja, und vermutlich werde ich noch was implementieren, dass man mehrere ESP32s in einem Raum haben kann. Das unterstützt ESPresense so noch nicht, da werde ich mir ein Schema überlegen.

LG
Christian

Klaus Heynen

Vielen Dank Christian!

Klaus Heynen

Hab mal überlegt, eigentlich müsste mal doch mit 3 ESPresense eine Triangulation hin bekommen und mit 4 oder mehr auch im 3D Raum.
Was meinst Du?

choenig

Puh,

keine Ahnung, ich bin schon oft überrascht, wie unterschiedlich die Entfernungsangaben sind. Mein iPhone ist in meiner Hosentasche und sagt 2,80m, während die Apple Watch 0,75 sagt, und recht damit hat.

Ich glaube eher, dass viele ESPs viel helfen ;).

LG
Christian

ReviloEgros

Ich wollte nur ein mal danke sagen für dein MyUtils Modul. Habe es jetzt seit ein paar Tagen in benutzung und muss sagen es läuft bisher sehr gut. Habe nur eine kleine Anpassung vorgenommen, da FHEM einen : im Readingnamen verbietet, welcher ja bei den IDs vorkommt. Hatte vorher die Anwesenheitserkennung über mehrere PIs mit lepresenced am laufen, aber da war mir die Zuverlässigkeit bisher immer ein Dorn im Auge. Entweder ist das Bluetooth System auf den PIs abgeschmiert, presense Melungen im collector hängen geblieben oder selbst die lepresensed daemons sind ausgestiegen. Nun hab ich ein paar ESPs im Haus verteilt und habe nun endlich ruhe!

Fillip

#10
Hallo Ihr,
ich will langsam auch mal in die ESPresense "Welt" einsteigen... Aktuell habe ich zum testen auf einem ESP32 ESPresence (v3.1.1) laufen, 5 weitere sollen heute noch ankommen.

Die myUtility99 von dir habe ich schon angelegt - Vielen dank dafür schon mal.

Mir stellt sich aktuell nur die Frage, wie setzt sich denn deine MQTT Topic
espresense/devices/<DEVICES_TO_WATCH_RE>
zusammen?

Ich habe im ESPresense über die "neue" UI den IRK meines iPhones herausgefunden und dort eingetragen unter "Known BLE identity" sowie "Include only sending these ids to mqtt" um das ganze etwas zu mimimieren was die MQTT auslastung angeht

MQTT2 bzw FHEM hat natürlich für den ESPresense (in meinem Fall Wohnzimmer) ein neues Gerät angelegt, das Topic ist da wie folgt
espresense/rooms/wohnzimmer/...

Edit: Hat sich geklärt die frage, anstelle des "<DEVICES_TO_WATCH_RE>" kommt die ID welche Überwacht werden soll, in meinem Fall steht dann da bsp:
espresense/devices/irk_xxxxxxxx

C0mmanda

Habe mich auch mit Espresense beschäftigt und ein Testdevice läuft aktuell wie es soll!
War eigentlich nur neugierig und hatte noch ESP32 rumliegen... aber jetzt überlege
ich natürlich was man damit automatisieren kann  ;D

Licht fällt aufgrund der Trägheit ja aus... daher die Frage:
Was automatisiert ihr damit (oder habt es vor)?

Lasst mal hören eure Ideen  8)

Danke & Gruss

Klaus Heynen

#12
Ich bekomm es nicht hin!

Mein MQTT Server: KHdb_Blumen_MQTT_Broker
In Readings: ,"espresense/rooms/kueche/include":"iBeacon:ee2150ae-03da-41a2-8b1d-1573740e4700


define ESPresense MQTT2_DEVICE
setuuid ESPresense 640a084b-f33f-f012-af98-26b459447d1ea43f
attr ESPresense IODev KHdb_Blumen_MQTT_Broker
attr ESPresense event-on-change-reading .*
attr ESPresense readingList espresense/devices/iBeacon:ee2150ae-03da-41a2-8b1d-1573740e4700.*:.* { MyUtils_ESPresense_updateFromMQTT($NAME, $TOPIC, $EVENT) }
attr ESPresense room ESPresence
attr ESPresense timestamp-on-change-reading .*


aber im ESPresence:


Attributes
IODev
KHdb_Blumen_MQTT_Broker

event-on-change-reading
.*

readingList
espresense/devices/iBeacon:ee2150ae-03da-41a2-8b1d-1573740e4700.*:.* { MyUtils_ESPresense_updateFromMQTT($NAME, $TOPIC, $EVENT) }

room
ESPresence

timestamp-on-change-reading
.*



Im MQTT_Device wird alles angezeigt:
known_irks
2023-03-09 19:18:17
known_macs
2023-03-09 19:18:17
kueche_distance
3.75
2023-03-10 08:17:56
kueche_id
iBeacon:ee2150ae-03da-41a2-8b1d-1573740e4700-0-0
2023-03-10 08:17:56
kueche_idType
180
2023-03-10 08:17:56
kueche_interval
401
2023-03-10 08:17:56
kueche_mac
54b3288393ae
2023-03-10 08:17:56
kueche_raw
4.25
2023-03-10 08:17:56
kueche_rssi
-87
2023-03-10 08:17:56
kueche_rssi_1m
-65
2023-03-10 08:17:56
kueche_speed
0.04


Aber es tut sich nichts im ESPresense device.

Hat jemand eine Idee?

Habs hinbekommen:
die ID muss <iBeacon_ee2150ae-03da-41a2-8b1d-1573740e4700-0-0> lauten, irgend wer/was bringt die : _ - etc. durcheinander.

Klaus Heynen

#13
Hallo Christian,

wie muss ich mehrere devices in

attr ESPresense readingList espresense/devices/iBeacon_ee2150ae-03da-41a2-8b1d-1573740e4700-0-0.*:.* { MyUtils_ESPresense_updateFromMQTT($NAME, $TOPIC, $EVENT) }

voneinander trennen?
Hinter dem 1. Device ein Leerzeichen, Komma oder was anderes?

oder muss ich mehrere attr zB.

attr ESPresense readingList espresense/devices/iBeacon_ee2150ae-03da-41a2-8b1d-1573740e4700-0-0.*:.* { MyUtils_ESPresense_updateFromMQTT($NAME, $TOPIC, $EVENT) }

attr ESPresense readingList espresense/devices/iBeacon_ee2150ae-03da-41a2-8b1d-1573740e4701-0-0.*:.* { MyUtils_ESPresense_updateFromMQTT($NAME, $TOPIC, $EVENT) }

attr ESPresense readingList espresense/devices/iBeacon_ee2150ae-03da-41a2-8b1d-1573740e4702-0-0.*:.* { MyUtils_ESPresense_updateFromMQTT($NAME, $TOPIC, $EVENT) }

machen?

Grüße Klaus

ReviloEgros

Ich habe das für mehrere Beacons bei mir so:

attr ESPresense readingList espresense/devices/.*(fab45d0f6f2b|cb4adc70f897|da1062d8386e|ffff10aab200|ffff10aa5d10|cd1128e7bf7f).*:.* { MyUtils_ESPresense_updateFromMQTT($NAME, $TOPIC, $EVENT) }
Und der Übersicht halber da ich mir nicht merken kann welche Mac zu wem gehört noch ein:

attr ESPresense userReadings presense_frank {if (ReadingsVal('ESPresense', 'lctn_tile-cb4adc70f897', '-') eq "-") {return "absent"} else {return "present"}},\
presense_oliver {if (ReadingsVal('ESPresense', 'lctn_tile-fab45d0f6f2b', '-') eq "-") {return "absent"} else {return "present"}},\
presense_patricia {if (ReadingsVal('ESPresense', 'lctn_itag-ffff10aab200', '-') eq "-") {return "absent"} else {return "present"}}

denis.robel

Hallo,

ich möchte das Beispiel anpassen und habe verschiedene Mifit Fitnestracker am Start. Ich verstehe aber nicht so richtig woher lctn_tile-cb4adc70f897 kommt.

Zitat von: ReviloEgros am 24 Mai 2023, 05:41:59attr ESPresense userReadings presense_frank {if (ReadingsVal('ESPresense', 'lctn_tile-cb4adc70f897', '-') eq "-") {return "absent"} else {return "present"}}

Brauche ich zwingend mehrere ESP32 oder geht auch zum Testen ein einzelner?
Muss der Name des MQTT Devices 'ESPresense' heissen, oder kann ich den frei wählen?
Brauche ich pro ESP32 ein MQTT device? (wird ja via autocreate angelegt)

Es wäre ein kleines Howto für "Anfänger" gut, kann mir da jemand ein paar Hinweise geben?
VG

Denis

denis.robel

#16
Ok, ich hab es hinbekommen:

1. ESP flashen
2. MQTT Device für ESP wird automatisch angelegt via autocreate
3. 99_MyUtils_ESPresense.pm anlegen und mit dem Inhalt von Christian befüllen
4. Sammeldevice ESPresense anlegen

Jetzt muss ich das ganze nur noch mit dem ROMMATE-Device verheiraten. Dazu brauche ich aber einzelne Devices mit einem Presence Reading.
Kann ich pro BLE Device ein ESPresense Devices anlegen oder muss ich das über einzelne Dummies erledigien?

@Christian: vielen Dank für das Teilen Deines Codes
VG

Denis

denis.robel

Prinzipiell funktioniert alles.
Da einige ESPs auber auch die Straße vor dem Haus scannen,wir die readingList des ESP Devices immer länger.
Jedes vorbeifahrende BLE Device bekommt ein neues eigenes Reading.

Kann man irgendwie unterbinden, dass das Anlegen neuer Readings für das Device nicht erfolgt?

VG

Denis

Icinger

Du kannst in den ESPresence-Einstellungen unter "Filtering" angeben, welche Geräte durchgereicht werden sollen.

https://espresense.com/configuration/settings#filtering
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

denis.robel

Danke für den Hinweis, damit klappt es natürlich.
VG

Denis

Reinschki

Zitat von: choenig am 14 September 2022, 16:27:05Na gut,

hier ist mein Code.

Das ist mein MQTT2_DEVICE in meinem secondary-Fhem (hier muss <DEVICES_TO_WATCH_RE> angepasst werden):

defmod ESPresense MQTT2_DEVICE
attr ESPresense IODev mqtt2__client_mosquitto
attr ESPresense event-on-change-reading .*
attr ESPresense readingList espresense/devices/<DEVICES_TO_WATCH_RE>.*:.* { MyUtils_ESPresense_updateFromMQTT($NAME, $TOPIC, $EVENT) }
attr ESPresense room ESPresence
attr ESPresense timestamp-on-change-reading .*

Im Anhang ist mein 99_MyUtils_ESPresense.pm.

Der Code geht davon aus, dass die Räume keine Unterstriche enthalten, die Readings sind so aufgebaut:

dist_<DEVICE>_<ROOM> => aktueller Abstand des <DEVICE> zum <ROOM> ('∞' wenn nicht anwesend)
lctn_<DEVICE>        => aktueller Raum (location) des <DEVICE>    ('-' wenn nicht anwesend)
room_<ROOM>          => aktuelle Anzahl der Devices im <ROOM>     ('0' wenn nicht belegt)

Viel Spass damit :)

Das letzte, was mir so noch nicht gefällt, ist, dass die Geräte manchmal zwischen Räumen hin-und-herspringen. Das möchte ich noch verbessern. Gleichzeitig möchte ich aber die Agilität nicht verlieren. Mal sehen, was da so geht. Ach ja, und vermutlich werde ich noch was implementieren, dass man mehrere ESP32s in einem Raum haben kann. Das unterstützt ESPresense so noch nicht, da werde ich mir ein Schema überlegen.

LG
Christian


Hallo Christian,

habe deinen Code "99_MyUtils_ESPresense.pm" in Verwendung und bin sehr zufrieden.
Ich hätte das mit meinen Fähigkeiten nicht so professionell hinbekommen.

Vielen Dank dafür!!

Gruß
Reiner