ArduMower ESP Firmware mit MQTT, HomeAssistant und Prometheus

@tim
Habe mir heute Mal deine binary auf den ESP32 aufgespielt. Bluetooth funktioniert ! WLAN funktioniert ! Aber bei Sunray bekomme ich einen "http 400 bad request"
In der Chrome Console sieht das ungefähr soooo aus:
Anhang anzeigen 4440
Kann damit jemand was anfangen ?
Auf das Webinterface zur Konfiguration auf dem ESP32 kann ich ohne Probleme zugreifen. Funktioniert als AP oder als Client.
Aktuell ist der Mower als Client mit der IP 192.168.86.80 in meinem WLAN angemeldet, aber über Sunray kein Zugriff.

Ich hab den Fehler auch gerade nachvollziehen können. In der Sunray App hat sich etwas geändert, auf das mein Modem nicht vorbereitet ist. Ich schau, dass ich das schnell repariert bekomme. Hier ist das GitHub issue dazu: https://github.com/timotto/ardumower-modem/issues/9
 
Hi Tim,
Hab die über Arduino installierbaren Bibliotheken installiert.
1652795709412.png
1. wie bekomme ich die angegebenen manuell zu installierenden Bibliotheken installiert?
2. beim compile bekomme folgende Fehler:

C:\XXXX\ARDUMOWER\Github\ESP32 Ardumower Modem\ardumower-modem-main\util\modem_install\modem_install.ino: In function 'void setup()':
modem_install:119:14: error: 'class HTTPUpdate' has no member named 'setFollowRedirects'
httpUpdate.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
^
modem_install:119:33: error: 'HTTPC_STRICT_FOLLOW_REDIRECTS' was not declared in this scope
httpUpdate.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
^
Mehrere Bibliotheken wurden für "WiFi.h" gefunden
Benutzt: C:\Users\XXXX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi
Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\WiFi

Bibliothek WiFi in Version 1.0 im Ordner: C:\Users\XXXX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi wird verwendet
Bibliothek WiFiClientSecure in Version 1.0 im Ordner: C:\Users\XXXX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WiFiClientSecure wird verwendet
Bibliothek HTTPClient in Version 1.2 im Ordner: C:\Users\XXXX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\HTTPClient wird verwendet
Bibliothek HTTPUpdate in Version 1.3 im Ordner: C:\Users\XXXX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\HTTPUpdate wird verwendet
Bibliothek Update in Version 1.0 im Ordner: C:\Users\XXXX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\Update wird verwendet
exit status 1
'class HTTPUpdate' has no member named 'setFollowRedirects'


hängen bleiben tut er in Zeile 119:
modem_install:
1652796109317.png

Hast du einen Rat für mich? Liegt es an den noch zu installierenden manuellen Bibliotheken?
 
Hi Tim,
Hab die über Arduino installierbaren Bibliotheken installiert.
Anhang anzeigen 4448
1. wie bekomme ich die angegebenen manuell zu installierenden Bibliotheken installiert?
2. beim compile bekomme folgende Fehler:

C:\XXXX\ARDUMOWER\Github\ESP32 Ardumower Modem\ardumower-modem-main\util\modem_install\modem_install.ino: In function 'void setup()':
modem_install:119:14: error: 'class HTTPUpdate' has no member named 'setFollowRedirects'
httpUpdate.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
^
modem_install:119:33: error: 'HTTPC_STRICT_FOLLOW_REDIRECTS' was not declared in this scope
httpUpdate.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
^
Mehrere Bibliotheken wurden für "WiFi.h" gefunden
Benutzt: C:\Users\XXXX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi
Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\WiFi

Bibliothek WiFi in Version 1.0 im Ordner: C:\Users\XXXX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi wird verwendet
Bibliothek WiFiClientSecure in Version 1.0 im Ordner: C:\Users\XXXX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WiFiClientSecure wird verwendet
Bibliothek HTTPClient in Version 1.2 im Ordner: C:\Users\XXXX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\HTTPClient wird verwendet
Bibliothek HTTPUpdate in Version 1.3 im Ordner: C:\Users\XXXX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\HTTPUpdate wird verwendet
Bibliothek Update in Version 1.0 im Ordner: C:\Users\XXXX\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\Update wird verwendet
exit status 1
'class HTTPUpdate' has no member named 'setFollowRedirects'


hängen bleiben tut er in Zeile 119:
modem_install:
Anhang anzeigen 4449

Hast du einen Rat für mich? Liegt es an den noch zu installierenden manuellen Bibliotheken?
Für den modem_install Sketch sind keine Bibliotheken notwendig. Allerdings ist dein ESP32 Board package für Arduino zu alt. Mach mal ein Update auf 1.0.6 über den Board Manager in Arduino IDE, dann sollte das funktionieren.
 
Hallo @tim ,
hier sind zwei Punkte, die entweder bei mir nicht funktionieren oder mein Verständnis ist ein anderes.
1.) Muss ich in modem_install (1.2.1) mein Wifi und Passwort hinterlegen? Unter github steht, dass des ESP32 ein Hotspot aufbaut - das passiert bei mir allerdings nicht. Ich habe Deinen Sketch per Wifi auf das ESP32 geschickt, jetzt piept er aber nur 2x in Dauerfolge.
2.) Wo hinterlege ich die MQTT Settings (IP/Port/Passwort)?
Besten Dank, maigold
 
Hallo @tim ,
hier sind zwei Punkte, die entweder bei mir nicht funktionieren oder mein Verständnis ist ein anderes.
1.) Muss ich in modem_install (1.2.1) mein Wifi und Passwort hinterlegen? Unter github steht, dass des ESP32 ein Hotspot aufbaut - das passiert bei mir allerdings nicht. Ich habe Deinen Sketch per Wifi auf das ESP32 geschickt, jetzt piept er aber nur 2x in Dauerfolge.
2.) Wo hinterlege ich die MQTT Settings (IP/Port/Passwort)?
Besten Dank, maigold
Ja, der modem_install Sketch braucht die Zugangsdaten zu deinem WiFi direkt in den ersten beiden Zeilen Quellcode nach den Kommentaren:
C:
// enter your WiFi credentials here:
#define USER_WIFI_NAME     "My WiFi"
#define USER_WIFI_PASSWORD "The password for my WiFi"

Der Sketch läd dann die eigentliche ArduMower Modem Firmware runter und installiert sie auf deinem ESP32. Sobald die Modem Firmware installiert ist geht der WiFi Hotspot an und du kannst über das Webinterface vom Modem deine WiFi Zugangsdaten nochmal eingeben, sowie MQTT Einstellungen vornehmen.

Wenn du den modem_install Sketch ohne deine WiFi Zugangsdaten einzugeben auf den ESP32 geschickt hast, dann kommt der jetzt nicht ins Internet. Über WiFi kannst du ihm jetzt auch keinen neuen Sketch schicken.
Du musst jetzt also entweder deinen ArduMower aufschrauben und den ESP32 per USB Kabel mit dem modem_install Sketch mit den korrekten WiFi Zugangsdaten versorgen, oder mach einfach z.B. mit deinem Handy einen Hotspot in der Nähe vom ArduMower auf und verwende in deinem Hotspot die Beispiel Zugangsdaten vom modem_install Sketch
Name: My WiFi
Passwort: The password for my WiFi
 
Hallo @tim - habe es zum Laufen gebracht. Problem was mein Mac bzw. ein Python Thema. Mit Windows geflasht und der AP wurde aufgebaut.

Mein aktuelles Thema ist es nun den Ardumower über meine iobroker/yahka (Homekit) Installation zu steuern. Dabei brauche ich nur die 2 Zustände START und DOCK um diese als einfachen Switch anzulegen. Kann mir hier jemand sagen, was die genauen Commands für MQTT sind? "start", "stop" bzw. "dock" scheinen hier nicht zu funktionieren. Weiss hier jemand weiter?
 
Hallo @tim - habe es zum Laufen gebracht. Problem was mein Mac bzw. ein Python Thema. Mit Windows geflasht und der AP wurde aufgebaut.

Mein aktuelles Thema ist es nun den Ardumower über meine iobroker/yahka (Homekit) Installation zu steuern. Dabei brauche ich nur die 2 Zustände START und DOCK um diese als einfachen Switch anzulegen. Kann mir hier jemand sagen, was die genauen Commands für MQTT sind? "start", "stop" bzw. "dock" scheinen hier nicht zu funktionieren. Weiss hier jemand weiter?
Das ArduMower Modem empfängt Befehle auf dem topic "[topic prefix][device name]/command". Wenn du im Webinterface vom Modem also z.B. den Device Name "ArduMower" und den Topic Prefix "/outdoor/" eingestellt hast, dann lautet das gesamte command topic "/outdoor/ArduMower/command".
 
Verstanden, aber was sind die Befehle für Start, Stop und Docking?
Die drei Befehle sind "start", "stop", und "dock". Das Modem sendet dafür die folgenden AT Befehle an den ArduMower:
start: AT+C,-1,1,-1,-1,-1,-1,-1,-1,0x26
stop: AT+C,-1,0,-1,-1,-1,-1,-1,-1,0x25
dock: AT+C,-1,4,-1,-1,-1,-1,-1,-1,0x29

Ich habe gerade start & stop mit
Bash:
mosquitto_pub -h mqtt-server.box -t '/outdoor/ArduMower-2021/command' -m start
ausprobiert und es funktioniert bei mir einwandfrei. Welche Version läuft auf deinem ArduMower?
 
Die drei Befehle sind "start", "stop", und "dock". Das Modem sendet dafür die folgenden AT Befehle an den ArduMower:
start: AT+C,-1,1,-1,-1,-1,-1,-1,-1,0x26
stop: AT+C,-1,0,-1,-1,-1,-1,-1,-1,0x25
dock: AT+C,-1,4,-1,-1,-1,-1,-1,-1,0x29

Ich habe gerade start & stop mit
Bash:
mosquitto_pub -h mqtt-server.box -t '/outdoor/ArduMower-2021/command' -m start
ausprobiert und es funktioniert bei mir einwandfrei. Welche Version läuft auf deinem ArduMower?
Bei mir läuft Sunray in der aktuellen Version.
Nochmal ganz kurz zum Verständnis, MQTT vom Ardumower verbindet mit dem iobroker/MQTT Server und erzeugt ein Verzeuchnisbaum mit command, online, probs, state und stats.
Wie ich die Steuerung adaptieren soll ist mir noch nicht klar.
 
@tim:

Ich habe es endlich mal geschafft mir dein Ardumower Modem auf meinem ESP32 zu installieren und laufen zu lassen. Funktioniert sehr gut. Ich konnte auch ohne Probleme eine eigene Version kompilieren und auf den ESP32 über den Webserver draufspielen. Wenn man von dem klassischen bekannten Problem absieht, dass Windows deine con.h und con.cpp nicht mag.

Habe auch schon mal angefangen mir deinen Code anzusehen und die ersten Integrationen für ioBroker zu machen. Ich würde mich an das Schema halten, welches du für HomeAssistent gemacht hast, als eigener getrennter Adapter. Dabei hat sich mir eine Frage ergeben:

Wenn ich einen Bool für den Webserver hinzufüge, wird dieser aktualisiert, wenn ich die Firmware über den Webserver aktualisiere oder muss ich dafür etwas anderes machen. Habe kurz probiert es hinzuzufügen, der bool wird mir im Webserver aber nicht angezeigt.
 
Ich habe es in der Zwischenzeit hinbekommen.

Als kleiner Statusupdate, dass ich auch wirklich was mache :D

Ein Button zum Aktivieren der IOBroker Geschichte im ArdumowerModem.
Unbenannt.PNG

Habe bis jetzt hinzugefügt, die ganzen Statusmeldungen aufzudröseln und diese in iobroker zu übertragen. Der nächste Schritt ist die Integration der Befehle. Die Intelligenz wird dann über das Skript laufen.
Unbenannt.PNG
 
Zuletzt bearbeitet:
Hallo zusammen,

ich habe die Version von Tim out-of-the-box im fhem angebunden. Die Statis kommen und scheinen plausibel zu sein.

Jetzt möchte ich die Befehle implementieren. Was kann alles gesendet werden?
1. start, stop und dock auf auf dem /command topic
2. ...

Was geht noch alles?

Gruß
Alexander
 
Aber natürlich wird das auf Git landen. Zum einen als fertige kompilierte Version und das Skript für IOBroker. Das rudimentäre funktioniert schon. Mit etwas Glück schaffe ich eine erste Alpha am Wochenende aufs git zu spielen.
 
Ich habe das Modem auf dem ESP installiert und seit dem ersten Tag im Einsatz. Aktuell läuft auf dem Ardumower Sunray 1.0.267 und ich habe nichts zu beanstanden.

Die Einbindung in Home Assistant als "Staubsauger" funktioniert ebenfalls tadellos.

Was mir fehlt ist ein klarer Status. Mein Grundstück ist groß und unübersichtlich, so dass ich den Mower manchmal suchen muss.
Wenn über MQTT der Zustand idle, mow oder jegliche error-Meldungen eingehen würden, könnte ich mir über Home Assistant Push-Meldungen einrichten und so über Zustandsänderungen aktiv benachrichtigt werden.

Vermutlich gehört diese Anforderung nach Sunray, aber vielleicht ja auch nicht.

Was ich zusätzlich im Modem noch praktisch finden würde, wären zwei WLAN-Konfigurationen inkl. Umschaltung. Wenn im Garten der Ardumower außer Reichweite des Haus-WLAN gerät, könnte er dann auf den AccessPoint im Garten umschalten. Bei mir komme ich mit dem Haus-WLAN nur auf eine Abdeckung von 60%. Die hinteren 20 m im Garten deckt der AccessPoint ab, der eine andere SSID hat.

Ansonsten beide Daumen hoch für das Ardumower-Modem.
 
Warum konfigurierst du nicht deinen Accesspoint auf die selbe SSID. Dann sollte er sich automatisch auf das andere wlan einloggen. Ich habe 4 wlan hotspots mit der selben SSID und das funktioniert mit allen Geräten einwandfrei.
 
Oben