Neues Modul: BOTVAC (für Neato BotVac Connected)

Begonnen von vuffiraa, 02 April 2016, 22:12:29

Vorheriges Thema - Nächstes Thema

vuffiraa

Zitat von: Schlimbo am 18 Mai 2018, 21:06:26
Hallo vuffiraa,

Vielen Danke für die neue Version.
Mir ist aufgefallen, dass die neue Funktion "setDevAttrList", die Attribute "disable,actionInterval,boundaries,$readingFnAttributes" überschreibt.

Desweiteren stimmt die Uhrzeit im Reading "map_date" wieder nicht.
Da die API "map_date" mit "Greenwich Mean Time" ausgibt, hatte ich in meiner Version zum umrechnen auf die Lokale Zeit "FmtDateTime(str2time($map->{generated_at}))" eingefügt.
Mit der neuen Version bekomme ich aber wieder die GMT Zeit: Hatte heute um 15:14 eine beendete Reinigung, das Reading "map_date" zeigt mir aber "2018-05-18 13:14:21" an.

Gruß
Schlimbo

Edit: Und das "Eco" im webCmd wird jetzt nicht mehr benötigt  ;)

Bitte mal Version 0.4.1 probieren. Ich habe mich bemüht, die angemerkten Sachen zu beheben  ;)

Gruß Vuffiraa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Schlimbo


Schlimbo

Noch eine Kleinigkeit:
Damit das Attribut "boundaries" funktioniert muss Im sub BOTVAC_Attr (Zeile 435 und 456)  "Boundaries" noch klein geschrieben werden.

vuffiraa

Zitat von: Schlimbo am 20 Mai 2018, 09:09:07
Noch eine Kleinigkeit:
Damit das Attribut "boundaries" funktioniert muss Im sub BOTVAC_Attr (Zeile 435 und 456)  "Boundaries" noch klein geschrieben werden.

Version 0.4.2
Ich sag nur, was man nicht selber testen kann  ;)

Schöne Pfingsten
Vuffiraa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Schlimbo

#259
Hallo Vuffiraa,
hätte da noch zwei Bitten:

  • Könntest du nach dem absetzen eines set Befehls, automatisch ein "statusRequest" auslösen (bzw. für setBoundaries ein "reloadMaps")?
    Momentan ist es nämlich so, dass z.B. nach einem startCleaning, die Readings bis zum Ablauf des eingestellten Intervall Timers noch die alten Werte anzeigen, je nach Intervall Einstellung kann das dann eine ganze Zeit dauern.
    Edit: Habe allerdings noch nicht getestet, wie schnell die API nach einem "set" Befehl die Änderung zurückgibt, evtl. ist es noch nötig zwischen dem "set" und "statusRequest" eine Wartezeit vorzusehen.


  • Im Modul habe ich gesehen, dass du einen reloadMaps auslöst, wenn state auf "Idle" order "Error" wechselt,
    Habe bei mir allerdings beobachtet, dass es ab und an passiert, dass zu diesem Zeitpunkt die neue Karte noch nicht verfügbar ist. Wäre super, wenn du hier noch eine Verzögerung von ca. 5 Sekunden einfügen könntest.
    Edit: Bin mir nicht sicher, ob die 5 Sekunden wirklich ausreichen, evtl. wäre hierfür auch ein Attribut sinnvoll.
Beste Grüße
Schlimbo

Schlimbo

Habe gerade ein Neustart von FHEM durchgeführt und bekam folgende Meldung:
Messages collected while initializing FHEM:
configfile: Sauger: unknown attribute cleaningMode. Type 'attr Sauger ?' for a detailed list.
Sauger: unknown attribute cleaningNavigationMode. Type 'attr Sauger ?' for a detailed list.
Sauger: unknown attribute cleaningSpotHeight. Type 'attr Sauger ?' for a detailed list.
Sauger: unknown attribute cleaningSpotWidth. Type 'attr Sauger ?' for a detailed list.

Da diese Attribute erst zur Laufzeit gebildet werden, sind sie beim Systemstart noch nicht vorhanden.

Um das zu verhindern sollten aller Attribute im Initialisierungsteil "BOTVAC_Initialize" aufgenommen werden:
    $hash->{AttrList} = "disable:0,1 " .
                        "actionInterval " .
                        "boundaries:textField-long " .
                        "cleaningMode " .
                        "cleaningNavigationMode " .
                        "cleaningModifier " .
                        "cleaningSpotWidth " .
                        "cleaningSpotHeight " .
                         $readingFnAttributes;


Gruß Schlimbo

bugware

Guten Abend Vuffiraa und Schlimbo,

tolle Arbeit, vielen Dank! Ich habe gerade erst einen Neato D7 in Betrieb genommen und habe noch nicht alles ausprobieren können.

Nun habe ich Fragen zur Map-Funktion. Wenn ich den source code richtig lese, dann werden ja mehrere maps ausgelesen und die erste als Reading gespeichert. Auch wird so lange gelooped bis eine perisistent map in der Rückgabe gefunden ist, so dass in dem Fall die boundaries geladen werden.

Nun die Fragen:
- in FHEM wird mir die MapID als Datum+Uhrzeit angezeigt. In der Roboter-API ist aber ein alphanumerischer String gezeigt (https://developers.neatorobotics.com/api/robot-remote-protocol/maps). Ist das so richtig und ist es die gleiche ID?
- Beim Request zu setMapBoundaries und auch bei getMapBoundaries ist die ID ja anzugeben. Ist das auch diese ID?

Letztendlich würde mich interessieren, ob nicht nur die Boundaries gesetzt werden können, sondern auch die Map selbst? So könnte man mehrere Wohnebenen oder Etagen über mehrere Maps+Boundaries ansteuern, oder?

Vielen Dank und liebe Grüße,
Andy.

PS: FHEM und BOTVAC sind aktuell; die Firmware vom D7 auch.

PPS: Wäre es nicht besser die Attribute mit Einstellungen wie CleaningMode, cleaningSpot* als Reading zu realisieren? Wenn man mal kurzzeitig umstellt will FHEM ansonsten immer die config speichern. Oder habe ich da was falsch verstanden?
RPi 2, nanoCUL433, nanoCUL868-HM, SIGNALduino, HM, IT, SOMFY, Weishaupt-Mod, BOTVAC, MYSENSORS

bugware

Nochmals guten Abend,

wo könnte der Fehler liegen?
2018.05.27 21:59:27 5: BOTVAC heinzelmann: called function BOTVAC_Set()
2018.05.27 21:59:27 2: BOTVAC set heinzelmann setBoundaries HWR-Kueche
2018.05.27 21:59:27 5: BOTVAC set heinzelmann setBoundaries HWR-Kueche json: {"vertices":[[0.2577,0.4811],[0.2813,0.4824]],"type":"polyline","enabled":true,"color":"#E54B1C","name":"HWR-Kueche"},{"enabled":true,"type":"polyline","vertices":[[0.2055,0.4889],[0.2042,0.6592]],"color":"#E54B1C","name":"HWR-Kueche"},{"vertices":[[0.2029,0.6091],[0.2276,0.6096]],"enabled":true,"type":"polyline","color":"#E54B1C","name":"HWR-Kueche"},{"color":"#E54B1C","name":"HWR-Kueche","enabled":true,"type":"polyline","vertices":[[0.2276,0.6096],[0.2276,0.663]]},{"color":"#E54B1C","name":"HWR-Kueche","vertices":[[0.3433,0.3117],[0.3436,0.4976]],"type":"polyline","enabled":true}
2018.05.27 21:59:27 4: BOTVAC heinzelmann: Read password from file
2018.05.27 21:59:27 5: BOTVAC heinzelmann: called function BOTVAC_SendCommand()
2018.05.27 21:59:27 4: BOTVAC heinzelmann: REQ messages/setMapBoundaries
2018.05.27 21:59:27 4: BOTVAC heinzelmann: REQ option HASH(0x434f711)
2018.05.27 21:59:27 4: BOTVAC heinzelmann: REQ successors
2018.05.27 21:59:27 5: BOTVAC heinzelmann: POST https://nucleo.neatocloud.com/vendors/neato/robots/...-.../messages ({"reqId":"1","cmd":"setMapBoundaries"})
2018.05.27 21:59:27 5: BOTVAC heinzelmann: header Accept: application/vnd.neato.nucleo.v1
Content-Type: application/json
Date: Sun May 27 19:59:27 2018
Authorization: NEATOAPP ...
2018.05.27 21:59:27 5: BOTVAC heinzelmann: called function BOTVAC_Set()
2018.05.27 21:59:27 5: BOTVAC heinzelmann: called function BOTVAC_Set()
2018.05.27 21:59:27 5: BOTVAC heinzelmann: called function BOTVAC_Get()
2018.05.27 21:59:28 5: BOTVAC heinzelmann: called function BOTVAC_Set()
2018.05.27 21:59:28 5: BOTVAC heinzelmann: called function BOTVAC_ReceiveCommand() rc: HASH(0x494b2f8) err:  data: {"version":1,"reqId":"1","result":"bad_request","data": {}}
2018.05.27 21:59:28 4: BOTVAC heinzelmann: RCV messages/setMapBoundaries
2018.05.27 21:59:28 4: BOTVAC heinzelmann: RCV successors
2018.05.27 21:59:28 4: BOTVAC heinzelmann: RES messages/setMapBoundaries - {"version":1,"reqId":"1","result":"bad_request","data": {}}
2018.05.27 21:59:28 5: BOTVAC heinzelmann: called function BOTVAC_Set()


In der App ändert sich nichts.

Schönen Abend.
RPi 2, nanoCUL433, nanoCUL868-HM, SIGNALduino, HM, IT, SOMFY, Weishaupt-Mod, BOTVAC, MYSENSORS

Schlimbo

Hallo Bugware,
bei setBoundaries war noch ein Fehler, in Git gibt es eine aktualisierte Version.
https://github.com/RealSchlimbo/fhem_modules/blob/master/70_BOTVAC.pm

Zitat von: bugware am 27 Mai 2018, 21:07:13
- in FHEM wird mir die MapID als Datum+Uhrzeit angezeigt. In der Roboter-API ist aber ein alphanumerischer String gezeigt (https://developers.neatorobotics.com/api/robot-remote-protocol/maps). Ist das so richtig und ist es die gleiche ID?
Ja, das ist die gleiche ID, als MapID wird über die API immer ein Datum/Zeit String zurück gegeben, warum das in der Doku anders dargestellt ist weiß ich auch nicht, jedenfalls funktioniert es mit dieser ID.
Zitat von: bugware am 27 Mai 2018, 21:07:13
- Beim Request zu setMapBoundaries und auch bei getMapBoundaries ist die ID ja anzugeben. Ist das auch diese ID?
Ja, aus diesem Grund lese ich die ID im Modul aus.

Zitat von: bugware am 27 Mai 2018, 21:07:13
Letztendlich würde mich interessieren, ob nicht nur die Boundaries gesetzt werden können, sondern auch die Map selbst? So könnte man mehrere Wohnebenen oder Etagen über mehrere Maps+Boundaries ansteuern, oder?
Für Map Cleaning kann leider noch keine MapID übergeben werden, hoffe auch dass diese Funktion von NEATO  noch nachgerüstet wird.

Gruß Schlimbo

bugware

#264
Hallo Schlimbo,

Zitat von: Schlimbo am 28 Mai 2018, 21:10:18
bei setBoundaries war noch ein Fehler, in Git gibt es eine aktualisierte Version.

Danke. Funktioniert.

ZitatFür Map Cleaning kann leider noch keine MapID übergeben werden, hoffe auch dass diese Funktion von NEATO  noch nachgerüstet wird.
Das bleibt zu hoffen. Den Wunsch hatten bestimmt schon mehrere Kunden. Wie oft kommen denn Firmwareupdates? Regelmäßig oder kann man das nicht so genau sagen?

Beste Grüße.
RPi 2, nanoCUL433, nanoCUL868-HM, SIGNALduino, HM, IT, SOMFY, Weishaupt-Mod, BOTVAC, MYSENSORS

vuffiraa

Moin,

jetzt muss ich auch mal wieder etwas schreiben. Hatte mir für die letzten Tage noch meine Steuererklärung aufgehoben  ;)

Version 0.4.3 ist im Git und löst nach setMapBoundaries ein reloadMaps aus. Außerdem gab es einen Fehler bei startSport.

Die allgemeinen Kommandos antworten eigentlich mit einem aktuellen Status, daher bin ich mir nicht sicher, ob das Modul den wirklich nochmal explizit anfordern muss. Ich hatte bei mir das Gefühl, dass damit immer die richtigen Infos im Modul angezeigt werden. Auch die Aktualisierung der Karte nach einer Reinigung klappt bei mir. Wenn der D7 da etwas langsamer ist, kriegt er eine Sonderbehandlung.

Bei den Attributen für die Reinigungsoptionen bin ich noch unschlüssig, was da die Lösung sein wird. Mein erster Ansatz war es, die Optionen als Parameter bei den Kommandos einzubauen. Da verliert man aber in FHEMWEB die Möglichkeit, für mehrere Parameter Wertelisten anzuzeigen. Als Attribute geht das gut, aber da ändert man immer die Konfiguration :( Man könnte auch die Readings cleaning* benutzen, aber da überschreibt dann der nächste Status die Werte wieder. Also bräuchte man neue Readings à la next|set* oder einen anderen schönen Prefix. Technisch ist das alles möglich, aber was ist am bequemsten zu benutzen?

Gruß Vuffiraa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

bugware

Hallo Vuffiraa,

ZitatBei den Attributen für die Reinigungsoptionen bin ich noch unschlüssig, was da die Lösung sein wird. Mein erster Ansatz war es, die Optionen als Parameter bei den Kommandos einzubauen. Da verliert man aber in FHEMWEB die Möglichkeit, für mehrere Parameter Wertelisten anzuzeigen. Als Attribute geht das gut, aber da ändert man immer die Konfiguration :( Man könnte auch die Readings cleaning* benutzen, aber da überschreibt dann der nächste Status die Werte wieder. Also bräuchte man neue Readings à la next|set* oder einen anderen schönen Prefix. Technisch ist das alles möglich, aber was ist am bequemsten zu benutzen?

Ja, das ist natürlich Schade, dass FHEMWEB nicht die Möglichkeit, für mehrere Parameter Wertelisten anzuzeigen bietet. Vielleicht könnte man FHEM ja hier ergänzen.

Ansonsten stelle ich mir die Praxis so vor, dass man in der GUI (FHEMWEB oder bei mir eher TabletUI) die Parameter der nächsten Reinigung einstellt und dann am Ende Start drückt. Das wäre genau wie in der Android App. Dazu wären Readings doch genau richtig, oder? Namen wie next* erscheinen mit logisch. Oder die bisherigen bekommen den Suffix last*. Wäre doch auch nicht unlogisch.

Zwei Fragen:
- Was ist beim D7 der Modus cleaningNavigationMode mit Wert deep? (In der App gibt es nur ExtraCare an oder aus.)
- In der App wird beim SpotCleaning nur 400x400 an oder aus angeboten? Was macht er bei aus? Hat schon jemand probiert, welche Wertekombinationen beim D7 für das SpotCleaning möglich sind? Gehen auch Rechtecke wie 100x200? Hatte noch keine Zeit es selbst zu testen (zwei kleine Kinder ;)).

V0.4.3 werde ich Abends mal testen...  :D

Grüße BugWare.
RPi 2, nanoCUL433, nanoCUL868-HM, SIGNALduino, HM, IT, SOMFY, Weishaupt-Mod, BOTVAC, MYSENSORS

Schlimbo

Zitat von: vuffiraa am 31 Mai 2018, 08:10:50
Version 0.4.3 ist im Git und löst nach setMapBoundaries ein reloadMaps aus. Außerdem gab es einen Fehler bei startSport.
Hallo Vuffiraa, in deiner Version fehlen noch meine letzten Änderungen, habe hierfür gerade mal einen pull request erstellt.
Zitat von: vuffiraa am 31 Mai 2018, 08:10:50
Bei den Attributen für die Reinigungsoptionen bin ich noch unschlüssig, was da die Lösung sein wird. Mein erster Ansatz war es, die Optionen als Parameter bei den Kommandos einzubauen. Da verliert man aber in FHEMWEB die Möglichkeit, für mehrere Parameter Wertelisten anzuzeigen. Als Attribute geht das gut, aber da ändert man immer die Konfiguration :( Man könnte auch die Readings cleaning* benutzen, aber da überschreibt dann der nächste Status die Werte wieder. Also bräuchte man neue Readings à la next|set* oder einen anderen schönen Prefix. Technisch ist das alles möglich, aber was ist am bequemsten zu benutzen?

Vor der Reinigung erst irgendwelche Readings setzen zu müssen finde ich für automatisierte Abläufe immer etwas umständlich, deswegen bevorzuge ich die Lösung mit den Optionalen Parametern. Werden keinen Parameter im set Befehl angegeben, sollen die Werte aus den Attributen verwendet werden. Da ich die Reinigung über FHEM automatisiert starte sind mir die Wertelisten in der Weboberfläche nicht so wichtige. Zu 99% werden bei mir sowieso die gleichen Parameter verwendet, hier finde ich die Attribute super. Über die optionalen Parameter wäre man dann aber trotzdem noch flexibel.

Gruß Schlimbo

Schlimbo

Zitat von: bugware am 30 Mai 2018, 21:24:54
Wie oft kommen denn Firmwareupdates? Regelmäßig oder kann man das nicht so genau sagen?
Das weiß ich nicht, hab den Sauger seit knapp zwei Monaten und habe bis jetzt noch kein update bekommen.
Zitat von: bugware am 31 Mai 2018, 16:57:42
- In der App wird beim SpotCleaning nur 400x400 an oder aus angeboten? Was macht er bei aus? Hat schon jemand probiert, welche Wertekombinationen beim D7 für das SpotCleaning möglich sind? Gehen auch Rechtecke wie 100x200? Hatte noch keine Zeit es selbst zu testen (zwei kleine Kinder ;)).
In der APP kann man den "Grosser Bereich (4m x 4m)" An/Aus schalten, bei Aus wird mit 200x200 gereinigt.
100x200 sollte laut API Beschreibung funktionieren, hab ich aber noch nicht getestet.
Laut Beschreibung sind Werte von 100-400 cm einstellbar, ob man das cm genau einstellen kann habe ich aber auch noch nicht getestet.

vuffiraa

Zitat von: Schlimbo am 31 Mai 2018, 18:43:34
Hallo Vuffiraa, in deiner Version fehlen noch meine letzten Änderungen, habe hierfür gerade mal einen pull request erstellt.

Gruß Schlimbo
Habs Commited.
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean