Autor Thema: Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate  (Gelesen 21012 mal)

Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
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
Hilfreich Hilfreich x 1 Liste anzeigen

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
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üßtenname: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
« Letzte Änderung: 27 Oktober 2019, 12:49:52 von Beta-User »
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
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


Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
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).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
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?

Zitat
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).
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
« Letzte Änderung: 27 Oktober 2019, 17:00:39 von krikan »

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
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?
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
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.

Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
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.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
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, Quellcode ist hier!) oder auch mit externen Serverdiensten?
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
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.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
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 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 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?
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
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.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
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
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
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?

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
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"...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
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.



Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #16 am: 03 November 2019, 19:38:34 »
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:
Zitat
par: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?


Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #17 am: 03 November 2019, 21:08:38 »
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)

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #18 am: 04 November 2019, 11:12:39 »
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 :) .
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #19 am: 04 November 2019, 11:35:16 »
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.

Zitat
Was Wiki angeht:
[..] mache ich das mit dem neuen Artikel "bei Gelegenheit".
Aber gerne doch. Wenn Du dann Hilfe brauchst, bitte melden.

Zitat
Wenn 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.  :)

Offline mark79

  • Sr. Member
  • ****
  • Beiträge: 568
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #20 am: 04 November 2019, 12:44:53 »
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
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #21 am: 04 November 2019, 12:59:30 »
*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 beschrieben, einen MQTT-Weg scheint es nicht zu geben(?):
Zitat
Zones + 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.
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #22 am: 04 November 2019, 13:07:44 »
*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.

Zitat
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.
Habe das über das Webinterface von Valetudo eingerichtet. Der andere Weg ist komplizierter, comment auch mMn überflüssig.



« Letzte Änderung: 04 November 2019, 13:10:04 von krikan »

Offline mark79

  • Sr. Member
  • ****
  • Beiträge: 568
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #23 am: 04 November 2019, 13:50:33 »
@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
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #24 am: 04 November 2019, 14:39:45 »
 :) 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 :) ).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #25 am: 05 November 2019, 09:06:35 »
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?

Einen ersten Wurf zum Wiki gibt es hier:
https://wiki.fhem.de/wiki/AttrTemplate
Danke!

Offline robertPI

  • Jr. Member
  • **
  • Beiträge: 63
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #26 am: 17 November 2019, 13:02:20 »
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
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?
« Letzte Änderung: 17 November 2019, 19:20:48 von robertPI »
FHEM auf Raspbery Pi 4
HM: HM-CFG-USB-2,HM-CC-RT-DN,HM-TC-IT-WM-W-EU,HM-SEC-SCo,HM-ES-PMSw1-Pl,HM-Sen-MDIR-WM55 | Philips hue: LCT001,LWL001,FLS-PP lp | Logitech Harmony Ultimate | zigbee2mqtt: WSDCGQ01LM, WSDCGQ11LM, MFKZQ01LM, MCCGQ11LM

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #27 am: 18 November 2019, 08:21:14 »
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 }
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline BM030

  • Jr. Member
  • **
  • Beiträge: 94
Hi,

ich nutze eine leicht veränderte Valetudo-Version https://github.com/rand256/valetudo und Kartenerstellung 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_datasind Daten vorhanden und auch die Map wird vom valetudo-mapper erzeugt

« Letzte Änderung: 30 Januar 2020, 06:45:29 von BM030 »

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
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...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
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

« Letzte Änderung: 03 Februar 2020, 07:46:23 von krikan »

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
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?
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 11069
  • NIVEAu ist keine Creme...
psssst: nur mal mitlesen ;)  und evtl. (doch noch) mal wieder Valetudo ausprobieren ;)

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

Offline BM030

  • Jr. Member
  • **
  • Beiträge: 94
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.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
Alles gut  :) . works AS designed...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline BM030

  • Jr. Member
  • **
  • Beiträge: 94
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?

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
Zitat
Vom 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.

Offline BM030

  • Jr. Member
  • **
  • Beiträge: 94
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�l Z�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��Nl Z��Ơ���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����{��m Z�������U���gY���hH����y�VΧ�t��~������d/�/V��O�`�(А2
)Аv�sf<]�\O�9��Uvb<Ͷ��N�4_���l Z����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�pnl Z��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�����l Z`�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��Nl ZٍѰ`{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����l Z����8��4� @C�4��!O��
���x�����uR7_�ƒ��:��j<]��n4�`/��r6����-���x��n���lgc��nl Zٍ�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��������{��m Z��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��s6m Z��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��Ery�;;�]]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�m Z��d��Nl Z�
��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)%�������wISUU�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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
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;;">' }
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
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.
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline BM030

  • Jr. Member
  • **
  • Beiträge: 94
Funktioniert wunderbar,

Vielen Vielen Dank Euch Beiden! So habe ich mir das Vorgestellt.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
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).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
Zitat
habe 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?

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
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...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline BM030

  • Jr. Member
  • **
  • Beiträge: 94

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
« Letzte Änderung: 05 Februar 2020, 18:27:43 von BM030 »

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
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...)
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline BM030

  • Jr. Member
  • **
  • Beiträge: 94
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.

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 3586
  • ... wer sät, der erntet ...
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

Offline knueppler

  • Full Member
  • ***
  • Beiträge: 154
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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
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.

Offline knueppler

  • Full Member
  • ***
  • Beiträge: 154
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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
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.

Offline knueppler

  • Full Member
  • ***
  • Beiträge: 154
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

Offline knueppler

  • Full Member
  • ***
  • Beiträge: 154
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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
Zitat
Deinen 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).

Zitat
Ich 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.

Offline knueppler

  • Full Member
  • ***
  • Beiträge: 154
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
« Letzte Änderung: 29 März 2020, 10:53:24 von knueppler »

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
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.

Offline knueppler

  • Full Member
  • ***
  • Beiträge: 154
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
« Letzte Änderung: 29 März 2020, 12:17:17 von knueppler »

Offline gameshacker

  • Newbie
  • Beiträge: 1
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.
Zustimmung Zustimmung x 1 Liste anzeigen

Offline laberlaib

  • Full Member
  • ***
  • Beiträge: 218
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #59 am: 23 September 2021, 13:00:03 »
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.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15809
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #60 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...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 3586
  • ... wer sät, der erntet ...
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #61 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.

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

Offline laberlaib

  • Full Member
  • ***
  • Beiträge: 218
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #62 am: 24 September 2021, 11:53:31 »
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.

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
Zitat
v11_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.


--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 11069
  • NIVEAu ist keine Creme...
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #63 am: 24 September 2021, 12:23:48 »
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
FHEM PI3B+ Buster: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)
FHEM PI3 RaspiOS (Test)

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 3586
  • ... wer sät, der erntet ...
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #64 am: 24 September 2021, 13:01:09 »
[OT]

Zitat
Wie wechsel ich den?

Kenne nur den ganz einfachen mit der App XVacuum

oder den Weg über das Mirobo "Tool" wie es Otto in seinem Blog aufgeschrieben 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]

Offline laberlaib

  • Full Member
  • ***
  • Beiträge: 218
Antw:Xiamoni Vacuum / Roborock: MQTT-Ansteuerung mit Valetudo / attrTemplate
« Antwort #65 am: 24 September 2021, 13:58:20 »
danke, probier' ich alles mal am Wochenende.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

 

decade-submarginal