Amazon Echo Remote Control

(War einige Tage außer Haus, daher erst jetzt die Rückmeldung).
In der Kerninstanz Amazon Alexa ist unter Szene „TriggerEchoBot“ vermerkt "Führe erweiterte Instanzfunktion aus „Trigger EchoBot“, delay 0, „Speichere Rückgabewert …“ disabled.
Die Szene ist in Alexa hinzugefügt und mit dem Entsprechenden Satz verknüpft.

Im Baum existiert dann eine Echo Bot Instanz. Die Routinennamen sind alle hinterlegt, und ich kann die passende Auswählen.

Ausgewählt als Aktion ist „Text-to-speech Antwort (erweitert)“. Darin baue ich mir in einem String zusammen. Wenn ich den String in einem Skript einbaue und mit Echoremote_TextoSpeech auf einem Gerät ausgebe, funktioniert das auch.

Wenn ich über die „Teste Aktion“ versuche, bekomme ich den angezeigten Fehler. Wenn ich es über Alexa selbst versuche, sehe ich im Log „Kann daten nicht zur Instanz weiterleiten“.

Ok, es geht um den EchoBot.
Werden die Variablen der letzten Aktion (unter EchoIO) korrekt aktualisiert, wenn du die Routine mittels Sprachbefehl startest?

Kannst du mal das Skript zeigen, dass du in der EchoBot Instanz hinterlegt hast?

Unter Echo IO (Splitterinstanzen) habe ich korrekt:

  • Letzte Aktivität (das Gerät das ich anspreche)
  • Zeit - (ist korreket)
  • Befehl - Die Routine bzw. Befehl den ich ausführe
  • Antwort = Leer
  • Intent = InvokeRoutineIntent.

Das Skript:

?php
// Note:
// - always return the text message as string!
// - information about the last activity is available in $_IPS
$Batterieladung = GetValue(35729);
$Batterieentladung = GetValue(23029);
$Einspeisung = GetValue(59470);
$Bezug = GetValue(32285);

$aktuelleErzeugung = "Es werden aktuell " . GetValue(24329) . " Watt Strom erzeugt. ";
$aktuellerStromverbrauch = "Verbraucht werden " . GetValue(11739) . " Watt. ";

$Ladestand = "Der Ladezustand beträgt " . GetValue(31743) . " Prozent. ";

if ($Batterieladung >= 0) {
$Ladung = "Sie wird mit " . $Batterieladung . " Watt geladen. ";
} else {
$Ladung = "Es werden " . $Batterieentladung . " Watt entnommen. ";
}

if ($Einspeisung > 0 ) {
$Netzeinspeisung = "Es werden " . $Einspeisung . " Watt eingespeist. ";
} else {
$Netzeinspeisung = „“;
}

if ($Bezug > 0 ) {
$Netzbezug = "Es werden " . $Bezug . " Watt aus dem Netz geholt. ";
} else {
$Netzbezug = „“;
}

if (GetValue(50324) == true ) {
$Klimaanlage = "Und die Klimaanlage läuft. ";
} else {
$Klimaanlage = „“;
}

$echoDot_IDSchlafzimmer = 40521;
$echoDot_IDKueche = 48972;

$text = $aktuelleErzeugung . $aktuellerStromverbrauch . $Ladestand . $Ladung . $Netzeinspeisung. $Netzbezug. $Klimaanlage;

return $text;

ok, das auf den ersten Blick erstmal gut aus.
In der EchoBot Instanz kann man ja auswählen auf welchem Gerät die Test-Aktion ausgeführt werden soll. Kommt der Fehler auch bei anderen Geräten?

Ja, ich bin mal querbeet durch die Geräte gegangen (von einem alten Dot2 über Dot3, Show5, Show8 usw.. Der Fehler ist überall gleich.

Ich kann diesen Fehler leider nicht nachstellen. Du hast ja geschrieben, dass es funktioniert, wenn du den String in einem eigenen Skript zusammenbaust und per direktem Aufruf von EchoRemote_TextToSpeech abspielen lässt.

Kannst du im EchoBot als Aktion mal „Skript ausführen“ einstellen und dann dein Skript dort auswählen und damit mal testen ob es geht?

Sofern das funktioniert, ändere in deinem Skript den TTS Befehl (der ja eine fixe InstanzID enthält) in:

ECHOREMOTE_TextToSpeech($_IPS['instanceID'], $text);

Damit sollte dann das angesprochene Gertä (bzw. bei „Teste Aktion“ das ausgewählte Gerät) antworten.

Mit der beschriebenen Umstellung hat es dann funktioniert. Danke!

@hirschbrat sag mal, die Echos haben ja einen Temperatursensor (jedenfalls ist es mir heute aufgefallen weil noch in Fahrenheit war) - kann man die über AlexaSmartHome Device abgreifen? Da könnte ich mir auch vorstellen das zu pollen :slight_smile: Muss ja nicht im sekunden/minuten Takt sein.

Ja, du kannst eine weitere Instanz des Echos als AlexaSmartHome Device (aus dem AlexaSmartHome Konfigurator - nicht aus dem Echo Konfigurator) anlegen, dann wird automatisch auch eine Temperaturvariable angelegt, falls vorhanden.
Abfrageintervall ist minimal 15 min.

1 „Gefällt mir“

Danke, ich habe ja 2 Accounts zu laufen. Beide funktionieren bei den Echos. Der Konfi vom 1.Account (hatte ich schon vor längerem installiert) bringt auch alle Geräte, aber der neue vom 2.Account bleibt leer - muss man da noch was machen?

Hängt der Konfiguratior unter dem richtigen EchoIO?
Passiert das nur beim Smarthome konfig oder auch beim Echo Konfig?

Ja und nur beim SmartHome Konfi

Kannst du mal den Debug des besagten Konfigurator öffnen und danach im Konfigurator auf aktualisieren klicken und mir sagen, was da zu sehen ist

die 2 Zeilen:

Reicht das?

Kann ich noch irgendwas tun um zu helfen?

Mangels zweitem Account konnte ich das noch nicht nachstellen. Der Screenshot sieht erstmal ok aus. DU müsstest mir doch noch den ganzen Debug zukommen lassen, damit ich nachsehen kann, ob da Geräte drin sind.

Du kannst danach auch mal probieren einen Konfigurator zu löschen und den vebleibenden nacheinander jeweils an den anderen EchoIO zu hängen und gucken ob, das Verhalten so bleibt.

Habe gerade einen neuen Echo-Studio installiert. Kann es sein dass das Modul den noch nicht kennt? Hat den Device-Typ A2O2CEO9STBQID und erscheint in der Konfigurator-Liste bei Device-Typ als unknown: A2O2CEO9STBQID. Ich kann das Gerät ganz normal einbinden und es scheint auf den ersten Blick zu funktionieren. Hat das seitens der Funktionen irgendwelche Konsequenzen oder Einschränkungen?