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: JojoK am 02 Januar 2019, 16:15:54
Hallo,

ich habe gerade ein Update auf die neuste Version gemacht und bekomme jetzt beim Setzen der Boundaries folgende Fehlermeldung im FHEM Log:

2019.01.02 16:08:04 2: BOTVAC set Henry setBoundariesOnFloorplan_0 Buero
Undefined subroutine &BOTVAC::encode_json called at ./FHEM/70_BOTVAC.pm line 462.

Fehlt mir vielleicht ein Module? Mit cpan habe ich JSON schon auf den neusten Stand gebracht.

Danke und frohes Neues!
JojoK

War ein Fehler im Modul, kannst du mal Version 0.6.3 probieren?

Gruß VuffiRaa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

JojoK

Super, vielen Dank für die schnelle Reaktion. Mit der neuen Version läuft es jetzt wieder durch ohne abzustürzen, allerdings werden die No-Go-Linien nicht gesetzt. Das ganze wird mit bad-request beantwortet (siehe unten der Auszug aus dem Log). Scheint wohl mit der neuen Fimware zu tun haben. Denkst du es gibt einen Workaround oder müssen wir wohl oder übel auf die Dokumentation der neuen Services seitens Neato warten?  :-\

2019.01.02 19:47:09 2: BOTVAC set Henry setBoundariesOnFloorplan_0 Buero
2019.01.02 19:47:09 5: BOTVAC set Henry setBoundariesOnFloorplan_0 Buero json: {"enabled":true,"vertices":[[0.601,0.452],[0.601,0.57]],"name":"Buero","color":"#000000","type":"polyline"}
2019.01.02 19:47:09 4: BOTVAC Henry: Read password from file
2019.01.02 19:47:09 5: BOTVAC Henry: called function SendCommand()
2019.01.02 19:47:09 4: BOTVAC Henry: REQ messages/setMapBoundaries
2019.01.02 19:47:09 4: BOTVAC Henry: REQ option HASH(0x42659f0)
2019.01.02 19:47:09 4: BOTVAC Henry: REQ successors
2019.01.02 19:47:09 5: BOTVAC Henry: POST https://nucleo.neatocloud.com/vendors/neato/robots/OPS14418-C4F31277E6D2/messages ({"reqId":"0","cmd":"setMapBoundaries","params":{"boundaries":[{"enabled":true,"vertices":[[0.601,0.452],[0.601,0.57]],"name":"Buero","color":"#000000","type":"polyline"}],"mapId":"2018-08-10T19:31:47Z"}})
2019.01.02 19:47:09 5: BOTVAC Henry: header Accept: application/vnd.neato.nucleo.v1
Content-Type: application/json
Date: Wed, 02 Jan 2019 18:47:09 GMT
Authorization: NEATOAPP ceabc94cf1f002ea554210711bdaed01aa394cb4de7f823437398968461543ca
2019.01.02 19:47:09 5: BOTVAC Henry: called function Set()
2019.01.02 19:47:09 5: BOTVAC Henry: called function Set()
2019.01.02 19:47:09 5: BOTVAC Henry: called function Set()
2019.01.02 19:47:09 5: BOTVAC Henry: called function Set()
2019.01.02 19:47:09 5: BOTVAC Henry: called function Get()
2019.01.02 19:47:10 5: BOTVAC Henry: called function Set()
2019.01.02 19:47:10 3: CUL_HM set s_Buero_Temperatur getConfig
2019.01.02 19:47:10 5: BOTVAC Henry: called function ReceiveCommand() rc: HASH(0x470ec88) err:  data: {"version":1,"reqId":"0","result":"bad_request","data": {}}
2019.01.02 19:47:10 4: BOTVAC Henry: RCV messages/setMapBoundaries
2019.01.02 19:47:10 4: BOTVAC Henry: RCV successors
2019.01.02 19:47:10 4: BOTVAC Henry: RES messages/setMapBoundaries - {"version":1,"reqId":"0","result":"bad_request","data": {}}


Gruß
JojoK

vuffiraa

Zitat von: JojoK am 02 Januar 2019, 19:54:35
Super, vielen Dank für die schnelle Reaktion. Mit der neuen Version läuft es jetzt wieder durch ohne abzustürzen, allerdings werden die No-Go-Linien nicht gesetzt. Das ganze wird mit bad-request beantwortet (siehe unten der Auszug aus dem Log). Scheint wohl mit der neuen Fimware zu tun haben. Denkst du es gibt einen Workaround oder müssen wir wohl oder übel auf die Dokumentation der neuen Services seitens Neato warten?  :-\

Gruß
JojoK
Ja, da hat Neato etwas geändert. Ohne Dokumentation kann ich da nicht viel machen. Wenn mir jemand eine Wireshark/Tcpdump-Mitschnitt zur Verfügung stellen könnte, dann kann ich vielleicht schon mal anfangen.

Gruß VuffiRaa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Schlimbo

Hallo Vuffiraa,
bekomme bei der Manuellen Steuerung ein "Connection refused":
2019.01.02 15:01:39.896 2: BOTVAC set Sauger startManual
2019.01.02 15:01:39.897 4: BOTVAC Sauger: Read password from file
2019.01.02 15:01:39.898 5: BOTVAC Sauger: called function SendCommand()
2019.01.02 15:01:39.898 4: BOTVAC Sauger: REQ messages/getRobotManualCleaningInfo
2019.01.02 15:01:39.898 4: BOTVAC Sauger: REQ successors
2019.01.02 15:01:39.899 5: BOTVAC Sauger: POST https://nucleo.neatocloud.com:4443/vendors/neato/robots/xxxxx/messages ({"reqId":"0","cmd":"getRobotManualCleaningInfo"})
2019.01.02 15:01:39.899 5: BOTVAC Sauger: header Accept: application/vnd.neato.nucleo.v1
Content-Type: application/json
Date: Wed, 02 Jan 2019 14:01:39 GMT
Authorization: NEATOAPP 55556xxxxx
2019.01.02 15:01:39.968 5: BOTVAC Sauger: called function Set()
2019.01.02 15:01:39.969 5: BOTVAC Sauger: called function Set()
2019.01.02 15:01:39.969 5: BOTVAC Sauger: called function Get()
2019.01.02 15:01:41.170 5: BOTVAC Sauger: called function ReceiveCommand() rc: HASH(0x55ae8619edd8) err:  data: {"version":1,"reqId":"0","result":"ok","data": {"ip_address":"192.168.1.11","port":8081,"ssid":"wlan1"}}
2019.01.02 15:01:41.170 4: BOTVAC Sauger: RCV messages/getRobotManualCleaningInfo
2019.01.02 15:01:41.170 4: BOTVAC Sauger: RCV successors
2019.01.02 15:01:41.170 4: BOTVAC Sauger: RES messages/getRobotManualCleaningInfo - {"version":1,"reqId":"0","result":"ok","data": {"ip_address":"192.168.1.11","port":8081,"ssid":"wlan1"}}
2019.01.02 15:01:41.171 1: PERL WARNING: Use of uninitialized value $value in string eq at fhem.pl line 4602.
2019.01.02 15:01:41.171 1: stacktrace:
2019.01.02 15:01:41.171 1:     main::__ANON__                      called by fhem.pl (4602)
2019.01.02 15:01:41.171 1:     main::readingsBulkUpdateIfChanged   called by ./FHEM/70_BOTVAC.pm (1019)
2019.01.02 15:01:41.171 1:     BOTVAC::ReceiveCommand              called by FHEM/HttpUtils.pm (606)
2019.01.02 15:01:41.171 1:     main::__ANON__                      called by fhem.pl (724)
2019.01.02 15:01:41.172 1: PERL WARNING: Use of uninitialized value $validFor in pattern match (m//) at ./FHEM/70_BOTVAC.pm line 1536.
2019.01.02 15:01:41.172 1: stacktrace:
2019.01.02 15:01:41.172 1:     main::__ANON__                      called by ./FHEM/70_BOTVAC.pm (1536)
2019.01.02 15:01:41.172 1:     BOTVAC::GetValidityEnd              called by ./FHEM/70_BOTVAC.pm (1020)
2019.01.02 15:01:41.172 1:     BOTVAC::ReceiveCommand              called by FHEM/HttpUtils.pm (606)
2019.01.02 15:01:41.172 1:     main::__ANON__                      called by fhem.pl (724)
2019.01.02 15:01:41.173 1: PERL WARNING: Use of uninitialized value $value in string eq at fhem.pl line 4602.
2019.01.02 15:01:41.173 1: stacktrace:
2019.01.02 15:01:41.173 1:     main::__ANON__                      called by fhem.pl (4602)
2019.01.02 15:01:41.173 1:     main::readingsBulkUpdateIfChanged   called by ./FHEM/70_BOTVAC.pm (1020)
2019.01.02 15:01:41.173 1:     BOTVAC::ReceiveCommand              called by FHEM/HttpUtils.pm (606)
2019.01.02 15:01:41.173 1:     main::__ANON__                      called by fhem.pl (724)
2019.01.02 15:01:41.173 4: BOTVAC(ws) Sauger: Sauger: Establishing socket connection
2019.01.02 15:01:41.174 3: Opening Sauger device 192.168.1.11:8081
2019.01.02 15:01:41.244 1: Sauger: Can't connect to 192.168.1.11:8081: Connection refused
2019.01.02 15:01:46.800 5: BOTVAC Sauger: called function GetStatus()

Hast du eine Idee an was das liegen könnte?

Viele Grüße und ein gutes Neues
schlimbo

vuffiraa

Zitat von: Schlimbo am 02 Januar 2019, 22:04:16
Hallo Vuffiraa,
bekomme bei der Manuellen Steuerung ein "Connection refused":

Hast du eine Idee an was das liegen könnte?

Viele Grüße und ein gutes Neues
schlimbo
Die Antwort auf den Start der manuellen Reinigung sieht anders aus, als bei mir. Dadurch gibt es dann auch die Warnungen. Kannst du den Vorgang über die App und Wireshark/tcpdump mitschneiden?
Bei mir funktioniert es genau so, wie es auf der Seite von Neato dokumentiert ist.

Gruß VuffiRaa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Schlimbo

Hallo VuffiRaa,
auf der Neato Seite ist der Response doch so beschrieben, wie er bei mir ankommt:
https://developers.neatorobotics.com/api/robot-remote-protocol/manualcleaning
ZitatRequest
{
  "reqId": "77",
  "cmd": "getRobotManualCleaningInfo"
}
Response
The Standard Response. The data element contains:

{
  "ip_address": "192.168.1.15",
  "port": 8154,
  "ssid": "My Home Network"
}
Wo hast du die Infos zu "token" & "valid_for_seconds" her?
Werde die Tage mal schauen ob ich mit Wireshark noch was raus bekomme.

Gruß
Schlimbo

vuffiraa

#411
Zitat von: Schlimbo am 03 Januar 2019, 23:11:06
Hallo VuffiRaa,
auf der Neato Seite ist der Response doch so beschrieben, wie er bei mir ankommt:
https://developers.neatorobotics.com/api/robot-remote-protocol/manualcleaningWo hast du die Infos zu "token" & "valid_for_seconds" her?
Werde die Tage mal schauen ob ich mit Wireshark noch was raus bekomme.

Gruß
Schlimbo

Hast Recht, dass habe ich gar nicht so genau überprüft. "token" und "valid_for_seconds" kommen bei mir und ich dachte, das könnte dann Standart sein...

Die Werte braucht man auch nicht, um die Websocket-Verbindung aufzubauen. Aber irgendwas wird dann bei dir anders gemacht. Kannst du mal mit global verbose=5 loggen? Für die Websocket-Verbindung wird DevIo genommen und die Logs wären mal interessant.

Dabei ist mir gerade aufgefallen, dass es bisher doch nur eine Serviceversion für "manualCleaning" gibt. Dann ist es noch komischer, warum die Antworten unterschiedlich sind. Du hast doch auch die Version "basic-1"?

Gruß VuffiRaa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Schlimbo

Hello VuffiRaa,
DevIo ist leider recht sparsam mit Logs, auch mit Global verbose 5 steht nicht mehr im Log.
2019.01.04 22:24:07.994 4: BOTVAC(ws) Sauger: Sauger: Establishing socket connection
2019.01.04 22:24:07.995 3: DevIo (line 285) Opening Sauger device 192.168.1.11:8081
2019.01.04 22:24:08.106 1: DevIo (line 352) Sauger: Can't connect to 192.168.1.11:8081: Connection refused

Ja, manualCleaning ist bei mir auch basic-1.

Gruß Schlimbo

vuffiraa

Zitat von: Schlimbo am 04 Januar 2019, 22:33:24
Hello VuffiRaa,
DevIo ist leider recht sparsam mit Logs, auch mit Global verbose 5 steht nicht mehr im Log.
2019.01.04 22:24:07.994 4: BOTVAC(ws) Sauger: Sauger: Establishing socket connection
2019.01.04 22:24:07.995 3: DevIo (line 285) Opening Sauger device 192.168.1.11:8081
2019.01.04 22:24:08.106 1: DevIo (line 352) Sauger: Can't connect to 192.168.1.11:8081: Connection refused

Ja, manualCleaning ist bei mir auch basic-1.

Gruß Schlimbo

Moin Schlimbo,

ich habe mal ins DevIo geschaut, da passiert auch wirklich nicht viel. Es wird versucht, ein Socket auf der Adresse zu öffnen, und das geht schon schief.

Die Geräte sehen sich doch in deinem Netz, sprich Fhem und der D7 sind im gleichen Subnetz und es gibt auch keine Firewall, die das verhindert? Hast du in Fhem mit IPv6 gearbeitet? Es gibt ein globales Attribute "useInet6", was bewirkt, dass DevIo dann ein IPv6-Socket öffnen will. Das kann dann nicht klappen, da Neato nur die IPv4-Adresse liefert.

Gruß VuffiRaa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Schlimbo

Wollte mich gerade mit tcpdump ans debuggen machen, doch selbst über die APP war eine manuelle Steuerung nicht möglich.
...ein einfacher Neustart des Roboters hat das Problem nun behoben :)
Dank deines Moduls hat mein PS3 Controller jetzt eine neue Aufgabe 8)

vuffiraa

Zitat von: Schlimbo am 05 Januar 2019, 14:09:34
Wollte mich gerade mit tcpdump ans debuggen machen, doch selbst über die APP war eine manuelle Steuerung nicht möglich.
...ein einfacher Neustart des Roboters hat das Problem nun behoben :)
Dank deines Moduls hat mein PS3 Controller jetzt eine neue Aufgabe 8)

Das war ja eine einfache Lösung für mich  ;)
Hast du eigentlich jetzt die Readings wlanToken und wlanValidity? Dann hätte ich im Modul einen Hinweis, ob der Sauger mal durchgestartet werden muss.

Nächste Frage, wie willst du das mit dem PS3 Controller angehen? Da habe ich auch ein paar rumliegen.

Schönen Sonntag,
VuffiRaa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Schlimbo

#416
Hallo VuffiRaa,

die Readings wlanToken und wlanValidity bekomme ich trotzdem nicht. Hoffe das es ein einmaliger Fehler war, werde es mal weiter beobachten. Evtl, könntest du bei einem Problem mit der websocket Verbindung noch eine Fehlermeldung ausgeben.

Die Anbindung des PS3 Controllers habe ich über das linuxHID Modul gemacht, Beschreibung:
https://forum.fhem.de/index.php/topic,36257.msg882206.html#msg882206

Das Sub für die Steuerung sieht bei mir so aus:
sub NeatoPS3($$$){
  my ($REMOTE,$BOTVAC,$event) = @_;
  my $KEY_L1 = ReadingsNum($REMOTE,"KEY_L1",0);
  my $KEY_L2 = ReadingsNum($REMOTE,"KEY_L2",0);
  my $KEY_R1 = ReadingsNum($REMOTE,"KEY_R1",0);
  my $KEY_R2 = ReadingsNum($REMOTE,"KEY_R2",0);
  my $KEY_LEFT = ReadingsNum($REMOTE,"KEY_LEFT",0);
  my $KEY_RIGHT = ReadingsNum($REMOTE,"KEY_RIGHT",0);
  my $KEY_UP = ReadingsNum($REMOTE,"KEY_UP",0);
  my $KEY_DOWN = ReadingsNum($REMOTE,"KEY_DOWN",0);

Log 3, ("PS3controler: $REMOTE,$BOTVAC,$event");

  if ((($event eq 'KEY_START: 1') or ($event eq 'KEY_PS: 1')) and (ReadingsVal($BOTVAC,"state","Idle") eq "Idle")){
    fhem "set $BOTVAC startManual";
Log 3, ("PS3controler: startManual")
  }
  elsif (($event eq 'KEY_START: 1') or ($event eq 'KEY_X: 1')){
    fhem "set $BOTVAC stop"
  } 
  elsif (($event eq 'KEY_SQUARE: 1') and (ReadingsVal($BOTVAC,"cleaningMode","eco") ne "turbo")){
    fhem "set $BOTVAC wsCommand turbo-on"
  }
  elsif ($event eq 'KEY_SQUARE: 1') {
    fhem "set $BOTVAC wsCommand turbo-off"
  }
  elsif ($event eq 'KEY_TRIANGLE: 1') {
    fhem ("set $BOTVAC wsCommand vacuum-on;sleep NeatoPS3_1 0.5;set $BOTVAC wsCommand brush-on")
  }
  elsif ($event eq 'KEY_CIRCLE: 1') {
    fhem ("set $BOTVAC wsCommand brush-off;sleep NeatoPS3_1 0.5;set $BOTVAC wsCommand vacuum-off")   
  }
  elsif ($event eq 'KEY_SELECT: 1') {
    fhem "set $BOTVAC findMe"   
  }
  elsif (($event eq 'KEY_R1: 1') or ($event eq 'KEY_R2: 1')) {
    fhem "set $BOTVAC wsCombo pivot-right"   
  }
  elsif (($event eq 'KEY_L1: 1') or ($event eq 'KEY_L2: 1')) {
    fhem "set $BOTVAC wsCombo pivot-left"   
  }
  elsif ($KEY_LEFT or $KEY_RIGHT or $KEY_UP or $KEY_DOWN){
    my $sleep = "0.8";
    $sleep = "2.5" if ($KEY_DOWN);
    $sleep = "2" if ($KEY_LEFT or $KEY_RIGHT);   
    fhem ('sleep '.$sleep.' NeatoPS3_2 quiet; {NeatoPS3("'.$REMOTE.'","'.$BOTVAC.'","")}');
    fhem "set $BOTVAC wsCombo arc-left" if ($KEY_LEFT);
    fhem "set $BOTVAC wsCombo arc-right" if ($KEY_RIGHT);
    fhem "set $BOTVAC wsCombo forward" if ($KEY_UP);
    fhem "set $BOTVAC wsCombo back" if ($KEY_DOWN);
  }
}


defmod PS3controller_notify notify PS3controller:KEY_.* {NeatoPS3($NAME,"Sauger",$EVENT)}

Das ganz funktioniert bei mir schon sehr gut, die Steuerung ist mit dem Controller wesentlich angenehmer als über die APP und die ganze Familie ist begeistert ;D


JojoK

Zitat von: vuffiraa am 02 Januar 2019, 20:28:40
Ja, da hat Neato etwas geändert. Ohne Dokumentation kann ich da nicht viel machen. Wenn mir jemand eine Wireshark/Tcpdump-Mitschnitt zur Verfügung stellen könnte, dann kann ich vielleicht schon mal anfangen.

Gruß VuffiRaa

Hallo,

ich habe mal einen dump gemacht, allerdings ist das ganze TLS verschlüsselt in Wireshark. Weiß jemand, wo ich den private key von "nucleo.neatocloud.com"  herbekomme um das ganze zu entschlüsseln?

Gruß
JojoK

dermitschi85

Hi Leute,

erst Mal vielen Dank für das super Modul!
Ich hab da aber ne Frage:

Bin seit ein paar Tagen Besitzer eines D3 Connected. Jetzt habe ich ein paar No-Go-Linien hinzugefügt und wenn ich die Reinigung über die App anstoße, wird das auch super beachtet.
Starte ich die Reinigung aber über FHEM, sind die No-Go-Linien immer deaktiviert. Kann mir einer bitte sagen ob es überhaupt möglich ist diese einzubeziehen und wenn ja, wie das geht?
Beim Start der Reinigung über ALEXA werden sie auch missachtet.
In der App steht beim Einrichten der No-Go-Linien, dass diese nur beachtet werden, wenn die Reinigung über die App erfolgt.

Vielen Dank schon mal für die Info!

Grüße Michi

Schlimbo

Auch über das Modul sollten die No-Go Linien beachtet werden.
Wie startest du den Saugvorgang? Wichtig für No-Go Linien ist, "map" beim Start mit anzugeben:
set <Name> startCleaning map


@VuffiRaa: könntest du das bitte noch in der commandref ergänzen?
Desweiteren kann der Eintrag:
Zitatset <name> setBoundaries
set boundaries/nogo lines
gelöscht werden "setBoundaries" würde durch "setBoundariesOnFloorplan_*" ersetzt.