NEWS
Test Adapter Husqvarna Automower v0.3.x
-
@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.
-
@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.
-
@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
-
Ich habe noch keine Regenerkennung drin. Braucht's ja auch nicht - es regnet ja nicht
-
@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. -
@qlink Worübee erkennst du denn, dass es bei dir im Garten regnet?
Bei mir ist es ein Netatmo Regensensor.. -
@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-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
-
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
-
@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
-
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. -
@lustig29 sagte in Test Adapter Husqvarna Automower v0.3.x:
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:
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 beiduration
undstart
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 -
@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? -
@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.jsUnd 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. -
@arnod Oh, vielen Dank. Das mit den Skript mache ich noch selber. Den Rest über lasse ich dann lieber den Profis.
-
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.
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.
-
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.
-
Hallo, @arnod,
danke, dass Du Dich gekümmert hast. Funktioniert jetzt mit meinem Husqvarna 315X ohne Probleme. -
Hi,
ich habe noch zwei Fragen zum Adapter, vielleicht kann mir die jemand beantworten.- Durch was wird der Datenpunkt "CuttingBladeUsageTime" getriggert?
- 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?
-
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ß
Nach Neustart Folgendes im Protokoll
-
Ich würde ja aktuelle Versionen fahren.
nodejs16 / js-controller 4.