DOIF per Sprachsteuerung

Begonnen von Superposchi, 02 März 2024, 10:41:30

Vorheriges Thema - Nächstes Thema

Superposchi

Hallo,

ich habe ein DOIF zur Steuerung meiner Lichtautomatik. Doch manchmal ist es sinnvoll, dass Licht dauerhaft ein-/auszuschalten.
Ich würde daher gerne dem Steuerung-DOIF per Alexa-Sprachsteuerung drei Werte zuweisen: On, Auto und Off - wobei On und Off das DOIF deaktivieren (Disable) sollen und die Lampen entsprechend ein-/ausschalten.

Mein Problem ist aber das ich bisher immer nur on/off in Alexa schalten kann.

Ich möchte kein Reading in dem DOIF setzen, sondern direkt den State. Geht das?

MadMax-FHEM

#1
Ich nehme mal an du verwendest keinen Custom Skill sondern (nur) alexa-fhem Connector bzw. Smart Home Skill...
...da könntest du das einfach selbst bestimmen: "dein Skill", deine "Möglichkeiten"...


Bei Verwendung des Smart Home Skill fängt halt alles bei der Spracherkennung an, d.h. etwas das Alexa/Amazon beim Smart Home Skill nicht kennt kannst du nicht sprechen bzw. sprechen schon aber es wird nicht "verstanden"... 8)

D.h. du musst erst mal ein "Gerät" bzw. Charakteristik finden, die das versteht, was du gerne sprechen würdest.
Im Wiki ist ein Link (unten bei https://wiki.fhem.de/wiki/FHEM_Connector_f%C3%BCr_Amazon_Alexa#Ger%C3%A4te_im_FHEM-Webfrontend_zuweisen), bzw. hier: https://developer.amazon.com/es-ES/docs/alexa/device-apis/list-of-interfaces.html

Das steht auch so ähnlich im Wiki...
EDIT: (noch mal zur Verdeutlichung) diese "Limitierung" hat nichts mit alexa-fhem zu tun, sondern liegt alleine bei Amazon... ;)

Wenn das geschafft ist, dann musst du sehen, ob dein Device schon autom. erkannt wird, mind. wirst du verm. ein genericDeviceType brauchen.
Und falsch, alexa-fhem setzt keine Readings!
alexa-fhem führt set-Befehle aus (die dann evtl. Readings im Devive ändern).
alexa-fhem greift Readings ab (bzw. reagiert auf Events bestimmter Readings), um Zustände an Alexa/Amazon zurückzuspiegeln...

D.h. wenn du es geschafft hast ein Gerät zu finden, mit dem du sprechen kannst wie du es willst (evtl. würde https://developer.amazon.com/es-ES/docs/alexa/device-apis/alexa-thermostatcontroller.html gehen, zumindest sollte on/off/Automatik gehen), dann musst du eben die benötigten "setter" konfigurieren und mittels passender Readings "zurückspiegeln", dass/welcher Zustand eingestellt ist/wurde (evtl. "userReadings" oder homebridgeMapping, cmdalias sollte auch gehen).


Einfacher wäre: Alexa Routinen

Dort kannst du (in der Alexa App) festlegen was du sprechen willst (es wird aber dann nur genau dieser Satz verstanden ;)  Ein"Zusammenhang" mit einem Gerät/Device muss nicht da sein bzw. wenn es ein Device/Gerät gibt, welches auch in einer Routine "auftaucht", kann Alexa schon mal "durcheinander kommen").
Am Ende der Routine schaltest du dann einen "dummy" und per notify führst du dann die entsprechende Aktion aus.

Für solche Dinge habe ich einen "dimmer-dummy" (quasi einen "Sammel-dummy" für mehrere Routinen).
D.h. am Ende der jeweiligen Routine schalte ich beim dummy einen entsprechenden dim-Wert und mittels notify/DOIF werte ich den dim-Wert aus und führe dann die Aktion in fhem aus.

Dabei hat der "dimmer-dummy" mit den Devices wo die Befehle ausgeführt werden nix zu tun, Kopplung nur per notify/DOIF.

Nachteil: in der Alexa-App sieht man nicht den tatsächlichen Status des eigentlichen Devices (also das, welches per notify/DOIF "geschalten" wird). Wenn du das brauchst/willst, dann wirst du dir obige "Mühe" machen müssen...

D.h. in deinem Fall entweder: on/off wie bisher und nur Automatik per Routine.
Da du aber dasselbe Gerät/Namen ansprechen willst (nehme ich an) kann das zu "Verwirrungen" führen.

Oder alle 3 "Spracheingaben" per Routinen, dann evtl. über das "Konstrukt" des "dimmer-dummy" nachdenken.

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)

Superposchi

Ich denke für mich kommt wenn dann eher die untere Variante in Frage, beim oberen ist mir der aufwand zu groß.
Das Problem dabei ist aber, dass ich nicht verstehe wie und wo ich per Routine einen Dummy setzen kann. Ich finde in der Alexa-App nirgendwo einen Befehl bei der Routine um von Alexa etwas in Fhem zu ändern. Nur wenn es bestehendes Device aus Fhem in Alexa angelegt wird lässt sich dieses eben mit on/off schalten.
Mir würde es ja reichen, wenn ein Dummy eben die drei Werte per Alexa annehmen könnte. Den Rest in Fhem bekomme ich dann schon hin - hoffe ich.

MadMax-FHEM

#3
Ok, verstehe zwar dein Problem nicht aber dann mal alle Schritte:

anlegen der "Empfangs-Devices" (aka dummy oder in meinem Fall der EINE "dimmer-dummy", siehe rawDef).

-> aufnehmen in Alexa

In der Alexa-App einen gesprochenen Satz für alles was du tun willst aka Routine.
Am Ende der Routine wird dann das jeweils dafür "zuständige" "Empfangs-Device" geschaltet.
(oder eben ein bestimmter Dimm-Wert bei Verwendung des "dimmer-dummy")

Darauf dann ein notify/DOIF was eben dann den eigentlichen Befehl, der hinter dem "Satz" stehen soll ausführt.

EDIT: die Routine dient nur dazu, dass du eben sehr einfach Alexa "lernen" kannst worauf sie hören soll...

Hier mein "dimmer-dummy":
defmod dmAlexaRoutine dummy
attr dmAlexaRoutine alexaName alexaRoutine
attr dmAlexaRoutine genericDeviceType light
attr dmAlexaRoutine homebridgeMapping Brightness=dim,cmd=dim On=state,valueOn=on,valueOff=off
attr dmAlexaRoutine readingList dim
attr dmAlexaRoutine setList on off dim

EDIT: evtl. mal ein set dmAlexaRoutine dim 20 o.ä. aufrufen, damit es auch ein entspr. Reading gibt. Dann tut sich alexa-fhem leichter mit der Erkennung... ;) 

Den kann ich nun in Alexa ein/aus schalten und dimmen.

Am Ende von z.B. "Alexa schalte XYZ auf Automatik" setze ich dann einen Dimm-Wert von 1

Am Ende von z.B. "Alexa bring den Müll raus" setze ich den Dimm-Wert 2

Am Ende von z.B. "Alexa mach doch mal Kaffee" setze ich den Dimm-Wert auf 3

usw.

In fhem kommt ja dann ein Event mit dim 1, dim 2 oder dim 3 usw.

Darauf dann ein notify/DOIF was dann eben die Aktion für "dim 1" (setze XYZ auf Automatik), "dim 2" (was immer bei "Müll raus passieren soll" ;)  ) und "dim 3" (Kaffee machen) in fhem auslöst (z.B. Kaffeemaschine auf Programm 3 + Wasser ein + Kaffeemschine "go").

D.h. ich nutze den einen dummy für beliebig viele (gut so viele wie es Dimm-Werte gibt) 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)

Superposchi

Der Ablauf war mir schon klar, dennoch danke für die ausführliche Erklärung.
Mein Problem ist, dass ich die Möglichkeit nicht sehe wie der Dim-Dummy am Ende der Routine gesetzt wird.
Ich kann als Aktion nur Objekte auswählen die in Alexa aus verschiedenen Skills angelegt wurden, aber nicht auf die, die aus FHEM heraus angelegt wurden. Keine Ahnung ob ich da was übersehe oder ob ich es doch nicht verstanden habe.

MadMax-FHEM

#5
Wenn du in der Alexa App unter Geräte schaust, siehst du da welche aus fhem?

Hast du fhem in Alexa "integriert"?
Klang so...

Also hast du alexa-fhem laufen und damit auch den fhem-Skill?

Ich kann bei Aktion einfach den geposteten dummy/Licht wählen und einen Dimm-Wert setzen...
EDIT: also Aktion der Routine -> SmartHome -> Licht -> alexaRoutine...

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)

Superposchi

Ich bekomme meine Rolladenaktoren aus Fhem teilweise (2 von 3) in Alexa angezeigt und kann diese auch per eigener Routine steuern.
Das Problem war, dass ich den Zwischenschritt Smart-Home bei der Zuweisung des Gerätes in der Routine nicht berücksicht habe. Hatte immer vergeblich nach den Geräten gesucht ohne das Bewustsein, dass dort erst mal Grupopierungen angezeigt werden wass man denn machen kann.

Jetzt mus ich nur noch das GenericDevice finden, dass es mir erlaubt einem Dummy mehr als 1 Wert zuzuweisen. Hatte es mal mit Garageprobiert, aber da taucht das Device gar nicht in Alexa auf. Optional wäre noch lights, aber das muss ich noch testen.

Warum mir allerdings nur 2 von den 3 Rolladenaktoren angezeigt werden verstehe ich nicht. Besonders da ich genau den fehlenden zuerst eingebunden habe und er drin war (Routine erstellt und getestet) und nachdem ich die anderen beiden hinzugefügt habe, war der erste wieder Weg.
Habe auch immer Probleme neue Devices in Alexa angezeigt zu bekommen. Ich muss immer den Skill deaktivieren und Reaktivieren, damit eine Gerätesuche funktioniert. Eigentlich sollte es ja reichen Alexa in Fhem ein Reload zu verpassen und dann verbal nach neuen Geräten suchen zu lassen.

MadMax-FHEM

Zitat von: Superposchi am 05 März 2024, 10:03:31Jetzt mus ich nur noch das GenericDevice finden, dass es mir erlaubt einem Dummy mehr als 1 Wert zuzuweisen. Hatte es mal mit Garageprobiert, aber da taucht das Device gar nicht in Alexa auf. Optional wäre noch lights, aber das muss ich noch testen.
Siehe RawDef meines "Dimm-Dummy"?

Zitat von: Superposchi am 05 März 2024, 10:03:31Warum mir allerdings nur 2 von den 3 Rolladenaktoren angezeigt werden verstehe ich nicht. Besonders da ich genau den fehlenden zuerst eingebunden habe und er drin war (Routine erstellt und getestet) und nachdem ich die anderen beiden hinzugefügt habe, war der erste wieder Weg.
Habe auch immer Probleme neue Devices in Alexa angezeigt zu bekommen. Ich muss immer den Skill deaktivieren und Reaktivieren, damit eine Gerätesuche funktioniert. Eigentlich sollte es ja reichen Alexa in Fhem ein Reload zu verpassen und dann verbal nach neuen Geräten suchen zu lassen.

Schon mal ins alexa-fhem Log geschaut?
Bzw. im alexa-fhem Thread gelesen/gepostet?

Einiges von dem was du hier nennst wird dort auch "diskutiert", ich selbst habe das/die Probleme nicht.

Neu ist auch bei alexa-fhem neue Geräte direkt an Alexa/Amazon zu "melden": set alexa add ...

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)

Superposchi

Ja die Funktion habe ich gesehen, funktioniert aber bei mir bisher nicht wirklich. Jedenfalls konnte ich damit noch kein Gerät in Alexa hinzufügen.
Was den Thread angeht, da lese ich auch aber bisher habe ich noch nicht das für mich relevante gefunden. Vielleicht muss ich da mal selbst posten.

Danker schon mal für die bisherige Hilfe. Alleine die Idee bringt mich schon ein ganzes Stück weiter.

KyleK

Wenn du 3 Zustände ,,An, aus, Auto" für eine Lampe abbilden willst,  brauchst du 2 dummies in FHEM.
Beide bneötigen das Attribut ,,alexaName", und bei beiden sollte ,,genericDeviceType" auf switch oder light gesetzt werden.
Manch einem reload von deinem Alexa-Device sollten die dummies in der Alexa App als Geräte auftauchen.

Damit kannst du jetzt Routinen definieren.
Eine davon hört z.b. auf den Satz ,,küchenlicht auto", und triggert den einen dummy für ,,Auto".
Ein DOIF oder Notify reagiert auf den Dummy, und schaltet das Licht entsprechend.
FHEM on Raspberry Pi 3B+
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

MadMax-FHEM

#10
Wozu 2 dummy!?!?

Mit EINEM dummy kann ich so viele Routinen "bedienen", wie es Dimm-Werte gibt!

Also 98, wenn man 0 (aus) und 100 (ein) mal weglässt...

Wie der dummy aussehen kann: siehe mein RawDef weiter oben...
https://forum.fhem.de/index.php?topic=137305.msg1305406#msg1305406

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)

KyleK

Und wie bildest du mit dem einen dummy den ,,Auto"-Usecase vom OP ab?
FHEM on Raspberry Pi 3B+
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

TomLee

#12
ZitatUnd wie bildest du mit dem einen dummy den ,,Auto"-Usecase vom OP ab?

Hallo,

hatte mal angefangen mir einen Routinen-dummy zu basteln der ein Reading zur aufgerufenen Routine und dem ausgeführten fhem-Befehl hat und ohne notify auskommt. Nach der Erkenntnis dass das ganze Konstrukt schwer wartbar ist, hab ich aber bis heute die Lust verloren mich damit weiter zu beschäftigen bzw. weiter zu optimieren.

So konnte man aber den jeweiligen Usecase darstellen:


defmod du_alexa_routinen dummy
attr du_alexa_routinen userattr egsaugerpause newspamphonebookentry printshoppinglist alexarestart countgarbage delcountgarbage
attr du_alexa_routinen alexaName routinen
attr du_alexa_routinen alexarestart set alexa restart
attr du_alexa_routinen comment {system("lpr -P HL-2035 -o media=Custom.95x138mm /opt/fhem/einkaufsliste.txt")},{my @array = split(",",ReadingsVal("Echo","list_SHOPPING_ITEM",""));; foreach my $sk (@array) {fhem ("set Echo item_shopping_delete $sk")}}
attr du_alexa_routinen countgarbage {  my $val = "cal_Abfallkalender";;;; my $val1 = (ReadingsVal("$val","nextWaste","0"));;;; $val1 = "Leerungen_"."$val1";;;; my $val2 =(ReadingsVal("$val","$val1","0")+1);;;; fhem("setreading $val $val1 $val2")}
attr du_alexa_routinen delcountgarbage deletereading cal_Abfallkalender Leerungen_Restabfall/Wertstoffe
attr du_alexa_routinen egsaugerpause set di_test on
attr du_alexa_routinen newspamphonebookentry {fhem("newspamphonebookentry 1 ".'Spam'.int(rand(999)).' '.ReadingsNum('cm_bla','external_number',-1));;;;}
attr du_alexa_routinen printshoppinglist {system("lpr -P HL-2035 -o media=Custom.95x138mm /opt/fhem/einkaufsliste.txt")}
attr du_alexa_routinen readingList pct
attr du_alexa_routinen room Sprachsteuerung
attr du_alexa_routinen setList pct:slider,1,1,100
attr du_alexa_routinen stateFormat routine
attr du_alexa_routinen userReadings cmnd:pct.* {\
my @usrattr = split(' ',AttrVal($name,'userattr','nA'));;\
my $i = 1;;\
my %pct2cmnd = map {$i++ => $_} @usrattr;;\
my $cmnd = $pct2cmnd{ReadingsNum($name,'pct',0)};;\
return if !$cmnd;;\
my $w=AttrVal($name,$cmnd,'nA');;\
fhem("$w");;\
return $w;;\
},\
routine:pct.* {\
my @usrattr = split(' ',AttrVal($name,'userattr','nA'));;\
my $i = 1;;\
my %pct2cmnd = map {$i++ => $_} @usrattr;;\
return $pct2cmnd{ReadingsNum($name,'pct',0)};;\
}
attr du_alexa_routinen widgetOverride userattr:textField-long

setstate du_alexa_routinen 4
setstate du_alexa_routinen 2024-03-16 18:10:26 cmnd set alexa restart
setstate du_alexa_routinen 2024-03-16 18:10:26 pct 4
setstate du_alexa_routinen 2024-03-16 18:10:26 routine alexarestart



Ganz simpel einen "gemappten" Status in einem weiteren Reading darzustellen ginge bspw. unter Zuhilfenahme einer "Hash-Liste", die dem dim-Wert einen Wert zuordnet (bspw. den Routinename) und diesen Wert dann in einem userReadings zurückgibt. Ist aber auch Arbeit wenn man alle 100 Möglichkeiten ausreizt.

Thomas

MadMax-FHEM

Zitat von: KyleK am 16 März 2024, 17:32:04Und wie bildest du mit dem einen dummy den ,,Auto"-Usecase vom OP ab?

Ganz einfach:

Routine: Alexa schalte irgendwas auf Automatik
Am Ende dann eben dummy auf dim 3 (oder auch anderer Wert, es gibt ja 100)

Für ein/aus dann entweder auch je eine eigene Routine und dann z.B. dim 1 und dim 2
Oder halt tatsächlich ein/aus des Gerätes nehmen...

Fertig.

Ich nutze den EINEN dummy aktuell für ca. 12 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)

KyleK

Ah, du ,,mißbrauchst" die dim-Werte als Parameter um verschiedene Aktionen auszuführen. Clever.
Das war mir aus deinem ursprünglichen Post nicht klar geworden.
FHEM on Raspberry Pi 3B+
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen