Hier geht es um eine Anbindung eines Husquarna G2 Modells an eine HA-Lösung, hier speziell FHEM.
Durch den Einsatz eines ESP01 mit Tasmota ist es, mit etwas MQTT-Wissen, einfach möglich die Anbindung auch an andere HA-Systeme umzusetzen.
Die hier vorgestellte Lösung ist bei mir an einem Husqvarna ACX 230 eingesetzt und sollte auch an allen anderen G2-Typen funktionieren.
Viele Informationen zum Mower habe ich mir aus verschiedensten Foren zusammengetragen, besonders hilfreich war dieses hier aus dem HomeMatic-Forum (https://homematic-forum.de/forum/viewtopic.php?f=31&t=7295), wo auch viele Verweise auf andere Foren zu finden sind. In der PDF dort gleich am Anfang ist die Anschlussbelegung des Steckers zu finden. Vielen Dank an dieser Stelle an Mule! (Es könnte vielleicht Sinn machen den ESP01-Teil von hier auf diese Lösung zu adaptieren, ein einfaches „Durchreichen“ der Werte lässt sich einfach realisieren.)
Auch das Forum https://www.roboternetz.de/community/thre…Husqvarna/page9 war sehr hilfreich, hier habe ich Basis für die Excel-Tabelle her. Danke an Vogon!
Und natürlich der Klassiker: http://automowerfans.free.fr, Merci beaucoup @poildecarotte!
Zwei wesentliche Komponenten sind meine Basis:
- die Einbindung über WLAN an MQTT
- die Anbindung von MQTT an FHEM
Einbindung Mower über WLAN und MQTT
Die Einbindung des Mowers funktioniert über ein ESP01 Board, welches hardwareseitig an die Diagnoseschnittstelle des Mowers angeschlossen ist. Natürlich sind auch alle anderen, größeren Vertreter der ESP-Boards möglich.
Ich habe eine kleine Lochrasterplatine im Bedienteil untergebracht, auf der der ESP und ein Stützkondensator mit ca. 100µF untergebracht sind. Da an der Diagnoseschnittstelle des Mowers alles über 3,3V läuft ist der Aufwand sehr übersichtlich. Stecker Pin 1->3,3V an ESP-3,3V, Stecker Pin2->Masse an ESP-Masse, Stecker Pin3-> Tx an ESP-Rx und Stecker Pin4(quadratisch)-> Rx an ESP-Tx.
Seit vorsichtig, wenn hier dran baut! Messt zur Orientierung vorher am Stecker wo + und – ist. Zieht die Akkustecker beim Hantieren ab und prüft vor dem wieder reinstecken besser 3 Mal ob alles richtig ist. Und Bitte: alles auf eigene Gefahr!
Ich habe selbst ein Motherboard für knapp 400,-€ auf dem Gewissen. Zugegebenermaßen ist das aber bei ersten Tests passiert, als der Mower auf dem Weg unter die Schrankwand den Kabelbaum der FTDI-Adapters vom Schreibtisch mit sich riss…
Der Diagnosestecker ist schwer zu beschaffen und müsste von außen gesteckt sein. Es gibt je Model auch innen eine weitere Kontaktleiste die man nutzen könnte. Ich habe mich entschieden die Lochrasterplatine direkt an die Leitungen zum Stecker zulöten. Sollte der Mower zum Service müssen, ist es auf alle Fälle ratsam den ESP von der Platine zu ziehen!
(siehe 2x Bild unten)
Das ESP01 Board habe ich mit TASMOTA geflasht. Ich verwende immer die Script-Erweiterung von GEMU (Doku unter https://tasmota.github.io/docs/Scripting-Language/), die eine relativ einfache und geniale Programmierumgebung innerhalb TASMOTA zur Verfügung stellt. Mit den letzten Erweiterungen (Stand Juli 20) ist es möglich den Script-Speicher auf ca. 4000 Zeichen „aufzubohren“, was es ermöglichte die Statustexte alle auch hier mit unterzubringen. So könnte man das Ganze auch ohne weitere übergeordnete HA-Lösungen nutzen.
Das Script für den ESP macht im Grunde nur folgendes:
Innerhalb der TELEPERIOD werden 10 interessante Registerwerte (siehe Excel-Tabelle) zyklisch abgefragt, konvertiert und über den MQTT-Sensor-String an den MQTT-Server published.
Aus den bekannten Statusmeldungen aus Register 01F1 und den Quittungen des Beschreibens von 812C wird zusätzlich ein „Substatus“ mit den folgenden 5 Zuständen gebildet: 1:charge 2:wait 3:error 4:move 5:mow. Die TELEPERIOD wird in Abhängigkeit dieser Substatis angepasst, für 1..3 beträgt sie 30 sec, ansonsten 10 sec. Das soll für zügige Updates in FEHM sorgen.
Weiterhin wird ein MQTT Pfad „%topic%/cmnd/MOW“ subscribed, über den die Kommandos an den Mower gesendet werden können. Da es eigentlich nur darum geht ihn zur Arbeit oder wieder nach Hause zu schicken, reichen die zwei Kommandos „MODE_HOME“ und „MODE_AUTO“ aus. Eine 0 an /MOW stoppt, eine 1 startet den Mäher.
Das Binary zum Flashen des EPS01 muss selbst und mit folgenden Compilerschaltern erstellt werden:
#define EEP_SCRIPT_SIZE 4096 // mit Speichererweiterung
#define USE_EEPROM
#undef USE_RULES // Add support for rules (+8k code)
#define USE_SCRIPT // Add support for script (+17k code)
#define SUPPORT_MQTT_EVENT // enables support for subscribe unsubscribe
#define USE_SCRIPT_WEB_DISPLAY
#define USE_SCRIPT_STATUS
#define USE_SCRIPT_JSON_EXPORT //enable >J section (publish JSON payload on TelePeriod)
#define USE_SCRIPT_WEB_DISPLAY //enable >W section (modify web UI)
#define SCRIPT_FULL_WEBPAGE //enable >w section (seperate full web page and webserver)
Der Quelltext des Scriptes ist kommentiert. Ich empfehle den von GEMU entwickelten Editor zu nutzen, dieser entfernt die Kommentare beim Übertragen an den ESP und spart den knappen Platz. Der Workflow ist dabei so:
- Bearbeiten des Quelltextes aus einen *.txt Datei (ein schönes Backup)
- Senden per Tastendruck an den ESP
Den Download für den Editor und seine Doku findet Ihr für Win und Mac, wenn Ihr in der Script-Doku (s.o.) nach „Optional external editor“ sucht. Ihr müsst dafür noch die IP-Adresse Eures ESP-Boards im Quelltext unter „IP=xxxx“ anpassen.
Nehmt Ihr den Editor nicht, entfernt auf alle Fälle die Zeilen mit dem „SB=..“ und „IP=..“ und vielleicht die Kommentare.
Das Script kommt in einem folgenden Post, es sind nur 10.000 Zeichen erlaubt..
Habt Ihr das Script geladen lohnt sich ein Blick in die Tasmota-Konsole: dort gibt es hoffentlich das erste Erfolgserlebnis in Form einer funktionierenden Kommunikation.
Anbindung über MQTT an FHEM
Basis dafür ist das MQTT2_DEVICE. Ich persönlich nutze es im Zusammenhang mit einem MOSQUITTO-MQTT-Server.
Hier die wichtigsten Aufrufe beim Anlegen des Devices:
defmod <name> MQTT2_DEVICE
attr <name>IODev <yourBroker>
attr <name>icon scene_robo_lawnmower
attr <name>readingList <your topic>/tele/LWT:.* LWT\
<your topic>/tele/STATE:.* { json2nameValue($EVENT) }\
<your topic>/tele/SENSOR:.* { json2nameValue($EVENT) }\
<your topic>/tele/INFO.:.* { json2nameValue($EVENT) }\
<your topic>/stat/RESULT:.* { json2nameValue($EVENT) }
attr <name>room Garten
attr <name>setList off:noArg <your topic>/cmnd/MOW 0\
on:noArg <your topic>/cmnd/MOW 1
attr <name> stateFormat sstate
<your topic> ist dabei durch das eigene Topic zu ersetzen, <name> mit dem gewünschten Gerätenamen und <yourBroker> mit eurer MQTT Serverinstanz in FEHM.
Nach erfolgreichem Laden wird man nach ein paar Sekunden die Readings sehen können.
Das entscheidende Attribut für die Visualisierung ist das devStateIcon. Hierin befindet sich ein etwas größerer PERL-Codeblock, den ich zum besseren Verständnis hier extra aufführe. Einfach alles inklusive der beiden geschweiften Klammern kopieren und in das Attribut einfügen!
Ich habe auch diesen Code in einem weiteren Post angefügt, wegen der Beschränkung auf 10.000 Zeichen..
Am Ende sollte das dabei herauskommen:
(siehe Bild unten)
Man sieht die zwei (bunten) devStateIcons, die sich in Abhängigkeit des Batteriezustandes und des Substatuses ändern. Zur Batterie gibt es einen Ladezustand und die Temperatur. In der unteren Zeile wird der aktuelle Status mit seiner Nummer in Klammern angezeigt, beim Laden mit Ladestrom und Spannung. „On“ schickt den Mower zur Arbeit, „Off“ holt ihn zurück an die Station. Die Readings kann man ja bekanntermaßen aus anderen Elementen in FHEM abfragen und für die Steuerung anderer Komponenten (Beregnung usw.) auswerten.
Zur Erklärung des Perl-Codes:
Nach der Deklaration der Variablen werden verschiedene Werte aus den Readings errechnet. Im ersten given Element (was in anderen Sprachen so etwas wie ein Switch/case ist) wird das Icon für den Substatus festgelegt. Die if Anweisungen legen das Icon für den Batteriezustand fest. Das zweite given-Konstrukt bildet den Statustext in Abhängigkeit des Gerätestatus und ergänzt ggf. um Readingwerte (Strom/Spannung).
Zum Schluss wir das Ganze formatiert und ausgegeben.
Excel Tabelle:
Ich füge noch eine Excel-Tabelle bei, die ich aus o.g. Forum bekommen und adaptiert habe.
Im Reiter „Register“ sind alle Register aufgeführt. Ich hatte teilweise widersprüchliche Infos in verschiedenen Foren gefunden, diese findet man ab Spalte F. Da dies für mich nicht relevant war bin ich dem nicht nachgegangen. In der Spalte MQTT finden sich die zugeordneten Variablennamen für das Script.
Im Reiter Kommando finden sich die Register für die Kommandos (stammt von Mule aus dem von Ihm geschriebenen Deamon). Ich verwende davon nur zwei.
In Status findet man die bekannten Statis, meist auch aus Mule’s Daemon entnommen. Hier findet sich die Zuweisung zu den Sub-Statis, in H wird der PERL-Code für die when-Zweige zum rauskopieren gebildet.
Ich habe gelegentlich Statis war genommen, die nicht in dieser Tabelle aufgeführt sind. Wenn jemand hierzu noch etwas beitragen kann: bitte gerne!
Viel Spass!
Ekkehard.