AutomowerConnect: Unterschied zwischen den Versionen
Trelle (Diskussion | Beiträge) |
Trelle (Diskussion | Beiträge) |
||
Zeile 250: | Zeile 250: | ||
Vorbereitung | Vorbereitung | ||
Die Datei 98_AMConnectTools.pm aus dem ersten Beitrag des Forenthema zu diesem Modul herunterladen und Modulpfad (<code>/opt/fhem/FHEM/</code>) kopieren. Danach reicht ein Reload des Moduls damit das Gerät definiert werden kann. | |||
reload 98_AMConnectTools.pm | reload 98_AMConnectTools.pm | ||
Version vom 29. September 2023, 16:29 Uhr
AutomowerConnect | |
---|---|
Zweck / Funktion | |
Steuerung eines Husqvarna Mähroboters mit Connect Modul | |
Allgemein | |
Typ | Gerätemodul |
Details | |
Dokumentation | EN / DE Thema |
Support (Forum) | Sonstige Systeme |
Modulname | 74_AutomowerConnect.pm |
Ersteller | Ellert |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
AutomowerConnect ist ein Modul zur Steuerung eines Husqvarna Mähroboters mit Connect Modul (SIM) über Husqvarnas OpenAPI.
Eine vollständige Beschreibung der Module enthält die Befehlsreferenz AutomowerConnect.
Die Forenbeiträge sind unter Sonstige Systeme zu finden.
Eigenschaften
- Dieses Modul etabliert eine Kommunikation zwischen der Husqvarna Cloud und FHEM, um einen Husqvarna Automower zu steuern, der mit einem Connect Modul (SIM) betrieben wird.
- Es arbeitet als Device für einen Mähroboter. Für zusätzliche in der API registrierte Mähroboter ist für jeden Mäher ein extra Appilcation Key mit Application Secret zu verwenden.
- Der Pfad des Mähroboters wird in der Detailansicht des FHEMWEB Frontends angezeigt.
- Im Gegensatz zur Smartphone App können mehr als die 50 letzten Wegpunkte angezeigt werden, zu einer möglichen Kontrolle der Mähbereichsabdeckung.
- Der Pfad kann mit einer beliebigen Karte hinterlegt werden.
- Eine Grundstücks- und eine Mähbereichsgrenze kann dargestellt werden.
- Die Lage der Ladestation kann gekennzeichnet werden.
- Die Karte muss als Rasterbild im webp, png oder jpg Format vorliegen.
- Es ist möglich alles was die API anbietet zu steuern, z.B. Mähplan, Scheinwerfer, Schnitthöhe und Aktionen wie, Start, Pause, Parken usw.
- Die letzten aus der API sind im Gerätehash gespeichert, eine Weiterverarbeitung ist daher möglich.
- Berechnung statistischer Daten (Geschwindigkeit; 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.
- Es können eigene Zonen definiert werden.
- Die Schnitthöhe kann je Zone vorgegeben werden. Sie wird automatisch eingestellt, wenn der Mäher sich in der Zone befindet.
Anforderungen
- Für den Zugriff auf die API muss eine Application angelegt werden, im Husqvarna Developer Portal: Get Started.
- Währenddessen wird ein Application Key (client_id) und ein Application Secret (client secret) bereitgestellt. Diese sind für dieses Modul zu nutzen.
- Das Modul verwendet Client Credentials als Granttype zur Authentifizierung, die Redirect URL wird für diesen Authentifizierungstyp nicht benötigt (ggf. localhost (http://127.0.0.1) eintragen).
Bedeutung der Werte des Reading device_state
defined
Das Gerät wurde erfolgreich definiert, z.B. nach dem es erzeugt wurde oder nach einem Neustart.authentification
Das Gerät leitet die Authentifizierung ein und fordert ein Access Token an.authenticated
Das Gerät wurde authentifiziert und hat ein Access Token erhalten und die Daten werden das erste Mal nach der Authentifizierung aus der API gelesen.update
Das Gerät erneuert die Daten aus der API. Wann die Daten in der API zuletzt geändert wurden ist am Zeitstempelstatus_Timestamp
abzulesen.status_TimestampDiff
zeigt die Zeitspanne zwischen den letzten beiden Statusänderungen an.connected
Alles ist in Ordnung. Nur in diesem Zustand können Befehle gesendet werden.disabled
Das Gerät ist inaktiv. Es werden keine Befehle gesendet und keine Daten über die API geholt.initialized
Das Gerät ist aktiv und beginnt zu arbeiten.error
Während der Authentifizierung, des Updates oder des Sendens ist ein Fehler aufgetreten, mehr dazu steht in der Logdatei.
Erstellung einer Karte mit Hintergrundbild, Grundstücksgrenze, Mähbereich und zurückgelegtem Pfad des Mähroboters.
Der Mähroboter liefert regelmäßig einen GPS-Datensatz von seinem Standort auf der Erde. Dieser GEO-Datensatz je ein Wert für die Longitude (Längengrad) und die Latitude (Breitengrad), ist nach WGS84 als Dezimalgrad angegeben. Damit ein GEO-Datensatz auf einem Bereich des Frontends dargestellt werden kann, muss eine Verbindung zwischen einer rechteckigen Fläche auf dem Frontend und einer rechteckigen Fläche auf der Erde in der auch jeder GEO-Datensatz liegen wird, hergestellt werden. Das entspricht der Registrierung in der digitalen Bildverarbeitung.
Flächenregistrierung
Zur Registrierung der Fläche auf dem Frontend und der Fläche auf der Erde dienen die Attribute mapImageWidthHeight
und mapImageCoordinatesToRegister
. Das Attribut mapImageWidthHeight
legt die Flächengröße in Pixel fest, durch die Angabe der Breite und Höhe der Fläche. Die Angaben werden durch ein einziges Leerzeichen getrennt. Das Attribut mapImageCoordinatesToRegister
legt die Fläche auf der Erde fest, in dem die GEO-Koordinaten der linken oberen Ecke und der rechten unteren Ecke der Fläche angegeben werden, auf der die Punkte der GEO-Datensätze liegen, die vom Mähroboter geliefert werden. Longitude und Latitude werden durch ein einziges Leerzeichen getrennt, so dass ein Datensatz einer Zeile entspricht. Beim Ermitteln der Eckpunkte kann gleichzeitig ein Bild als Hintergrund gespeichert werden.
Koordinaten ermitteln mit Google Earth Web
Dies ist die einfachste und schnellste Vorgehensweise. Da sich in Google Earth Web die Höhenverstärkung nicht abschalten lässt wird die Landschaft perspektivisch verzerrt, sodass eingezeichnete GEO-Datensätze als nicht korrekt positioniert erscheinen. Besser wird es, wenn Google Earth lokal installiert wird.
- Google Earth starten.
- Alle nicht benötigten Ebenen auschalten.
- Den Standort der Mähfläche anzeigen.
- In der 3D-Ansicht das Browserfenster und den Zoom so einstellen, dass die Mähfläche wie gewünscht angezeigt wird und die Nordausrichtung sicherstellen.
- Ein neues Projekt anlegen
- Eine Linie von der linken oberen Ecke in die rechte untere Ecke zeichnen.
- Das Projekt als kml-Datei exportieren
- Optional die Linie ausblenden und den durch die Linie markierten Bereich als Bildschirmausschnitt speichern.
- Optional die Bildgröße in Pixel ermitteln, die Bilddatei wenn möglich als webp-Datei speichern um die Dateigröße zu reduzieren. Empfohlene Größe der Bilddatei sollte unter 100 kB liegen.
- Optional das Bild in einem für FHEM zugänglichen Pfad ablegen. Im Dateinamen die Bildgröße angeben, z.B. map700x1200.webp, dann wird beim Setzen des Attributes
mapImagePath
das AttributmapImageWidthHeight
auf die Bildgröße gesetzt. - Die kml-Datei mit einem Texteditor öffnen und die Koordinaten kopieren und im richtigen Format in das Attribut
mapImageCoordinatesToRegister
eintragen. - Dabei beachten, dass in der kml-Datei drei Werte je Datensatz enthalten sind (Longitude, Latitude, und Altitude) die Höhendaten (Altitude) weglassen, Longitude und Latitude durch ein einziges Leerzeichen trennen und jeden Datensatz in eine eigene Zeile kopieren.
Koordinaten ermitteln mit Google Earth Pro
Mit Google Earth Pro kann die perspektivische Verzerrung minimiert werden und so ein genauerer Eindruck von der Lage eingezeichneter GEO-Datensätze erzeugt werden. Die Vorgehensweise ist ähnlich der mit Google Eart Web, folgendes ist dabei zusätzlich zu beachten:
- Unter
Tools
Optionen
3D-Ansicht
Dezimalgrad auswählen, Höhenverstärkung auf den kleinsten Wert setzen (0.01). - Unter
Tools
Optionen
Navigation
Beim zoomen nicht automatisch neigen auswählen. - Vor dem Zeichnen der Linie von der linken oberen Ecke zur rechten unteren Ecke unter
Datei
Speichern
Bild speichern...
Die Toolbar zum Bild speichern einschalten. Wenn das nicht gemacht wird, stimmen die Koordinaten der Linie nicht mit dem gespeicherten Bild überein, weil der Teil des Bildes, den die Toolbar verdeckt nicht gespeichert wird.
Grenzen darstellen
Die Grenzen des Mähbereiches können eingezeichnet werden. Je nach Vorarbeit (ausmessen von Lage und Länge der Begrenzungabschnitte, oder Orientierung an Geländepunkten wie Bäume, Mauern, Wege, Zäune, markante Grenzpunkte, usw.) kann die Begrenzung mehr oder weniger genau in Google Earth eingezeichnet werden. Die Koordinaten können wieder über eine kml-Datei gewonnen werden und je nach Art der Grenze in die Attribute mowingAreaLimits
zur Darstellung der Mähflächengrenze oder propertyLimits
zur Darstellung der Grundstücksgrenze, eingetragen werden.
Zweck der Darstellung der Mähflächengrenze
Die Darstellung der Mähflächengrenze zusammen mit dem Fahrweg des Mähroboters über einen längeren Zeitraum soll Aufschluss geben wie gleichmäßig die Fläche überfahrenen und gemäht wird.
Grenzpunkte der Grundstücksgrenze
Die Darstellung der Grundstücksgrenze dient zur besseren Ermittlung der Mähbereichsgrenze. Wenn die Mähbereichsgrenze in Google Earth zur Koordinatenermittlung eingezeichnet wird, dann ist die Darstellung der Grundstücksgrenze eine Hilfe zur Orientierung. Die Grundstücksgrenzen können über die GEO-Portale der Länder ermittelt werden. Je nach Ausgestaltung der Portale können an den Grenzpunkten Markierungen angebracht werden und dort die Koordinaten abgelesen werden oder kopiert werden. Die Koordinaten dieser Punkte können dann in das Attribut propertyLimits
übernommen werden, teilweise Zentimeter genau. Und die ermittelte Grenzpunkte können in eine kml-Datei eingetragen werden und so die Grenze exakt in Google Earth dargestellt werden.
Aufbau der Kartendarstellung
Beim Laden der Detailansicht werden die mapDesignAttributes übertragen, die Ladestationskoordinaten, die Grundstücksgrenzkoordinaten, die Mähbereichsgrenzkoordinaten und die Koordinaten des bereits vorhanden Mäherpfades. Wenn es neue Positionsdaten oder eine Fehlermeldung gibt werden nur diese Positionsdaten oder Fehlerdaten zur Aktualisierung der Karte übertragen. Die Skalierung der GPS Daten auf die Bildgröße erfolgt mit den zum jeweiligen Darstellungszeitpunkt im Modul vorliegenden Umrechnungsfaktoren.
Zusammenspiel der zur Registrierung, Skalierung und Positionierung genutzten Attribute
Als Koordinaten der Ladestation wird zuerst die Mitte Deutschlands angenommen, wenn es Koordinaten des Mähers in der Ladestation gibt, dann wird der Mittelwert verwendet. Falls aber das Attribut für die Ladestationskoordinaten gesetzt ist, dann wird die Ladestation mit diesen Koordinaten angezeigt. Die berechnete Position der Ladestation verändert sich nur, wenn die Detailansicht neu geladen wird.
Wenn die Bildgröße mapImageWidthHeight
nicht angegeben ist, wird '350 650' verwendet.
Wenn mapImageCoordinatesToRegister
nicht angegeben ist, werden die Extremwerte der vorhandenen Positionsdaten genutzt.
Wenn scaleToMeterXY
nicht angegeben ist, dann wird die Skalierung verwendet, die in der Mitte Deutschlands gilt (67425, 108886).
Wenn mapImageCoordinatesUTM
angegeben wird und vorher mapImageCoordinatesToRegister
angegeben wurde dann wird scaleToMeterXY
für die Lage des Mähbereiches berechnet.
Statistische Daten ermitteln
Damit statistische Daten, wie Streckenlänge, überfahrene Fläche und Geschwindigkeit berechnet werden können, muss eine Umrechnung der GEO-Daten von Grad in Meter erfolgen. Da die Erde ein Elipsoid ist, ist der Umfang der Erde vom Standort abhängig. Da ein Grad immer 1/360 des Umfangs ist und der Umfang vom Standort abhängt, hängt auch der Umrechnungsfaktor Meter pro Grad vom Standort ab. Deshalb muss ein Umrechnungsfaktor immer für den bestimmten Standort als Differenzenquotient berechnet werden und kann dann dort bei den kleinen Streckenlängen eines Mähbereiches ohne nennenswerten Fehler als konstant angenommen werden. Die Berechnung führt das Modul durch. Als Grundlage müssen jedoch die zu den Koordinaten des Attributes mapImageCoordinatesToRegister
in Dezimalgrad, die passenden Koordinaten in Meter in das Attribut mapImageCoordinatesUTM
eingetragen werden. Die Umrechnung kann auf der Website des GEO-Datenzentrums des Bundeamtes für Kartographie und Geodäsie, Koordinatenumrechnung kostenlos durchgeführt werden, auch als Liste in Form einer Textdatei. Bei den Einstellungen ist die Reihenfolge der Koordinaten zu beachten (Longitude, Latitude). Stehen die zeilenweise umzurechnenden Daten in einer Textdatei ist das Windows-Zeilenende (CRLF) erforderlich. Höhenunterschiede werden bei den Berechnungen nicht berücksichtigt.
Einbindung der Karte in verschiedene Frontends
Die Module AutomowerConnect und AutomowerConnectDevice stellen den Befehl get <Gerätename> html
zur Verfügung, um den HTML-Kode für die Karte zu liefern.
Mit dieser Methode erfolgt die Einbindung in verschiedene Frontends.
In den folgenden Beispielen muss <device name> durch den Namen des Gerätes ersetzt werden, das einen Automower steuert.
DOIF, uiTable
siehe DOIF/uiTable u. DOIF/uiTable_Schnelleinstieg
defmod map DOIF {}
attr map room Test
attr map uiTable fhem('get <device name> html', 1)
FHEMWEB, weblink
defmod map_1 weblink htmlCode { fhem('get <device name> html', 1) }
attr map_1 room Test
Tablet-UI/FTUI Version 2
Im Forum befindet sich ein Widget zur Kartendarstellung in FTUI 2 Beitrag mit FTUI-Widget als Anhang
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.
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>
Tablet-UI/FTUI Version 3
Die Dateien jquery.min.js und automowerconnect.js aus dem Verzeichnis pgm2 müssen im Head-Tag eingebunden werden und die Karte als ftui-content im Body angelegt werden.
<device name> ist durch den Namen des FHEM-Gerätes zu ersetzen, das den Mäher abbildet.
Die Einbindung erfolgt auf folgende Weise:
<head>
.
.
.
<script src="../pgm2/jquery.min.js"></script>
<script src="../pgm2/automowerconnect.js"></script>
.
.
.
</head>
<body>
.
.
.
<ftui-grid-tile row="1" col="1" >
<ftui-content id="amc_automowerconnect" [content]="<device name>:system_name | getHTML('<device name>')" ></ftui-content>
</ftui-grid-tile>
<script type="text/javascript">
$(document).ready(function(){
setTimeout(AutomowerConnectUpdateJsonFtui, 2000, '/fhem/AutomowerConnect/<device name>/json');
setInterval(AutomowerConnectUpdateJsonFtui, 30000, '/fhem/AutomowerConnect/<device name>/json');
});
</script>
.
.
.
</body>
FLOORPLAN
Die Darstellung erfolgt über das Modul weblink. Siehe auch FLOORPLAN und Floorplan Installations-Leitfaden.
Dashboard
Siehe Dashboard
Einfaches Frontend für die FHEMWEB-Raumansicht
Die Attribute können über Raw definition eingespielt werden, wenn der Gerätename geändert wird.
attr <device name> webCmd Pause:ParkUntilFurtherNotice:Park:ParkUntilNextSchedule:Start:ResumeSchedule:cuttingHeight:headlight attr <device name> webCmdLabel Stop:\ :Park for:min\ :Run for:min ; ; ;\ :Height (1,5+:x0,5) cm Light
Readings ergänzen
Wenige Werte der Mowerdaten werden in Readings angezeigt. Wenn das nicht genügt, können Readings über das Attribut userReadings ergänzt werden. Als Trigger gibt es vier grundsätzliche Möglichkeiten:
- device_state: connected - alles was nur nachts aktualisiert wird ( Automower Connect API: OpenAPI: Get data for a mower linked to a user )
- mower_wsEvent: status-event - alle Daten, die mit Statusevents geliefert werden ( Webesocket: status-event )
- mower_wsEvent: positions-event - alle Daten, die mit Positonsevents geliefert werden ( Webesocket: positions-event )
- mower_wsEvent: settings-event - alle Daten, die mit Settingsevents geliefert werden ( Webesocket: settings-event )
Welche Daten, wie geliefert werden, ist aus den vorstehenden Links ersichtlich.
Den Hashpfad findet man in den Listen MowerData und StatisticsData oder über den in die Befehlszeile eingegebenen Befehl {Dumper $defs{<name>}{helper}{mower}
.
Beispiel 1: Erzeugen des Reading serialnumber
mit dem Pfad des Gerätehashes $hash->{helper}{mower}{attributes}{system}{serialNumber}
attr <device name> userReadings serialnumber:device_state:.connected {$defs{$name}->{helper}{mower}{attributes}{system}{serialNumber}}
Beispiel 2: Erzeugen der Readings lastLongitude
und lastLatitude
mit dem Pfad des Gerätehashes $hash->{helper}{mower}{attributes}{positions}[0]
zu den letzten bekannten Koordinaten.
attr <name> userReadings lastLatitude:mower_wsEvent:.positions-event {$defs{$name}->{helper}{mower}{attributes}{positions}[0]{latitude}},\ lastLongitude:mower_wsEvent:.positions-event {$defs{$name}->{helper}{mower}{attributes}{positions}[0]{longitude}}
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
Die Datei 98_AMConnectTools.pm aus dem ersten Beitrag des Forenthema zu diesem Modul herunterladen und 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>
Links
- Mähroboter_überwachen
- Husqvarna Cloud
- GEO-Portale der Länder
- GEO-Datenzentrums des Bundeamtes für Kartographie und Geodäsie, Koordinatenumrechnung
- Google Earth
- DOIF/uiTable
- DOIF/uiTable_Schnelleinstieg
- FHEM Tablet UI
- weblink
- FLOORPLAN
- Floorplan Installations-Leitfaden
- Dashboard