ahermann86 / LX79x_WiFi

LX79x Mähroboter WiFi Erweiterung mit ESP32
10 stars 7 forks source link

[FR] Status erweitern #2

Open Henry-Sir opened 2 years ago

Henry-Sir commented 2 years ago

Ich habe den Mäher in Home Assitant eingebunden und frage den Status über /statval ab. Ich nehme den Wert vom [Klartext], weil der Wert von [Display] nicht brauchbar ist (Laufttext).

Ist es möglich, den Status (Klartext) zu erweitern und ein Feld mit definierten Status (kein Lauftext) einzufügen?

ahermann86 commented 2 years ago

Ich habe gerade meine nächste Version hochgeladen. Damit müsste zumindest der Batteriestatus funktionieren und der Statustext weniger blinken...

piccer commented 2 years ago

Ich habe in der LX790_util.cpp folgende Änderungen vorgenommen:

Damit habe ich das Status-Blinken zwischen "Mähen" und "warte auf start" weg.

Henry-Sir commented 2 years ago

Die TblMsg habe ich zusätzlich um folgende Zuordnungen erweitert:

{"5#oP", "Stop"}, {"Stop", "Stop"}, {"Off", "Off"},

Bei Stop habe ich beides reingenommen, da Stop in der Web-UI als "5#oP" angezeigt wird. "Off" erscheint nur kurz im Display, weiß jetzt nicht ob das wirklich ausgewertet wird (schadet auch nicht, wenn es drin ist :) )

piccer commented 2 years ago

Ja, das hatte ich auch gesehen, allerdings stehen sowohl Stop als auch Off nur sehr kurz im Display. Da der ESP aber nicht pusht, sondern wir den Status pullen wäre es ein extremer Zufall, wenn der Status genau in dem Moment abgefragt wird, wo diese Zustände herrschen. Ich überlege noch, wie ich den ESP dazu bringe, Zustandsänderungen zu pushen. MQTT wäre sicher eine Variante, eine andere wäre ein http-Aufruf (in meinem Fall an FHEM), der dann ein reread triggern könnte.... BTW: Dass 5#oP angezeigt wird liegt wohl daran, dass in const SegChr[] das "t" nicht definiert ist. Ich bin gerade nicht sicher, welche Teile der 7-Segment-Anzeige da angesteuert werden, aber du kannst ja mal: {'t', 0x02 | 0x08 | 0x10 }, einfügen, dann sollte zumindest die # ein t sein. Sollte beim t auch der untere Strich leuchten, dann wäre es {'t', 0x02 | 0x08 | 0x10 | 0x40},

ahermann86 commented 2 years ago

Hallo,

Die Änderungen bzw. Ergänzungen werde ich einpflegen. (Habe aber gerade etwas wenig Zeit dafür .. der Winter kommt schon noch ;)

Die Unterscheidung zwischen Zahlen und Buchstaben gefällt mir auch noch nicht. Das mit "1dLE" und "5#oP" ist genau so ein Problem. Die # schreibe ich immer dann, wenn das Zeichen unbekannt ist - das t werde ich ergänzen.

Eine Aufzeichnung mit FHEM habe ich versuchsweise schon gemacht. Grundsätzlich funktioniert das so:

Device: 211111_FHEM_MRoboter_Device

defmod MRoboter HTTPMOD none 5 attr MRoboter alias MRoboter attr MRoboter event-on-change-reading .* attr MRoboter get01-1Name Display attr MRoboter get01-2Name RSSI attr MRoboter get01-3Name Battery attr MRoboter get01-4Name Status attr MRoboter get01Decode UTF-8 attr MRoboter get01Name Ouput attr MRoboter get01Poll 1 attr MRoboter get01Regex (\N+);;(\N+);;(\N+);;(\N+) attr MRoboter get01URL http://192.168.2.28:82/statval attr MRoboter group Mähroboter attr MRoboter room Haus attr MRoboter showBody 1

SVG vom Log: 211111_FHEM_MRoboter_SVG

Gruß Axel

piccer commented 2 years ago

Super. Ich habe es auch als HTTPMOD im FHEM, aber durch den Poll kann das Device eben nur so aktuell sein, wie der Intervall lang ist. Schöner wäre es halt, wenn der ESP eine Status-Änderung melden würde, das würde Traffic sparen, den ESP dadurch entlasten und FHEM wäre immer aktuell. BTW: Hat es einen bestimmten Grund, warum 3 Webserver (80/81/82) laufen?

ahermann86 commented 2 years ago

Ich habe die HTTP Schnittstelle verwendet, da sie sehr simpel und für diesen Einsatz eigentlich schnell genug ist. Das mit MQTT könnte man schon noch angehen - hatte damit aber noch nie (wie auch mit dem ESP noch nie) etwas gemacht.

Das mit den 3 Webservern kam durch einen Verbindungsfehler zustande. Ich hatte mich mit meinem PC verbunden und wollte zusätzlich mit dem Handy drauf. Das hatte nicht funktioniert und dann habe ich weitere Webserver/Sockets generiert weil ich dachte, dass man jeweils für eine Verbindung einen braucht... im Nachhinein war aber mein Handy (WLAN Empfang) schuld und somit ist das mit den 3 Webservern noch ein "überbleibsel".

piccer commented 2 years ago

Ah, ok. Wie gesagt, http ist schon ok, nur wäre (zumindest optional) der umgekehrte Weg nicht schlecht, wenn der ESP also von sich aus pushen würde, wenn sich der Status ändert. Mir würde es schon reichen, wenn er nen ganz simplen http-request absetzen würde. Den könnte ich mit php auffangen und in FHEM einen reread des httpmod devices triggern. Ist allerdings schon ne recht spezielle Config… ich werde mal schauen was ich mir da bauen kann. Auf jeden Fall hat diese Implementierung jetzt schon einen großen Mehrwert gebracht. Vielen Dank dafür.

Henry-Sir commented 2 years ago

Ich schließe mich dem an, dass diese Implementierung einen großen Mehrwert gebracht hat.

Falls Lust und Zeit ist, würde ich auch eine MQTT Implementierung bevorzugen. Ist aber nicht dringend Notwendig, ich habe das Ganze mit Home Assistant am laufen und da funktioniert die HTTP Request Entities auch ohne Probleme.

Vielleicht schaue ich auch selbst mal.

piccer commented 2 years ago

Ich habe das ganze mal geforked und „ein bisschen MQTT“ hinzugefügt ;-) Ihr könnt’s euch ja mal anschauen, es scheint soweit zu funktionieren. Aber: Ich bin kein Programmierer, das ist eher so per „try and error“ entstanden, da gibts also garantiert noch viel Raum für Verbesserungen…. https://github.com/piccer/LX79x_WiFi

ahermann86 commented 2 years ago

Ich habe gerade meine aktuelle Version hochgeladen. Aus Zeitgünden fehlt noch MQTT und das Einschalten sowie die "OFF" Sache gefällt mir auch noch nicht... (siehe ToDo im Changelog)

@piccer Ein Teil von deinen Änderungen habe ich schon Mal übernommen - danke 👍