Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS19000935 - Husqvarna Automower Connect API

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #91
    Normal sind doch gar keine Abfragen notwendig. Es gibt doch einen Websocket. https://developer.husqvarnagroup.clo...API#/websocket
    Mfg Micha
    Qualifizierte und richtige Antworten gibts nur von Leuten, die während des Neustarts des HS Zeit für einen Post haben!

    Kommentar


      #92
      vento66 ich nehme mal an wegen folgendem ist das über das Websocket nicht möglich?

      NOTE: Currently WebSocket does not support sending control commands to the mower. For this you need to use the REST API.

      Kommentar


        #93
        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


          #94
          Vielleicht kann sich das ja MrIcemanLE mal anschauen? Bei PHP etc. bin ich leider raus.....

          Kommentar


            #95
            Das kann ich mir mal anschauen. Sieht auf den ersten Blick machbar aus. Muss aber mal schauen, wann ich dazu komme. Melde mich mit Fortschritten ;-)
            Gruß
            Stefan

            Kommentar


              #96
              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

              Kommentar


                #97
                Zitat von MrIcemanLE Beitrag anzeigen
                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.
                Wow, vielen Dank für die Überarbeitung

                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


                  #98
                  Zitat von panzaeron Beitrag anzeigen
                  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.
                  Das habe ich nicht dazu geschrieben. Für die Websocket-Verbindung habe ich eine fertige Lösung benutzt. In der Hilfe steht dazu:

                  Install:
                  1. "cd /usr/local/edomi/main/include/php"
                  2. "composer require textalk/websocket"

                  Zitat von panzaeron Beitrag anzeigen
                  Du kannst auch statt logic_setOutput($id,$ausgang,$value) den Befehl logic_setOutputQueued($id,$ausgang,$value) verwenden
                  Werde ich beim nächsten Release mit aufnehmen.
                  Edit: Sollte das für alle Ausgänge gelten? Oder vielleicht nur für den API-Ausgang?
                  Zuletzt geändert von MrIcemanLE; 09.06.2022, 12:43. Grund: Ergänzung
                  Gruß
                  Stefan

                  Kommentar


                    #99
                    Zitat von MrIcemanLE Beitrag anzeigen
                    Edit: Sollte das für alle Ausgänge gelten? Oder vielleicht nur für den API-Ausgang?
                    Bei meinen dauerlaufenden EXE-LBS nutze ich nur noch logic_getInputsQueued($id[,$fallback[,$sync]]) und logic_setOutput($id,$ausgang,$value).
                    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 anzeigen
                          Könnte man den Inhalt vielleicht direkt in den LBS integrieren?
                          Ich mag sowas auch nicht, aber leider ist das bei so speziellen Sachen immer so eine Sache. Man nimmt entweder ein fertige Klasse/Bibliothek o.ä. oder man setzt sich hin und programmiert das ganze selber. Je nach Komplexität, Größe der Klasse und verfügbarer Freizeit muss man da halt abwägen. Hier habe ich mich zunächst für das Fertigprodukt entscheiden, da PHP das so out-of-the-box nicht mitbringt. Wenn sich jemand findet, der das ganze in den LBS mit reinbekommt, immer her damit. Einfach den Baustein modifizieren und rüber schicken ;-)

                          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 anzeigen
                          Das Problem ist das "autoload.php" nicht gefunden wird
                          Du musst die beiden Befehle aus der Hilfe im Terminal ausführen. Sonst wird es leider nicht funktionieren. Der LBS funktioniert jetzt ausschließlich auf Websocketbasis für die Status- und Positionsmeldungen.

                          Die Klassen sind von hier: https://github.com/Textalk/websocket-php
                          Gruß
                          Stefan

                          Kommentar


                            Zitat von MrIcemanLE Beitrag anzeigen
                            Install:
                            1. "cd /usr/local/edomi/main/include/php"
                            2. "composer require textalk/websocket"
                            OK, ich musste bei mir noch composer nachinstallieren mit
                            Code:
                            sudo yum install composer
                            Der Fehler ist jetzt weg, aber an A14 kommt nur eine Meldung "{"ready":true,"connectionId":"TedIEeHyjoECGtb="}" , beschäftige ich mich morgen genauer mit.
                            Ich danke Dir für die Umstellung und deinen Einsatz.

                            Kommentar


                              Zitat von panzaeron Beitrag anzeigen
                              OK, ich musste bei mir noch composer nachinstallieren
                              Das werde ich noch in der Hilfe ergänzen

                              Zitat von panzaeron Beitrag anzeigen
                              aber an A14 kommt nur eine Meldung
                              Die Meldung kommt immer mal. Das "Problem" am Websocket ist jetzt, dass die Meldungen von Husqvarna kommen und immer mal anders sein können. Ich habe in meinen Logs jetzt immer mal einen fehlerhafte JSON-String. Dem muss ich mal noch auf die Schliche kommen.

                              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

                                Lädt...
                                X