ioBroker: Sprachausgabe mit Alexa und eigene Kommandos programmieren

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.

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:

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.

Authentifiziere dich mit deinen Amazon-Zugangsdaten und schließe den Tab nach erfolgreicher Anmeldung. Die Adapter-Einstellungen sollten nun so aussehen:

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.

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):

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.

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:

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.

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:

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.

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:

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.

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:

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.

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:

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.

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');
  }
});
War dieser Beitrag hilfreich?
Hat dir der Beitrag geholfen?
Die mit Sternchen (*) gekennzeichneten Links sind sogenannte Affiliate-Links. Wenn du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekomme ich von dem betreffenden Online-Shop oder Anbieter eine Provision. Für dich verändert sich der Preis nicht.

6 Kommentare

Kommentieren

Hallo,
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?

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?

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!

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

Schreibe einen Kommentar