Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Alexa Multi- Raumreinugung für Roborock/Xioami

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.2k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

Alexa Multi- Raumreinugung für Roborock/Xioami

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
4 Beiträge 2 Kommentatoren 471 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • MeistertrM Offline
    MeistertrM Offline
    Meistertr
    Developer
    schrieb am zuletzt editiert von Meistertr
    #1

    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 Antwort Letzte Antwort
    0
    • MeistertrM 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 Nicht stören
      D Nicht stören
      dirkhe
      Developer
      schrieb am zuletzt editiert von dirkhe
      #2

      @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

      MeistertrM 1 Antwort Letzte Antwort
      0
      • D 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

        MeistertrM Offline
        MeistertrM Offline
        Meistertr
        Developer
        schrieb am zuletzt editiert von
        #3

        @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 Antwort Letzte Antwort
        0
        • MeistertrM Meistertr

          @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 Nicht stören
          D Nicht stören
          dirkhe
          Developer
          schrieb am zuletzt editiert von
          #4

          @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 Antwort Letzte Antwort
          0
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          493

          Online

          32.7k

          Benutzer

          82.4k

          Themen

          1.3m

          Beiträge
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
          ioBroker Community 2014-2025
          logo
          • Anmelden

          • Du hast noch kein Konto? Registrieren

          • Anmelden oder registrieren, um zu suchen
          • Erster Beitrag
            Letzter Beitrag
          0
          • Home
          • Aktuell
          • Tags
          • Ungelesen 0
          • Kategorien
          • Unreplied
          • Beliebt
          • GitHub
          • Docu
          • Hilfe