Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Test Adapter Husqvarna Automower v0.3.x

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Test Adapter Husqvarna Automower v0.3.x

Scheduled Pinned Locked Moved Tester
husqvarnaautomower
439 Posts 73 Posters 104.1k Views 62 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Q Qlink

    @TomBo1969 @reutli @Boronsbruder

    Hat von euch jemand die Regenerkennung für den Mower in Blockly umgesetzt ?
    Falls ja, könntet ihr euer Blockly teilen ?

    Danke.

    Beste Grüße

    R Offline
    R Offline
    reutli
    wrote on last edited by
    #295

    @qlink

    Ich habe noch keine Regenerkennung drin. Braucht's ja auch nicht - es regnet ja nicht 😁

    BITTE BEACHTET DOCH DAS: https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge
    iobroker in Debian-VM auf Proxmox Server (Ryzen 7 / 32GB / 1TB NVMe SSD) als Master - mehrere Raspberry Pis (3+4) als Slaves. InfluxDB V2 und Grafana auf LXC.

    *Wer freundlich ist, dem wird freundlich geholfen *

    1 Reply Last reply
    0
    • R reutli

      @tombo1969
      Das habe ich so nicht! Dann würde ich einen issue in Github beim Adapter aufmachen (Github).

      Ich habe aber auch noch die "alte" V.0.0.5 am Laufen. Zwischenzeitlich wurde ja das Log-In geändert, vllt. hängt es damit zusammen?

      Kannst ja mal die 0.0.5 testen.

      T Offline
      T Offline
      TomBo1969
      wrote on last edited by
      #296

      @reutli Ich habe die Version 0.2.0, da es mit den vorherigen Versionen bei mir nicht mit der Authentifizierung geklappt hat.
      Inzwischen habe ich aber auch von einem nächtlichen Neustart auf eine direkte Überwachung der Instanz umgebaut. Jetzt wird nach 30 Sekunden neu gestartet, wenn der Adapter keine Verbindung mehr hat. Klappt soweit gut.

      R 1 Reply Last reply
      0
      • Q Qlink

        @TomBo1969 @reutli @Boronsbruder

        Hat von euch jemand die Regenerkennung für den Mower in Blockly umgesetzt ?
        Falls ja, könntet ihr euer Blockly teilen ?

        Danke.

        Beste Grüße

        T Offline
        T Offline
        TomBo1969
        wrote on last edited by
        #297

        @qlink Worübee erkennst du denn, dass es bei dir im Garten regnet?
        Bei mir ist es ein Netatmo Regensensor..

        Q 1 Reply Last reply
        0
        • T TomBo1969

          @reutli Ich habe die Version 0.2.0, da es mit den vorherigen Versionen bei mir nicht mit der Authentifizierung geklappt hat.
          Inzwischen habe ich aber auch von einem nächtlichen Neustart auf eine direkte Überwachung der Instanz umgebaut. Jetzt wird nach 30 Sekunden neu gestartet, wenn der Adapter keine Verbindung mehr hat. Klappt soweit gut.

          R Offline
          R Offline
          reutli
          wrote on last edited by
          #298

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

          Ich habe die Version 0.2.0, da es mit den vorherigen Versionen bei mir nicht mit der Authentifizierung geklappt hat.
          Inzwischen habe ich aber auch von einem nächtlichen Neustart auf eine direkte Überwachung der Instanz umgebaut. Jetzt wird nach 30 Sekunden neu gestartet, wenn der Adapter keine Verbindung mehr hat. Klappt soweit gut.

          Komisch, die Authentifizierung klappt bei mir mit der 0.0.5 bestens.
          Habe einen Entwickler-Account bei Husqvarna und fahre mit dem....

          Husqvarna.png

          husqvarna-automower.0
          	2022-08-01 12:00:08.545	info	Connection to "Husqvarna WebSocket" established. Ready to get status events...
          husqvarna-automower.0
          	2022-08-01 12:00:08.161	info	Mower information saved...
          husqvarna-automower.0
          	2022-08-01 12:00:06.691	info	"Husqvarna Authentication API Access token" received.
          husqvarna-automower.0
          	2022-08-01 12:00:03.129	info	Trying to connect "Automower Connect API"...
          husqvarna-automower.0
          	2022-08-01 12:00:03.127	info	starting adapter "husqvarna-automower"...
          husqvarna-automower.0
          	2022-08-01 12:00:03.108	info	starting. Version 0.0.5 (non-npm: ice987987/ioBroker.husqvarna-automower#07614ddfe80b74360398811919f0342e55c3100f) in /opt/iobroker/node_modules/iobroker.husqvarna-automower, node: v14.20.0, js-controller: 4.0.23
          

          BITTE BEACHTET DOCH DAS: https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge
          iobroker in Debian-VM auf Proxmox Server (Ryzen 7 / 32GB / 1TB NVMe SSD) als Master - mehrere Raspberry Pis (3+4) als Slaves. InfluxDB V2 und Grafana auf LXC.

          *Wer freundlich ist, dem wird freundlich geholfen *

          1 Reply Last reply
          0
          • T TomBo1969

            @qlink Worübee erkennst du denn, dass es bei dir im Garten regnet?
            Bei mir ist es ein Netatmo Regensensor..

            Q Offline
            Q Offline
            Qlink
            wrote on last edited by
            #299

            @tombo1969

            Ich verwende einen Weatherman als meine Wetterstation.
            Der hat einen Regensensor eingebaut.

            @reutli aber du hast doch weiter oben geschrieben, dass du den Mower schlafen schickst bei Regen ... ?

            Beste Grüße

            R 1 Reply Last reply
            0
            • Q Qlink

              @tombo1969

              Ich verwende einen Weatherman als meine Wetterstation.
              Der hat einen Regensensor eingebaut.

              @reutli aber du hast doch weiter oben geschrieben, dass du den Mower schlafen schickst bei Regen ... ?

              Beste Grüße

              R Offline
              R Offline
              reutli
              wrote on last edited by
              #300

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

              @reutli aber du hast doch weiter oben geschrieben, dass du den Mower schlafen schickst bei Regen ... ?

              Ja, hatte ich mal, habe ich aber gelöscht, weil nicht zuverlässig funktioniert. Hätte also richtig schreiben müssen "... schickte ich bisher immer schlafen...". Habe jetzt auch eine Wetterstation mit echtem Regegnsensor (Homematic) und wollte das wieder einbauen, bin aber noch nicht dazu gekommen - schäm

              BITTE BEACHTET DOCH DAS: https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge
              iobroker in Debian-VM auf Proxmox Server (Ryzen 7 / 32GB / 1TB NVMe SSD) als Master - mehrere Raspberry Pis (3+4) als Slaves. InfluxDB V2 und Grafana auf LXC.

              *Wer freundlich ist, dem wird freundlich geholfen *

              1 Reply Last reply
              0
              • T TomBo1969

                @reutli @Kanumouse
                Bei mir wird der Adapter im laufenden Betrieb tatsächlich 1x täglich gelb und verbindet sich nicht erneut.

                Ich versuche das zu umgehen, in dem ich den Adapter jede Nacht per Script neu starte.

                K Away
                K Away
                Kanumouse
                wrote on last edited by
                #301

                @tombo1969 @reutli

                Ok, das Problem habe ich jetzt auch mit einem Blockly gelöst.
                Ich überwache den Connect-Status der Instanz und starte die Instanz bei verloren gegangener Verbindung neu.

                1 Reply Last reply
                0
                • L lustig29

                  @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?

                  A Online
                  A Online
                  ArnoD
                  wrote on last edited by
                  #302

                  @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
                  0
                  • A ArnoD

                    @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 Offline
                    L Offline
                    lustig29
                    wrote on last edited by lustig29
                    #303

                    @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
                    0
                    • L 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 Online
                      A Online
                      ArnoD
                      wrote on last edited by
                      #304

                      @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 bergjetB 2 Replies Last reply
                      0
                      • A ArnoD

                        @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 Offline
                        L Offline
                        lustig29
                        wrote on last edited by
                        #305

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

                        opossumO 1 Reply Last reply
                        0
                        • L lustig29

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

                          opossumO Offline
                          opossumO Offline
                          opossum
                          wrote on last edited by opossum
                          #306

                          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.

                          https://schlepper-petersdorf.jimdofree.com/

                          A bergjetB 2 Replies Last reply
                          0
                          • opossumO 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 Online
                            A Online
                            ArnoD
                            wrote on last edited by
                            #307

                            @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.

                            opossumO 1 Reply Last reply
                            1
                            • A ArnoD

                              @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.

                              opossumO Offline
                              opossumO Offline
                              opossum
                              wrote on last edited by
                              #308

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

                              https://schlepper-petersdorf.jimdofree.com/

                              K K 2 Replies Last reply
                              0
                              • opossumO opossum

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

                                K Away
                                K Away
                                Kanumouse
                                wrote on last edited by
                                #309

                                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
                                0
                                • K Offline
                                  K Offline
                                  Kaschi68
                                  wrote on last edited by
                                  #310

                                  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 BraunT 1 Reply Last reply
                                  0
                                  • K Kaschi68

                                    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 BraunT Online
                                    Thomas BraunT Online
                                    Thomas Braun
                                    Most Active
                                    wrote on last edited by
                                    #311

                                    @kaschi68

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

                                    Linux-Werkzeugkasten:
                                    https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
                                    NodeJS Fixer Skript:
                                    https://forum.iobroker.net/topic/68035/iob-node-fix-skript
                                    iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

                                    K 1 Reply Last reply
                                    0
                                    • A ArnoD

                                      @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.

                                      bergjetB Offline
                                      bergjetB Offline
                                      bergjet
                                      wrote on last edited by
                                      #312

                                      @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.

                                      homee, ioBroker, iMac, iPhone, Sonos, Alaxa

                                      A 1 Reply Last reply
                                      0
                                      • opossumO 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.

                                        bergjetB Offline
                                        bergjetB Offline
                                        bergjet
                                        wrote on last edited by
                                        #313

                                        @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?

                                        homee, ioBroker, iMac, iPhone, Sonos, Alaxa

                                        opossumO 1 Reply Last reply
                                        0
                                        • bergjetB bergjet

                                          @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 Online
                                          A Online
                                          ArnoD
                                          wrote on last edited by ArnoD
                                          #314

                                          @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?

                                          bergjetB 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          541

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe