Roomba Staubsaugerroboter

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

Vorheriges Thema - Nächstes Thema

Eisix

Hallo,

glaube bei mir liegt das Problem noch irgendwo anders. Die Routinen aus den RoombaUtils werden nicht gefunden.


2021.04.07 16:42:54.680 3: MQTT2_DEVICE set Putzfee start
2021.04.07 16:42:54.681 1: ERROR evaluating my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $NAME=   $evalSpecials->{'%NAME'};{roomba::command($NAME,"start",$EVENT)}: Undefined subroutine &roomba::command called at (eval 2895) line 1.


Restart habe ich gemacht

/opt/fhem/FHEM# ls -ltr 99_RoombaUtils.pm 
-rw-r--r-- 1 fhem dialout 53508 Apr  7 16:36 99_RoombaUtils.pm

fehlt mir noch irgendeine Perl dependency, oder habe ich sonst noch etwas vergessen?

Gruß
Eisix

Prof. Dr. Peter Henning

Was sagt denn das Log bei einem

reload 99_RoombaUtils

??

LG

pah

Eisix

Jep, wie befürchtet

reload 99_RoombaUtils

Can't locate Math/Polygon/Calc.pm in @INC (you may need to install the Math::Polygon::Calc module) (@INC contains: ./lib ./FHEM . /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.30.0 /usr/local/share/perl/5.30.0 /usr/lib/x86_64-linux-gnu/perl5/5.30 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.30 /usr/share/perl/5.30 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base ./FHEM/lib) at ./FHEM/99_RoombaUtils.pm line 50.
BEGIN failed--compilation aborted at ./FHEM/99_RoombaUtils.pm line 50.

Die zwei haben bei mir gefehlt


cpanm Math::Polygon::Calc Math::ConvexHull


Funktioniert jetzt, danke!
Jetzt muss ich aber mal nachschauen ob meine Frau den Schock vom meinem ersten Befehl (Dock) überstanden hat. Das Absaugen ist ganz schön laut.

Gruß
Eisix

Prof. Dr. Peter Henning

Steht "sVacHigh" auf false? Reduziert den Lärm deutlich.

LG

pah

delMar

Zitat von: Prof. Dr. Peter Henning am 07 April 2021, 16:19:11
zu vermeiden versuchen - nämlich die halbparallele Entwicklung von Software.

Wohl schon an anderen Stellen diskutiert, deshalb nur kurz der Vollständigkeit halber:
die Git basierten Platformen machen das sehr einfach.

der Knackpunkt: das Mergen in Git ist intelligenter, da es nicht zwei Code-Stände miteinander vergleicht, sondern den Zeitpunkt des Branchings (also wann haben sich die Code-Zweige getrennt) ebenfalls mit einbezogen wird. Sehr oft ist das Zusammenführen dann nur noch eine Frage von ein- zwei Mausklicks, anstatt manuellem Merge im lokalen Editor.

Die Komplexität kann anfangs erschlagen, im Context der Roomba Entwicklung hier würde es aber nur zwei oder drei Dinge geben, die man sich als Entwickler (und Eigentümer) aneignen muss.

Klugscheissen will ich hier aber nicht, ich wollte es nur ins Bewusstsein rufen (Fragen dazu gern per PM, diesen Thread wollen wir aber sauber halten)

Tatsächlich werde ich mir heute noch die Zeit nehmen, die i7 Features aus der letzten Version hier zu checken ;-)

Danke an Alle
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

#305
In studentischen Projekten - von denen ich derzeit etwa 10 betreue - nehme ich natürlich Github. Aber da muss ich den Code auch nicht komplett verstehen, weil ich nicht Maintainer bin.

DAS macht den wesentlichen Unterschied aus - nicht das Mergen.

Zum Mergen habe ich ein sehr komfortables Tool, das zusammen mit dem oXygen XML-Editor kommt (den ich auch für Perl nutze).

Mir fehlt aber noch das Tool, das die Gedankengänge anderer Programmersteller an meine Gedankengänge anpasst. Oder umgekehrt.

LG

pah

delMar

Zitat von: Prof. Dr. Peter Henning am 07 April 2021, 16:19:11
Bitte mal wegen der I7-Routinen testen, das ist jetzt sozuagen wieder auf Alpha-Status zurückgefallen.
Einzelraumreinigung funktioniert nach wie vor

Danke!

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.

hapege

Hallo pah,

erst mal sorry, ich wollte weder etwas Ungesundes tun, noch gegen Regeln verstoßen, noch Dir Mehrarbeit bescheren! Die offensichtlich "ungesunde" Version habe ich als Spiel- oder Testversion gesehen, eher aus der Not geboren meinen I7 einsetzen und verstehen zu wollen. Ich habe mich bemüht mich an Deine Syntax zu halten, was offensichtlich nicht gelungen ist. Ja, ich habe ein paar mir subjektiv nützlich scheinende Dinge eingebaut und ausprobiert, sorry dass ich das nicht genauer dokumentiert habe. Ich kann gerne noch was dazu schreiben, mir ist schon klar dass das nicht perfekt ist.
Wie ist denn das richtige Vorgehen? Jede Änderung bzw Vorschlag hier posten und diskutieren? Klar, gerne! Ich will keinen Ärger verursachen, nur lernen und soweit möglich ein wenig helfen...(und passe mich gerne an Deine Gedankengänge an, das sollte das passende Tool sein  ;) )

Danke fürs Aufräumen! (Ich komme erst am Wochenende dazu etwas zu testen)

LG,

hapege

PS: Das nicht-Auslösen von finalizemap habe ich auch, wenn ich einen Reinigungsvorgang in einem anderen Stockwerk auslöse und der Roomba das Dock dann halt nicht findet. Das ist der Grund für das gebastelte "finalizemapnow", damit habe ich das dann nachträglich getriggert. Geht sicher eleganter.)
Developer: 70_ESCVP21net.pm, 70_SVDRP.pm
Mitglied FHEM e.V.

Prof. Dr. Peter Henning

No offense taken, und um mich zu ärgern, bedarf es nach > 40 Jahren in der Lehre und in der Politik deutlich mehr Aufwand...

Allerdings wäre es sinnvoller, die Dinge zu trennen:
- Notwendige und sinnvolle Ergänzungen zum Code
- Experimentelle und/oder individuelle Anpassungen.

Zum Nutzen des "finalizemapnow" habe ich mir z.B. einen Wolf gesucht.

LG

pah




hapege

Hallo pah,

klingt sinnvoll, und sorry für den Wolf...

Darf ich eine kurze Verständnisfrage stellen?

Die sub "schedule2" hat 3 Übergabeparameter (line 753), die auch ausgewertet werden:


sub schedule2($$$){
...
my ($name,$evtptr,$retptr) = @_;
...


Aufgerufen wird sie aber nur mit 2 Parametern (Zeile 484):

schedule2(\%cleans,\%ret);


Ich dachte, der erste Param wäre nötig, um $name zu übergeben, aber offenbar
- stört die Diskrepanz in der Anzahl der Parameter nicht
- brauchts die Übergabe von $name nicht, z.B. die "ReadingsVal" funktionieren dennoch (wo wird dann $name überhaupt gefüllt? Ich bin verwirrt...)

Ich verstehe nicht, warum das funktioniert...

Danke schon mal,

hapege




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

hapege

#310
OK,

war zu spät gestern, mein Fehler - es funktioniert ja auch nicht :-(


my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Not a HASH reference at ./FHEM/99_RoombaUtils.pm line 483.


Vermutlich weil cleanSchedule2 so aussieht:

"cleanSchedule2": [{"enabled": false, "type": 0, "start": {"day": [1], "hour": 9, "min": 0}, "cmd": {"command": "start", "ordered": 1, "pmap_id": "zBzSo0ghQ-SYfM7yqTxZUg", "regions": [{"region_id": "12", "type": "rid"}], "user_pmapv_id": "210327T093901"}}, {"enabled": false, "type": 0, "start": {"day": [2, 4, 6], "hour": 11, "min": 0}, "cmd": {"command": "start", "ordered": 1, "pmap_id": "zBzSo0ghQ-SYfM7yqTxZUg", "regions": [{"region_id": "12", "type": "rid"}, {"region_id": "6", "type": "rid"}, {"region_id": "8", "type": "rid"}, {"region_id": "10", "type": "rid"}], "user_pmapv_id": "210327T093901"}}]


Deshalb habe ich das so versucht:

...
#-- for i7
    }elsif( defined($1) && $1 eq "2" ){
      my %cleans = %{$staterep};
      schedule2($name,\%cleans,\%ret);
    }


Und in der sub schedule2 ($$$) dann halt überall statt "$evtptr->..." -> "$evtptr->{'cleanSchedule2'}->...", z.B.

$enabled[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'enabled'};


Das ist halt nicht ganz konform mit Deiner Systematik.

LG,

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

Prof. Dr. Peter Henning

Jetzt verstehe ich nicht so ganz - funktioniert das mit der Anzeige von Schedule in der konsolidierten Version nun, oder nicht?

LG

pah

hapege

#312
Hi,

nein, funktioniert nicht, Fehler im Log:

my $TOPIC=   $evalSpecials->{'%TOPIC'};{roomba::reading($NAME,$EVENT)}: Not a HASH reference at ./FHEM/99_RoombaUtils.pm line 483.


Mit der Anpassung von oben

...
#-- for i7
    }elsif( defined($1) && $1 eq "2" ){
      my %cleans = %{$staterep};
      schedule2($name,\%cleans,\%ret);
    }


und in schedule2($$$)

$enabled[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'enabled'};
# dito die anderen Stellen mit $evtpr->

funktioniert es.

Ich habe gerade eine CleanRoom gestartet, klappt, inkl. finalizemap.

LG,

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

Prof. Dr. Peter Henning

Die erste Anpassung hatte ich in meiner letzten Fassung schon drin:
Zitatif( $evt =~ /cleanSchedule(2?)/){
    #main::Log 1,"[RoombaUtils] schedule event ".$evt;
    #-- older devices
    if( !defined($1) || $1 ne "2" ){
      my %cleans = %{$staterep->{'cleanSchedule'}};
      schedule($name,\%cleans,\%ret);
    #-- for i7
    }elsif( defined($1) && $1 eq "2" ){
      my %cleans = %{$staterep->{'cleanSchedule2'}};
      schedule2($name,\%cleans,\%ret);
    }
  }
Allerding wundert mich, dass es mit
Zitat$starthour[$i] = $evtptr->[$i]->{'start'}->{'hour'};
nicht gehen soll.

LG

pah

hapege

#314
Hi pah,

also in der letzten Version die ich hier finde (vom 7.4.: https://forum.fhem.de/index.php/topic,114166.msg1146569.html#msg1146569) ist die Anpassung nicht drin, da steht noch

#-- for i7
    }elsif( defined($1) && $1 eq "2" ){
      my %cleans = %{$staterep->{'cleanSchedule2'}};
      schedule2(\%cleans,\%ret);
    }


i.e. ohne "$name".

Und ich habs gerade nochmal probiert, mit

my %cleans = %{$staterep->{'cleanSchedule2'}};

kommt es zu dem beschriebenen Fehler, mit

my %cleans = %{$staterep};

klappt es - dann muss in der sub aber das "cleanSchedule" eingebaut werden:

$enabled[$i] = $evtptr->{'cleanSchedule2'}->[$i]->{'enabled'};


Ich kann nur laienhaft spekulieren, in der message hinter "cleanSchedule2" kommt so was wie ein array "[...]", das scheint dann mit der hash reference nicht zu korrspondieren.

Ich kann gerne noch was anderes ausprobieren...

LG,

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