Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Alexa Multi- Raumreinugung für Roborock/Xioami

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Alexa Multi- Raumreinugung für Roborock/Xioami

    This topic has been deleted. Only users with topic management privileges can see it.
    • Meistertr
      Meistertr Developer last edited by Meistertr

      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)
      
      
      }
      
      D 1 Reply Last reply Reply Quote 0
      • D
        dirkhe Developer @Meistertr last edited by dirkhe

        @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

        Meistertr 1 Reply Last reply Reply Quote 0
        • Meistertr
          Meistertr Developer @dirkhe last edited by

          @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.

          D 1 Reply Last reply Reply Quote 0
          • D
            dirkhe Developer @Meistertr last edited by

            @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 😀

            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            401
            Online

            31.8k
            Users

            80.0k
            Topics

            1.3m
            Posts

            2
            4
            335
            Loading More Posts
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes
            Reply
            • Reply as topic
            Log in to reply
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
            The ioBroker Community 2014-2023
            logo