ArduMower ESP Firmware mit MQTT, HomeAssistant und Prometheus

Hallo Barry,
Du musst in der Arduino-Umgebung bei Partiotions-Scheme auf Minimal Spiffs umstellen, damit der ESP32 genug Speicher zur Verfügung stellt. Steht auch so im Sketch drinne.
In der config-example.h
"5. Choose Partition Scheme "Minimal SPIFFS" (otherwise you may get 'memory space errors' in the Arduino IDE)"

Gruß Holger
Moin Holger,

danke für die Info, aber dies muss man doch nur beachten, wenn man den Sourcecode selbst compiliert!?
Ich hatte jetzt wie im Readme auf Github einfach die .bin runtergeladen und auf den ESP geflashed und dabei kommt dann der Fehler, bzw wenn er startet holt er sich ja mit der .bin Firmware die eigentliche Firmware selbst aus dem Netz und sollte dann neustarten und dann kommt der Fehler.
Habe noch ein TTGO Board, glaube mit einem größeren Speicher damit klappt es sofort, aber das kann ich leider nicht verbauen, da die Aufnahme für einen Standard-ESP bei mir vorgesehen ist.
 
Moin Holger,

danke für die Info, aber dies muss man doch nur beachten, wenn man den Sourcecode selbst compiliert!?
Ich hatte jetzt wie im Readme auf Github einfach die .bin runtergeladen und auf den ESP geflashed und dabei kommt dann der Fehler, bzw wenn er startet holt er sich ja mit der .bin Firmware die eigentliche Firmware selbst aus dem Netz und sollte dann neustarten und dann kommt der Fehler.
Habe noch ein TTGO Board, glaube mit einem größeren Speicher damit klappt es sofort, aber das kann ich leider nicht verbauen, da die Aufnahme für einen Standard-ESP bei mir vorgesehen ist.
Hallo Barry,
eventuell hilft es, wenn Du den ESP32 vorformatierst indem Du irgend einen Sketch per Arduino aufspielst und die Minimal Spiffs Einstellung verwendest. Dann das richtige BIN drüber bügeln. Oder selber compilieren und direkt aus Arduino aufspielen.
Gruß Holger
 
Hallo EinEinach,
es ist ein Sketch "ardumower-modem.ino" im Ordner "adumower-modem" enthalten. Somit kann auch mit der Arduino IDE compiliert werden.
Gruß Holger
Da hab ich mal eine Frage zu Holger, denn in der .ino steht ja nur:

// ArduMower Modem

// All the source code is in the src/ folder.

Wie ist es damit möglich mit der Arduino-IDE zu kompilieren? Da fehlt ja alles :unsure:
 
Da hab ich mal eine Frage zu Holger, denn in der .ino steht ja nur:

// ArduMower Modem

// All the source code is in the src/ folder.

Wie ist es damit möglich mit der Arduino-IDE zu kompilieren? Da fehlt ja alles :unsure:
Hallo Barry,
wie das funktioniert habe ich auch nicht verstanden, musst Du den Entwickler der ardumower-modem Firmware fragen.
Aber es funktioniert!

Wenn man den "leeren" INO-Sketch mit der Arduino 1.04 IDE startet, wird ohne Fehlermeldung compiliert. Bei Windows muss man allerdings die con.cpp und die con.h umbenennen, die Namen sind scheinbar unter Windows für irgend was reserviert. Ich habe bei mit die beiden in _con.cpp und _con.h umbenannt. In der Aufrufen dieser beiden Dateien muss dann der Name natürlich auch angepasst werden, sonst meckert der Compiler, da er ja die con.cpp und con.h sucht und nicht die _con.cpp bzw. _con.h. Wichtig ist natürlich auch, dass das Verzeichnis mit der "ardumower-modem.ino" auch den Namen "ardumower-modem" hat, sonst compiliert die Arduino IDE nicht.

Weshalb eine leere INO allerdings funktioniert, würde mich auch brennend interessieren.

Habe soeben nochmals die ardumower-moden.ino mit Arduino IDE 1.04 compiliert und auf einen Wroom-32 mit 4MB aufgespielt, hat problemlos funktioniert. SPIFFS wird automatisch formatiert und der AP-Mode für das Einrichten startet.
Allerdings nutze ich die ardumower-modem Firmware nicht, ich habe mir eine angepasste esp32_ble Firmware gebastelt welche mit meinem MQTT Brooker/Client jetzt sehr gut funktioniert. Die Funktionalität der ardumower-modem Firmware benötige ich nicht.

Ich bin allerdings kein Programmierer sondern nur "Bastler" und habe mir etwas Programmierkenntnisse selber angeeignet.

Hoffe, ich konnte etwas weiter helfen.

Gruß Holger
 
Hallo Barry,
wie das funktioniert habe ich auch nicht verstanden, musst Du den Entwickler der ardumower-modem Firmware fragen.
Aber es funktioniert!

Wenn man den "leeren" INO-Sketch mit der Arduino 1.04 IDE startet, wird ohne Fehlermeldung compiliert. Bei Windows muss man allerdings die con.cpp und die con.h umbenennen, die Namen sind scheinbar unter Windows für irgend was reserviert. Ich habe bei mit die beiden in _con.cpp und _con.h umbenannt. In der Aufrufen dieser beiden Dateien muss dann der Name natürlich auch angepasst werden, sonst meckert der Compiler, da er ja die con.cpp und con.h sucht und nicht die _con.cpp bzw. _con.h. Wichtig ist natürlich auch, dass das Verzeichnis mit der "ardumower-modem.ino" auch den Namen "ardumower-modem" hat, sonst compiliert die Arduino IDE nicht.

Weshalb eine leere INO allerdings funktioniert, würde mich auch brennend interessieren.

Habe soeben nochmals die ardumower-moden.ino mit Arduino IDE 1.04 compiliert und auf einen Wroom-32 mit 4MB aufgespielt, hat problemlos funktioniert. SPIFFS wird automatisch formatiert und der AP-Mode für das Einrichten startet.
Allerdings nutze ich die ardumower-modem Firmware nicht, ich habe mir eine angepasste esp32_ble Firmware gebastelt welche mit meinem MQTT Brooker/Client jetzt sehr gut funktioniert. Die Funktionalität der ardumower-modem Firmware benötige ich nicht.

Ich bin allerdings kein Programmierer sondern nur "Bastler" und habe mir etwas Programmierkenntnisse selber angeeignet.

Hoffe, ich konnte etwas weiter helfen.

Gruß Holger
Moin Holger,

vielen Dank für deine Informationen die haben mir sehr geholfen!
Nun bekomme ich beim Kompilieren folgenden Fehler:

Code:
In file included from /home/barry/Schreibtisch/Ardumover/ardumower-modem-1.2.1_HomeAssistant/ardumower-modem-1.2.1/test/helper/fake_ardumower_h.h:3:0,
                 from /home/barry/Schreibtisch/Ardumover/ardumower-modem-1.2.1_HomeAssistant/ardumower-modem-1.2.1/ardumower-modem/con.cpp:6:
reader.h:5:7: error: redefinition of 'class Reader'
 class Reader
       ^
In file included from /home/barry/Schreibtisch/Ardumover/ardumower-modem-1.2.1_HomeAssistant/ardumower-modem-1.2.1/ardumower-modem/con.h:7:0,
                 from /home/barry/Schreibtisch/Ardumover/ardumower-modem-1.2.1_HomeAssistant/ardumower-modem-1.2.1/ardumower-modem/con.cpp:4:
reader.h:5:7: error: previous definition of 'class Reader'
 class Reader

Wundere mich auch ein bisl, warum er unbedingt den test-Ordner einbinden möchte, der Name ist doch sicherlich nicht Unbegründet!

Gruß
 
Moin Holger,

vielen Dank für deine Informationen die haben mir sehr geholfen!
Nun bekomme ich beim Kompilieren folgenden Fehler:

Code:
In file included from /home/barry/Schreibtisch/Ardumover/ardumower-modem-1.2.1_HomeAssistant/ardumower-modem-1.2.1/test/helper/fake_ardumower_h.h:3:0,
                 from /home/barry/Schreibtisch/Ardumover/ardumower-modem-1.2.1_HomeAssistant/ardumower-modem-1.2.1/ardumower-modem/con.cpp:6:
reader.h:5:7: error: redefinition of 'class Reader'
class Reader
       ^
In file included from /home/barry/Schreibtisch/Ardumover/ardumower-modem-1.2.1_HomeAssistant/ardumower-modem-1.2.1/ardumower-modem/con.h:7:0,
                 from /home/barry/Schreibtisch/Ardumover/ardumower-modem-1.2.1_HomeAssistant/ardumower-modem-1.2.1/ardumower-modem/con.cpp:4:
reader.h:5:7: error: previous definition of 'class Reader'
class Reader

Wundere mich auch ein bisl, warum er unbedingt den test-Ordner einbinden möchte, der Name ist doch sicherlich nicht Unbegründet!

Gruß
Hallo Barry,
lass doch mal den ganzen Verzeichnis-Kram weg. Ich habe die ardmumower-modem ZIP entpackt und das entpackte Verzeichnis in ardumower-modem umbenannt. In diesem Verzeichnis steht die ardumower-modem.ino und die ganzen Unterverzeichnisse src usw.

Im src Verzeichnis wird dann der Sketch compiliert wenn ich die ardumower-modem.ino in der Arduino IDE lade und mit Minimal Spiffs auf das ESP32 Dev-Board aufspiele. Eventuell hast Du ja einfach eine zu umfangreiche Verzeichnis-Struktur?! Bin aber auch nicht der Profi, nur so ne Vermutung. Ich nutze WIN10 Arduino IDE 1.8.19 und ESP32 Hardware 1.0.4 im Boardverwalter. Neuere Versionen der ESP32 Hardware-Boardverwalter machen bei mir immer mal wieder kommische Sachen. Die 1.0.4 funktioniert im Augenblick am besten.
Gruß Holger

Nachtrag: Habe gerade gesehen, dass er die con.h und con.cpp anmeckert, diese musste ich bei mir umbenennen. Könnte auch die Ursache sein. Wenn Du die Dateien con.cpp und con.h umbenennst mußt Du in der con.cpp die Zeile 4 berichtigen und in der espmodem.cpp in Zeile 21 ebenfalls den neuen Namen der con.h ändern.
 
Zuletzt bearbeitet:
Hallo Barry,
lass doch mal den ganzen Verzeichnis-Kram weg. Ich habe die ardmumower-modem ZIP entpackt und das entpackte Verzeichnis in ardumower-modem umbenannt. In diesem Verzeichnis steht die ardumower-modem.ino und die ganzen Unterverzeichnisse src usw.

Im src Verzeichnis wird dann der Sketch compiliert wenn ich die ardumower-modem.ino in der Arduino IDE lade und mit Minimal Spiffs auf das ESP32 Dev-Board aufspiele. Eventuell hast Du ja einfach eine zu umfangreiche Verzeichnis-Struktur?! Bin aber auch nicht der Profi, nur so ne Vermutung. Ich nutze WIN10 Arduino IDE 1.8.19 und ESP32 Hardware 1.0.4 im Boardverwalter. Neuere Versionen der ESP32 Hardware-Boardverwalter machen bei mir immer mal wieder kommische Sachen. Die 1.0.4 funktioniert im Augenblick am besten.
Gruß Holger

Nachtrag: Habe gerade gesehen, dass er die con.h und con.cpp anmeckert, diese musste ich bei mir umbenennen. Könnte auch die Ursache sein. Wenn Du die Dateien con.cpp und con.h umbenennst mußt Du in der con.cpp die Zeile 4 berichtigen und in der espmodem.cpp in Zeile 21 ebenfalls den neuen Namen der con.h ändern.
Servus Holger,

vorab ein herzliches Dankeschön!

Normalerweise habe ich eine sehr ordentliche Ordnerstruktur, dies kam durch die vielen Versuche.
Mein Fehler war es die .ino Datei in einen neuen Ordner abzulegen (und nicht zu wissen dass man diese auch kompilieren kann ohne den gewohnten Inhalt von setup und loop)!
Ich musste nichts an den Dateinamen anpassen, allerdings nutze ich Linux.

Für alle die möglicherweise auch am kompilieren hängen:
  1. Einfach den Sourcecode runterladen und entpacken.
  2. Ordner in ardumower-modem umbennen.
  3. Die .ino in der arduino IDE öffnen.
  4. Unter Werkzeuge -> Partition Sheme -> Minimal SPIFFS (1,9MB APP with OTA 190KB SPIFFS)
  5. Nun Kompilieren und hochladen.

Gruß und einen schönen Abend!
 
Hallo Barry,
ich hatte damals auch längere Zeit herum probiert bis ich gemerkt habe, das man die leere INO tatsächlich zum compilieren nutzen kann. Und dann noch das Windows Problem mit den beiden con-Dateien, war schon etwas verwirrend.
Freut mich, dass es jetzt mit dem compilieren geklappt hat.

Ich wünsche allen einen entspannten Feiertag.

Gruß Holger
 
Hallo Zusammen,
ich bin gerade dabei meinen Ardumower in openhab einzubinden.
Soweit klappt das auch super.
Was mir fehlt sind ein paar Zuordnungen.
Wenn ich es richtig interpretiert habe, steht bei
mqtt:topic:Ardumower:solution die 0 für invalid, die 1 für float und 2 für fix
gibt es irgendwo eine Liste in der ich die Infos zu
mqtt:topic:Ardumower:sensor
finde?
und wofür sind:
mqtt:topic:Ardumower:delta
mqtt:topic:Ardumower:mow_point_index
mqtt:topic:Ardumower:map_crc

ich war da zu doof die Infos zu finden.

Grüße
 
Zuletzt bearbeitet:
Was mir fehlt sind ein paar Zuordnungen.
Wenn ich es richtig interpretiert habe, steht bei
mqtt:topic:Ardumower:solution die 0 für invalid, die 1 für float und 2 für fix
gibt es irgendwo eine Liste in der ich die Infos zu
mqtt:topic:Ardumower:sensor
finde?
Ich habe mir damals alles aus dem sunray code rausgesucht. Wo das genau stand weiß ich nicht mehr, aber hier meine Sachen:
Ist zwar fhem, aber du wirs schon die richtigen Sachen finden:
Code:
position_solution_string:position_solution.*
{
    (ReadingsNum("MQTT2_Krobi","position_solution",0) == 2)? "fix":
    (ReadingsNum("MQTT2_Krobi","position_solution",0) == 1)? "float":"invalid"
},
job_string:job.*
{
    (ReadingsNum("MQTT2_Krobi","job",3) == 4)? "docking":
    (ReadingsNum("MQTT2_Krobi","job",3) == 3)? "error":
    ((ReadingsNum("MQTT2_Krobi","job",3) == 2) and (ReadingsNum("MQTT2_Krobi","amps",0) >= -0.03))? "docked":
    ((ReadingsNum("MQTT2_Krobi","job",3) == 2) and (ReadingsNum("MQTT2_Krobi","amps",0) < -0.03))? "charge":
    (ReadingsNum("MQTT2_Krobi","job",3) == 1)? "mow":
    (ReadingsNum("MQTT2_Krobi","job",3) == 0)? "idle":"error uknown state"
},
last_sensor_trigger:sensor.*
{
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 17)? "emergency/stop button triggered":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 16)? "rain sensor triggered":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 15)? "lift sensor triggered":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 14)? "ultrasonic sensor triggered":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 13)? "bumper sensor triggered":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 12)? "cpu memory overflow":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 11)? "robot cannot find a route to next planned point":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 10)? "motor odometry error":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 9)? "gps is invalid or not working":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 8)? "motor error":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 7)? "motor overload":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 6)? "robot has been kidnapped and is no longer on planned track":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 5)? "imu sensor triggered tilt":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 4)? "imu sensor triggered timeout":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 3)? "gps fix timeout":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 2)? "obstacle triggered":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 1)? "battery undervoltage":
    (ReadingsNum("MQTT2_Krobi","sensor",18) == 0)? "no error":"sensor unknown state"   
},
 
mqtt:topic:Ardumower:delta
mqtt:topic:Ardumower:mow_point_index
mqtt:topic:Ardumower:map_crc
Delta beduetet die Abweichung zu dem soll x und soll y
Mow_point_index bedeutet wie weit der Rover mit der Abarbeitung der Mähfläche ist. Der Rover macht nichts anderes als stumpf die Punkte abzufahren. Die Zahl beduetet zu welchem Mowpoint ist der gerade unterwegs.
Map_crc ist die Checksumme über die Kartendaten hierdurch kann die Sunray App abgleichen ob im Rover die Gleiche Karte wie in der App geladen ist
 
Zuletzt bearbeitet:
Ich habe noch eine Frage,
kann man irgendwie eine feste IP einstellen?
beim normalen esp32_ble kann ich das ja in der config.h eintragen.
Hier habe nur die modem_install.ino in der ich die SSID und das Passwort eintragen kann, aber keine feste IP.

Ach ja, bevor die Frage nach dem Warum kommt:
Ich habe mir einen 5V WLAN Repeater geholt und für die Stromversorgung an die Pins vom PCB angeschlossen.
Somit umgehe ich das Problem mit der Onboard Antenne des XBee.
Funktioniert soweit gut, nur bootet das Teil leider zu lange. Dadurch laufen die ESPs über DHCP in einen Timeout.

Hier der Link, falls es jemanden interessiert:
WLAN Repeater mit externen Antennen (5V)
Antennen-Verlängerungskabel
 
Zuletzt bearbeitet:
Ich habe mal das MQTT im ESP32 aktiviert, das in Sunray mitgeliefert wird. Es funktioniert soweit.
Jetzt schaltet sich mein Mäher aber nicht mehr ab, wenn er länger im Idle dasteht.
Kann es am MQTT liegen? Kann es sein, dass MQTT regelmäßig irgendwelche Anfragen an den Hauptrechner im Mäher schickt und nicht nur das auswertet, was der Hauptrechner soundso immer ausspuckt?

Kann man den MQTT so konfigurieren, dass dieser standardmäßig nur horchend agiert und nur dann Befehle absetzt, wenn Anforderungen vom MQTT Broker kommen?
 
AT+S wird einmal die Sekunde vom AGM4 geholt AT+T einmal die Minute. Man kann diese Zeiten hochsetzen, aber dann werden keine Nachrichten mehr gepublishet. Bist du sicher dass es am ESP32 liegt, am besten den seriellen Monitor mitloggen, wenn der Rover sich ausschalten soll
 
Zuletzt bearbeitet:
Wenn MQTT zyklisch abfragt, erscheint es mir plausibel, dass es am MQTT liegt. Wenn ich es richtig verstehe, wird das MQTT im ESP32 wie WiFi-Befehle gehandhabt. Bei jedem angefragten AT-Befehl über BLE, WiFi und Console wird die Timeoutzeit zurückgesetzt. Der Mower wird sich folglich nicht mehr selbstständig ausschalten, wenn er im idle steht. Nur das direkt auf dem AGM4 laufende MQTT würde anders gehandhabt werden. Aber meines Wissens nach gibt es da keine Implementierung, dass dieses das WLAN über den ESP32 nutzen könnte.

Oder schaltet sich bei jemanden der Mäher in idle nach definierter Abschaltzeit (standardmäßig 300s) selbstständig ab, obwohl er MQTT im ESP32 aktiviert am Laufen hat?
 
Oben