IRobot Roomba mit Roowifi steuern

Begonnen von 2P4u, 06 Januar 2014, 20:33:59

Vorheriges Thema - Nächstes Thema

franky08

#60
Hab es gerade gesehen, in dem code den du vorne gepostet hast steht statt ChState nur State, hätte mir gleich auffallen können, da dort auch ein Hochkomma fehlt  ;)
Im regex
VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

stoxx

#61
Da fehlt nichts.. das ist ganz bewusst ohne beginnendem Hochkomma , sonst würde die Regex nicht matchen..
Aber  - klappt es jetzt bei Dir??
Raspberry mit CUL, FS20, FHT, HMS, BLE, Z-Wave, Zigbee ..

franky08

#62
Ja, ist alles OK, hab das in eine sub gepackt. Ich meine die Stelle hier:
attr RoombaStat readingsRegex3 State'</name><value>([\d])

ich habe State' in 'ChState' geändert, dann funktioniert es.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

stoxx

So gehts auch, klar. Darfst halt nur nicht 'State' draus machen..  ;)
Die ganze Sache klappt bei mir jetzt fast schon anderthalb Jahre..
Raspberry mit CUL, FS20, FHT, HMS, BLE, Z-Wave, Zigbee ..

franky08

#64
Nur mal eine Frage am Rande  ;) Stammt das Roowifi.pm Modul auf github von dir? Da hab ich mir die Zähne dran ausgebissen, da immer eine fehlende Perl Datei bemängelt wird, obwohl sie installiert ist.

Die folgenden NEUEN Pakete werden installiert:
  libdata-yaml-perl
0 aktualisiert, 1 neu installiert, 0 zu entfernen und 65 nicht aktualisiert.
Es müssen 20,8 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 78,8 kB Plattenplatz zusätzlich benutzt.
Holen: 1 http://ftp.de.debian.org/debian/ wheezy/main libdata-yaml-perl all 0.0.6-1 [20,8 kB]
Es wurden 20,8 kB in 0 s geholt (144 kB/s). 
Vormals nicht ausgewähltes Paket libdata-yaml-perl wird gewählt.
(Lese Datenbank ... 121244 Dateien und Verzeichnisse sind derzeit installiert.)
Entpacken von libdata-yaml-perl (aus .../libdata-yaml-perl_0.0.6-1_all.deb) ...
Trigger für man-db werden verarbeitet ...
libdata-yaml-perl (0.0.6-1) wird eingerichtet ...
frank1@zotac:~$ sudo apt-get install libmath-complex-perl
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Die folgenden NEUEN Pakete werden installiert:
  libmath-complex-perl
0 aktualisiert, 1 neu installiert, 0 zu entfernen und 65 nicht aktualisiert.
Es müssen 51,8 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 140 kB Plattenplatz zusätzlich benutzt.
Holen: 1 http://ftp.de.debian.org/debian/ wheezy/main libmath-complex-perl all 1.59-1 [51,8 kB]
Es wurden 51,8 kB in 0 s geholt (350 kB/s).     
Vormals nicht ausgewähltes Paket libmath-complex-perl wird gewählt.
(Lese Datenbank ... 121255 Dateien und Verzeichnisse sind derzeit installiert.)
Entpacken von libmath-complex-perl (aus .../libmath-complex-perl_1.59-1_all.deb) ...
Trigger für man-db werden verarbeitet ...
libmath-complex-perl (1.59-1) wird eingerichtet ...
frank1@zotac:~$ sudo shutdown -r now


VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

stoxx

Nein, das Modul ist nicht von mir. Ich habe bisher nur die beschriebene HTTPMOD Version verwendet..
Raspberry mit CUL, FS20, FHT, HMS, BLE, Z-Wave, Zigbee ..

franky08

#66
Alles klar, hab es gerade im Thread nachgelesen. Irgendwie tut sich fhem mit der Auswertung des aktuellen Zustand´s schwer, anders gesagt es ist ein Glücksspiel das der aktuelle Zustand angezeigt wird. Kann z.Zt. aber auch nicht ausgiebig testen sonst sperrt meine Frau das Teil in den Schrank  ;)
habe diesen Code von dir:
define roostat_notify notify RoombaStat
{
if (ReadingsVal("RoombaStat", "ChState", 0) == 2) {fhem("set roostat 2");;}
if ((ReadingsVal("RoombaStat", "ChState", 0) == 3)||((ReadingsVal("RoombaStat", "ChState", 0) == 4)&&(ReadingsVal("RoombaStat", "Current", 0) >= -200))) {fhem("set roostat 0")};;
if ((ReadingsVal("RoombaStat", "ChState", 0) == 4)&&(ReadingsVal("RoombaStat", "Distance", 0) == 0)&&(ReadingsVal("RoombaStat", "Current", 0) < -200)&&(ReadingsVal("RoombaStat", "Current", 0) > -500)) {fhem("set roostat 3");;}
if ((ReadingsVal("RoombaStat", "ChState", 0) == 4)&&(ReadingsVal("RoombaStat", "Distance", 0) != 0)&&(Value("roostat") != 1)) {fhem("set roostat 1");;}
}


so geändert, dass es in eine sub passt:
sub:
sub RS()

{
my $Rst = ReadingsVal("RoombaStat","ChState",0);
my $Rcu = ReadingsVal("RoombaStat","Current",0);
my $Rdist = ReadingsVal("RoombaStat","Distance",0);

if( $Rst == 2 ) {
fhem "set roostat 2";
}
if( ($Rst == 3 || $Rst == 4) && $Rcu >= -200 ) {
fhem "set roostat 0";
}
if ( $Rst == 4 && $Rdist == 0 && $Rcu < -200 && $Rcu > -500 ) {
fhem "set roostat 3";
}
if ( $Rst == 4 && $Rdist != 0 && my $roomst != 1 ) {
fhem "set roostat 1";
}
}


Vlt. siehst du ja einen Fehler. Getriggert wird die sub im Prinzip über zwei notify.
einmal über
notify RoombaStat {RS} und beim betätigen von start über:
roombabef:start {fhem ("define rootmr at +00:00:10 {roomba_stat}; {RS}")}

{roomba_stat} wandelt nur die numerische Ausgabe in Klartext um, also in Dock, Läd,Saugt usw.

muss mir das morgen noch mal in Ruhe ansehen.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

franky08

Mein Fehler, hatte eine Variable falsch belegt  :o
Jetzt funktioniert alles soweit.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Erby

Bist du schon so weit um den Code zu posten?

franky08

@Erby
Das wird dir aber nicht sehr weiterhelfen, da ich das hardcodiert habe. Im Prinzip basiert die Steuerung auf die Code Teile von stoxx.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

franky08

#70
In fhem.cfg:
define roombabef dummy
attr roombabef DbLogExclude .*
attr roombabef alias Roomba Befehl
attr roombabef devStateIcon stop.*:Shutdown start.*:Restart dock.*:rc_templatebutton@yellow
attr roombabef room Roomba
attr roombabef setList state:start,stop,dock,spot
attr roombabef webCmd state
define roostat dummy
attr roostat DbLogExclude .*
attr roostat room Unsorted
define RoombaStat HTTPMOD http://192.168.2.226/roomba.xml 60
attr RoombaStat userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading05Name reading05Regex reading06Name reading06Regex readingsName5 readingsName6
attr RoombaStat enableControlSet 1
attr RoombaStat reading01Name Current
attr RoombaStat reading01Regex 'Current'</name><value>([\D]?[\d]+)
attr RoombaStat reading02Name ChState
attr RoombaStat reading02Regex 'Charging State'</name><value>([\d])
attr RoombaStat reading03Name Distance
attr RoombaStat reading03Regex 'Distance'</name><value>([\D]?[\d]+)
attr RoombaStat reading05Name Charge
attr RoombaStat reading05Regex 'Charge'</name><value>([\D]?[\d]+)
attr RoombaStat reading06Name Capacity
attr RoombaStat reading06Regex 'Capacity'</name><value>([\D]?[\d]+)
attr RoombaStat room Roomba,Unsorted
attr RoombaStat stateFormat ChState
#
define roomba_notify notify roombabef { if (Value("roombabef") eq "start") {{GetFileFromURL("http://192.168.2.226:9001/roomba.cgi", 3)};;\
fhem("define roombago at +00:00:10 {GetFileFromURL('http://192.168.2.226/roomba.cgi?button=CLEAN', 3)};;");;};;\
if (Value("roombabef") eq "stop") {{GetFileFromURL("http://192.168.2.226/roomba.cgi?button=CLEAN", 3)}};;\
if (Value("roombabef") eq "dock") {{GetFileFromURL("http://192.168.2.226/roomba.cgi?button=DOCK", 3)}};;\
if (Value("roombabef") eq "spot") {{GetFileFromURL("http://192.168.2.226/roomba.cgi?button=SPOT", 3)}};;}\

attr roomba_notify DbLogExclude .*
attr roomba_notify room Roomba
#
define Status_roomba dummy
attr Status_roomba DbLogExclude .*
attr Status_roomba alias Status
attr Status_roomba devStateIcon Läd.*:message_socket@red Gedockt.*:rc_templatebutton@green Saugt.*:general_an@green Fehler.*:rc_HELP@red
attr Status_roomba room Roomba
attr Status_roomba stateFormat state
#
define Roomba_activity notify roostat.* {roomba_stat}
attr Roomba_activity DbLogExclude .*
attr Roomba_activity room Unsorted
#
define roostat_notify notify RoombaStat {RS}
attr roostat_notify DbLogExclude .*
attr roostat_notify disable 0
attr roostat_notify room Roomba,Unsorted
define Roomba_Capazit dummy
attr Roomba_Capazit DbLogExclude .*
attr Roomba_Capazit alias Akku Ladung/Rest bis 100%
attr Roomba_Capazit event-min-interval .*:300
attr Roomba_Capazit room Roomba
attr Roomba_Capazit stateFormat state mAh / rest mAh
define Log_Roomba_Capazit FileLog ./log/%Y-%m-Roomba_Capazit Roomba_Capazit
define SVG_Log_Roomba_Capazit_1 SVG Log_Roomba_Capazit:SVG_Log_Roomba_Capazit_1:CURRENT
attr SVG_Log_Roomba_Capazit_1 DbLogExclude .*
attr SVG_Log_Roomba_Capazit_1 group Strom
attr SVG_Log_Roomba_Capazit_1 label "min: $data{min1} mAh, max: $data{max1} mAh, last: $data{currval1} mAh "
attr SVG_Log_Roomba_Capazit_1 room Roomba
attr SVG_Log_Roomba_Capazit_1 title "Akuu Kapazität : "


und die zwei sub's:
sub roomba_stat()

{
my $roomst = ReadingsVal("roostat","state",0);

if( $roomst == 0 ) {
fhem "set Status_roomba Gedockt";
}
if( $roomst == 1 ) {
fhem "set Status_roomba Saugt";
}
if( $roomst == 2 ) {
fhem "set Status_roomba Läd";
}
if( $roomst == 3 ) {
fhem "set Status_roomba Fehler";
}
}

sub RS()

{
my $Rst = ReadingsVal("RoombaStat","ChState",0);
my $Rcu = ReadingsVal("RoombaStat","Current",0);
my $Rdist = ReadingsVal("RoombaStat","Distance",0);
my $Rcapa = ReadingsVal("RoombaStat","Capacity",0);
my $Rchar = ReadingsVal("RoombaStat","Charge",0);
my $roomst = ReadingsVal("roostat","state",0);

if( $Rst == 2 ) {
fhem "set roostat 2"; #Läd
{roomba_stat};
}
if( ($Rst == 3 || $Rst == 4) && $Rcu >= -200 ) {
fhem "set roostat 0"; #Gedockt
{roomba_stat};
}
if ( $Rst == 4 && $Rdist == 0 && $Rcu < -200 && $Rcu > -500 ) {
fhem "set roostat 3"; #Fehler
{roomba_stat};
}
if ( $Rcu != 0 && $Rdist != 0 && $roomst != 1 ) {
fhem "set roostat 1"; #Saugt
{roomba_stat};
}
if ( $Rcapa == $Rchar ) {
fhem "set roostat 0"; #Dock
{roomba_stat};
}
my $rest = $Rcapa - $Rchar;
fhem "set Roomba_Capazit $Rchar";
fhem "setreading Roomba_Capazit rest $rest";
{roomba_stat};
}


VG
Frank

P.S. an deine Ip und devices anpassen!!!
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Erby

Vielen vielen Dank

Da ich kein Profi bin. Wohin muss ich den Code der subs rein kopieren? Und benötige ich die roowifi.pm welcher weiter vorne genannt wurde?

Grüße

franky08

roowifi.pm die brauchst du nicht!!
Aber wenn du schon nicht weißt wohin Subroutinen gehören dann nimm das mal lieber noch nicht in Angriff sondern beschäftige dich erst einmal mit den Grundlagen und vor allem auch mit Perl. Da wirst du nicht drumrum kommen wenn du weiter kommen willst!

sub's gehören in die 99_myUtils oder du legst eine neue Utils an

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Erby

Bei steht immer "No Logdevice Log_Roomba_Capazit".

franky08

@Erby
dann hast du keins angelegt  ;)
define Log_Roomba_Capazit FileLog ./log/%Y-%m-Roomba_Capazit Roomba_Capazit
define SVG_Log_Roomba_Capazit_1 SVG Log_Roomba_Capazit:SVG_Log_Roomba_Capazit_1:CURREN
attr SVG_Log_Roomba_Capazit_1 label "min: $data{min1} mAh, max: $data{max1} mAh, last: $data{currval1} mAh "
attr SVG_Log_Roomba_Capazit_1 room Roomba
attr SVG_Log_Roomba_Capazit_1 title "Akuu Kapazität : "


Und die gplot dazu brauchst du aber auch
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1