Modul für Irobot Roomba 980

Begonnen von kukamee, 22 Februar 2017, 02:34:53

Vorheriges Thema - Nächstes Thema

Markus-L

#15
Hallo,
Port müsste laut Dorita 8883 sein.

Ich hab mein Script nochmal leicht modifiziert, dass es direkt im xy format schreibt.
Damit konnte ich dann heute schon eine schöne Map in Fhem zeichnen...


in Dorita funktioniert der Aufbau der Verbindung wohl so:


  const url = 'tls://' + host;

  var options = {
    port: 8883,
    clientId: user,
    rejectUnauthorized: false,
    protocolId: 'MQTT',
    protocolVersion: 4,
    clean: false,
    username: user,
    password: password
  };

  const client = mqtt.connect(url, options);


wobei
host die IP Adresse ist
user die RobotId
und Passwort das Pw
=> die letzten 2 Dinge bekommt man über das getPassword skript von dorita980

minicupper

Vielleicht hilft das hier weiter?
https://github.com/koalazak/dorita980/blob/master/README.md
Leider fehlen mir die Fähigkeiten daraus ein Modul zu machen, aber vielleicht schafft es jemand anderes?
Gruß
Gero

Thorsten Pferdekaemper

Hi,
ja, das ist sicher hilfreich, aber ich fände es wirklich extrem unschön, wenn man erstmal den ganzen dorita-Kram installieren müsste.
Ich habe fest vor, mir das ganze mal genauer anzuschauen, sobald mein 980er auf 2.x geht.
Sollten wir den Thread nicht lieber nach "Sonstige Systeme" verschieben? Das müsste aber kukamme oder ein Mod machen.
Gruß,
   Thorsten
FUIP

minicupper

Vielleicht ist es noch nicht aufgefallen: Dorita980 hat (gezwungenermaßen) auf MQTT umgestellt. Lässt sich das nach FHEM porten?
Gruß
Gero

Thorsten Pferdekaemper

Zitat von: minicupper am 02 März 2017, 15:50:51
Vielleicht ist es noch nicht aufgefallen: Dorita980 hat (gezwungenermaßen) auf MQTT umgestellt. Lässt sich das nach FHEM porten?
Siehe meinen Beitrag vom 28 Februar 2017, 16:28:09. Im Prinzip müsste das ja dann per FHEM-Modul MQTT gehen.
Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

Hi,
also update ist da und ich habe jetzt mal das probiert:

define RobbieMQTT MQTT 192.168.178.40:8883 <blid> <password>

Das ganze schmiert aber irgendwo in Net::MQTT ab:

2017.03.04 17:15:04 1: 192.168.178.40:8883 disconnected, waiting to reappear (RobbieMQTT)
2017.03.04 17:15:04 1: 192.168.178.40:8883 reappeared (RobbieMQTT)
decode_string: insufficient data at C:/Programs32/StrawberryPerl/perl/site/lib/Net/MQTT/Message/Connect.pm line 86.
at C:/Programs32/StrawberryPerl/perl/site/lib/Net/MQTT/Constants.pm line 121.
Net::MQTT::Constants::decode_string("\x{3}\x{0}\x{2}", SCALAR(0x5434944)) called at C:/Programs32/StrawberryPerl/perl/site/lib/Net/MQTT/Message/Connect.pm line 86
Net::MQTT::Message::Connect::_parse_remaining(Net::MQTT::Message::Connect=HASH(0x52f83fc)) called at C:/Programs32/StrawberryPerl/perl/site/lib/Net/MQTT/Message.pm line 54
Net::MQTT::Message::new_from_bytes("Net::MQTT::Message", "\x{1}\x{0}", 1) called at ./FHEM/00_MQTT.pm line 231
MQTT::Read(HASH(0x44b8dcc)) called at fhem.pl line 3311
main::CallFn("RobbieMQTT", "ReadFn", HASH(0x44b8dcc)) called at fhem.pl line 675

Hat jemand eine Idee dazu? Bevor ich da jetzt den Samstag Abend mit Debugging verbringe...
Gruß,
    Thorsten
FUIP

carlos

Das hab ich auch schon probiert. Scheint mit tls zusammen zu hängen. Keine Ahnung, ob das das MQTT  Modul richtig kann.
Gruß Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

Thorsten Pferdekaemper

Hi,
keine Ahnung. Das mit dem MQTT scheint mir noch nicht ganz so ausgegoren zu sein. Man scheint einen "Broker" zu brauchen und zusätzlich noch ungefähr drei Devices in FHEM um irgendwas anzubinden. Ich dachte MQTT sollte die Dinge vereinfachen... Außerdem scheint es von großen Firmen entwickelt worden zu sein. Da bin ich immer eher skeptisch.
Vielleicht müssen wir doch mal analyiseren, was dorita980 da genau treibt und daraus dann direkt ein FHEM-Modul bauen.
Gruß,
    Thorsten
FUIP

Thorsten Pferdekaemper

Hi,
also ich habe jetzt mal mit TLS rumexperimentiert und bekomme jetzt keine Fehlermeldungen mehr, aber das Ding geht von "connecting" in den Timeout.
Tja, vielleicht muss ich mich doch noch mit den MQTT-Grundlagen befassen.
Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

Ok, das Ding redet jetzt mit mir:

ConnAck/at-most-once Connection Refused: not authorized

Nicht das, was man sehen will, aber immerhin.
FUIP

Thorsten Pferdekaemper

Sehr seltsam. Jetzt bekomme ich immer das hier:

IO::Socket::IP configuration failed

Coding ist das:

  my $cl = IO::Socket::SSL->new(PeerAddr => '192.168.178.40:8883',
               SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE);

Wenn ich da tiefer reindebugge, dann sehe ich etwas wie "Der Remotecomputer hat die Verbindung abgelehnt".
Hat jemand eine Idee?
Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

Ok, Robbie redet mit mir:

ConnAck/at-most-once Connection Accepted Publish/at-most-once wifistat
  7b 22 73 74 61 74 65 22 3a 7b 22 72 65 70 6f 72  {"state":{"repor
  74 65 64 22 3a 7b 22 6e 65 74 69 6e 66 6f 22 3a  ted":{"netinfo":
  7b 22 64 68 63 70 22 3a 74 72 75 65 2c 22 61 64  {"dhcp":true,"ad
  64 72 22 3a 33 32 33 32 32 38 31 31 32 38 2c 22  dr":3232281128,"
  6d 61 73 6b 22 3a 34 32 39 34 39 36 37 30 34 30  mask":4294967040
  2c 22 67 77 22 3a 33 32 33 32 32 38 31 30 38 39  ,"gw":3232281089
  2c 22 64 6e 73 31 22 3a 33 32 33 32 32 38 31 30  ,"dns1":32322810
  38 39 2c 22 64 6e 73 32 22 3a 30 2c 22 62 73 73  89,"dns2":0,"bss
  69 64 22 3a 22 33 38 3a 31 30 3a 64 35 3a 32 61  id":"38:10:d5:2a
  3a 38 33 3a 34 64 22 2c 22 73 65 63 22 3a 34 7d  :83:4d","sec":4}
  7d 7d 7d                                         }}}Publish/at-most-once wifistat
  7b 22 73 74 61 74 65 22 3a 7b 22 72 65 70 6f 72  {"state":{"repor
  74 65 64 22 3a 7b 22 77 69 66 69 73 74 61 74 22  ted":{"wifistat"
  3a 7b 22 77 69 66 69 22 3a 31 2c 22 75 61 70 22  :{"wifi":1,"uap"
  3a 66 61 6c 73 65 2c 22 63 6c 6f 75 64 22 3a 31  :false,"cloud":1
  7d 7d 7d 7d                                      }}}}Publish/at-most-once wifistat
  7b 22 73 74 61 74 65 22 3a 7b 22 72 65 70 6f 72  {"state":{"repor
  74 65 64 22 3a 7b 22 6e 65 74 69 6e 66 6f 22 3a  ted":{"netinfo":
  7b 22 64 68 63 70 22 3a 74 72 75 65 2c 22 61 64  {"dhcp":true,"ad

Es scheint mir fast so, als ob das Teil nach einigen Fehlversuchen erst einmal ein paar Stunden schmollt. Heute morgen hat die SSL-Connection dann einfach so funktioniert.
Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

Jetzt habe ich das mal mit den Modulen MQTT, MQTT_DEVICE und MQTT_BRIDGE versucht. (Nachdem ich ein paar kleine Anpassungen für TLS und kleinen Roomba-Specifics gemacht hatte. Allerdings findet das keine Readings und stürzt beim Neustart von FHEM gnadenlos ab. Ich glaube, es bringt mehr, daraus ein eigenes Modul zu machen.
Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

Zitat von: Markus-L am 01 März 2017, 14:31:04
Ich hab mein Script nochmal leicht modifiziert, dass es direkt im xy format schreibt.
Damit konnte ich dann heute schon eine schöne Map in Fhem zeichnen...
Kannst Du mal zeigen, wie Du in FHEM die Grafik hinbekommen hast?

Übrigens: Mit einer echten Intagration in FHEM müsste man nicht mehr pollen. Der Robot schickt von sich aus zyklisch Meldungen über seinen Zustand, solange die Verbindung offen ist. Ich denke, dass ich das hinbekomme.

Gruß,
   Thorsten
FUIP

Markus-L

Hallo

Das sieht doch schon sehr gut aus! Vielen Dank für deinen Einsatz.

Meine SSD ist gestern zuhause leider gestorben - sodass ich gerade nur sehr beschränkt Zugang zu meine fhem instalation habe (aktuell schreibe ich von der arbeit)

Grob funktioniert das mit dem Zeichnen so:
dorita980 trägt komma getrennt xy koordinaten in ein Reading ein. Daraus wird dann mit FileLog ein logfile erstellt
Mit der Hilfe von diesem Thread:
https://forum.fhem.de/index.php?topic=41262.0
konnte ich dann das Zeichnen machen.

Grob in etwa so:
Mit einem logProxy define und der funktion logProxy_xyFile2Plot (hier muss leider zur Zeit noch ein fester Datei name stehen)

Ich habe mir dann noch eine perl funktion geschrieben, dass den FileLog einließt, alle zeilen des aktuellen Datums herausfiltert und das in eine eigene Datei mit festem namen schreibt und den namen als rückgabe wert zurück gibt.
Diese perlfunktion rufe ich dann als parameter bei der logProxy_xyFile2Plot auf sodass ich immer die map des aktuellen Datums sehe. die Historie geht derzeit noch nicht.

Ja ich weiß - auch diese Lösung ist durchaus wieder etwas kompliziert geworden.  :-[

Sobald ich meinen Laptop wieder habe kann ich gerne genaueres posten.