Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. Test Adapter Husqvarna Automower v0.3.x

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Test Adapter Husqvarna Automower v0.3.x

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      ArnoD @lustig29 last edited by

      @lustig29 sagte in Test Adapter Husqvarna Automower v0.3.x:

      @ste_glei

      Das war es. Super.

      Jetzt hab ich nur 2 Fragen.

      Wie macht ihr das mit der Regenerfassung. Und würde jemand vielleicht seine Vis, passend zum Adapter zur Verfügung stellen?

      Ich habe jetzt mal eine View für den neuen Adapter Husqvarna-Automower 0.2.0 erstellt:
      72bbd072-9c52-4afa-a6ce-b14c14bc3553-grafik.png

      Den Adapter habe ich um die statistics Objekte ID bei mir erweitert, also nicht wundern, wenn bei euch nicht alle Werte verfügbar sind. Ich habe auch das Script erweitert, so das ich eine Startzeit und Endzeit eingeben kann und das Script die entsprechenden Werte bei duration und start einträgt.
      Es müssen natürlich auch alle Pfade bei euch angepasst werden, da ich den Application Key natürlich durch xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ersetzt habe.
      Hier die View zum Importieren:
      Husqvarna_VIS_View.js

      L 1 Reply Last reply Reply Quote 0
      • L
        lustig29 @ArnoD last edited by lustig29

        @arnod Super View. Meinst du, du könntest dein Skript mit den Einstellungen auch noch zur Verfügung stellen?
        Und wie geht das mit der Statistic Id?

        A 1 Reply Last reply Reply Quote 0
        • A
          ArnoD @lustig29 last edited by

          @lustig29 sagte in Test Adapter Husqvarna Automower v0.3.x:

          @arnod Super View. Meinst du, du könntest dein Skript mit den Einstellungen auch noch zur Verfügung stellen?

          Kein Problem, hier das passende Script:
          Husqvarna_Script.js

          Und wie geht das mit der Statistic Id?

          Dazu musst du in der main.js vom Adapter createObjects(mowerData) die fehlenden Objekte eintragen:

          await this.setObjectNotExistsAsync(mowerData[i].id + '.system.serialNumber', {
          						type: 'state',
          						common: {
          							name: 'Device serialnumber',
          							desc: 'Device serialnumber',
          							type: 'number', // acc. API it should be 'string'
          							role: 'info.serialnumber',
          							read: true,
          							write: false
          						},
          						native: {}
          					});
          					
          					// create channel "statistics"
          					await this.setObjectNotExistsAsync(mowerData[i].id + '.statistics', {
          						type: 'channel',
          						common: {
          							name: 'statistics',
          							desc: 'statistics',
          						},
          						native: {}
          					});
          					await this.setObjectNotExistsAsync(mowerData[i].id + '.statistics.cuttingBladeUsageTime', {
          						type: 'value',
          						common: {
          							name: 'Nutzungsdauer der Schneidklinge',
          							desc: 'Nutzungsdauer der Schneidklinge',
          							type: 'number',
          							role: 'value',
          							min: 0,
          							unit: 'ms',
          							read: true,
          							write: false
          						},
          						native: {}
          					});
          					await this.setObjectNotExistsAsync(mowerData[i].id + '.statistics.numberOfChargingCycles', {
          						type: 'value',
          						common: {
          							name: 'Anzahl der Ladezyklen',
          							desc: 'Anzahl der Ladezyklen',
          							type: 'number',
          							role: 'value',
          							min: 0,
          							read: true,
          							write: false
          						},
          						native: {}
          					});
          					await this.setObjectNotExistsAsync(mowerData[i].id + '.statistics.numberOfCollisions', {
          						type: 'value',
          						common: {
          							name: 'Anzahl der Kollisionen',
          							desc: 'Anzahl der Kollisionen',
          							type: 'number',
          							role: 'value',
          							min: 0,
          							read: true,
          							write: false
          						},
          						native: {}
          					});
          					await this.setObjectNotExistsAsync(mowerData[i].id + '.statistics.totalChargingTime', {
          						type: 'value',
          						common: {
          							name: 'Gesamtladezeit',
          							desc: 'Gesamtladezeit',
          							type: 'number',
          							role: 'value',
          							min: 0,
          							unit: 'ms',
          							read: true,
          							write: false
          						},
          						native: {}
          					});
          					await this.setObjectNotExistsAsync(mowerData[i].id + '.statistics.totalCuttingTime', {
          						type: 'value',
          						common: {
          							name: 'Gesamt Maehzeit',
          							desc: 'Gesamt Maehzeit',
          							type: 'number',
          							role: 'value',
          							min: 0,
          							unit: 'ms',
          							read: true,
          							write: false
          						},
          						native: {}
          					});
          					await this.setObjectNotExistsAsync(mowerData[i].id + '.statistics.totalRunningTime', {
          						type: 'value',
          						common: {
          							name: 'Gesamtlaufzeit',
          							desc: 'Gesamtlaufzeit',
          							type: 'number',
          							role: 'value',
          							min: 0,
          							unit: 'ms',
          							read: true,
          							write: false
          						},
          						native: {}
          					});
          					await this.setObjectNotExistsAsync(mowerData[i].id + '.statistics.totalSearchingTime', {
          						type: 'value',
          						common: {
          							name: 'Gesamtsuchzeit',
          							desc: 'Gesamtsuchzeit',
          							type: 'number',
          							role: 'value',
          							min: 0,
          							unit: 'ms',
          							read: true,
          							write: false
          						},
          						native: {}
          					});
          

          und in fillObjects(mowerData)die Werte zuweisen:

                                  this.setStateAsync(mowerData[i].id + '.statistics.cuttingBladeUsageTime', {val: mowerData[i].attributes.statistics.cuttingBladeUsageTime, ack: true});
          			this.setStateAsync(mowerData[i].id + '.statistics.numberOfChargingCycles', {val: mowerData[i].attributes.statistics.numberOfChargingCycles, ack: true});
          			this.setStateAsync(mowerData[i].id + '.statistics.numberOfCollisions', {val: mowerData[i].attributes.statistics.numberOfCollisions, ack: true});
          			this.setStateAsync(mowerData[i].id + '.statistics.totalChargingTime', {val: mowerData[i].attributes.statistics.totalChargingTime, ack: true});
          			this.setStateAsync(mowerData[i].id + '.statistics.totalCuttingTime', {val: mowerData[i].attributes.statistics.totalCuttingTime, ack: true});
          			this.setStateAsync(mowerData[i].id + '.statistics.totalRunningTime', {val: mowerData[i].attributes.statistics.totalRunningTime, ack: true});
          			this.setStateAsync(mowerData[i].id + '.statistics.totalSearchingTime', {val: mowerData[i].attributes.statistics.totalSearchingTime, ack: true});
          

          Dann nur noch in async connectToWS()

          if ('statistics' in jsonMessage.attributes) {
          	this.setStateAsync(jsonMessage.id + '.statistics.cuttingBladeUsageTime', {val: jsonMessage.attributes.statistics.cuttingBladeUsageTime, ack: true});
          	this.setStateAsync(jsonMessage.id + '.statistics.numberOfChargingCycles', {val: jsonMessage.attributes.statistics.numberOfChargingCycles, ack: true});
          	this.setStateAsync(jsonMessage.id + '.statistics.numberOfCollisions', {val: jsonMessage.attributes.statistics.numberOfCollisions, ack: true});
          	this.setStateAsync(jsonMessage.id + '.statistics.totalChargingTime', {val: jsonMessage.attributes.statistics.totalChargingTime, ack: true});
          	this.setStateAsync(jsonMessage.id + '.statistics.totalCuttingTime', {val: jsonMessage.attributes.statistics.totalCuttingTime, ack: true});
          	this.setStateAsync(jsonMessage.id + '.statistics.totalRunningTime', {val: jsonMessage.attributes.statistics.totalRunningTime, ack: true});
          	this.setStateAsync(jsonMessage.id + '.statistics.totalSearchingTime', {val: jsonMessage.attributes.statistics.totalSearchingTime, ack: true});
          	// this.log.debug(`[wss.on - message]: jsonMessage.attributes.statistics: ${JSON.stringify(jsonMessage.attributes.statistics)}`);
          }
          

          Danach beim Adapter noch den Dateiupload ausführen und dann sollten die Statistics Werte vorhanden sein.
          Du solltest dich aber einigermaßen auskennen, um das zu ändern oder ein Issue auf Github aufmachen und den Entwickler bitten die Statistics Werte mit aufzunehmen.

          L bergjet 2 Replies Last reply Reply Quote 0
          • L
            lustig29 @ArnoD last edited by

            @arnod Oh, vielen Dank. Das mit den Skript mache ich noch selber. Den Rest über lasse ich dann lieber den Profis. 😉

            opossum 1 Reply Last reply Reply Quote 0
            • opossum
              opossum @lustig29 last edited by opossum

              Moin, @ArnoD,

              so ganz habe ich das noch nicht gerafft. Habe die main.js gepatched, auch den Dateiupload gemacht. Natürlich den Adapter vorher gestoppt und die originale main.js gesichert. Es wurden im Objektbaum auch die Objekte angelegt.

              a598562b-28b3-4cc2-9f58-e7331614ce7b-image.png

              Leider werden die Datenpunkte noch nicht befüllt. Bin da noch auf der Suche, warum da nichts geschrieben wird. Kannst Du mir sagen, was ich da falsch mache?

              Vielen Dank für die Bereitstellung Deiner VIS.

              A bergjet 2 Replies Last reply Reply Quote 0
              • A
                ArnoD @opossum last edited by

                @opossum

                Ich habe gestern ein Issue auf GitHub eröffnet, mit der Bitte das zu integrieren.
                ice987987 hat das heute bereits umgesetzt und ich habe es auch schon getestet und es funktioniert.

                Einzige Änderung zu meiner Version, die State werden nicht mehr vom Adapter automatisch in h umgerechnet, sondern in s angezeigt.
                Das kann man aber in VIS Editor mit Bindings z.B so lösen:

                {v:husqvarna-automower.0.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.statistics.totalSearchingTime;(v/3600).toFixed(0)} h
                

                Einfach heute über Github den Adapter aktualisieren. Es wird noch keine neue Version angezeigt.

                opossum 1 Reply Last reply Reply Quote 1
                • opossum
                  opossum @ArnoD last edited by

                  Hallo, @arnod,
                  danke, dass Du Dich gekümmert hast. Funktioniert jetzt mit meinem Husqvarna 315X ohne Probleme.

                  K K 2 Replies Last reply Reply Quote 0
                  • K
                    Kanumouse @opossum last edited by

                    Hi,
                    ich habe noch zwei Fragen zum Adapter, vielleicht kann mir die jemand beantworten.

                    1. Durch was wird der Datenpunkt "CuttingBladeUsageTime" getriggert?
                    2. Ich habe einen 315X, dort lassen sich meines Wissens nach nur zwei Startzeiten pro Tag programmieren. Bei den Objekten finde ich aber die Möglichkeit 4 Startzeiten pro Tage festzulegen (unter calender). Ist das für andere Modelle gedacht oder habe ich da einen Denkfehler?
                    1 Reply Last reply Reply Quote 0
                    • K
                      Kaschi68 last edited by

                      Hallo Zusammen, ich habe bei Husqvarna nach der neuen Anleitung einen Acc erstellt und auch den Application Key und den Application Secret bekommen. Der Adapter füllt auch die ganzen Objekte mit Daten nach einem Neustart. Und das ist auch mein Problem. Alle Daten werden nur nach Neustart aktualisiert. Das ist natürlich nicht so toll wenn ich den Status vom Mower brauche.

                      Vielleicht habe ich auch bei dem Einrichten des Developer Acc einen Fehler gemacht…..
                      Aktuell habe ich bei Husqvarna folgende API Daten.
                      curl -X Post -d „……….. ergibt auch eine Antwort ohne Fehler.

                      Was kann ich tun das sich meine Objekte stetig aktualisieren ?

                      Vielen Dank und Gruß

                      47D6192B-43D7-4B4F-AE12-E1849567CA86.jpeg

                      Nach Neustart Folgendes im Protokoll

                      9D52B431-2933-4821-9BDC-5737D4923D20.jpeg

                      Thomas Braun 1 Reply Last reply Reply Quote 0
                      • Thomas Braun
                        Thomas Braun Most Active @Kaschi68 last edited by

                        @kaschi68

                        Ich würde ja aktuelle Versionen fahren.
                        nodejs16 / js-controller 4.

                        K 1 Reply Last reply Reply Quote 0
                        • bergjet
                          bergjet @ArnoD last edited by

                          @arnod sagte in Test Adapter Husqvarna Automower v0.3.x:

                          Kein Problem, hier das passende Script:

                          //***************************************************************************************************
                          //++++++++++++++++++++++++++++++++++++++++  USER ANPASSUNGEN ++++++++++++++++++++++++++++++++++++++++
                          
                          const instanz = '0_userdata.0.';
                          const PfadEbene1 = 'Husqvarna.';
                          const PfadEbene2 = ['Statistik.', 'Zeiten.', 'Allgemein.'];
                          const Mover_ID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
                          
                          //---------------------------------------------------------------------------------------------------
                          //++++++++++++++++++++++++++++++++++++++ ENDE USER ANPASSUNGEN ++++++++++++++++++++++++++++++++++++++
                          //---------------------------------------------------------------------------------------------------
                          

                          Mover_ID ist klar.
                          Aber müssen die Datenpunkte Statistik, Zeiten, Allgemein mit irgendwas übereinstimmen?
                          Diese werden ja vom Script angelegt.

                          A 1 Reply Last reply Reply Quote 0
                          • bergjet
                            bergjet @opossum last edited by

                            @opossum sagte in Test Adapter Husqvarna Automower v0.3.x:

                            Leider werden die Datenpunkte noch nicht befüllt

                            Bei mir auch nicht. Was hast du gemacht, dass es nun geht?

                            opossum 1 Reply Last reply Reply Quote 0
                            • A
                              ArnoD @bergjet last edited by ArnoD

                              @bergjet sagte in Test Adapter Husqvarna Automower v0.3.x:

                              Aber müssen die Datenpunkte Statistik, Zeiten, Allgemein mit irgendwas übereinstimmen?
                              Diese werden ja vom Script angelegt.

                              Nein, diese werden automatisch angelegt und befüllt.
                              Wurden bei dir die einzelnen Objekt ID`s vom Script angelegt?
                              Was wird nicht befüllt?

                              bergjet 1 Reply Last reply Reply Quote 0
                              • K
                                Kaschi68 @Thomas Braun last edited by

                                @thomas-braun

                                Alles erledigt, aber Werte ändern sich nur bei Neustart des Adapters. Selbst wenn der Mower unterwegs ist ändert sich nichts. Developer Acc hat ice987 für mich geprüft. Der ist iO angelegt und verknüpft.

                                Es handelt sich bei den Mower um den AM 415X mit neuster Firmware.

                                Im App werden die Daten ständig aktualisiert, im Adapter nur bei Neustart des Adapters.

                                js-controller ist jetzt 4.0.23 und node bei 16.

                                G 1 Reply Last reply Reply Quote 0
                                • opossum
                                  opossum @bergjet last edited by

                                  Hallo, @bergjet,
                                  ich hatte mit dem alten Adapter getestet. Habe dann erst gerafft, dass man einen neuen nehmen muss. Mit dem bekam ich auch den Connect hin. Aber das Problem mit den Statistikdaten habe ich auch.

                                  Boronsbruder 1 Reply Last reply Reply Quote 0
                                  • Boronsbruder
                                    Boronsbruder @opossum last edited by Boronsbruder

                                    @opossum @Kaschi68
                                    Das liegt daran, dass es 2 verschiedene Arten gibt, wie die Daten übertragen werden:

                                    1. Der Websocket:
                                      Hier wird eine Verbindung aufgebaut und er der Husqvarna-Server sendet die Paket mit den Daten an den Adapter.
                                      Daten wie z.B. die "Totals" sind hier nicht enthalten.
                                    2. Die Api:
                                      Die Daten müssen vom Adapter gehohlt werden und werden nicht geliefert.
                                      Hier sind die Daten wie die Totals enthalten, AAABER die Anzahl der möglichen Abrufe ist beschränkt.
                                    Limits
                                    
                                    The following limitations currently apply to the Automower® Connect API:
                                    
                                        Max 1 request per second and appKey.
                                        Max 10 000 request per month and appKey.
                                    
                                    Any additional requests above these limits will be throttled.
                                    

                                    Im Adapter von @ice987 werden, meines Wissens nach, die Daten beim Start per API abgerufen und dann mit den Daten, die der Websocket liefert, aktualisiert.

                                    Eine Möglichkeit wäre, dass @ice987 eine regelmäßige API-Abfrage einbaut. Die muss aber zeitlich beschränkt sein, da sie sonst zu einer Drosselung führt.

                                    Am besten auf GitHub eine Anfrage auf Erweiterung stellen?

                                    1 Reply Last reply Reply Quote 2
                                    • bergjet
                                      bergjet @ArnoD last edited by

                                      @arnod sagte in Test Adapter Husqvarna Automower v0.3.x:

                                      Was wird nicht befüllt?

                                      Schnitthöhe und Licht haben bei mir einen anderen Datenpunkt. Habe ich korrigiert.

                                      Parken für 30 Minuten. Starten für 120 Minuten. Woher kommen die die Daten für 30 und 120 Minuten?
                                      Im Button ist hier nichts eingetragen, bzw. wo kann man die Zeit ändern?

                                      A 1 Reply Last reply Reply Quote 0
                                      • K
                                        Kaschi68 @opossum last edited by

                                        Ich glaube meine Probleme liegen am WebSocket (Tipp von ice)
                                        Als Adapter läuft bei mir Web-Server und socketio. Ich habe versucht Web-Socket zum laufen zu bringen, aber VIS kackt dann ab.
                                        Also es wäre Klasse, wenn jemand bei dem der Husqvarna Adapter problemlos Daten erhält, mir bitte mal die Konstellation Web-Server mit socketio oder Web-Server mit Web-Socket und dazu die default Einstellungen (web-socket erzwingen, autenifizierung, Verschlüsselung....) mitteilen könnte.
                                        Wie schon mehrfach erwähnt kann ich mit meinem Husq-Adapter Befehle senden, den Status bekomme ich aber nur beim Neustart des Adapters zurück.

                                        Vielen Dank,schönen Abend und Gruß

                                        Boronsbruder 1 Reply Last reply Reply Quote 0
                                        • Boronsbruder
                                          Boronsbruder @Kaschi68 last edited by Boronsbruder

                                          @kaschi68
                                          Also, hier sind meine Einstellung für websocket und socketio, aber ich habe nicht den Adapter, sondern eine Fusion aus dem alten und neuen Adapter als reines Skript am Laufen.

                                          socket io
                                          d8dd5b5b-c9b6-4033-b5e5-44f381dc0a73-grafik.png

                                          websocket
                                          0e138828-a75b-458b-83a4-3dc0d287decc-grafik.png

                                          Die IP Adressen sind identisch
                                          Die Einstellungen sind nicht auf Sicherheit optimiert, da das System nicht von Aussen erreichbar ist...

                                          Wenn jemand Optimierungen hat, bin ich natürlich offen. Man lernt ja nie aus 😉

                                          K 1 Reply Last reply Reply Quote 1
                                          • K
                                            Kaschi68 @Boronsbruder last edited by

                                            @boronsbruder
                                            Vielen Dank, könntest Du vielleicht deinen Script einstellen. mir fehlen bei dem Adapter von ice die Statusmeldungen wenn er fährt. Befehle kann ich senden.

                                            Danke für Deine Mühe

                                            Boronsbruder 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            486
                                            Online

                                            31.7k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            automower husqvarna
                                            72
                                            435
                                            79349
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo