Normal sind doch gar keine Abfragen notwendig. Es gibt doch einen Websocket. https://developer.husqvarnagroup.clo...API#/websocket
Ankündigung
Einklappen
Keine Ankündigung bisher.
LBS19000935 - Husqvarna Automower Connect API
Einklappen
X
-
Versteh ich nicht.... Über Websockets kommen die Stati, so ganz ohne Abfragen. Das Senden von Befehlen geht dann über die Rest API. Der geänderte Status kommt wieder über den Websocket. Das machen die homeconnect LBS genau so. Und mehr als 10000 Befehle wird ja wohl keiner im Monat an den Rasenmäher senden. OK, der Initiale Status muss auch darüber abgerufen werden.Mfg Micha
Qualifizierte und richtige Antworten gibts nur von Leuten, die während des Neustarts des HS Zeit für einen Post haben!
Kommentar
-
Hallo Zusammen,
ich denke ich habe eine lauffähige Websocket-Version (v0.4) hinbekommen. Der LBS läuft bei mir erst seit zwei Tagen. Kann also noch nicht viel über das Verhalten im Fall eines Fehlers beim Automower sagen. Ende des Monats wird sich zeigen, ob es wieder zu diesen Zugriffsproblemen bei der API kommt.
Der ganze LBS basiert jetzt auf der Vorlage von gaert "EXEC-Script als Dämon". Das heißt, dass der LBS mit EDOMI per gesetztem Eingang E1 automatisch gestartet wird und dann in einer Endlosschleife mit einem Intervall von 50ms läuft. Das heißt die "Zykluszeit" aus dem alten LBS entfällt.
Der LBS lauscht am WebSocket und reagiert bei eingehenden Nachrichten. Diese werden von der API in drei Typen eingeteilt: "Status-event", "Position-event" und "Settings-event". Die aktuelle Version reagiert auf die beiden ersten Events und aktualisiert die zugehörigen Ausgänge. Der Ausgang API-Output enthält immer den letzten empfangenen Event oder ggf. Fehlermeldungen. Daher wird der LBS von panzaeron wahrscheinlich so direkt erstmal nicht funktionieren. Der JSON-String vom Websocket sieht auch etwas anders aus. Die Übersetzung der verschiedenen Codes (Status, Modus, Aktivität und Fehler) habe ich versucht mit einzubauen. Ich kann aber auch noch Änderungen vornehmen, damit es für panzaeron nicht so aufwändig wird den LBS zu korrigieren. Vielleicht ein Output-Slot für jeden Eventtyp oder so.
Die Fehlerwerte für den LBS muss ich mal noch dokumentieren. Die Idee hinter dem Ausgang (A16) ist, dass man nur bei 0 (= fehlerfrei) nachfolgende Aktionen auslösen würde um keine fehlerhaften Informationen auf der Visu oder im Archiv zu haben.
Die Befehle an den Mäher sind nach wie vor noch nicht implementiert. Hier muss ich noch ran, damit man auch über Edomi entsprechende Befehle senden kann.
Die Ausgänge musste ich leider neu Anordnen, damit es etwas übersichtlicher wird. Die Message vom Websocket enthält auch noch informationen über den nächsten Startzeitpunkt oder das geplante Ende der Mähzeit. Das werde ich auch noch mit ausgeben. Allerdings werden sich dann die Ausgänge nochmal verschieben.
Gruß
Stefan
Gruß
Stefan
- Likes 1
Kommentar
-
Zitat von MrIcemanLE Beitrag anzeigenDaher wird der LBS von panzaeron wahrscheinlich so direkt erstmal nicht funktionieren. Der JSON-String vom Websocket sieht auch etwas anders aus. Die Übersetzung der verschiedenen Codes (Status, Modus, Aktivität und Fehler) habe ich versucht mit einzubauen. Ich kann aber auch noch Änderungen vornehmen, damit es für panzaeron nicht so aufwändig wird den LBS zu korrigieren. Vielleicht ein Output-Slot für jeden Eventtyp oder so.
Für meinen LBS ist es am einfachsten, wenn alle Meldungen direkt an A15 ausgegeben werden. Du kannst auch statt logic_setOutput($id,$ausgang,$value) den Befehl logic_setOutputQueued($id,$ausgang,$value) verwenden, dann gehen auch bei einem kurzen hintereinander Ausgeben von Werten, keine Meldungen verloren.
Momentan bekomme ich allerdings noch eine Fehlermeldung in der Zeile 3 (require(dirname(__FILE__) . "/../../../../main/include/php/vendor/autoload.php")weil autoload.php nicht gefunden wird.
Kommentar
-
Zitat von panzaeron Beitrag anzeigenMomentan bekomme ich allerdings noch eine Fehlermeldung in der Zeile 3 (require(dirname(__FILE__) . "/../../../../main/include/php/vendor/autoload.php")weil autoload.php nicht gefunden wird.
Install:
1. "cd /usr/local/edomi/main/include/php"
2. "composer require textalk/websocket"
Zitat von panzaeron Beitrag anzeigenDu kannst auch statt logic_setOutput($id,$ausgang,$value) den Befehl logic_setOutputQueued($id,$ausgang,$value) verwenden
Edit: Sollte das für alle Ausgänge gelten? Oder vielleicht nur für den API-Ausgang?Gruß
Stefan
Kommentar
-
Zitat von MrIcemanLE Beitrag anzeigenEdit: Sollte das für alle Ausgänge gelten? Oder vielleicht nur für den API-Ausgang?
Notwendig ist es, meine ich zumindest, nur dort wo sich Ein- oder Ausgänge schnell ändern können...
Das Problem ist das "autoload.php" nicht gefunden wird, wo kommt dies Skript den her? Könnte man den Inhalt vielleicht direkt in den LBS integrieren?
Kommentar
-
Das ist ne externe Klasse,die wiederum wieder andere Abhängigkeiten hat. Diese werden mittels composer nachinstalliert. Ich bin kein Freund von sowas, manchmal geht es aber nicht anders.Mfg Micha
Qualifizierte und richtige Antworten gibts nur von Leuten, die während des Neustarts des HS Zeit für einen Post haben!
Kommentar
-
MrIcemanLE super und danke für die schnelle Überarbeitung des LBS....
hab ihn gerade mal installiert und warte morgen mal ab wie er funktioniert
Kommentar
-
Zitat von panzaeron Beitrag anzeigenKönnte man den Inhalt vielleicht direkt in den LBS integrieren?
Ich habe auch immer so meine Bedenken bei solchen LBS, aber irgendwann habe ich mich von einem Vanilla EDOMI verabschiedet und akzeptiert, dass es sinnvoll ist für bestimmte Probleme auf fertige Lösungen zu setzen.
Es ist auch etwas mehr als eine Klasse, sonst hätte ich die mit reinkopiert. Bei der Basis-Klasse für die API-Abfrage habe ich das auch so gemacht.
Zitat von panzaeron Beitrag anzeigenDas Problem ist das "autoload.php" nicht gefunden wird
Die Klassen sind von hier: https://github.com/Textalk/websocket-phpGruß
Stefan
Kommentar
-
Zitat von MrIcemanLE Beitrag anzeigenInstall:
1. "cd /usr/local/edomi/main/include/php"
2. "composer require textalk/websocket"Code:sudo yum install composer
Ich danke Dir für die Umstellung und deinen Einsatz.
Kommentar
-
Zitat von panzaeron Beitrag anzeigenOK, ich musste bei mir noch composer nachinstallieren
Zitat von panzaeron Beitrag anzeigenaber an A14 kommt nur eine Meldung
Vielleicht kannst du mal einen Level 8 Log mitlaufen lassen, dann sehen wir besser, wo das Problem liegen könnte.Gruß
Stefan
Kommentar
-
Ich habe jetzt nochmal genauer in den Logs geschaut. Es vergehen schon ein paar Minuten, bis die erste Message über den Websocket kommt.2022-06-10 10:48:02 948734 3744 err LBS19000935 [v0.4.1]: Husqvarna Automower Connect Daemon started 2022-06-10 10:48:02 975284 3744 debug LBS19000935 [v0.4.1]: new husqvarna_api 2022-06-10 10:48:09 519610 3744 debug LBS19000935 [v0.4.1]: login husqvarna api successful 2022-06-10 10:48:09 523272 3744 debug LBS19000935 [v0.4.1]: connecting websocket client to server 2022-06-10 10:48:10 289490 3744 debug LBS19000935 [v0.4.1]: E2 refresh --> update username 2022-06-10 10:48:10 309051 3744 debug LBS19000935 [v0.4.1]: E3 refresh --> update password 2022-06-10 10:48:10 316756 3744 debug LBS19000935 [v0.4.1]: E4 refresh --> update apikey 2022-06-10 10:48:10 317626 3744 debug LBS19000935 [v0.4.1]: E5 refresh --> update mowerid 2022-06-10 10:48:10 318372 3744 debug LBS19000935 [v0.4.1]: E10 refresh --> update LogLevel 2022-06-10 10:48:10 745249 3744 debug LBS19000935 [v0.4.1]: Websocket-Message: {"ready":true,"connectionId":"Tf3DrfLZjoECGvw=" } 2022-06-10 10:48:10 747205 3744 debug LBS19000935 [v0.4.1]: String to be decoded: 2022-06-10 10:48:10 747356 3744 debug LBS19000935 [v0.4.1]: value of var => {"ready":true,"connectionId":"Tf3DrfLZjoECGvw=" } 2022-06-10 10:48:10 748172 3744 debug LBS19000935 [v0.4.1]: begin websocket => setting output 2022-06-10 10:48:10 749145 3744 notice LBS19000935 [v0.4.1]: Skipping data - property id not found 2022-06-10 10:48:10 750471 3744 notice LBS19000935 [v0.4.1]: ================ ARRAY/OBJECT START ================ 2022-06-10 10:48:10 750632 3744 notice LBS19000935 [v0.4.1]: stdClass::__set_state(array([LF] 'ready' => true,[LF] 'connectionId' => 'Tf3DrfLZjoECGvw=',[LF])) 2022-06-10 10:48:10 750693 3744 notice LBS19000935 [v0.4.1]: ================ ARRAY/OBJECT END ================ 2022-06-10 10:50:40 917382 3744 debug LBS19000935 [v0.4.1]: Websocket: Sent ping to stay connected! 2022-06-10 10:53:11 088941 3744 debug LBS19000935 [v0.4.1]: Websocket: Sent ping to stay connected! 2022-06-10 10:55:41 245220 3744 debug LBS19000935 [v0.4.1]: Websocket: Sent ping to stay connected! 2022-06-10 10:58:11 408946 3744 debug LBS19000935 [v0.4.1]: Websocket: Sent ping to stay connected! 2022-06-10 11:00:41 569622 3744 debug LBS19000935 [v0.4.1]: Websocket: Sent ping to stay connected! 2022-06-10 11:00:46 474386 3744 debug LBS19000935 [v0.4.1]: Websocket-Message: {"id":"b622a7fa-c485-453d-9059-ea242ab3d222","type":"status-event","attributes":{"battery":{"batteryPercent":2 4},"mower":{"mode":"MAIN_AREA","activity":"MOWING " ,"state":"IN_OPERATION","errorCode":0,"errorCod eTi mestamp":0},"planner":{"nextStartTimestamp":0,"ove rride":{"action":null},"restrictedReason":"NOT_APP LICABLE"},"metadata":{"connected":true,"statusTime stamp":1654851646372}}} 2022-06-10 11:00:46 481421 3744 debug LBS19000935 [v0.4.1]: String to be decoded: 2022-06-10 11:00:46 481911 3744 debug LBS19000935 [v0.4.1]: value of var => {"id":"b622a7fa-c485-453d-9059-ea242ab3d222","type":"status-event","attributes":{"battery":{"batteryPercent":2 4},"mower":{"mode":"MAIN_AREA","activity":"MOWING " ,"state":"IN_OPERATION","errorCode":0,"errorCod eTi mestamp":0},"planner":{"nextStartTimestamp":0,"ove rride":{"action":null},"restrictedReason":"NOT_APP LICABLE"},"metadata":{"connected":true,"statusTime stamp":1654851646372}}} 2022-06-10 11:00:46 485658 3744 debug LBS19000935 [v0.4.1]: begin websocket => setting output 2022-06-10 11:00:46 502401 3744 debug LBS19000935 [v0.4.1]: processing finished Gruß
Stefan
Kommentar
Kommentar