Geräteprofil · Haushaltsroboter
Roborock S4/S5/S6
Voraussetzungen
- Ein Roborock S4, S5 oder S6 im selben Netz.
- Node-RED auf dem nomos Controller und ein MQTT-Broker, den nomos nutzt.
- Der Geräte-Token des Saugroboters — ohne ihn nimmt der Roboter keine Befehle an.
Einrichtung
- Dem Saugroboter im Router eine feste IP-Adresse geben
- In nomos das Node-RED-Panel öffnen
- Die Palette node-red-contrib-miio-roborock installieren
- Den Geräte-Token des Saugroboters auslesen und im Knoten hinterlegen. Der Token steht in der Hersteller-App im Gerätespeicher; wie man ihn ausliest, beschreibt die Dokumentation der Palette.
- Den folgenden Flow importieren:
JSON zum Einfügen
[{"id":"5c5767b.3a00c18","type":"tab","label":"Roborock Interface","disabled":false,"info":"S4/S5/S6"},{"id":"8a477754.b10d48","type":"miio-roborock-event","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","outputAtStartup":true,"x":760,"y":80,"wires":[["48ffa723.8e6d6"]]},{"id":"8a3395a1.c4008","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"► Start","command":"app_start","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":480,"y":100,"wires":[[]]},{"id":"a67fd4d2.fdf0e","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":90,"y":80,"wires":[["8a3395a1.c4008"]]},{"id":"eced7cc8.897e98","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/START","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":140,"y":120,"wires":[["8a3395a1.c4008"]]},{"id":"7f8ce05c.87c608","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"◼ Stop","command":"app_stop","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":480,"y":200,"wires":[[]]},{"id":"5262f8fa.f6579","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":90,"y":180,"wires":[["7f8ce05c.87c608"]]},{"id":"decd3086.03a65","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/STOP","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":140,"y":220,"wires":[["7f8ce05c.87c608"]]},{"id":"ca65065b.f4c768","type":"debug","z":"5c5767b.3a00c18","name":"DEBUG LOG","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":1410,"y":160,"wires":[]},{"id":"aaac0472.5fa02","type":"mqtt out","z":"5c5767b.3a00c18","name":"","topic":"stat/roborock/STATUS","qos":"2","retain":"false","broker":"6f23e31c.d6bfb4","x":1440,"y":200,"wires":[]},{"id":"48ffa723.8e6d6","type":"function","z":"5c5767b.3a00c18","name":"Helper","func":"const newPayload = {};\n\nif (msg.payload.key === 'state') return msg; // skip\nelse if (msg.payload.key === 'batteryLevel') return msg; // skip\n\nnewPayload[msg.payload.key] = msg.payload.value;\nmsg.payload = newPayload;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1210,"y":80,"wires":[["aaac0472.5fa02","ca65065b.f4c768"]]},{"id":"f4f80386.b36cf8","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"◼ Stop & dock","command":"app_stop_dock","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":500,"y":300,"wires":[[]]},{"id":"7752f907.676f68","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":90,"y":280,"wires":[["f4f80386.b36cf8"]]},{"id":"36de3bd4.c68554","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/STOPDOCK","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":160,"y":320,"wires":[["f4f80386.b36cf8"]]},{"id":"fd0ff6b9.531b3","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"❙❙ Pause","command":"app_pause","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":480,"y":400,"wires":[[]]},{"id":"e93d0d05.aa97a8","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":90,"y":380,"wires":[["fd0ff6b9.531b3"]]},{"id":"baaa06a7.81315","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/PAUSE","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":140,"y":420,"wires":[["fd0ff6b9.531b3"]]},{"id":"52ca6d26.716564","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"Find me","command":"find_me","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":480,"y":500,"wires":[[]]},{"id":"ab5dbd48.3c53a8","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":90,"y":480,"wires":[["52ca6d26.716564"]]},{"id":"d38c39f.4544048","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/FINDME","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":150,"y":520,"wires":[["52ca6d26.716564"]]},{"id":"c5453490.4a1548","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"⚙ Fan Power","command":"set_custom_mode","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":490,"y":600,"wires":[[]]},{"id":"75b663ec.9c5b8c","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"50","payloadType":"num","x":90,"y":580,"wires":[["c5453490.4a1548"]]},{"id":"87950a79.ba0e7","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/FANSPEED","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":160,"y":620,"wires":[["d07c5e03.007cb8"]]},{"id":"b9c35d6.62bdfa","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"► Start","command":"app_start","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":480,"y":700,"wires":[[]]},{"id":"4f56de32.c9c17","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":90,"y":680,"wires":[["b9c35d6.62bdfa"]]},{"id":"3f44ca4f.a4102e","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/RESUME","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":150,"y":720,"wires":[["b9c35d6.62bdfa"]]},{"id":"7882b01.827cd5","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"ⓘ Get status","command":"get_status","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":1010,"y":260,"wires":[["2326f2f5.9353de"]]},{"id":"ab0a732c.361238","type":"inject","z":"5c5767b.3a00c18","name":"10sec. Interval Timer","repeat":"10","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":800,"y":140,"wires":[["7882b01.827cd5","3d479fa2.80c2","df83a274.9842d"]]},{"id":"2326f2f5.9353de","type":"function","z":"5c5767b.3a00c18","name":"Helper","func":"flow.get('language', 'persistent', function(e, language) {\n if (!language) language = 'en'; // default\n\n const STATES = {\n en: {\n 0: 'Unknown',\n 1: 'Initiating',\n 2: 'Sleeping',\n 3: 'Idle',\n 4: 'Remote Control',\n 5: 'Cleaning',\n 6: 'Returning Dock',\n 7: 'Manual Mode',\n 8: 'Charging',\n 9: 'Charging Error',\n 10: 'Paused',\n 11: 'Spot Cleaning',\n 12: 'In Error',\n 13: 'Shutting Down',\n 14: 'Updating',\n 15: 'Docking',\n 16: 'Go To',\n 17: 'Zone Clean',\n 18: 'Room Clean',\n 100: 'Fully Charged'\n },\n de: {\n 0: 'Unbekannt',\n 1: 'Initiierung',\n 2: 'Schlafend',\n 3: 'Leerlauf',\n 4: 'Fernsteuerung',\n 5: 'Reinigen',\n 6: 'Rückkehr Dock',\n 7: 'Manueller Modus',\n 8: 'Aufladen',\n 9: 'Fehler beim Aufladen',\n 10: 'Pausiert',\n 11: 'Spot Reinigung',\n 12: 'Fehler',\n 13: 'Herunterfahren',\n 14: 'Aktualisierung',\n 15: 'Andocken',\n 16: 'Gehe zu',\n 17: 'Zonen Reinigung',\n 18: 'Raum Reinigung',\n 100: 'Vollständig aufgeladen' \n }\n };\n \n const ERRORS = {\n en: {\n 0: 'No error',\n 1: 'Laser sensor fault',\n 2: 'Collision sensor fault',\n 3: 'Wheel floating',\n 4: 'Cliff sensor fault',\n 5: 'Main brush blocked',\n 6: 'Side brush blocked',\n 7: 'Wheel blocked',\n 8: 'Device stuck',\n 9: 'Dust bin missing',\n 10: 'Filter blocked',\n 11: 'Magnetic field detected',\n 12: 'Low battery',\n 13: 'Charging problem',\n 14: 'Battery failure',\n 15: 'Wall sensor fault',\n 16: 'Uneven surface',\n 17: 'Side brush failure',\n 18: 'Suction fan failure',\n 19: 'Unpowered charging station',\n 20: 'Unknown Error',\n 21: 'Laser pressure sensor problem',\n 22: 'Charge sensor problem',\n 23: 'Dock problem',\n 24: 'No-go zone or invisible wall detected',\n 254: 'Bin full',\n 255: 'Internal error',\n '-1': 'Unknown Error'\n },\n de: {\n 0: 'Kein Fehler',\n 1: 'Fehler des Lasersensors',\n 2: 'Fehler des Kollisionssensors',\n 3: 'Rad schwebend',\n 4: 'Fehler des Absturzsensors',\n 5: 'Hauptbürste blockiert',\n 6: 'Seitenbürste blockiert',\n 7: 'Rad blockiert',\n 8: 'Gerät hängt',\n 9: 'Staubbehälter fehlt',\n 10: 'Filter blockiert',\n 11: 'Magnetisches Feld erkannt',\n 12: 'Niedriger Batteriestand',\n 13: 'Auflade Problem',\n 14: 'Batterieausfall',\n 15: 'Fehler des Wandsensors',\n 16: 'Unebene Oberfläche',\n 17: 'Ausfall der Seitenbürste',\n 18: 'Ausfall des Sauglüfters',\n 19: 'Stromlose Ladestation',\n 20: 'Unbekannter Fehler',\n 21: 'Problem mit Laserdrucksensor',\n 22: 'Problem mit Ladungssensor',\n 23: 'Dock Problem',\n 24: 'Sperr Zone oder unsichtbare Wand erkannt',\n 254: 'Behälter voll',\n 255: 'Interner Fehler',\n '-1': 'Unbekannter Fehler'\n }\n };\n \n // init\n msg.payload = msg.payload[0];\n msg.payload.batteryLevel = msg.payload.battery;\n msg.payload.fanSpeed = msg.payload.fan_power;\n delete msg.payload.battery;\n delete msg.payload.fan_power;\n \n // override state if batteryLevel is 100\n if (msg.payload.batteryLevel !== undefined && msg.payload.batteryLevel === 100) {\n msg.payload.state = 100;\n }\n\n // update state\n try {\n msg.payload.state = STATES[language][msg.payload.state];\n } catch (e) {\n msg.payload.state = STATES[language][0];\n }\n\n // update error\n msg.payload.error = '';\n if (msg.payload.error_code !== 0) {\n try {\n msg.payload.error = ERRORS[language][msg.payload.error_code];\n } catch (e) {\n msg.payload.error = ERRORS[language][-1];\n }\n node.status({fill:\"red\", shape:\"ring\", text: msg.payload.error});\n } else {\n node.status({});\n }\n \n node.send(msg);\n});\n\nreturn null;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1210,"y":260,"wires":[["aaac0472.5fa02","ca65065b.f4c768"]]},{"id":"d07c5e03.007cb8","type":"function","z":"5c5767b.3a00c18","name":"toInt","func":"msg.payload = parseInt(msg.payload);\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":620,"wires":[["c5453490.4a1548"]]},{"id":"26226272.0412b6","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"Dock","command":"app_charge","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":470,"y":800,"wires":[[]]},{"id":"541ce387.8cb1fc","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":90,"y":780,"wires":[["26226272.0412b6"]]},{"id":"2d0dd9c3.32b41e","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/DOCK","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":140,"y":820,"wires":[["26226272.0412b6"]]},{"id":"887383aa.fd7d88","type":"comment","z":"5c5767b.3a00c18","name":"COMMANDS","info":"","x":110,"y":40,"wires":[]},{"id":"bed9cadd.bfa36","type":"comment","z":"5c5767b.3a00c18","name":"EVENTS AND POLLING","info":"","x":780,"y":40,"wires":[]},{"id":"a074934f.9c2b68","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"Wet mode","command":"app_wet","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":490,"y":900,"wires":[[]]},{"id":"8f0ea1a2.88c2e8","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":90,"y":880,"wires":[["a074934f.9c2b68"]]},{"id":"76a39e9e.d40ed8","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/WETMODE","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":160,"y":920,"wires":[["a074934f.9c2b68"]]},{"id":"d37e48b1.2d5e","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"Wet mode","command":"app_wet","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":490,"y":1000,"wires":[[]]},{"id":"edf0d32c.194b48","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":90,"y":980,"wires":[["d37e48b1.2d5e"]]},{"id":"723739ae.84d2d8","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/WETMODE","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":160,"y":1020,"wires":[["d37e48b1.2d5e"]]},{"id":"f3e836c3.503418","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"⚙ Set sound level","command":"change_sound_volume","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":510,"y":1100,"wires":[[]]},{"id":"98bdffd8.dc04e","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"50","payloadType":"num","x":90,"y":1080,"wires":[["f3e836c3.503418"]]},{"id":"fe1b0111.1673d","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/SOUNDLEVEL","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":170,"y":1120,"wires":[["16a76eb3.9353d9"]]},{"id":"16a76eb3.9353d9","type":"function","z":"5c5767b.3a00c18","name":"toInt","func":"msg.payload = parseInt(msg.payload);\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":1120,"wires":[["f3e836c3.503418"]]},{"id":"8ef15597.744f98","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"► Start wet","command":"app_start_wet","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":490,"y":1200,"wires":[[]]},{"id":"6eadd095.035ee","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":90,"y":1180,"wires":[["8ef15597.744f98"]]},{"id":"69f4ff39.46794","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/STARTWET","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":160,"y":1220,"wires":[["8ef15597.744f98"]]},{"id":"c779c3d9.4f3f6","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"► Start spot","command":"app_spot","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":490,"y":1300,"wires":[[]]},{"id":"d82e183a.6897f","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":90,"y":1280,"wires":[["c779c3d9.4f3f6"]]},{"id":"22da5e4e.d78692","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/STARTSPOT","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":160,"y":1320,"wires":[["c779c3d9.4f3f6"]]},{"id":"8dde43f7.b7fc98","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"► Start zone","command":"app_zoned_clean","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":490,"y":1400,"wires":[[]]},{"id":"5080b9d0.4a96e8","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[]","payloadType":"json","x":90,"y":1380,"wires":[["8dde43f7.b7fc98"]]},{"id":"6b6d8d22.f2ec44","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/STARTZONE","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":160,"y":1420,"wires":[["55930868.07d0c8"]]},{"id":"811983b6.819e98","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"Send to coordinates","command":"app_goto_target","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":520,"y":1500,"wires":[[]]},{"id":"8525d97a.877dd8","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[]","payloadType":"json","x":90,"y":1480,"wires":[["811983b6.819e98"]]},{"id":"2e2a8b4d.9bc5d4","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/SENDTOXY","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":160,"y":1520,"wires":[["9ebecfe3.82aa68"]]},{"id":"654ebf87.b92628","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"► Start room cleaning","command":"app_segment_clean","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":520,"y":1600,"wires":[[]]},{"id":"ca77ca5f.9c2e48","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[16]","payloadType":"json","x":90,"y":1580,"wires":[["654ebf87.b92628"]]},{"id":"d72daf82.f4a17","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/STARTROOM","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":160,"y":1620,"wires":[["94e2e614.7dee8"]]},{"id":"3d479fa2.80c2","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"ⓘ Get sound level","command":"get_sound_volume","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":1030,"y":140,"wires":[["1e6d1054.1265b"]]},{"id":"1e6d1054.1265b","type":"function","z":"5c5767b.3a00c18","name":"Helper","func":"msg.payload = {\n soundLevel: parseInt(msg.payload)\n};\nreturn msg;","outputs":1,"noerr":0,"x":1210,"y":140,"wires":[["aaac0472.5fa02","ca65065b.f4c768"]]},{"id":"aee037d6.b384c","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"◼ Stop room cleaning","command":"stop_segment_clean","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":520,"y":1700,"wires":[[]]},{"id":"90f52b00.7b098","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":90,"y":1680,"wires":[["aee037d6.b384c"]]},{"id":"a22687c9.1199f8","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/STOPROOM","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":160,"y":1720,"wires":[["aee037d6.b384c"]]},{"id":"f726d415.96fc4","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"► Resume room cleaning","command":"resume_segment_clean","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":530,"y":1800,"wires":[[]]},{"id":"e5dcbb81.1842a","type":"inject","z":"5c5767b.3a00c18","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":90,"y":1780,"wires":[["f726d415.96fc4"]]},{"id":"8518b394.4eeea8","type":"mqtt in","z":"5c5767b.3a00c18","name":"","topic":"cmnd/roborock/RESUMEROOM","qos":"2","datatype":"auto","broker":"6f23e31c.d6bfb4","x":170,"y":1820,"wires":[["f726d415.96fc4"]]},{"id":"df83a274.9842d","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":"ⓘ Get fan power","command":"get_custom_mode","commandType":"vacuum_cmd","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":"5000","homekit_stop_to_dock":false,"x":1030,"y":200,"wires":[["951b5846.504be8"]]},{"id":"951b5846.504be8","type":"function","z":"5c5767b.3a00c18","name":"Helper","func":"msg.payload = {\n fanSpeed: parseInt(msg.payload)\n};\nreturn msg;","outputs":1,"noerr":0,"x":1210,"y":200,"wires":[["ca65065b.f4c768","aaac0472.5fa02"]]},{"id":"f322cd1c.05f2","type":"inject","z":"5c5767b.3a00c18","name":"Set \"EN\" as default language","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"en","payloadType":"str","x":820,"y":400,"wires":[["32b51d7c.37f7fa"]]},{"id":"bcbfed91.09bb08","type":"inject","z":"5c5767b.3a00c18","name":"Set \"DE\" as default language","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"de","payloadType":"str","x":820,"y":440,"wires":[["32b51d7c.37f7fa"]]},{"id":"e03307c6.a7bca8","type":"comment","z":"5c5767b.3a00c18","name":"LANGUAGE CONFIGURATION","info":"","x":810,"y":360,"wires":[]},{"id":"32b51d7c.37f7fa","type":"change","z":"5c5767b.3a00c18","name":"","rules":[{"t":"set","p":"language","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1080,"y":420,"wires":[[]]},{"id":"5b390ce2.37ef7c","type":"miio-roborock-command","z":"5c5767b.3a00c18","name":"","server":"b6c0129f.caac78","command_name":null,"command":"get_room_mapping","commandType":"str","payload":"payload","payloadType":"msg","coordinates":"","fan_speed":100,"voice_pack":null,"homekit_stop_to_dock":false,"x":1000,"y":600,"wires":[["4b2cb482.08b8ac"]]},{"id":"741b1e19.295158","type":"debug","z":"5c5767b.3a00c18","name":"ROOMS","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","x":1360,"y":600,"wires":[]},{"id":"a9be2e98.cfd49","type":"inject","z":"5c5767b.3a00c18","name":"GET ROOM ID's","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":780,"y":600,"wires":[["5b390ce2.37ef7c"]]},{"id":"4b2cb482.08b8ac","type":"function","z":"5c5767b.3a00c18","name":"Helper","func":"const newPayload = [];\nfor (var i = msg.payload.length - 1; i >= 0; i--) {\n\tnewPayload.push(msg.payload[i][0]);\n}\nmsg.payload = newPayload;\nreturn msg;","outputs":1,"noerr":0,"x":1200,"y":600,"wires":[["741b1e19.295158"]]},{"id":"4644a660.1e0088","type":"comment","z":"5c5767b.3a00c18","name":"GET ROOMS","info":"","x":750,"y":560,"wires":[]},{"id":"94e2e614.7dee8","type":"function","z":"5c5767b.3a00c18","name":"toArray","func":"try {\n msg.payload = JSON.parse(msg.payload);\n} catch(e) {\n if(msg.payload.indexOf(';') >= 0) msg.payload = msg.payload.split(';');\n else if(msg.payload.indexOf(',') >= 0) msg.payload = msg.payload.split(',');\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":340,"y":1620,"wires":[["654ebf87.b92628"]]},{"id":"9ebecfe3.82aa68","type":"function","z":"5c5767b.3a00c18","name":"toArray","func":"try {\n msg.payload = JSON.parse(msg.payload);\n} catch(e) {\n if(msg.payload.indexOf(';') >= 0) msg.payload = msg.payload.split(';');\n else if(msg.payload.indexOf(',') >= 0) msg.payload = msg.payload.split(',');\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":340,"y":1520,"wires":[["811983b6.819e98"]]},{"id":"55930868.07d0c8","type":"function","z":"5c5767b.3a00c18","name":"toArray","func":"try {\n msg.payload = JSON.parse(msg.payload);\n} catch(e) {\n if(msg.payload.indexOf(';') >= 0) msg.payload = msg.payload.split(';');\n else if(msg.payload.indexOf(',') >= 0) msg.payload = msg.payload.split(',');\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":340,"y":1420,"wires":[["8dde43f7.b7fc98"]]},{"id":"b6c0129f.caac78","type":"miio-roborock-server","z":"","name":"Roborock","ip":"192.168.0.185","token":"7770416f36746a564xxxxxxxxx","polling":"10"},{"id":"6f23e31c.d6bfb4","type":"mqtt-broker","z":"","name":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","willTopic":"","willQos":"0","willRetain":"false","willPayload":""}] - In der nomos Konfiguration unter Skills → Add-ons das Roborock-Profil importieren
- Gerät anlegen
- Einen Namen vergeben und roborock als MQTT-Topic eintragen
Datenbereich
Der Flow fragt den Roboter alle 10 Sekunden ab und veröffentlicht die Werte; nomos liest mit.
- Reinigt (
state) und Fährt zur Station (returning) - Zustand (
status) und Fehler (error) im Klartext - Akkustand (
battery, %) - Saugstufe (
fanspeed2) und Lautstärke der Ansagen (soundlevel) - Erreichbar (
reachable)
Auslösbar sind Start, Stopp, Pause, Fortsetzen, Zur Station fahren, Stopp und andocken, Wischmodus, Punktreinigung, Zonen- und Raumreinigung (samt Stopp und Fortsetzen), Finde mich sowie das Setzen von Saugstufe und Lautstärke.
Hinweise
- Die Erreichbarkeit stammt aus dem Zustandsbericht (
map_present), nicht aus einem Lebenszeichen des Brokers: nomos erkennt daran, dass der Flow aktuelle Daten vom Roboter bekommt. Steht der Flow still, bleibt der letzte Wert stehen. - Zonen- und Raumreinigung brauchen Nummern. Die Raumnummern liefert der Knoten GET ROOM ID’s im Flow; Zonen werden als Koordinatenliste übergeben. Beides kommt aus dem Roboter, nicht aus nomos.
- Im Flow lässt sich die Sprache der Zustands- und Fehlertexte umschalten: die Knoten Set “DE” as default language bzw. Set “EN” einmal auslösen.
- Der Token ändert sich, wenn der Roboter neu eingerichtet oder einem anderen Konto zugeordnet wird; dann muss er im Flow erneut hinterlegt werden.
- Nicht im Profil enthalten: Karten und Kartenverwaltung, Zeitpläne des Roboters, Verbrauchsmaterial-Zähler und die Sperrzonen.