[Neues Modul] 74_AutomowerConnect, Husqvarnas OpenAPI

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

Vorheriges Thema - Nächstes Thema

Ellert

Begründung für die verliebenen Readings

api_MowerFound: In der Liste aller gefundenen Mäher ist die Zuordnung der Mähernummer zum Mähernamen angegeben. Das ist zur Identifizierung notwendig, wenn mehrere Mäher vorhanden sind.
api_token_expires: Das Token ist 24h gültig, hier kann man auf einen Blick erkennen, ob es regelmäßig aktualisiert wird.
batteryPercent: Alle battriebetriebenen Geräte haben irgend ein Batteriereading.
mower_activity, mower_mode, mower_state, planner_overrideAction planner_restrictedReason: Diese Readings begründen den aktuellen Zustand des Mähers und zeigen im Zusammenspiel eine Abweichung vom Sollzustand.
mower_commandStatus: Hier ist zusehen, ob ein Befehl erfolgreich gesendet wurde.
mower_errorCode, mower_errorCodeTimestamp, mower_errorDescription: Diese Readings markieren eine Abweichung vom normalen Betrieb in menschenlesbarer Form und sind die Grundlage zur Fehlerbehebung.
settings_cuttingHeight, settings_headlight: Sie zeigen den Istzustand als Entscheidungsgrundlage für Änderungen.
state: Dieses Readingzeigt den Zustand des Arbeitsfusses im FHEM-Gerät an und dient als Auslöser für AutomowerConnectDevice Geräte.
statistics_newGeoDataSets: Ist notwendig um ggf. die Intervalldauer begründet zu korrigieren.
statistics_numberOfCollisions: Anhaltspunkt zur evtl. Korrektur des Begrenzungkabel.
status_Timestamp, status_TimestampDiff, status_TimestampOld: Ist in der Betrachtung zusammen mit newGeoDataSets sinnvoll.
status_connected: Damit ist erkennbar ob der Mäher mit der Cloud verbunden ist, und liefert eine mögliche Fehlerursache.
system_name:  Mit diesem Reading ist die Identifizierung des Mähers im menschenlesbarer Form möglich.


Noch ein Beispiel für zum Erstellen vermisster Readings: lastLatitude lastLongitude

attr <name> userReadings lastLatitude:connected {$defs{$name}->{helper}{mower}{attributes}{positions}[0]{latitude}},\
lastLongitude:connected {$defs{$name}->{helper}{mower}{attributes}{positions}[0]{longitude}}



Ab morgen steht ein Update zur Verfügung.

Die gemeinsam genutzten Subroutinen von AutommowerConnect und AutommowerConnectDevice wurden in ein Bibliotheksmodul verlagert.
Das macht die Module kleiner und vereinfacht die Pflege.
Ein paar Kleinikeiten wurden bereinigt, die sich bei der letzten Überarbeitung eingeschlichen haben.

Bei bei Update ist ein FHEM Restart Pflicht.

shutdown restart

Ellert

Mit dem Update, das morgen zur Verfügung steht gibt es ein paar Neuerungen.

Die Fehlermeldung und Fehlerort wird auf der Karte angezeigt.
Es kann eine Hintergrundfarbe angegeben werden.
Die Farben und die Art der Linien können geändert werden.
Es werden für alle Aktivitäten die Pfade angezeigt, wie folgt gruppiert:

- MOWING
- CHARGING|PARKED_IN_CS
- Der letzte zum Fehler gehörende Pfad mit Markierung.
- Zusammengefasst alle anderen Aktivitäten UNKNOWN|NOT_APPLICABLE|GOING_HOME|LEAVING|STOPPED_IN_GARDEN

dinkel75


outhouse

Hallo Ellert

Aktuell betreibe ich einen Husqvarna 315 mit dem Robonect-Modul und einer Rolltor-Garage (Relais). Das Modul sendet beim Start des Mowers frühzeitig den Befehl, das Tor zu öffnen (bzw. verzögert den Start des Mowers um ein paar wenige Sekunden) und sobald der Mower parkiert hat, es wieder zu schliessen.

Nun möchte ich den 315 mit dem 415x ersetzen und diesen ohne das Zusatzmodul von Robonect (da AutomowerConnect bereits enthalten ist) betreiben.

Damit beim Start des Mowers das Rolltor rechtzeitig öffnet (Tor benötigt ca. 4 Sekungen bis es ganz offen ist), müsste ich wohl - sofort nach dem Start (mittels DOIF etc.) - eine Pause einlegen, den Öffnungsbefehl via notify ans Tor senden und dann den Mower weiter arbeiten zu lassen.

Eine andere Lösung wäre, wenn man das Schleifensignal (Begrenzung) auslesen könnte. Im ECO-Modus schaltet dieses ca. 4 Sekunden vor dem Start des Mowers ein (also ideale Zeit, um das Öffnen des Tores zu veranlassen).

Frage. Kann mit deinem Modul der Start des Schleifensignals ausgelesen werden?

Gruss

Chris
Raspberry 4 B mit Raspberry Pi OS und FHEM-Image 6.3 von fhem.de
Cul CC 1101 V4 als CUL_HM
Cul V3.4 + V3.4 als RFR
enocean-pi

Ellert

Die API bietet das Schleifensignal nicht an, daher kann das Modul das Schleifensignal nicht auslesen.

Man kann aber den im Mower hinterlegten Zeitplan auslesen und könne dann das Tor vor dem Start öffnen und beim Wechsel zu PARKED_IN_CS oder CHARGING schliessen.

Wenn der Start automatisiert über das Modul erfolgt, könnte das Tor automatisiert entsprechend vorher geöffnet werden.

4 Sekunden zu pausieren ist eine ziemlich sportliche Anforderung.

Die Reaktion des Mowers auf einen vom Modul gesendeten Befehl liegt nach meinen Beobachtungen eher im Bereich von Minuten

outhouse

Zitat von: Ellert am 26 März 2023, 00:50:57Wenn der Start automatisiert über das Modul erfolgt, könnte das Tor automatisiert entsprechend vorher geöffnet werden.

Hallo Ellert

Danke für die Ausführungen

Chris
Raspberry 4 B mit Raspberry Pi OS und FHEM-Image 6.3 von fhem.de
Cul CC 1101 V4 als CUL_HM
Cul V3.4 + V3.4 als RFR
enocean-pi

outhouse

Ellert

Ich habe inzwischen das Modul installiert und mit dem neuen 415X verbunden. Der "state" lautet auf connected.

Frage 1: Die API sendet nicht bei jedem Statuswechsel (mähen, Heimweg, parkieren etc.) die neue "mower_activity" an das Modul?

Frage 2: Zum Beispiel beim Befehl "set cuttingHight" erhalte ich beim Reading "mower_commandStatus" den Code "ERROR statuscode 400"

Ist da irgendetwas (noch) nicht richtig verbunden?

Gruss

Chris
Raspberry 4 B mit Raspberry Pi OS und FHEM-Image 6.3 von fhem.de
Cul CC 1101 V4 als CUL_HM
Cul V3.4 + V3.4 als RFR
enocean-pi

Ellert

Zu 1: Ja, das ist richtig, sie wird alle 10 min abgefragt, da wird schon mal eine Aktivität verschluckt, s. Commandref: Limit Automower Connect API
Zu 2: Kann sein, im Log sollte mehr stehen.
Zu Unnummeriert: Wenn ich dazu etwas Qualifiziertes sagen soll, dann solltest Du mehr Infos liefern, also das Übliche, Logs, List und was sonst noch aussagekräftig ist.

outhouse

Zitat von: Ellert am 26 März 2023, 00:50:57Zu 1: Ja, das ist richtig, sie wird alle 10 min abgefragt, da wird schon mal eine Aktivität verschluckt, s. Commandref: Limit Automower Connect API

Daher die "sportlichen" 4 Sekunden im Beitrag #19 :)

Wenn ich also den Mower mit dem Modul starte, erhalte ich den neuen Status unter "mower_activity" (im schlechtesten Fall) nach ca. 10 Minuten. Da frage ich mich natürlich, was genau der Nutzen des Moduls - ausser dem Auslesen der Daten - sein soll.

Auf der App des Handys wird der jeweilige neue Status innert wenigen Sekunden angezeigt. Heisst das nicht, dass die "Automower Connect API" den Status aktiv versendet (Sorry, bin völliger Laie was EDV betrifft).

Gruss

Chris
Raspberry 4 B mit Raspberry Pi OS und FHEM-Image 6.3 von fhem.de
Cul CC 1101 V4 als CUL_HM
Cul V3.4 + V3.4 als RFR
enocean-pi

Ellert

Die App greift auf eine nicht öffentliche API zu, die z.T. gehackt wurde und vom Modul HusqvarnaAutomower genutzt wird.

Zitat von: outhouse am 07 April 2023, 09:33:44Daher die "sportlichen" 4 Sekunden im Beitrag #19 :)

Nein, Befehle werden unabhängig vom Abfrageintervall gesendet. Es sind die Laufzeiten/Antwortzeiten auf dem Weg von FHEM über LAN/WLAN, Internet, Husqvarna Cloud Server, über Mobilfunk zum Mäher und die Verarbeitung im Mäher und zurück.

Im Reading "mower_commandStatus" wird die Antwort aus Sicht des Cloudservers dargestellt (Befehl O.k./Fehler, Befehl im Befehlsstack des Servers). Ob der Befehl im Mower angekommen ist oder gar ausgeführt wurde ist aus der Antwort nicht ersichtlich.


Ellert

Mein Mähroboter ist jetzt im Wirkbetrieb, dabei habe ich beobachtet das beim Mähen etwa alle 30 s und beim Parken/Laden etwa alle 42 min ein Geodatensatz erzeugt wird.

Damit kann man die benötigten Datensätze  für die Darstellung der Mähstrecke abschätzen, um sie im Attribut numberOfWayPointsToDisplay anzugeben, default wird 5000 sein.

Reismann

Hallo zusammen,

irgendwie werde ich aus den Farben der Pfade auf der Karte nicht schlau. Ich sehe Pfade in Rot, Grün und Grau. Rot scheint der aktuelle Pfad zu sein. Wofür steht dann Grün und Grau?

Ellert

Rot für Aktivität MOWING
Grau für CHARGING/PARKED_IN_CS
Grün für Alle anderen AKtivitäten, ausser im Fehlerfall
Magenta für NOT_APPLICABLE bei Fehler (der Weg im Intervall in dem der Fehler auftritt).

Grau und Grün sind als experimentell anzusehen, da der Informationsgehalt gegen null geht.

Ein Pfad wird nicht angezeigt, wenn die Zuordnung nicht eindeutig ist, also beim Wechsel einer Aktivität im Intervall, daher können Lücken in der Darstellung entstehen.

Letztlich soll der Pfad beim Mähen ein Bild von Gleichmässigkeit der Abdeckung ergeben, um ggf. Schwachstellen aufzudecken oder Fernstartpunkte festzulegen. Die Genauigkeit ist allerdings nicht sehr hoch, da nicht für jeden Richtungswechsel ein Geodatensatz erzeugt wird.

Es kann also sein, dass auf der Karte Lücken dargestellt werden, die auf dem Rasen nicht vorhanden sind.

Reismann

Gibt es eine einfache Möglichkeit die mowingAreaLimits in eine definiertze Richtung zu verschieben? Ich hatte die wie in der Anleitung beschrieben aus Google Earth raus gezogen. Das passt auch von Größe und Form soweit ganz gut. Ich müsste ledigloich die ganze Karte um ein klein wenig nach links und nach oben verschieben, damit die eingezeichneten Pfade auch innerhalb der Grenzen liegen. Wäre ideal, wenn es ein Attribut mit X und Y Offset geben würde, wo man die Korrektur einfach eintragen kann. Da ich ein sehr komplexes Grundstück habe, will ich ungern ~50 Koordinaten neu mit einem Offset aufnehmen.

Ellert

Wegen der mäßigen Genauigkeit der GPS-Daten aus dem Mäher. reicht es vielleicht die Karte zu verschieben, also mapImageCoordinatesToRegister anzupassen, falls keine Gründstücksgrenze eingezeichnet ist, die passt.

Zum Verschieben der Mähbereichsgrenze würde ich eine Tabellenkalkulation verwenden. Die Koordinaten kopieren und  daneben mit einer Formel den Offset addieren und die berechneten Werte zurück ins Attribut kopieren oder im CSV-Format exportieren und das kopieren.. Eventuell noch den Dezimaltrenner/Feldtrenner mit suchen und ersetzen anpassen.

So könnte man auch eine Streckung/Dehnung der Grenze realisieren.