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

  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. Adapter mihome-vacuum anpassungen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

Adapter mihome-vacuum anpassungen

Geplant Angeheftet Gesperrt Verschoben Entwicklung
vacuumadapterentwicklungtestroborockzeitplanraumreinigung
511 Beiträge 67 Kommentatoren 115.9k Aufrufe 62 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.
  • D dirkhe

    @rkccorian kaputt machen kannst du eigentlich nichts, soweig ich weiß.
    Icb weiss nicht, was du ds für werte hast, aber cleanrooms bezieht sich auf die iobroker räume.
    Was du willst, idt eher clesnsegments. Da musst du dann deine indexe angeben, die aus der app kommen.
    Stell den adapter einfach auf debug und schicke ihn mal los, da diehst du ja, was er macht.

    R Offline
    R Offline
    RkcCorian
    schrieb am zuletzt editiert von
    #365

    @dirkhe Moin! Hab jetzt mal Folgendes Laufen lassen, mit dem Log:

    Blockly:
    000524fd-16af-4850-9a79-22ac15b7f81b-image.png

    Raum-Konfig / Enum wurde zugewiesen
    4775c198-9a5c-475d-8ca4-b43faea97c5f-image.png

    Log
    9c5cffb1-fec4-4993-bad6-f1e61d669f96-image.png

    Eine Idee was ich noch machen kann?

    Probiere am WE mal den Workaround über Timer aus.

    1 Antwort Letzte Antwort
    0
    • D Offline
      D Offline
      dirkhe
      Developer
      schrieb am zuletzt editiert von
      #366

      @rkccorian man sieht halt nicht, was an den robbi gesendet wird. Blocky kann ich nicht lesen, ist mir zu kompliziert
      Also entweder setzt du den adapter vorher auf debug, damit man sieht was passiert oder du nimmst den dp customcommand und schreibst da folendes rein
      app_segment_clean;[18,20] um zb. die 2 räume zu reinigen

      R 1 Antwort Letzte Antwort
      0
      • D dirkhe

        @rkccorian man sieht halt nicht, was an den robbi gesendet wird. Blocky kann ich nicht lesen, ist mir zu kompliziert
        Also entweder setzt du den adapter vorher auf debug, damit man sieht was passiert oder du nimmst den dp customcommand und schreibst da folendes rein
        app_segment_clean;[18,20] um zb. die 2 räume zu reinigen

        R Offline
        R Offline
        RkcCorian
        schrieb am zuletzt editiert von RkcCorian
        #367

        @dirkhe Moin!
        Nochmal den Blockly-Code in JS-Ansicht

        sendTo("mihome-vacuum.0", "cleanRooms", {
           "rooms": 'enum.rooms.wohnzimmer'
        }, async function (result) {
            console.log(result);
          });
        

        Adapter auf Debug, Log. Hab mich an die Doku gehalten, allerdings kommt die unten sichtbare Exception.
        8c603e1a-a9c7-413e-8d0a-18b7bdb60ab0-image.png

        Hab gerade auch noch die von Dir genannte Alternative mit

        app_segment_clean;[18,20]
        

        ausprobiert. Die hat funktioniert und ich werde diese nutzen. Vielen Dank!

        Würde empfehlen das funktionierende Beispiel direkt in die Adapter Doku aufzunehmen, da vermutlich viele danach fragen. Bzgl. der Exception... soll ich ein Issue aufmachen?!

        D 1 Antwort Letzte Antwort
        0
        • R RkcCorian

          @dirkhe Moin!
          Nochmal den Blockly-Code in JS-Ansicht

          sendTo("mihome-vacuum.0", "cleanRooms", {
             "rooms": 'enum.rooms.wohnzimmer'
          }, async function (result) {
              console.log(result);
            });
          

          Adapter auf Debug, Log. Hab mich an die Doku gehalten, allerdings kommt die unten sichtbare Exception.
          8c603e1a-a9c7-413e-8d0a-18b7bdb60ab0-image.png

          Hab gerade auch noch die von Dir genannte Alternative mit

          app_segment_clean;[18,20]
          

          ausprobiert. Die hat funktioniert und ich werde diese nutzen. Vielen Dank!

          Würde empfehlen das funktionierende Beispiel direkt in die Adapter Doku aufzunehmen, da vermutlich viele danach fragen. Bzgl. der Exception... soll ich ein Issue aufmachen?!

          D Offline
          D Offline
          dirkhe
          Developer
          schrieb am zuletzt editiert von
          #368

          @rkccorian ich kann mir das ja mal anschschauen.
          Das mit der doku nehme ich mal mit

          R 1 Antwort Letzte Antwort
          1
          • D dirkhe

            @rkccorian ich kann mir das ja mal anschschauen.
            Das mit der doku nehme ich mal mit

            R Offline
            R Offline
            RkcCorian
            schrieb am zuletzt editiert von RkcCorian
            #369

            @dirkhe Nachdem das mit den Räumen wunderbar funktioniert versuche ich mich gerade an der Zonenreinigung.

            • Versuch 1: Schreiben auf DP mihome-vacuum.0.control.zoneClean hat keine Effekt. Auch nicht mit den Daten, welche vorher aufgrund einer Zonenreinigung, welche über die App angefragt habe, eingegeben werden. Die Werte werden beim ersten Versuch sogar aus dem DP gelöscht. Anbei das Log...
              6e7d4376-96c0-4896-8d09-bda909fcd09f-image.png

            • Versuch 2: Die Zonendaten vom DP mihome-vacuum.0.control.zoneClean nehmen und app_zoned_clean;[20950,23000,23650,20500,1] auf den DP mihome-vacuum.0.control.X_send_command schreiben. Dann legt der Roboter los, fährt aber komplett woanders hin. Woher bekomme ich die "richtigen" Koordinaten?

            Hab jetzt keinen dazu passenden offenen Issue gefunden. Mache ich einen Fehler? Vielen Dank erneut!!

            D 1 Antwort Letzte Antwort
            0
            • R RkcCorian

              @dirkhe Nachdem das mit den Räumen wunderbar funktioniert versuche ich mich gerade an der Zonenreinigung.

              • Versuch 1: Schreiben auf DP mihome-vacuum.0.control.zoneClean hat keine Effekt. Auch nicht mit den Daten, welche vorher aufgrund einer Zonenreinigung, welche über die App angefragt habe, eingegeben werden. Die Werte werden beim ersten Versuch sogar aus dem DP gelöscht. Anbei das Log...
                6e7d4376-96c0-4896-8d09-bda909fcd09f-image.png

              • Versuch 2: Die Zonendaten vom DP mihome-vacuum.0.control.zoneClean nehmen und app_zoned_clean;[20950,23000,23650,20500,1] auf den DP mihome-vacuum.0.control.X_send_command schreiben. Dann legt der Roboter los, fährt aber komplett woanders hin. Woher bekomme ich die "richtigen" Koordinaten?

              Hab jetzt keinen dazu passenden offenen Issue gefunden. Mache ich einen Fehler? Vielen Dank erneut!!

              D Offline
              D Offline
              dirkhe
              Developer
              schrieb am zuletzt editiert von
              #370

              @rkccorian also nochmal zu den clean rooms, da steht in der readme, das dort ein String erwartet wird:
              a85bdbc9-96f7-45d4-8f95-25e84c20291a-grafik.png
              also muss das heißen:

               sendTo("mihome-vacuum.0", "cleanRooms", 'enum.rooms.wohnzimmer,enum.rooms.kueche'
              , async function (result) {
                  console.log(result);
                });
              

              Ich habe die readme aber daraufhin nochmal angepasst. Zusätzlich gebe ich dann noch im log aus, dass ein string erwartet wird. Kommt dann bald

              Für das andere bitte den adapter nochmal auf debug stellen und nochmal machen, bitte.

              R 1 Antwort Letzte Antwort
              0
              • D dirkhe

                @rkccorian also nochmal zu den clean rooms, da steht in der readme, das dort ein String erwartet wird:
                a85bdbc9-96f7-45d4-8f95-25e84c20291a-grafik.png
                also muss das heißen:

                 sendTo("mihome-vacuum.0", "cleanRooms", 'enum.rooms.wohnzimmer,enum.rooms.kueche'
                , async function (result) {
                    console.log(result);
                  });
                

                Ich habe die readme aber daraufhin nochmal angepasst. Zusätzlich gebe ich dann noch im log aus, dass ein string erwartet wird. Kommt dann bald

                Für das andere bitte den adapter nochmal auf debug stellen und nochmal machen, bitte.

                R Offline
                R Offline
                RkcCorian
                schrieb am zuletzt editiert von
                #371

                @dirkhe Ahhh, geil, jetzt geht es. Zur Vollständigkeit das funktionierende Blockly zu Deinem obigen Code:
                df541a7f-5a17-4b63-8b54-be6779e35f33-image.png

                Im Folgenden das Log, wenn ich [21050,22800,23650,20150,1] auf den DP mihome-vacuum.0.control.zoneClean schreibe...
                b23d181e-1454-4f7e-bc4d-965a14d82c96-image.png

                D 1 Antwort Letzte Antwort
                0
                • R RkcCorian

                  @dirkhe Ahhh, geil, jetzt geht es. Zur Vollständigkeit das funktionierende Blockly zu Deinem obigen Code:
                  df541a7f-5a17-4b63-8b54-be6779e35f33-image.png

                  Im Folgenden das Log, wenn ich [21050,22800,23650,20150,1] auf den DP mihome-vacuum.0.control.zoneClean schreibe...
                  b23d181e-1454-4f7e-bc4d-965a14d82c96-image.png

                  D Offline
                  D Offline
                  dirkhe
                  Developer
                  schrieb am zuletzt editiert von
                  #372

                  @rkccorian du hast da zeilenumbrüche in deinen koordinaten, gibt die mal neu ein

                  R 1 Antwort Letzte Antwort
                  0
                  • D dirkhe

                    @rkccorian du hast da zeilenumbrüche in deinen koordinaten, gibt die mal neu ein

                    R Offline
                    R Offline
                    RkcCorian
                    schrieb am zuletzt editiert von
                    #373

                    @dirkhe Ahhh, stimmt. Jetzt geht es. Bleibt nur noch das Problem, dass der Roboter mit den Koordinaten wohl nichts anfängt. Er reinigt nicht die gewünschte Zone.
                    Ich habe meine Karte um 90° nach rechts gedreht. Hätte aber erwartet, wenn ich in der App das Rechteck zeichne, der DP diese Daten kurze Zeit später hat (Wird auch damit aktualisiert) und wenn ich diese genauso eingeben, dass es klappt. Aber anscheinend nicht. Muss ich da was beachten?

                    D 1 Antwort Letzte Antwort
                    0
                    • R RkcCorian

                      @dirkhe Ahhh, stimmt. Jetzt geht es. Bleibt nur noch das Problem, dass der Roboter mit den Koordinaten wohl nichts anfängt. Er reinigt nicht die gewünschte Zone.
                      Ich habe meine Karte um 90° nach rechts gedreht. Hätte aber erwartet, wenn ich in der App das Rechteck zeichne, der DP diese Daten kurze Zeit später hat (Wird auch damit aktualisiert) und wenn ich diese genauso eingeben, dass es klappt. Aber anscheinend nicht. Muss ich da was beachten?

                      D Offline
                      D Offline
                      dirkhe
                      Developer
                      schrieb am zuletzt editiert von
                      #374

                      @rkccorian kann ich dir gerade nicht sagen, wäre auch davon ausgegangen, dass die gemeldeten daten richtig sind. Ich habe meine damals mitgesnifft, meine ich. Aber im prinzip lefert der adapter das eigentlich. Vielleicht hat der ein oder andere ja nich erfahrung damit

                      1 Antwort Letzte Antwort
                      0
                      • R Offline
                        R Offline
                        RkcCorian
                        schrieb am zuletzt editiert von
                        #375

                        @dirkhe Moin! Anbei ein Update...
                        Folgendes klappt nun...
                        Blockly
                        b2acbeb1-0996-4f5d-a75d-bb2c12c57333-image.png

                        Blockly als JS Code

                        sendTo("mihome-vacuum.0", "cleanZone", '[21000,28200,23600,30750,1]', async function (result) {
                            console.log(result);
                          });
                        

                        Oder auch schreiben von app_zoned_clean;[[21000,28200,23600,30750,1]] (auf die doppelte Klammerung achten, da mehrere Zonen kommasepariert übergeben werden können) auf DP mihome-vacuum.0.control.X_send_command

                        Bzgl. Koordinaten gibt es ein Problem. Das ist unabhängig der Kartenorientierung. Bin über https://www.roboter-forum.com/threads/zonen-reinigung-per-iobroker-alexa-steuern-schritt-fuer-schritt-anleitung.26292/page-2#post-327449 drauf gekommen.

                        Mitte ist immer 25500, 25500 bezogen auf Ladestation (daher ist die Orientierung der Karte egal). Die X-Koordinaten sind auch korrekt im Adapter gemeldet worden. Die Y-Koordinaten sind aber in der Richtung vertauscht. D.h. ich musste die Y-Koordinaten erst neu berechnen über (25500 - Y-Koordinate Adapter) + 25500. > Bug?!

                        Frage für meine finale Implementierung
                        Gibt es einen Unterschied, ob ich auf den DP mihome-vacuum.0.control.X_send_command schreibe oder ob ich SendTo benutze? Gibt es da bspw. eine Queue oder wird ein Befehl unterbrochen, wenn mehrfache Kommandos gleichzeitig kommen? Oder ist es komplett egal? Vielen Dank im Voraus!

                        D 1 Antwort Letzte Antwort
                        0
                        • R RkcCorian

                          @dirkhe Moin! Anbei ein Update...
                          Folgendes klappt nun...
                          Blockly
                          b2acbeb1-0996-4f5d-a75d-bb2c12c57333-image.png

                          Blockly als JS Code

                          sendTo("mihome-vacuum.0", "cleanZone", '[21000,28200,23600,30750,1]', async function (result) {
                              console.log(result);
                            });
                          

                          Oder auch schreiben von app_zoned_clean;[[21000,28200,23600,30750,1]] (auf die doppelte Klammerung achten, da mehrere Zonen kommasepariert übergeben werden können) auf DP mihome-vacuum.0.control.X_send_command

                          Bzgl. Koordinaten gibt es ein Problem. Das ist unabhängig der Kartenorientierung. Bin über https://www.roboter-forum.com/threads/zonen-reinigung-per-iobroker-alexa-steuern-schritt-fuer-schritt-anleitung.26292/page-2#post-327449 drauf gekommen.

                          Mitte ist immer 25500, 25500 bezogen auf Ladestation (daher ist die Orientierung der Karte egal). Die X-Koordinaten sind auch korrekt im Adapter gemeldet worden. Die Y-Koordinaten sind aber in der Richtung vertauscht. D.h. ich musste die Y-Koordinaten erst neu berechnen über (25500 - Y-Koordinate Adapter) + 25500. > Bug?!

                          Frage für meine finale Implementierung
                          Gibt es einen Unterschied, ob ich auf den DP mihome-vacuum.0.control.X_send_command schreibe oder ob ich SendTo benutze? Gibt es da bspw. eine Queue oder wird ein Befehl unterbrochen, wenn mehrfache Kommandos gleichzeitig kommen? Oder ist es komplett egal? Vielen Dank im Voraus!

                          D Offline
                          D Offline
                          dirkhe
                          Developer
                          schrieb am zuletzt editiert von
                          #376

                          @rkccorian send commsnd ist ein beipass, das wird immer direkt zum robbi gesendet.
                          DIe anderen laufen immer erst durch den adapter. Der prüft ab, ob gerade ein saugvorgang läuft ubd reiht es in eine queue ein. Das passiert aber adapter intern.
                          ob das mit den koordinaten ein bug ust, kann ich dir nicht sagen, ich vermute aber mal, das es vom robbi so kommt

                          A R 2 Antworten Letzte Antwort
                          0
                          • D dirkhe

                            @rkccorian send commsnd ist ein beipass, das wird immer direkt zum robbi gesendet.
                            DIe anderen laufen immer erst durch den adapter. Der prüft ab, ob gerade ein saugvorgang läuft ubd reiht es in eine queue ein. Das passiert aber adapter intern.
                            ob das mit den koordinaten ein bug ust, kann ich dir nicht sagen, ich vermute aber mal, das es vom robbi so kommt

                            A Offline
                            A Offline
                            Ashuan
                            schrieb am zuletzt editiert von
                            #377

                            Hallo zusammen, ich habe einen S7 und dieser löst meinen Roomba s9 ab.
                            Nun vermisse ich etwa die Möglichkeit jeden Raum inidividuell nach Plan zu reinigen.
                            Sowas wie:
                            Morgens: Bad nur saugen, Flur stark saugen, Küche nur saugen (in einem Rutsch versteht sich)
                            Mittags: Bad saugen & intensiv wischen; Kuche saugen & wischen (...)
                            Abends: Zone1 saugen & intensiv wischen; Flur saugen (...)

                            geht sowas?
                            Bei meinem S9 habe ich in IoBroker nen Kalender gehabt, von dem aus Flags gesteuert haben welcher Raum in welchem Modus gereinigt werden soll. Mit nem kleinem JavaScript habe ich mir dann ein JSon-Object gebastelt, das zum S9 geschickt und er hat losgelegt.
                            Kann ich diese Form von Koordination auch mit dem mihome-vacuum Adapter hinbekommen?
                            So wie ich das sehe kann ich fur den Sauger und den Wischer nur globale Setting vornehmen, richtig ?

                            BTW sehr toller Adapter!!
                            Vielen Dank dafür

                            Kai

                            R MeistertrM 2 Antworten Letzte Antwort
                            0
                            • A Ashuan

                              Hallo zusammen, ich habe einen S7 und dieser löst meinen Roomba s9 ab.
                              Nun vermisse ich etwa die Möglichkeit jeden Raum inidividuell nach Plan zu reinigen.
                              Sowas wie:
                              Morgens: Bad nur saugen, Flur stark saugen, Küche nur saugen (in einem Rutsch versteht sich)
                              Mittags: Bad saugen & intensiv wischen; Kuche saugen & wischen (...)
                              Abends: Zone1 saugen & intensiv wischen; Flur saugen (...)

                              geht sowas?
                              Bei meinem S9 habe ich in IoBroker nen Kalender gehabt, von dem aus Flags gesteuert haben welcher Raum in welchem Modus gereinigt werden soll. Mit nem kleinem JavaScript habe ich mir dann ein JSon-Object gebastelt, das zum S9 geschickt und er hat losgelegt.
                              Kann ich diese Form von Koordination auch mit dem mihome-vacuum Adapter hinbekommen?
                              So wie ich das sehe kann ich fur den Sauger und den Wischer nur globale Setting vornehmen, richtig ?

                              BTW sehr toller Adapter!!
                              Vielen Dank dafür

                              Kai

                              R Offline
                              R Offline
                              RkcCorian
                              schrieb am zuletzt editiert von
                              #378

                              @ashuan Moin! Soweit ich es sehe geht aktuell nur global. Ich selber stehe vor dem gleichen Problem. Ich werde mir jetzt auch ne Queue erstellen, die folgendes beinhaltet...

                              • Reinungsmodus (Wischleistung, Saugleistung)
                              • Zone oder Raum
                              • Zonendaten oder Raumdaten

                              Hab sonst auch das Problem, dass zwar die Räume / Zone in der Queue landet, aber der Reinigungsmodus leider nicht.

                              Viele Grüße!

                              1 Antwort Letzte Antwort
                              0
                              • D dirkhe

                                @rkccorian send commsnd ist ein beipass, das wird immer direkt zum robbi gesendet.
                                DIe anderen laufen immer erst durch den adapter. Der prüft ab, ob gerade ein saugvorgang läuft ubd reiht es in eine queue ein. Das passiert aber adapter intern.
                                ob das mit den koordinaten ein bug ust, kann ich dir nicht sagen, ich vermute aber mal, das es vom robbi so kommt

                                R Offline
                                R Offline
                                RkcCorian
                                schrieb am zuletzt editiert von
                                #379

                                @dirkhe Vielen Dank!
                                Dann muss ich für meine eigene Queue (vgl. auch den Post direkt über diesem) send_command nutzen um nicht mit der Queue des Adapter durcheinander zu kommen.

                                Wäre geil, wenn die Adapter-Queue den Saugmodus, etc. mit beinhalten würde.

                                Viele Grüße!

                                D A 2 Antworten Letzte Antwort
                                0
                                • R RkcCorian

                                  @dirkhe Vielen Dank!
                                  Dann muss ich für meine eigene Queue (vgl. auch den Post direkt über diesem) send_command nutzen um nicht mit der Queue des Adapter durcheinander zu kommen.

                                  Wäre geil, wenn die Adapter-Queue den Saugmodus, etc. mit beinhalten würde.

                                  Viele Grüße!

                                  D Offline
                                  D Offline
                                  dirkhe
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #380

                                  man könnte die timer evtl erweitern, das man den saugmodus noch mit definieren könnte

                                  1 Antwort Letzte Antwort
                                  0
                                  • A Ashuan

                                    Hallo zusammen, ich habe einen S7 und dieser löst meinen Roomba s9 ab.
                                    Nun vermisse ich etwa die Möglichkeit jeden Raum inidividuell nach Plan zu reinigen.
                                    Sowas wie:
                                    Morgens: Bad nur saugen, Flur stark saugen, Küche nur saugen (in einem Rutsch versteht sich)
                                    Mittags: Bad saugen & intensiv wischen; Kuche saugen & wischen (...)
                                    Abends: Zone1 saugen & intensiv wischen; Flur saugen (...)

                                    geht sowas?
                                    Bei meinem S9 habe ich in IoBroker nen Kalender gehabt, von dem aus Flags gesteuert haben welcher Raum in welchem Modus gereinigt werden soll. Mit nem kleinem JavaScript habe ich mir dann ein JSon-Object gebastelt, das zum S9 geschickt und er hat losgelegt.
                                    Kann ich diese Form von Koordination auch mit dem mihome-vacuum Adapter hinbekommen?
                                    So wie ich das sehe kann ich fur den Sauger und den Wischer nur globale Setting vornehmen, richtig ?

                                    BTW sehr toller Adapter!!
                                    Vielen Dank dafür

                                    Kai

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

                                    @ashuan Das ist möglich, du kannst eine "JSON" mit den zu reinigenden räumen oder Zonen schicken siehe hier: https://github.com/MeisterTR/XiaomiRobotVacuumProtocol/blob/master/segment_clean.md
                                    oder hier:
                                    https://github.com/MeisterTR/XiaomiRobotVacuumProtocol/blob/master/zoned_clean.md
                                    die commandos kannst du dann über send own command direkt an den Roboter senden (hierbei eben auf die richtige Formatierung in der Adapter readme achten)

                                    vielleicht hilft dir das weiter : das Skript sucht in den Alexe Kommandos nach den räumen uns schickt sie dann an den Sauger BSP: "Alexa sauge Flur Küche und Badezimmer" und dann werden die jeweiligen Räume gesaugt.

                                    // 17150,28200
                                    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 : 'Luisa', id : 7, regex : /luisa|Luisa/, text : 'Luisa`s Zimmer', floor: 1},
                                        { name : 'Finja', id : 6, regex : /Finja|finja/, text : 'Finja`s Zimmer', floor: 1},
                                        { name : 'Badezimmer', id : 7, regex : / bad| badezimmer/, text : 'Badezimmer', floor: 1},
                                        { name : 'Sophia', id : 6, regex : /Sophia|sophia/, text : 'Sophia`s Zimmer', 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)
                                    
                                    
                                    }
                                    
                                    
                                    R A 2 Antworten Letzte Antwort
                                    0
                                    • MeistertrM Meistertr

                                      @ashuan Das ist möglich, du kannst eine "JSON" mit den zu reinigenden räumen oder Zonen schicken siehe hier: https://github.com/MeisterTR/XiaomiRobotVacuumProtocol/blob/master/segment_clean.md
                                      oder hier:
                                      https://github.com/MeisterTR/XiaomiRobotVacuumProtocol/blob/master/zoned_clean.md
                                      die commandos kannst du dann über send own command direkt an den Roboter senden (hierbei eben auf die richtige Formatierung in der Adapter readme achten)

                                      vielleicht hilft dir das weiter : das Skript sucht in den Alexe Kommandos nach den räumen uns schickt sie dann an den Sauger BSP: "Alexa sauge Flur Küche und Badezimmer" und dann werden die jeweiligen Räume gesaugt.

                                      // 17150,28200
                                      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 : 'Luisa', id : 7, regex : /luisa|Luisa/, text : 'Luisa`s Zimmer', floor: 1},
                                          { name : 'Finja', id : 6, regex : /Finja|finja/, text : 'Finja`s Zimmer', floor: 1},
                                          { name : 'Badezimmer', id : 7, regex : / bad| badezimmer/, text : 'Badezimmer', floor: 1},
                                          { name : 'Sophia', id : 6, regex : /Sophia|sophia/, text : 'Sophia`s Zimmer', 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)
                                      
                                      
                                      }
                                      
                                      
                                      R Offline
                                      R Offline
                                      RkcCorian
                                      schrieb am zuletzt editiert von
                                      #382

                                      @meistertr Ich versuche auch über Alexa anzubinden. Leider hat der Alexa2 Adapter den Nachteil, dass Alexa schneller reagiert und dann eine negative Antwort kommt, bevor die Daten in ioBroker verarbeitet wurden.
                                      Versuche es gerade auch mit dem iot Adapter, leider klappt das auch nicht zufriedenstellend, vgl. auch https://github.com/ioBroker/ioBroker.iot/issues/442

                                      Jemand noch ne gute Idee? Evtl. iot Adapter und dann über Callback Summary von Alexa2 Adapter auswerten o.ä.?

                                      D 1 Antwort Letzte Antwort
                                      0
                                      • R RkcCorian

                                        @meistertr Ich versuche auch über Alexa anzubinden. Leider hat der Alexa2 Adapter den Nachteil, dass Alexa schneller reagiert und dann eine negative Antwort kommt, bevor die Daten in ioBroker verarbeitet wurden.
                                        Versuche es gerade auch mit dem iot Adapter, leider klappt das auch nicht zufriedenstellend, vgl. auch https://github.com/ioBroker/ioBroker.iot/issues/442

                                        Jemand noch ne gute Idee? Evtl. iot Adapter und dann über Callback Summary von Alexa2 Adapter auswerten o.ä.?

                                        D Offline
                                        D Offline
                                        dirkhe
                                        Developer
                                        schrieb am zuletzt editiert von
                                        #383

                                        @rkccorian also ich habe bei mir fie räume alle in alexa und sage nur "alexa, sauge küche an". Wenn ich mehrere räume ssugen will, sage ich den satz halt mehrmals hintereinander, den rest (queue)macht dann der adapter. Um das zu machen, musst du einfach nur die smartname variable setzten

                                        {
                                          "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"
                                          }
                                        }
                                        
                                        R 1 Antwort Letzte Antwort
                                        0
                                        • MeistertrM Meistertr

                                          @ashuan Das ist möglich, du kannst eine "JSON" mit den zu reinigenden räumen oder Zonen schicken siehe hier: https://github.com/MeisterTR/XiaomiRobotVacuumProtocol/blob/master/segment_clean.md
                                          oder hier:
                                          https://github.com/MeisterTR/XiaomiRobotVacuumProtocol/blob/master/zoned_clean.md
                                          die commandos kannst du dann über send own command direkt an den Roboter senden (hierbei eben auf die richtige Formatierung in der Adapter readme achten)

                                          vielleicht hilft dir das weiter : das Skript sucht in den Alexe Kommandos nach den räumen uns schickt sie dann an den Sauger BSP: "Alexa sauge Flur Küche und Badezimmer" und dann werden die jeweiligen Räume gesaugt.

                                          // 17150,28200
                                          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 : 'Luisa', id : 7, regex : /luisa|Luisa/, text : 'Luisa`s Zimmer', floor: 1},
                                              { name : 'Finja', id : 6, regex : /Finja|finja/, text : 'Finja`s Zimmer', floor: 1},
                                              { name : 'Badezimmer', id : 7, regex : / bad| badezimmer/, text : 'Badezimmer', floor: 1},
                                              { name : 'Sophia', id : 6, regex : /Sophia|sophia/, text : 'Sophia`s Zimmer', 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)
                                          
                                          
                                          }
                                          
                                          
                                          A Offline
                                          A Offline
                                          Ashuan
                                          schrieb am zuletzt editiert von
                                          #384

                                          @meistertr Vielen Dank das werde ich mir mal zu Gemüte führen.

                                          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

                                          538

                                          Online

                                          32.4k

                                          Benutzer

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