Skip to end of metadata
Go to start of metadata

Der Mähroboter Gardena bzw. Automower wurde ja schon vor Jahren analysiert und die HEXADEZIMAL Befehle, die wir zum steuern benötigen wurden im Mikrocontroller Forum hinterlegt. Stichwort "Robomower_V0.8.pdf"

Link zum Thread: https://www.mikrocontroller.net/topic/304526#5651411

Einkaufliste:

1x WEMOS D1 Mini PRO oder einen WEMOS D1 Mini Link1 Link2

1x MMI Stecker 2x4P Link

1x Flachbandkabel 8P Link


1.) ESP8266 SKETCH AUFSPIELEN:

Dem ESP8266 müssen wir erstmal einen Sketch aufspielen damit dieser als Bridge (Kommunikationsmodul zwischen dem Mähroboter und Loxone) dient.

Hierzu einfach dieses Tutorial befolgen: https://www.instructables.com/id/Serial-Port-Over-WiFi/

Kurzanleitung: 

1.) Installation der Arduino IDE (https://www.arduino.cc/en/main/software)

2.) Einrichten der IDE für den WEMOS D1 Mini PRO

2.1) Boardunterstützung hinzufügen (http://arduino.esp8266.com/stable/package_esp8266com_index.json)

2.2) Boardtreiber für Windows installieren (https://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx)

3.) Sketch in IDE kopieren (Quelle: https://cdn.instructables.com/ORIG/FF6/ZP96/IP45GL35/FF6ZP96IP45GL35.ino)


Danach stellt ihr in der Einrichtung den ESPs so ein dass er sich in eurem Heimnetzwerk einwählt. Voraussetzung ist natürlich dass Ihr WLAN im Garten habt wo er mähen soll!

Am besten vergebt ihr eine Feste IP Adresse, dann muss der DHCP Server nicht solange eine neue IP vergeben.

Das könnt ihr mit diesen Codezeilen im Sketch realisieren (diese einfach in den Sketch nach "void setup() {" integrieren bzw. ggf. anpassen):

//set fix IP ADDRESS

  IPAddress ip(192, 168, 2, 155);

  IPAddress gateway(192, 168, 2, 1);

  IPAddress subnet(255, 255, 255, 0);

  IPAddress dns(192, 168, 2, 1);

  WiFi.config(ip, dns, gateway, subnet);


Alternativ kann man sich auch eine HTML Seite Bauen und die Befehle einzeln ausführen bzw. anders implementieren. Da ich Loxone am Start habe mache ich es über diesen weg.

Den Wemos ESP dann noch in euer WLAN einrichten. Dazu die Config-Seite des ESP aufrufen (die Oberfläche wurde mit dem Sketch installiert und ist per Default unter 192.168.4.1 oder unter der neu vergeben fixen IP erreichbar).


2.) ESP8266 EINBAUEN:

Besten Dank an das Mikrocontroller Forum Thread: https://www.mikrocontroller.net/topic/382764

Das sieht dann Eingebaut so aus:


3.) EINBINDUNG IN LOXONE:

Einen virtuellen Ausgang anlegen: Und die IP Adresse eures ESPs eingeben.

Für jeden der Befehle die verwendet werden sollen je einen "Vituellen Ausgang Befehl":

CONNECT Einstellungen:

Syntax:

/snd? = Sendet die Hex Daten an den Mähroboter (POST)

/rec? = Empfängt die Antwort des Mähroboter (GET)

Wir speichern den Antwortstring welcher über "GET" ermittelt wird im Miniserver indem wir "http Antwort speichern"  befüllen.

Pfadà  /user/common/answer.xml

Die Datei answer.xml wird automatisch vom Miniserver erstellt. Brauch also nicht zuvor erstellt zu werden.

Datei kann via FTP abgefragt werden, z.B. mit Filezilla

PIN SENDEN Einstellungen:


STATUS abfragen Einstellungen:

MODE HOME Einstellungen:

MODE AUTO Einstellungen:


MODE STOP Einstellungen:

MODE MANUAL Einstellungen:

Um die Antworten auszulesen legen wir die Anzahl der "Virtueller http Eingang" an die wir benötigen:

Abfrage der Datei "answer.xml" mit der Antwort des, PIN senden, Modi (auto,home) Wechsel:

Syntax der URL:

http://BenutzernameMiniserver:PASSWORTMiniserver@192.168.2.111/dev/fsget/user/common/answer.xml

In der Datei answer.xml ist immer die letzte Antwort enthalten, sprich sie wird immer wieder überschrieben sobald wir eine Abfrage machen!

 Hierzu dann der:


VI Befehlskennung --> OK\h 

(d.h. Interpretiere die letzten 4 Stellen des Hexadezimal Wertes und gebe diesen als Dezimal aus. Das macht die Loxone Logik so, warum das so ist kann ich nicht sagen laut Support ist dass immer so!)

In der answer.xml ist dann einer der HEX Antwortstrings vorhanden:

Für CONNECT senden (angenommen) = es kommt nur "OK" zurück --> in HEX nicht definiert => entspricht "0" DEZIMAL

Für PIN senden (angenommen) = OK020d020000d203 --> d203 HEX => entspricht 53763 DEZIMAL

Für HOME/AUTO/MAN setzen = OK020f03000000e703 --> e703 HEX => entspricht 59139 DEZIMAL


Der nächste "Virtueller http Eingang":


VI Befehlskennung --> OK02131a000\1 

(d.h. Interpretiere die Ziffer oder den Buchstaben der nach " OK02131a000" (nur EINE Stelle). Diese Zahl oder dieser Buchstabe wird dann als ASCII Zeichen interpretiert und in DEZIMAL angezeigt. Das  macht die Loxone Logik so, warum das so ist kann ich nicht sagen laut Support ist dass immer so!)

In der status.xml ist dann einer dieser Antworten vorhanden:




Für den Status PARKEN = OK02131a000100050100000000000000c43a785c00005d0800bd010000004b0302131a000100050100000000000000c93a785c00005d0800bd01000000ae03

Wir lesen ja nur den einen Wert aus nach dem " OK02131a000" in diesem Fall also die Zahl 1

--> Zahl 1 im ASCII => entspricht 49 DEZIMAL


Für den Status MÄHER AKTIV = OK02131a000200050100000000000000c43a785c00005d0800bd010000004b0302131a000100050100000000000000c93a785c00005d0800bd01000000ae03

Wir lesen ja nur den einen Wert aus nach dem " OK02131a000" in diesem Fall also die Zahl 2

--> Zahl 2 im ASCII => entspricht 50 DEZIMAL

Für den Status LADEN = OK02131a000400050100000000000000c43a785c00005d0800bd010000004b0302131a000100050100000000000000c93a785c00005d0800bd01000000ae03

Wir lesen ja nur den einen Wert aus nach dem " OK02131a000" in diesem Fall also die Zahl 4

--> Zahl 4 im ASCII => entspricht 52 DEZIMAL

Für den Status MÄHER SUCHT = OK02131a000500050100000000000000c43a785c00005d0800bd010000004b0302131a000100050100000000000000c93a785c00005d0800bd01000000ae03

Wir lesen ja nur den einen Wert aus nach dem " OK02131a000" in diesem Fall also die Zahl 5

--> Zahl 5 im ASCII => entspricht 53 DEZIMAL


Für den Status FEHLER = OK02131a000700050100000000000000c43a785c00005d0800bd010000004b0302131a000100050100000000000000c93a785c00005d0800bd01000000ae03

Wir lesen ja nur den einen Wert aus nach dem " OK02131a000" in diesem Fall also die Zahl 7

--> Zahl 7 im ASCII => entspricht 55 DEZIMAL


3.) FESTELEGEN WAS MAN ABBILDEN MÖCHTE:

Roboter Verhalten:

Wenn das Mähzeitfenster nur 5 Min beträgt z.B. 07:00-07:05 mäht er 5 Min und kehrt in die Ladestation zurück.

Während er Mäht können die Modi gewechselt werden und er über nimmt diese sofort.

Man kann z.B. während er Mäht HOME setzen dann bewegt er sich Richtung Ladestation, wenn ich aber dann den Modus auf MAN oder AUTO setze mäht er wieder.

Wenn man STOP gesetzt hat und dann möchte das er wieder mäht dann einfach auf MAN setzen und wieder auf AUTO.


Use-Cases:

1.) STATUS permanent alle 3 Min. Abfragen

2.) Wenn es anfängt zu regnen à HOME SETZEN

                à sobald er in der Ladestation ist (Befehlskennung STATUS) sofort AUTO SETZEN

                à er startet dann wieder sobald er vollgeladen ist und das Zeitfenster stimmt (Timer)

3.)  Er müsste um 7 Uhr starten aber es regnet: Der Mäher sollte in der Ladestation verbleiben!

                --> Steckdose Ladestation ausschalten! Mäher startet dann wenn das Netzteil wieder an ist
                und er voll geladen ist und der Timer (das Zeitfenster) passt.


Loxone Config hierzu:

MAEROB.Loxone

Bilder zur Konfig und Visu:


Erklärung zur MAEROB.Loxone Konfig / Erklärung der Logik:

Für jeden VQ habe ich einen Taster für die Visu angelegt. Kann nach belieben entfernt werden.

Die Merker sind nur zum Traking gedacht damit man das in der Config ersehen kann.

VI "REGEN":

Gibt einen Dauer Impuls aus bei Regen

Tastschalter "HOME":

Sendet den Befehl HOME, damit der Mäher in die Ladestation fährt bei Regen.

Schaltuhr "Mähzeitbeginn laut Timer":

Hier hinterlegen wir die Zeiten laut Timer1 im Mähroboter. Alternativ Timer im Mähroboter aus 00:00-23:59 stellen.

AQ = Schaltet die Ladestation des Mähroboter ein

Qon = geht auf Verzögerte Impulse "Maerob AUF" und "30 Sek."

Verzögerter Impuls "Maerob AUF:

Schaltet die Mähroboeter Garage (Rolladen AUF)

Einschaltverzögerung 600 Sek.:

Parameter T = 600 Sek (10 Min.)

Wird benötigt wenn es regnet, dann hat der Mäher 10 Min. Zeit um den Weg in die Ladestation zu finden bis die Ladestation der Strom abgeschaltet wird. Würde das vorher passieren bleibt der Mäher irgendwo stehen bzw. würde der R Eingang von der Schaltuhr direkt angesprochen werden würde der Mäher den Weg zur Ladestation nicht mehr finden.

Einschaltverzögerung 30 Sek.:

Gibt den Befehl "CONNECT" nach 30 Sek. Ab. Verbindung mit dem ESP (Mähroboter)

Einschaltverzögerung 15 Sek.:

Gibt den Befehl "PIN SENDEN" nach 15 Sek. Ab. (Muss nicht gemacht werden)

Gibt den Befehl "STATUS" nach 15 Sek. Ab. Initial Abfrage Status.

Einschaltverzögerung 180 Sek.:

Gibt den Befehl "STATUS" nach 180 Sek. Ab. Regelmäßige Status Abfrage

Und ist Verbunden mit dem Monoflop, sodass alle 180 Sekunden der Status abgefragt wird.


Monoflop 3 Min. Status Abfrage:

Tr = Q von der Einschaltverzögerung "180 Sek."

R = Eingang vom Status Baustein "Status B Tasten". Das hat den Sinn dass wenn der Mähroboter den Status "Laden" hat die Abfrage nicht mehr stattfindet, sonst würde diese ewig im 3 Minuten Intervall weiterlaufen.

Status Baustein "Status für B Tasten":

AI1 =  VI der status.xml. Die Abfrage des Status wird hier alle 10 Sek. Hinterlegt. Intervall kann angepasst werden.

Den Status Baustein dann noch wie folgt befüllen:

AI1 == 49 →  Parken

AI1 == 50 → Mäher Aktiv

AI1 == 52 →  Laden à WICHTIG "Statuswert" = 52

AI1 == 53 →  Mäher sucht

AI1 == 55 →  Fehler

 Ausgang AQ geht an einen "Gleich" Baustein welcher mit einer Constanten den Wert vergleicht:

"Gleich" Baustein

Vergelicht ob der Wert 52 anliegt. Ist dies der Fall dann geht ein Dauerimpuls auf:

-  die Einschaltverzögerung "Maerob ZU" damit die Garage (Rolladen runterfährt)

- auf R vom Monoflop "3Min." damit die Statusabfrage unterbrochen wird

- und  WICHTIG setzt den STATUS des Mähroboters auf AUTO. Das ist wichtig weil falls der Mähroboter über den VI REGEN den Befehl bekommen hat er soll "HOME" fahren sprich in die Ladestation, würde er dann immer in diesem Modus verweilen. Wir wollen aber dass er wieder automatisch im Zeitfenster der Schaltuhr "Mähzeitbeginn laut Timer" mäht. Der Befehl Auto kann auch zu Mähzeitbeginn gesendet werden, er würde dann sobald er voll geladen ist mit dem mähen starten, aber ich halte die Logik für besser.


Status Baustein "Status für A Tasten":

AI1 =  VI der answer.xml. Die Abfrage des Status wird hier alle 10 Sek. Hinterlegt. Intervall kann angepasst werden.

Den Status Baustein dann noch wie folgt befüllen:


AI1 == 53763 →  PIN OK

AI1 == 59139 → MODI WECHSEL OK

AI1 == OK →  CONNECT OK



EINE SACHE FEHLT MIR NOCH:

Aktuell würde der Mäher wenn es bevor er losfährt bereits regnet und der Intervall des "600Sek. Einschaltverzögrerung" nicht auf der Schaltuhr greift, theoretisch direkt losfahren und der Befehl HOME kommt erst gar nicht zum Mähroboter an.


  • No labels

5 Comments

  1. Max

    Sehr gute Sache ??????
    funktioniert das auch bei einem Gardena Smart Sileno Life 750?
    Vielen Dank!

  2. Kennst Du evtl. den Code, mit dem sich Fehler zurücksetzen lassen? Ich habe nämlich das Problem, dass mein Mähroboter ab und zu nicht in die Ladestation einfahren kann. Ich bekomme dann eine Fehlermeldung. Und würde den Fehler anschließend gerne über die serielle Schnittstelle zurücksetzen.

  3. Super Anleitung, vielen Dank. Ich habe nur 2 Fragen zur Steckerbelegung:

    • Was muss ich mit Pin 7 (ca. 18V Batteriespannung) machen?
    • Auf den Fotos kann man erkennen dass nur 4 Kabel am ESP angeschlossen werden. Laut Tabelle für die Pinbelegung aber 6. Was muss ich genau anschließen?

    Danke (smile)

    1. Scheint als hätten sie beim Gardena Sileno City den Aux1 Anschluss entfernt. Müsste man die Kontakte direkt auf die Platine löten oder habe ich nur was übersehen?

      1. Alex Hast du es mit deinem Sileno City hinbekommen ? War es mit dem Aux1 Anschluss anlöten getan oder hast du auch die Software ändern müssen ?