Echo Dot bei Anruf Pause - Wiedergabe bei Anrufende fortsetzen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
DavGre
Beiträge: 84
Registriert: 11. Mär 2019 15:47
Answers: 0

Echo Dot bei Anruf Pause - Wiedergabe bei Anrufende fortsetzen

Beitrag von DavGre »

Hallo zusammen,

ich habe mir folgende Regel gebastelt, die folgendes macht:
- Echo Dot bei eingehendem Anruf auf Pause stellen, sofern z. B. Musik läuft
- Bei Beendigung des Anrufes die Wiedergabe fortsetzen, aber nur sofern vor dem Anruf Musik lief

Regel siehe unten. Diese funktioniert auch einwandfrei.
Jetzt möchte ich allerdings 2 weitere Echo Dots (Echo_OG_Player + Echo_Flur_EG_Player) in die Regel einfügen, bei denen das gleiche passieren soll.

Wie lässt sich das am besten realisieren?
Ich müsste dann ja zunächst die Echo Dots filtern, die zum Anrufzeitpunkt auf "PLAY" stehen und entsprechende Dummy_Items (2 weitere noch erstellen) auf "ON" setzen, damit ich auf diesen Echo Dots die Wiedergabe später fortsetzen kann. Wichtig ist halt, dass wirklich nur auf den Echo Dots die Wiedergabe fortgesetzt wird, auf denen vorher auch Musik lief. Freue mich über jede Hilfe, da ich mal wieder etwas auf dem Schlauch stehe.

1. Regel:

Code: Alles auswählen

rule "Alexa bei Anruf leise"
when
    Item FRITZBox_Anrufzustand changed to RINGING // bei eingehendem Anruf
then
    if(Echo_WZ_Player.state == PLAY) {
        sendCommand(dummy_anruf_alexa_WZ, ON) // Dummy Item, um die Wiedergabe später fortzusetzen
        	sendCommand(Echo_WZ_Player, PAUSE) // Echo Pause
    }
end
2. Regel

Code: Alles auswählen

rule "Alexa nach Anruf Wiedergabe fortsetzen"
when 
    Item FRITZBox_Anrufzustand changed to IDLE // wenn der eingehende Anruf beendet ist
then 
    if(dummy_anruf_alexa_WZ.state == ON) {
    sendCommand(Echo_WZ_Player, PLAY) // Echo Wohnzimmer Wiedergabe fortsetzen
    }
    sendCommand(dummy_anruf_alexa_WZ, OFF) // Reset Dummy_Item
end 
von udo1toni » 6. Jul 2021 16:59
Also, das Einfachste ist, nur eine Regel zu nutzen, die sich um alle Player kümmert. So:

Code: Alles auswählen

rule "Alexa bei Anruf leise"
when
    Item FRITZBox_Anrufzustand changed // bei eingehendem Anruf
then
    if(newState == “RINGING”) {
        if(Echo_WZ_Player.state == PLAY) {
            dummy_anruf_alexa_WZ.postUpdate(ON) // Dummy Item, um die Wiedergabe später fortzusetzen
            Echo_WZ_Player.sendCommand(PAUSE) // Echo Pause
        }
        if(Echo_2_Player.state == PLAY) {
            dummy_anruf_alexa_2.postUpdate(ON) // Dummy Item, um die Wiedergabe später fortzusetzen
            Echo_2_Player.sendCommand(PAUSE) // Echo Pause
        }
        if(Echo_3_Player.state == PLAY) {
            dummy_anruf_alexa_3.postUpdate(ON) // Dummy Item, um die Wiedergabe später fortzusetzen
            Echo_3_Player.sendCommand(PAUSE) // Echo Pause
        }
    } else if(newState == “IDLE”) {
        if(dummy_anruf_alexa_WZ.state == ON) {
            Echo_WZ_Player.sendCommand(PLAY) // Echo Wohnzimmer Wiedergabe fortsetzen
            dummy_anruf_alexa_WZ.postUpdate(OFF) // Reset Dummy_Item
        }
        if(dummy_anruf_alexa_2.state == ON) {
            Echo_2_Player.sendCommand(PLAY) // Echo Wohnzimmer Wiedergabe fortsetzen
            dummy_anruf_alexa_2.postUpdate(OFF) // Reset Dummy_Item
        }
        if(dummy_anruf_alexa_3.state == ON) {
            Echo_3_Player.sendCommand(PLAY) // Echo Wohnzimmer Wiedergabe fortsetzen
            dummy_anruf_alexa_3.postUpdate(OFF) // Reset Dummy_Item
        }
    }
end
Wobei man den Code auch noch schöne machen kann, wenn man Gruppen nutzt.
Der Punkt ist jedenfalls, dass Du für jeden Player ein eigenes Item brauchst, in dem Du den Zustand vor dem Pausieren festhältst.
Gehe zur vollständigen Antwort

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

Echo Dot bei Anruf Pause - Wiedergabe bei Anrufende fortsetzen

Beitrag von udo1toni »

Also, das Einfachste ist, nur eine Regel zu nutzen, die sich um alle Player kümmert. So:

Code: Alles auswählen

rule "Alexa bei Anruf leise"
when
    Item FRITZBox_Anrufzustand changed // bei eingehendem Anruf
then
    if(newState == “RINGING”) {
        if(Echo_WZ_Player.state == PLAY) {
            dummy_anruf_alexa_WZ.postUpdate(ON) // Dummy Item, um die Wiedergabe später fortzusetzen
            Echo_WZ_Player.sendCommand(PAUSE) // Echo Pause
        }
        if(Echo_2_Player.state == PLAY) {
            dummy_anruf_alexa_2.postUpdate(ON) // Dummy Item, um die Wiedergabe später fortzusetzen
            Echo_2_Player.sendCommand(PAUSE) // Echo Pause
        }
        if(Echo_3_Player.state == PLAY) {
            dummy_anruf_alexa_3.postUpdate(ON) // Dummy Item, um die Wiedergabe später fortzusetzen
            Echo_3_Player.sendCommand(PAUSE) // Echo Pause
        }
    } else if(newState == “IDLE”) {
        if(dummy_anruf_alexa_WZ.state == ON) {
            Echo_WZ_Player.sendCommand(PLAY) // Echo Wohnzimmer Wiedergabe fortsetzen
            dummy_anruf_alexa_WZ.postUpdate(OFF) // Reset Dummy_Item
        }
        if(dummy_anruf_alexa_2.state == ON) {
            Echo_2_Player.sendCommand(PLAY) // Echo Wohnzimmer Wiedergabe fortsetzen
            dummy_anruf_alexa_2.postUpdate(OFF) // Reset Dummy_Item
        }
        if(dummy_anruf_alexa_3.state == ON) {
            Echo_3_Player.sendCommand(PLAY) // Echo Wohnzimmer Wiedergabe fortsetzen
            dummy_anruf_alexa_3.postUpdate(OFF) // Reset Dummy_Item
        }
    }
end
Wobei man den Code auch noch schöne machen kann, wenn man Gruppen nutzt.
Der Punkt ist jedenfalls, dass Du für jeden Player ein eigenes Item brauchst, in dem Du den Zustand vor dem Pausieren festhältst.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

DavGre
Beiträge: 84
Registriert: 11. Mär 2019 15:47
Answers: 0

Re: Echo Dot bei Anruf Pause - Wiedergabe bei Anrufende fortsetzen

Beitrag von DavGre »

Danke dir. Komischerweise zeigt mir die Logdatei bei der Regel dann folgende Fehlermeldung:

Code: Alles auswählen

2021-07-06 17:33:55.375 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'FRITZBox_Anrufzustand' changed from IDLE to RINGING
2021-07-06 17:33:55.380 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'fritzbox-1' failed: The name 'RINGING' cannot be resolved to an item or type; line 8, column 20, length 7 in fritzbox
Irgendwie scheint er nichts mit der Line "if(newState == RINGING)" anfangen zu können?

Edit: Problem gelöst. Das RINGING musste in 'RINGING' umgewandelt werden. Jetzt klappt es!

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

Re: Echo Dot bei Anruf Pause - Wiedergabe bei Anrufende fortsetzen

Beitrag von udo1toni »

Ja, wenn das Item ein String Item ist, muss man grundsätzlich mit Anführungszeichen arbeiten.

Der Trigger der Rule war ebenfalls verkehrt…


Gesendet von iPad mit Tapatalk
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten