NEWS
Alexa Multi- Raumreinugung für Roborock/Xioami
-
Hallo Leute, mich hat es immer genervt die Raumreinigung über Die App oder meiner Visu zu starten, also hab ich ein kleines Script geschrieben, welches die Räume aus der Alexa history sucht und die jeweiligen Räume saugen lässt. Funktioniert erschrocken zuverlässig.
In meinem Fall für 2 Sauger und 2 Geschosse
const rooms = [ { name : 'Kueche', id : 17, regex : /küche|Küche/, text : 'Küche', floor: 0 }, { name : 'Flur_unten', id : 19, regex : /flur unten|Flur unten|diele unten/, text : 'Flur unten', floor: 0}, { name : 'Gaestebad', id : 20, regex : /gästebad|gästebadezimmer/, text : 'Gästebadezimmer', floor: 0}, { name : 'Wohnbereich', id : 18, regex : /wohnzimmer|wohnbereich/, text : 'Wohnbereich', floor: 0 }, { name : 'Essbereich', id : 16, regex : /essbereich|esszimmer|Essbereich|Esszimmer/, text : 'Essbereich', floor: 0 }, { name : 'Vorratsraum', id : 21, regex : /vorratsraum|speisekammer/, text : 'Vorratsraum', floor: 0}, //Obergeschoss { name : 'kind1', id : 7, regex : /kind1/, text : 'Luisa`s Zimmer', floor: 1}, { name : 'kind2', id : 6, regex : /kind2/, text : 'Finja`s Zimmer', floor: 1}, { name : 'Badezimmer', id : 7, regex : / bad| badezimmer/, text : 'Badezimmer', floor: 1}, { name : 'Schlafzimmer', id : 5, regex : /Schlafzimmer|schlafzimmer/, text : 'Schlafzimmer', floor: 1}, { name : 'Waschkammer', id : 18, regex : /waschkammer|wäschekammer| wäsche kammer/, text : 'Waschkammer', floor: 1}, { name : 'Arbeitszimmer', id : 16, regex : /arbeitszimmmer|gästezimmer/, text : 'Badezimmer', floor: 1}, { name : 'Flur_oben', id : 17, regex : /flur oben|Flur unten/, text : 'Flur oben', floor: 1}, ] const debug = true; let id = '' subscribe({ id: "alexa2.0.History.summary", change: "ne" }, function(obj) { id = getState('alexa2.0.History.serialNumber'/*serialNumber*/).val debug && log('Starte id '+ id) findNewRooms(obj.state.val) }); //{"id":8480,"method":"app_segment_clean","params":[{"segments":[17],"repeat":2,"clean_order_mode":0}]} function findNewRooms(array){ const wrongkey = array.match(/sprich mir nach|asd/); const key = array.match(/sauge|sage|reinige|wische|staubsauger/); if(wrongkey || !key) return debug && log(array); const zweimal = array.match(/zwei mal/); const dreimal = array.match(/drei mal/); let wiederholung = 1; let speakText = 'Aber ich lasse den Staubsauger '; let room0IdArray = []; let room1IdArray = []; rooms.forEach((room, index) => { const findRoom = array.match(room.regex); findRoom && debug && log(room.text + ' erkannt') if(findRoom){ if(room0IdArray.length != 0 || room1IdArray.length != 0) speakText += ',' if(room.floor == 0 ) room0IdArray.push(room.id); if(room.floor == 1 ) room1IdArray.push(room.id); speakText += ' '+ room.text } }); const n = speakText.lastIndexOf(','); speakText = speakText.slice(0, n) + speakText.slice(n).replace(',', ' und'); debug && log(JSON.stringify(room0IdArray)) debug && log(JSON.stringify(room1IdArray)) if(zweimal){ wiederholung = 2 speakText += ' zwei mal' } if(dreimal){ wiederholung = 3 speakText += ' drei mal' } setStateDelayed('alexa2.0.Echo-Devices.'+ id +'.Commands.speak', speakText +' saugen!',1500); //starte Roboter Unten if(room0IdArray.length != 0) setStateDelayed('mihome-vacuum.0.control.X_send_command','app_segment_clean;[{"segments":'+JSON.stringify(room0IdArray)+',"repeat":'+ wiederholung +',"clean_order_mode":0}]',3000) // starte Roboter oben if(room1IdArray.length != 0) setStateDelayed('mihome-vacuum.1.control.X_send_command','app_segment_clean;[{"segments":'+JSON.stringify(room1IdArray)+',"repeat":'+ wiederholung +',"clean_order_mode":0}]',3000) }
-
@meistertr hi,
Du hast doch jeweils an den Räumen cleanRoom{ "type": "state", "common": { "name": "clean Room", "type": "boolean", "role": "button", "read": false, "write": true, "desc": "Start Room Cleaning", "smartName": { "de": "sauge Wohnzimmer" } }, "native": {}, "from": "system.adapter.mihome-vacuum.0", "user": "system.user.admin", "ts": 1578400811474, "_id": "mihome-vacuum.0.rooms.20001007939.roomClean", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
Ich kann einfacb sagen alexa, sauge Wohnzimmer. Wenn ich das dann 2x hintereinander sage, macht er dass auch
-
@dirkhe weil über cleanRoom muss ich jeden raum einzeln benennen Also "Alexa, sauge bad, Alexa Sauge Flur...." und in dem Fall ist zweimal saugen ja zwei Einzel Reinigungen. Das bedeutet, dass er nicht über kreuz saugt.
Mit der Lösung kann ich sagen "Alexa, sauge Flur, Bad, Esszimmer und Wohnzimmer zwei mal" und die räume werden zweimal über kreuz gesaugt. Bei insgesamt 14 Räumen ist das eine wesentliche Erleichterung. -
@meistertr es führen ja bekanntlich viele Wege nach Rom..
Bei uns fährtver halt immer per timer in wz und Küche und bad flur und Schlafzimmer sporadisch, aber das klappt dann mit den einzel ansagen ganz gut, aber das ist ja das schöne an iobroker, nen kleines script und das leben ist wieder leichter