Roomba Staubsaugerroboter

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

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Nene, nix laienhaft, das ist eben keine Hash reference, sondern eine Array reference - habe ich offenbar nicht richtig gelesen.

Das werde ich korrigieren.

LG

pah

hapege

Guten Morgen pah,

(wow, sehr-früh-Aufsteher ;-) )

Um sauber zu sein sollte wahrscheinlich auch die "setsched2" aus der Produktivversion herausgenommen werden. Hier habe ich versucht, Zeitpläne der app zu deaktivieren - zieht aber offenbar nicht. Aktuell weiß ich nicht, wie man beim I7 die Zeitpläne setzen oder verändern kann, außer mit der app. Hast Du eine Idee?

Ebenso fairerweise ist es zu erwähnen, dass die "cleanRoom", "createFloor" und "createRoom" von delMar sind, die habe ich nur reinkopiert, alle drei funktionieren.

Was ich noch nützlich finde, auch wenn die Aufnahme von doppeltem code irgendwie schlimm ist, ist die "rewriteSVG". Mich hat gestört, dass "delmap" zwar die map aus dem xml löscht, aber die svg erst aktualisiert wird beim nächsten run - wenn also die svg neu geschrieben wird. Somit wirkt delmap nicht auf die aktuelle Karte. Das geht sicher eleganter als Codeanteile zu kopieren, ich habs aber nicht anders hinbekommen...

Schönen Sonntag,

hapege
Developer: 70_ESCVP21net.pm, 70_SVDRP.pm
Mitglied FHEM e.V.

Prof. Dr. Peter Henning

Hier ist erst einmal eine Zwischenversion, in welcher die Anzeige von cleanSchedule2 korrigiert ist.

LG

pah

hapege

Hi,

Danke, und jein - die schedules werden nun ausgewertet, bbrun (Runtime), bbsys (SysUptime), ChargeState aber nicht mehr.
Reinigungszyklus habe ich nicht probiert, die Katzen schlafen grad so schön ;-)

Danke und schönen Abend,

hapege
Developer: 70_ESCVP21net.pm, 70_SVDRP.pm
Mitglied FHEM e.V.

Prof. Dr. Peter Henning

Runtime und Sysuptime habe ich rausgeworfen - das sind m.E. keine sinnvollen Daten, weil cmTime schon die Laufzeit für die gegenwärtige Mission enthält.

LG

pah

hapege

Hi pah,

na ja, das sind schon ganz andere, zusätzliche Daten:
cmTime = Laufzeit der letzten Mission
Runtime = Gesamtlaufzeit aller bisherigen Missionen
SysUptime = genau das ;-) (wie lange lebt der Robot schon bei mir...)

Ich halte das - klar, ebenfalls subjektive "m.E." - für interessant, aber es ist Dein Modul. Kann sich ja jeder selbst reinkopieren.

LG,

hapege
Developer: 70_ESCVP21net.pm, 70_SVDRP.pm
Mitglied FHEM e.V.

Prof. Dr. Peter Henning

Meine Arbeit am Roomba wird seit 2 Wochen dadurch blockiert, dass einer meiner beiden Roboter die Zusammenarbeit jetzt komplett verweigert. Mit der App kann ich ihn zwar noch steuern - aber auf jede Kontaktaufnahme seitens FHEM bekomme ich nur

Zitat021.04.26 09:42:58 4: IP: 192.168.0.xx -> 192.168.0.xx
2021.04.26 09:43:01 4: HttpUtils: https://192.168.0.48:8883/: Can't connect(2) to https://192.168.0.xx:8883:  SSL wants a read first

Ich habe wirklich jetzt schon jeden Trick probiert - sogar die Kiste komplett zurückgesetzt. Bisher hat noch nichts gewirkt.

LG

pah

MichaelT

Zitat von: Prof. Dr. Peter Henning am 26 April 2021, 09:53:40
Meine Arbeit am Roomba wird seit 2 Wochen dadurch blockiert, dass einer meiner beiden Roboter die Zusammenarbeit jetzt komplett verweigert. Mit der App kann ich ihn zwar noch steuern - aber auf jede Kontaktaufnahme seitens FHEM bekomme ich nur

Ich habe wirklich jetzt schon jeden Trick probiert - sogar die Kiste komplett zurückgesetzt. Bisher hat noch nichts gewirkt.

LG

pah

Hattest Du den TIMEOUT von knorxi mal probiert (wahrscheinlich ja  8)). Der hatte bei mir funktioniert. Hatte gleiches Fehlerbild.
https://forum.fhem.de/index.php/topic,114166.msg1126994.html#msg1126994
Gruß Michael.
Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

Prof. Dr. Peter Henning

Ich versuche gerade, das irgendwie einzugrenzen, bin aber bis inklusive Donnerstag komplett unter Wasser.

LG

pah

delMar

Zitat von: MichaelT am 26 April 2021, 19:54:42
Hattest Du den TIMEOUT von knorxi mal probiert

Ich hab das Problem nicht. Zumindest nicht, dass ich wüsste (obwohl die Reaktion auf ein Start-Kommando gelegentlich länger auf sich warten lässt...)

Trotzdem ein Gedanke:
Ich hab im global sslVersion Attribut TLSv12 drin stehen.
Entsprechend dem Wireshark Screenshot von knorxi hat er auch TLSv12.
Vielleicht ist diese Version auch noch nachgiebiger im Bezug auf dieses Problem.

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.

Prof. Dr. Peter Henning

#325
Es ist ja nicht einfach, mich zu verblüffen - aber mit diesem TIMEOUT klappt es tatsächlich wieder. Danke für den Hinweis, denn das hatte ich eben noch nicht probiert.

LG

pah

Edit: Neueste Nachricht von Rudi König in dieser Sache:

ZitatIch habe dieses Attribut jetzt unter dem Namen connectTimeout in MQTT2_CLIENT eingebaut, allerdings habe ich Schwierigkeiten vorzustellen, warum ein Timeout als "SSL wants a read first" gemeldet wird.

Das heißt: Nach dem nächsten Update muss man ggf. das Attribut TIMEOUT durch connectTimeout ersetzen.

LG

pah

hapege

#326
Hi pah,

ich habe einen reprodzierbare Fehlermeldung aus den roombautils bei jedem restart:

2021.05.02 11:25:13 1: PERL WARNING: Use of uninitialized value in multiplication (*) at ./FHEM/99_RoombaUtils.pm line 814.
2021.05.02 11:25:13 3: eval: my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $EVTPART10=
.....


Ich glaube das auch zu verstehen - in line 814 wird benutzt

$evtptr->{'sqft'}


Und den Wert gibts in der Message vom I7 offenbar nicht:

"cleanMissionStatus": {"cycle": "none", "phase": "charge", "expireM": 0, "rechrgM": 0, "error": 0, "notReady": 0, "mssnM": 0, "expireTm": 0, "rechrgTm": 0, "mssnStrtTm": 1619859625, "initiator": "schedule", "nMssn": 66}


Wenn ich das richtig sehe, wir die sub "mission" nur aufgerufen, wenn ein "cleanMissionStatus" in der Meldung steckt, und da fehlt halt "sqft". Mein I7 hat den Parameter außerhalb der "cleanMissionStatus" in "bbrun":

"bbrun": {"nOvertemps": 0, "nEvacs": 50, "nCBump": 0, "nWStll": 0, "nMBStll": 1203, "nPanics": 153, "nPicks": 271, "nOpticalDD": 2, "nPiezoDD": 0, "nScrubs": 2, "nStuck": 18, [b]"sqft": 131,[/b] "min": 37, "hr": 34, "nCliffsF": 6705, "nCliffsR": 0}


Was ich nicht ganz verstehe: Ich würde den Fehler dann jedes Mal bei einer Message erwarten (sqft fehlt immer, wenn nicht gerade ein Saugvorgang läuft/gelaufen ist), und nicht nur beim Restart. Passiert aber nicht bei jeder Message, also irgendwo hat meine vorsichtige Analyse eine Haken, oder ich übersehe etwas...

Ich habe das in der sub "mission" mal so probiert zu fixen:

  # hapege
  if(defined($evtptr->{'sqft'})) {
  my $sqm   = int($evtptr->{'sqft'}*10/10.7639)/10;
  main::Log 1,"[RoombaUtils] sqft is defined with value $sqm ";
  $retptr->{"cmArea"}      = $sqm." m²";
  }
  # /hapege


und in der sub "bbrun" (die "defined" Abfrage habe ich drin gelassen, falls "sqft" bei anderen Roombas nicht enthalten ist):

sub bbrun {
  #-- getting events of the type
  # {"state":{"reported":{"bbrun"}}}
  my ($evtptr,$retptr) = @_;
  my $runh = $evtptr->{'hr'};
  my $runm = $evtptr->{'min'};
  my $evacs = $evtptr->{'nEvacs'};
  $retptr->{"Evacuations"} = $evacs;
  $retptr->{"Runtime"} = $runh.":".$runm;
  $retptr->{"Runtime2"} = int($runh / 24)."d ".($runh % 24)."h ".$runm."m";
 
  if(defined($evtptr->{'sqft'})) {
    my $sqm   = int($evtptr->{'sqft'}*10/10.7639)/10;
    main::Log 1,"[RoombaUtils] sqft is defined with value $sqm ";
    $retptr->{"bbrunArea"} = $sqm." m²";
  }

  return
}


Damit kriege ich (im testweise eingefügten neuen reading "bbrunArea") den Wert für die Fläche geliefert - ich wollte sehen obs klappt.

Damit ist der Fehler beim restart / in cleanMissionStatus weg.

Schönen Sonntag,

hapege

UPDATE:
Mein I7 hat am 21.4. ein FW update auf 3.14.12 eingespielt. Seit diesem Datum liefert er bei im Rahmen von "cleanMissionStatus" für mssnM und sqft immer "0". Damit ist cmArea und cmTime nun immer "0".
"sqft" bei bbrun ist der gesamte bisher gereinigte Bereich (also Summe aller Mission), allerdings in 10e-2 square feet. Muss also mit 100 multipliziert werden, um die "echten" sqft zu bekommen, bzw für Quadratmeter:
int($evtptr->{'sqft'}*100/10.7639);
Macht die Readings für "RunTime" und "SysUptime" wieder ein bisschen interessanter  ;)

@pah: Du könntest in Deinen Berechnung eine "10" herauskürzen, "*(10/10.7639)/10" ist recht identisch zu "/10.7639" ;), oder übersehe ich was?

UPDATE2:
Ich bastle gerade daran, aus der "mssnStrtTm" die Dauer der letzten CleanMission zu berechnen (also das verlorengegangene "cmTime").
Dazu ergänze ich in der sub "mission":


# hapege: get time
my $MissionStartTime = $evtptr->{'mssnStrtTm'};
$hash->{helper}{MissionStartTimeUnix} = $MissionStartTime;
my $cmStartTime = calctime($MissionStartTime);
$retptr->{"cmStartTime"} = $cmStartTime;
# /hapege


Und ergänze in der sub "missionmanager" hiter dem Aufruf der "finalizemap":


# hapege - calculate time
my $missiontime = calctimediff($hash->{helper}{MissionStartTimeUnix});
main::fhem("setreading $name cmTime2 $missiontime");
# /hapege - calculate time


Und definiere zwei neue helper subs:


sub calctime ($){
  my ($epoch) = @_;
  my $LocalTZ = DateTime::TimeZone->new( name => 'local' );
  my $dt = DateTime->from_epoch( epoch => $epoch, time_zone => $LocalTZ );
  my $hour   = $dt->hour; # 0-23
  my $minute = $dt->minute; # 0-59 - also 'min'
  my $second = $dt->second; # 0-61 (leap seconds!) - also 'sec'
  return $hour.':'.$minute;
}

sub calctimediff ($){
  my ($epoch) = @_;
  my $now = time;
  my $timediff = $now - $epoch;
  my $dt = DateTime->from_epoch( epoch => $timediff);
  my $hour   = $dt->hour; # 0-23
  my $minute = $dt->minute; # 0-59 - also 'min'
  my $second = $dt->second; # 0-61 (leap seconds!) - also 'sec'
  return $hour.':'.$minute;
}


Damit das läuft braucht's noch unter "package" ein
use DateTime;

"cmTime2" kann man noch passender benennen, ich wollte aber nicht zu sehr von pahs Nomenklatur abweichen.
Developer: 70_ESCVP21net.pm, 70_SVDRP.pm
Mitglied FHEM e.V.

marboj

Hallo zusammen,

kurze Frage: Ist es richtig, dass immer, wenn der Roomba einen Job startet und beendet, 2 geänderte Parameter vorhanden sind?

Gruß
Marco
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

Prof. Dr. Peter Henning

Zitat@pah: Du könntest in Deinen Berechnung eine "10" herauskürzen, "*(10/10.7639)/10" ist recht identisch zu "/10.7639" ;), oder übersehe ich was?
Ja, die Rundung. Die anderen Sachen baue ich bei Gelegenheit gern ein. Allerdings ist bei mir derzeit "Land unter" wegen eines neuen Forschungsprojektes.

Zitatkurze Frage: Ist es richtig, dass immer, wenn der Roomba einen Job startet und beendet, 2 geänderte Parameter vorhanden sind?
Was ist damit gemeint?

LG

pah

marboj

Beim Start des Roomba wird der 1. Wert des Parameters geändert, beim Stop der 2. Wert...

Ist das richtig?
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II