[Neues Modul] 74_AutomowerConnect, Husqvarnas OpenAPI

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

Vorheriges Thema - Nächstes Thema

Ellert

#75
Ab dem morgigen Update:

Das Modul wurde mit einer Websocketverbindung zur Husqvarna API ergänzt, damit werden Änderungen ereignisnah angezeigt.

Das Attribut mowerActivityToHighLight steht nicht mehr zur Verfügung. Eine Hervorhebung kann über das Attribut mapDesignAttributes eingestellt werden.
Das Attribut interval wird nicht mehr benötigt , da die Websocketverbindung Events mit Datenupdates sendet.
Das Reading status_TimestampOld wird nicht mehr aktualisiert und darf mit deletereading gelöscht werden. Das Reading status_TimestampDiff sollte ausreichend sein zur Beurteilung der letzten Aktualisierung.
Das Reading state zeigt den Zustand der Websocketverbindung an. Das ist durch DevIo vorgegeben.
Das neue Reading device_state übernimmt die Funktion von state, also auch die Triggerung von userReadings, usw.
Das neue Reading mower_wsEvent zeigt die vom Mäher gesendeten Events(status-event, positions-events, settings-events) an.
Das neue Reading mower_commandSend zeigt den letzten erfolgreich gesendeten Befehl an.
Die vorletzten API-Daten werden nicht mehr gespeichert.
Das Mähericon wird in die Hauptbewegungsrichtung (Nord, Süd, Ost, West) positioniert.

ACHTUNG: Möglicherweise funktioniert der bereits verwendete Application Key (client_id) nicht, es muss dann ein neuer Key erzeugt und verwendet werden, siehe https://developer.husqvarnagroup.cloud/apis/automower-connect-api#websocket

Nach einem fehlerfreien Update sollte einmal save config ? im Frontend durchgeführt werden damit die Löschungen gespeichert werden.[/i]
Browsercache löschen und die Webseite neu laden.

Depechem

Zitat von: Ellert am 23 Mai 2023, 17:09:28Ab dem morgigen Update:

Das Modul wurde mit einer Websocketverbindung zur Husqvarna API ergänzt, damit werden Änderungen ereignisnah angezeigt.

Das Attribut mowerActivityToHighLight steht nicht mehr zur Verfügung. Eine Hervorhebung kann über das Attribut mapDesignAttributes eingestellt werden.
Das Attribut interval wird nicht mehr benötigt , da die Websocketverbindung Events mit Datenupdates sendet.
Das Reading status_TimestampOld wird nicht mehr aktualisiert und darf mit deletereading gelöscht werden. Das Reading status_TimestampDiff sollte ausreichend sein zur Beurteilung der letzten Aktualisierung.
Das Reading state zeigt den Zustand der Websocketverbindung an. Das ist durch DevIo vorgegeben.
Das neue Reading device_state übernimmt die Funktion von state, also auch die Triggerung von userReadings, usw.
Das neue Reading mower_wsEvent zeigt die vom Mäher gesendeten Events(status-event, positions-events, settings-events) an.
Das neue Reading mower_commandSend zeigt den letzten erfolgreich gesendeten Befehl an.
Die vorletzten API-Daten werden nicht mehr gespeichert.
Das Mähericon wird in die Hauptbewegungsrichtung (Nord, Süd, Ost, West) positioniert.

ACHTUNG: Möglicherweise funktioniert der bereits verwendete Application Key (client_id) nicht, es muss dann ein neuer Key erzeugt und verwendet werden, siehe https://developer.husqvarnagroup.cloud/apis/automower-connect-api#websocket

Nach einem fehlerfreien Update sollte einmal save config ? im Frontend durchgeführt werden damit die Löschungen gespeichert werden.[/i]
Browsercache löschen und die Webseite neu laden.

Hallo Ellert,
Ich habe geupdatet. Auch einen neuen Key habe ich erstellt.
Trotzdem kommt immer folgende Fehlermeldung direkt bei öffnen des Moduls.

#FHEMWEB notification:
AutomowerConnectUpdateDetail ( 'RasenroboterAM405X', 'AutomowerConnect', './fhem/AutomowerConnect/RasenroboterAM405X/map', 951, 686, 539, 89, 'top', 65.5998735272603, [ '-', '' ], [ 696,217,605,246,586,161,609,144,647,303,633,282,656,293,641,287,716,226,709,217,667,275,580,266,546,224,482,103,601,107,750,116,746,178,745,108,727,198,760,157,715,124,596,93,609,240,664,271,609,106,554,160,657,164,542,93,573,182,637,295,643,298,639,297,634,267,603,211,587,83,529,122,562,102,583,247,581,181,658,93,608,99,586,212,631,204,608,129,558,139,623,269,620,214,533,93,649,137,647,95,659,167,554,138,602,117,574,260,548,109,541,122,562,123,660,219,548,203,522,127 ], [ 457,76,800,115,739,214,693,184,715,143,709,138,681,183,729,221,675,299,631,268,595,312,585,313,577,322,579,338,570,351,614,390,544,464,516,437,492,468,513,493,385,601,357,586,337,600,315,607,272,577,307,526,307,526,357,563,425,485,443,479,487,422,493,408,492,401,487,396,463,374,500,323,516,321,518,302,496,286,476,267,453,251,477,235,502,220,500,212,489,202,476,194,462,201,452,220,410,194,429,161,437,169,454,146,447,139,469,110,489,136,495,128,477,107,479,101,460,84 ], [ ], [ -951,686 ], [ -14842024,86964963,0,0,-475,343 ], [ -14842024,86964963 ] )
TypeError: null is not an object (evaluating 'div.getAttribute( 'data-'+ type + 'LineDash' ).split')

Und ich sehe nur die Karte aber weder Mäher, noch Fahrstrecke
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

Ellert

#77
Hast Du "Browsercache löschen und die Webseite neu laden." durchgeführt?

Da auch das Javascript erneuert wurde muss automowerconnect.js auch neu geladen werden. Wenn der Browsercache nicht gelöscht wird, dann wird ggf. die  alte Datei automowerconnect.js geladen. Das führt dann zu Fehlermeldungen.

Da die Farben der Pfade jetzt über das Attribut mapDesignAttributes eingestellt werden, kann im gesetzen Attribut etwas fehlen. Daher einmal das Attribut mit set <name> defaultDesignAttributesToAttribut neu setzen.

Ellert

Ab dem morgigen Update:

Die Statistik wurde nicht berechnet, behoben.
Beim Update der Karte werden nur noch Differenzdaten übermittelt.
Anzeige der täglichen Kollisionen zusätzlich im Reading statistics_numberOfCollisons (täglich/gesammt)
Ein Fehlerspeicher wurde eingebaut und ein Getter errorStack um ihn anzuzeigen

Der Browsercache muss gelöscht und die Webseite neu geladen werden, damit auch das erneuerte Javascript geladen wird.
Falls es dennoch zu Javascriptfehlern kommt, einmal das Attribut defaultDesignAttribues mit set <name> defaultDesignAttributesToAttribut neu setzen damit ggf. fehlende Attribute ergänzt werden.


isy

Moin Ellert,
bei mir funktioniert das Modul nach dem Update nicht mehr.

- Neuer API Key und neues Secret generiert
- Browser Cache gelöscht, andere Systeme (Linux...) genutzt. Alles gleich

Probleme / Meldungen im Log.
- Das wichtigste ist wohl der 403 Error
AutomowerConnect Shaun wsCb: failed with error: HTTP CODE 403
- Auch wird die Karte nicht mehr gefunden. Das lief bis eben, also mit der Vorversion.
AutomowerConnect Shaun readMap: file "" does not exist.
Das Device bleibt also
STATE disconnected
Ein Test im Terminal mit dem Link aus der Husqvarna Bereich "My Applications"
curl -X POST -d "grant_type=client_credentials&client_id= .......zeigt eine Menge Daten, keine FM.

Was kann ich noch tun?

VG Helmut

P.S. Nach Fhem restore geht wieder alles.
Ein Weg wird erst zu einem Weg, wenn man ihn geht

isy

Bin ein Stück weiter, ein erneutes Löschen des Caches (Windows 11/ Chrome) UND ein FHEM shutdown / restart führt zum connect des Automowers.

Erstaunlich! Man muss nicht alles verstehen, früher haben wir gesagt, manchmal helfen auch Räucherkerzen. -:)
Ein Weg wird erst zu einem Weg, wenn man ihn geht

isy

Hallo Ellert,
nach dem das Modul wieder läuft bei mir, habe ich mit den im Attr mapImageCoordinatesToRegister hinterlegten Koordinaten gespielt.
Grund: Die Anzeige des Mähpfades ist zu weit rechts.

Die Koordinaten sind recht lang (u.a. 51.28390226281099) und als erstes habe ich alle 4 verkürzt auf 51.283 (Rest analog).
Beim Anklicken des OK im Bearbeitungsfenster stürzt FHEM komplett ab.

Eingabe sudo systemctl status fhem im Terminal:

Mai 29 10:00:34 fhem systemd[1]: fhem.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Die verkürzten Koordinaten werden nicht gespeichert und ich kann FHEM wieder starten.

Kannst du das nachvollziehen?
Ein Weg wird erst zu einem Weg, wenn man ihn geht

Ellert

Wenn Du die Koordinaten auf 3 Nachkommastellen kürzt liegt die Genauigkeit im Bereich von 60 m und als Nebeneffekt erzeugst Du bei der Berechnung der Skalierungsfaktoren eine Division durch 0, das bringt FHEM zum Absturz.

Die Attribute mapImageCoordinatesToRegister, mapImageCoordinatesUTM, scaleToMeterXY müssen im Zusammenhang betrachtet werden.

Wenn die Koordinaten zur Registrierung (mapImageCoordinatesToRegister) geändert werden, dann muss mapImageCoordinatesUTM vorher gelöscht werden (ggf. auch scaleToMeterXY) und nach mapImageCoordinatesToRegister neu gesetzt werden. Das steht auch in der Befehlsreferenz
ZitatDas Attribut muss nach dem Attribut mapImageCoordinatesToRegister gesetzt werden.

Wenn der Mäherpfad verschoben ist, kann es an den Koordinaten aus dem GPS liegen, das ist wohl vom Mähertyp abhängig. Bei meinem liegt der Pfad auch verschoben, aber jedesmal anders.

Wenn der Pfad systematisch verschoben ist, dann sind die Nachkommastellen im eher in der Nähe der 6. Nachkommastelle synchron zu verschieben.

isy

Ein Weg wird erst zu einem Weg, wenn man ihn geht

Depechem

also ich habe nun das heutige Update gezogen, auch da funktioniert weder die Ansicht des Mähers, noch Fahrstrecke in der Karte.
Seit dem neuen Update bringt das Reading:
state: disconnecteddas neue Reading:
device_state: connected
Das angeblich neue Reading:
mower_wsEvent taucht bei mir gar nicht auf.

Folgendes habe ich gemacht:
- FHEM mehrfach rebootet
- Browsercache mehrfach gelöscht
- Webseite neu geladen
- Application Key bei Husqvarna komplett gelöscht und neu angelgt
- Modul komplett gelöscht und neu angelegt


brachte alles nix....
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

Ellert

#85
Zitatstate: disconnected
Ist erstmal nicht ungewöhnlich, das Reading wird durch DevIo verwaltet und ohne Event aktualisiert, daher wird im Frontend die Aktualisierung nicht angezeigt.
Zitatdevice_state: connected
Wenn die Detailansicht geöffnet wird bevor device_state auf connected aktualisiert wird, dann ist keine Karte zu sehen.

Nach einer Aktualisierung von device_state auf connected sollte nach neu laden der Detailseite die Karte mit der Ladestation angezeigt werden.

Du hast nicht erwähnt, ob Du das Attribut mapDesignAttributes auf die Standartwerte gesetzt hast. Hast Du das gemacht? Wenn nicht wird die Ladestation vermutlich nicht angezeigt.

Zitatmower_wsEvent
Erscheint erst, wenn über Websocket ein Event angekommen ist. Wenn der Mäher in der Ladestation steht kann das schon mal 840 s dauern. Das Mähericon wird erst angezeigt, wenn über Websocket ein Positionsevent angekommen ist, das kann, wenn in der LS, auch solange dauern.

Der Mäherpfad wird erst angezeigt, wenn mindestenns zwei Positionen gesendet wurden, das kann dann doppelt solange dauern.

Ist die Websocketverbindung tatsächlich disconnected geblieben?

Da würde ich gern den Logauszug mit verbose 4 sehen.

Poste bitte den Revisionsstand der Module aus den Internals VERSION und LIBRARY_VERSION und vom Javascript automowerconnect.js die Version, um das Update zu verifizieren.

Depechem

#86
Zitat von: Ellert am 29 Mai 2023, 17:57:56
Zitatmower_wsEvent
Erscheint erst, wenn über Websocket ein Event angekommen ist. Wenn der Mäher in der Ladestation steht kann das schon mal 840 s dauern. Das Mähericon wird erst angezeigt, wenn über Websocket ein Positionsevent angekommen ist, das kann, wenn in der LS, auch solange dauern.

Der Mäherpfad wird erst angezeigt, wenn mindestenns zwei Positionen gesendet wurden, das kann dann doppelt solange dauern.
es sind bereits Stunden vergangen und ich habe den Mäher extra raus geschickt....


Zitat von: Ellert am 29 Mai 2023, 17:57:56Du hast nicht erwähnt, ob Du das Attribut mapDesignAttributes auf die Standartwerte gesetzt hast. Hast Du das gemacht? Wenn nicht wird die Ladestation vermutlich nicht angezeigt.
ja habe ich

Zitat von: Ellert am 29 Mai 2023, 17:57:56Nach einer Aktualisierung von device_state auf connected sollte nach neu laden der Detailseite die Karte mit der Ladestation angezeigt werden.
Karte mit Ladestation sehe ich ja auch, nur weder Mäher noch Mäherspuren

Zitat von: Ellert am 29 Mai 2023, 17:57:56Ist die Websocketverbindung tatsächlich disconnected geblieben?

ja immernoch

Zitat von: Ellert am 29 Mai 2023, 17:57:56Poste bitte den Revisionsstand der Module aus den Internals VERSION und LIBRARY_VERSION und vom Javascript automowerconnect.js die Version, um das Update zu verifizieren.


#   DEF        f629cc55-51f7-4667-be68-5ca82afe6bc0
#   DeviceName wss:ws.openapi.husqvarna.dev:443/v1
#   FUUID      6459448b-f33f-b0b0-e365-983f2776b380ff35
#   Host       ws.openapi.husqvarna.dev
#   LIBRARY_VERSION 27625 2023-05-29 01:26:46
#   MODEL      Husqvarna Automower� 405X
#   NAME       RasenroboterAM405X
#   NEXT_OPEN  1685384600.93983
#   NR         1889
#   PARTIAL   
#   Port       443/v1
#   SSL        1
#   STATE      disconnected
#   TYPE       AutomowerConnect
#   VERSION    27625 2023-05-29 01:26:46
#   eventCount 30
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

Depechem

Zitat von: Ellert am 29 Mai 2023, 17:57:56Da würde ich gern den Logauszug mit verbose 4 sehen.

2023.05.29 20:19:31.708 4: AutomowerConnect RasenroboterAM405X Get: called with ?
2023.05.29 20:20:19.523 4: IP: ws.openapi.husqvarna.dev -> 52.49.240.63
2023.05.29 20:20:19.724 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:20:19.725 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
2023.05.29 20:20:29.135 4: AutomowerConnect RasenroboterAM405X Get: called with InternalData
2023.05.29 20:21:20.366 4: IP: ws.openapi.husqvarna.dev -> 52.18.161.199
2023.05.29 20:21:20.603 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:21:20.604 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
2023.05.29 20:22:20.630 4: IP: ws.openapi.husqvarna.dev -> 3.248.74.26
2023.05.29 20:22:20.938 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:22:20.939 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
2023.05.29 20:23:21.434 4: IP: ws.openapi.husqvarna.dev -> 34.250.104.128
2023.05.29 20:23:21.672 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:23:21.673 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
2023.05.29 20:24:22.076 4: IP: ws.openapi.husqvarna.dev -> 34.250.104.128
2023.05.29 20:24:22.302 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:24:22.303 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
2023.05.29 20:25:22.420 4: IP: ws.openapi.husqvarna.dev -> 54.77.195.62
2023.05.29 20:25:22.818 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:25:22.819 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
2023.05.29 20:26:22.942 4: IP: ws.openapi.husqvarna.dev -> 52.209.97.137
2023.05.29 20:26:23.330 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:26:23.331 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
2023.05.29 20:27:23.577 4: IP: ws.openapi.husqvarna.dev -> 54.77.195.62
2023.05.29 20:27:23.901 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:27:23.902 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
2023.05.29 20:28:23.943 4: IP: ws.openapi.husqvarna.dev -> 34.250.104.128
2023.05.29 20:28:24.533 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:28:24.534 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
2023.05.29 20:29:25.342 4: IP: ws.openapi.husqvarna.dev -> 52.18.161.199
2023.05.29 20:29:25.572 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:29:25.573 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
2023.05.29 20:30:25.992 4: IP: ws.openapi.husqvarna.dev -> 3.248.74.26
2023.05.29 20:30:26.190 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:30:26.191 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
2023.05.29 20:31:03.344 4: AutomowerConnect RasenroboterAM405X Get: called with ?
2023.05.29 20:31:26.291 4: IP: ws.openapi.husqvarna.dev -> 52.18.161.199
2023.05.29 20:31:26.515 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:31:26.516 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
2023.05.29 20:32:26.543 4: IP: ws.openapi.husqvarna.dev -> 52.209.97.137
2023.05.29 20:32:26.803 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:32:26.804 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
2023.05.29 20:33:27.662 4: IP: ws.openapi.husqvarna.dev -> 52.49.240.63
2023.05.29 20:33:27.895 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:33:27.896 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
2023.05.29 20:34:28.018 4: IP: ws.openapi.husqvarna.dev -> 52.49.240.63
2023.05.29 20:34:28.237 4: https://ws.openapi.husqvarna.dev:443/v1: HTTP response code 403
2023.05.29 20:34:28.238 2: AutomowerConnect RasenroboterAM405X wsCb: failed with error: HTTP CODE 403
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

Ellert

Vielleicht hilft set <name> getNewAccessToken.


ZitatHTTP response code 403
Sieht für mich nach diesem Problem aus(https://developer.husqvarnagroup.cloud/apis/automower-connect-api#websocket):
ZitatIf you get 403 when using Websocket even if the API call works. Try to renew the API key that should do the trick. If you still get 403 check that you get the correct scope when creating the access token (iam:read amc:api). If you don't have the correct scope you need to connect you API key to the Automower API to get the correct scope.

Stimmt der Scope (get InternalData)?

Wenn device_state auf connected steht, dann trift "If you get 403 when using Websocket even if the API call works." zu.

Und dann müssten diese Vorschläge zum Erfolg führen:
ZitatTry to renew the API key that should do the trick. If you still get 403 check that you get the correct scope when creating the access token (iam:read amc:api). If you don't have the correct scope you need to connect you API key to the Automower API to get the correct scope.

renew the API key https://developer.husqvarnagroup.cloud/docs/get-started

Wichtig auch:
Zitatconnect you API key to the Automower API to get the correct scope

Gibt es doppelte Passkey eines Devices in /opt/fhem/FHEM/FhemUtils/uniqueID, nur zur Sicherheit kontrollieren.



Ellert

Mit dem morgigen Update:

Verhindert Division durch 0 beim Attribut mapImageCoordinatesToRegister, wenn die Koordinatendifferenz 0 ergibt.
Verzögerte Websocketöffnung.
Erzwingen eines Access Token wenn ein Client Secret gesetzt wird.