Mit Hilfe von Valetuo (https://github.com/Hypfer/Valetudo) kann ein gerooter Xiaomi Vaccum per MQTT an FHEM angebunden werden. Einige Aspekte dazu wurden bereits im Thread https://forum.fhem.de/index.php/topic,104687.0.html kurz gestreift.
Einbindung per MQTT des Saugers bietet derzeit nicht so viele Funktionen wie mit Hilfe des speziellen Moduls https://fhem.de/commandref.html#XiaomiDevice, das sowohl für die Standard-Firmware als auch die gerootete, china-cloud-freie Variante genutzt werden kann.
In der folgenden Raw Defintion sind alle mir bekannten MQTT-Befehle integriert. Die Benennung der Befehle erfolgt analog zum XiaomiDevice-Modul. Getestet habe ich nur die Standardbefehle ohne Zonenbezug; d.h. zoned_cleandup und go_to sind ungetestet und vermutlich funktionslos.
Die in readingsList genannte Funktion "valetudo2svg()" findet sich in https://forum.fhem.de/index.php/topic,104687.msg986304.html#msg986304 ff. mit Hinweisen zur Einbindung und den Einschränkungen. Wer die Funktion erweitern möchte, so dass auch der Fahrweg, No-Go-Areas usw. angezeigt werden, darf gerne eine Ergänzung liefern. :)
@Beta-User: Hoffe Du kannst mit den Angaben etwas für attrTemplate anfangen. Wenn Du einen Patch brauchst, dann kann ich den auch liefern. Jedoch dauert das dann noch etwas (länger).
Gruß, Christian
Raw Definition:
defmod MQTT2_mqttjs_5618b3f3 MQTT2_DEVICE mqttjs_5618b3f3
attr MQTT2_mqttjs_5618b3f3 IODev fhemMqtt
attr MQTT2_mqttjs_5618b3f3 icon vacuum_top
attr MQTT2_mqttjs_5618b3f3 readingList fhem/vacuum/valetudo_rockrobo/config:.* { json2nameValue($EVENT) }\
valetudo/rockrobo/state:.* { json2nameValue($EVENT) }\
valetudo/rockrobo/attributes:.* { json2nameValue($EVENT) }\
valetudo/rockrobo/map_data:.* {valetudo2svg("map_data",$EVENT,"www/images/valetudo_map.svg")}
attr MQTT2_mqttjs_5618b3f3 room MQTT2_DEVICE
attr MQTT2_mqttjs_5618b3f3 setList start:noArg valetudo/rockrobo/command start\
charge:noArg valetudo/rockrobo/command return_to_base\
stop:noArg valetudo/rockrobo/command stop\
spot:noArg valetudo/rockrobo/command clean_spot\
pause:noArg valetudo/rockrobo/command pause\
locate:noArg valetudo/rockrobo/command locate\
fan_power:min,medium,high,max,mop valetudo/rockrobo/set_fan_speed $EVTPART1\
zone valetudo/rockrobo/send_command zoned_cleanup\
goto valetudo/rockrobo/send_command go_to
setstate MQTT2_mqttjs_5618b3f3 docked
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:19:04 battery_level 100
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 cleanArea 540.8
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 cleanCount 22
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 cleanTime 9.2
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 command_topic valetudo/rockrobo/command
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:19:04 fan_speed medium
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 fan_speed_list_1 min
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 fan_speed_list_2 medium
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 fan_speed_list_3 high
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 fan_speed_list_4 max
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 fan_speed_list_5 mop
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 filter 140.8
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 json_attributes_topic valetudo/rockrobo/attributes
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 last_run_stats_area 0.2
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 last_run_stats_duration 14
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 last_run_stats_endTime 1572164292000
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 last_run_stats_errorCode 0
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 last_run_stats_errorDescription No error
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 last_run_stats_finishedFlag false
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 last_run_stats_startTime 1572164259000
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 mainBrush 290.8
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:19:05 map_data Wrote www/images/valetudo_map.svg
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 name rockrobo
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 schema state
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 send_command_topic valetudo/rockrobo/custom_command
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 sensor 20.8
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 set_fan_speed_topic valetudo/rockrobo/set_fan_speed
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 sideBrush 190.8
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 state docked
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 state_topic valetudo/rockrobo/state
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 supported_features_1 start
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 supported_features_10 send_command
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 supported_features_2 pause
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 supported_features_3 stop
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 supported_features_4 return_home
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 supported_features_5 battery
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 supported_features_6 status
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 supported_features_7 locate
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 supported_features_8 clean_spot
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 03:12:57 supported_features_9 fan_speed
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 valetudo_state_id 8
setstate MQTT2_mqttjs_5618b3f3 2019-10-27 09:22:04 valetudo_state_name Charging
Paßt soweit, Vorschlag mdB. um Test unten (hab's selbst mangels grade verfügbarem Testsystem auch noch nicht getestet, müßte aber passen).
Dabei bin ich aber davon ausgegangen, dass
- der erste Eintrag in readingList eine Altlast war
- auch bei den letzten beiden setList-Einträgen weitere Argumente (aus der Texteingabe übergeben werden müßten
name:roborock
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*valetudo[/].*
desc:use this to control a rooted Xiamoni Vacuum / Roborock. For further details visit https://github.com/Hypfer/Valetudo<br><br>NOTE: Initial version, not yet tested, just build according to https://forum.fhem.de/index.php/topic,104804.0.html<br>
order:X_03
par:BASE_ID;BASE_ID typically is home;{ AttrVal("DEVICE","readingList","") =~ m,([^:]+)[/]valetudo[/].*:, ? $1 : undef }
par:DEVNAME;BASE_ID typically is home;{ AttrVal("DEVICE","readingList","") =~ m,valetudo[/]([^/]+)[/].*:, ? $1 : undef }
deletereading -q DEVICE (?!associatedWith).*
defmod DEVICE MQTT2_DEVICE DEVNAME
attr DEVICE icon vacuum_top
attr DEVICE readingList homeassistant/vacuum/valetudo_DEVNAME/config:.* { json2nameValue($EVENT) }\
BASE_ID/DEVNAME/state:.* { json2nameValue($EVENT) }\
BASE_ID/DEVNAME/attributes:.* { json2nameValue($EVENT) }\
BASE_ID/DEVNAME/map_data:.* {valetudo2svg("map_data",$EVENT,"www/images/valetudo_map.svg")}
attr DEVICE setList start:noArg BASE_ID/DEVNAME/command start\
charge:noArg BASE_ID/DEVNAME/command return_to_base\
stop:noArg BASE_ID/DEVNAME/command stop\
spot:noArg BASE_ID/DEVNAME/command clean_spot\
pause:noArg BASE_ID/DEVNAME/command pause\
locate:noArg BASE_ID/DEVNAME/command locate\
fan_power:min,medium,high,max,mop BASE_ID/DEVNAME/set_fan_speed $EVTPART1\
zone BASE_ID/DEVNAME/send_command zoned_cleanup $EVTPART1\
goto BASE_ID/DEVNAME/send_command go_to $EVTPART1
attr DEVCID comment For code "valetudo2svg()" see <a href="https://forum.fhem.de/index.php/topic,104687.msg986304.html#msg986304">this forum thread</a>.
farewell:template has been applied successfully. For map generation you'll need additional code to myUtils, see <a href="https://forum.fhem.de/index.php/topic,104687.msg986304.html#msg986304">this forum thread</a> for details.
attr DEVICE model roborock
EDIT template in readingList geändert, farewell ergänzt
Zitat von: Beta-User am 27 Oktober 2019, 10:38:22
Dabei bin ich aber davon ausgegangen, dass - der erste Eintrag in readingList eine Altlast war
Nein, das ist keine Altlast. Besser wäre aber vermutlich der Eintrag
homeassistant/vacuum/valetudo_rockrobo/config:.* { json2nameValue($EVENT) }
Das "fhem" statt "homeassistant" am Beginn kommt nur daher, dass ich in config.json das autoconfPrefix von homeassistant auf fhem umgeändert habe. Wird vermutlich keiner machen und hat keine praktische Bedeutung.
Zitat
- auch bei den letzten beiden setList-Einträgen weitere Argumente
Ja. Dort werden weitere Argumente in einem bestimmten Format benötigt. Da ich das aber nicht verwende, bin ich zu faul das zu erforschen. 8)
Tests mache ich später.
Gruß, Christian
OK, den readingList-Eintrag habe ich im letzten Beitrag angepaßt, hoffe, das trifft es, sonst gibt's doch wieder jedes Mal neue Devices (?).
Was das Erforschen angeht: Dazu muß man die Option haben, was via MQTT zu versenden; vielleicht mag das ja jemand anderes austesten... ;)
Ansonsten bin ich unsicher, ob man die "command" Anweisungen nicht (teilweise) in eine Liste packen sollte (start, stop und pause machen aber wohl schon als separate Kommandos Sinn).
Zitat von: Beta-User am 27 Oktober 2019, 12:43:50
OK, den readingList-Eintrag habe ich im letzten Beitrag angepaßt, hoffe, das trifft es, sonst gibt's doch wieder jedes Mal neue Devices (?).
Ja, wenn es fehlt gibt es jedes Mal ein neues Device durch autocreate
Die damit abgedeckten/gefilterten MQTT-Nachrichten sind übrigens für MQTT-discovery, was auch bspw. Zigbee2mqtt nutzen soll (https://www.home-assistant.io/docs/mqtt/discovery/#support-by-third-party-tools). Habt ihr Euch mit MQTT-discovery schon mal beschäftigt?
ZitatAnsonsten bin ich unsicher, ob man die "command" Anweisungen nicht (teilweise) in eine Liste packen sollte (start, stop und pause machen aber wohl schon als separate Kommandos Sinn).
Ich hatte nur versucht die Befehle möglichst "kompatibel" zum XiaomiDevice-Modul anzulegen. Ob das ins derzeitige FHEM/attrTemplate-Schema passt, habe ich nicht angeschaut. Ändern darfst Du das gerne.
Gruß, Christian
Hmm, das Kompabilitätsargument ist erst mal ein guter Einstieg, wenn es wer dann anders haben will, bitte melden... Einstweilen würde ich das dann noch mit
attr DEVICE setStateList charge locate pause stop start
ergänzen (was wäre mit "zone" und "go_to"?).
Wenn die erste Version paßt, kann ich das gerne (mit der setStateList ergänzt) erst mal so ausliefern?
Das mit discovery hatte ich zwar bisher (als eher störend) aus den Augenwinkeln gesehen, aber noch keine Meinung gebildet, ob uns das was hilft; tendenziell habe ich den Eindruck, dass autocreate zumindest auf der Empfangsseite dasselbe macht, ohne entsprechende Infos vorab zu benötigen.
Aber die Idee ist gut, das separat abzufangen, weil a) stören die zusätzlichen Meldungen eigentlich meistens nur (die scheinen zur einmaligen Info für die HA-Software gedacht zu sein, am Device braucht man die eigentlich gar nicht) und b) scheinen da auch die Command-Topics mitgeliefert zu werden. Man könnte daraus also gleich eine setList bauen... Wäre evtl. noch flexibler als (die Erkennung in) attrTemplate? Mal sehen, evtl. kann/will Rudi dazu was sagen?
Danke fuer den Link, habs durchgelesen.
Die Nachricht ist homeassistant-spezifisch, d.h. wir muessten Reverse-Engneering betreiben, um es implementieren zu koennen.
Eine Funktion koennte aus der config Nachricht setList aufbauen, und diese Funktion koennte autocreate beim Erkennen eines bestimmten topics automatisch aufrufen.
Es waere schon mal praktisch, wenn wir die config-messages sammeln wuerden.
Zitat von: rudolfkoenig am 27 Oktober 2019, 17:59:21
Es waere schon mal praktisch, wenn wir die config-messages sammeln wuerden.
Ok:
Habe aus readingsList des bestehenden Devices, den Filter für die config-Messages gelöscht. Nach einem Neustart von Valetudo kommen folgende config-Messages:
2019.10.27 19:19:11.856 4: Connection accepted from fhemMqtt_192.168.188.46_44554
2019.10.27 19:19:11.910 5: in: CONNECT: (16)(27)(0)(4)MQTT(4)(2)(0)<(0)(15)mqttjs_09f6e992
2019.10.27 19:19:11.911 4: fhemMqtt_192.168.188.46_44554 mqttjs_09f6e992 CONNECT V:4 keepAlive:60
2019.10.27 19:19:11.911 5: out: CONNACK: (2)(0)(0)
2019.10.27 19:19:11.961 5: in: SUBSCRIBE: (130)c(199)(233)(0)(25)valetudo/rockrobo/command(0)(0)(31)valetudo/rockrobo/set_fan_speed(0)(0) valetudo/rockrobo/custom_command(0)
2019.10.27 19:19:11.962 4: fhemMqtt_192.168.188.46_44554 mqttjs_09f6e992 SUBSCRIBE
2019.10.27 19:19:11.962 4: topic:valetudo/rockrobo/command qos:0
2019.10.27 19:19:11.962 4: topic:valetudo/rockrobo/set_fan_speed qos:0
2019.10.27 19:19:11.962 4: topic:valetudo/rockrobo/custom_command qos:0
2019.10.27 19:19:11.962 5: out: SUBACK: (144)(3)(199)(233)(3)
2019.10.27 19:19:11.980 5: in: PUBLISH: 1(250)(3)(0)$fhem/vacuum/valetudo_rockrobo/config{"name":"rockrobo","schema":"state","supported_features":["start","pause","stop","return_home","battery","status","locate","clean_spot","fan_speed","send_command"],"command_topic":"valetudo/rockrobo/command","state_topic":"valetudo/rockrobo/state","set_fan_speed_topic":"valetudo/rockrobo/set_fan_speed","fan_speed_list":["min","medium","high","max","mop"],"send_command_topic":"valetudo/rockrobo/custom_command","json_attributes_topic":"valetudo/rockrobo/attributes"}
2019.10.27 19:19:11.980 4: fhemMqtt_192.168.188.46_44554 mqttjs_09f6e992 PUBLISH fhem/vacuum/valetudo_rockrobo/config:{"name":"rockrobo","schema":"state","supported_features":["start","pause","stop","return_home","battery","status","locate","clean_spot","fan_speed","send_command"],"command_topic":"valetudo/rockrobo/command","state_topic":"valetudo/rockrobo/state","set_fan_speed_topic":"valetudo/rockrobo/set_fan_speed","fan_speed_list":["min","medium","high","max","mop"],"send_command_topic":"valetudo/rockrobo/custom_command","json_attributes_topic":"valetudo/rockrobo/attributes"}
2019.10.27 19:19:11.990 5: fhemMqtt: dispatch autocreate=simple\000mqttjs_09f6e992\000fhem/vacuum/valetudo_rockrobo/config\000{"name":"rockrobo","schema":"state","supported_features":["start","pause","stop","return_home","battery","status","locate","clean_spot","fan_speed","send_command"],"command_topic":"valetudo/rockrobo/command","state_topic":"valetudo/rockrobo/state","set_fan_speed_topic":"valetudo/rockrobo/set_fan_speed","fan_speed_list":["min","medium","high","max","mop"],"send_command_topic":"valetudo/rockrobo/custom_command","json_attributes_topic":"valetudo/rockrobo/attributes"}
2019.10.27 19:19:12.008 2: autocreate: define MQTT2_mqttjs_09f6e992 MQTT2_DEVICE mqttjs_09f6e992 fhemMqtt
2019.10.27 19:19:12.015 2: autocreate: define FileLog_MQTT2_mqttjs_09f6e992 FileLog ./log/MQTT2_mqttjs_09f6e992-%Y.log MQTT2_mqttjs_09f6e992
Dazu gehört folgendes neu durch autocreate angelegte Device:
Internals:
CFGFN
CID mqttjs_09f6e992
DEF mqttjs_09f6e992
DEVICETOPIC MQTT2_mqttjs_09f6e992
FUUID 5db5dfa0-f33f-a83c-df31-badd9e92e2b6cf0f
IODev fhemMqtt
NAME MQTT2_mqttjs_09f6e992
NR 593
STATE ???
TYPE MQTT2_DEVICE
READINGS:
2019-10-27 19:19:12 command_topic valetudo/rockrobo/command
2019-10-27 19:19:12 fan_speed_list_1 min
2019-10-27 19:19:12 fan_speed_list_2 medium
2019-10-27 19:19:12 fan_speed_list_3 high
2019-10-27 19:19:12 fan_speed_list_4 max
2019-10-27 19:19:12 fan_speed_list_5 mop
2019-10-27 19:19:12 json_attributes_topic valetudo/rockrobo/attributes
2019-10-27 19:19:12 name rockrobo
2019-10-27 19:19:12 schema state
2019-10-27 19:19:12 send_command_topic valetudo/rockrobo/custom_command
2019-10-27 19:19:12 set_fan_speed_topic valetudo/rockrobo/set_fan_speed
2019-10-27 19:19:12 state_topic valetudo/rockrobo/state
2019-10-27 19:19:12 supported_features_1 start
2019-10-27 19:19:12 supported_features_10 send_command
2019-10-27 19:19:12 supported_features_2 pause
2019-10-27 19:19:12 supported_features_3 stop
2019-10-27 19:19:12 supported_features_4 return_home
2019-10-27 19:19:12 supported_features_5 battery
2019-10-27 19:19:12 supported_features_6 status
2019-10-27 19:19:12 supported_features_7 locate
2019-10-27 19:19:12 supported_features_8 clean_spot
2019-10-27 19:19:12 supported_features_9 fan_speed
Attributes:
IODev fhemMqtt
readingList mqttjs_09f6e992:fhem/vacuum/valetudo_rockrobo/config:.* { json2nameValue($EVENT) }
room MQTT2_DEVICE
Hoffe das Vorgehen genügt. Wenn ich das "alte" Device komplett löschen muss statt nur an readingsList Änderung vorzunehmen, dann kann ich das noch machen.
Zitat von: rudolfkoenig am 27 Oktober 2019, 17:59:21
Danke fuer den Link, habs durchgelesen.
Die Nachricht ist homeassistant-spezifisch, d.h. wir muessten Reverse-Engneering betreiben, um es implementieren zu koennen.
Eine Funktion koennte aus der config Nachricht setList aufbauen, und diese Funktion koennte autocreate beim Erkennen eines bestimmten topics automatisch aufrufen.
Es waere schon mal praktisch, wenn wir die config-messages sammeln wuerden.
Hmmm, ob man echtes "reverse-engineering" braucht: k.a.. Der code von Home-Assistant ist jedenfalls nicht geheim, von daher könnte man das auch von python nach Perl übersetzen (was aber vermutlich mehr Aufwand ist, als die Funktionsweise der discovery-Messages zu "erraten"), als Kern des Ganzen scheint das hier zu dienen: https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/mqtt/discovery.py.
Was mir aber in dem Zusammenhang unklar ist: "Wirkt" das nur, wenn man den interen Broker verwendet (der ist deprecated (https://www.home-assistant.io/docs/mqtt/broker#embedded-broker-deprecated), Quellcode ist hier (https://github.com/beerfactory/hbmqtt)!) oder auch mit externen Serverdiensten?
Wenn ich es richtig verstehe, sendet tasmota/zigbee2mqtt/etc an eine speziell fuer HomeAssistant gedachte Topic eine Nachricht.
Diese bekommt jeder, der sich dafuer beim Broker angemeldet hat, z.Bsp. mit subscribe homeassistant/+/+/config
Mit reverse-engeneering meinte ich rauszufinden, wie man "supported_features":["start","pause","stop",...] in setList umsetzt, das wird mir aus den bisherigen Daten ueberhaupt nicht klar.
Hmm,
kann auch nur raten.
Der Topic-Pfad der discovery-message scheint auch eine Rolle zu spielen. Das war ja hier
fhem/vacuum/valetudo_rockrobo/config
fhem war der Ersatz für homeassistant (siehe Antwortvon krikan auf meine Frage dazu ganz am Anfang) => könnte der "Indikator" sein, dass das eine "spezielle" Message vorliegt.
"vacuum" könnte man als Geräteklasse übersetzen, das scheint mit den Dateien in https://github.com/home-assistant/home-assistant/tree/dev/homeassistant/components/mqtt/vacuum zusammenzuhängen, wo dann wieder drinsteht, was es alles als setter, Readings usw. gibt?
valetudo_rockrobo scheint aus den anderen beiden Angaben aus diesem Beitrag (https://forum.fhem.de/index.php/topic,104687.msg986550.html#msg986550) zusammengesetzt zu sein.
Wenn ich mir das so ansehe, erscheint es mir zwar logisch aufgebaut, aber wir müßten dann eine parallele Struktur aufbauen, die dieselben Elemente pflegt, sonst ist es nutzlos. Meine vorläufige Einschätzung daher: Braucht man diese dahinterliegende Datenstruktur auch nch, bringt es wegen des zusätzlichen Pflegeaufwands gg. den templates keinen wirklichen Mehrwert, jedenfalls, solange der user nicht hergeht und dann sehr viel an den topic-Trees dreht (was die Erkennungsrate der template-Codes verschlechtert). Letzteres tun aber nur totale Anfänger (immer weniger, habe ich den Eindruck), oder die, die sowieso wissen, was sie tun und an sich auch ohne autodiscovery-Mechanismus klarkämen.
Ergo sollte man dem geneigten Anwender daher empfehlen, das feature abzuschalten, FHEM-interner Ersatz ist attrTemplate. Meinstens scheint man den HASS-support aktivieren zu müssen, valetudo scheint der einzige Fall zu sein, in dem es by default bereits aktiviert ist.
@krikan: In diesem Beitrag (https://forum.fhem.de/index.php/topic,104687.msg986550.html#msg986550) war in dem .json als einziges, das mal als "Schalter" zur Aktivierung ansehen könnte die Angabe des "autoconfPrefix". Lust zu testen, was passiert, wenn das nicht da ist? Sonst war mMn. nichts enthalten, was man als Aktivierung des features interpretieren könnte. Oder hast sonst du irgendeinen "Schalter" gesehen, mit dem man das abstellen kann?
Ansonsten wäre (der Spur nach) die Frage, ob man diese Art messages auf eine (konfigurierbare) "blacklist" beim IO setzen sollte, damit es dort dann direkt verworfen wird?
Zitat von: Beta-User am 27 Oktober 2019, 16:56:07
Wenn die erste Version paßt, kann ich das gerne (mit der setStateList ergänzt) erst mal so ausliefern?
Beschäftige mich gerade mit dem eingecheckten Template und auch erstmalig überhaupt mit attrTemplate.
Müsste
attr DEVCID comment For code "valetudo2svg()" see this forum thread.
nicht richtigerweise
attr DEVICE comment For code "valetudo2svg()" see this forum thread.
sein.
Fehlermeldung im Log habe ich aber überraschenderweise nicht und mir ist nicht bewusst an den defaults etwas geändert zu haben. Doch richtig!?
Und jetzt beginnen meine eigentlichen Verständnisprobleme zu attrTemplate:
Nach Anklicken von "set MQTT2_mqttjs_5618b3f3 attrTemplate roborock" öffnet sich eine Dialogbox mit dem Befehl "set MQTT2_mqttjs_5618b3f3 attrTemplate roborock BASE_ID" und dem Hinweis "Replace BASE_ID: with the BASE_ID typically is home". "home" führt aber zu so etwas "start:noArg home/rockrobo/command start" Ersetze ich BASE_ID durch "valetudo" ist es ok. Aber wofür gib es dann noch DEVNAME im template!? Wann wird das abgefragt?
Auf die anderen im Thread angesprochenen Einzelpunkte gehe ich erst mal nicht ein, um nicht noch mehr Vewirrung zu stiften. 8) Habe bisher mehr Fragen, als Antworten.
Ups, da war/ist noch einiges verbesserungsfähig gewesen ::) .
So läuft es auf meinem Testsystem mit deiner (auf homeassistant angepaßten) RAW durch:
name:roborock
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*valetudo[/].*
desc:use this to control a rooted Xiamoni Vacuum / Roborock. For further details visit https://github.com/Hypfer/Valetudo<br><br>NOTE: Initial version, not yet fully tested, just build according to https://forum.fhem.de/index.php/topic,104804.0.html<br>
order:X_03
par:BASE_ID;BASE_ID typically is valetudo;{ AttrVal("DEVICE","readingList","") =~ m,([^:]+)(valetudo)[/].*:, ? $2 : undef }
par:DEVNAME;BASE_ID typically is rockrobo;{ AttrVal("DEVICE","readingList","") =~ m,valetudo[/]([^/]+)[/].*:, ? $1 : undef }
deletereading -q DEVICE (?!associatedWith).*
defmod DEVICE MQTT2_\DEVICE DEVNAME
attr DEVICE icon vacuum_top
attr DEVICE readingList homeassistant/vacuum/BASE_ID_DEVNAME/config:.* { json2nameValue($EVENT) }\
BASE_ID/DEVNAME/state:.* { json2nameValue($EVENT) }\
BASE_ID/DEVNAME/attributes:.* { json2nameValue($EVENT) }\
BASE_ID/DEVNAME/map_data:.* {valetudo2svg("map_data",$EVENT,"www/images/valetudo_map.svg")}
attr DEVICE setList start:noArg BASE_ID/DEVNAME/command start\
charge:noArg BASE_ID/DEVNAME/command return_to_base\
stop:noArg BASE_ID/DEVNAME/command stop\
spot:noArg BASE_ID/DEVNAME/command clean_spot\
pause:noArg BASE_ID/DEVNAME/command pause\
locate:noArg BASE_ID/DEVNAME/command locate\
fan_power:min,medium,high,max,mop BASE_ID/DEVNAME/set_fan_speed $EVTPART1\
zone BASE_ID/DEVNAME/send_command zoned_cleanup $EVTPART1\
goto BASE_ID/DEVNAME/send_command go_to $EVTPART1
attr DEVICE setStateList charge locate pause stop start
attr DEVICE comment For code "valetudo2svg()" see <a href="https://forum.fhem.de/index.php/topic,104687.msg986304.html#msg986304">this forum thread</a>.
farewell:template has been applied successfully. For map generation you'll need additional code to myUtils, see <a href="https://forum.fhem.de/index.php/topic,104687.msg986304.html#msg986304">this forum thread</a> for details.
attr DEVICE model roborock
Danke, probiere ich (später) aus.
Irritierend finde ich, dass Typos wie
attr DEVCID comment For code "valetudo2svg()" see this forum thread.
nicht zu irgendeiner Meldung (im Log) führen. Man muss schon sehr genau kontrollieren, um solche Probleme zu finden. Kann man nicht eine Meldung zumindest im Log bei verbose 3 aufnehmen?
Gibt es irgendwo (außer code) eine Doku zu attrTemplate?
Eigentlich sollte es schon einen log-Eintrag geben. Da sollte stehen, dass das Device DEVCID nicht exisitert.
Was die "Sprache" (Doku) angeht, gibt's afaik keine wirkliche Doku, aber das ganze ist eigentlich keine große Magie. Etwas untechnisch würde ich das so formulieren:
Es gibt eine Anzahl von "keywords" (die mit dem Dppelpunkt hinten dran), die entweder der Darstellung (filter, desc, order) in "?" dienen, "par" sorgt für die Auflösung von Variablen (was nicht via Perlcode ermittelt werden kann, wird beim Nutzer erfragt, optimalerweise also nichts...), und dann gibt es noch "farewell" und "prereq". farewell enthält die Rückmeldung an den user, wenn alles fehlerfrei durch ist, mit prereq lassen sich Teile ein- und ausschalten (kenne noch keinen Anwendungsfall, aber eingebaut wurde das u.a., damit die Leute, die sich mit Spracherkennung rumschlagen, da ggf. einfache Möglichkeiten haben, die für die jeweils implementierte Lösung passenden Attribute zu setzen).
Zuerst werden die par-Anweisungen ausgewertet und im restlichen Code dann die Variablen durch die ermittelten/erfragten Werte ersetzt.
Der Rest sind dann "Einzeiler", wobei der reinen Lehre nach eigentlich Attribute gesetzt werden, aber im Prinzip alles möglich ist, vom normalen FHEM-Kommando bis hin zur Ausführung von Perl-Code (ganz so, wie ein "execute" im RAW-Eingabefeld).
Vielleicht übernehme ich das in bereinigter Form mal in das "Praxisbeispiele"-Wiki, aber eigentlich ist es recht einfach, mit "copy/paste" aus den bestehenden templates zu arbeiten. (So ist auch der DEVCID-Fehler entstanden...). Wenn man weiß, was man erreichen will, findet man in der Regel v.a. im mqtt2.template-File ausreichend Bausteinchen. Du hattest jetzt nur das "Glück", mit einem speziellen Device und einer "experimentellen" Fassung zu arbeiten, aber meine Erfahrung mit den bsiherigen Zuarbeitern war die, dass die in der Regel recht schnell "den Dreh raus hatten"...
Fehler wurden bisher ignoriert, falls sie nach einem AttrTemplate "Replace" Dialog aufgetreten sind, das habe ich jetzt gefixt.
Syntax der Datei:
- leere Zeilen werden ignoriert
- Zeilen die mit # anfangen sind Kommentare (s.u. desc:)
- speziell werden Zeilen interpretiert die mit einem der folgenden Woerter beginnen: name: filter: prereq: par: desc: farewell: order:
- alle anderen Zeilen werden als auszufuehrende Befehle interpretiert, wenn man "set XX attrTemplate TemplateName" ausfuehrt.
- name: Name des Templates, markiert gleichzeitig das Ende des vorherigen Templates
- filter: devspec2array Ausdruck, der beschreibt, fuer welche Geraete dieses Template anwendbar ist. Wird erst beim "set ?" ausgefuehrt.
- prereq: ist entweder ein Perl-Ausdruck {}, oder ein devspec2array, was genau ein Geraet spezifiziert. Wird beim Einlesen des template Files ausgefuehrt. Falls nicht wahr ist, wird das Template entfernt. Ist fuer sowas wie "setze zusaetzlich Attribut XY falls die Installation HomeAssistant kennt" gedacht.
- par: kann mehrfach vorkommen, Syntax: par:<ParamaterName>:<Kommentar>:<Perl-Code>. Perl-Code versucht den Wert zu finden, falls nicht moeglich (return undef), wird ein Dialog mit "Replace" angezeigt (bzw. Usage:... im telnet). ParameterName wird in jeder Befehlzeile ersetzt mit dem Wert. Zusaetzlich: DEVICE wird mit dem Namen des Geraetes ersetzt.
- desc: Kommentar fuer "set attrTemplate help ?". Die letzte Zeile mit # vor name: wird als desc: interpretiert, falls kein desc: vorhanden ist.
- farewell: wird zum Schluss als Dialog (oder Text in telnet) angezeigt, falls beim Anwenden der Befehle kein Fehler aufgetreten ist
- order: bestimmt die Reihenfolge der Templates fuers Frontend, falls nicht vorhanden, wird name: genommen.
Sorry, für verspätete Rückmeldung. Das template vom 30.11.19 aus #12 funktioniert nach meinem Test problemlos. Hier ist wohl noch ein kleiner Typo:
Zitatpar:DEVNAME;BASE_ID typically is rockrobo;
Statt BASE_ID sollte dort DEVNAME stehen.
homeassistant-autodiscovery schiebe ich erst mal. Sehe hier momentan keinen Vorteil. Ggfs. schaue ich mir es aber noch mal bei zwave2mqtt an, was noch auf dem Plan steht.
Ansonsten gehe ich erst mal von MQTT beim Sauger weg. Versuche mich jetzt mal mit der HTTP-REST-API des Saugers; HTTPMOD-template nicht ausgeschlossen.
Rudis Syntax-Erläuterung zu Template würde ich gerne irgendwo ins Wiki packen/verlinken. @Beta-User: hast Du eine bevorzugte Stelle oder sollen wir eine extra Wiki-Seite attrTemplate aufziehen?
Habe noch einmal probiert, da mir ungetestet bei zone und goto nicht gefiel.
In die setList müsste bitte für zone / goto folgendes:
zone valetudo/rockrobo/custom_command {"command":"zoned_cleanup","zone_ids":["$EVTPART1"]}
goto valetudo/rockrobo/custom_command {"command":"go_to","spot_id":["$EVTPART1"]}
zone habe ich erfolgreich getestet; goto eher unerfolgreich, da die spot_id nie akzeptiert wird (im Valetudo-Log: Invalid spot_id)
Thx auch für das Feedback zu dem template, den Typo mach ich noch raus.
Zu den beiden setList-Vorschlägen: die zone_ids sind nummerisch, oder? (=>widget für 0-10?)
Dto. für die spot_id?
Muß man die jeweils evtl. erst anlegen?
Was Wiki angeht:
Mit Rudis input scheint es mir angebracht zu sein, das in einen zentralen Artikel zu übernehmen, evtl. dazu noch ein paar Dinge, die heute in den Praxisbeispielen stehen, insbesondere (sinngemäß) https://wiki.fhem.de/wiki/MQTT2_DEVICE#attrTemplate. Da würde ich das aber auch belassen. Dürfte sich jetzt so langsam sehr lohnen, nachdem auch für HMCCU.* ein template-file dazugekommen ist :) .
Wenn ich nichts gegenteiliges höre, mache ich das mit dem neuen Artikel "bei Gelegenheit".
Wenn du "HTTPMOD kannst", wäre ein template für den robi natürlich auch dort cool :) .
Zitat von: Beta-User am 04 November 2019, 11:12:39
Zu den beiden setList-Vorschlägen: die zone_ids sind nummerisch, oder? (=>widget für 0-10?)
Dto. für die spot_id?
Muß man die jeweils evtl. erst anlegen?
Zumindest die zone_ids sind auf jeden Fall alphanumerisch. Bei den spot_ids gehe ich auch davon aus; mangels Testerfolg aber nicht verifizierbar. Daher besser kein widget.
Ids=Namen muss man separat anlegen, was afaik aber blöderweise nicht mit MQTT geht.
In der aktuellen c't soll es einen Artikel zur Ansteuerung des Saugers per MQTT geben; evtl. könnte man daraus weitere Infos ziehen.
ZitatWas Wiki angeht:
[..] mache ich das mit dem neuen Artikel "bei Gelegenheit".
Aber gerne doch. Wenn Du dann Hilfe brauchst, bitte melden.
ZitatWenn du "HTTPMOD kannst", wäre ein template für den robi natürlich auch dort cool :) .
Können: Nein. Aber ich bin hoffentlich lernfähig. template liefere ich, wenn ich soweit bin. Kann also dauern. :)
Danke erstmal allen für das Template.
Ich habe den Robi auch per MQTT2 angebunden, um zu schauen ob er damit schneller erreichbar ist, als mit dem anderen Modul.
Da ich den Robi immer ausschalte und es dann gute 3 Minuten dauert, bis er mit Fhem steuerbar ist.
Wegen dem goto, ich habe nachgeschaut, das wird anders geschrieben, ohne die [ ] und so funktioniert es bei mir:
goto valetudo/rockrobo/custom_command {"command":"go_to","spot_id":"$EVTPART1"}
Siehe auch hier (Example scripts.yaml snippet):
https://github.com/Hypfer/Valetudo/wiki/Home-Assistant-Integration#example-scriptsyaml-snippet-in-home-assistant-for-zoned-cleaning
VG
Mark
*grins*
Jetzt war ich wohl mal wieder zu schnell... Update mit den ohne eckig Klammer folgt, wenn ich die Rückmeldungen des Tages insgesamt habe (v.a. auch zu dem Tasmota-Shutter-Thema).
Einrichtung der Zonen usw. ist wohl hier (https://github.com/Hypfer/Valetudo/wiki/Important-Files-&-Folder)beschrieben, einen MQTT-Weg scheint es nicht zu geben(?):
ZitatZones + Spots configuration, mqtt + other config /mnt/data/valetudo/config.json
Macht es Sinn, dazu noch was in comment/farewell mit aufzunehmen? MMn. "sollte man" bzgl. der Dinge auch noch zurechtkommen, wenn man es bis dahin geschafft hatte.
Zitat von: Beta-User am 04 November 2019, 12:59:30
*grins*
Jetzt war ich wohl mal wieder zu schnell...
Und ich zu schludrig. :-[
Danke auch an @mark79 für die Berichtigung. Wenn ich mal vernünftig in den Code https://github.com/Hypfer/Valetudo/blob/master/lib/MqttClient.js geschaut hätte, ...
Sorry.
ZitatMacht es Sinn, dazu noch was in comment/farewell mit aufzunehmen? MMn. "sollte man" bzgl. der Dinge auch noch zurechtkommen, wenn man es bis dahin geschafft hatte.
Habe das über das Webinterface von Valetudo eingerichtet. Der andere Weg ist komplizierter, comment auch mMn überflüssig.
@krikan kein Ding, dafür ist das Forum da, das man sich gegenseitig hilft. :)
Was man noch aufnehmen könnte, wäre das neue Multifloor Feature, womit man die Map Karte speichern und wechseln kann, via load_map und store_map
Ich habe Valetudo 0.4.0-RE5.1 auf meinem V1 Sauger und damit funktionieren die MQTT2 SetList Befehle:
load_map valetudo/rockrobo/custom_command {"command":"load_map","name":"$EVTPART1"}
store_map valetudo/rockrobo/custom_command {"command":"store_map","name":"$EVTPART1"}
https://github.com/ppisljar/Valetudo/blob/multifloor/lib/MqttClient.js
Hier gibt es mehr Info: https://github.com/Hypfer/Valetudo/pull/317
:) Kein Ding, und schon hätte es sowieso noch ein update gegeben ;D .
Unabhängig davon sehe ich das wie Mark79: Schön, dass wir das so pragmatisch teilen können, am Ende haben alle was davon (jedenfalls die, die es nutzen wollen oder einen "Steinbruch" für eigene Zwecke/neues benötigen)... Und wenn hier Fehler passieren, ist es nicht so dramatisch, im Zweifel ist es schnell repariert.
Einen ersten Wurf zum Wiki gibt es hier:
https://wiki.fhem.de/wiki/AttrTemplate
Noch nicht hübsch, noch nicht vollständig, noch nicht groß woanders verlinkt aber ein Anfang, feedback oder direkte Korrekturen/Ergänzungen: Gerne (aber wohl dann besser im Wiki-Bereich, da bekommen es auch die anderen "template-Ritter" mit :) ).
Zitat von: mark79 am 04 November 2019, 13:50:33
Ich habe Valetudo 0.4.0-RE5.1 auf meinem V1 Sauger
Ist das Fork https://github.com/rand256/valetudo , was ich aus Deiner Versionsangabe schließe, die ich bei https://github.com/Hypfer nicht finde ? Läuft das stabil?
Zitat von: Beta-User am 04 November 2019, 14:39:45
Einen ersten Wurf zum Wiki gibt es hier:
https://wiki.fhem.de/wiki/AttrTemplate
Danke!
Hallo,
ich hänge gerade an dem attrTemplate für meinen Roborock S5. Valetudo ist drauf, läuft, mqtt ebenso.
/mnt/data/valetudo/config.json auf dem Roborock
"mqtt": {
"enabled": true,
"identifier": "rockrobo",
"topicPrefix": "valetudo",
"autoconfPrefix": "homeassistant",
"broker_url": "mqtt://192.168.178.58:1883",
"provideMapData": true,
"caPath": ""
},
Autocreate erstellt mir folgendes MQTT2_DEVICE
Internals:
CFGFN
CID mqttjs_f3ebb274
DEF mqttjs_f3ebb274
DEVICETOPIC MQTT2_mqttjs_f3ebb274
FUUID 5dd13432-f33f-d2fd-68f2-81d927df4d647a3f
IODev myMQTT
NAME MQTT2_mqttjs_f3ebb274
NR 1260
STATE docked
TYPE MQTT2_DEVICE
READINGS:
2019-11-17 12:51:14 cleanArea 125.8
2019-11-17 12:51:14 cleanCount 10
2019-11-17 12:51:14 cleanTime 2.7
2019-11-17 12:51:14 filter 147.0
2019-11-17 12:51:14 last_run_stats_area 3.7
2019-11-17 12:51:14 last_run_stats_duration 205
2019-11-17 12:51:14 last_run_stats_endTime 1573990481000
2019-11-17 12:51:14 last_run_stats_errorCode 0
2019-11-17 12:51:14 last_run_stats_errorDescription No error
2019-11-17 12:51:14 last_run_stats_finishedFlag true
2019-11-17 12:51:14 last_run_stats_startTime 1573990276000
2019-11-17 12:51:14 mainBrush 297.0
2019-11-17 12:51:14 sensor 27.3
2019-11-17 12:51:14 sideBrush 197.0
2019-11-17 12:51:14 state docked
2019-11-17 12:51:14 subscriptions valetudo/rockrobo/command valetudo/rockrobo/custom_command valetudo/rockrobo/set_fan_speed
2019-11-17 12:51:14 valetudo_state_id 8
2019-11-17 12:51:14 valetudo_state_name Charging
Attributes:
IODev myMQTT
readingList mqttjs_f3ebb274:valetudo/rockrobo/attributes:.* { json2nameValue($EVENT) }
room MQTT2_DEVICE
set MQTT2_mqttjs_f3ebb274 attrTemplate roborock
fragt nach einem Parameter den ich nicht verstehe
"set MQTT2_mqttjs_f3ebb274 attrTemplate roborock BASE_ID"
Replace
BASE_ID: with the BASE_ID typically is home
ersetze ich hier entsprechen mit "home", läuft das attrTemplate nur teilweise durch und bringt folgende Meldung
defmod MQTT2_mqttjs_f3ebb274: Cannot change the TYPE of an existing definition
Please define DEVCID first
Das MQTT2_DEVICE sieht danach so aus
Internals:
CFGFN
CID mqttjs_f3ebb274
DEF mqttjs_f3ebb274
DEVICETOPIC MQTT2_mqttjs_f3ebb274
FUUID 5dd13432-f33f-d2fd-68f2-81d927df4d647a3f
IODev myMQTT
LASTInputDev myMQTT
MSGCNT 546
NAME MQTT2_mqttjs_f3ebb274
NR 1260
STATE cleaning
TYPE MQTT2_DEVICE
myMQTT_MSGCNT 546
myMQTT_TIME 2019-11-17 13:12:31
OLDREADINGS:
READINGS:
2019-11-17 13:11:22 battery_level 99
2019-11-17 13:12:22 cleanArea 129.5
2019-11-17 13:12:22 cleanCount 11
2019-11-17 13:12:22 cleanTime 2.8
2019-11-17 13:11:22 fan_speed medium
2019-11-17 13:12:22 filter 146.9
2019-11-17 13:12:22 last_run_stats_area 3.7
2019-11-17 13:12:22 last_run_stats_duration 213
2019-11-17 13:12:22 last_run_stats_endTime 1573992255000
2019-11-17 13:12:22 last_run_stats_errorCode 0
2019-11-17 13:12:22 last_run_stats_errorDescription No error
2019-11-17 13:12:22 last_run_stats_finishedFlag true
2019-11-17 13:12:22 last_run_stats_startTime 1573992042000
2019-11-17 13:12:22 mainBrush 296.9
2019-11-17 13:12:31 map_data {"header_length":20,"data_length":65152,"version":{...................
2019-11-17 13:12:22 sensor 27.2
2019-11-17 13:12:22 sideBrush 196.9
2019-11-17 13:12:22 state cleaning
2019-11-17 13:12:22 valetudo_state_id 17
2019-11-17 13:12:22 valetudo_state_name Zoned cleaning
Attributes:
IODev myMQTT
icon vacuum_top
model roborock
readingList homeassistant/vacuum/valetudo_rockrobo/config:.* { json2nameValue($EVENT) }
home/rockrobo/state:.* { json2nameValue($EVENT) }
home/rockrobo/attributes:.* { json2nameValue($EVENT) }
home/rockrobo/map_data:.* {valetudo2svg("map_data",$EVENT,"www/images/valetudo_map.svg")}
mqttjs_f3ebb274:valetudo/rockrobo/attributes:.* { json2nameValue($EVENT) }
mqttjs_f3ebb274:valetudo/rockrobo/state:.* { json2nameValue($EVENT) }
mqttjs_f3ebb274:valetudo/rockrobo/map_data:.* map_data
room MQTT2_DEVICE
setList start:noArg home/rockrobo/command start
charge:noArg home/rockrobo/command return_to_base
stop:noArg home/rockrobo/command stop
spot:noArg home/rockrobo/command clean_spot
pause:noArg home/rockrobo/command pause
locate:noArg home/rockrobo/command locate
fan_power:min,medium,high,max,mop home/rockrobo/set_fan_speed $EVTPART1
zone home/rockrobo/custom_command {"command":"zoned_cleanup","zone_ids":["$EVTPART1"]}
goto home/rockrobo/custom_command {"command":"go_to","spot_id":"$EVTPART1"}
load_map home/rockrobo/custom_command {"command":"load_map","name":"$EVTPART1"}
store_map home/rockrobo/custom_command {"command":"store_map","name":"$EVTPART1"}
setStateList charge locate pause stop start
eine typische mqtt Nachricht lautet dabei (mosquitto_sub -v -h <IP vom broker> -t '#' )
valetudo/rockrobo/attributes {"cleanTime":"2.9","cleanArea":"133.2","cleanCount":12,"last_run_stats":{"startTime":1573992552000,"endTime":1573992791000,"duration":239,"area":"3.7","errorCode":0,"errorDescription":"No error","finishedFlag":true},"mainBrush":"296.9","sideBrush":"196.9","filter":"146.9","sensor":"27.1","state":"docked","valetudo_state":{"id":8,"name":"Charging"}}
Eine Ergänzung zu dem Template hätte ich auch noch: map-data spengt nicht nur die Zeichenzahl vom Editor im Forum, sondern bäst auch das automatisch angelegte filelog massiv auf. Ich habe das FileLog folgendermaßen eingegrenzt
./log/MQTT2_mqttjs_f3ebb274-%Y.log MQTT2_mqttjs_f3ebb274:(?!map_data)(.*)
Edit 17.11. 18:19
ich bin einen Schritt weiter, BASE_ID auf "valetudo" gesetzt und es funktioniert...
Edit 17.11. 19:13
nächste Frage / Problem: laut https://github.com/Hypfer/Valetudo/wiki/Home-Assistant-Integration (https://github.com/Hypfer/Valetudo/wiki/Home-Assistant-Integration)
For multiple zones:
params:
'zone_ids': ["guest room","study room","bed room","living room"]
At the moment you can only send max 5 zones to clean, any more than that will be ignored.
Mit setList zone valetudo/rockrobo/custom_command {"command":"zoned_cleanup","zone_ids":["$EVTPART1"]}
wird allerdings nur der erste Parameter übergeben. Kann $EVENT durch eine Perl Funktion oder regex in den benötigten array umgewandelt werden?
Sorry, da scheint noch ein bug im template zu sein, die Zeile sollte wohl eher so aussehen:
par:BASE_ID;BASE_ID typically is valetudo;{ AttrVal("DEVICE","readingList","") =~ m,(valetudo)[/].*:, ? $1 : undef }
Hi,
ich nutze eine leicht veränderte Valetudo-Version https://github.com/rand256/valetudo (https://github.com/rand256/valetudo) und Kartenerstellung https://github.com/rand256/valetudo-mapper (https://github.com/rand256/valetudo-mapper)
was soweit auch super funktioniert.
ich wollte auch das Template nutzen und bekomme bei der Auswahl folgende Meldung angezeigt:
Download started, check the FHEM-log
Please define DEVCID first
Wo muss ich DEVCID anlegen und mit welchem Wert?
In den Attributen bekomme ich unter map_data:
map_data ERROR: Unknown format 2020-01-30 06:31:27
ändere ich die Zeile von:
valetudo/rockrobo/map_data:.* {attrTmqtt2_roborock_valetudo2svg("map_data",$EVENT,"www/images/valetudo_map.svg")}
auf
valetudo/rockrobo/map_data:.* map_data
sind Daten vorhanden und auch die Map wird vom valetudo-mapper erzeugt
Sorry, da wurde was an template umgestellt. Die map-Daten werden direkt umgeleitet und sollten als Grafik irgendwo zu finden sei. Um Devid muss ich mich kümmern, aber erst kommende Woche...
Das Template basiert ursprünglich auf dem "Original"-Valetudo https://github.com/Hypfer/Valetudo .
Der Fork von https://github.com/rand256/valetudo hat einige deutliche Abweichungen zum Original. Dies trifft meiner Erinnerung mach vor allem auf die Daten von map_data zu:
Hypfer-Valetudo liefert Text (JSON)
rand256-Valetudo liefert in neueren Versionen ein binary.
Die Details finde ich bei rand256 leider nicht mehr auf die Schnelle.
Wie man den Unterschied beim template berücksichtigt ist dann die nächste Baustelle.
Gruß, Christian
So, DEVCID sollte gefixt sein, dann bekommt man jetzt hoffentlich auch via farewell eine Rückmeldung, wo die Map-Daten wie zu finden sind (jedenfalls, wenn sie mit unserem internen SVG-Erstellungscode kompatibel sind)...
Bitte um Rückmeldung, wenn ich sonst irgendwas am template ändern soll. Tendenziell würde ich halt den Standard-Fall abdecken wollen, es dürfte faktisch unmöglich sein, jede Variante irgendwie auch noch mit zu berücksichtigen, oder?
psssst: nur mal mitlesen ;) und evtl. (doch noch) mal wieder Valetudo ausprobieren ;)
Gruß, Joachim
Hi, folgende Einträge habe ich im Log.
2020.02.03 20:54:12 1: SVN download of contrib/AttrTemplate/99_attrTmqtt2_roborock_Utils.pm to FHEM/99_attrTmqtt2_roborock_Utils.pm finished
2020.02.03 20:54:12 1: PERL WARNING: Subroutine attrTmqtt2_roborock_Utils_Initialize redefined at ./FHEM/99_attrTmqtt2_roborock_Utils.pm line 13.
2020.02.03 20:54:12 1: PERL WARNING: Subroutine attrTmqtt2_roborock_valetudo2svg redefined at ./FHEM/99_attrTmqtt2_roborock_Utils.pm line 21.
Alles gut :) . works AS designed...
Jetzt ist kein Fehler mehr, super.
Vom Valetudomapper bekomme ich ein Reading mit einem PNG zurück, kann man das nicht in eine Datei pipen?
ZitatVom Valetudomapper bekomme ich ein Reading mit einem PNG zurück, kann man das nicht in eine Datei pipen?
Sicher doch.
Entweder machst Du das, oder zu zeigst mir, wie die Daten aussschauen.
Das RAW vom Mapperdevice:
defmod MQTT2_mqttjs_fa51d44e MQTT2_DEVICE mqttjs_fa51d44e
attr MQTT2_mqttjs_fa51d44e IODev myBroker
attr MQTT2_mqttjs_fa51d44e readingList mqttjs_fa51d44e:homeassistant/camera/valetudo_rockrobo_map/config:.* { json2nameValue($EVENT) }\
mqttjs_fa51d44e:valetudo/rockrobo/map:.* map
attr MQTT2_mqttjs_fa51d44e room MQTT2_DEVICE
setstate MQTT2_mqttjs_fa51d44e 2020-02-03 21:25:41 map �PNG
\
\
IHDR(Hĵ�P�IDATx����A���?s3�$�� �q���jqE����]��������Nku���,��[����U���ҽ���\
>�B@�#
$�dH����o.�L���{����~�����*
(А2
)А2
)А2
)А2
)А2
)А2
)А2
)А2
)А2
)А2
)А2
)А2
)А2
)А2
)А2
)А2
)А2
)Аv��f4�n<]�0+А2
)А2
)А2
)Аv�=c4�n<]`?
�����e�s�@C�4�@C����t��l2[g/���_eR�!e�{Z��I�|�\
eR�!e�{�|�\
TeR�!e�И~����b��h4�n<]`K���hH�����^'ۙ/V8H�4�@C�4�`�
���O�~��3Q�!eR�!���d��A�1h�I�a7��x��-�^'u��*u�iP���hH���А�lΟ�A+u�a7|�x�g���d;;�a7u��2�}�a7^��2M(А2
)Аv8&�u���A+��h�
gn2[g;;��2u�a7u��2�}��:4gc���4v��3�.��2
)А2
i���l���A+��h�M�x���4vÃO�ىѰ���t��A+u��:pXMf�lZ�2
)А2
i`��U���u���{�lg2[g/���������h�M���eh�d�p��hH���hH;;���u�������|��N�{�4i2[�37_�
��O�8��4�@C�4�ve�X�n4�f;;��:�;;�V�3��m���lg4�f7�U���N�í@C�4�@C����b�����n�X�I�^'u�V�&�u�f�{�p�&�u`�O�9�F�n�&�u�í@C�4�@C���Ѱ��Lf��F����4_�R7_�R7��~F�n�&�u��c�Xe;;�a7u��2��h�
|�d�N�Ơ��Ѱ���t��Ѱ���t��d4�`/)А2
)Аv�sf4�n<]�lOsN�{�lg�X86��Mf���x���4�.��a7u��2�1v��1����~���d4�n<]f'��e���N��U�F�nv�@C�4�@C��Ѱ���`�/V��n��~��ݘ�֩��:ى�b���t��~���Ѱ���t��l<]f;;�^';;1���eR�!e��o���ԍ��d�a7�ٱ1he7F�nvc<]f7��N�4_���Ѱ���lΟ�A+<t��*u�^'u�a7u��:�Q�!eR�!��S��:�C3��S�1h����n2[g'�U�F�n���b��~����b��1he;;��2��x�L�h�M�x��NlZ��Ơ���l���A+ۙ���2
)А2
i8�&�uΦѰ������\�/V�N��I�|�\
��h��n����'�a7�
�9���e���N�&�u�S�!eR�!��1�^'�S���v6��_7;;�1h�n2[��g2[�l��r�Lf�lgc��NLf���{��F���hH���z��*u�^'�S���^2_�r��Mf���ԍ��ԍ���_7��d��n����{�$�^'u�V���e��)А2
)Аv�C����Ѱ��O����{��mZ�������U���gY���hH����y�VΧ�t��~������d/�/V��O�`�(А2
)Аv�sf<]�\O�9��Uvb<Ͷ��N�4_���lZ����9�6�g�h�
4�@C�4�@C�ء~���d�Xe?�/V���:�������hH���hH;;;;4_�R��u�����g�a7u��:pP�hH���hH;;�F���^6_�����ԍ���~�د�U���N��4�@C�4��Oc�X����I��*�h�M�d�pnlZ��2
)А2
i����:i�|��A2_�r��A5vS7�������ԍ���W���hH����i����{��K��*�h�M�d��A2_�R��u��5�������ԍ��f��:���/V��n���@C�4�@C��4��NΥ�b��dc�J�d�n�X�����lZ`�F�n���@C�4�@C���~����b������\�/V9L6�ԍ����{�d�a7u��:\��:��x�Ь2
)А2
i����N��Uv����\�/V����e�F�nv���� ��:a����K�4�@C�4�����:9�6�ԍ�9T�U�>ic�J�x�L]�� �w�a7u��2�+А2
)Аv����挆��Mf�f��:u��*ۙ/V���:���֩
���x��m��:�����2
)А2
iΣ~������O�a7u��2�?eR�!e���1h�n<]����3��u���:���:��/V`�(А2
)Аv�}g�X����I��*u�i�~���l�X����d/��:�O��
��O���)А2
)Аv�}g4�f;;��2u�^'��1he{�lg<]�0�/V���:9L��N��~��S�!eR�!���x�p8Lf��D����4����V�Ѱ���t���O�/V�
��O����:؉2
)А2
i`�
��O&�u��A+u��2��x��A�1hew���h�M�d��N�hH���hH;;
���d�N�Ơ��Ѱ8SeR�!e��>3����1�����1h�O
�ٍ�t`w�4�@C�4��]�����:��d��NlZٍѰ`{eR�!e����R7���h�
�)А2
)Аv���A+�Ơ��Lf��^5��S�1h�n2[�d<]�����2
)А2
i`�O�9LF�n��m4�؝2
)А2
i�4����V��hH���hH;;H��*u�^'�הhH���hH;;��^'��|�\
gnc�J�d��_���hH�������u���1h�n2[� *А2
)Аvؗ�U���N8s��:{�d��aP�!eR�!��/���AS�!eR�!��/����Mf�����eR�!e�ИѰ���t���b���4���u�
��2�CS�!eR�!��O��3��u��Ơ�3Q�!eR�!���|���u�����A5�.�@�4�@C�4���~�8��4�@C�4���Ѱ�p�/V�î@C�4�@C�Ι~����bξ�b���{���^'pؔhH���hH;;�Y��ug�d���V�3�f[�Vvb2[g;;��*���:ى�b��~��sa�X�����2
)А2
ix�F�n���e���Nvb2[��cc�\
�4vӤ~�����:��/V���:8��U�F�nΧ�l�������l����R7����lZ����8��4�@C�4��!O��
���x�����uR7_���:��j<]��n4�`/��r6����-���x��n���lgc��nlZٍ�b��~��&Mf�eR�!e�p���%��*��h�M�x��v�U�F�n���e�3vs�Mf�&��2u�a7u��2�;;�^'�R�� ��0�.���{���d��v��eΧѰ��Ѱ�si2[g/�����l��@C�4�@C�8���evc<]f'��e�Ѱ����r�tù�1h� �����t�ä��d;;��*���:��|�J���e�F�n�3�.��a7{�Ơ����p>�hH���hH;;���e�|O��
�9H6��K��:�V���t��~���~������D���v�U���t��i<]����I��:u�V���e�P�!eR�!�gl4솳g<]�n4��|O����t�h�
4e4�����n�X�\�/Va�����hH���hH;;p����ԍ��lg4�n<]�n<]f;;�a7ۙ��ى�A+�h�M�F�nΦ�t8���e�L���ԍ�����lg4����f;;��2�h�M�d�U���hH����x��N��˜M��:�1��������{��mZ��d��~�1h8;;F�nؽ�t��O������_U�!eR�!��6vS7�.��Ѱ���l���b\���v&�u����lg2[g'6��Mf�O�Vvb2[��h��^6�.<��t>�2
)А2
i�~����A+u��:���:���@�&�u�4��S�1h�n2[��d��ٴ1h�n2[g;;�V���e8�F�n��t��2
)А2
i��l�ݘ��`���e���u��Lf��~�1h�n<]� �a7MO���
�ٍ�tΞ2
)А2
ix�6��Mf��s�a7;;1��s6mZ��d�T��2g���n�X�lO����:ى�b��Ѱ��
��&�u���A+�;;��S�;;n�mo}].��a�����mo���#����\�����]�.}��ܧ(�{O;;�AUUIU�:yO�������-G�Z�~d���|(�,s��c��}e.\_Z]u�Q�#V��1�}a�WQ����*���ߛ���T'?vgqjywu��IR��6��(��/�e�����I_��}�(�˯��yr���w�p�TU�-��9��������<���ֻ>��͢���H�u�I����Iug������S}�ߤxeQ���l�zu����HU%UU�e���RU��RE��͜ZޝTU>t�o��o���(r��(O���+��RUU��Ьv��l2[�VUU����s����~���1�-r�J6�|\�TE�S���?J���zgU������K�+�������;;�*n��m�ӆO/>��[��w�-�Oܓ�����T�:[�x���~�K����ȅ�_���?�N7��7_�r>����{�l���n2[�|�/V���:��/V���:��
�ٍ�t�ì�����l9q�$�������,��"U��rf&I�s��&��$������g?���G?.���_}�3��8�Yey�dq�E��Ery�;;�]]s��y�+�}��_����;;n+V�ޝ�j����K�忽�5y���2�#4���h��=w���|�ѯ���tRTI�O�JR$yG�_Mr2I��L.z�E>�K��~�S���s�eW�,�lnn��I.�I�"E��G��_��"����}��o����_�������U���l�Z���������k�/��\q�g�(��W;;gAUU9�����eߔ�^�Τ��V��*�H���"���V���{z^�җ�����}A��J��J�-7��|�ޏ��+>���+����|�3�����qU��|�5�����:��~���G~����vK����������S�ǯ����H�{q�����/V�
���d���Ơ���t��~���TU����z�u�\,�'e��-�KRe�"U�2��/�����(�����K�HUU��*7�rs~�U?�[�k��U������]���괊.�Vˏ.��_����~��\�ʢ<� �����ŕ�n:��=���<g��������'��]�5�y��<��������3����h�M�x��^4_���~�������k2[����n2[g'6��I��BUU9q��?{��.N�rƪ$'��Z�?K�-e�oxV��{yq��W�(�E��~K~�W~&��W�Cn~���f�)�TI�I�Y��-7ϊ���Y�S��#�����s����O��x��y��xF����oz��������71�~�3����,��^�]8��?������d�N�*g��'�3U����(r�㯭��[�1���IQ)�"/y���)��������xsR%)�.LrI�nr��#���VEYfKQ�<}*o����w>���F٬�E�V��g���+~��/):_��(Rm�����Y���TU��k�!�\�Y����b�ۓ����I�$oO�)r*I�\�����?�����Z���G>����/�(/|�/��{O)���KyI�\�+��2�����ڇ]�[>|K��}�������?�֯����Y�}2�~ۛ�>y"�O��]w�^��}����GgKQ9��_����W���Uo��Nq�#�|��o��/��_��j8g��N`�
�ى�t�c���#�͒����l&i%�%ɋ���q_��/�+��+r�U�e����+�O��?�����_ln&)�����<�9����X���\x��i�E��~�c��������}o���ߖ����yo���oȇo}_�����On����GgKY�����y��g}E�e_���������;;�_����z�3���O��o�X������<������#oLR�IZ�K�$�$UR)����|敟����;;�sc����w����bs3)�e���'�G~�G���륹��rɅ��H�HʲLQ)�2EQ�,˔e��.�,�]zI�9�U�.�4EQ���LY�)�"�걏��|�w~w������'��o��TU��i`�����{A67O%ev�T��S�>E�<a��\}��)�")6�ۿ���vۉl)��������?�U����(����(�j]��(�TU��(� eY�����o}^~�w~����~M�>u2��埪��ǧ��(���+�UU��Ȣ��<$U���"�$E�\�YWV��s���/�4�:?�Sߗ�����ȑ�����~ߏ��K�LQ)�"g�����e���>6UU�(���K���'SUU677SUU��Z�\���o^���Ž�SE���Wo��j��i8o&�uػF�n�&�u��t��Ѱ�팆�p8�\���ΗVI��ٙ*ɇ��?I��j'/}��'����ʫ^��y���uN��L���ѣO��%����^���N�<}2�~�Xq��TU������o��xڗ|Y��_����_�|���N;;EQ�(�|Σ�/��gV����.���.�{�w�_6��Mf�K�^'�C����*����俵�E����V��I���������UREQ�-o��?�ΖG>��껾�sх���Nlnn�tN�E�����{_��D�-EQ������mo*n~ۛR�ڹ����ϼ��s٥�l��H+��_X��?�:[�{�U�K��D�x�=���t�yh>���q��y�c�V$E��&����k����{��x�S�F�j��UU嶏ޖ��������NT)�"EQ��ˮʑn/e���(��un��?��C/���-�RE��w~k��w���O�pq�˟_8'�8C'�]���ץ:]e��$G�(R�A��I���w�VE�*r��u�뮓��']Q}�W}c��`]�������_}M�U�-_sq�_����(�^}U�o�)?��^\���7�z����������կ��\sť��+��X�'[>r�Ήv��l��l4�f;;��2u�^'�ѻ�(��٩�J�I+_wǑ�܉)�"�_U��'~qq�ln�k_��|�s��u�W\��(�S��=��
7U���}��O��?9�_��R�ؒ���'f�Y�(���h&��s�����o�6�!�r�k����GWI�TUVw8���Zy0G��Sw�
�l9zlh�|���u�Ơ��i<]f;;�^'��v��Gn�ê�n)rf���L�ؽ ������֩�B�lnV���Y�Oe˩S'�^�ΖV��W\�TERdG677�7����Oo-r��ŭ����#�p0LUU)�2[Z�V>�����������Gn��b��*�;;nIUU�r�ï)�����q�鞺�z�S?X\w�u�����y07��ʧ:zl�oh�S=�f����/~k��H�*�N���.r������G6��w�SUIQyғ�E��IUUyӛ���o���>y�#.�����HQf'��ʺZ�W^�+�f>����_�)�"EQ���j庇_�_z�O��}n�?����%�;;�����/�ӟ��<��O�^�����v[��6���ߞO��Vv��Zy 7��\
�s��:�_���{/�'E>�"���<pI~�Ie��f���l�Y%)��ʗ|�0G�t��w~緋��O')�g}Y����SUU��ʖ��RE��Ȗ�eʲ�E��� EQ�H��?��yc�ƤJ�?�"ELY�yԣ��,�������N�sY��<u:wݳ,��J�"�4�"�?���p�
�|������xC+�u��:4����R7����h�M�x��N���lg4�n<]������x�C�f�UT��i��~�%��3�TU��(���,r��(�}F67�)�V���'VG���S�6�ݔ{�+�_��8y"w�uG��v^��_�����?O��g?'_����,� ������)�"y��T]к�ȃ��*��
\,�ϖ�q]v��)�"�N��_�zk��HQ��k����u>Ս7��[���uv��Z���c��a7p�mZ��d��NlZ�
��O��k��*�M�*j�\߽ ��e��V���(��=�����Sɛ��{��o�_����{���u���e�]\��G����W��ey��i������6�li]����ߪ��H]Q)�E��ʖ[?|k�"��*EQ�S�N��{]RUIQ�_�i%UU�/�3�������B�j3���o��SҔ����T7���9zlv��u�s�
�l9zlήv��js�U%_z�ey��pu.^n��e��w�nOQ�RUU���Q)�v���w�E67�qW^yU�� E�\}��m��`V����|�E����LR%)� �����'n���7䞻��[^��<�;;�[�¿����%i�Z��*UU�(����o�����ZTU�-�SIq�����~��)�"��f����5G���@n���s��:���c�l��V�[����3tq��ܽ�#�Hn������y٬�I�|����R�l�;;%)�T)�r�H+�Nm���e��{s��\tѥ��N��D��'碋.̖����T�_�EQ��T?��?Z��}�ɫ�չ��{��_xu��v���8���I�"�?����{��/~��o�{O�\p�%y�����(�����y˛ߜ��R��\��A���>p��:��Z���c����[��Z�r��:�^;;p���ԍ��ԍ����{�lg�X������R7�����N�������wA'�����tRI:�.6(HE䲵�G�\
k-�@Y���^\
��� �]W��G\
�˂��Z�@�D�@T�q��� T�d��NFZ���������}��G�TMn��������?���7M������y�zZ.��.��o��<����y�{����fy��+<5_���!��]�я~"�#��r~�k��J�|�RJ���}��5�|�+�>zC�$/zދ���x{s��V����h�����������q�_xq��c���_��TU�z���Gr�u�r�������WeXߨ���:���F�s��F���d}��n3�γl4�v�a���Lfu�c<�g�h��O7'���=�ߛT�MM��6]��h����R5MJ�r�e_���?/U�4M�k�=���rܗ~���U��&UU��TU����+���2��qn��
I����~h��Y���g��]������O��i���q��t5����؍7fq���?rm.��=�o�����ܖ��:���:tr��FNM7'���W���甝�&I��5ǒ�>����ݭ*�����w���>���5�NU5i�E���sUU��RJIIɏ|��+��Ӟ���#G>�|�����"���r�_�_����z�nI��个���n�"��O���\|�����d}��m9x��[��Qg�Zߨs����o���up�nwރ�t�*�&�r�.I�;;$������;;�������,M��̟i�����c��/��<�a������4�TU�ɺ`��հ��?�ʼ�}������/}K�f��U�4Y����/����_ޯn���r�b�ȧn�t^���7I�TU�=���*�\
[Zߨsk��s�o��K�7�<��q�u8q��9dmu%[Y[]��4�Ձ�e4�e�x:ϲ�Օ,;;|t3[O��u��:�n�榜���|k��M�H~�iOo�Я��v���}d��^����>�����̣�MY]�<U�SRUU.�wQ�E����|y�+��8���W�i���;;/�{ߣ�Y���g5M��k^�|���4M�����ܩ\
�l}���:x��[��Qg�Zߨs����o�٩F�^�����^3��َ�G7���t�e�A/�&�:��nN����>y�|de��jrҚ$kI��Y4��o����I���~�*��]ߔ7���ܬ�7�U����3��,I)%����㚦������u�\�7���������mO\�g-�4I���o��k�[�,�����K�.�^�un���|���:���F��:Yߨ���
���J���c���cV�TTIu���=Y�m������]���L�Ty�c�����W4�|�۪���y�{y����6�G|}u^�K)%�������wISUU�M9���TU�Ϫ�*ox�ۚg�ďU��"U)y�ӟ��a8;;�7�|��:�\�uv���:t��Q��up�v��W��>;;��nH����I��}9��7������?Η}�O6Oz�3�R���^��j���k^����G�y��[=�'���z�Oe�X�����4M���|�����4M�TU�k�&UUe�X��G?�����V���r���<����+߹�Yߨ���֬o��)�7�<��q�u�u��9l2��k�+Y6�Ձ����l���J�>��\UU�K|�����8M��4IuS��v%�ˢy�UG�ޔg?���w��@��J�8����7��r���476y�>7��f���'����)��D-�,���o����O?+���w�i��N'/y�F�����4i�&��u���[�Yw���δ�Q��<�ɉXߨs6�o�9���N�7�g�dVg;;�̙4�w�m��$TU�G��iy�G_��c7$UNXU%�N��ޥ�>ߵ�z�K��ر&�^;;�~�מ�����J��a�0zB^�$7%7^c^�3/�+_����3���/����wȲ���4M>�i�4i2��
��_���_���ﯽ�j���r�{~a���|cU%i�&��O�۾��JS�9��;;ߵ��oyJu��{�o�9tr2�7�l��F��:Yߨ�-up�������]ݼ��_�R�5M������䊯</W]�ͫ_},�E�_�ŗ�����I����=�x���3~.��
�������_��>|]���U�~����Ǧ����G_�������O�t�[���G���/{~�w����wݐ?���e�OUMӤ{<��'�G����k���_�͑|�w<)����z_�����Uw��^aoZߨs2�d+�u>���:t��Q��
�)�����/��U͇�V���5Iu,^�M�jRU�d���wC��c�u���s~��՛��Ƽ���%\�o��oϣ��Q�7}�7��QR'�����=y�[��T�����5���T��Ͳ���;;����
�����e��f��r�&�E��S|��_���ir���on��V�{�_�i�t�]����F��?(�Y�u�r�@''b}�����o��3�`OZ[]�V�VW���Օ�V.���y��Uϻi=7�tR���J�U��n�%��4�|�C���t�����{n�r,�nL�xJ~�G~)�w~.��e��_��<����m����d���:Y�]����5I�����\[5M��fI����w�<_�5�ȓ���\5x`�4i�|����o�F������ir���c�_���Xߨs"�七:Y��Q8}��N�Mfu�>���
zY6����up\
��ʗ���9��O���?�f�HJ���K���E�,�:o������W]��ؓnJ�K�y�c��K�������;;���/ί=��rlq,����n��'oȫ^��TM�������EJ�dQ/�&��m�t�+�Knw�f�k���l_v�*�5��p㱼��ߚ��s��j�:�]�����}�_8�7�|����o�9x��sY7��o�~8o~�59����&I��IR'����T�"/}���Y�>�뒃i�$�H��F��/U6���3~θy��U���r�z��f_ٗo~�7WW��������W������?|�V��iM�������c���T%M���r\U哟�t~��x��������4M:��Ͻ���<�?�x��Ά��:t��Q�\�
�6�N'w���ɱ#����/K�X$%�R�<�^��;;_�_,o������?��H�פ�+R�N�T���W���xw~�Y?���^������T�\v�e9��G]]]���ӤI�Jn�$�M�,i��X����/�}]^���;;��MY�1����<�ɿ�+��'�i��ٴ�Q�\�
��h�K�F�^�Mfu�l��*�y��u�W��;;�o��߳Xܔ���*�p�J�ozx~-̛�I���I��*$yI�cI��7]�G?���C��W�{��{�\�n������y+I���cǪ���V��ǯ�d>�o>��g��?�~�����S���"UU����\xq�� On�����j�&UU��g��d�x�V����Ϻئ�������e?��~Q�w���G���>�l添/�?����$�g�I�����T�'���oΛ���^Tݽ�\����=�~Ճ8h�z�/������.K��3�ݗ�����Zܴ�ű�4M��ߝ.�W��o���m��ew�r����}��UU帋V�3����5���X��4�")MNX��xP�~�O'��Iޘ4u�t,����@�4�[�}k�����*�5M�[��TU��馳ra�t������������i�&@��8���J��T�ד��xq��;;?���z�E��&�rKM�*�n%�J�|o��I�GI�&y{��I��&MU���i��I�*�UU�q�{^.���}�/V��qS�[��v�N���*@��ഘ�꜌�G7�l4�e;;&�:�STU�t�U^zu����V���%�����.9��:UU��I���֚*i�|qr��.�x\s��>2�x�{��ow�|�C�s��g����.�����#��M��Ds��|k.��Zλ����vUU:�Yu�TU��ɬβa��e�A/�1��������*9��\t�o�Eͷ�n8���xUs��I����ռs}��"͢�-TIJ�N�Y��=�;;}�_���Tw��#ӽ��*7��}�,�rKU�]��3������ʾ�/�W��=�Y6�չM�T�أJZ�
�d2��k�+Y6�Ձsհ�ɲɬΙ4���ʰ� �����m���s����%%-���Ѡ������,[[]�^2��i�ᣛ��^ػ��N����,[[] gO @KJZRВn�6��l2���SВ�����`�[[] g�h���Lfu�Lfu�9JZRВ������%%-)hI7��1�w���t����%%-)hI7��dVv�ɬβa�����%%-)hI @KJZRВ��t{�dV��;;|t3����PВ�������cmu%gӰ�ɲɬ��4�w�%-)hI @K�hٰ��V��N����[.��7�i�N%-)hI @K�h�dV���G��Wgʏ��w�JZRВ��tg�U�ٗ�������%%-)hI7�ǰ� �n����,���lǕ�K��БE�]��d+W�g_ؾ������%��f�A/'c��d�dV�����˲CGYv����q��"�ӡ#��s����dV؝JZRВ��t�9��nf���J�c2��l��d�h��vLfu8�:�Ȳ+��,;;td���p,ˮ�Ͼ,;;td��PВ�����`��;;Y6��9���y����N֡#�p����^5�w+hI @KJZ�
�笭��l
zY6��8%-)hI @K�ئɬ@F�^�������r�VY�MW�/�ʡ#��MW�/Yv��"���%%-)hI7��7��Y6�w�l2�����d+��n>���%{ɕ�K�:���t���e��,��+��WВ�����8�������'�БE�]��dٕ�KNơ#��������%��i��d'������nf���J`���>���]��d١#��I��,p*JZRВ��tܦ�t�e�A/�&�:[9|t3��h���0��Y6��l2��.����,����%-)hI @K�8G���d�ᣛa�rɹ����VY`'*hI @KJZ�
���̲�Օ,[[]ɲɬ��X[]�v��,����
�~'�&�:{�h�g�U�ٗ6:��V��_��:��nTВ�����8����R/�&�:�ɬβa�`o
z����yN�ɬιd��M��,��:�Ȳ+���&��,�����%%-���a��e��<��VW�����,
z��dV�l�;;Y6����dVg7�;;�����IW�Yd79td���БE��������%��6�γlmu%'c<�g�h��v>�����N0�wp6��,O���������%��6���ɬ�v����^�2�γl<�g�h���0��Y6�wІѠ����y�m%-)hI @K��=d<�g;;F�^����,O�9�F�^�����e�Y��l2����������SВ�����8����dٰ�ɲ�t��i<�g�h�˲ɬ�7>��ek�+Yv��f�����\2�w��ɬ�7
��,���{���X�d����%%-��a��<m
z���G7s2��V��Nv�a��SQВ������CF�^�����d��<�F�^��a��d{z����yΦѠ��Lfu�
��,���I�~'�1��NM @KJZRВn`
z��x�V��le��d7����^1�γlmu%;;�ᣛ�I��y������i���t�;;��dV�u%-)hI @K��=d<�g/O���h��N2�w{�h���O�����JΤ�Օ�N��nf�h�˲�t����,���,;;|t3����4�w���t��
zNM @KJZRВn�2����t�3i4�e;;F�^�m��<��F�^N�x:ϙ4�r:���,
z��x:��4��l<��d���lǰ��V&�:'c<��tO�Y6��l��d�dV��������%��9d<�g'����f�~';;�h����<g�x:��4��Ӧɬ�v���;;S @KJZRВn�2��l<��S7�Ձ�e���t
zَ�t���%%-)hI7p[[]ɲ�G7�L�Y��i��d�x:��h��V��y�c4�e+�Y�֕���%%-��'�A/Ǎ��,
z����yv�Ѡ�e��<;;�h��V��y����G @KJZRВn�2��َ�G7��Ѡ`wX[]ɲɬ��8|t3'c4�e;;F�^v�Ѡ�e�Y����,��꜌ɬβa���1�r2&�:�;;��N8u%-)hI @K�N��Օ,;;|t3��imu%'c2�����,���lǰ���4��v�������%��6�ҦѠ����,�����&�:ˆ�N�sC @KJZRВn`
z��dV�lO�Y6�;;Ű��V&�:Жɬpn(hI @KJZ�
pƬ���Sw��f�����[JZRВ��t�5�YN�h��ɘ���K @KJZRВn8'Mfu`�O�Y6�g۰�ɲɬ�O @KJZRВn�r��f������k4�e+�Y8�&�:�9%-)hI @K��s�h�˲ɬ�)hI @KJZ�
�C&�:�\�Y�e�~'��VВ�������&�:g�x:'��%%-)hI @KJZRВ��t-�;;Y6����QВ������ �~'�&�:�����,[[]��4�w��ɬ{G @KJZRВn`�;;��dVg'�;;��dVg7�;;Y6��a�X[]��4���KF�^����p�JZRВ��t�9a2���Mfuv�ɬβa�`oO��ĕ���%%-�8�&�:��dV�u�A/���y�m%-)hI @K��<��N�2�w��Y�Sq��f�����6��É+hI @KJZ�
кa���d<��d����a���Lfu��a���Lfu��
z��dV�t�;;��dV�t�;;9�Y��d��d�dV�sO @KJZRВn�g<�g/���le2��l����LfuΦɬ��4��Yv��f�����
�~'[�����*hI @KJZ�
;;�dV�֬��d/���w
��le2�������ɬ��4�w�l2�Ӧɬβa��e��nf���Jඔ���%%-�`��;;Y6��v�ɬιd<�g���J�%�Y�ek�+�UВ������]j��d�dV`/:|t3��VW�]�Y������L���Оa��e�YN�������%��R�Y��0��9�����k��d+�Y�6����%%-�`��������,���M�~'{�x:ϲѠ�e�Y��l��d�dV�L:|t3[Y[] gΰ�ɲɬ'n2��l��81�YΜ������%��p�~'�&�:ܶa���l���g4�e+�~'{ɰ��v���,
z��^�2��9���NN�dVg7�;;Y6���ˆ�N�2��9�&�:�1�w�l2�p*JZRВ��t��6��g�h���4�γ�Ѡ��
zَa��6
���f�~''c���dLfuΤa���Lfuv�a��e�Y����le2�p\ @KJZRВnv�a���d��d+�Y�e�~'�1�Ձ�b<�g'O�a�
zَa��6
���%�~'�1�w��ɬ�N2�w��ɬΙ4�w�l2�{E @KJZRВnβa����;;�M��NN�a��s�x:;;�h���4�w�����M�~'��dV�RВ������3l<��l
zY6�γl4�e�x:ϲѠ�e��<�F�^����le4�e+��<�F�^`�O���
z9���N�-%-)hI @K��c��y�2�γ��t������t��1�����tN�h���4��é+hI @KJZ�
{Ұ�ɲɬ�x:;;G @KJZRВ������%%-��=i2�;;] @KJZRВ������%%-)hI @KJZRВ������%%-�v�Ѡv�������%��.6�γl4��ݣ�%%-)hI @KJZRВ��t�1�~'[�����JZRВ��t{ذ�ɲɬΙt��fn�h˰��ɘ����VВ�����8���l�dVg+�A/[�����2��Y6�w;;M @KJZRВn`O�Y6��l<��d��l����,Os�A/�SLfu`�)hI @KJZ�
�a��<�1�γlmu%�>%-)hI @KJZRВ������
z8�~'$%-)hI @K�N�ᣛY6��l<�g�h����%%-)hI7�m
z��)hI @KJZ�
p���yN�a��)&�:ж������%�g�x:��Ѡ�3i���VВ�����v��t��JZRВ������%%-)hI @KJZRВ������%%-)hI @KJZRВ��k�i9��6��Ip��4'
�Ip��4'
�Ip��4'
�Ip��4'
�Ip��4'
�Ip��4'
�Ip��4'
�Ip��4'
�Ip��4'
�Ip��4'
�Ip��4'
�Ip��4'
�Ip��4'
�Ip��4'
�Ip��4'
�Ip��4'
���'�:�IEND�B`�
setstate MQTT2_mqttjs_fa51d44e 2020-02-03 20:52:42 name rockrobo_map
setstate MQTT2_mqttjs_fa51d44e 2020-02-03 21:12:02 subscriptions valetudo/rockrobo/map_data
setstate MQTT2_mqttjs_fa51d44e 2020-02-03 20:52:42 topic valetudo/rockrobo/map
setstate MQTT2_mqttjs_fa51d44e 2020-02-03 20:52:42 unique_id rockrobo_map
Vermutlich haette mir auch eine gekeurzte Version gereicht.
Ich habe 99_Utils.pm mit der Funktion WriteFile erweitert.
Damit (d.h. nach dem FHEM-update morgen) koennte man folgende Modifikation implementieren:
attr MQTT2_mqttjs_fa51d44e readingList mqttjs_fa51d44e:homeassistant/camera/valetudo_rockrobo_map/config:.* { json2nameValue($EVENT) }\
mqttjs_fa51d44e:valetudo/rockrobo/map:.* { WriteFile("www/images/mqttjs_fa51d44e_map.png",$EVENT);; {map=>"images/mqttjs_fa51d44e_map.png"} }
attr MQTT2_mqttjs_fa51d44e devStateIcon { '<img src="fhem/images/mqttjs_fa51d44e_map.png" style="max-width:256;;max-height:256;;">' }
Zitat von: rudolfkoenig am 04 Februar 2020, 11:06:53
attr MQTT2_mqttjs_fa51d44e devStateIcon { '<img src="fhem/images/mqttjs_fa51d44e_map.png" style="max-width:256;;max-height:256;;">' }
:) Jetzt weiß ich also auch, wie man Größenangaben nach devStateIcon bringt....
Morgen gibt's ein template-update, das für alle das devStateIcon bringt und den Hinweis auf die erforderliche Änderung der readingList, wenn man die rand256-Variante nutzt. Kann man vermutlich noch verschönern bzw. den Hinweis auf den weblink löschen (?), Vorschläge sind wie immer willkommen.
Funktioniert wunderbar,
Vielen Vielen Dank Euch Beiden! So habe ich mir das Vorgestellt.
Zitat von: BM030 am 05 Februar 2020, 06:23:35
Funktioniert wunderbar,
Vielen Vielen Dank Euch Beiden! So habe ich mir das Vorgestellt.
Danke für die Rückmeldung.
Nur um sicherzugehen: das bezieht sich auch auf das attrTemplate?
(@Rudi: da sind die Dateibenennungen dynamisiert; habe nur grade gemerkt, dass als default svg statt png im devStateIcon stehen müßte. update folgt bei Gelegenheit).
Zitathabe nur grade gemerkt, dass als default svg statt png im devStateIcon stehen müßte
Sorry, das habe ich nicht verstanden.
Die Daten kommen doch als PNG, oder?
So wie ich das verstanden habe, hängt es davon ab, welchen "flavour" man hat.
Default ist das Senden von Roh-Daten, die "unser" Code zu svg macht. Das sollte daher auch im devStateIcon stehen, wenn der "2svg"-Code genutzt wird.
BM030 verwendet eine andere Variante, die direkt ein png schickt. Da muß man dann die readingList anpassen _und_ das devStateIcon. Ich hatte versehentlich beide Varianten gemischt, svg-coding und png-Anzeige...
Zitat von: Beta-User am 05 Februar 2020, 08:15:45
BM030 verwendet eine andere Variante, die direkt ein png schickt. Da muß man dann die readingList anpassen _und_ das devStateIcon. Ich hatte versehentlich beide Varianten gemischt, svg-coding und png-Anzeige...
Jaein, das eine MQTT ist der Valetudo, das andere der Valetudo-Mapper, zweiter liefert ein PNG das durch die Zeilen:
attr MQTT2_mqttjs_fa51d44e readingList mqttjs_fa51d44e:homeassistant/camera/valetudo_rockrobo_map/config:.* { json2nameValue($EVENT) }\
mqttjs_fa51d44e:valetudo/rockrobo/map:.* { WriteFile("www/images/mqttjs_fa51d44e_map.png",$EVENT);; {map=>"images/mqttjs_fa51d44e_map.png"} }
attr MQTT2_mqttjs_fa51d44e devStateIcon { '<img src="fhem/images/mqttjs_fa51d44e_map.png" style="max-width:256;;max-height:256;;">' }
eine Karte darstellen und das PNG als Datei abspeichert, damit dies weiterverwendet werden kann.
beim Roborock selbst habe ich aus
readingList valetudo/rockrobo/map_data:.* {valetudo2svg("map_data",$EVENT,"www/images/valetudo_map.svg")}
wieder
readingList valetudo/rockrobo/map_data:.* map_data
gemacht,
damit kein Error angezeigt wird, die Daten an dieser Stelle werden dann an den Valetudo-Mapper weitergeleitet, der mir das o.g. PNG zurück gibt
PS: Ich hoffe, dich nicht verwirrt zu haben...
Greetings Gordon
Ah, ok. Aber dann brauchen wir bei Nutzung dieser Extension den map_data-Zweig eigentlich in dem MQTT2_DEVICE gar nicht, oder?
Bzw. die kann dann so aussehen:
readingList valetudo/rockrobo/map_data:.* {}
(Das MQTT2_DEVICE leitet nichts weiter, das macht der MQTT-Server).
(Wenn die extern erzeugte Karte irgendwie "besser" ist als die interne, wäre es natürlich toll, wenn "unser" code auch verbessert werden würde...)
Zitat von: Beta-User am 06 Februar 2020, 08:30:40
Ah, ok. Aber dann brauchen wir bei Nutzung dieser Extension den map_data-Zweig eigentlich in dem MQTT2_DEVICE gar nicht, oder?
Bzw. die kann dann so aussehen:
readingList valetudo/rockrobo/map_data:.* {}
(Das MQTT2_DEVICE leitet nichts weiter, das macht der MQTT-Server).
(Wenn die extern erzeugte Karte irgendwie "besser" ist als die interne, wäre es natürlich toll, wenn "unser" code auch verbessert werden würde...)
ja, dann wäre das so.
Nunja, bei der Karte hat man einige nützliche Eigenschaften:
"mapSettings": {
"drawPath": true,
"drawCharger": true,
"drawRobot": true,
"drawForbiddenZones": true,
"drawVirtualWalls": true,
"border": 2,
"scale": 4,
"gradientBackground": true,
"crop_x1": 30,
"crop_y1": 70,
"crop_x2": 440,
"crop_y2": 440
},
So kann man die Seiten der Karte abschneiden, damit diese nicht unnötige Flächen ausgibt.
Die anderen Optionen erklären sich ja auch.
Hallo,
die Größenangaben in devStateIcon greifen bei mir nicht, 256x256 sollte ja quadratisch sein, mein Bild ist rechteckig, egal welche Werte ich verwende.
Habs auch schon mit einer width und height Angabe versucht, greift auch nicht, oder mit nur einem ; ,statt wie im template mit zwei ; .
Beispiel:
{ '<img style="width:100;height:100;" src="fhem/images/rockrobo_map.svg" >' }
Meine Haus ist lang darum mag ich das Bild drehen, das klappt:
{ '<img style="width:100;height:100;transform: rotate(90deg);" src="fhem/images/rockrobo_map.svg" >' }
Zum Verständnis siehe Bilder im Anhang.
Woran liegt das ?
Da ich in der Materie nicht drin bin eine doofe Frage zum RETAIN-Reading im MQTT2_SERVER.
Dass das Reading so extrem lange wird wenn man die Map haben möchte ist nicht vermeidbar ?
Wegen der Länge hab ich es mal als Datei angehängt.
Gruß
Thomas
Hallo,
ich verwende die MQTT-Anbindung und bin echt begeistert, vielen Dank für die tolle Arbeit.
Allerdings habe ich ein Problem, seit ich zwei Roborocks eingebunden habe. Nach einiger Zeit verabschiedet sich der MQTT2_CLIENT und ich sehe im Log nur noch
2020.03.21 17:50:32 1: 192.168.178.144:1883 disconnected, waiting to reappear (chrisMQTT2)
2020.03.21 17:50:32 1: 192.168.178.144:1883 reappeared (chrisMQTT2)
2020.03.21 17:51:18 1: 192.168.178.144:1883 disconnected, waiting to reappear (chrisMQTT2)
2020.03.21 17:51:18 1: 192.168.178.144:1883 reappeared (chrisMQTT2)
2020.03.21 17:52:04 1: 192.168.178.144:1883 disconnected, waiting to reappear (chrisMQTT2)
2020.03.21 17:52:04 1: 192.168.178.144:1883 reappeared (chrisMQTT2)
2020.03.21 17:52:50 1: 192.168.178.144:1883 disconnected, waiting to reappear (chrisMQTT2)
2020.03.21 17:52:50 1: 192.168.178.144:1883 reappeared (chrisMQTT2)
Abhilfe bringt nur noch ein shutdown restart des FHEM.
Hier noch ein list der Devices
Roborock 1
Internals:
CID rockrobo
DEF rockrobo
DEVICETOPIC chrisRobo
FUUID 5e49060f-f33f-8d80-e420-703e823303b5d021
FVERSION 10_MQTT2_DEVICE.pm:0.212970/2020-02-27
IODev chrisMQTT2
LASTInputDev chrisMQTT2
MSGCNT 33
NAME chrisRobo
NR 443
STATE docked
TYPE MQTT2_DEVICE
chrisMQTT2_MSGCNT 33
chrisMQTT2_TIME 2020-03-21 18:13:49
READINGS:
2020-03-21 18:13:49 battery_level 98
2020-03-21 18:13:49 cleanArea 1487.7
2020-03-21 18:13:49 cleanCount 121
2020-03-21 18:13:49 cleanTime 24.7
2020-03-21 17:58:33 command_topic valetudo/rockrobo/command
2020-03-21 12:47:06 error Wheels on top of void, move robot
2020-03-07 23:15:49 fan_power set min
2020-03-21 18:13:49 fan_speed max
2020-03-21 17:58:33 fan_speed_list_1 min
2020-03-21 17:58:33 fan_speed_list_2 medium
2020-03-21 17:58:33 fan_speed_list_3 high
2020-03-21 17:58:33 fan_speed_list_4 max
2020-03-21 17:58:33 fan_speed_list_5 mop
2020-03-21 18:13:49 filter 125.2
2020-03-21 17:58:33 json_attributes_topic valetudo/rockrobo/attributes
2020-03-21 18:13:49 last_run_stats_area 13.9
2020-03-21 18:13:49 last_run_stats_duration 1055
2020-03-21 18:13:49 last_run_stats_endTime 1584808649000
2020-03-21 18:13:49 last_run_stats_errorCode 0
2020-03-21 18:13:49 last_run_stats_errorDescription No error
2020-03-21 18:13:49 last_run_stats_finishedFlag true
2020-03-21 18:13:49 last_run_stats_startTime 1584807594000
2020-03-21 18:13:49 mainBrush 275.2
2020-03-21 17:58:32 map_data Wrote www/images/rockrobo_map.svg
2020-03-21 17:58:33 name rockrobo
2020-03-21 17:58:33 schema state
2020-03-21 17:58:33 send_command_topic valetudo/rockrobo/custom_command
2020-03-21 18:13:49 sensor 5.3
2020-03-21 17:58:33 set_fan_speed_topic valetudo/rockrobo/set_fan_speed
2020-03-21 18:13:49 sideBrush 175.2
2020-03-21 18:13:49 state docked
2020-03-21 17:58:33 state_topic valetudo/rockrobo/state
2020-03-21 17:58:33 supported_features_1 start
2020-03-21 17:58:33 supported_features_10 send_command
2020-03-21 17:58:33 supported_features_2 pause
2020-03-21 17:58:33 supported_features_3 stop
2020-03-21 17:58:33 supported_features_4 return_home
2020-03-21 17:58:33 supported_features_5 battery
2020-03-21 17:58:33 supported_features_6 status
2020-03-21 17:58:33 supported_features_7 locate
2020-03-21 17:58:33 supported_features_8 clean_spot
2020-03-21 17:58:33 supported_features_9 fan_speed
2020-03-21 18:13:49 valetudo_state_id 8
2020-03-21 18:13:49 valetudo_state_name Charging
2020-03-21 17:07:52 zone set Vorraum
Attributes:
IODev chrisMQTT2
comment For original code for "attrTmqtt2_roborock_valetudo2svg()" see <a href="https://forum.fhem.de/index.php/topic,104687.msg986304.html#msg986304">this forum thread</a>. To display generated map seperately, define a weblink device: <br>define valetudo_map weblink htmlCode <img src="fhem/images/rockrobo_map.svg">
devStateIcon { '<img src="fhem/images/rockrobo_map.svg" style="max-width:256;;max-height:256;;">' }
group EG
icon vacuum_top
model roborock
readingList homeassistant/vacuum/valetudo_rockrobo/config:.* { json2nameValue($EVENT) }
valetudo/rockrobo/state:.* { json2nameValue($EVENT) }
valetudo/rockrobo/attributes:.* { json2nameValue($EVENT) }
valetudo/rockrobo/map_data:.* {attrTmqtt2_roborock_valetudo2svg("map_data",$EVENT,"www/images/rockrobo_map.svg")}
room Esszimmer,Saugbereiche
setList start:noArg valetudo/rockrobo/command start
charge:noArg valetudo/rockrobo/command return_to_base
stop:noArg valetudo/rockrobo/command stop
spot:noArg valetudo/rockrobo/command clean_spot
pause:noArg valetudo/rockrobo/command pause
locate:noArg valetudo/rockrobo/command locate
fan_power:min,medium,high,max,mop valetudo/rockrobo/set_fan_speed $EVTPART1
zone valetudo/rockrobo/custom_command {"command":"zoned_cleanup","zone_ids":["$EVTPART1"]}
goto valetudo/rockrobo/custom_command {"command":"go_to","spot_id":"$EVTPART1"}
load_map valetudo/rockrobo/custom_command {"command":"load_map","name":"$EVTPART1"}
store_map valetudo/rockrobo/custom_command {"command":"store_map","name":"$EVTPART1"}
setStateList charge locate pause stop start
Roborock 2
Internals:
CID OGrobo
DEF OGrobo
DEVICETOPIC chrisRoboOG
FUUID 5e63e821-f33f-8d80-f3b6-2cade6e72e56a985
FVERSION 10_MQTT2_DEVICE.pm:0.212970/2020-02-27
IODev chrisMQTT2
LASTInputDev chrisMQTT2
MSGCNT 21
NAME chrisRoboOG
NR 457
STATE docked
TYPE MQTT2_DEVICE
chrisMQTT2_MSGCNT 21
chrisMQTT2_TIME 2020-03-21 18:12:07
READINGS:
2020-03-21 18:04:07 battery_level 100
2020-03-21 18:12:07 cleanArea 298.8
2020-03-21 18:12:07 cleanCount 23
2020-03-21 18:12:07 cleanTime 6.4
2020-03-21 17:58:33 command_topic valetudo/OGrobo/command
2020-03-10 13:06:23 error Wheels on top of void, move robot
2020-03-07 23:10:26 fan_power set high
2020-03-21 18:04:07 fan_speed medium
2020-03-21 17:58:33 fan_speed_list_1 min
2020-03-21 17:58:33 fan_speed_list_2 medium
2020-03-21 17:58:33 fan_speed_list_3 high
2020-03-21 17:58:33 fan_speed_list_4 max
2020-03-21 17:58:33 fan_speed_list_5 mop
2020-03-21 18:12:07 filter 143.5
2020-03-21 17:58:33 json_attributes_topic valetudo/OGrobo/attributes
2020-03-21 18:12:07 last_run_stats_area 17.4
2020-03-21 18:12:07 last_run_stats_duration 1279
2020-03-21 18:12:07 last_run_stats_endTime 1584808027000
2020-03-21 18:12:07 last_run_stats_errorCode 0
2020-03-21 18:12:07 last_run_stats_errorDescription No error
2020-03-21 18:12:07 last_run_stats_finishedFlag true
2020-03-21 18:12:07 last_run_stats_startTime 1584806748000
2020-03-21 18:12:07 mainBrush 293.5
2020-03-21 17:58:33 map_data Wrote www/images/OGrobo_map.svg
2020-03-21 17:58:33 name OGrobo
2020-03-21 17:58:33 schema state
2020-03-21 17:58:33 send_command_topic valetudo/OGrobo/custom_command
2020-03-21 18:12:07 sensor 23.6
2020-03-21 17:58:33 set_fan_speed_topic valetudo/OGrobo/set_fan_speed
2020-03-21 18:12:07 sideBrush 193.5
2020-03-21 18:12:07 state docked
2020-03-21 17:58:33 state_topic valetudo/OGrobo/state
2020-03-21 17:58:33 supported_features_1 start
2020-03-21 17:58:33 supported_features_10 send_command
2020-03-21 17:58:33 supported_features_2 pause
2020-03-21 17:58:33 supported_features_3 stop
2020-03-21 17:58:33 supported_features_4 return_home
2020-03-21 17:58:33 supported_features_5 battery
2020-03-21 17:58:33 supported_features_6 status
2020-03-21 17:58:33 supported_features_7 locate
2020-03-21 17:58:33 supported_features_8 clean_spot
2020-03-21 17:58:33 supported_features_9 fan_speed
2020-03-21 18:12:07 valetudo_state_id 8
2020-03-21 18:12:07 valetudo_state_name Charging
2020-03-21 17:05:48 zone set Technikzimmer
Attributes:
IODev chrisMQTT2
comment For original code for "attrTmqtt2_roborock_valetudo2svg()" see <a href="https://forum.fhem.de/index.php/topic,104687.msg986304.html#msg986304">this forum thread</a>. To display generated map seperately, define a weblink device: <br>define valetudo_map weblink htmlCode <img src="fhem/images/OGrobo_map.svg">
devStateIcon { '<img src="fhem/images/OGrobo_map.svg" style="max-width:256;;max-height:256;;">' }
group OG
icon vacuum_top
model roborock
readingList homeassistant/vacuum/valetudo_OGrobo/config:.* { json2nameValue($EVENT) }
valetudo/OGrobo/state:.* { json2nameValue($EVENT) }
valetudo/OGrobo/attributes:.* { json2nameValue($EVENT) }
valetudo/OGrobo/map_data:.* {attrTmqtt2_roborock_valetudo2svg("map_data",$EVENT,"www/images/OGrobo_map.svg")}
room Saugbereiche
setList start:noArg valetudo/OGrobo/command start
charge:noArg valetudo/OGrobo/command return_to_base
stop:noArg valetudo/OGrobo/command stop
spot:noArg valetudo/OGrobo/command clean_spot
pause:noArg valetudo/OGrobo/command pause
locate:noArg valetudo/OGrobo/command locate
fan_power:min,medium,high,max,mop valetudo/OGrobo/set_fan_speed $EVTPART1
zone valetudo/OGrobo/custom_command {"command":"zoned_cleanup","zone_ids":["$EVTPART1"]}
goto valetudo/OGrobo/custom_command {"command":"go_to","spot_id":"$EVTPART1"}
load_map valetudo/OGrobo/custom_command {"command":"load_map","name":"$EVTPART1"}
store_map valetudo/OGrobo/custom_command {"command":"store_map","name":"$EVTPART1"}
setStateList charge locate pause stop start
Lieben Dank für Ideen/Hinweise!
Ciao Christian
Der externe MQTT Server schmeisst MQTT2_CLIENT raus, vermutlich haelt sich einer der beiden nicht an dem Standard.
Koenntest du bitte im Problemfall im FHEM die Protokollierung mit "attr chrisMQTT2 verbose 5" fuer ein paar Sekunden erhoehen (zurueckstellen mit "deleteattr chrisMWQTT2 verbose"), und das FHEM-Log fuer die Zeit hier anhaengen? Falls das nicht reicht (und die Wahrscheinlichkeit ist gross), dann braucht man die Logs der anderen Seite auch.
Eine Alternative ist den internen MQTT2_SERVER zu verwenden.
Hallo,
eine Sequenz der FHEM- und Mosquitto-Logs
FHEM-Log:
2020.03.22 17:48:25 1: 192.168.178.144:1883 disconnected, waiting to reappear (chrisMQTT2)
2020.03.22 17:48:25 5: chrisMQTT2: discarding DISCONNECT (224)(0)
2020.03.22 17:48:25 5: HttpUtils url=http://192.168.178.144:1883/
2020.03.22 17:48:25 4: IP: 192.168.178.144 -> 192.168.178.144
2020.03.22 17:48:25 5: chrisMQTT2: sending CONNECT (16)(24)(0)(6)MQIsdp(3)(2)(0)(30)(0)(10)chrisMQTT2
2020.03.22 17:48:25 5: SW: 101800064d51497364700302001e000a63687269734d51545432
2020.03.22 17:48:25 1: 192.168.178.144:1883 reappeared (chrisMQTT2)
Mosquitto-Log:
1584895658: Socket error on client chrisMQTT2, disconnecting.
1584895658: New connection from 192.168.178.83 on port 1883.
1584895658: New client connected from 192.168.178.83 as chrisMQTT2 (c1, k30).
1584895704: Client chrisMQTT2 has exceeded timeout, disconnecting.
Was mir aufgefallen ist, der BUF des chrisMQTT2 ist nach dem Abbruch unvollständig, man sieht nur einen Teil der Map. U.U. ist das vielleicht das Problem? Mein Haus und damit die Karte ist recht groß:
0��#valetudo/OGrobo/map_data{"header_length":20,"data_length":26649,"version":{"major":1,"minor":0},"map_index":48,"map_sequence":1531,"image":{"position":{"top":199,"left":369},"dimensions":{"height":493,"width":445},"pixels":{"floor":[[185,407],[186,407],[257,407],[258,407],[259,407],[260,407],[261,407],
[262,407],[263,407],[264,407],[265,407],[266,407],[169,406],[170,406],[171,406],
[172,406],[173,406],[174,406],[175,406],[176,406],[177,406],[178,406],[179,406],
[180,406],[181,406],[182,406],[183,406],[184,406],[185,406],[186,406],[258,406],
[259,406],[260,406],[261,406],[262,406],[263,406],[264,406],[265,406],[266,406],
[169,405],[170,405],[171,405],[172,405],[173,405],[174,405],[175,405],[176,405],[177,405],[178,405],[179,405],[180,405],[181,405],[182,40
Vielen lieben Dank
Christian
Das Umwandeln der Map-Daten in SVG ist CPU-intensiv, wenn ich es richtig in Erinnerung habe, schickt die Firmware diese Daten oft (einmal die Sekunde?), damit duerften 2 Instanzen auch bessere CPUs in schwitzen bringen.
Ich wuerde in valetudo die Map-Daten ausschalten oder nur selten (einmal die Minute oder seltener) senden, falls das nicht moeglich ist oder nicht reicht, dann in FHEM dieses Reading per perl-Ausdruck {undef} ignorieren.
Falls das nicht hilft, dann muessten wir weiter suchen: laut Server Meldung ist FHEM fuer mehr als 45 Sekunden blockiert => ich brauche "attr global verbose 5" Daten fuer ca eine Minute in einem Problemfall.
Hallo Rudolf,
danke für die Tipps. FHEM läuft im Docker auf nem MacMini, zwar nicht der neueste, aber der sollte das schon schaffen.
Anyway, ich habe provide map mal auf false gesetzt, tatsächlich ist die nett in FHEM aber nicht nötig.
Ich werden berichten.
Ciao Christian
Hallo Rudolf,
ich habe folgende Dinge gemacht.
Im Valetudo provideMapData = false
in der config.json, reboot des roborocks, das hat er geflissentlich ignoriert und weiter die Daten geschickt.
Im FHEM attr supressreading map_date
durchgeführt, das reading wurde auch nicht mehr geupdated, trotzdem ist das MQTT2_CLIENT gestorben.
Deinen Vorschlag, wie man das Reading abschaltet, konnte ich leider nicht umsetzen, ich habe nicht viel Erfahrung in perl, respektive keine...
Hinweis, ich habe neben dem MQTT2_CLIENT noch ein MQTT-Interface am Laufen um meine Zigbee-Devices zu steuern.
Ich habe nun, wie gewünscht, das Logging von global hochgesetzt und alles rausgefischt, was mit MQTT zu tun hat. Vielleicht siehst Du ja was.
2020.03.28 10:30:44 1: 192.168.178.144:1883 disconnected, waiting to reappear (chrisMQTT2)
2020.03.28 10:30:44 1: 192.168.178.144:1883 reappeared (chrisMQTT2)
2020.03.28 10:30:51 5: Starting notify loop for global, 1 event(s), first is ATTR global verbose 5
....
2020.03.28 10:31:11 5: MQTT MQTT message sent: PingReq/at-most-once
2020.03.28 10:31:11 5: SW: c000
....
2020.03.28 10:31:11 5: MQTT MQTT message received: PingResp/at-most-once
2020.03.28 10:31:11 5: Starting notify loop for MQTT, 1 event(s), first is connection: active
2020.03.28 10:31:11 5: End notify loop for MQTT
....
2020.03.28 10:31:30 1: 192.168.178.144:1883 disconnected, waiting to reappear (chrisMQTT2)
2020.03.28 10:31:30 5: Starting notify loop for chrisMQTT2, 1 event(s), first is DISCONNECTED
2020.03.28 10:31:30 5: End notify loop for chrisMQTT2
2020.03.28 10:31:30 5: HttpUtils url=http://192.168.178.144:1883/
2020.03.28 10:31:30 4: IP: 192.168.178.144 -> 192.168.178.144
2020.03.28 10:31:30 5: SW: 101800064d51497364700302001e000a63687269734d51545432
2020.03.28 10:31:30 1: 192.168.178.144:1883 reappeared (chrisMQTT2)
2020.03.28 10:31:30 5: Starting notify loop for chrisMQTT2, 1 event(s), first is CONNECTED
2020.03.28 10:31:30 5: End notify loop for chrisMQTT2
....
2020.03.28 10:32:14 5: MQTT MQTT message sent: PingReq/at-most-once
2020.03.28 10:32:14 5: SW: c000
2020.03.28 10:32:14 5: Starting notify loop for rr_Christian, 2 event(s), first is durTimerPresence_cr: 864
....
2020.03.28 10:32:14 5: MQTT MQTT message received: PingResp/at-most-once
2020.03.28 10:32:14 5: Starting notify loop for MQTT, 1 event(s), first is connection: active
2020.03.28 10:32:14 5: End notify loop for MQTT
....
2020.03.28 10:32:16 1: 192.168.178.144:1883 disconnected, waiting to reappear (chrisMQTT2)
2020.03.28 10:32:16 5: Starting notify loop for chrisMQTT2, 1 event(s), first is DISCONNECTED
2020.03.28 10:32:16 5: End notify loop for chrisMQTT2
2020.03.28 10:32:16 5: HttpUtils url=http://192.168.178.144:1883/
2020.03.28 10:32:16 4: IP: 192.168.178.144 -> 192.168.178.144
2020.03.28 10:32:16 5: SW: 101800064d51497364700302001e000a63687269734d51545432
2020.03.28 10:32:16 1: 192.168.178.144:1883 reappeared (chrisMQTT2)
2020.03.28 10:32:16 5: Starting notify loop for chrisMQTT2, 1 event(s), first is CONNECTED
2020.03.28 10:32:16 5: End notify loop for chrisMQTT2
....
2020.03.28 10:32:48 5: MQTT MQTT message received: Publish/at-most-once zigbee2mqtt/Garagentuer
7b 22 63 6f 6e 74 61 63 74 22 3a 74 72 75 65 2c {"contact":true,
22 6c 69 6e 6b 71 75 61 6c 69 74 79 22 3a 33 36 "linkquality":36
2c 22 62 61 74 74 65 72 79 22 3a 31 30 30 2c 22 ,"battery":100,"
76 6f 6c 74 61 67 65 22 3a 33 30 31 35 7d voltage":3015}
2020.03.28 10:32:48 5: publish received for zigbee2mqtt/Garagentuer, {"contact":true,"linkquality":36,"battery":100,"voltage":3015}
2020.03.28 10:32:48 5: publish received for zigbee2mqtt/Garagentuer, {"contact":true,"linkquality":36,"battery":100,"voltage":3015}
2020.03.28 10:32:48 5: publish received for zigbee2mqtt/Garagentuer, {"contact":true,"linkquality":36,"battery":100,"voltage":3015}
2020.03.28 10:32:48 5: Starting notify loop for Garagentuer, 1 event(s), first is transmission-state: incoming publish received
2020.03.28 10:32:48 5: Triggering n_Garagentuer
2020.03.28 10:32:48 4: n_Garagentuer exec {
if ($EVTPART0 eq "open") {
if (ReadingsVal('Bewegungsmelder', 'brightness', 999) < 120) {
fhem("set Licht_Garage on-for-timer 300;;");;
}
}
}
2020.03.28 10:32:48 5: Cmd: >{
....
2020.03.28 10:33:02 1: 192.168.178.144:1883 disconnected, waiting to reappear (chrisMQTT2)
2020.03.28 10:33:02 5: Starting notify loop for chrisMQTT2, 1 event(s), first is DISCONNECTED
2020.03.28 10:33:02 5: End notify loop for chrisMQTT2
2020.03.28 10:33:02 5: HttpUtils url=http://192.168.178.144:1883/
2020.03.28 10:33:02 4: IP: 192.168.178.144 -> 192.168.178.144
2020.03.28 10:33:02 5: SW: 101800064d51497364700302001e000a63687269734d51545432
2020.03.28 10:33:02 1: 192.168.178.144:1883 reappeared (chrisMQTT2)
2020.03.28 10:33:02 5: Starting notify loop for chrisMQTT2, 1 event(s), first is CONNECTED
2020.03.28 10:33:02 5: End notify loop for chrisMQTT2
....
2020.03.28 10:33:17 5: MQTT MQTT message sent: PingReq/at-most-once
2020.03.28 10:33:17 5: SW: c000
....
2020.03.28 10:33:17 5: MQTT MQTT message received: PingResp/at-most-once
2020.03.28 10:33:17 5: Starting notify loop for MQTT, 1 event(s), first is connection: active
2020.03.28 10:33:17 5: End notify loop for MQTT
....
Vielen lieben Dank, Christian
PS: vielleicht weiß ja einer, wie man im valetudo das Senden der Map abschaltet
ZitatDeinen Vorschlag, wie man das Reading abschaltet, konnte ich leider nicht umsetzen, ich habe nicht viel Erfahrung in perl, respektive keine...
Hat wenig mit perl zu tun, ist Modulspezifisch: in readingList die map Zeile mit
valetudo/OGrobo/map_data:.* {undef}
ersetzen (OGrobo bei dem anderen Geraet anpassen).
ZitatIch habe nun, wie gewünscht, das Logging von global hochgesetzt und alles rausgefischt, was mit MQTT zu tun hat.
Der Haken mit dem Fischen ist, dass fuer mich nichts mehr uebriggeblieben ist.
Ich habe nach Zeitstempel mit 45 Sekunden Unterschied gesucht, aber da finde ich nur ..., was nach Zensur klingt.
Nach allem was ich sehe, laeuft FHEM ohne Probleme und Verzoegerungen.
Idee: Verbindet sich das MQTT Modul auch zum gleichen Broker? Das mag eine Ursache des Problems sein.
Hi,
in der Tat verbindet sich das MQTT-Device mit demselben Broker.
Ich habe dann das Log mal angehängt, in der Hoffnung, Du wirst fündig.
Danke für den Reading-Tipp, manchmal sieht man den Wald vor lauter Bäumen nicht...
Ciao Christian
Ich habe nichts Besonderes gesehen, FHEM ist definitiv zu keiner Zeit laenger blockiert.
Entweder mag der externe MQTT Server MQTT2_CLIENT nicht, oder er ist verwirrt, weil vom gleichen Programm zwei Verbindungen aufgemacht werden (sollte eigentlich nicht sein).
Ich komme ohne sinvolle Infos vom Serverseite nicht weiter.
Ich wuerde (MQTT + MQTT2_CLIENT + externer MQTT-Server) durch MQTT2_SERVER ersetzen, aber ich kann nicht beurteilen, wieviel Aufwand das fuer Dich bedeutet.
Guten Morgen,
seit ich das Reading map_date auf {undef} gesetzt habe, momentan keine Probleme, cross your fingers.
Ich gucke mal, dass ich den Log-Level des mosquitto-Servers hochsetzen kann und werde was posten.
Meine momentane Vermutung ist, da sich ja das ganze MQTT2_CLIENT-Device weghängt, dass es mit einem Buffer-Overflow des Devices zu tun hat aufgrund meiner riesigen Karten. Siehe ein paar Posts vorher.
Die Daten werden nicht schnell genug abgeholt und dann wird die nächste ins Nirvana geschrieben und damit ist das Device kaputt, was erst durch einen Reboot bereinigt wird, bis zum nächsten Mal.
Das passiert auch, wenn nur ein Sauger läuft, nur seltener.
Just my 2 cents, es ist gut möglich, dass ich total falsch liege, wundert mich nur, dass es das ganze Device "zerbeamt".
Schönen Sonntag, Christian
Ciao Christian
Hallo,
Ich hoffe es stört nicht, das ich hier nochmal antworte, nutzt jemand die Steuerung des Roboters über MQTT?
Bei der aktuellen Version von Valetudo, bzw. bei der Version 2021.04.0 bereits wurde MQTT in Valetudo neu geschrieben. Nach dem Update war es mir leider nicht möglich, den Sauger über MQTT anzusprechen. Der Sauger wurde zwar erkannt und auch eingerichtet. der Status wurde auch immer aktualisiert, aber Befehle die ich in Fhem rausgegeben habe kamen beim Sauger nicht an.
Ich habe hier einen S5 Roborock und das Protokoll in Valetudo hat gar nicht reagiert.
Ist das evtl. auch schon woanders aufgetreten?
Das Xiaomi Modul funktioniert ohne Probleme.
Laut dem Valetudo Chat, gab es wohl ähnliche Probleme in HA und da mussten die Automations angepasst werden.
Ich bin nun wieder auf eine alte Valetudo Version zurück, damit es klappt, kann aber gerne bei bedarf den sauger neu flashen und testen.
Gude.
Ich habe heute auf meinem V1 alles neu installiert - via OTA geht das ja sowas von unkompliziert.
Danach ging auch nichts mehr per MQTT, dann habe ich gegoogelt und für die neue MQTT-Ansteuerung gilt nun folgendens:
https://valetudo.cloud/pages/integrations/mqtt.html#operationoperation
D.h. die Befehle/Topics haben sich geändert.
Alt, aus attrTemplate
start:noArg valetudo/NeatBlushingSwallow/BasicControlCapability/operation/set START
charge:noArg valetudo/NeatBlushingSwallow/command return_to_base
stop:noArg valetudo/NeatBlushingSwallow/command stop
spot:noArg valetudo/NeatBlushingSwallow/command clean_spot
pause:noArg valetudo/NeatBlushingSwallow/command pause
locate:noArg valetudo/NeatBlushingSwallow/command locate
fan_power:min,medium,high,max,mop valetudo/NeatBlushingSwallow/set_fan_speed $EVTPART1
zone valetudo/NeatBlushingSwallow/custom_command {"command":"zoned_cleanup","zone_ids":["$EVTPART1"]}
goto valetudo/NeatBlushingSwallow/custom_command {"command":"go_to","spot_id":"$EVTPART1"}
load_map valetudo/NeatBlushingSwallow/custom_command {"command":"load_map","name":"$EVTPART1"}
store_map valetudo/NeatBlushingSwallow/custom_command {"command":"store_map","name":"$EVTPART1"}
Neu:
start:noArg valetudo/NeatBlushingSwallow/BasicControlCapability/operation/set START
charge:noArg valetudo/NeatBlushingSwallow/BasicControlCapability/operation/set HOME
stop:noArg valetudo/NeatBlushingSwallow/BasicControlCapability/operation/set STOP
pause:noArg valetudo/NeatBlushingSwallow/BasicControlCapability/operation/set PAUSE
Disclaimer: Ich hab nur die Basicoperations beschrieben und davon auch nur START einmal ausprobiert.
Die anderen brauche ich bei meinem V1 (noch) nicht, da der ja eh die Karte nicht speichern kann etc.
XiaomiDevice läuft bei mir gerade gar nicht mehr, auch schade.
Hmm, muss mal überlegen, wie man ggf. zwischen "alter" und "neuer" Syntax wählen kann.
Im Moment ist allerdings meine Motivation dazu nicht besonders hoch, diese Firmware scheint derzeit ein ziemlicher "spammer" zu sein, siehe https://github.com/Hypfer/Valetudo/discussions/1095. Angeblich kann ValetudoRE (nicht nur) das deutlich besser...
Wenn man event-on-change-reading und timestamp-on-change-reading so setzt wie in dem u.a. Device war ich am WE soweit zufrieden, hab mich aber vom einen Moment zum anderen nicht mehr mit beschäftigt und war zu ValetudoRE übergegangen.
Bei den Topics BatteryStateAttribute und StatusStateAttribute hab ich den Readingnamen geändert das kam mir besser vor, muss aber nicht richtig sein.
Und das mit dem .map-data war nur ein Test ob das wirklich klappt so versteckte Readings zu erstellen.
defmod MQTT2_valetudo_UnrulyBlandEel MQTT2_DEVICE valetudo_UnrulyBlandEel
attr MQTT2_valetudo_UnrulyBlandEel devicetopic valetudo/UnrulyBlandEel
attr MQTT2_valetudo_UnrulyBlandEel event-on-change-reading brush-main,brush-side_right,detail,error,filter-main,frequency,ips,level,preset,presets,segments,sensor-all,signal,ssid,charge_status,state
attr MQTT2_valetudo_UnrulyBlandEel readingList $DEVICETOPIC/StatusStateAttribute/detail:.* detail\
$DEVICETOPIC/FanSpeedControlCapability/preset:.* preset\
$DEVICETOPIC/StatusStateAttribute/error:.* error\
$DEVICETOPIC/ConsumableMonitoringCapability/brush-main:.* brush-main\
$DEVICETOPIC/ConsumableMonitoringCapability/brush-side_right:.* brush-side_right\
$DEVICETOPIC/ConsumableMonitoringCapability/filter-main:.* filter-main\
$DEVICETOPIC/ConsumableMonitoringCapability/sensor-all:.* sensor-all\
$DEVICETOPIC/ZoneCleaningCapability/presets:.* zonecleaning_presets\
$DEVICETOPIC/GoToLocationCapability/presets:.* gotolocation_presets\
$DEVICETOPIC/WifiConfigurationCapability/ssid:.* ssid\
$DEVICETOPIC/WifiConfigurationCapability/ips:.* ips\
$DEVICETOPIC/WifiConfigurationCapability/frequency:.* frequency\
$DEVICETOPIC/WifiConfigurationCapability/signal:.* signal\
$DEVICETOPIC/StatusStateAttribute/status:.* state\
$DEVICETOPIC/BatteryStateAttribute/level:.* level\
$DEVICETOPIC/BatteryStateAttribute/status:.* \
$DEVICETOPIC/MapData/segments:.* segments\
$DEVICETOPIC/\x24state:.* {}\
$DEVICETOPIC/BasicControlCapability/operation:.* operation\
$DEVICETOPIC/MapData/map-data:.* .map-data
attr MQTT2_valetudo_UnrulyBlandEel room MQTT2_DEVICE,Schlafzimmer
attr MQTT2_valetudo_UnrulyBlandEel setList start:noArg $DEVICETOPIC/BasicControlCapability/operation/set START\
charge:noArg $DEVICETOPIC/BasicControlCapability/operation/set HOME\
stop:noArg $DEVICETOPIC/BasicControlCapability/operation/set STOP\
pause:noArg $DEVICETOPIC/BasicControlCapability/operation/set PAUSE\
fan_speed:min,low,medium,high,max $DEVICETOPIC/FanSpeedControlCapability/preset/set $EVTPART1\
attr MQTT2_valetudo_UnrulyBlandEel timestamp-on-change-reading brush-main,brush-side_right,detail,error,filter-main,frequency,ips,level,preset,presets,segments,sensor-all,signal,ssid,charge_status,state
Zitat von: Beta-User am 23 September 2021, 13:39:29
Hmm, muss mal überlegen, wie man ggf. zwischen "alter" und "neuer" Syntax wählen kann.
Im Moment ist allerdings meine Motivation dazu nicht besonders hoch, diese Firmware scheint derzeit ein ziemlicher "spammer" zu sein, siehe https://github.com/Hypfer/Valetudo/discussions/1095. Angeblich kann ValetudoRE (nicht nur) das deutlich besser...
In Anbetracht dessen würde es vielleicht auch ausreichen, einen Hinweis zu geben ("comment"), dass sich etwas geändert hat. Dann findet man wenigstens den "Fehler" sofort und kann selber aktiv werden, wenn man will.
Zitat von: TomLee am 23 September 2021, 14:53:57
Wenn man event-on-change-reading und timestamp-on-change-reading so setzt wie in dem u.a. Device war ich am WE soweit zufrieden, hab mich aber vom einen Moment zum anderen nicht mehr mit beschäftigt und war zu ValetudoRE übergegangen.
Wie wechsel ich den?
Kann ich einfach ein Image mit ValetudoRE drüberflashen, so wie hier beschrieben
https://github.com/rand256/valetudo/tree/testing/deployment
Zitatv11_version.pkg
The last way to get prebuilt valetudo onto your device is to flash one of these firmware images with valetudo preinstalled inside.
You can use any of these also for upgrading an older valetudo version to current one.
Zitat von: laberlaib am 24 September 2021, 11:53:31
Wie wechsel ich den?
Kann ich einfach ein Image mit ValetudoRE drüberflashen, so wie hier beschrieben
https://github.com/rand256/valetudo/tree/testing/deployment
Den Weg habe ich nicht/nie versucht, ich habe immer zurückgesetzt und eine fertige Valetudo/ValetudoRE von hier https://vacuumz.info/download/ genommen...
Ich hab auch mal von ValetudoRE aus versucht per OTA (da gibt's ja die Option im Menü: ging total schief)...
Gruß, Joachim
[OT]
ZitatWie wechsel ich den?
Kenne nur den ganz einfachen mit der App XVacuum (https://forum.fhem.de/index.php/topic,121017.msg1157030.html#msg1157030)
oder den Weg über das Mirobo "Tool" wie es Otto in seinem Blog aufgeschrieben (https://heinz-otto.blogspot.com/2019/06/root-und-gut.html) hat.
Wenn du schonmal mirobo auf einem
zweiten/extra System installiert hattest, ist das eigentlich schnell gemacht, sieht zusammengefasst so aus :
export MIROBO_IP="<IPvomSauger>"
export MIROBO_TOKEN="<Token>"
wget https://vacuumz.info/download/gen1/vacuum_4018_valetudo_re_0_10_7.pkg
mirobo update-firmware vacuum_4018_valetudo_re_0_10_7.pkg
[/OT]
danke, probier' ich alles mal am Wochenende.