Modul für Irobot Roomba 980

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

Vorheriges Thema - Nächstes Thema

Thorsten Pferdekaemper

Hi,
so, jetzt redet Robbie wirklich mit mir. Ich habe ein bisschen bei 00_MQTT.pm und auch in DevIo.pm "gewildert". Dabei ist so eine Art vorläufiges Modul Roomba980 herausgekommen.

*** Folgendes würde ich NICHT auf einem produktiven FHEM-System machen. ***

Also die hier angehängte Datei nach <fhem>/FHEM kopieren (übliche RasPi-Installation: /opt/fhem/FHEM).
Dann geht sowas:

define Robbie Roomba980 <ip-addresse>:8883 <blid/username> <passwort>
define RobbieLog FileLog ./log/robbielog-%Y%m%d.log Robbie

Wie man die benötigten Angaben herausbekommt findet man bei dorita980. (Später baue ich das vielleicht auch noch ein.)

Im FileLog müsste dann einiges landen, z.B.

2017-03-06_22:24:10 Robbie lastTopic: wifistat
2017-03-06_22:24:10 Robbie lastContent: {"state":{"reported":{"localtimeoffset":60,"utctime":1488835450,"pose":{"theta":167,"point":{"x":642,"y":20}}}}}
2017-03-06_22:24:10 Robbie lastTopic: $aws/things/3117440832541720/shadow/update
2017-03-06_22:24:10 Robbie lastContent: {"state":{"reported":{"batPct":100,"dock":{"known":false},"bin":{"present":true,"full":false},"audio":{"active":false}}}}
2017-03-06_22:24:10 Robbie lastTopic: $aws/things/3117440832541720/shadow/update
2017-03-06_22:24:10 Robbie lastContent: {"state":{"reported":{"cleanMissionStatus":{"cycle":"none","phase":"charge","expireM":0,"rechrgM":0,"error":0,"notReady":0,"mssnM":32,"sqft":176,"initiator":"localApp","nMssn":19},"language":4,"noAutoPasses":false,"noPP":false,"ecoCharge":false}}}


Wenn nicht, dann mal...

set Robbie disconnect
set Robbie connect

Es gibt da am Anfang noch so ein paar Problemchen, die Verbindung zu halten.

Wahrscheinlich funktoniert die App nicht, während FHEM connected ist (und umgekehrt).

Gruß,
   Thorsten


FUIP

carlos

Cool, gleich mal ausprobiert und siehe da mein Robbie spricht auch mit mir.
Sehr gut, da kann man weiter drauf aufbauen.
2017-03-07_07:30:13 Robbie lastTopic: wifistat
2017-03-07_07:30:13 Robbie lastContent: {"state":{"reported":{"signal":{"rssi":-40,"snr":47}}}}
2017-03-07_07:30:19 Robbie lastTopic: wifistat
2017-03-07_07:30:19 Robbie lastContent: {"state":{"reported":{"signal":{"rssi":-39,"snr":49}}}}

Danke und 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,
so, die neue Version macht jetzt Readings draus.
Hoffentlich fragt jetzt keiner, was die Readings alle bedeuten. Das Modul wandelt alles, was vom Sauger kommt, stur in Readings um.
Ein paar davon kann ich vielleicht noch "aufhübschen", wie z.B. Zeitangaben oder IP-Adressen.
Gruß,
   Thorsten

FUIP

Markus-L

so - jetzt da mein Rechner wieder läuft die genaue Beschreibung wie das bei mir mit der Map funktioniert:

Basis des ganzen ist, dass es ein logfile gibt in dem das Reading xy: x_value,y_value drinnen vorkommt:
in meinem sieht es derzeit z.B. so aus:
2017-03-01_00:00:44 roomba charge
2017-03-01_00:00:44 roomba x: 0
2017-03-01_00:00:44 roomba y: 0
2017-03-01_00:00:44 roomba theta: 0
2017-03-01_00:00:44 roomba bin_present: true
2017-03-01_00:00:44 roomba bin_full: false
2017-03-01_00:00:44 roomba error: 0
2017-03-01_00:00:44 roomba initiator: manual
2017-03-01_00:00:44 roomba xy: 0,0


Davon brauche ich eigentlich nur die letzte Zeile für die Map.

die fhem.cfg hat folgende defines:



define FileLog_Roomba FileLog ./log/Roomba-%Y-%m.log roomba
attr FileLog_Roomba room Roomba

define roomba_logproxy logProxy
attr roomba_logproxy room Roomba

define RoombaPlot SVG roomba_logproxy:RoombaXY:CURRENT
attr RoombaPlot plotsize 800,420
attr RoombaPlot room Roomba


das RoombaXY.gplot sieht so aus:
# Created by FHEM/98_SVG.pm, 2017-03-03 17:32:50
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title ''
set ytics
set y2tics
set grid
set ylabel ""
set y2label ""
set xrange [-200:900]
set yrange [-300:800]

#roomba_logproxy Func:logProxy_xyFile2Plot(CreateRobiSvgLog(),4,"xy:")

plot "<IN>" using 1:2 axes x1y1 title 'Roomba' ls l0 lw 1 with lines


und die CreateRobiSvgLog funktion in in der 99_myutils
Die Funktion nimmt das aktuelle Logfile vom robi, und kopiert alle Zeilen die heute dazugekommen sind in ein neues Textfile. Als Rückgabe wert gibt es den Namen des neuen Textfiles zurück.
Ein Beispiel Name von einem Eingangslogfile ist Roomba-2017-03.log (für das März logfile)
Die Funktion ist derzeit nicht sehr variable, bzw. muss warscheinlich von jedem händisch auf sein LogfileName angepasst werden.
Das ganze habe ich deswegen gemacht, weil die logProxy_xyFile2Plot Funktion immer alle xy punkte eines Logfiles dargestellt hat. Dementsprechend habe ich ein Logfile gebraucht wo nur die Punkte eines Tages drinnen waren. Außerdem kommt es nur mit festen Dateinamen zurecht (beides nach meinem aktuellen Wissensstand).

sub CreateRobiSvgLog(){
   

   my $date = strftime("%Y-%m-%d", localtime);
   my $inputDate = strftime("%Y-%m", localtime);

   my $in_file_name ="log/Roomba-".$inputDate.".log";
   my $out_file_name="log/robi_svg.log";

   open (DATEI, $in_file_name) or die $!;
   my @lese_daten = <DATEI>;
   close (DATEI);


   open (DATEI, ">".$out_file_name) or die $!;
   my $zeile;
   foreach $zeile (@lese_daten){
     if(index($zeile, $date) >= 0){
        print DATEI $zeile;
     }
   }
   close (DATEI);

   return $out_file_name;
}


Thorsten Pferdekaemper

Hi,
das mit der Map muss ich mir nochmal genauer zu Gemüte führen und mir überlegen, wie man das allgemeingültig einbauen kann.
Es gibt jetzt wieder eine neue Version meines Moduls. Jetzt sind Zeiten, IP-Adressen und die SSID lesbar aufbereitet.

Kommandos (start, stop etc.) konnte ich noch keine einbauen, da der Sauger unseren Kleinen wecken würde. Da muss ich mal tagsüber Zeit finden. Ich glaube aber, dass ich im Prinzip weiß, wie es geht.

Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

Hi,
bei dieser Version gibt es jetzt auch "set Robbie start/stop/pause/resume/dock".
Gruß,
   Thorsten
FUIP

carlos

Hallo,
Du bist ja echt fleisig am Werk. Werde ich gleich mal testen.
Danke
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

Ma_Bo

Hey Thorsten,
super wie das hier vorwärts geht!!!

Ich habe zwar noch keinen Staubsaugerroboter, suche aber z.Z. nach einem.
Bisher konnte ich mich noch nicht entscheiden, aber dieser Beitrag hier bringt mich immer weiter hin zum 980.

Auch wenn es ein wenig OT ist, wie zufrieden seit ihr mit dem Roomba 980 und wo hakt es vielleicht?
Ich habe jetzt schon ein paar Videos und Berichte gesehen/gelesen und weiss halt noch nicht so recht, ob er wirklich seinen Preis wert ist.

Vielleicht kennt jemand ne günstige Quelle?

Grüße Marcel
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Thorsten Pferdekaemper

Zitat von: carlos am 11 März 2017, 15:11:05Du bist ja echt fleisig am Werk.
Danke. Da hat gar nicht mehr viel gefehlt. Das Problem ist nur, dass ich das ganze immer nur testen kann, wenn der Kleine nicht schläft...

Zitat von: Ma_Bo am 11 März 2017, 15:17:14Auch wenn es ein wenig OT ist, wie zufrieden seit ihr mit dem Roomba 980 und wo hakt es vielleicht?
Also ich habe keinen Vergleich. Ein Freund von mir hat einen Roomba (älteres und "kleineres" Modell) und noch einen anderen (keine Ahnung, was genau) und er sagt, dass der Roomba viel besser ist.
Ich kann nur sagen, dass Teil im Prinzip gut funktioniert. Man kann halt nicht erwarten, dass nach einmal Saugen alles picobello sauber ist. Man muss das Ding schon täglich laufen lassen.
Es hakt bei zwei Dingen:
Leichte, aber hohe Teppiche. Wenn ein Teppich zu leicht ist, dann schiebt er ihn eher weg, als dass er "hochklettert". Dabei kann es passieren, dass er sich aus dem Teppich eine Wand baut und abdrehen muss. Dadurch ist unserer schon einmal in einer Ecke hängen geblieben. Das passiert aber natürlich nur, wenn er keinen alternativen Weg hat. Wenn es einen alternativen Weg gibt, dann findet er ihn immer. Außerdem schafft er tatsächlich Absätze bis etwa 2cm Höhe.
Zweitens: Kabel. Z.B. Lautsprecherkabel verheddern sich in den Reinigungswalzen. Dann steckt das Teil fest bzw. zieht das, was an den Kabeln hängt ggf. mit sich. Das zwingt einen dazu, Kabel ordentlich zu verlegen. Man kann aber auch die "virtuelle Wand" aufstellen, aber dann wird dort nicht gesaugt.

Was bei allen Robot-Saugern wichtig ist: Sie wissen nicht, wenn irgendein Schmodder (Hundescheiße, Babybrei oder so) auf dem Bioden liegt. Das wird dann über die ganze Wohnung verteilt. Das ist mir noch nicht passiert, aber es gibt dazu gefühlt hunderte Videos.

Gruß,
   Thorsten


FUIP

Markus-L

#39
Hi,
auch von mir vielen Dank für deinen Einsatz. Das ging echt um einiges schneller als ich erwartet hatte!

Ich habe heute ebenfalls von meiner Lösung auf deine Umgestellt. Es hat alles auch soweit ganz gut funktioniert.

Aktuell bekomme ich aber ungefär jede Minute einen Logeintrag in meinen Haupt FHEM Log:

2017.03.12 21:40:47 1: 192.168.1.53:8883 disconnected, waiting to reappear (Robbie)
2017.03.12 21:40:49 1: 192.168.1.53:8883 reappeared (Robbie)
2017.03.12 21:41:47 1: 192.168.1.53:8883 disconnected, waiting to reappear (Robbie)
2017.03.12 21:41:49 1: 192.168.1.53:8883 reappeared (Robbie)
2017.03.12 21:42:47 1: 192.168.1.53:8883 disconnected, waiting to reappear (Robbie)
2017.03.12 21:42:49 1: 192.168.1.53:8883 reappeared (Robbie)
2017.03.12 21:42:49 1: 192.168.1.53:8883 disconnected, waiting to reappear (Robbie)
2017.03.12 21:42:54 1: 192.168.1.53:8883 reappeared (Robbie)


Ist das bei euch auch so?


edit: ach, mir ist nun aufgefallen, dass ich schon wieder eine neue Version habe: v2.2.5-2
Viel an der Kommunikation haben sie aber wohl nicht geändert. Dein Modul funktioniert soweit auch mit der neuen Version.
=>  es gibt jetzt ein Reading "mapUploadAllowed" - evtl. gibts bald auch ein Map Feature von iRobot direkt...

PsychoD

Moin zusammen,

wie cool - 1000 Dank an Thorsten für den Einsatz! Nachdem unser Roomba 780 sein Brot nach 6 Jahren verdient hat und immer mehr Alterserscheinungen bekommt, habe ich eben bei EBay ne günstige B-Ware vom 980 geschossen - ich freu mich schon das Modul auszuprobieren!

Viele Grüße

Det20

#41
Abgefahren ... Vielen Dank für die Arbeit, der 980 war eines der letzten (Standalone-) Geräte, die noch nicht im FHEM eingebunden sind/waren. Bin gespannt, was bei diesem Modul noch kommt.

Ich habe dorita980 wieder gelöscht, anscheinend brauche ich es nur wegen dem Kennwort. Die Mappe (rest980) wird korrekt gezeichnet (bekriegt sich aber mit Deinem Modul) wobei mir aufgefallen ist, dass Port 3000 bereits belegt ist (musste auf einen anderen wechseln). Da muss ich mal schauen wer da so horcht.

Also, vielen Dank nochmal für Deine Arbeit. Sehr geil!

PS: Würde mich freuen wenn Du es eincheckst, dann bin ich bei Updates immer mit dabei

Thorsten Pferdekaemper

Zitat von: Markus-L am 12 März 2017, 21:46:39Aktuell bekomme ich aber ungefär jede Minute einen Logeintrag in meinen Haupt FHEM Log:
Ist das immer noch so?

Zitat
=>  es gibt jetzt ein Reading "mapUploadAllowed" - evtl. gibts bald auch ein Map Feature von iRobot direkt...
Irgend eine Idee, was man damit anfangen kann? "upload" klingt irgendwie danach, dass man dem Robbie eine Karte hochladen kann.

Zu der Sache mit User/Passort: Momentan bin ich dran, die UDP-Kommunikation für's Discovery hinzubekommen. Das ist Voraussetzung  für die Ermittlung des Passworts.
Also wer dazu noch Ideen hat: https://forum.fhem.de/index.php/topic,69117.0.html

Gruß,
   Thorsten
FUIP

Det20

Könntest Du für den Moment noch den aktuellen Status vom Roomba einbauen? Dann könnte ich es direkt in FTUI integrieren.
Unter "cleanMissionStatus-phase" steht bei mir "run" während er läuft, "stop", wenn ich ihn gestoppt habe. "hmUsrDock" wenn er auf dem Weg ins Dock ist und "charge", wenn er im Dock wartet/lädt.

Thorsten Pferdekaemper

Zitat von: Det20 am 17 März 2017, 18:48:02
Könntest Du für den Moment noch den aktuellen Status vom Roomba einbauen?
Was meinst Du damit?
Gruß,
   Thorsten
FUIP