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: My-FHEM am 03 Januar 2017, 21:50:01
Gibt es eine Idee was ich entweder falsch gemacht habe oder was gegenüber einen BotVac connected anders ist?

Hallo My-FHEM,

so viele Unterschiede sollte es nicht geben. Kannst du mal ein Log mit verbose=5 erstellen, wo ein Statusupdate und der Versuch, die Reinigung zu starten, zu sehen sind?

Gruß vuffiraa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

My-FHEM

Hier set syncrobots:


2017.01.04 13:49:36 5: BOTVAC robi: called function BOTVAC_Set()
2017.01.04 13:49:36 5: BOTVAC robi: called function BOTVAC_Set()
2017.01.04 13:49:36 5: BOTVAC robi: called function BOTVAC_Get()
2017.01.04 13:49:49 5: BOTVAC robi: called function BOTVAC_GetStatus()
2017.01.04 13:49:49 5: BOTVAC robi: called function BOTVAC_SendCommand()
2017.01.04 13:49:49 4: BOTVAC robi: REQ messages/getRobotState
2017.01.04 13:49:49 5: BOTVAC robi: POST https://nucleo.neatocloud.com/vendors/neato/robots/SERnr.xxxxxxxxxxx/messages ({"reqId":"1","cmd":"getRobotState"})
2017.01.04 13:49:49 5: BOTVAC robi: header Accept: application/vnd.neato.nucleo.v1
Content-Type: application/json
Date: Wed Jan  4 12:49:49 2017
Authorization: NEATOAPP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2017.01.04 13:49:49 5: BOTVAC robi: called function BOTVAC_SendCommand()
2017.01.04 13:49:49 4: BOTVAC robi: REQ messages/getSchedule
2017.01.04 13:49:49 5: BOTVAC robi: POST https://nucleo.neatocloud.com/vendors/neato/robots/SERnr.xxxxxxxxxxx/messages ({"reqId":"1","cmd":"getSchedule"})
2017.01.04 13:49:49 5: BOTVAC robi: header Accept: application/vnd.neato.nucleo.v1
Content-Type: application/json
Date: Wed Jan  4 12:49:49 2017
Authorization: NEATOAPP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2017.01.04 13:49:49 5: BOTVAC robi: called function BOTVAC_Set()
2017.01.04 13:49:49 2: BOTVAC set robi syncRobots
2017.01.04 13:49:49 5: BOTVAC robi: called function BOTVAC_SendCommand()
2017.01.04 13:49:49 4: BOTVAC robi: REQ dashboard
2017.01.04 13:49:49 5: BOTVAC robi: GET https://beehive.neatocloud.com/dashboard
2017.01.04 13:49:49 5: BOTVAC robi: header Accept: application/vnd.neato.nucleo.v1
Content-Type: application/json
Authorization: Token token=abcdef012345567
2017.01.04 13:49:50 5: BOTVAC robi: called function BOTVAC_Set()
2017.01.04 13:49:50 5: BOTVAC robi: called function BOTVAC_Set()
2017.01.04 13:49:50 5: BOTVAC robi: called function BOTVAC_Get()
2017.01.04 13:49:51 5: BOTVAC robi: called function BOTVAC_Set()
2017.01.04 13:49:51 5: BOTVAC robi: called function BOTVAC_ReceiveCommand() rc: HASH(0xZZZZZZZZZZZ) err:  data: {"version":1,"reqId":"1","result":"ok","data": {},"error":null,"alert":null,"state":1,"action":0,"cleaning": {"category":0,"mode":2,"modifier":1,"navigationMode":1,"spotWidth":0,"spotHeight":0},"details": {"isCharging":false,"isDocked":true,"isScheduleEnabled":false,"dockHasBeenSeen":false,"charge":97},"availableCommands": {"start":true,"stop":false,"pause":false,"resume":false,"goToBase":false},"availableServices": {"findMe":"basic-1","generalInfo":"basic-1","houseCleaning":"minimal-2","IECTest":"basic-1","localStats":"advanced-1","logCopy":"basic-1","preferences":"basic-1","schedule":"minimal-1","softwareUpdate":"basic-1","spotCleaning":"minimal-2","wifi":"basic-1"},"meta": {"modelName":"BotVacD5Connected","firmware":"3.0.0-645"}}
2017.01.04 13:49:51 4: BOTVAC robi: RCV messages/getRobotState
2017.01.04 13:49:51 4: BOTVAC robi: RES messages/getRobotState - {"version":1,"reqId":"1","result":"ok","data": {},"error":null,"alert":null,"state":1,"action":0,"cleaning": {"category":0,"mode":2,"modifier":1,"navigationMode":1,"spotWidth":0,"spotHeight":0},"details": {"isCharging":false,"isDocked":true,"isScheduleEnabled":false,"dockHasBeenSeen":false,"charge":97},"availableCommands": {"start":true,"stop":false,"pause":false,"resume":false,"goToBase":false},"availableServices": {"findMe":"basic-1","generalInfo":"basic-1","houseCleaning":"minimal-2","IECTest":"basic-1","localStats":"advanced-1","logCopy":"basic-1","preferences":"basic-1","schedule":"minimal-1","softwareUpdate":"basic-1","spotCleaning":"minimal-2","wifi":"basic-1"},"meta": {"modelName":"BotVacD5Connected","firmware":"3.0.0-645"}}
2017.01.04 13:49:51 5: BOTVAC robi: called function BOTVAC_ReceiveCommand() rc: HASH(0xZZZZZZZZZ) err:  data: {"email":"xxxxxx@yyyyyyy","first_name":"nnnnn","last_name":"MMMMMM","locale":"de","country_code":"DE","developer":true,"newsletter":true,"created_at":"2016","verified_at":"2016","robots":[{"serial":"OPSxxxxxxxxxxxxxxxxxx","prefix":"SN","name":"robi","model":"BotVacD5Connected","secret_key":"xxxxxxxxxxxxxxxxxxxxxx","purchased_at":"mmmmmmmmmmm","linked_at":"2016","traits":[],"proof_of_purchase_url":null,"proof_of_purchase_url_valid_for_seconds":900,"proof_of_purchase_generated_at":null,"mac_address":"xxxxxxxxxxxxxxx","created_at":"2016"}],"recent_firmwares":{}}
2017.01.04 13:49:51 4: BOTVAC robi: RCV dashboard
2017.01.04 13:49:51 4: BOTVAC robi: RES dashboard - {"email":"mmmmm@MMMMMMMMM.de","first_name":"hhhhh","last_name":"hhhhhhhhhh","locale":"de","country_code":"DE","developer":true,"newsletter":true,"created_at":"2016","verified_at":"2016","robots":[{"serial":"OPSxxxxxxxxxxxxxxxxx","prefix":"SN","name":"robi","model":"BotVacD5Connected","secret_key":"xxxxxxxxxxxxxxxxxxx","purchased_at":"2016","linked_at":"2016","traits":[],"proof_of_purchase_url":null,"proof_of_purchase_url_valid_for_seconds":900,"proof_of_purchase_generated_at":null,"mac_address":"xxxxxxxxx","created_at":"2016"}],"recent_firmwares":{}}
2017.01.04 13:49:51 4: BOTVAC robi: set active robot 0
2017.01.04 13:49:51 5: BOTVAC robi: called function BOTVAC_SendCommand()
2017.01.04 13:49:51 4: BOTVAC robi: REQ maps
2017.01.04 13:49:51 5: BOTVAC robi: GET https://beehive.neatocloud.com/users/me/robots/SerNr.xxxxxxxxxx/maps
2017.01.04 13:49:51 5: BOTVAC robi: header Accept: application/vnd.neato.nucleo.v1
Content-Type: application/json
Authorization: Token token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2017.01.04 13:49:51 5: BOTVAC robi: called function BOTVAC_ReceiveCommand() rc: HASH(0xZZZZZZZ) err:  data: {"version":1,"reqId":"1","result":"ok","data": {"type":1,"enabled":false,"events": []}}
2017.01.04 13:49:51 4: BOTVAC robi: RCV messages/getSchedule
2017.01.04 13:49:51 4: BOTVAC robi: RES messages/getSchedule - {"version":1,"reqId":"1","result":"ok","data": {"type":1,"enabled":false,"events": []}}
2017.01.04 13:49:52 5: BOTVAC robi: called function BOTVAC_ReceiveCommand() rc: HASH(0xZZZZZZZZ) err:  data: {"stats":{},"maps":[]}
2017.01.04 13:49:52 4: BOTVAC robi: RCV maps
2017.01.04 13:49:52 4: BOTVAC robi: RES maps - {"stats":{},"maps":[]}



Ganz schön geschwätzig!

Hier start cleaning:



2017.01.04 14:02:37 5: BOTVAC robi: called function BOTVAC_Set()
2017.01.04 14:02:37 5: BOTVAC robi: called function BOTVAC_Set()
2017.01.04 14:02:37 5: BOTVAC robi: called function BOTVAC_Get()
2017.01.04 14:02:42 5: BOTVAC robi: called function BOTVAC_Set()
2017.01.04 14:02:42 2: BOTVAC set robi startCleaning Eco
2017.01.04 14:02:42 5: BOTVAC robi: called function BOTVAC_SendCommand()
2017.01.04 14:02:42 4: BOTVAC robi: REQ messages/startCleaning
2017.01.04 14:02:42 4: BOTVAC robi: REQ parameters HASH(0xZZZZZZ)
2017.01.04 14:02:42 5: BOTVAC robi: POST https://nucleo.neatocloud.com/vendors/neato/robots/SerNr./messages ({"reqId":"1","cmd":"startCleaning","params":{"mode":"1""modifier":"1""category":"2"}})
2017.01.04 14:02:42 5: BOTVAC robi: header Accept: application/vnd.neato.nucleo.v1
Content-Type: application/json
Date: Wed Jan  4 13:02:42 2017
Authorization: NEATOAPP XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2017.01.04 14:02:42 5: BOTVAC robi: called function BOTVAC_Set()
2017.01.04 14:02:43 5: BOTVAC robi: called function BOTVAC_ReceiveCommand() rc: HASH(0xZZZZZZZZ) err:  data: {"version":1,"reqId":"1","result":"bad_request","data": {},"error":null,"alert":null,"state":1,"action":0,"cleaning": {"category":0,"mode":2,"modifier":1,"navigationMode":1,"spotWidth":0,"spotHeight":0},"details": {"isCharging":false,"isDocked":true,"isScheduleEnabled":false,"dockHasBeenSeen":false,"charge":97},"availableCommands": {"start":true,"stop":false,"pause":false,"resume":false,"goToBase":false},"availableServices": {"findMe":"basic-1","generalInfo":"basic-1","houseCleaning":"minimal-2","IECTest":"basic-1","localStats":"advanced-1","logCopy":"basic-1","preferences":"basic-1","schedule":"minimal-1","softwareUpdate":"basic-1","spotCleaning":"minimal-2","wifi":"basic-1"},"meta": {"modelName":"BotVacD5Connected","firmware":"3.0.0-645"}}
2017.01.04 14:02:43 4: BOTVAC robi: RCV messages/startCleaning
2017.01.04 14:02:43 4: BOTVAC robi: RES messages/startCleaning - {"version":1,"reqId":"1","result":"bad_request","data": {},"error":null,"alert":null,"state":1,"action":0,"cleaning": {"category":0,"mode":2,"modifier":1,"navigationMode":1,"spotWidth":0,"spotHeight":0},"details": {"isCharging":false,"isDocked":true,"isScheduleEnabled":false,"dockHasBeenSeen":false,"charge":97},"availableCommands": {"start":true,"stop":false,"pause":false,"resume":false,"goToBase":false},"availableServices": {"findMe":"basic-1","generalInfo":"basic-1","houseCleaning":"minimal-2","IECTest":"basic-1","localStats":"advanced-1","logCopy":"basic-1","preferences":"basic-1","schedule":"minimal-1","softwareUpdate":"basic-1","spotCleaning":"minimal-2","wifi":"basic-1"},"meta": {"modelName":"BotVacD5Connected","firmware":"3.0.0-645"}}



Es scheint er braucht andere Befehle:


availableCommands": {"start":true,"stop":false,"pause":false,"resume":false,"goToBase":false}",
availableServices": {"findMe":"basic-1","generalInfo":"basic-1","houseCleaning":"minimal-2","IECTest":"basic-1","localStats":"advanced-1","logCopy":"basic-1",



Ich hoffe es hilft.

VG

vuffiraa

Zitat von: My-FHEM am 04 Januar 2017, 14:09:38
Ich hoffe es hilft.

Klar, die Information, die ich gesucht habe, ist dabei. Ich muss da etwas anpassen, dann saugt er auch bei dir.

Gruß vuffiraa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

My-FHEM


bigcheese

Habe mir gerade die Doku zu den Botvac angesehen auf der developer Seite von NEATO, und da ist im Kapitel Spot-Cleaning ebenfalls ein sendtobase vorhanden...
Somit wär es nicht ausgeschlossen, dass man ihn automatisiert in die Küche ggf manövrieren könnte, und anschliessend wieder zurück (automatisch)... jetzt wäre nur die Frage wie man es anstellt :D
Quelle: https://developers.neatorobotics.com/api/robot-remote-protocol/spotcleaning

vuffiraa

Zitat von: bigcheese am 04 Januar 2017, 22:50:36
Habe mir gerade die Doku zu den Botvac angesehen auf der developer Seite von NEATO, und da ist im Kapitel Spot-Cleaning ebenfalls ein sendtobase vorhanden...
Somit wär es nicht ausgeschlossen, dass man ihn automatisiert in die Küche ggf manövrieren könnte, und anschliessend wieder zurück (automatisch)... jetzt wäre nur die Frage wie man es anstellt :D
Quelle: https://developers.neatorobotics.com/api/robot-remote-protocol/spotcleaning

'SendToBase' ist immer dann möglich, wenn der Status des Neato unter den verfügbaren Kommandos 'goToBase=true' aufführt. Für das Kommando ist aber auch in den Details der Statusmeldung 'dockHasBeenSeen=true' nötig. (https://developers.neatorobotics.com/api/robot-remote-protocol/request-response-formats)
Soweit ich das ausprobiert habe, sind diese Werte nach einer manuellen Navigation nicht gesetzt. Sie werden nur geändert, wenn der Neato dann bei der Reinigung (zufällig) wieder an der Ladestation vorbeifährt und sie auch erkennt.

Gruß vuffiraa

PS: Das kann man aber mal leicht über die App testen. Dort sieht man ganz gut, wann der 'Andocken' auswählbar ist.
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

bigcheese

hab gerade den test gemacht:
dockingstation am rand der kueche hingestellt
roboter irgendwo in der kueche abgestellt
spotreinigung
als er fertig war war immer noch nicht andocken zum auswaehlen aber er ist selbststaendig angedockt
obwohl der startpunkt ganz woanders war....

Timmäää

Hallo vuffira,

ich habe nach einem FHEM-Neustart noch folgende Meldung im Log:

PERL WARNING: keys on reference is experimental at ./FHEM/70_BOTVAC.pm line 408, <$fh> line 763.

An der Stelle bei Zeile 408 steht im Modul:

$data = "{\"reqId\":\"1\",\"cmd\":\"$cmd\"";
      if (defined($params) and ref($params) eq "HASH") {
        $data .= ",\"params\":{";
        foreach( keys $params ) {
          $data .= "\"$_\":\"$params->{$_}\"";
        }
        $data .= "}";
      }
      $data .= "}";


Ist das ein fehler im Modul?

Danke und Gruß,
Tim

vuffiraa

Zitat von: Timmäää am 08 Januar 2017, 12:31:55
Hallo vuffira,

ich habe nach einem FHEM-Neustart noch folgende Meldung im Log:

PERL WARNING: keys on reference is experimental at ./FHEM/70_BOTVAC.pm line 408, <$fh> line 763.

An der Stelle bei Zeile 408 steht im Modul:

Ist das ein fehler im Modul?

Danke und Gruß,
Tim

Hallo Tim,

Guter Hinweis, dass ist nicht wirklich ein Fehler. Die Meldung sagt, dass der verwendete Code nur probeweise in Perl unterstützt wird. So wie es scheint, wurde das Feature aber nicht übernommen, sondern mit Perl 5.24 wieder rausgeschmissen. Also werde ich das im Modul besser bald mal anpassen.

Gruß vuffiraa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Timmäää

Hi vuffiraa,

super danke bereits dafür!

Gruß,
Tim

xyro

Hallo,

Ich habe folgendes Problem dabei:

2017.01.12 11:20:34 1: reload: Error:Modul 70_botvac deactivated:
Experimental keys on scalar is now forbidden at ./FHEM/70_botvac.pm line 408.


Gibt es einen Lösungsansatz?

P.S.: Ich benutze Fhem unter Windows :-(

Grüße

Alex

vuffiraa

Zitat von: xyro am 12 Januar 2017, 11:22:37
Hallo,

Ich habe folgendes Problem dabei:

2017.01.12 11:20:34 1: reload: Error:Modul 70_botvac deactivated:
Experimental keys on scalar is now forbidden at ./FHEM/70_botvac.pm line 408.


Gibt es einen Lösungsansatz?

P.S.: Ich benutze Fhem unter Windows :-(

Grüße

Alex

Du musst deine Perl-Version downgraden ;-)
Nur ein Scherz. Ich habe das bereits geändert, habe aber noch eine andere Änderung, die aber noch nicht ganz rund ist.
Ich versuche heute Abend mal ein neue Version ins Git zu bringen.

Gruß vuffiraa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

xyro

Zitat von: vuffiraa am 12 Januar 2017, 11:38:04
Du musst deine Perl-Version downgraden ;-)

:-X

Ok cool, ich versuche gerade meinen Pi wieder in Betrieb zu nehmen und das Ganze dann da zu testen...

Danke

Alex

xyro

Guten morgen vuffiraa!

Zitat von: vuffiraa am 12 Januar 2017, 11:38:04
Ich versuche heute Abend mal ein neue Version ins Git zu bringen.

Hast du gestern noch etwas gemacht?

Ich habe gerade eben Dein Modul auf dem Raspberry Pi aktiviert und funktioniert ohne Fehler.

Vielen Dank dafür!

Grüße

Alex

vuffiraa

Zitat von: xyro am 13 Januar 2017, 08:05:11
Hast du gestern noch etwas gemacht?

Ja, Version 0.2.8 ist neu im Git und sollte jetzt Perl-konform sein.
Außerdem habe ich das Kommando 'stopToBase' wieder raus geschmissen, dafür konnte ich aber 'pauseToBase' bei mir erfolgreich testen.

Ich habe die Kommandoabarbeitung im Modul etwas umgestrickt, daher wollte ich es erst noch über Nacht bei mir laufen lassen, bevor ich es im Forum bekannt gebe  ;) Scheint aber zu laufen.

Die Unterstützung für den D5 folgt...

Gruß vuffiraa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean