Alexa Remote Ausgabe auf letzten Gerät

Guten Abend zusammen,

ich habe es bis jetzt geschafft, diverse Szenen bzw. Scripte durch Alexa ausführen zu lassen.
Die Sprachausgabe via ECHOREMOTE_TextToSpeech(38067, $text); klappt auch.
Allerdings würde ich gerne den die Antwort an das Gerät senden, von dem die Anfrage kam.
das wollte ich mit dem „letzten Gerät“ machen, komme aber nicht weiter.

ECHOIO_GetLastDevice(14435); habe ich gefunden, aber ich weiss nicht, wie ich das in der Ausgabe implementiert bekomme.

könnte mir da jemand zufällig einen Code-Schnipsel zur Verfügung stellen ?

Das geht recht einfach.
image
Unter den IO Instanzen hast du eine Variable „letztes Gerät“. Das korrespondiert mit dem Profil „EchoRemote.LastDevice“
image
Die Auswertung könnte dann so aussehen

ips_sleep(getvalue(42758));/*Wartezeit damit auch wirklich der letzte Echo als zuletzt aktiv markiert wird*/
$ZimmerEcho=0;
$ZimmerEchoText=0;
[$ZimmerEcho,$ZimmerEchoText]=ECHO_Nr_T2Speech();
switch ($ZimmerEcho){
    case 4:
            RequestAction(55433, true);
            break;
    case 8:
            RequestAction(49675, true);
            RequestAction(55723, true);
            break;
    case 10:
            RequestAction(55433, true);
            break;
    case 11:
            RequestAction(59828, true);
            RequestAction(16942, true);
            break;
    case 12:
            RequestAction(58305, true);
            break;            
    default: 
            ECHOREMOTE_TextToSpeech($ZimmerEchoText,"Hier gibt es kein Licht!");

Die Funktion „ECHO_Nr_T2Speech()“ hab ich mir selber gemacht.

//liefert TexttoSpeech(Instanz) und interne ID vom letzten angesprochenen Echo
function ECHO_Nr_T2Speech()
{
    switch (ECHOIO_GetLastDevice(26201/*AmazonEchoIO (AmazonEchoConfigurator)*/)["name"]){
        case "Badezimmer":
                $EchoID=3;
                $TexttoSpeech=46676;
                break;
        case "Schlafzimmer":
                $EchoID=4;
                $TexttoSpeech=20982;
                break;
        case "Kinderzimmer":
                $EchoID=7;
                $TexttoSpeech=25372;
                break;
        case "Garten":
                $EchoID=8;
                $TexttoSpeech=42838;
                break;
        case "Schlafzimmer2":
                $EchoID=10;
                $TexttoSpeech=39893;
                break;
        case "Wohnzimmer":
                $EchoID=11;
                $TexttoSpeech=22576;
                break;
        case "Keller":
                $EchoID=12;
                $TexttoSpeech=57815;
                break;                
    }
    return [$EchoID,$TexttoSpeech];
}

Guten Abend Helmut,

vielen Dank für die Überlassung Deiner Scripte. Ich habe da heute mal eine Weile mit „rumgeschnipselt“
und habe das nun auch testweise laufen :slight_smile:

Immer wieder schön, wenn etwas mit zusammenkopieren und anpassen klappt, allerdings versuche ich das auch zu verstehen.

Wie ich Deine Lösung nun interpretiert habe, liest Du den Text der aus dem Profil aus und nicht den Integer Wert
Gibt es hierfür einen Grund ?

Danach ermittelst Du mit der Funktion die Nr vom letzten Gerät (EchoID) und die ID für die Sprachausgabe $TexttoSpeech).

wofür wird die $EchoID bei Dir benötigt ?

Vielen lieben Dank vorab

Gute Frage :smiley: Ich weiß nicht mehr zu 100% was ich mir damals gedacht habe. Im Grunde brauchst du es nicht. Theoretisch könnte es sein, dass ich einen Echo z.b. im Wohnzimmer tausche. Dann heißt der neue Wohnzimmer, aber ändern müsste ich trotzdem viel. Die ID verwende ich, wie du im ersten Skript siehts, beim switch. Man könnte aber auch den eigentlichen Namen des Echos im switch verwenden. Die InstanzenID brauchst du auf jeden Fall, weil du ja die Sprachausgabe machen möchtest.
Ich glaube meine Überlegungen rühren daher, dass sie Variable „letztes Gerät“ unter dem AmazonEchoIO erst später dazu gekommen ist. Mit dem Vorhandensein dieser Variable wird viele einfacher.

function ECHO_Nr_T2Speech()
{
    $EchoID=getvalue(16019/*ID von "letztes Gerät"*/);
    switch ($EchoID){
        case 3:
                $TexttoSpeech=46676;
                break;
        case 4:
                $TexttoSpeech=20982;
                break;
        case 7:
                $TexttoSpeech=25372;
                break;
        case 8:
                $TexttoSpeech=42838;
                break;
        case 10:
                $TexttoSpeech=39893;
                break;
        case 11:
                $TexttoSpeech=22576;
                break;
        case 12:
                $TexttoSpeech=57815;
                break;                
    }
    return [$EchoID,$TexttoSpeech];
}

Ich hab die Funktion eben etwas umgebaut. Geht auch schneller weil die ECHOIO_GetLastDevice Funktion langsamer ist.

Was ich noch sagen möchte ist, dass ich diese Funktion des zuletzt angesprochenen Echos ursprünglich nicht für die Textausgabe verwendet habe. Ich wollte einfach bestimmt gleichartige Geräte im jeweiligen Raum immer mit der selben Phrase schalten.
Konkret ging es um die Fernseher. Einer im Wohnzimmer, Kinderzimmer, Schlafzimmer und im Keller. Jeder hängt an einer schaltbaren Steckdose die aber alle unterschiedliche Namen haben müssen. Jetzt müsste ich in jedem Raum etwas anderes sagen um den Fernseher einzuschalten. Das ist mühsam und das merkt sich irgendwann keiner mehr. Mit der Möglichkeit zu wissen, welcher Echo zuletzt angesprochen wurde ist das aber einfach möglich. Man definiert in IPS eine schaltbare Szene. In meinem Fall „Fernseher“. Diese Szene schaltet über ein Skript welches weiß, von wo aus die Szene aktiviert oder deaktiviert wurde. Somit kann ich im Skript die entsprechenden Schaltsteckdosen ein- bzw. ausschalten. Ich sage also überall „Fernseher ein“ und es schaltet sich der Fernseher im Raum ein. Dieses System verwende ich im Momemt für „Licht“, „Lampe“ (sind Deckenfluter) und auch um die Raumtemperatur auf einen bestimmten Wert zu ändern. All das funktioniert damit sehr gut.

vielen Dank für Deine ausführliche Antwort! Dann war ich ja auf dem richtigen Weg :slight_smile:
Mit den verschiedenen Aktionen je nach Echo hatte ich in Deinem Skript auch schon erkannt und finde das eine sehr gute und praktikable Variante. Da werde ich dann auch noch mal ansetzen um das alles etwas benutzerfreundlicher zu gestalten …

Allerdings stelle ich bei mehreren Varianten fest, das Alexa so manche Sachen einfach nicht mag.
z.B.
Temperatur Wohnzimmer geht immer
Wie ist die Temperatur im Wohnzimmer geht immer
Wie ist die Temperatur des Wohnzimmers geht meistens
Temperatur Whirlpool geht meistens

Wie ist die Temperatur des Whirlpools geht nie
Wie ist die Temperatur Whirlpool möchte er einen Skill installieren
Warmasserspeicher, Brauchwasserspeicher geht gar nicht

Temperatur Duschwasser geht nicht
Status Duschwasser geht nicht
Wie ist die Duschwassertemperatur geht manchmal

sehr verwirrend …

Ja, das mit den Phrasen und Abfragen ist so eine Sache. Darum hab ich eine Szene „Status“, die mir die Wichtigsten Werte vorliest :wink: