[gelöst] roborock per Alexa steuern

Begonnen von matze1999, 06 Mai 2023, 10:00:26

Vorheriges Thema - Nächstes Thema

matze1999

Hallo,

in einigen Beiträgen wird angedeutet, dass man einen Saugroboter per Alexa steuern kann. Das geschieht unter nutzung Homebridgemapping und/oder alexamapping.

Beides wollte ich versuchen, aber ich scheitere schon an den "Characteristics", soweit ich das verstanden habe, muss ich mir eine bestehende characteristic sucen und diuese dann "umbiegen" um damit meinen Sauger los zu schicken. Allerdings ist mir nicht klar was in Hombridgemapping und was in alexamapping gemacht werden muss.

Über das webUI löse ich das so:

defmod roborock.manuell_notify_1 notify roborock.manuell:.* {\
return if $EVTPART1 eq "aus";;\
my $segment;;\
my $mode;;\
my $clean;;\
\
my $read = $EVTPART0;;\
    if ( $read eq "1" ) {\
           $segment = "16";;\
    } elsif ( $read eq "2" ) {\
           $segment = "17"\
    } elsif ( $read eq "3" ) {\
           $segment = "18"\
    } elsif ( $read eq "4" ) {\
           $segment = "19"\
    } elsif ( $read eq "5" ) {\
           $segment = "20"\
    } elsif ( $read eq "6" ) {\
           $segment = "21"\
    } elsif ( $read eq "7" ) {\
           $segment = "22"\
    } elsif ( $read eq "8" ) {\
           $segment = "23"\
    } elsif ( $read eq "9" ) {\
           $segment = "24"\
    } elsif ( $read eq "10" ) {\
           $segment = "25"\
    } elsif ( $read eq "11" ) {\
           $segment = "19,24"\
    } \
 \
$mode = qq{set roborock cleaning_mode $EVTPART1};;\
$clean = qq{set roborock segment $segment};;\
 \
fhem ("set MQTT2_DVES_DCEDFE on;;$mode;;$clean;;set roborock.manuell $EVTPART0 aus");;\
  \
}\

ausgelöst über dieses notify:

efmod roborock.manuell dummy
attr roborock.manuell group Schalter-Schalter
attr roborock.manuell room Schalter
attr roborock.manuell setList 1:aus,balanced,turbo,max 2:aus,balanced,turbo,max 3:aus,balanced,turbo,max 4:aus,balanced,turbo,max 5:aus,balanced,turbo,max 6:aus,balanced,turbo,max 7:aus,balanced,turbo,max 8:aus,balanced,turbo,max 9:aus,balanced,turbo,max 10:aus,balanced,turbo,max 11:aus,balanced,turbo,max
attr roborock.manuell sortby -2
attr roborock.manuell webCmd 1:2:3:4:5:6:7:8:9:10:11
attr roborock.manuell webCmdLabel 1 Badflur :2 Schlafzimmer :3 WC :4 Meerschweinchen :5 Bad :6 WCFlur :7 Kinderzimmer :8 Wohnzimmer :9 Essecke :10 Küche :11 Wintergarten


Jetzt muss ich das "übersetzen, so dass Alexa das versteht.

wie gehe ich vor, wie ist der Ansatz?

matze1999

MadMax-FHEM

#1
Zitat von: matze1999 am 06 Mai 2023, 10:00:26in einigen Beiträgen wird angedeutet, dass man einen Saugroboter per Alexa steuern kann. Das geschieht unter nutzung Homebridgemapping und/oder alexamapping.
Schon mal dort geschaut? Soweit ich das im Kopf habe sind dort auch einige Beispiele genannt?


Zunächst:

alexaMapping ist NUR für den Custom Skill!
Hast du diesen/einen aktiv?
(vermutlich nicht)
Damit geht so ziemlich alles...
Und wäre nat. die schönste Lösung...


homebridgeMapping: ja wäre hier mit dabei. ABER: zunächst (hast du ja erkannt) brauchst du eine Charakteristik, mit der du denkst das was du sprechen willst umsetzen zu können. D.h. du musst etwas finden, das das was du sprechen willst auch "zulässt". An dem was du sprechen willst bzw. eher musst kannst du nichts ändern! D.h. du kannst Alexa/Amazon nicht mit eigenen Sprachansagen "trainieren" (außer Custom Skill). Was du mittels Mapping anpassen kannst sind die Befehle Richtung fhem bzw. Statuszustände dann Richtung Alexa/Amazon, damit das dann "passt".

Was würdest du denn sagen wollen?
-> dann in der Liste bei Amazon schauen (link im alexa-fhem Connector Wiki), ob du etwas findest was passt und für Deutsch auch zur Verfügung steht. Evtl. würde "fan" gehen? Schalte Stufe 1, 2, 3
EDIT: hmm, konnte "fan" bei Amazon nicht (mehr) finden?
Wobei ich jetzt nicht geschaut habe, was man da sprechen kann und ob Stufen gehen und wenn wie viele...
Und nat. ob du sowas wie: "Alexa, stelle Sauger auf Stufe 3" sagen wolltest...
EDIT: https://wiki.fhem.de/wiki/FHEM_Connector_f%C3%BCr_Amazon_Alexa#Ger%C3%A4te_im_FHEM-Webfrontend_zuweisen bzw. https://developer.amazon.com/es-ES/docs/alexa/device-apis/list-of-interfaces.html oder auch https://wiki.fhem.de/wiki/Alexa_und_Mappings

Wenn du da nicht fündig wirst, gibt es noch die Möglichkeit über Routinen.

D.h. eine Routine für jeden Vorgang in der Alexa App anlegen. Dabei bist du "frei" was du sprechen willst. Es findest aber keine "Auswertung" über irgendwelche Geräte statt (außer aus "Versehen" ;)  ) und du musst immer exakt so sprechen wie in der Routine vorgegeben.

Wenn dann der dummy als dimmbares Licht knfiguriert wird (dazu müssen aber dann entsprechende Readings da sein: dim/pct) oder einen weiteren dummy, der dann entsprechend konfiguriert wird. Dann kannst du am Ende jeder Routine einen bestimmten Dimmwert in der Routine angeben und dann mittels DOIF/notify auf den Dimmwert reagieren, so wie du es jetzt schon tust...

Hier mal ein Beispiel:

Internals:
   FUUID      5db2012f-f33f-753d-2594-97ecd082edbd3424
   NAME       dmAlexaRoutine
   NR         1849
   STATE      on
   TYPE       dummy
   READINGS:
     2023-04-03 21:53:18   dim             9
     2022-07-28 16:38:59   state           on
Attributes:
   alexaName  alexaRoutine
   comment    0 - nichts
1 - prüfe Wohnung
2 - fahre die Markise aus
3 - fahre die Markise in Beschattung
4 - fahre die Markise ein
5 - stoppe die Markise
6 - schalte die Markise auf automatik
7 - schalte die Markise auf manuell
8 - Movie time (-> Leinwand mit BD)
9 - Film ab (-> Leinwand mit Streaming)
   genericDeviceType light
   homebridgeMapping Brightness=dim,cmd=dim On=state,valueOn=on,valueOff=off
   readingList dim
   room       alexa
   setList    on off dim

Die Sätze im "comment" sind das was ich bei der Routine angegeben habe (damit ich das wo stehen habe ;)  ).
D.h. jede der Routinen stellt am Ende einen bestimmten Dimmwert ein (z.B. 3).
Darauf reagiert dann ein notify/DOIF (also dummy:dim:3) und löst den tatsächlichen Befehl aus.


Oder Szene sollte evtl. auch gehen.
Allerdings musst du eben immer Szene aussprechen (soweit ich das jetzt im Kopf habe), also sowas wie:
"Alexa, schalte Sauger auf Szene 2" oder so ähnlich...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

matze1999

so einfach, der Tipp mit dem dimmbaren Licht war der entscheidende, Danke!

matze1999

MadMax-FHEM

Gerne!

Äh, wie hast es dann gemacht?
Ebenfalls über Routinen?
Oder anders?
-> wenn anders wäre es nett das zu "präsentieren"... :)

Viel Spaß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

matze1999

natürlich:

der Dummy:

defmod wollyAlexaRoutine dummy
attr wollyAlexaRoutine alexaName wollyAlexaRoutine
attr wollyAlexaRoutine comment 1 Badflur saugen \
2 Schlafzimmer saugen\
3 WC saugen\
4 Erker saugen \
5 Bad  saugen\
6 WCFlur  saugen\
7 Kinderzimmer saugen\
8 Wohnzimmer  saugen\
9 Essecke saugen\
10 Küche saugen\
11 Wintergarten saugen
attr wollyAlexaRoutine genericDeviceType light
attr wollyAlexaRoutine homebridgeMapping Brightness=dim,cmd=dim On=state,valueOn=on,valueOff=off
attr wollyAlexaRoutine readingList dim
attr wollyAlexaRoutine setList on off dim

das notify dazu, ich hatte erst die dim Nummer direkt als set roborock segment $EVTPART1, aber ich hab auch zusammengefasste Segmente ("19,24") deshalb so:

defmod roborock.manuell_notify_2 notify wollyAlexaRoutine:dim:.*  {\
return if $EVTPART1 eq "12";;\
my $clean;;\
my $segment;;\
my $read;;\
\
my $read = $EVTPART1;;\
    if ( $read eq "1" ) {\
           $segment = "16";;\
    } elsif ( $read eq "2" ) {\
           $segment = "17"\
    } elsif ( $read eq "3" ) {\
           $segment = "18"\
    } elsif ( $read eq "4" ) {\
           $segment = "19"\
    } elsif ( $read eq "5" ) {\
           $segment = "20"\
    } elsif ( $read eq "6" ) {\
           $segment = "21"\
    } elsif ( $read eq "7" ) {\
           $segment = "22"\
    } elsif ( $read eq "8" ) {\
           $segment = "23"\
    } elsif ( $read eq "9" ) {\
           $segment = "24"\
    } elsif ( $read eq "10" ) {\
           $segment = "25"\
    } elsif ( $read eq "11" ) {\
           $segment = "19,24"\
    } \
\
$clean = qq{set roborock segment $segment};;\
 \
fhem ("set MQTT2_DVES_DCEDFE on;;$clean");;\
  \
}\

und noch ein DOIF zum Stoppen des aktuellen Vorganges und Rückkehr zur Ladestation, das versuche ich dann noch mit in das notify zu bringen:

defmod wollyAlexaRoutine_DOIF_1 DOIF ([wollyAlexaRoutine:"^off$"]) (\
set roborock stop) (\
set roborock charge)\
DOELSE\

attr wollyAlexaRoutine_DOIF_1 wait 0,2


Das nächste wird sein, den Modus noch mitzugeben, "Alexa, Küchen saugen mit max"

matze1999

MadMax-FHEM

Und wie sprichst du jetzt?

Sagst du: "Alexa setze Sauger auf 1"?

Oder mittels Routine?
(das war die eigentliche Frage ;)  )

Wie geschrieben mittels Routine (falls du das doch [noch] nicht nutzt) kannst du genau vorgeben, was du sagen willst.
Also auch das mit "Küche max", geht damit.
Nachteil: für alles was du von Alexa willst brauchst du halt eine Routine... Oder zumindest (zusätzlich) für die Dinge, die anders nicht gehen...

Wenn "überschaubar", dann geht das ganz gut.
Ich habe so ca. 15 Routinen...
(nur einige davon in dem Routinen-Dummy ;)  War [anfangs] auch mehr "Spielerei" ;)  )

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

matze1999

relativ simpel:

Alexa, Küche saugen
Alexa, Saugen beenden
Alexa, Sauger Modus max
matze1999


MadMax-FHEM

Was immer noch nicht die Frage beantwortet: nutzt du Routinen? ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

matze1999

Ja, über Routinen, Küche Saugen setzt die Helligkeit des dummy Alexa-Lichts z.B. auf 50, Wohnzimmer saugen auf 51 usw., das werte ich aus.

matze1999