MQTT2 für Xiaomi Vacuum Sauger

Begonnen von Otto123, 12 Mai 2021, 12:53:37

Vorheriges Thema - Nächstes Thema

Otto123

Ach so ok, Du hast die gleiche Version wie ich? Aber anderen Sauger? Na dann hängt die Funktion vom Saugertyp ab...
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

Dann hast du mit einem Xiaomi Gen1 mit dem "neuen" Valetudo also noch nicht ausprobiert und testest mit dem Dreame ?

Ich hab auch nicht die "bunte" Karte .

ZitatScheinbar kann man die Zonen dann auch noch irgendwo speichern, denn ganz rechts gibt es ja das Menü mit Clean zone preset Preset ...

Im alten Ui Old Frontend kann ich mit dem Gen1 wie "gewohnt" weiterhin Zonen anlegen/speichern.

Otto123

genau: neuer Sauger erstmal fit machen, dann den alten umstellen - oder auch nicht? ;)

Der Neue lässt den Weihnachtsbaum auch ohne Magnetband und Blockaden in Ruhe. Allerdings ignoriert er auch die alten Streifen, aber er kann ja nogo Zonen, muss man aber einrichten - vorher war er beim ersten Test schon durch die nasse Dusche gefahren  :'(
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

Zitat von: TomLee am 05 Januar 2022, 17:46:44
Könnt Ihr vlt. bei Gelegenheit wenigstens das roborockRE-Template um die jetzt nun schon länger mögliche dynamische Auswahl der zu reinigenden Zone(n) ergänzen, das man sich das händische Eingreifen (bei Änderung /Ergänzung von Zonen) in Zukunft spart:
erledigt ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

Zitat von: TomLee am 05 Januar 2022, 21:34:14
Im alten Ui Old Frontend kann ich mit dem Gen1 wie "gewohnt" weiterhin Zonen anlegen/speichern.
Das war ein sehr entscheidender Tipp!  ;D
Ich weiß jetzt wie ich Zonen anlege und ansteuere. Die Zonen werden nach dem Anlegen automatisch als json übertragen.
... und wie ich Segmente auslese (zumindest als Idee) und ansteuere. Die Segmente kann man ev. "einfach" per REST API auslesen.

Ich habe es noch nicht umgesetzt aber zumindest kann ich dann froh zum Stammtisch gehen. 🍻 Wegen C öffnen die Gaststätten bei uns ja nur bis 8.  :(
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

ZitatDas war ein sehr entscheidender Tipp!  ;D

Die Antwort hatte ich eigentlich schon gestern Abend erwartet  :)

Zitat... und wie ich Segmente auslese (zumindest als Idee) und ansteuere. Die Segmente kann man ev. "einfach" per REST API auslesen
Komm ich noch nicht ganz mit, sollte doch so klappen oder nicht ? Hast vlt. nicht mitgelesen ?

TomLee

#96
Bei ihm scheinen die Segmente unter diesem Topic zu kommen:

UG/DreameZ10Pro/MapData/segments:.* { json2nameValue($EVENT); }

edit:

Ach, nee. Er schreibt am Ende alles in ein Reading:

UG/DreameZ10Pro/MapData/segments:.* json_segments

Otto123

#97
Ok danke, habe ich wirklich nicht mitgelesen. Ich war ja zu dem Zeitpunkt in die Kaufoption für den NEUEN abgebogen  ;D ;D ;D

Mein Gedanke mit der REST API geht dahin: will ich alle 30 sec die Kartendaten per mqtt empfangen und ins null device schieben?  ;D

Aber auf alle Fälle ein guter Ansatz um die json auszupacken. 👍
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MadMax-FHEM

Ihr sprecht hier jetzt vom Xiaomi V1?

Zonen (gut klar) und Segmente?

Dann noch: valetudo oder valetudoRE?
(bin irgendwie raus ;)  )

Hmmm, evtl. muss ich mich dann doch noch mal wieder dem Thema mqtt@Xiaomi-vacuum widmen...
...wobei ich aktuell alles mit dem Xiaomi-Modul laufen habe wie es (für mich) passt...

Naja, wer weiß, wann mir mal wieder "langweilig" wird ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TomLee

Zitat von: Otto123 am 06 Januar 2022, 16:43:02
Aber auf alle Fälle ein guter Ansatz um die json auszupacken. 👍

Mein Ansatz, wie ich es angegangen war mit:

UG/DreameZ10Pro/MapData/segments:.* { json2nameValue($EVENT); }

https://forum.fhem.de/index.php/topic,125014.msg1196047.html#msg1196047

Das
UG/DreameZ10Pro/MapData/segments:.* json_segments
kam erst zum Schluss ins Spiel und selbst testen kann ich ja nicht.

8)

TomLee

Ich hab ja nur Xiaomi V1.
Hab einfach aus Interesse was sich getan hat und wegen der Segmente halt, mal wieder auf einen Valetudo geflasht.
Segmente gehen scheinbar mit dem Gen1 nicht, ich glaub der Roboter muss dazu auch wirklich permanente Karten unterstützen.

Solange das mit MQTT nicht ganz rund ist bleib ich bei ValetudoRE.

MadMax-FHEM

FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TomLee

ZitatHmmm, evtl. muss ich mich dann doch noch mal wieder dem Thema mqtt@Xiaomi-vacuum widmen...
...wobei ich aktuell alles mit dem Xiaomi-Modul laufen habe wie es (für mich) passt...

Hatte mich ja nie mit Zonen beschäftigt zu Zeiten des Xiaomi-Modul, das mit dem Zonen erstellen war doch mit dem Modul nicht so einfach und aus diesem Grund "hängst" du doch nur an dem Modul, weil es soviel Arbeit war oder täusch ich mich da ?

Mit ValetudoRE ist es doch so einfach Zonen zu erstellen und das "schalten/steuern" dieser über ein MQTT2_Device iVm. dem Template soviel einfacher  wie mit dem Modul (aus der Erinnerung), ich frage mich was dich immer von der MQTT-Variante abhält, vorallem es geht ja beides parallel.

MadMax-FHEM

Zitat von: TomLee am 06 Januar 2022, 17:38:05
Hatte mich ja nie mit Zonen beschäftigt zu Zeiten des Xiaomi-Modul, das mit dem Zonen erstellen war doch mit dem Modul nicht so einfach und aus diesem Grund "hängst" du doch nur an dem Modul, weil es soviel Arbeit war oder täusch ich mich da ?

Also ich fand das mit dem Modul recht einfach: Flole-App -> Zonen malen -> exportieren und dann im Modul die Attribute füllen :)
(gut Flole fällt jetzt nat weg aber dann halt Export aus valetudo bzw. habe ich ja aktuell alle Zonen schon :)  )

Zitat von: TomLee am 06 Januar 2022, 17:38:05
Mit ValetudoRE ist es doch so einfach Zonen zu erstellen und das "schalten/steuern" dieser über ein MQTT2_Device iVm. dem Template soviel einfacher  wie mit dem Modul (aus der Erinnerung), ich frage mich was dich immer von der MQTT-Variante abhält, vorallem es geht ja beides parallel.

Naja eigentlich nur, weil es eben (aktuell) mit dem Modul läuft und mqtt (meist) recht viel durch die Gegend feuert und zwar schon das Gerät selbst, also da hilft dann ein event-on-change auch erst mal nicht :-\

Mag mich ja täuschen aber bei anderen Versuchen mit mqtt war es so.
Und wenn keine Not ist (so viel durch die Gegend zu schicken), dann ist der Anreiz gering ;)

Ja geht parallel, hatte ich ja bei einem Sauger auch schon mal.
Aber (aktuell) noch keinen Mehrwert gesehen...

Evtl. ändert sich das ja wieder 8)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TomLee

ZitatNaja eigentlich nur, weil es eben (aktuell) mit dem Modul läuft und mqtt (meist) recht viel durch die Gegend feuert und zwar schon das Gerät selbst, also da hilft dann ein event-on-change auch erst mal nicht :-\

Gegenbeweis, ValetudoRE, der Sauger steht seit gestern einfach nur da:

defmod MQTT2_v1_eg MQTT2_DEVICE rockrobo
attr MQTT2_v1_eg alexaName fernando
attr MQTT2_v1_eg comment { dev=>{ 'pct: 0'=>'pct: Fruehstuecksraum', 'pct: 1'=>'pct: Kueche','pct: 0'=>'pct: Flur', 'pct: 1'=>'pct: Hinten','pct: 9'=>'pct: Raucherecke' } }\
{my $testreading = $defs{"Fritzbox1"} ->{READINGS};;;; my @a = ( keys %{$testreading});;;;return join ',',@a }\
\
{my $testreading = $defs{"Demo"} ->{READINGS};;;; my @a = ( keys %{$testreading});;;;my @r;;;;for (@a) {$_  eq  $_+0 ? push @r,$_: next};;;;return join ',',@r }
attr MQTT2_v1_eg devicetopic valetudo/rockrobo
attr MQTT2_v1_eg event-on-update-reading pct
attr MQTT2_v1_eg eventMap get_dest:hundsfurz
attr MQTT2_v1_eg genericDeviceType blind
attr MQTT2_v1_eg icon batterie
attr MQTT2_v1_eg jsonMap battery_level:batteryPercent
attr MQTT2_v1_eg model roborockRE
attr MQTT2_v1_eg readingList homeassistant/vacuum/valetudo_rockrobo/config:.* {}\
$DEVICETOPIC/state:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/attributes:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/map_data:.* {}\
$DEVICETOPIC/command_status:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/destinations:.* { valetudoREdest($EVENT) }
attr MQTT2_v1_eg room EG,MQTT2_DEVICE
attr MQTT2_v1_eg setList speech_cmnd:{'multiple-strict,'.ReadingsVal($name,'.available_cmnds','none');;} {sleep 0.5;;fhem("setreading $NAME $EVTPART0 $EVTPART1")}\
charge:noArg $DEVICETOPIC/command return_to_base\
fan_power:whisper,min,medium,high,max,mop $DEVICETOPIC/set_fan_speed $EVTPART1\
locate:noArg $DEVICETOPIC/command locate\
pause:noArg $DEVICETOPIC/command pause\
spot:noArg $DEVICETOPIC/command clean_spot\
start:noArg $DEVICETOPIC/command start\
stop:noArg $DEVICETOPIC/command stop\
get_dest:noArg { $DEVICETOPIC.valetudoRE($EVENT) }\
goto:textField { $DEVICETOPIC.valetudoRE($EVENT) }\
map:textField { $DEVICETOPIC.valetudoRE($EVENT) }\
reset_consumable:main,side,filter,sensor { $DEVICETOPIC.valetudoRE($EVENT) }\
zone:{{'multiple-strict,'.ReadingsVal($name,'zones','none');;}} { $DEVICETOPIC.valetudoRE($EVENT) }\
x_raw_payload:textField { $DEVICETOPIC.valetudoRE($EVENT)}\
pct:{'slider,0,1,'.(scalar(split(/,/,ReadingsVal($name,'speech_cmnd','none')))+scalar(split(/,/,ReadingsVal($name,'zones','none')))).',1'} {my @d = split(/,/,ReadingsVal($NAME,'speech_cmnd','none'));;my @e = split(/,/,ReadingsVal($NAME,'zones','none'));;my ($i,%pct2cmd);;map {$i++;;$pct2cmd{$i} = $_;;} (@d);;$i= keys %pct2cmd;;map {$i++;;$pct2cmd{$i} = 'zone '.$_;;} (@e);;my $cmd = $pct2cmd{$EVTPART1};;return if !$cmd;;return fhem("set $NAME $cmd;;setreading $NAME pct $EVTPART1");;}
attr MQTT2_v1_eg setStateList charge fan_power get_dest goto locate map pause reset_consumable spot start stop zone x_raw_payload
attr MQTT2_v1_eg stateFormat {my $s = ReadingsVal($name,'state',0);;\
my $mb = ReadingsVal($name,'mainBrush',0);;\
my $sb = ReadingsVal($name,'sideBrush',0);;\
my $f = ReadingsVal($name,'filter',0);;\
my $ss = ReadingsVal($name,'sensor',0);;\
my $bp = ReadingsVal($name,'battery_level',0);;\
my $lc = strftime("%A %d.%m.%y-%T", localtime(ReadingsNum($name,'last_bin_out',0)/1000));;;;\
"<table>\
<tr>\
    <th></th>\
   <th colspan='2'>Sauger</th>\
<th colspan='2'>Akku</th>\
  </tr>\
  <tr style='border-bottom-style: solid;;'>\
    <th align='left'>Status</th>\
   <td colspan='2'>$s</td>\
<td colspan='2'>$bp</td>\
   </tr>\
     <tr>\
    <td></td>\
    <th colspan='4'>Staubbeh&auml;;lter</th>\
   </tr>\
<tr style='border-bottom-style: solid;;'>\
    <th align='left'>Letzte Reinigung</th>\
    <td colspan='4'>$lc</td>\
   </tr>\
  <tr>\
    <th></th>\
    <th>Hauptb&uuml;;rste</th>\
    <th>Seitenbürste</th>\
<th>Filter</th>\
<th>Sensorreinigung</th>\
  </tr>\
  <tr style='border-bottom-style: solid;;'>\
    <th align='left'>verbleibende Zeiten</th>\
    <td>$mb h</td>\
    <td>$sb h</td>\
    <td>$f h</td>\
    <td>$ss h</td>\
   </tr>\
</table>\
"}
attr MQTT2_v1_eg userReadings autoReturn:valetudo_state_name:.Idle {fhem("sleep $name:bin_in_time:.0 waitbin;;set $name charge");;return 'return'},\
.available_cmnds:.* {\
  return join(',',sort map {(split ':',$_)[0]} split '\s',getAllSets($name));;\
}

setstate MQTT2_v1_eg <table>\
<tr>\
    <th></th>\
   <th colspan='2'>Sauger</th>\
<th colspan='2'>Akku</th>\
  </tr>\
  <tr style='border-bottom-style: solid;;'>\
    <th align='left'>Status</th>\
   <td colspan='2'>docked</td>\
<td colspan='2'>100</td>\
   </tr>\
     <tr>\
    <td></td>\
    <th colspan='4'>Staubbeh&auml;;lter</th>\
   </tr>\
<tr style='border-bottom-style: solid;;'>\
    <th align='left'>Letzte Reinigung</th>\
    <td colspan='4'>Donnerstag 11.11.21-18:55:34</td>\
   </tr>\
  <tr>\
    <th></th>\
    <th>Hauptb&uuml;;rste</th>\
    <th>Seitenbürste</th>\
<th>Filter</th>\
<th>Sensorreinigung</th>\
  </tr>\
  <tr style='border-bottom-style: solid;;'>\
    <th align='left'>verbleibende Zeiten</th>\
    <td>179.4 h</td>\
    <td>79.4 h</td>\
    <td>29.4 h</td>\
    <td>20.3 h</td>\
   </tr>\
</table>\

setstate MQTT2_v1_eg 2021-12-24 13:37:40 .available_cmnds speech_cmnd,charge,fan_power,locate,pause,spot,start,stop,get_dest,goto,map,reset_consumable,zone,x_raw_payload,pct,attrTemplate
setstate MQTT2_v1_eg 2022-01-06 15:39:39 IODev MQTT2_Server
setstate MQTT2_v1_eg 2021-12-24 15:04:07 autoReturn return
setstate MQTT2_v1_eg 2022-01-05 20:16:12 battery_level 100
setstate MQTT2_v1_eg 2022-01-05 20:16:17 bin_in_time 8068
setstate MQTT2_v1_eg 2022-01-05 20:16:17 cleanArea 6669.0
setstate MQTT2_v1_eg 2022-01-05 20:16:17 cleanCount 304
setstate MQTT2_v1_eg 2022-01-05 20:16:17 cleanTime 120.5
setstate MQTT2_v1_eg 2022-01-05 17:22:53 command zoned_cleanup
setstate MQTT2_v1_eg 2022-01-05 20:16:17 currentCleanArea 11.6
setstate MQTT2_v1_eg 2022-01-05 20:16:17 currentCleanTime 9.4
setstate MQTT2_v1_eg 2021-12-24 15:00:24 error Cliff sensors alarm, carry the robot to different place
setstate MQTT2_v1_eg 2021-12-24 15:00:24 errorCode 3
setstate MQTT2_v1_eg 2022-01-05 20:16:12 fan_speed high
setstate MQTT2_v1_eg 2022-01-05 20:16:17 filter 29.4
setstate MQTT2_v1_eg 2022-01-05 20:16:17 last_bin_full -1
setstate MQTT2_v1_eg 2022-01-05 20:16:17 last_bin_out 1636653334678
setstate MQTT2_v1_eg 2022-01-05 20:16:17 last_loaded_map_date 1637763157981
setstate MQTT2_v1_eg 2022-01-05 20:16:17 last_loaded_map_name Test
setstate MQTT2_v1_eg 2022-01-05 20:16:17 last_run_stats_area 11.6
setstate MQTT2_v1_eg 2022-01-05 20:16:17 last_run_stats_duration 567
setstate MQTT2_v1_eg 2022-01-05 20:16:17 last_run_stats_endTime 1641400341000
setstate MQTT2_v1_eg 2022-01-05 20:16:17 last_run_stats_errorCode 0
setstate MQTT2_v1_eg 2022-01-05 20:16:17 last_run_stats_errorDescription No error
setstate MQTT2_v1_eg 2022-01-05 20:16:17 last_run_stats_finishedFlag true
setstate MQTT2_v1_eg 2022-01-05 20:16:17 last_run_stats_startTime 1641399774000
setstate MQTT2_v1_eg 2022-01-05 20:16:17 mainBrush 179.4
setstate MQTT2_v1_eg 2021-12-22 01:19:19 message ok
setstate MQTT2_v1_eg 2022-01-05 17:22:53 message_1 ok
setstate MQTT2_v1_eg 2021-12-24 18:22:19 pct 2
setstate MQTT2_v1_eg 2022-01-05 20:16:17 sensor 20.3
setstate MQTT2_v1_eg 2022-01-05 20:16:17 sideBrush 79.4
setstate MQTT2_v1_eg 2021-12-24 16:08:00 speech_cmnd charge,pause,start,stop
setstate MQTT2_v1_eg 2022-01-05 20:16:17 state docked
setstate MQTT2_v1_eg 2022-01-05 17:22:53 updated 1641399773337
setstate MQTT2_v1_eg 2022-01-05 20:16:17 valetudo_state_id 8
setstate MQTT2_v1_eg 2022-01-05 20:16:17 valetudo_state_name Charging
setstate MQTT2_v1_eg 2021-12-22 01:19:34 zones Alles,Flur,Fruehstuecksraum,Hinten,Kueche,bliblablub


Kein Vergleich zu Valetudo, dort werden aktuell alle 30 Sekunden alle Status/Daten/Readings übertragen, ob am Saugen oder nicht.

Ich hab mir jetzt nicht den Verkehr angeschaut wenn der ValetudoRE am saugen ist, vermute das wird aber auch nicht mehr sein wie bei dem Xiaomi_Modul auch gefeuert werden "muss".