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"}}