Alexa soll antworten die angesprochen wird

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02
Answers: 0

Alexa soll antworten die angesprochen wird

Beitrag von tommesd »

Hallo zusammen,
ich nutze mehrere HmIP Fenstergriffsensoren in unserem Haus. Ich habe mit freundlicher Unterstützung hier im Forum mit folgender Rule hinbekommen, dass mir offene Türen bzw Fenster über einen Amazon Echo angesagt werden.

Code: Alles auswählen

rule "Welche Türen sind offen"
when
    Item Tuerenabfrage received command
then
    val OffeneTueren = Tueren.members.filter[ i | i.state.toString == "OPEN" ].map[ label ].reduce[ s, label | s + ", " + label ]
      
    if(Tueren.state.toString == "OPEN" )   {
        EchoBuro_Sprich.sendCommand("Folgende Türen sind geöffnet. " + OffeneTueren)
    }
    else
        {
            EchoBuro_Sprich.sendCommand("Alle Türen sind zu")
        }
end
Das funktioniert wunderbar, wenn ich den Befehl von EchoBuro absende.
Kann man diese Rule so erweitern, dass sie jeweils von der Alexa beantwortet wird, von der aus der Befehl entgegengenommen wird?
Gruß
Thomas
Openhabian 4.0.4

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Alexa soll antworten die angesprochen wird

Beitrag von udo1toni »

Du benötigst für jede Alexa ein eigenes Item, über das der Befehl ankommt. Ich habe selbst kein Alexa, deshalb die Frage: geht das?
Falls ja, packst Du einfach all diese Items in eine Gruppe. Allerdings musst Du dafür sorgen, dass am NAmen des Items auszumachen ist, um welche Alexa es sich handelt. Weiterhin packst Du die Items, an die Du den Befehl zum sprechen schickst, in eine zweite Gruppe, nennen wir sie hier mal gFrage und gSprich. Wie gesagt musst Du darauf achten, dass die Items passend benannt sind, z.B. EchoBuro_Frage und EchoBuro_Sprich.

Nun lässt Du die Rule auf Member of gFrage received command triggern.
Innerhalb der Rule gibt es nun die implizite Variable triggeringItem, und Du kannst über triggeringItem.name erfahren, welche Alexa gefragt wurde.

Code: Alles auswählen

val String strRaum = triggeringItem.name.split("_").get(0) // der erste Teil des Itemnamens
val iAlexa = gSprich.members.filter[i|i.name.split("_").get(0) == strRaum].head // das erste Item der Gruppe, welches zum gleichen Raum gehört
iAlexa.sendCommand(was auch immer)
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02
Answers: 0

Re: Alexa soll antworten die angesprochen wird

Beitrag von tommesd »

Super danke. Es gibt ein Iteam EchoBuro_LetzterSprachbefehl. Ich versuche es heute Abend mal zu bauen.
Openhabian 4.0.4

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Alexa soll antworten die angesprochen wird

Beitrag von udo1toni »

openHAB muss halt irgendwie erkennen können, welche Alexa es ansprechen soll :)
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02
Answers: 0

Re: Alexa soll antworten die angesprochen wird

Beitrag von tommesd »

Jetzt habe ich doch noch ein Problem. In meiner rule ist das triggering item ein Dummy Schalter, den ich über eine Alexa Routine anspreche. Wie mache ich das dann mit dem lastvoicecommand aus der Gruppe?
Openhabian 4.0.4

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Alexa soll antworten die angesprochen wird

Beitrag von udo1toni »

Ja, das musst Du dann anders lösen. openHAB kann nicht hellsehen. Es braucht irgendwoher die Information, welche Alexa angesprochen wurde. Wie wird denn das Dummy Item ausgelöst?
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02
Answers: 0

Re: Alexa soll antworten die angesprochen wird

Beitrag von tommesd »

wie im Anfangspost geschrieben ist es ein Switch, den ich über Alexa auf ON stelle. Kann man nicht irgendwie abfragen, welche Alexa das letzte Kommando erhalten hat und die soll dann auch die Antwort ausgeben?
Openhabian 4.0.4

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Alexa soll antworten die angesprochen wird

Beitrag von sihui »

tommesd hat geschrieben: 16. Feb 2022 22:36 Kann man nicht irgendwie abfragen, welche Alexa das letzte Kommando erhalten hat und die soll dann auch die Antwort ausgeben?
Dein Problem wird unter "room awareness" behandelt und die Lösung findest du hier, ist aber leider auch nur ein Workaround:

https://community.openhab.org/t/alexa-v ... a-oh/80480
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02
Answers: 0

Re: Alexa soll antworten die angesprochen wird

Beitrag von tommesd »

Ich habe es jetzt so gelöst und es funktioniert. Ihr könnte ja mal schauen ob es einen Haken gibt.

Code: Alles auswählen

rule "Welche Türen sind offen"
when
    Member of AlleEchoFrag changed from "alexa" to "welche türen sind offen"
then
    val OffeneTueren = Tueren.members.filter[ i | i.state.toString == "OPEN" ].map[ label ].reduce[ s, label | s + ", " + label ]
    val String strRaum = triggeringItem.name.split("_").get(0) // der erste Teil des Itemnamens
    val iAlexa = AlleEchoAntworten.members.filter[i|i.name.split("_").get(0) == strRaum].head // das erste Item der Gruppe, welches zum gleichen Raum gehört
//    iAlexa.sendCommand(was auch immer)
      
    if(Tueren.state.toString == "OPEN" )   {
        iAlexa.sendCommand("Folgende Türen sind geöffnet. " + OffeneTueren)
    }
    else
        {
            iAlexa.sendCommand("Alle Türen sind zu")
        }
end
Danke für die Hilfe
Openhabian 4.0.4

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02
Answers: 0

Re: Alexa soll antworten die angesprochen wird

Beitrag von tommesd »

Anbei meine Rule für die Fenster, unterteilt nach offenen und gekippten Fenstern. Wenn mind ein Fenster offen oder gekippt ist funktioniert es, aber wenn alle zu sind nicht. Im Log hat er ein Problem mit dem UND in der letzten IF Abfrage.

Code: Alles auswählen

rule "Welche Fenster sind offen"
when
        Member of AlleEchoFrag changed from "alexa" to "fensterabfrage"
then
    val OffeneFenster = Fenster.members.filter[ i | i.state.toString == "OPEN" ].map[ label ].reduce[ s, label | s + ", " + label ]
    val KippFenster = Fenster.members.filter[ i | i.state.toString == "TILTED" ].map[ label ].reduce[ s, label | s + ", " + label ]
    val String strRaum = triggeringItem.name.split("_").get(0) 
    val iAlexa = AlleEchoAntworten.members.filter[i|i.name.split("_").get(0) == strRaum].head
       
if (Fenster.members.filter[ i | i.state.toString == "OPEN" ].size > 0)   
   {iAlexa.sendCommand("Folgende Fenster sind geöffnet. " + OffeneFenster)}
    
if (Fenster.members.filter[ i | i.state.toString == "TILTED" ].size > 0)   
   {iAlexa.sendCommand("Folgende Fenster sind gekippt. " + KippFenster)}        

if (Fenster.members.filter[ i | i.state.toString == "OPEN" ].size = 0 && Fenster.members.filter[ i | i.state.toString == "TILTED" ].size = 0)
   {iAlexa.sendCommand("Alle Fenster sind zu")}

end
Openhabian 4.0.4

Antworten