Neues Modul: 74_HusqvarnaAutomower.pm

Begonnen von krannich, 27 Januar 2018, 12:12:01

Vorheriges Thema - Nächstes Thema

vitolinker

Hallo grntbn,

wie wäre es mit dieser Logdefinition?
define FileLog_Henry FileLog ./log/Henry-%Y.log Henry:batteryPercent:.*|Henry:mower_activity:.*| Henry:mower_state:.*|Henry:state:.*
zu ändern in
define FileLog_Henry FileLog ./log/Henry-%Y.log Henry:batteryPercent:.*|Henry:mower_activity:.*| Henry:mower_state:.*|Henry:.*connected.*

VG

grntbn

Hallo vitolinker,

danke für Deinen Vorschlag, das ist aber leider nicht was ich suche. Nach "connect" zu suchen macht aus meiner Sicht keinen Sinn.

Ich brauche für mein gefiltertes Log den Verbindungsstatus zur Husqvarna Cloud, im Reading des Automowers als "state" bezeichnet. Bei einer aufrechten Verbindung wird dieser mit dem Wert "connected" angezeigt. Wenn keine aufrechte Verbindung besteht, wird dort einer der weiter unten angeführten Werte stehen.

Also brauche ich die Wertebezeichnug/ den Variablennamen (wie auch immer man das nennt) der Verbindung um den jeweiligen Zustand loggen und danach auswerten zu können.

Im Code des Moduls "74_HusqvarnaAutomower.pm" selbst habe ich inzwischen folgende Zustände für den Verbindungsstatus gefunden:

initialized => initialisiert
authenticated => authentifiziert
disabled => deaktiviert
connected => verbunden


Bei meinen Versuchen habe ich auch noch Folgendes festgestellt:

Mit dem nachstehenden Eintrag in der fhem.cfg

define FileLog_Henry_Test FileLog ./log/Henry_Test-%Y.log Henry:state:.*|Henry:version:.*|Henry:provider:.*| Henry:token:.*|Henry:user_id:.*|Henry:expires:.*

erhalte ich folgende Logeinträge

Filter für Log         Ergebnis im Log
-----------------------------------------
Henry:state:.*         Nein
Henry:version:.* Nein
Henry:provider:.* Ja
Henry:token:.*         Ja
Henry:user_id:.* Ja
Henry:expires:.* Ja


Auch eine Ergänzung der einzelnen Wertebenennungen im Logfilter von z.B. "Henry:state:.*" auf "Henry: HusqvarnaAutomower_state:.*", wie im Modulcode teilweise verwendet, hat zu keinem Ergebnis geführt.

Leider reichen meine Kenntnisse nicht aus um aus dem Modulcode die richtige Bezeichnung für den Verbindungsstatus herauslesen zu können. Kann mir bitte jemand dabei helfen?

ThomasAV

#242
Bei mir läuft das Modul manchmal in einen Error rein, wenn ich dem Mäher Befehle sende.
Konkret hab ich mir den Spass erlaubt, dass bei geöffneter Terrassentür, der Mäher stehen bleiben soll.
Funktioniert auch wunderbar.

Aber manchmal bleibt das Modul stehen "Error". Manchmal nach dem 2ten mal, manchmal erst nach dem gefühlten 100sten Mal.
Ich habe noch kein System erkannt, wann sich das Verhalten zeigt.


Ist es möglich, dass das etwas damit zu tun hat, dass er zufällig meinen Befehl zeitgleich sendet, während er gerade versucht die Daten von der cloud zu holen? Bzw. was müsste man ändern, damit man das verhindert?
Jetzt habe ich ca. 100mal versucht das zu provozieren, aber ich bringe keinen error zusammen.
Dann versuche ich es einfach ein einziges mal und error.

Ich selbst kann aus dem Logfile nicht interpretieren, was da genau vorsich geht. Zumindest sehe ich einen time-out, aber ich verstehe auch anhand vom modul-quellcode nicht von wo dieser kommt.
Kann nur aus dem code rausinterpretieren, dass es nichts zur Verhinderung vom gleichzeitigen Befehl-senden und Status-empfangen mit Intervall gibt.

Wie kann man z.B. unmittelbar vorm Senden eines Befehles das Intervall automatisch neu setzen? Dann würde erst wieder nach Ablauf des Intervalls abgefragt und es wäre der Weg immer frei um Befehl senden.

Logfile:


ThomasAV

#243
Fragen über Fragen ...

Quellcode vom Modul:
HttpUtils_NonblockingGet({
        url           => APIURL . "mowers/". $mower_id . "/control/" . $cmdURL,
        timeout       => 5,
        hash          => $hash,
        method        => "POST",
        header        => $header,
      data       => $json,
        callback      => \&HusqvarnaAutomower_CMDResponse,
    }); 
   
}

Ich verstehe bei der Verwendung von "HttpUtils_NonblockingGet" den timeout-Parameter nicht.

Bei HttpUtils_BlockingGet benötigt man das timeout. Aber was bewirkt es bei NONblockingGet?
Laut dem hier gibt es den Parameter nicht.
https://wiki.fhem.de/wiki/HttpUtils#HttpUtils_NonblockingGet


Entsteht dadurch genau mein Problem? Ich sende einen Befehl, das Modul ist aber gerade beschäftigt Daten von der cloud zu holen.
Das dauert länger als die 5 Sekunden und error.

PS: Ohne dass ich es besser weiß ...
ich habe die timeouts von 5 auf 10 sekunden rauf und probiert. einmal kam der error noch. dann einfach auf 15 und jetzt bringe ich den error nicht mehr zusammen.
Scheinbar dauert die Rückmeldung unter Umständen länger als 5 Sekunden.

Und durch ständiges senden von befehle dürfte mich fhusqvarna für Zeit X aus der cloud ausgesperrt haben ;)

update: Mit dem timeout hat es bisher geklappt.
update PS: Es ist der mäher selbst, der die Befehle abgeblockt hat. Er hat sich getrennt und verlangt somit vor Ort zu gehen und mit bluetooth zu verbinden, dann funktioniert wieder alles.

ThomasAV

#244
Falls es interessiert ... Eine Feststellung:

Wenn der 435x AWD in einer Art Tiefschlaf ist, reagiert er nicht auf den Befehl "stop".
Weiss nicht, ob das ein 435X Spezifikum ist oder ob das generell so ist.

Ich gebe deshalb den Befehl "stop" (bei geöffneter Terrassentür) nur dann wenn der Mäher nicht im Tiefschlaf ist, er also entweder mäht ODER die Ladestation verlässt ODER zur Ladestation fährt.
Mit dem und die parallele Änderung vom timeout habe ich kein Problem mehr.


blaess

Leider bringe ich das Module nicht zum laufen.

Wenn ich Fhem starte, steht unter "Readings" state = initialized.
Wenn ich dann "set myMower update" aufrufen, dann kommt folgendes:
"Readings" state = disconnected

und im Log steht:
2019.09.08 13:51:24 3: myMower: set called with update
2019.09.08 13:51:24 3: myMower: set update
2019.09.08 13:51:24 2: LOGIN TOKEN MISSING OR EXPIRED

Ich habe schon einmal alles deinstalliert und neu installiert, ohne Erfolg.
Hat jemand ein Tipp?

ThomasAV

#246
Kommen denn überhaupt Daten an - also nach dem ersten Start vom Modul?


An der Stelle weiß ich nicht, ob du überhaupt login, Passwort, ... gesetzt hast - also ob das Modul überhaupt in der Lage ist, sich mit husqvarna zu verbinden und Daten zu holen.
Denn wenn das Modul funktioniert, sollte unter "readings" state = connected stehen und nicht nur initialized. Und connecten kann sich das Modul nur, wenn es Benutzername und Kennwort kennt. Vielleicht vertippt?

stobor

Hallo,
ich würde gern den Status abfragen:
Meine Bewegungsmelder sollen nur reagieren/schalten, wenn der Rasenmäher gerade nicht aktiv ist. Außerdem soll man per FHEM den Mäher in die Ladestation schicken können.

Zum Testen habe ich mir ein einfaches Szenario aufgebaut:
define myMower HusqvarnaAutomower
attr myMower username xxx
attr myMower password yyy
attr myMower room Test
attr myMower group Husqvarna

define stopMower dummy
attr stopMower fm_type onbutton
attr stopMower room Test
attr stopMower webCmd on

define chkMowerStop notify stopMower:on {\
  fhem "set myMower start3h 1";;\
  fhem "set stopMower off";;\
}

(natürlich kommt später ein set myMower parkTimer 1 anstatt des start3h.)

Nach dem start3h 1 habe ich mir die Statusübersicht in FHEM angesehen. Da sieht nichts danach aus, was mir anzeigt, dass der Mäher unterwegs ist:
Readings
batteryPercent 100 2019-09-24 21:27:55
expires 2019-10-04 21:27:01 2019-09-24 21:27:02
mower_activity geparkt 2019-09-24 21:27:55
mower_battery 100% 2019-09-24 21:27:55
mower_commandStatus OK 2019-09-24 21:27:55
mower_cuttingMode Hauptbereich 2019-09-24 21:27:55
mower_mode automatisch 2019-09-24 21:27:55
mower_nextStart Morgen um 10:00 2019-09-24 21:27:55
mower_nextStartSource COUNTDOWN_TIMER 2019-09-24 21:27:55
mower_restrictedReason PARK_OVERRIDE 2019-09-24 21:27:55
mower_state inaktiv 2019-09-24 21:27:55
state connected 2019-09-24 21:27:02


Auch ein set myMower update 1 hat nichts an der Anzeige geändert.

Immerhin funktioniert set myMower start3h 1 und set myMower parkTimer 1.

Aber wie kann ich den Status ermitteln?
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-73-generic x86_64))  mit CUL V3.2 (Firmware 1.57 CUL868) für FS20 und CUL V3.4 (Firmware 1.57 CUL868) für HM + Arduino Mega
FHEM Revision: 27642
FS20-Schalter und Dimmer
HM Fensterkontakte, Heizungsthermostate, Temperatursensoren

Gunther

Ich brauche mal Eure Hilfe.
Habe gerade ein Winterangebot für einen nagelneuen Automower 430x.
Das soll das 2017er Modell sein. Antwort auf meine Frage: inkl. Autoconnect Modul und GPS.
Im Netz finde ich Informationen, dass Autoconnect erst ab dem 2018 Modell serienmäßig drin war.

Wisst Ihr da was?
Was benötige ich für die Einbindung in FHEM und worauf muss ich achten?
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Gunther

So, eben in Betrieb genommen und die Readings kommen.
Nun lädt er gerade (53%) und wenn ich ihn versuche für 3 h zu starten macht er nichts.
Was mache ich falsch?

So schaut es im Eventmonitor aus:
2020-03-21 15:14:32 HusqvarnaAutomower au_otto start3h
2020-03-21 15:14:32 HusqvarnaAutomower au_otto mower_commandStatus: OK
2020-03-21 15:18:01 HusqvarnaAutomower au_otto mower_battery: 57%
2020-03-21 15:18:01 HusqvarnaAutomower au_otto batteryPercent: 57
2020-03-21 15:18:01 HusqvarnaAutomower au_otto mower_activity: lädt
2020-03-21 15:18:01 HusqvarnaAutomower au_otto mower_state: aktiv
2020-03-21 15:18:01 HusqvarnaAutomower au_otto mower_mode: automatisch
2020-03-21 15:18:01 HusqvarnaAutomower au_otto mower_nextStart: Heute um 15:55
2020-03-21 15:18:01 HusqvarnaAutomower au_otto mower_nextStartSource: Automower lädt
2020-03-21 15:18:01 HusqvarnaAutomower au_otto mower_restrictedReason: undefiniert
2020-03-21 15:18:01 HusqvarnaAutomower au_otto mower_cuttingMode: Hauptbereich
2020-03-21 15:18:01 HusqvarnaAutomower au_otto mower_lastLatitude: 51.9749966666667
2020-03-21 15:18:01 HusqvarnaAutomower au_otto mower_lastLongitude: 8.75282
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

vitolinker

Du machst gar nichts falsch. Dolly grast erst, wenn sie 100% geladen ist :)

Gunther

Vielen Dank!
Das war es!

Liegt das nun am Modul?
Ich hatte das Problem, dass der Akku leider trotz längerem Verbleib in der Ladestation auf 99% stand. Damit kann ich Otto dann nicht losschicken.

Wenn es am FHEM-Modul liegt: besteht die Möglichkeit über ein Attribut die Min-Ladung für Aktionen einzubauen?

FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

vitolinker

Meines Wissens liegt es nicht an FHEM, auch per App startet er erst bei vollem Akku.
VG

blaess

Im Moment habe ich alle paar Minuten folgende Meldung:
2020.03.24 10:09:24 2: error while requesting https://amc-api.dss.husqvarnagroup.net/app/v1/mowers/140601610-151100270/control/park - read from https://amc-api.dss.husqvarnagroup.net:443 timed out
Ich sende alle 10min ein Befehl, also 6 pro Stunde.

Das Modul hat dann ein Error und ich muss neu starten. Bin ich der Einzige? Hat jemand eine Lösung. Gibt es Beschränkungen im API?

Wscheff

Zitat von: blaess am 24 März 2020, 10:45:54
Im Moment habe ich alle paar Minuten folgende Meldung:
2020.03.24 10:09:24 2: error while requesting https://amc-api.dss.husqvarnagroup.net/app/v1/mowers/140601610-151100270/control/park - read from https://amc-api.dss.husqvarnagroup.net:443 timed out
Ich sende alle 10min ein Befehl, also 6 pro Stunde.

Das Modul hat dann ein Error und ich muss neu starten. Bin ich der Einzige? Hat jemand eine Lösung. Gibt es Beschränkungen im API?

Hallo. Ich habe sporadisch das gleiche Problem. Der Mower ist noch nicht viel gelaufen, bisher erst 3x aufgetreten.
Aber ich vermute auch, dass zuviele Anfragen in einer Zeitspanne zum error führen.
Bei mir heisst der Fehler:
error while requesting https://amc-api.dss.husqvarnagroup.net/app/v1/mowers/yyyyy-xxxxx/control/start/override/period - read from https://amc-api.dss.husqvarnagroup.net:443 timed out

Ich sende alle 300s einen Update. ggf kam der im zu engen Zeitfenster?

Frage in die Runde: wie kann man den error zurücksetzen und einen Neustart verhindern, so dass neuer Token, expires etc gesetzt werden?