Inhaltsverzeichnis
Voraussetzung
Einrichtung
Installation des Alexa2-Adapters
Zuerst musst du den Alexa2-Adapter installieren. Gehe dafür unter Adapter und suche nach Alexa
. Installiere eine Adapter-Instanz und wechsle dann in die Einstellungen des Adapters. Um dich mit deinen Alexa-Geräten zu verbinden, musst du den Adapter mit deinem Amazon-Konto verbinden:
![ioBroker: Sprachausgabe mit Alexa und eigene Kommandos programmieren 2 Wie du mit ioBroker und Blockly Alexa und deine Echo-Devices dazu bringst, von dir definierte Aktionen auszulösen und eigene Antworten auf deine Anfragen zu geben, erkläre ich dir in diesem Artikel.](https://www.machs-smart.de/wp-content/uploads/Bildschirmfoto-2021-09-28-um-09.24.15.png)
Authentifiziere dich mit deinen Amazon-Zugangsdaten und schließe den Tab nach erfolgreicher Anmeldung. Die Adapter-Einstellungen sollten nun so aussehen:
![ioBroker: Sprachausgabe mit Alexa und eigene Kommandos programmieren 3 Wie du mit ioBroker und Blockly Alexa und deine Echo-Devices dazu bringst, von dir definierte Aktionen auszulösen und eigene Antworten auf deine Anfragen zu geben, erkläre ich dir in diesem Artikel.](https://www.machs-smart.de/wp-content/uploads/Bildschirmfoto-2021-09-28-um-09.25.11.png)
Datenpunkt für Anfragen
Wechsle in die Objekte. Dort findest du nun unter alexa2.0.History den Datenpunkt Summary
. Dieser beinhaltet die zuletzt von dir an Alexa gerichtete Anfrage (nur, wenn es keine Standardanfrage wie „Wie viel Uhr ist es?“ ist):
![ioBroker: Sprachausgabe mit Alexa und eigene Kommandos programmieren 4 Wie du mit ioBroker und Blockly Alexa und deine Echo-Devices dazu bringst, von dir definierte Aktionen auszulösen und eigene Antworten auf deine Anfragen zu geben, erkläre ich dir in diesem Artikel.](https://www.machs-smart.de/wp-content/uploads/Bildschirmfoto-2021-09-28-um-09.46.59-1-1024x529.png)
Blockly-Script aufbauen
Anfrage abfangen
Erstelle dir ein neues Blockly-Script und ziehe dir aus dem Bereich Trigger einen neuen Falls Objekt
-Block in den Editor. Für die Objekt ID
am Eingang wählst du den Summary
-Datenpunkt unter alexa2.0.History und stellst den Trigger auf wurde geändert
:
![ioBroker: Sprachausgabe mit Alexa und eigene Kommandos programmieren 5 Wie du mit ioBroker und Blockly Alexa und deine Echo-Devices dazu bringst, von dir definierte Aktionen auszulösen und eigene Antworten auf deine Anfragen zu geben, erkläre ich dir in diesem Artikel.](https://www.machs-smart.de/wp-content/uploads/Bildschirmfoto-2021-09-28-um-09.46.20.png)
Als Nächstes ziehst du einen falls mache
-Block in den Trigger-Block und hängst an den Eingang einen =
-Block aus dem Bereich Mathematik. Diesen stellst du auf größer als
und setzt als Vergleichswert die Zahl 0
ebenfalls aus dem Bereich Mathematik ein:
![ioBroker: Sprachausgabe mit Alexa und eigene Kommandos programmieren 6 Wie du mit ioBroker und Blockly Alexa und deine Echo-Devices dazu bringst, von dir definierte Aktionen auszulösen und eigene Antworten auf deine Anfragen zu geben, erkläre ich dir in diesem Artikel.](https://www.machs-smart.de/wp-content/uploads/Bildschirmfoto-2021-09-28-um-10.41.50-1024x433.png)
Als Vergleichsobjekt nimmst du aus dem Bereich Text einen im Text suche erstes Auftreten
-Block. Lösche die Variable Text
aus dem Block und setzte stattdessen einen Objekt ID
-Block aus dem Bereich Trigger dort ein und stelle diesen auf Wert
:
![ioBroker: Sprachausgabe mit Alexa und eigene Kommandos programmieren 7 Wie du mit ioBroker und Blockly Alexa und deine Echo-Devices dazu bringst, von dir definierte Aktionen auszulösen und eigene Antworten auf deine Anfragen zu geben, erkläre ich dir in diesem Artikel.](https://www.machs-smart.de/wp-content/uploads/Bildschirmfoto-2021-09-28-um-10.48.09-1024x287.png)
Statt abc
schreibst du den Begriff in das Feld, welchen du abfangen und verarbeiten möchtest. Sobald Alexa diesen Begriff empfangen hat, reagiert das Blockly-Script und verarbeitet diesen.
Alexas Antwort unterbinden
Damit Alexa nicht selbstständig auf deine Anfrage antwortet, musst du sie mit folgendem Datenpunkt stoppen, wobei XXX
für die ID deines Echo-Device steht:
alexa2.0.Echo-Devices.XXX.Commands.deviceStop
Nimm dafür aus dem Bereich System den steuere
-Block und ziehe ihn in den mache
-Bereich deines Scripts. Als Object-ID
wählst du den gerade genannten Datenpunkt aus. Für den Steuerbefehl wählst du den wahr
-Block aus dem Bereich Logik:
![ioBroker: Sprachausgabe mit Alexa und eigene Kommandos programmieren 8 Wie du mit ioBroker und Blockly Alexa und deine Echo-Devices dazu bringst, von dir definierte Aktionen auszulösen und eigene Antworten auf deine Anfragen zu geben, erkläre ich dir in diesem Artikel.](https://www.machs-smart.de/wp-content/uploads/Bildschirmfoto-2021-09-28-um-10.55.02-1024x328.png)
Weitere Aktionen hinzufügen
Nun kannst du beliebige Aktionen hinzufügen, zum Beispiel eine Sprachausgabe über dein Echo-Device. Hierzu ist folgender Datenpunkt zuständig, wobei XXX
für die ID deines Echo-Device steht:
alexa2.0.Echo-Devices.XXX.Commands.speak
Dafür ziehst du dir wieder einen steuere
-Block unter den letzten Block und wählst den genannten Datenpunkt aus. Als Steuerbefehl wählst du aus dem Bereich Text einen leeren Textblock und gibst darin deine eigene Antwort ein. Übrigens: die 100;
am Anfang steht für die Lautstärke, in der Alexa antworten soll:
![ioBroker: Sprachausgabe mit Alexa und eigene Kommandos programmieren 9 Wie du mit ioBroker und Blockly Alexa und deine Echo-Devices dazu bringst, von dir definierte Aktionen auszulösen und eigene Antworten auf deine Anfragen zu geben, erkläre ich dir in diesem Artikel.](https://www.machs-smart.de/wp-content/uploads/Bildschirmfoto-2021-09-28-um-10.59.10-1024x368.png)
Fertiges Script
Blockly
<xml xmlns="https://developers.google.com/blockly/xml">
<block type="on_ext" id="l3u_cJZVO=D!E:8cI*SC" x="63" y="13">
<mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
<field name="CONDITION">ne</field>
<field name="ACK_CONDITION"></field>
<value name="OID0">
<shadow type="field_oid" id="K%o09$D|xauyapG7oea0">
<field name="oid">alexa2.0.History.summary</field>
</shadow>
</value>
<statement name="STATEMENT">
<block type="controls_if" id="F^O%L}B]*Uf*Y,X|E:0(">
<value name="IF0">
<block type="logic_compare" id="~]_NNjW,+,aMrOzEz:S6">
<field name="OP">GT</field>
<value name="A">
<block type="text_indexOf" id="HiXs|bgl7Ex;PLDrd!R`">
<field name="END">FIRST</field>
<value name="VALUE">
<block type="on_source" id="`L)_oRF7xz@rmo3zJLbZ">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="FIND">
<shadow type="text" id="8:q#e/+oIQ5Db.kfXPe@">
<field name="TEXT">WORT</field>
</shadow>
</value>
</block>
</value>
<value name="B">
<block type="math_number" id=")}QfeKV!-tZwA)Pje%hD">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="control" id="du-!#j}/BHM,WvmQ8L2=">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">alexa2.0.Echo-Devices.G091EV0810460AUU.Commands.deviceStop</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="logic_boolean" id="O-u8+P]yeEk9k0BaN@z{">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="control" id="IvEQXR@FFr!j`$f30}Jl">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">alexa2.0.Echo-Devices.G091EV0810460AUU.Commands.speak</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="text" id="VC0vdvG:EBy|;tXC.mU0">
<field name="TEXT">100;Eigener Text</field>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</statement>
</block>
</xml>
Javascript
on({id: 'alexa2.0.History.summary', change: "ne"}, async function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if ((obj.state ? obj.state.val : "").indexOf('WORT') + 1 > 0) {
setState("alexa2.0.Echo-Devices.G091EV0810460AUU.Commands.deviceStop"/*deviceStop*/, true);
setState("alexa2.0.Echo-Devices.G091EV0810460AUU.Commands.speak"/*speak*/, '100;Eigener Text');
}
});
28 Kommentare
KommentierenHallo,
gute Anleitung.
Aber wie stelle ich es an, wenn ich irgendeinen echo in der Wohnung fragen möchte ohne für jeden echo ein extra Skript bzw. Abfrage zu basteln?
Unter History SerialNumber steht die ID der Quellalexa und daraus kann man sich den Pfad für die Ziel-Alexa zusammenbasteln.
Quasi wie hier oben beschrieben nur das ich das XXX automatisch durch die Seriennummer ersetze.
https://github.com/Wiesel90/iobroker-pihole-blocky.git
Megacool!
Bei mir macht alexa immer ein nerviges „BIP“ wenn ich „100;“ als Lautstärke eingebe.
Bekommt man dieses Geräusch auch wieder weg?
(kam bei mir irgendwann plötzlich obwohl ich gefühlt nix geändeet hatte)
Danke für die super Erklärung, damit ist es auch für jemanden der nicht so tief in dem Thema ist, super einfach umszusetzten.
Ich habe bei mir nur das Problem, das strotz deviceStop, derEcho immer anfängt zu sagen das er kein gerät gefunden finden kann. Der Schaltbefehl (bei mir aus KNX) wird jedoch ausgeführt.
Wenn ich wie hier eine Textanwort senden lasse, fängt die Alex an und unterbricht dann um die Antwort zu sagen.
Kann man das Antworten Irgendwie schnelle unterdrücken?
Hi Tobias, ich habe das gleiche Problem. Mein Skript läuft. TV geht an, Licht geht an, wenn es draußen dunkel genug ist, Licht wird gedimmt. Das alles, obwohl Alexa antwortet: Das weiß ich leider nicht. Leider wird der Befehl DeviceStop ignoriert und Alexa überspricht wie bei Dir den vorgegebenen Antworttext.
Konntest Du das Problem lösen?
Erstellt in der Alexa App einfach eine Routine die den gleichen Text abfragt, aber fügt keine Aktion hinzu.
Somit sagt Alexa nichts, aber euer Script wird ausgeführt
Sehr coole Idee!
Ich hab mir auf der Basis eine Funktion geschrieben die immer bei dem echo den stop ausführt, der angesprochen wurde. Damit geht es mit mehr als einem Gerät. Leider habe ich auch das Phänomen, dass das abbrechen nicht schnell genug erfolgt. Falls du dafür eine Idee hättest wäre da super!
Bevor ich anfange zu basteln. Wie sieht Dein Script zur Geräteunterscheidung aus? Danke.
Bisher benötige ich das nicht, du musst also selber ran 😉
Guck mal hier: https://imgur.com/a/FEGpUtI
@Lukas: Wie bekomme ich denn bei blockly den roten „setze“ Block zustande?
das skipt funktioniert soweit ganz wunderbar, aber es läuft in endlosschleife. Selbst wenn ich das skript deaktiviere läuft „steuere speak“ weiter.
Anscheinend funktioniert das mit der Lautstärke bei mir nicht.. Wenn ich z.B. „100; Test“ in den DP schreibe liest er zwar nicht die 100, aber die Lautstärke ändert sich nicht
Du könntest die Lautstärke alternativ auch über den Volume-Datenpunkt steuern. Viele Grüße
Hallo zusammen, funktioniert super außer das beschriebene Problem. Alexa antwortet sehr schnell und somit wird der Alexa-eigene Befehl abgespielt dann unterbrochen und dann kommt der individuelle Befehl.
Tja, dann muß man Alexa wohl vorher „beschäftigen“. Nimm Dir die Alexa App auf dem Handy,
Mehr / Routinen
Gib dem Kind irgendwas mit dem Namen, was oben unter ABC genommen wurde.
Temperatur Kühlschrank
z.B.
Aktion „Benutzerdefiniert“
somit steht da
Alexa, Temperatur Kühlschrank
Dann die Aktion hinzufügen
Kühlschrank einschalten
z.B. – ist zwar unsinnig, aber so soll es sein – während Alexa drüber nachdenkt, wird es bereits abgebrochen
über IObroker 😉
Hallo, hat denn jemand schon eine Lösung zu dem Problem, obwohl man deviceStop hat eine Fehlermeldung bekommt? Das ausführen des Scripts funktioniert einwandfrei, nur diese Fehlermeldung nervt.
Gruß René
Super, vielen Dank für die Anleitung!
Gerade wie von Siggi beschrieben in der Alexa App eine Routine mit dem selben Auslösewort hinzugefügt. Klappt jetzt prima
Moin!
Klasse Tutorials, habe die gerade erst entdeckt. (Asche über mein Haupt!)
Aber ich verzweifle gerade: in meinen Objekten gibt es unter alexa2.1.EchoDevices.xxx. kein History!
Alarm, Command, Info. … aber kein History und damit auch kein summary.
Was mache ich falsch?
Gruß, Uwe
Moin Uwe,
der Punkt ‚History‘ ist keinen EchoDevice zu geordnet. Der Punkt ist auf der gleichen Ebene wie ‚EchoDevices‘ also alexa2.1.History.
Hallo,
vielen Dank für die gute Erklärung.
Leider Funktioniert das bei mir nicht, die sagt nur „hier bitte“.
Mein Script:
ne
alexa2.0.History.summary
GT
FIRST
state.val
BATTERIE
0
alexa2.0.Echo-Devices.G0911B0594630H2P.Commands.deviceStop
FALSE
TRUE
alexa2.0.Echo-Devices.G0911B0594630H2P.Commands.speak
FALSE
Baterie leistung
Leider klappt weder „cleanup“ noch „devicestop“ und Alexa plappert immer dazwischen. Die Routinen in der App sind für mich keine Lösung, da Alexa hier nur auf den genauen Wortlaut reagiert.
Hat jemand eine Idee wie man das ganze sauber lösen kann?
Ich bin auch gespannt. habs versucht über Volumen zu regeln. Aber kannst ja auch nur minimum 10% einstellen. auch kurze Antworten funksen nicht. sienplappert immer dazwischen, bri ht sb und sagt denn den Text der bei speak eingegeben wurde. Routinen erstellen funktioniert, aber man kann höchstens 99 einstellen das ist zu wenig. gruß
Hallo zusammen,
ich habe das Bosch Smart Home System bei mir zu Hause verbaut. Mit Magnetkontakten werden Türen und Fenster überwacht.
Wenn ein Fenster länger als 10 Minuten geöffnet ist, bekomme ich eine Push-Nachricht
Frage:
Kann ich diese Push-Nachricht automatisch auf meine Echo dots als Sprachausgabe wiedergeben?
Die würde dann z.B. wie folgt heißen;
„Bitte das Badfenster schließen.‘
Die Alexapp bringt diese Meldung auch als Sprachausgabe, jedoch auch wenn in der Zwischenzeit das Badfenster wieder geschlossen ist.
Öffnet man dann z.b das Badfenster oder die Tür innerhalb der 10 Minuten mehrmals ertönt mehrmals die Nachricht für jede Türöffnung auch wenn die Tür wieder geschlossen sind. Das ist dann sehr störend.
Bosch Smart Home jedoch erkennt es, wenn das Fenster in der Zwischenzeit wieder geschlossen ist und bringt nur dann eine Benachrichtigung.
Dies Benachrichtigung bzw Push Meldung würde ich dann gerne auf Alexa hören.
Wäre klasse wenn das bei ihrer Iobroker umgesetzt werden könnte.
Vielen Dank
Frank
Ich habe mir ein ähnliches Blockly gebastelt und vorweg eine Routine mit der Antwort „Moment“ gestellt. Das funktioniert ganz gut, zumal Alexa jetzt den Eindruck erweckt nachzudenken und die Antwort kurze genug war, um ihr nicht „ins Wort zu fallen“. Leider hat sich das in den letzten Tagen von selbst geändert und zwischen „Moment“ und der Blockly-Antwort liegen jetzt ca. 15 Sekunden. Kann das jemand erklären?
[…] Wie du eigene Kommandos für Alexa programmieren kannst, erfährst du in diesem Artikel: Sprachausgabe mit Alexa und eigene Kommandos programmieren […]
Das Device stop in Blockly ist aktuell sinnlos und kann gelöscht werden.
Damit Alexa nicht antwortet scheint der Bereits beschriebene Weg (in der Alexa App das Kommando anlegen und die Aktion dazu dann löschen) der einzig zu sein der funktioniert.