[Neues Modul] 74_AutomowerConnect, Husqvarnas OpenAPI

Begonnen von Ellert, 17 Januar 2023, 14:33:07

Vorheriges Thema - Nächstes Thema

Ellert

FHEM-Wiki: Modul: AutomowerConnect

Das Modul AutomowerConnect ist eine weitere Möglichkeit Mähroboter von Husqvarna in FHEM einzubinden.

Es gibt schon einige Module, die den Automower bedienen können:

  • Das Robonect Modul kommt nicht in Frage da die Mähfläche nicht mit WLAN abgedekt ist und der Mäher ohnehin ein integriertes Connect Modul hat.
  • Mit dem Gardena-Modul wäre es ein Umweg, falls es funktioniert. Ich habe es probiert - hat nicht geklappt. Falls es dennoch funktioniert, lasst es mich wissen, dann spare ich mir die weitere Arbeit.
  • Das Modul HusqvarnaAutomower ist o.k., ein paar Sachen haben mich gestört, der Mähplan, Scheinwerfer und Schnitthöhe kann nicht bedient werden, das Passwort liegt offen vor, die Fehlermeldungen fehlten.

Das Modul AutomowerConnect greift auf die offizielle Husqvarna Automower Connect Api zu und bildet das Device (FHEM-Gerät) für einen Automower ab.
Mit der Nutzung einer Websocket Verbindung werden Daten auch ereignisnah übertragen.

Voraussetzungen

Anmeldung im Husqvarna Developer Portal: https://developer.husqvarnagroup.cloud/docs/get-started
  • Dort eine Application anlegen. Der Benutzername und das Passwort der Smartphone App sollten funktionieren.
  • Die Authentifizierungs Api und die Automower Connect Api der Application zuweisen.
  • Der erzeugte Application Key und das Application Secret bilden die Zugangsdaten für das AutomowerConnect Modul.

Definition des ersten Mähers:
define MyMower AutomowerConnect <Application Key>
set MyMower client_secret <Application Secret>

Weitere Mäher:
define MyMower_1 AutomowerConnect <Application Key> 1
set MyMower_1 client_secret <Application Secret>


Wesentliche Eigenschaften

  • Das Modul kann parallel zu einer anderen Definition des gleichen Mähroboters parallel genutzt und getestet werden.
  • Der Pfad des Mähroboters kann dargestellt werden, mit oder ohne Hintergrundbild. Auf die Liveeinbindung von Google Earth habe ich verzichtet, Google weiß schon genug.
  • Die Lage der Mähfläche muss angegeben werden (obere linke Ecke und untere rechte Ecke).
  • Die Angabe Longitude und Latitude erfolgt in Dezimalgrad, z.B. aus Google Earth.
  • Die gewünschte Größe der Anzeigefläche, bzw des Hintergrundbildes muss in Pixel angegeben werden.
  • Die Position der Ladestation kann angegben werden als Dezimalgrad.
  • Der Verbindungspunkt der Ladestation zum Pfad kann festgelegt werden (links, rechts, oben, unten und mitte).
  • Die Grundstücksgrenze und die Mähbereichsgrenze können angegeben werden als Liste in Dezimalgrad (Longitude,Latitude+Linefeed). Die letzte Zeile darf kein Linefeed enthalten.
  • Fehlermeldungen des Mähroboters werden angezeigt.
  • Der Mähplan kann editiert werden.
  • Alle über die API angebotenen Aktionen können ausgeführt werden.
  • Scheinwerfer und Schnitthöhe können bedient werden.
Einige Statistische Daten werden angezeigt oder berechnet.
  • Geschwindigkeit im letzten Interval
  • gefahrene Strecke und übermähte Fläche für den aktuellen Tag, die aktuelle Woche, sowie für den letzten Tag und die letzte Woche.
Im Wirbetrieb kann der Mäherpfad mit beliebig vielen Wegpunkten angezeigt werden.

Weitere Hinweise gibt es in der Commandref.

Wie eine Karte mit Hintergrundbild Grenze, Mähbereich und Pfad des Mähroboter zu erstellen ist, steht jetzt im FHEM-Wiki: Modul: AutomowerConnect

Es ist ein Bild angehängt mit Grenze, Mähbereich und Mäherpfad (sieht aus als schleiche er sich heraus, um die Umgebung zu erkunden)

Das Modul wird über das offizielle Update verteilt.

Tipps
Frontend für die Raumansicht
Es lässt sich mit webCmd und webCmdLabel ein einfaches Frontend für die Raumansicht basteln, wenn der Name geändert wird kann es über Raw definition (das + vor der Befehlszeile) eingespielt werden.
attr am430x0 webCmd Pause:ParkUntilFurtherNotice:Park:ParkUntilNextSchedule:Start:ResumeSchedule:cuttingHeight:headlight
attr am430x0 webCmdLabel Stop:\
:Park for:min\
:Run for:min&emsp;;&emsp;;&emsp;;\
:Height (1,5+:x0,5) cm Light

Readings ergänzen

Einige Daten des Mähers werden in Readings angezeigt. Wem das nicht genügt kann Readings über das Attribut userReadings ergänzen.
Der Trigger für die userReadings ist connected.
Den Hashpfad findet man in den Listen MowerData und StatisticsData.

Beispiel: Erzeugen des Reading serialnumber mit dem Hashpfad $hash->{helper}{mower}{attributes}{system}{serialNumber}
attr <name> userReadings serialnumber:connected {$defs{$name}->{helper}{mower}{attributes}{system}{serialNumber}}

Widget für TabletUI/FTUI Version 2

Im Anhang befindet sie ein Widget zur Kartendarstellung in FTUI 2

Die Einbindung erfolgt auf folgende Weise:
<head>
.
.
.
  <script src="../pgm2/jquery.min.js"></script>
  <script src="../pgm2/automowerconnect.js"></script>
.
.
.
</head>

<body>
.
.
.
  <div
    data-type="automowerconnect"
    data-device="<device name>"
    data-jsonurl="/fhem/AutomowerConnect/<device name>/json"
  >
  </div>
.
.
.
</body>

Die Dateien jquery.min.js und automowerconnect.js aus dem Verzeichnis pgm2 müssen im Head-Tag eingebunden werden und das Widget wie üblich als Div-Tag im Body.
<device name> ist durch den Namen des FHEM-Gerätes zu ersetzen, das den Mäher abbildet.

TabletUI/FTUI Version 3
Wie die Karte in FTUI3 eingebunden werden kann ist im FHEM Wiki beschrieben:
https://wiki.fhem.de/wiki/AutomowerConnect#Tablet-UI/FTUI_Version_3

Positionsdaten speichern und wiederherstellen

Wer sich am Verlust der Positionsdaten nach einem Update stört, der kann mit den nachstehenden Subs für die 99_myUtils.pm vor dem Update die Daten speichern und nach dem Update wiederherstellen:
use Storable;
sub store_areapos {
my ( $name ) = @_;
my $hash = $defs{$name};
store \$hash->{helper}{areapos}, 'areapos';
}
sub retrieve_areapos {
my ( $name ) = @_;
my $hash = $defs{$name};
my $ref = retrieve( 'areapos' );
$hash->{helper}{areapos} = $$ref;
}

Für die Befehlszeile
Speichern vor dem Update
{store_areapos '<name>'}
Laden nach dem Update
{retrieve_areapos '<name>'}
<name> ist durch den Gerätenamen des Gerätes das den Mäher abbildet zu ersetzen.
Das Speichern und Wiederherstellen sollte unmittelbar vor bzw. nach dem Update erfolgen.

Steigerung der Rate für Positionsevents

Bei der Benutzung des Modul 98_AMConnectTools.pm wird ca. alle 30s während der Aktivitäten LEAVING, MOWING und GOING_HOME über die Websocketverbindung ein Positonsevent empfangen.
Das bedeutet es wird während des Mähens alle 30 s eine Position gesendet.
Um die Eventrate aufrecht zu erhalten, wird die inoffizielle API für den 1. Mäher alle 440 s abgefragt.
Das Modul schaltet sich inaktiv wenn sich alle Mäher in der Ladestation befinden.
Es ist nur aktiv, wenn mindestens ein Mäher die Station verlässt bis sich alle Mäher in der Station befinden.

Der Benutzername bzw. Emailadresse und das Passwort der Smartphoneapp wird für die Definition benötigt.

Vorbereitung
Das Modul in den Modulpfad (/opt/fhem/FHEM/) kopieren. Danach reicht ein Reload des Moduls damit das Gerät definiert werden kann.
reload 98_AMConnectTools.pm
Definition
define AMConnectTools AMConnectTools <Emailadresse>
set AMConnectTools password <Passwort>




CoolTux

Hallo Ellert,

Es gibt zum speichern von Passwörtern in Modulen das offizielle Core Modul Passwords

https://git.cooltux.net/FHEM/mod-Password

Ist für eine einfachere Integration in FHEM Modulen gedacht.



Grüße
Marko
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Ellert


Ellert


Ellert

Die Module gibt es ab morgen im Update, das macht das Testen einfacher.

dinkel75


RobertSch

Vielen lieben Dank für dieses Modul!

Ich habe es bereits eingerichtet, kann allerdings noch kein weiteres Feedback da lassen, da sich unser Mäher derzeit in der Winter-Wartung befindet. Sobald er wieder da ist, werde ich weiter testen.

Beim Anlegen ist mir aber aufgefallen das sich die fhem Instanz aufhängt, nachdem das Gerät definiert wurde. Kam also erst gar nicht dazu den Secret Key einzutragen. Habs dann direkt in die fhem.cfg geschrieben, seitdem läufts ohne Probleme. Connected ist er, zeigt aber wegen der Wartung derzeit einen Fehler an, was aber mit der App überein stimmt.

LG
Robert

Ellert

Danke für die Rückmeldung.

Aufhänger habe ich noch nicht beobachtet, schaue ich mir aber nochmal an.

Team-Menge

Danke für das neue Modul! Klingt vielversprechend  ;D

Momentan kann ich zwar noch nicht testen, da sich mein Mäher noch im Winterschlaft befindet, aber ich habe es schon einmal installiert.

Dabei musste ich allerdings feststellen, dass meine komplette fhem-Installation (auf RaspBerryPI 3) nach der Installation des Moduls sehr langsam auf alle Eingaben reagiert oder sich sogar komplett aufhängt. Nach deaktivieren des Moduls (nur extern über putty möglich) läuft alles flüssig wie vorher.

Da es beim state "authenticated" anzeigt, gehe ich 'mal davon aus, dass es das "client_secret" eingelesen hat.

Ellert

So, der Absturz  beim Define ist behoben und die Fehlerbehandlung ist verbessert, ab jetzt im SVN und morgen im Update.

Der Bug beim Define ist mir leider nicht aufgefallen, weil ich mit einem bereits definierten Gerät gearbeitet habe und das client secret schon gespeichert war.

Ja, die meisten Mähroboter sind jetzt wohl noch im Winterschlaf. Wer auf eine Karte mit dem Weg des Mähers wert legt, könnte in Ruhe alles vorbereiten.

@Team-Menge, das träge Verhalten hängt möglicher Weise mit dem Bug beim Define zusammen, und in dem Zusammenhang wurde auch "authenticated" falsch angezeigt. Ich teste auf einem Pi B da läuft alles flüssig.

Ich rate daher dringend zu einem Update.

Danke an alle die testen, das ist hilfreich.

dinkel75

Bei mir auch installiert - läuft.
Aber wie bei den Anderen - Winterruhe  :D

Team-Menge

Hallo Ellert,

bei mir läuft es jetzt auch erst einmal. Danke für die Anpassungen. Weitere Test folgen demnächst nach der Winterruhe.

LG

RobertSch

Zitat von: Ellert am 27 Januar 2023, 19:03:44

Ja, die meisten Mähroboter sind jetzt wohl noch im Winterschlaf. Wer auf eine Karte mit dem Weg des Mähers wert legt, könnte in Ruhe alles vorbereiten.


Habe gerade mal das mit der Karte gemacht und muss sagen, das ging einfacher als erwartet. Lediglich den Screenshot so zu setzen, das es am Ende mit den Koordinaten wieder 100% übereinstimmt war etwas tricky. Ging aber auch nach zwei Versuchen ganz gut. Danke für diese Art der Lösung!

P.S.: Zum bearbeiten/anpassen der Koordinaten aus der kml-Datei, kann man sehr gut mit Notepad++ und dessen Suchen/Ersetzen Funktion arbeiten um weniger händische Arbeit zu verrichten.

Ellert

Ab heute gibt es noch ein Featureupdate. So langsam gehen mir die Ideen aus.

Es sind ein paar Readings weniger und dafür die Inhalte kompakter.

Es können 2 Listen angezeigt werden, die Fehlernummer mit Bedeutung und ein paar interne Daten.

Ein Reading ist neu: statistics_newGeoDataSets. Es zeigt die Zahl der im Intervall dazu gekommenen Datensätze an. 50 Datensätze werden in der Cloud gespeichert.
Wenn das Reading immer 50 anzeigt, dann könnte das ein Hinweis sein , dass das Intervall zu lang ist und ggf. Datensätze verloren gehen.


Für den eiligen Anwender wird ohne weitere Einstellungen der Mäherpfad und der vermutliche Standort der Ladestation angezeigt.
Mäher mäht: Der Pfad ist rot dargestellt.
Mäher parkt: Der Pfad ist grau dargestellt.

Zum Testen steht mein Mäher in der Ladestation, etwa alle halbe Stunde gibt es eine neue Position, die Wiederholgenauigkeit der Positionsmessung ist hier im Dachgeschoss miserabel, das hatte ich schon erwähnt.


Mit dem heutigen Update lässt sich mit webCmd und webCmdLabel ein einfaches Frontend für die Raumansicht basteln, wenn der Name geändert wird kann es über Raw definition (das + vor der Befehlszeile) eingespielt werden.


attr am430x0 webCmd Pause:ParkUntilFurtherNotice:Park:ParkUntilNextSchedule:Start:ResumeSchedule:cuttingHeight:headlight
attr am430x0 webCmdLabel Stop:\
:Park for:min\
:Run for:min&emsp;;&emsp;;&emsp;;\
:Height (1,5+:x0,5) cm Light


Und Danke für eure Rüchmeldungen.

PS. Und denkt an fheminfo send damit die Statistik stimmt  ;)

Ellert

Damit die Detailansicht etwas kompakter wird, werden viele Mäherdaten nicht mehr in Readings geschrieben.

Diese Daten können über 4 Listen angezeigt werden InternalData, errorCodes, MowerData und StatisticsData. In den beiden letzten werden die Hashpfade angezeigt, damit können bedarfsweise userReadings angelegt werden.
Der Trigger für die userReadings ist connected.

Beispiel: Erzeugen des Reading serialnumber mit dem Hashpfad $hash->{helper}{mower}{attributes}{system}{serialNumber}

attr <name> userReadings serialnumber:connected {$defs{$name}->{helper}{mower}{attributes}{system}{serialNumber}}