Amazon Echo Remote Control

Moin,
In IPS eine Szene einrichten wo Du dann den Text ausgibst. In Alexa eine Routine einrichten mit dem Satz „wie lange braucht die Wachmaschine noch“ und damit dann die Szene auslösen. Ich würde eher versuchen „Alexa Waschmaschine“ oder so denn ich glaube nicht das sie Wert auf Konversation legt.

Ralf

1 „Gefällt mir“

Cool, danke Dir!
Cheers Seppm

Wie meinst du das genau mit Szene erstellen?

Gruß
Stephen

Hi,
in der Kern-Instanz von IPS gibt es Amazon Alexa, für den IPS Skill, und da eine Szene, z.B. Test, erstellen wobei damit ein Script gestartet werden kann. Von der Alexa App kannst Du jetzt die Szene auswählen und dann wird das Script ausgeführt.

Ralf

du meinst ein PHP Script?
Da wären wir beim nächsten Thema,…
Das ist nicht so wirklich meine Stärke PHP,…

Gruß
Stephen

Hi,
alles halb so wild.

Beispiel Verbrauch einer Waschmaschine.

Erzeuge ein Script:

<?php
$verbrauch = GetValue(47283/* Variable mit Verbrauch der Waschmaschine*/);
$text = "Meine Wachmaschine hat " . strval($verbrauch) . " kWh verbraucht"; 
ECHOREMOTE_TextToSpeech(18343/* Instanz-ID eines Dots/Echos*/, $text);
?>

Lege in Amazon Alexa Kern-Instanz eine Szene Waschmaschine an und zeige auf dieses Schript.

Erstelle eine Alexa-Routine in der Alexa-App mit Spracheerkennung von „Was hat meine Waschmaschine verbraucht“ und starte dann die Szene Waschmaschine. Statt Verbrauchsvariable kannst Du für dieses Beispiel jeden Wert nehmen den Du irgendwo hast. Ist ja nur ein Beispiel.

Ralf

Hey Ralf,

Danke schon mal, bekommt man es auch irgendwie hin, dass nur der „gefragte“ Echo antwortet?
Überall ist ein bissle blöd, und nur bei einem bestimmten is auch fad.

Gruß
Stephen

Moin Stephen,
jau geht.

Im Script die letzte Aktivität abfragen dort ist auch der von dir vergebene Namen des Dots/Echos drin.

$verbrauch = GetValue(47283/* Variable mit Verbrauch der Waschmaschine*/);
$text = "Meine Wachmaschine hat " . strval($verbrauch) . " kWh verbraucht"; 

$activity = ECHOIO_GetLastActivity(17337);
if ($activity == NULL) return;
$echo = $activity["deviceName"];
$utterance = $activity["utterance"];

if (strpos($echo, 'Teil vom Namen Echo1', 0) !== false){
    ECHOREMOTE_TextToSpeech(Instanz-ID von Echo1, $text);
}
if (strpos($echo, 'Teil vom Namen Echo2', 0) !== false){
    ECHOREMOTE_TextToSpeech(Instanz-ID von Echo2, $text);
}
if (strpos($echo, 'Teil vom Namen Echo3', 0) !== false){
    ECHOREMOTE_TextToSpeech(Instanz-ID von Echo3, $text);
}

Ich habe es so gelöst weil sich bei mir Teile des Namens manchmal ändern. Eleganter wäre

switch ($name){
    case "Kompletter Name Echo1":
        ECHOREMOTE_TextToSpeech(Instanz-ID von Echo1, $text);
        break;
    case "Kompletter Name Echo2":
        ECHOREMOTE_TextToSpeech(Instanz-ID von Echo2, $text);
        break;
    case "Kompletter Name Echo3":
        ECHOREMOTE_TextToSpeech(Instanz-ID von Echo3, $text);
        break;
}

Eventuell muss man vor ECHOIO_GetLastActivity eine kleine Pause einbauen weil es schon ein wenig dauern kann bis die Informationen aktualisiert werden.

Ralf

1 „Gefällt mir“

Hey Ralf,

Werde ich mir heute Abend mal zu Gemüte führen,…
Herzlichen Dank einstweilen.

Gruß
Stephen

Vielleicht sollte ich im GetLastActivity Array auch die Instanz ID des Gerätes (sofern in IPS vorhanden) übergeben - das sollte das Handling doch stark vereinfachen.

3 „Gefällt mir“

Neue Version auf dem BETA-Kanal (Änderungen zur vorherigen Beta fett markiert):

Version 2.5 BETA (2024-03-18)

  • New: Variablen zum De-/Aktivieren der Wecker
  • New: neue DeviceTypes hinzugefügt
  • New: GetLastActivity liefert auch die InstanzID des Gerätes im Array zurück
1 „Gefällt mir“

Funktioniert und für gut befunden.

Hat hier jemand mal nen Screenshot wo er die ID mit ausspuckt? Bin auch auf Beta aber irgendwie sehe🙈 ich nix.

Gruß
Stephen

Hi,
start mal:

$activity = ECHOIO_GetLastActivity(17337);
var_dump($activity);

und dann hier:

array(13) {
...
  ["instanceID"]=>
  int(27718)
}

Ralf

Hi,
ID ist auf jeden Fall hilfreich und auch vielleicht nicht in jedem Anwendungsfall.

Danke Ralf

Es macht meinen Code etwas sauberer und übersichtlicher.

Super, vielen Dank @hirschbrat ! Erspart ein zusätzliches Skript :slight_smile:

@sstaudt2 was du suchst (es soll stets der angesprochene Echo antworten) löst du dann so wie in diesem Beispiel:

$Echo_TTS = ECHOIO_GetLastActivity (46218) ['instanceID'];        // Bei ECHOIO_GetLastActivity die ID der AmazonEchoIO Instanz (unter Splitter Instanzen) eintragen!
$TempCarport = round (GetValue (53114),1);


if ($TempCarport < "5.0")
{
ECHOREMOTE_TextToSpeech ($Echo_TTS,"'<voice name='Vicki'>Es ist kalt draußen, gerade mal $TempCarport Grad! Setz ne Mütze auf!</voice>'");
}

....

VG Mik

Auf dem BETA-Kanal gibt es eine neue Version:

Neu: EchoBot Instanz

Funktion: Wenn ein Sprachbefehl (dieser muss als Auslöser in einer Alexa-Routine definiert werden) von einem Echo-Gerät empfangen wurde, können folgende Aktionen ausgeführt werden:

  • Text-to-speech Antwort auf dem angesprochenen Echo-Gerät ausgeben
  • Skript in IP-Symcon ausführen

Bitte Dokumentation zur Einrichtung beachten: EchoBot Dokumentation

Beispiel:

1 „Gefällt mir“

Moin,

ich bekomme es nicht hin wie in der gitHub Anleitung beschrieben den
Refresh-Token angezeigt zu bekommen.
weder unter MacOS noch unter Windows.

In der Anleitung steht man soll „http://localhost:8080/“ öffnet und
in dem Download „http://127.0.0.1:8080/

Bei localhost soll ich die Alexa-App installieren und den QR scannen etc.
Das geht garnicht bei mir!

Bei „127.0.0.1“ kann ich mich einloggen bekomme nur dann die Fehlermeldung
„SORRY we couldn’t find that page“ und einen Hund angezeigt!?
Auf beiden Betriebssystemen. und im cli wird nichts angezeigt!
Was mache ich falsch?

Habe auf jeden System den aktuellen cli (Stand 26.11.2023) von gitHub heruntergeladen.

@Fonzo Oder kannst nur du da helfen?

Danke und Gruß
Carsten

Hatte ich auch öfter bis es dann Plötz am Browser ging,…
Also nicht qr scannen unter mac, da wollte er auch immer die App öffnen,…
Über Safari ging es dann sofort und im Terminal hat er mir den Token angezeigt