MQTT und JSON publish [GELÖST]

Begonnen von frankreed, 27 Dezember 2019, 19:02:46

Vorheriges Thema - Nächstes Thema

frankreed

Hallo,

ich habe mir einen Roborock S50 Staubsauger zugelegt und vor dem ersten Mal saugen gleich Valetudo draufgemacht. Damit ist er von der China-Cloud komplett abgekoppelt  ;)
Zuerst vorweg: Das Ding ist echt gut, hätte ich nicht gedacht.

Mit der Valetudo-Firmware kann der Sauger auch über MQTT gesteuert werden. Darum habe ich mir in fhem ein MQTT-Device angelegt:

define roborock MQTT_DEVICE
attr roborock IODev myBroker
attr roborock icon vacuum_top
attr roborock publishSet_Gehe_Ladestation return_to_base valetudo/rockrobo/command
attr roborock publishSet_Home locate valetudo/rockrobo/command
attr roborock publishSet_Pause pause valetudo/rockrobo/command
attr roborock publishSet_Reinige_Spot clean_spot valetudo/rockrobo/command
attr roborock publishSet_Start start valetudo/rockrobo/command
attr roborock publishSet_Stop stop valetudo/rockrobo/command
attr roborock publishSet_Wo_Bin_Ich locate valetudo/rockrobo/command
attr roborock room Esszimmer
attr roborock subscribeReading_attributes valetudo/rockrobo/attributes
attr roborock subscribeReading_state valetudo/rockrobo/state


Nun mein Problem:
Der Roboter kann auch einzelne Zonen reinigen. Dazu wird dem Broker ein bestimmtes Kommando geschickt.

Auf der Shell funktioniert das ganze problemlos mit folgendem Befehl:

mosquitto_pub -h localhost -p 1883 -t 'valetudo/rockrobo/custom_command' -m "{\"command\":\"zoned_cleanup\",\"zone_ids\":[\"Wohnzimmer\",\"Esszimmer\"]}"


Nur im fhem-Device funktionert das nicht, da verschluckt er irgendetwas vom Payload.

Frage:
Wie kann ich das jetzt in oben genannten fhem-Device definieren, dass das ganze auch dort funktioniert?

Danke für die Hilfe

frankreed

rudolfkoenig

Gibt es einen Grund MQTT_DEVICE statt MQTT2_DEVICE zu verwenden?

frankreed

Nö, eigentlich nicht.
Obwohl, ich komm' mit dem MQTT2-Device irgendwie nicht so zurecht. Mit den templates blick' ich einfach nicht durch. Vielleicht habe ich auch die Doku noch nicht vollständig durchdrungen.
Aber irgendwie finde ich das MQTT-Device "logischer" und universeller....

Würde es mit einem MQTT2-Device denn funktionieren und falls ja, wie?

Otto123

Aber Templates sind doch ein optionales "Angebot" für den User. Wenn man die nicht "will" muss man sie nicht beachten. Sie haben mit der Funktion des Gerätes primär nichts zu tun, sie helfen dem Unwissenden bei der Konfiguration.

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

frankreed

Aah, ok. Wieder was gelernt.
Dann werde ich mich mal in das Thema einlesen..

Aber ein kleiner Schubs in die richtige Richtung zu meinem Problem wäre ganz nett.

Wie müssten denn dann die Definition und die Attribute aussehen, dass ich den o.g. JSON-String über das MQTT2-Device an den Broker senden kann? Bitte bitte bitte :-)

rudolfkoenig

fhem> define m2d MQTT2_DEVICE test
fhem> attr m2d setList custom_command valetudo/rockrobo/custom_command {"command":"zoned_cleanup","zone_ids":["Wohnzimmer","Esszimmer"]}
fhem> set m2d custom_command

frankreed

Zitat von: rudolfkoenig am 28 Dezember 2019, 11:53:36
fhem> define m2d MQTT2_DEVICE test
fhem> attr m2d setList custom_command valetudo/rockrobo/custom_command {"command":"zoned_cleanup","zone_ids":["Wohnzimmer","Esszimmer"]}
fhem> set m2d custom_command


Super, klasse, funktioniert einwandfrei. Vielen Dank!!!!
Jetzt "bohr" ich das ganze mal auf, um alle weiteren Kommandos und Attribute über das MQTT2-Device abzusetzen bzw. zu empfangen.
Wenn es fertig ist stell' ich es hier ein.

Danke an das super Forum!

frankreed

Beta-User

Gerne.

Du kannst aber (zur "Sicherheit" mit einer Kopie...) auch das attrTemplate "roborock" austesten bzw. mal ansehen, was da schon da ist...
Dann kommst du mit den attrTemplates vielleicht auch besser zurecht ;) .
Server: HP-elitedesk@Debian 12, 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: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

frankreed

Zitat von: frankreed am 28 Dezember 2019, 12:03:40

Wenn es fertig ist stell' ich es hier ein.


Hier ist es:


defmod Roborock MQTT2_DEVICE
attr Roborock IODev myMQTT2Client
attr Roborock alias Roborock
attr Roborock icon vacuum_top
attr Roborock readingList valetudo/rockrobo/state:.* { json2nameValue($EVENT) }\
  valetudo/rockrobo/attributes:.* { json2nameValue($EVENT) }\
  valetudo/rockrobo/command:.* { json2nameValue($EVENT) }\
  valetudo/rockrobo/custom_command:.* { json2nameValue($EVENT) }
attr Roborock room Esszimmer
attr Roborock setList 01_Wohn-/Esszimmer valetudo/rockrobo/custom_command {"command":"zoned_cleanup","zone_ids":["Wohnzimmer","Esszimmer"]} \
02_Wohnzimmer valetudo/rockrobo/custom_command {"command":"zoned_cleanup","zone_ids":["Wohnzimmer"]} \
03_Esszimmer valetudo/rockrobo/custom_command {"command":"zoned_cleanup","zone_ids":["Esszimmer"]} \
04_Flur valetudo/rockrobo/custom_command {"command":"zoned_cleanup","zone_ids":["Flur"]} \
05_Kueche valetudo/rockrobo/custom_command {"command":"zoned_cleanup","zone_ids":["Kueche"]} \
06_Alles valetudo/rockrobo/custom_command {"command":"zoned_cleanup","zone_ids":["Wohnzimmer","Esszimmer","Kueche"]}\
07_Start valetudo/rockrobo/command start\
08_Stop valetudo/rockrobo/command stop\
09_Pause valetudo/rockrobo/command pause\
10_Basis valetudo/rockrobo/command return_to_base\
11_Spiegel valetudo/rockrobo/custom_command {"command":"go_to","spot_id":"Spiegel"}\
12_Reinige_punktuell valetudo/rockrobo/command clean_spot
attr Roborock userReadings last_run_endTime  {ReadingsVal("Roborock","last_run_stats_endTime",0) ,POSIX::strftime('%a %d.%m.%Y %H:%M',localtime)},\
last_run_startTime  {ReadingsVal("Roborock","last_run_stats_startTime",0) ,POSIX::strftime('%a %d.%m.%Y %H:%M',localtime)}\


Da der Staubsauger-Roboter keine eigene Fernbedienung hat, probier' ich noch (um den WAF zu erhöhen) eine herum liegende ELRO-Fernbedienung zu missbrauchen, um das ganze dann per Tastendruck zu bedienen.
Und nein, Alexa ist keine Alternative. Ich dreh' dem Roboter nicht die Cloud  ab, nur um sie ihm über Googles Sprachassistent wieder zu geben...

Frankreed

Beta-User

Fragen dazu (ich habe den nicht, und will nur ggf. das attrTemplate (roborock) verbessern):

- Welchen Zweck haben die userReadings und warum haben die keinen trigger? (Kannst du mal das Ergebnis posten?)
- Das mit dem Sortieren in der setList ist evtl. eine gute Idee, aber besonders schön aussehen tut das nicht. Hier hätte für einzelne Zonen eher einen Befehl vermutet mit der Möglichkeit, eine der Zonen auszuwählen, dazu webCmd/cmdIcon bzw. eine eventMap, um das einfacher in FHEMWEB darzustellen, aber evtl. nutzt du was anderes?
Server: HP-elitedesk@Debian 12, 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: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files