[98_ROOWIFI] Neues Modul für iRobot Roomba mit RooWifi Modul

Begonnen von jmike, 03 April 2016, 20:25:23

Vorheriges Thema - Nächstes Thema

franky08

Das Modul bringt eine Perl Warnung in Zeile 412

2016.04.09 18:56:21 3: stacktrace:
2016.04.09 18:56:21 3:     main::__ANON__                      called by fhem.pl (4003)
2016.04.09 18:56:21 3:     main::readingsBulkUpdate            called by ./FHEM/98_ROOWIFI.pm (412)
2016.04.09 18:56:21 3:     main::ROOWIFI_GetUpdate             called by fhem.pl (2763)
2016.04.09 18:56:21 3:     main::HandleTimeout                 called by fhem.pl (588)
2016.04.09 18:57:21 1: PERL WARNING: ^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE $/ at fhem.pl line 4003.
2016.04.09 18:57:21 3: stacktrace:
2016.04.09 18:57:21 3:     main::__ANON__                      called by fhem.pl (4003)
2016.04.09 18:57:21 3:     main::readingsBulkUpdate            called by ./FHEM/98_ROOWIFI.pm (412)
2016.04.09 18:57:21 3:     main::ROOWIFI_GetUpdate             called by fhem.pl (2763)
2016.04.09 18:57:21 3:     main::HandleTimeout                 called by fhem.pl (588)
2016.04.09 18:58:21 1: PERL WARNING: ^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE $/ at fhem.pl line 4003.
2016.04.09 18:58:21 3: stacktrace:
2016.04.09 18:58:21 3:     main::__ANON__                      called by fhem.pl (4003)
2016.04.09 18:58:21 3:     main::readingsBulkUpdate            called by ./FHEM/98_ROOWIFI.pm (412)
2016.04.09 18:58:21 3:     main::ROOWIFI_GetUpdate             called by fhem.pl (2763)
2016.04.09 18:58:21 3:     main::HandleTimeout                 called by fhem.pl (588)


VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

franky08

Ich überlege gerade ob es eine Möglichkeit gibt die zurückgelegte Wegstrecke auszuwerten, siehst du da einen Weg?

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

jmike

#17
Hi Frank.

Danke für den Bugreport, arbeite gerade an einem Update.

Zeile 412 ist der Aufruf von "readingsBulkUpdate". Da muss ich reinsehen bei welchem Sensor das Update fehlschlägt. Scheint ja nicht alle zu betreffen.

Leider gibt es noch ein weiteres Problem. Manchmal liefert der Roomba nur 0 Values (bei mir gerade das erste mal kurz bevor "please recharge roomba"). In diesem Fall crasht meine Batterie-Prozent-Berechnung weil Teilung-durch-0.
Immerhin ein einfacher Fix.

Wegstrecke müsste gehen wenn wir auf die Sensoren aus der Perl Klasse anstatt des roomba.json setzen.
Das erfordert jedoch ein aufwecken. Das einzubauen (z.b. mit Attribut für "verbose-but-wakeup-sensors") ist bereits geplant.
Ich überlege mir mal wie man z.b. 1x Täglich verbose-Sensoren aber alle 2min json-Sensoren abfragen kann.

Dann bekäme man zwar alle Infos aber weckt den Roomba nicht für jedes kleine Statusupdate.

Danke für den Input :)

Achso: Bezüglich dem leaveDock, bei dem Wert handelt es sich um die Geschwindigkeit der Räder pro Sekunde - und offensichtlich für 1 Sekunde.
Da muss ich mir noch mal die RAW commands ansehen denn persönlich würde ich erwarten ich definiere die Geschwindigkeit und er fährt bis ich stop sage.
Allerdings fährt er für 1 Sekunde in der vorgegebenen Geschwindigkeit, das is so nicht dokumentiert.

lg
mike


franky08

#18
Hallo, es gibt noch einen kleinen bug: ist disable einmal auf 1 gesetzt, lässt sich das Attribut nicht mehr auf 0 setzen (wahrscheinlich nur im Webif, der Roomba lässt sich mit disable 1 zurück auf 0 trotzdem bedienen). Intern scheint disable 0 also "anzukommen", ist im Webif nur nicht sichtbar.
Und noch in readingsSingleUpdate Zeile 159

2016.04.10 19:06:24 1: PERL WARNING: Use of uninitialized value $attrValue in string eq at ./FHEM/98_ROOWIFI.pm line 159


VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

jmike

Hi.

Hat einen Moment gedauert aber ich glaube ich habs nun. Du hast das Attribut nicht auf 0 gesetzt sondern gelöscht, korrekt?
Das wurde im Code tatsächlich nicht berücksichtigt und der Logfile Aufruf vom "del" cmd bringt dann uninit value.
Habs nun etwas ausgebaut so dass auf 0 setzen oder löschen funktioniert und auch automatisch ein Update startet.

Dann gibts ein paar Verbesserungen bei nicht-Funktion vom Roowifi (z.b. alle Werte werden mit 0 gelistet).
Da macht bricht er das Update ab, schickt ein wakeup und scheduled ein neues Update.


Aktuelle Version 0.0.8 ist im ersten Thread!


Zu dem anderen Feedback:
Die Perlwarnings aus readingsBulkUpdate kann ich leider nicht reproduzieren. Tritt das bei dir permanent auf?
Habe einen zusätzlichen Log Aufruf eingebaut (ab verbose 3). Sollte es bei dir permanent/reproduzierbar sein, magst du mal verbose 3 setzen und das im Log verfolgen?
Danke!

Die Sache mit der Wegstrecke ist schwieriger als gedacht, da sowohl im JSON als auch in der Lib auch negativ Wege geloggt werden.
Die Lib kann zusätzlich noch SensorListener, damit lässt sich vielleicht was bauen dass sehr granular Daten erfasst, die sich eventuell auswerten lassen.

grüße,
Mike

franky08

#20
Werde weiter testen  :)
ZitatDie Perlwarnings aus readingsBulkUpdate
werde ich im Auge behalten, habe z.Zt. keine Daten im Log.

P.S. disable 1|0 funktioniert jetzt !

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

jmike

Möchte hier noch ein kleines Config Snippet teilen.

Habe mir zwei Logfiles definiert, eins mit "allem", ein weiteres nur mit dem state:
define FileLog_roomba FileLog ./log/roomba-%Y-%m.log roomba.*
define FileLog_roomba_state FileLog ./log/roomba-state-%Y-%m.log roomba.cleaning.*|roomba:charging.*|roomba:disabled.*|roomba:idle.*|roomba:jsonError.*|roomba:offline.*|roomba:sleeping.*|roomba:update.*


und beide Logfiles in einem Chart kombiniert:

# Created by FHEM/98_SVG.pm, 2016-04-14 10:45:19
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 '<TL>'
set ytics ("offline" 1,"update" 2,"sleeping" 3,"idle" 4,"cleaning" 5,"charging" 6)
set y2tics
set grid ytics
set ylabel ""
set y2label ""
set yrange [0:7]
set y2range [0:3000]

#FileLog_roomba_state 3:roomba.*:0:$fld[2]=~"offline"?1:0
#FileLog_roomba_state 3:roomba.*:0:$fld[2]=~"update"?2:0
#FileLog_roomba_state 3:roomba.*:0:$fld[2]=~"sleeping"?3:0
#FileLog_roomba_state 3:roomba.*:0:$fld[2]=~"idle"?4:0
#FileLog_roomba_state 3:roomba.*:0:$fld[2]=~"cleaning"?5:0
#FileLog_roomba_state 3:roomba.*:0:$fld[2]=~"charging"?6:0
#FileLog_roomba 4:roomba.Charge\x3a:0:

plot "<IN>" using 1:2 axes x1y1 title 'offline' ls l1fill lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'update' ls l1fill lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'sleeping' ls l1fill lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'idle' ls l1fill lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'cleaning' ls l1fill lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'charging' ls l1fill lw 1 with steps,\
     "<IN>" using 1:2 axes x1y2 title 'charge' ls l0 lw 2 with lines



Nun kann ich den historischen Status leicht verfolgen, wann er z.b. sleeping oder offline ist. Die Batterieladung ist nur nice-to-have :)

Im Screenshot war er erst im Dock, charging, ging dann saugen (Batterie mit Abwärtstrend) allerdings zwischendurch 2x offline.

Vielleicht ist das für jemand anders auch interessant bzw. möchte seine Config/Plots teilen.

lg
mike

ps: weiß jemand wie man die Captions (Text im Chart, grün) komplett deaktivieren kann?

chriz

Hi Mike,

könntest du Bitte Bilder und Details deines Umbau (bzw. Einbaus ;) des Roowifi Moduls posten?

Dank Dir
Chris
FHEM auf Intel NUC D34010WYK Core i3, SSD, Ubuntu. HomeMatic mit HMLAN (Groundplane Antenne), Fritz DECT!200, FritzBox 7490, EnerGenie EG-PMS2-LAN, Yamaha RX-V475, Netatmo, Withings, Philips hue, Osram Lightify, Flukso Energy Meter, Harmony, RooWifi, Junkers ZSB 24-4 C Heizung via Heatronic HT-BUS

jmike

#23
Hi Chris.

Klar, hier kurz und knapp was ich gemacht habe + ein paar Bilder:


  • graue Blende abheben, die ist geklipst wobei es 2 Nasen gibt (Pfeil). Da etwas aufpassen. Wenn das nicht geht, Schritt 3 vorziehen. Schwarze Blende abheben, die ist nur geklipst
  • Schrauben entfernen, auch die unter dem Griff
  • umdrehen und alle Schrauben vom Front-Bumper entfernen, wieder umdrehen, nun sollte sich der Bumper nach oben abheben lassen, im zweiten Bild sieht man auch wo was Modul Platz hat.
  • Dann die Schrauben vom Mainboard lösen. Ich hab das Board nicht komplett ausgebaut sondern nur die oberen Kabel gelöst und das Board umgeklappt
  • Kabel an die Unterseite des Ports löten, RooWifi Modul verbinden und verstauen
  • ...und wieder alles zusammen bauen

Man könnte noch ein Loch ins Gehäuse bohren um von aussen an den reset-switch zu kommen.
Mein Modul hat sich bisher 1x nicht mit meinem WLAN verbunden und sein eigenes default-WLAN aufgemacht. Hab es aber einfach wieder neu konfiguriert (ohne reset).


grüße
mike

chriz

#24
Vielen Dank Mike, werde mich die Tage ans Einbauen wagen ;)

YAML::Tiny und LWP::Simple konnte ich nun installieren. Leider bekomme ich aber im Modul nur einen "offline" State. Mach ich noch irgendwas falsch ;)

Grüße
Chris


Edit:

Internals:
   CFGFN
   DEF        192.168.77.93 123
   IPADDR     192.168.77.93
   Interval   123
   NAME       ROOMBA
   NR         1868
   STATE      offline
   TRIGGERTIME 1462293153.72279
   TRIGGERTIME_FMT 2016-05-03 18:32:33
   TYPE       ROOWIFI
   VERSION    0.0.8
   Readings:
     2016-05-03 18:30:30   state           offline
Attributes:
   event-on-change-reading *
   room       TOE
   userattr
   verbose    1


edit2:

gibt noch einige Warnings im Log

2016.05.03 18:14:53.673 3: ROOWIFI: (ROOMBA) defined ROOMBA at 192.168.77.93 with interval set to 123
2016.05.03 18:14:53.673 1: PERL WARNING: ^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE $/ at fhem.pl line 4030.
2016.05.03 18:15:39.250 1: ROOWIFI: (ROOMBA) connection failed
2016.05.03 18:15:45.968 1: ROOWIFI: (ROOMBA) connection failed
2016.05.03 18:18:51.404 1: ROOWIFI: (ROOMBA) connection failed
2016.05.03 18:18:55.465 1: ROOWIFI: (ROOMBA) connection failed
2016.05.03 18:20:43.500 1: PERL WARNING: Subroutine ROOWIFI_Initialize redefined at ./FHEM/98_ROOWIFI.pm line 89.
2016.05.03 18:20:43.501 1: PERL WARNING: Subroutine ROOWIFI_Define redefined at ./FHEM/98_ROOWIFI.pm line 102.
2016.05.03 18:20:43.501 1: PERL WARNING: Subroutine ROOWIFI_Undef redefined at ./FHEM/98_ROOWIFI.pm line 143.
2016.05.03 18:20:43.501 1: PERL WARNING: Subroutine ROOWIFI_Attr redefined at ./FHEM/98_ROOWIFI.pm line 154.
2016.05.03 18:20:43.502 1: PERL WARNING: Subroutine ROOWIFI_Connect redefined at ./FHEM/98_ROOWIFI.pm line 190.
2016.05.03 18:20:43.503 1: PERL WARNING: Subroutine ROOWIFI_Set redefined at ./FHEM/98_ROOWIFI.pm line 225.
2016.05.03 18:20:43.503 1: PERL WARNING: Subroutine ROOWIFI_DoClean redefined at ./FHEM/98_ROOWIFI.pm line 285.
2016.05.03 18:20:43.503 1: PERL WARNING: Subroutine ROOWIFI_DoDock redefined at ./FHEM/98_ROOWIFI.pm line 303.
2016.05.03 18:20:43.504 1: PERL WARNING: Subroutine ROOWIFI_DoleaveDock redefined at ./FHEM/98_ROOWIFI.pm line 321.
2016.05.03 18:20:43.504 1: PERL WARNING: Subroutine ROOWIFI_DoStop redefined at ./FHEM/98_ROOWIFI.pm line 339.
2016.05.03 18:20:43.505 1: PERL WARNING: Subroutine ROOWIFI_GetUpdate redefined at ./FHEM/98_ROOWIFI.pm line 357.
2016.05.03 18:25:51.671 1: ROOWIFI: (ROOMBA) connection failed
2016.05.03 18:27:57.690 1: ROOWIFI: (ROOMBA) connection failed
2016.05.03 18:33:56.897 1: ROOWIFI: (ROOMBA) connection failed
2016.05.03 18:33:59.354 1: ROOWIFI: (ROOMBA) connection failed
2016.05.03 18:34:01.506 1: ROOWIFI: (ROOMBA) connection failed
FHEM auf Intel NUC D34010WYK Core i3, SSD, Ubuntu. HomeMatic mit HMLAN (Groundplane Antenne), Fritz DECT!200, FritzBox 7490, EnerGenie EG-PMS2-LAN, Yamaha RX-V475, Netatmo, Withings, Philips hue, Osram Lightify, Flukso Energy Meter, Harmony, RooWifi, Junkers ZSB 24-4 C Heizung via Heatronic HT-BUS

jmike

Hi Chris.

Ich gehe mal davon aus, dass die IP Adresse stimmt ;)
Hast du für das Webinterface vom RooWifi username/passwort ein hinterlegt?

Die Warnungen kommen davon, dass du das Modul offensichtlich neu geladen hast (...redefined..)

lg
mike

chriz

#26
Habe die Roowifi Hardware kurz abgenommen und wieder aufgesteckt. Nun funktionierts :)

Kann man die Abfragen im Modul evtl. nonBlocking machen. Sollte der Roowifi im Netzwerk nicht mehr Verfügbar sein, gibt es in FHEM kurze Freezes von ca. 2-3 Sekunden, die das System blockieren.

z.B.


2016.05.03 19:28:09.801 1: Perfmon: possible freeze starting at 19:28:07, delay is 2.801
2016.05.03 19:30:17.798 1: Perfmon: possible freeze starting at 19:30:15, delay is 2.798
...


edit:

setze ich im Modul ein Kommando ab, z.B. clean, gibt es ebenfalls kurze FHEM Freezes (und somit blockiert das gesamte System). Kann man dies evtl. auch verhindern?

2016.05.03 20:01:59.075 1: Perfmon: possible freeze starting at 20:01:57, delay is 2.075
2016.05.03 20:02:45.476 1: Perfmon: possible freeze starting at 20:02:44, delay is 1.476


Dank Dir,
Chris
FHEM auf Intel NUC D34010WYK Core i3, SSD, Ubuntu. HomeMatic mit HMLAN (Groundplane Antenne), Fritz DECT!200, FritzBox 7490, EnerGenie EG-PMS2-LAN, Yamaha RX-V475, Netatmo, Withings, Philips hue, Osram Lightify, Flukso Energy Meter, Harmony, RooWifi, Junkers ZSB 24-4 C Heizung via Heatronic HT-BUS

jmike

#27
Hi Chris.

Danke für dein Feedback, kann ich für Steuerungsbefehle so nachvollziehen und konnte auch finden wo/warum.

Werde mir die nötigen Änderungen die Tage ansehen und testen.

"back to the drawing board" :)
lg
mike

chriz

klasse, dank dir Mike.

Die normalen Intervall-Abfragen erzeugen ein Freeze von 2-3 Sekunden, sobald z.B. das Netzwerk oder der RooWifi down ist. Bei Netzwerkausfall bekommt man so alle 2 Minuten Freezes (je nach Intervall). Evtl. kann man diese Abfragen für FHEM Nonblocking setzen.

Grüße
Chris
FHEM auf Intel NUC D34010WYK Core i3, SSD, Ubuntu. HomeMatic mit HMLAN (Groundplane Antenne), Fritz DECT!200, FritzBox 7490, EnerGenie EG-PMS2-LAN, Yamaha RX-V475, Netatmo, Withings, Philips hue, Osram Lightify, Flukso Energy Meter, Harmony, RooWifi, Junkers ZSB 24-4 C Heizung via Heatronic HT-BUS

jmike

Hi.

Hab das Modul eben umgebaut und nutze nun das Blocking von Rudi für jede Kommunikation.
Ein delay (kein freeze!) haben wir bei Befehlen leider immer da wir den Roomba erst "wecken", kurz warten, und dann den Befehl schicken. Das könnte man sich eventuell sparen wenn er im Dock war, muss ich aber erst noch evaluieren. Das war übrigens einer der Punkte wo der freeze her kam.

Version 0.0.9 ist im ersten Post aktualisiert.

happy testing ;)
mike