Roomba Staubsaugerroboter

Begonnen von Prof. Dr. Peter Henning, 10 September 2020, 16:40:34

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

#165
Wahrscheinlich haben die Herrschaften bei iRobot in dieser Version das API anders antworten lassen.

Abhilfe: Hinter Zeile 464. also hinter
$ret{"cmNotReady"} = numtobool($notr)
    if(defined($notr));

bitte einfach einfügen

  my $bat   = $dec->{'state'}->{'reported'}->{'batPct'};
  $ret{"battery"} = $bat
    if(defined($bat));


LG

pah

Edit: So wars ja auch gemeint.

loetmeister

#166
Hallo,

Danke für die Tipps/Hilfe.
Ich habe mal "sub reading" etwas verunstaltet, um die passenden MQTT Themen/Daten zu erhalten, egal wie sie strukturiert sind (das ist zumindest die Idee).
Schön ist das (noch) nicht, aber es kommen die bisher Fehlenden readings "battery", "progWeek" an....

sub reading($$){
  my ($name,$evt) = @_;
my %ret;
my $sub_ret;
 
  #main::Log 1,"============> $evt";
  if( $evt =~ /state....reported....signal/){
    $sub_ret = signale($evt);
    @ret{ keys %{$sub_ret} } = values %{$sub_ret};
  }
  if( $evt =~ /state....reported....pose/){
    $sub_ret = pose($name,$evt);
    @ret{ keys %{$sub_ret} } = values %{$sub_ret};
  }
  #}elsif( $evt =~ /bbrun/){
  #  main::Log 1,"[RoombaUtils] bbrun ".$evt;
  if( $evt =~ /cleanMissionStatus/){
    $sub_ret = mission($name,$evt);
    @ret{ keys %{$sub_ret} } = values %{$sub_ret};
  }
  if( $evt =~ /cleanSchedule/){
    #main::Log 1,"[RoombaUtils] schedule event ".$evt;
    $sub_ret = schedule($evt);
    @ret{ keys %{$sub_ret} } = values %{$sub_ret};
  }
  if( $evt =~ /(vacHigh)|(openOnly)|(binPause)|(carpetBoost)|(twoPass)|(schedHold)|(lastCommand)/){
    $sub_ret = settings($name,$evt);
    @ret{ keys %{$sub_ret} } = values %{$sub_ret};
  }
  #if( $evt =~ /state....reported....batPct/){
  if( $evt =~ /batPct/){
    $sub_ret = battery($evt);
    @ret{ keys %{$sub_ret} } = values %{$sub_ret};
  }
  if( $evt =~ /state....reported....dock/){
    $sub_ret = dock($evt);
    @ret{ keys %{$sub_ret} } = values %{$sub_ret};
  }

[...snip...]

if (%ret) {
  return {%ret};


  }else{
    my ($evt) = @_;
    main::Log 1,"[RoombaUtils] uncaught event ".$evt
      if( $evt ne "$name" );
    return
  }
}


Gruß,
Thomas

Prof. Dr. Peter Henning

Das ist in der Tat etwas verunstaltet und folgt nicht meiner Philosophie.

Erstens dachte ich, dass das mit battery jetzt erledigt sei Und zweitens habe ich bisher nichts davon gehört, dass progWeek auch nicht klappen würde.

LG

pah

loetmeister

#168
Hallo pah,

ja, progWeek wird bei meinem Roomba Modell mit cleanMissionStatus und batPct zusammen geschickt. Beides wurde von elsif( $evt =~ /cleanMissionStatus/) "blockiert". Es gibt noch mehr Abweichungen... die Daten sind alle da, leider nur anders zusammengestellt.

Falls es bei den anderen Modellen ebenfalls etwas unterschiedlich strukturiert ist, wäre es gut die Auswertung der MQTT Daten etwas flexibler zu gestalten. Was sich bestimmt eleganter als in meinem "quick & dirty" Ansatz lösen lässt...

Ich wollte mir noch ein weitere Werte Auslesen (batInfo, mName, mDate; estCap; softwareVer), "estCap"/"bbchg3" ist z.B. bei mir in:
{"state":{"reported":{"bbmssn":{"nMssn":8,"nMssnOK":4,"nMssnF":4,"aMssnM":0,"nMssnC":0,"aCycleM":0},"bbpause":{"pauses":[13,14,0,0,0,0,0,0,0,0]},"bbrstinfo":{"nNavRst":0,"nMobRst":0,"causes":"0000"},"bbpanic":{"panics":[17,14,11,15,11]},"bbchg3":{"nAvail":6,"estCap":2050},"r2a":{"monits":false,"params":{"monitIds":[],"monitPeriodMs":1000,"monitConditions":"8"}}}}}


EDIT: Kann jemand bestätigen, ob "cCount" chargeCount, also Anzahl der Ladevorgänge ist? Als Teil von batInfo wäre das durchaus plausiebel.
$dec->{'state'}->{'reported'}->{'batInfo'}->{'cCount'};

Gruß,
Thomas

FSausF

Zitat von: Prof. Dr. Peter Henning am 10 September 2020, 16:40:34
Ich habe über die Anbindung der Roomba-Roboter einen Wiki-Eintrag geschrieben, das Hilfsmodul 99_RoombaUtils.pm befindet sich ab sofort im FHEM-Ordner contrib/Roomba.
https://wiki.fhem.de/wiki/Roomba
Es gibt in diesem Wiki-Eintrag auch eine noch etwas rudimentäre Beschreibung, wie man die interaktiven Reinigungskarten erzeugt und verwaltet. [/b]
Hallo zusammen,

Das Wiki ist in Zusammenhang mit etwas Erfahrung und Geduld super geglückt!
Ich würde nicht sagen, dass die Einbindung des roomba 960 ein Durchmarsch war, aber möglich.

Chapeau für Eure detaillierte Forschung zum Thema!

Es ist ein wenig gewöhnungsbedürftig, dass das Gerät von sich aus keine Readings an fhem sendet, wenn es aufgrund des eigenen Zeitplans loseiert. Aber man kann es ja von fhem losschicken lassen...

Allein bei den Reinigungskarten hab' ich noch Probleme. Daher folgende Fragen:
1.) Die IP-Adresse für den Link im Reading cmMap scheint im Coding statisch zu sein?
2.) Die Map-Verwaltung tut bei mir nicht so richtig. Das Löschen alter Einträge mit so etwas wie "set roomba mapdel 1" funktioniert nicht.
3.) Die Zusammenfassung der Karten am Ende der Reinigung legt mein fhem für eine ganze Zeit komplett lahm. Kann man die Kartenfunktion komplett abschalten? Reicht es, dafür das SVG-Template und die userattribs im Device zu löschen?
4.) Lässt sich das Löschen alter Reinigungskarten über das Modul steuern? Wäre da nicht so ein Attribut wie "nur die letzten X Pfade behalten" praktisch?

Danke im Voraus für Euer Hirnschmalz,

FSausF

Prof. Dr. Peter Henning

ZitatDas Wiki ist in Zusammenhang mit etwas Erfahrung und Geduld super geglückt!
Tja. Pädagoge.

Zitat1.) Die IP-Adresse für den Link im Reading cmMap scheint im Coding statisch zu sein?
Oops, das ist noch ein Bug. Werde ich demnächst beheben

Zitat2.) Die Map-Verwaltung tut bei mir nicht so richtig. Das Löschen alter Einträge mit so etwas wie "set roomba mapdel 1" funktioniert nicht.
Damit kann ich nicht viel anfangen.

Zitat3.) Die Zusammenfassung der Karten am Ende der Reinigung legt mein fhem für eine ganze Zeit komplett lahm. Kann man die Kartenfunktion komplett abschalten? Reicht es, dafür das SVG-Template und die userattribs im Device zu löschen?
Es reicht, das Attribut SVG_room zu löschen.

Zitat4.) Lässt sich das Löschen alter Reinigungskarten über das Modul steuern? Wäre da nicht so ein Attribut wie "nur die letzten X Pfade behalten" praktisch?
Erstens: Ja. Ist in Arbeit. Zweitens: Das will ich gar nicht.

LG

pah

knorxi

Hallo zusammen,
Auch von mir ein großes Lob zu eurer Arbeit.
Bei meinem Roomba 980 hatte ich das Problem, dass er während der SSL-Aushandlung sehr langsam antwortet.
Leider so langsam, dass in HttpUtils der Standard-Timeout zuschlägt und die Verbindung kappt (siehe Bild Wireshark-Trace im Anhang).
Bei mir blieb der Client einfach "disconnected" ohne Fehlermeldung.
Ich habe mir so geholfen, dass ich ein neues Attribut "TIMEOUT" in 00_MQTT2_CLIENT.pm hinzugefügt habe.
Hier der Patch:
--- /opt/fhem/FHEM/00_MQTT2_CLIENT.pm   2021-01-29 11:03:11.661987165 +0100
+++ 00_MQTT2_CLIENT_neu.pm      2021-01-29 11:02:13.092978830 +0100
@@ -51,6 +51,7 @@
     subscriptions
     SSL
     sslargs
+    TIMEOUT
     username
   );
   use warnings 'qw';
@@ -282,6 +283,11 @@
     $hash->{SSL} = $param[0] ? $param[0] : 1;
   }

+  if($attrName eq "TIMEOUT") {
+    delete($hash->{TIMEOUT});
+    $hash->{TIMEOUT} = $param[0] if($type eq "set");
+  }
+
   if($type eq "set" && $attrName eq "ignoreRegexp") {
     my $re = join(" ",@param);
     return "bad $devName ignoreRegexp: $re" if($re eq "1" || $re =~ m/^\*/);


Und dann noch das TIMEOUT Attribut auf 6 Sekunden gestellt:
attr RoombaFegerClient TIMEOUT 6

Da ich kein Perl-/ FHEM-Experte bin, weiß ich nicht, ob das so OK ist.
Vielleicht könnte man den Patch oder etwas Besseres zu 00_MQTT2_CLIENT.pm hinzufügen.

Auch ich habe die Probleme mit "Maps" wie FSauF.
Habe in die setting-Funktion in 99_RoombUtils.pm in den else-Zweig mal eine zusätzliche Log-Zeile hinter $cmd=... eingefügt.
main::Log 1,"[RoombaUtils] setting: cmd: ".$cmd;
Im Log sieht man dann nach
set RoombaFeger maplist
folgendes:
[RoombaUtils] setting: cmd: delta {"state": {"vacHigh":false}}
Da scheint also noch etwas schief zu gehen.



MichaelT

Hallo pah,

danke auch von meiner Seite.
Ich habe bei mir das Problem, dass beim Verbindungsaugbau eine Fehler kommt.

HttpUtils: https://192.168.4.145:8883/: Can't connect(2) to https://192.168.4.145:8883:  SSL wants a read first

Internals:
   BUF       
   CFGFN     
   DEF        192.168.4.145:8883
   DeviceName 192.168.4.145:8883
   FUUID      60154f0e-f33f-a152-bf40-7027f4812d986ff8
   NAME       myRoombaClient
   NEXT_OPEN  1612009737.4758
   NR         147929
   PARTIAL   
   SSL        1
   STATE      disconnected
   TYPE       MQTT2_CLIENT
   clientId   8...0
   connecting 1
   nextOpenDelay 5
   READINGS:
     2021-01-30 13:28:52   state           disconnected
   sslargs:
     SSL_version SSLv23
Attributes:
   SSL        1
   autocreate simple
   clientId   8...0
   mqttVersion 3.1.1
   room       Roomba
   sslargs    SSL_version:SSLv23
   username   8...0
   verbose    5



[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=1


Einer eine Idee was das sein könnte
Danke schon mal

Gruß
Michael

Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

Prof. Dr. Peter Henning

#173
ZitatDa scheint also noch etwas schief zu gehen.
Nö, das ist vorerst (!) so beabsichtigt.

@MichaelT: https://forum.fhem.de/index.php?topic=43794.0

LG

pah

MichaelT

Zitat von: Prof. Dr. Peter Henning am 30 Januar 2021, 14:22:41

@MichaelT: https://forum.fhem.de/index.php?topic=43794.0


Danke pah,

Hinweis war gut. Habe nun das Timeout von knorxi, dann geht's.

Schönes WE
Michael
Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

delMar

#175
Hallo zusammen,

für mich ist die Reinigung einzelner Räume der häufigste Anwendungsfall. Ein reines "Start" führe ich eigentlich nie aus.
Ich besitze einen Roomba i7, Firmware 3.12.

Folgende Ergänzungen habe ich dafür gemacht:


# in 99_RoombaUtils.pm
my %rooms = ("Kueche" => {'regionId' => 7, 'type' => 'rid'},
             "Wohnzimmer" => {'regionId' => 5, 'type' => 'rid'});

# nach sub command eine neue Methode 'cleanRoom' einfügen

sub cleanRoom($$$$) {
  my ($name,$pmapId,$userPmapvId,$evt) = @_;
  my $hash = $main::defs{$name};

  my @dings = split(' ',$evt);
  my $roomName = $dings[1];
  my $regionId = $rooms{$roomName}{'regionId'};
  my $regionType = $rooms{$roomName}{'type'};

  my $cmd = 'cmd {"command": "start", "pmap_id": "'.$pmapId.'", "regions": [{"region_id": "'.$regionId.'", "type": "'.$regionType.'"}], "user_pmapv_id": "'.$userPmapvId.'", "time": '.time().', "initiator": "localApp"}';
  return $cmd;
}


Das setList im MQTT-Device um folgenden Eintrag ergänzen:

cleanRoom:Kueche,Wohnzimmer {roomba::cleanRoom($NAME,"5xxxxxxxxxxxxxxxxxxxxw","2xxxxxxxxxxx4",$EVENT)}


Der Parameter 5xxxxxxxxxxxxxxxxxxxxw kommt aus dem Reading state_reported_lastCommand_pmap_id
Der Parameter 2xxxxxxxxxxx4 kommt aus dem Reading state_reported_lastCommand_user_pmapv_id

ID und Type für einen Raum bekommt man, indem man in der App den Reinigungsbefehl für einen Raum ausführt.
Die richtigen Werte sind dann in den Readings state_reported_lastCommand_regions_1_region_id und state_reported_lastCommand_regions_1_type ersichtlich.
Wenn man in der App mehrere Räume zur Reinigung auswählt, gibt es entsprechende weitere Readings (..._regions_2_region_...).

Möchte man mehrere Etagen reinigen, empfehle ich, mehrere 'cleanRoom' Befehle in setList anzulegen. Die Etage definiert sich über pmap_id und user_pmapv_id.

cleanErdgeschoss:Kueche,Wohnzimmer {roomba::cleanRoom($NAME,"5xxxxxxxxxxxxxxxxxxxxw","2xxxxxxxxxxx4",$EVENT)}
cleanObergeschoss:Badezimmer,Schlafzimmer{roomba::cleanRoom($NAME,"anderePmapId","andereUserPmapvId",$EVENT)}

Ich hatte selber noch nicht die Zeit dazu, das umzusetzen, werde es aber bei Gelegenheit nachreichen. Ebenso das gleichzeitige Ausführen für mehrere Räume.
Es sollte übrigens für alle Geräte, die Einzelraumreinigung unterstützen (zB auch Braava Jet m6) funktionieren, das konnte ich aber noch nicht verifizieren.

Ich weiß auch nicht, wie lange pmapId und user_pmapv_id stabil sind, bislang funktionieren die Werte, die ich einmalig hinterlegt habe.

Feedback welcome

schöne Grüße
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

FSausF

Ich bin da jetzt voll aus der Kurve geflogen...

Für ein Paar Tage ging alles prächtig: FHEM hat den Roomba losgeschickt, nach gegebenenfalls manueller Aktualisierung des Devices die Reinigungskarte angezeigt, und gut.

Heute dann das Ende: Der Roomba wurde von fhem losgeschickt und hat seine Runde beendet.
Die Reinigungskarte wurde jedoch nicht fortgeschrieben. Seitdem er in seine Basis zurückgekehrt ist, spricht er nicht mehr mit fhem.
Mit der Roomba-App schon.

Ein Neustart von fhem bringt nix, auch nicht auf Debian-Ebene (PI).
Das MQTT-Device sagt auf Geschwätzigkeitslevel 5:
Zitat2021.02.02 21:37:42 5: HttpUtils url=https://192.168.richtig.richtig:8883/
2021.02.02 21:37:42 4: IP: 192.168.RICHTIG.RICHTIG -> 192.168.RICHTIG.RICHTIG
2021.02.02 21:37:42 5: HttpUtils url=https://192.168.richtig.richtig:8883/
2021.02.02 21:37:42 4: IP: 192.168.2.47 -> 192.168.RICHTIG.RICHTIG

Es sieht mir so aus, als scheitert das auf unterster Protokoll-Ebene.
Erinnere ich mich an den Wiki-Eintrag und führe auf Debian
Zitatpython3 roomba-gettpassword
aus, kriege ich so etwas wie ein Lebenszeichen, das dann aber mir einem Timeout endet:
ZitatReceived: {
  "hostname": "Roomba-3192C22492019700",
  "nc": 0,
  "ip": "192.168.RICHTIG.RICHTIG",
  "ver": "3",
  "robotname": "Heinzelmann",
  "sw": "v2.4.6-3",
  "sku": "R960040",
  "proto": "mqtt",
  "mac": "RICHTIG",
  "cap": {
    "pose": 1,
    "edge": 1,
    "eco": 1,
    "langOta": 1,
    "svcConf": 1,
    "multiPass": 2,
    "pp": 1,
    "binFullDetect": 1,
    "ota": 2,
    "maps": 1
  }
}
Roomba (Heinzelmann) IP address is: 192.168.RICHTIG.RICHTIG
Connection Error timed out
Traceback (most recent call last):
  File "roomba-getpassword", line 11, in <module>
    load_entry_point('Roomba980-Python==1.2.3', 'console_scripts', 'roomba-getpassword')()
  File "/home/pi/.local/lib/python3.5/site-packages/roomba/getpassword.py", line 34, in main
    Password(file=arg.configfile)
  File "/home/pi/.local/lib/python3.5/site-packages/roomba/password.py", line 41, in __init__
    self.get_password()
  File "/home/pi/.local/lib/python3.5/site-packages/roomba/password.py", line 138, in get_password
    wrappedSocket.send(packet)
  File "/usr/lib/python3.5/ssl.py", line 871, in send
    return socket.send(self, data, flags)
socket.timeout: timed out
In meiner /etc/ssl/openssl.cnf habe ich am Ende die vermeintlich magischen Zeilen zu SSL-Problemen eingefügt, aber das rockt es nach einem Neustart leider nicht:
Zitat[ssl_default_sect]
   MinProtocol = TLSv1.2
   CipherString = DEFAULT:@SECLEVEL=1

Warum spricht das Aas seit dem Docken nicht mehr mit fhem und wie locke ich ihn aus der Reserve?

Ideen?

Prof. Dr. Peter Henning

Ist mir auch schon passiert, die Ursache ist noch nicht ganz klar.

Abhilfe: Für 10 Sekunden die Batterie des Roomba ausbauen. Danach sollte es wieder gehen.

LG

pah

delMar

Hier noch das geplante Update zum Saugen einzelner Räume, mehreren Etagen, und auch mehreren Räumen.

Die IDs werden jetzt direkt in 99_RoombaUtils hinterlegt.
Das macht das setList schlanker. Nachteil: dafür muss man bei einer Änderung RoombaUtils neu laden.
Frage an die Runde: Geht das eigentlich zur Laufzeit? Oder muss ein komplettes shutdown restart gemacht werden?

my %rooms = ("EG" => {"__settings" => {"pMapId" => "5xxxxxxxxxxxxxxxxxxxxw", "userPmapvId" => "2xxxxxxxxxxxxxx4"},
                      "Kueche" => {"regionId" => 7, "type" => "rid"},
                      "Esszimmer" => {"regionId" => 1, "type" => "rid"},
                      "Eingangsbereich" => {"regionId" => 2, "type" => "rid"},
                      "WC_EG" => {"regionId" => 4, "type" => "rid"},
                      "Abstellraum" => {"regionId" => 6, "type" => "rid"},
                      "Wohnzimmer" => {"regionId" => 5, "type" => "rid"}
                     },
             "OG" => {"__settings" => {"pMapId" => "Hxxxxxxxxxxxxxxxxxxxxg", "userPmapvId" => "2xxxxxxxxxx4"},
                      "Buero" => {"regionId" => 1, "type" => "rid"},
                      "Flur" => {"regionId" => 5, "type" => "rid"},
                      "Schrank" => {"regionId" => 10, "type" => "rid"},
                      "WC_OG" => {"regionId" => 20, "type" => "rid"},
                      "Lounge" => {"regionId" => 22, "type" => "rid"},
                      "Schlafzimmer" => {"regionId" => 23, "type" => "rid"},
                      "Badezimmer" => {"regionId" => 24, "type" => "rid"}
                     },
             "KG" => {"__settings" => {"pMapId" => "6xxxxxxxxxxxxxxxxxxxxA", "userPmapvId" => "2xxxxxxxxxx9"},
                      "Studio" => {"regionId" => 1, "type" => "rid"},
                      "Rumpelkammer" => {"regionId" => 2, "type" => "rid"},
                      "Flur" => {"regionId" => 3, "type" => "rid"}
            });


Die Methode cleanRoom ändert sich in folgender Weise.


sub cleanRoom($$$) {
  my ($name,$levelName,$evt) = @_;
  my $hash = $main::defs{$name};

  my @evts = split(' ',$evt);
  my $pmapId = $rooms{$levelName}{__settings}{pMapId};
  my $userPmapvId = $rooms{$levelName}{__settings}{userPmapvId};

  my $regionString = '"regions": [';
  my $nrRegions = @evts;

  for(my $regIdx = 1; $regIdx < $nrRegions; $regIdx++){
    my $regionName = $evts[$regIdx];
    my $regionId = $rooms{$levelName}{$regionName}{regionId};
    my $regionType = $rooms{$levelName}{$regionName}{type};

    $regionString = $regionString.'{"region_id": "'.$regionId.'", "type": "'.$regionType.'"}';
    if ($regIdx +1 < $nrRegions) {
      $regionString = $regionString.',';
    }
  }
  $regionString = $regionString.']';

  my $cmdString = '{"command": "start", "pmap_id": "'.$pmapId.'", '.$regionString.', "user_pmapv_id": "'.$userPmapvId.'", "ordered": 1, "time": '.time().', "initiator": "localApp"}';
#  main::Log 1,"============>cleanRoom: $cmdString";
  my $cmd = 'cmd '.$cmdString;
  return $cmd;
}


Entsprechend ändert sich auch setList

cleanBasement:Rumpelkammer,Studio,Flur {roomba::cleanRoom($NAME,"KG",$EVENT)}
cleanGroundfloor:Kueche,Wohnzimmer,Esszimmer,Eingangsbereich,WC_EG,Abstellraum {roomba::cleanRoom($NAME,"EG",$EVENT)}
cleanUpperfloor:Buero,Flur,Schrank,WC_OG,Lounge,Schlafzimmer,Badezimmer {roomba::cleanRoom($NAME,"OG",$EVENT)}


Damit ist jetzt auch das Reinigen mehrerer Räume möglich. Zum Beispiel

set iRobotRoomba cleanGroundfloor Kueche Esszimmer Wohnzimmer


Die Reihenfolge der Reinigung entspricht der Reihenfolge, wie die Räume angegeben werden. Wer das nicht möchte, kann in cleanRoom das Attribut "ordered":1 wegnehmen.

Ich würd mich sehr freuen, wenn diese Funktionalität es ins contrib schafft. Meine Perl-Syntax ist stark verbesserungswürdig, aber so ist das nun mal mit diesen Java-Entwicklern ;-)
Verbesserungsvorschläge zum Coding-Style nehme ich gern an.

Grundsätzlich werde ich wohl noch daran tüfteln, zb die IDs als Attribute zu hinterlegen, anstatt direkt im Utils, um etwas flexibler auf Änderungen reagieren zu können. Ideal wäre, den gesamten rooms-Hash (oder den Großteil daraus) direkt ins FHEM-UI zu bekommen.

schöne Grüße
Martin

Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

FSausF

Zitat von: Prof. Dr. Peter Henning am 03 Februar 2021, 08:05:18
Ist mir auch schon passiert, die Ursache ist noch nicht ganz klar.
Abhilfe: Für 10 Sekunden die Batterie des Roomba ausbauen. Danach sollte es wieder gehen.
Ich glaube, hier gibt es eine noch kürzere Lösung als den Ausbau der Batterie - zumindest hat das bei mir gerockt:
Neustart des Roboters, und zwar so:
https://homesupport.irobot.com/app/answers/detail/a_id/10881/~/neustart-oder-reset-des-roboters

Was mir auffiel ist Folgendes:
Ich habe den Roboter sowohl gestern als auch heute dann mit der App auf Reisen geschickt. Dabei konnte er auch für die App keine Karte erzeugen. Also hat er für sich schon einen Knoten im Hirn. Kann wohl auch bei KI passieren.

Ich habe folgenden Verdacht:
Wenn ich es richtig verstehe, wird die Vektor-Karte in fhem erzeugt, wenn der Roboter dockt.
Kann das sein, dass der Zustand dann unsicher wird, wenn während der Berechnung der MQTT-Timeout zuschlägt und auf einer Seite der Leitung noch was unbestätigt in der Queue hängt?
Und, dass dann vonseiten fhem der Reinigungsauftrag protokollarisch nicht so richtig als abgeschlossen vermerkt wird? Oder auf Seite des Roboters?
Wie wäre es, während der Kartenberechnung so etwas wie einen keepalive einzubauen?

Ich bin nach dem Reset fürs erste wieder häppi, werde die Kartenerzeugung abklemmen und mal schauen, ob das Ding dann länger als drei Tage stabil integriert durchhält. Ich werde berichten.

Wenn ich meine laienhaften Finger in den Dienst der weiteren Forschung stellen kann, lass' es mich bitte wissen!