Saugroboter - die Qual der Wahl

  • au man ... :D wie mach ich das ?! Also wie muss ich vorgehen ?

    Bzw.: Wie ist das gemeint =? Wäre das auch eine Methode ? :

    https://community.openhab.org/t/xiaomi-robor…anup-rule/55138

    Support ME ! Buy me a Coffee :thumbup:


    Dont Touch ME

    LivingRoom: SilverStone Milo ML03 | Gigabyte B450 | Ryzen 3400G | 250GB NVME | 16GB DDR4-3200| Win10 64 bit | KODI 18 | Logitech Harmony Elite | SONOS Playbar + SUB
    BedRoom: PLAY:3
    Kitchen: PLAY:3
    BathRoom: Play:3

    Einmal editiert, zuletzt von xSaSx (4. Dezember 2019 um 14:55)

  • Sodele - mit der oben genannten Methode kann ich Räume saugen lassen die ich über die Map in der XiHomeApp benannt hab.

    Nun zur Alexa Rule:

    Genutzt wird das Echo binding - meine Idee war es wenn ich etwas bestimmtes sag - das Last Voice Command den Sauger triggert und fahren lässt:


    Er macht aber mit der Rule gar nichts.

    Diese Rule hab ich abgewandelt von einer bestehenden bei mir (funktionierend)



    Leider muss ich irgendwo ein Fehler haben - vielleicht sieht ihn jemand.
    Bei der Fenster Rule geht es. Wenn sich mein "LastVoiceCommand auf "sind noch fenster offen" ändert startet die Abfrage Rule.

    Wenn sich aber bei der Sauger Rule der LastVoiceCommand auf "saug das Wohnzimmer" ändert schiest er den sendcommand nicht ab.

    Support ME ! Buy me a Coffee :thumbup:


    Dont Touch ME

    LivingRoom: SilverStone Milo ML03 | Gigabyte B450 | Ryzen 3400G | 250GB NVME | 16GB DDR4-3200| Win10 64 bit | KODI 18 | Logitech Harmony Elite | SONOS Playbar + SUB
    BedRoom: PLAY:3
    Kitchen: PLAY:3
    BathRoom: Play:3

  • deine rule erscheint mir ein wenig konfus.

    1. changed to "saug das Wohnzimmer" ist keine gute lösung lösung. da solltest du nur auf changed als trigger setzen und in der rule eine if abfrage mit contains machen.....bspw

    Code
    if(triggeringItem.state.toString.contains("saug das wohnzimmer")){
       sendCommand(XiaVac_action_Command,"app_segment_clean[16]"
    }

    2. wenn du keinen value der zuletzt angesprochenen alexa in deiner rule nutzt, dann brauchst du den natürlich auch nicht erstellen.
    @xSaSx die geschweiften klammern in der rule sind auch falsch wenn der sendcommand befehl nicht von irgendwas abgetrennt ist.

  • ok - aber bei der fenster rule geht es doch auch so `?!

    Warum hier nicht ?

    Also du meinst es dann so :


    "Amazon_Echos" Gruppe hinter mehreren Echos für den "LastVoiceCommand"

    Kann ich das dann einfach im IF auch einsetzen ? also GruppenName "Amazon_Echos.state.toString.contains" oder geht das beiu Gruppen nicht.

    Will ja das egal auf welchem Echo ich das Frage oder sage er das macht :D

    Support ME ! Buy me a Coffee :thumbup:


    Dont Touch ME

    LivingRoom: SilverStone Milo ML03 | Gigabyte B450 | Ryzen 3400G | 250GB NVME | 16GB DDR4-3200| Win10 64 bit | KODI 18 | Logitech Harmony Elite | SONOS Playbar + SUB
    BedRoom: PLAY:3
    Kitchen: PLAY:3
    BathRoom: Play:3

  • ok - aber bei der fenster rule geht es doch auch so `?!
    Warum hier nicht ?

    das macht keinen sinn es so umzusetzen. dann bräuchtest du für jeden raum eine rule.
    deswegen sollte man da contains in einer zusätzlichen abfrage nutzen.
    contains hat auch noch den vorteil, dass der wortlaut nicht komplett übereinstimmen muss um die rule zu triggern sondern nur eine wortkette.
    wenn du bspw ....toString.contains(" wohnzimmer saugen") in der rule nutzt, dann wird die rule auch getriggert wenn du sagst "Alexa, sofort das wohnzimmer saugen, aber zackig".

    Kann ich das dann einfach im IF auch einsetzen ? also GruppenName "Amazon_Echos.state.toString.contains" oder geht das beiu Gruppen nicht.

    nein wozu...du benutzt als rule trigger Member of Amazon_Echos received update
    also sobald von dir ein mitglied der gruppe angesprochen wird triggert die rule.
    in dem folgenden abschnitt wird immer das item geprüft, welches die rule getriggert hat
    triggeringItem.state.toString.contains
    ....somit sind alle mitglieder der gruppe abgedeckt.
    es ist also unerheblich welche alexa du ansprichst wenn sie mitglied deiner gruppe ist.

  • ok nun hab ichs verstanden ! ich denk einfach immer zu statisch und dediziert - alles klar...

    wie verpackt man dann mehrere räume und befehle in eine rule ?

    also zB:


    Support ME ! Buy me a Coffee :thumbup:


    Dont Touch ME

    LivingRoom: SilverStone Milo ML03 | Gigabyte B450 | Ryzen 3400G | 250GB NVME | 16GB DDR4-3200| Win10 64 bit | KODI 18 | Logitech Harmony Elite | SONOS Playbar + SUB
    BedRoom: PLAY:3
    Kitchen: PLAY:3
    BathRoom: Play:3

  • einfach mehrere if abfragen hintereinander

    Code
    if(triggeringItem.state.toString.contains("saug das wohnzimmer")){
           sendCommand(XiaVac_action_Command,"app_segment_clean[16]")
    
    
        if (triggeringItem.state.toString.contains("saug das schlafzimmer")){
           sendCommand(XiaVac_action_Command,"app_segment_clean[17]")
    
    
        if (triggeringItem.state.toString.contains("saug das scheisshaus")){
           sendCommand(XiaVac_action_Command,"app_segment_clean[17]")


    du kannst mit contains auch noch mehr rumspielen um noch freier beim wortlaut zu sein. dafür nutzt du die und abfrage bei if

    Code
    if(triggeringItem.state.toString.contains("saug") && triggeringItem.state.toString.contains("wohnzimmer")){
      sendCommand(XiaVac_action_Command,"app_segment_clean[16]")

    dann würde send command abgesetzt werden wenn "saug" und "wohnzimmer" im befehl vorkommt.
    Also auch bei "Alexa, saug an mir im Wohnzimmer" :thumbup:

  • Langsam komm ich dahinter - mir ist bei so einem Rule bau einfach noch vieles unbewusst - vom aufbau etc .

    Powershell ist halt doch etwas anders :D

    Ich danke dir wie immer und mach mir mal ans bauen :D !

    Support ME ! Buy me a Coffee :thumbup:


    Dont Touch ME

    LivingRoom: SilverStone Milo ML03 | Gigabyte B450 | Ryzen 3400G | 250GB NVME | 16GB DDR4-3200| Win10 64 bit | KODI 18 | Logitech Harmony Elite | SONOS Playbar + SUB
    BedRoom: PLAY:3
    Kitchen: PLAY:3
    BathRoom: Play:3

  • ok nun nochmal ein rule thema:

    also hab mir jetzt die Rule für Alexa gebaut mit allen Räumen - das tut soweit - will aber noch eine pushbenachrichtigung wenn er fertig ist - was muss ich da abfragen ? bzw wie geht das ?


    nun will ich aber noch für die GUI schalter.

    Also hab ich nen dummy schalter gemacht:

    mit dieser rule verknüpft:


    Code
    rule "WZ Saugen"
        when
        Item WZ_Saugen received command
        then
        if (receivedCommand==ON){
        sendCommand(XiaVac_action_Command,"app_segment_clean[18]" )
        }
    end

    das tut auch - wenn er fertig ist geht der schalter aber nicht auf OFF zurück sondern bleibt ein (was ziemlich doof und verwirrend ist)
    zusätzlich frag ich mich jetzt ob ich für jeden raum eine eigene rule file wie oben brauch oder ob ich das in eine packen kann ?! hier würde ich mir dann wie bei der alexa rule auch gerne wenn fertig eine pushbenachrichtigung senden lassen

    Ich spinn mal rum und sage sie soll trigern wenn er den status zurück zum dock bekommen ?!

    Support ME ! Buy me a Coffee :thumbup:


    Dont Touch ME

    LivingRoom: SilverStone Milo ML03 | Gigabyte B450 | Ryzen 3400G | 250GB NVME | 16GB DDR4-3200| Win10 64 bit | KODI 18 | Logitech Harmony Elite | SONOS Playbar + SUB
    BedRoom: PLAY:3
    Kitchen: PLAY:3
    BathRoom: Play:3

  • also hab mir jetzt die Rule für Alexa gebaut mit allen Räumen - das tut soweit - will aber noch eine pushbenachrichtigung wenn er fertig ist - was muss ich da abfragen ? bzw wie geht das ?

    da musste den status channel für nehmen. das sollte der in_cleaning sein.
    weiss gerade nicht was der channel empfängt...entweder waren das 0-100% oder nur 0= aus und 1= ein. musst du mal prüfen.
    dementsprechend muss deine rule aussehen.

    bspw wenn status 0=aus 1= saugen ist und dein item mit dem channel in_cleaning den unique-namen Sauger_Status hat

    Code
    rule "saugen"
      when
        Item Sauger_Status changed from 1 to 0
          then
            val telegramAction = getActions("telegram","telegram:telegramBot:bot")
               telegramAction.sendTelegram("Hallo, die Hütte wurde gesaugt ")
    end


    telegram optionen müssen natürlich auf deine config angepasst werden

    das tut auch - wenn er fertig ist geht der schalter aber nicht auf OFF zurück sondern bleibt ein (was ziemlich doof und verwirrend ist)

    es ist nicht notwendig alle dummies für die räume in die sitemap einzubauen. nutze lieber selection dafür. dann wird das so ein dropdownmenü und du machst die sitemap nicht unnötig voll
    für selection erstellst du dir ein dummy item:

    String Zimmerauswahl "Staubsauger" <pump>
    in die sitemap folgendes:
    Selection item=Zimmerauswahl mappings=[aus="Bitte wählen",wz="Wohnzimmer",sz="Schlafzimmer"]
    jetzt hast du in der sitemap schonmal das menü.

    jetzt fehlt noch eine erule, die den dummy switches sagt das bspw wohnzimmer gesaugt werden soll wenn wohnzimmer im menü angeklickt wird.
    dafür nimmst du am besten eine case rule...bspw:


    deine dummies werden also vom selection item gesteuert.

    du kannst natürlich die optionen nach belieben erweitern....bspw mit "Alle Räume"
    jetzt siehst du ja das ich im selection item die option aus="Bitte wählen" drin hab.
    dieser punkt soll nach dem saugen natürlich aktiviert werden.
    dafür erweiterst du einfach die erste rule mit der push benachgrichtigung mit der zeile

    Zimmerauswahl.postUpdate("aus")durch diese kombination von rules und items brauchst du sowohl für die reinigung von einzelnen räumen als auch für die statusanzeige des saugers nur einen einzigen eintrag in der sitemap.

  • Klingt sehr geil - kann es aktuell nicht testen aber hab es mal so gebaut (untested) :

    item:

    Code
    String Zimmerauswahl "Staubsaugen"

    sitemap:


    Code
    Selection item=Zimmerauswahl mappings=[aus="Bitte wählen",all="Alle Räume",wz="Wohnzimmer",ez="Esszimmer",ku="Küche",fl="Flur"]


    rule:


    Support ME ! Buy me a Coffee :thumbup:


    Dont Touch ME

    LivingRoom: SilverStone Milo ML03 | Gigabyte B450 | Ryzen 3400G | 250GB NVME | 16GB DDR4-3200| Win10 64 bit | KODI 18 | Logitech Harmony Elite | SONOS Playbar + SUB
    BedRoom: PLAY:3
    Kitchen: PLAY:3
    BathRoom: Play:3

  • Wie meinen :D ?! Wenn ich per sprache starte nehm ich ja die andere rule

    mit dem:

    Code
    if(triggeringItem.state.toString.contains("saug") && triggeringItem.state.toString.contains("wohnzimmer")){
    
    
      sendCommand(XiaVac_action_Command,"app_segment_clean[16]")

    Support ME ! Buy me a Coffee :thumbup:


    Dont Touch ME

    LivingRoom: SilverStone Milo ML03 | Gigabyte B450 | Ryzen 3400G | 250GB NVME | 16GB DDR4-3200| Win10 64 bit | KODI 18 | Logitech Harmony Elite | SONOS Playbar + SUB
    BedRoom: PLAY:3
    Kitchen: PLAY:3
    BathRoom: Play:3

  • Stimmt - wenn ich dich dann richtig verstehe muss ich noch irgendwo das pro befehl setzen oder ?

    Code
    Zimmerauswahl.postUpdate("aus")

    Support ME ! Buy me a Coffee :thumbup:


    Dont Touch ME

    LivingRoom: SilverStone Milo ML03 | Gigabyte B450 | Ryzen 3400G | 250GB NVME | 16GB DDR4-3200| Win10 64 bit | KODI 18 | Logitech Harmony Elite | SONOS Playbar + SUB
    BedRoom: PLAY:3
    Kitchen: PLAY:3
    BathRoom: Play:3

  • Ich will mir demnächst auch einen kleinen Staubsklaven anschaffen, es wird wohl der Xiaomi Mijia S1 werden, weiss zufällig einer von euch wie hoch z.b. ein Sofa mindestens sein muss damit der drunter fährt?

    Client: Nvidia Shield TV 2015 (16gb)
    Server/NAS: Intel Core i7 4790T *** Gigabyte GA-H97n-WiFi *** 16GB DDR3-1600 *** Nanoxia Deep Silence 3 *** 1x 4TB Parity | 4x 4TB | 1x 250GB SDD Cache *** unRAID 6.8.x

  • supi das sollte noch passen, thx

    Client: Nvidia Shield TV 2015 (16gb)
    Server/NAS: Intel Core i7 4790T *** Gigabyte GA-H97n-WiFi *** 16GB DDR3-1600 *** Nanoxia Deep Silence 3 *** 1x 4TB Parity | 4x 4TB | 1x 250GB SDD Cache *** unRAID 6.8.x

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!