Einen Zahlenwert an Alexa übergeben

  • Hallo zusammen,

    ich hoffe das man mir hier im Forum helfen kann da ich langsam nicht mehr weiter weiß.

    Ich möchte einen Zahlenwert aus ioBroker an Alexa übergeben.

    Was funktioniert:

    1.) Ich habe Alexa und ioBroker mittels IoT Adapter mit einander verbunden und im ioBroker hinzugefügte Smart-Devices werden mir bei Alexa angezeigt.

    2.) Ich habe den Zahlenwert (Bezug von Strom aus meinem Stromzähler von Discovergy), welchen ich übermitteln will im ioBroker vorliegen.

    Mein Ziel ist nun, dass ich Alexa fragen kann: "Alexa, wie hoch ist mein Stromverbrauch" und Alexa mir antwortet "Du verbrauchst gerade 550 Watt".

    Woran scheitert es?

    Damit ich den Datenpunkt im IoT für Alexa bereitstellen kann, muss bei diesem "Schreiben erlaubt" sein. Sobald ich den Haken im Datenpunkt setze, wird dieser bei der nächsten Aktualisierung wieder "entfernt", sprich: Ändert sich mein Stromverbrauch fliegt der Haken raus.

    Zudem scheitert es daran, dass das Smart-Home-Device (Übertragung an Alexa möglich wenn Instanz gestoppt) in Alexa selbst als Device gefunden wird mit den beiden Stati "An" und "Aus". Ich möchte ja aber eine Zahl haben (ähnlich wie eine Temperatur etc.).

    Kann mir kurz jemand sagen, woran ich da gerade genau scheitere oder ist mein Ansatz komplett falsch?

    Selbst wenn ich "write" von false auf true umstelle, deaktiviert er mir das innerhalb kurzer Zeit wieder.


    Danke!

  • Hier ein Ausschnitt aus einem bei mir laufenden script. Der Datenpunkt <alexa2.0/history/summary> wird als Trigger verwendet und (bei mir Wort für Wort = rollo -> eins -> rauf) ausgewertet. Schau bitte im history nach was Alexa genau!! verstanden hat, sonst klappt der Vergleich nicht. Manchmal versteht sie etwas ganz anders als man denkt. Aus "Gartenlaterne" macht sie "garten" "laterne", also zwei Worte und bei klein geschrieben.

    Dann setzt du den Text den Alexa sagen soll wie folgt zusammen:

    Hinter dem Objekt <speak> steckt: Alexa2.0/Echo-Devcices//"DeinDevice"/Commands/speak.

    Und schon sprich Alexa mit dir.

  • Ich mache das anders, ich erzeugen einen Datenpunkte den ich dann in den IoT Adapter einfüge, dann lasse ich Alexa nach dem neuen Gerät suchen. Danach erstelle ich mir in Alexa eine Routine, die ausgelöst wird, deine Beispiel, Alexa, wie hoch ist mein Stromverbrauch. Diese Routine schaltet mir meinen Datenpunkt AN. Im IoBroker schreibe ich ein Skript, welches auf den Datenpunkt bei true getriggert wird, im Skript dann steuere speak von Alexa mit dem Wunschtext und schalte den Datenpunkt wieder aus.

  • Viele Wege führen nach Rom.

    Ich habe um den Iot_Adapter bisher einen Bogen gemacht, hatte auch keinen Bedarf. Der Alexa2 Adapter arbeitet bestens. Keine Iot-Cloud Umwege, keine Kosten.

    Ich habe auch alle Geräte von meiner Alexa gelöscht und arbeite nur noch mit Spach-Text-Erkennung via .../history und script. Ist m.E. übersichtlicher und einfacher, da die scripte alle gleich aufgebaut sind. Keine lange Gerätesucherei mit der Alexa (manchmal 2 - 3mal bis ein Gerät erkannt wurde) und wenn meine Sprache nicht sauber erkannt wird (also Alexa behauptet, das Gerät nicht zu kennen), kann ich nachsehen was Alexa nicht richtig versteht (Gartenlaterne -> garten laterne) und wesentlich schneller anpassen als via AlexaGerät.

    Desweitern kann ich erkennen welches Gerät den Befehl gehört hat und gleichlautende Befehle selektiv bearbeiten. "Licht an" an die Alexa Wohnzimmer ---> Im Wohnzimmer geht das Licht an.

    Als auslösende Kommandos bin ich nicht an ein, an, aus ... gebunden. Ich habe z.B. festgestellt, dass bei den Rollos: rauf, runter, halt desweiteren halb, viertel,.. für Zwischenposition sehr sicher verstanden werden.


    Den Ton der Alexa schalte ich nach jedem Befehl für ein paar Sekunden ab, dann brauche ich mir nicht immer die Standardsätze anzuhören.

    Aber wie gesagt, es gibt viele Wege und jeder sollte den für sich gangbarsten finden.

    Einmal editiert, zuletzt von geschild (25. Januar 2021 um 00:06)

  • da hast du recht. Bei mir sehen auch alle Skripte identisch aus.

    Aber das ist ja das tolle an Programmen, sie können noch so verschieden, so einfach oder so kompliziert sein, so lange sie am Ende das machen was sie sollen ist alles richtig.

    Ich lege meinen "Wunschtext" für die Ausführung über eine Routine in Alexa fest.

    Also wenn ich sage: alexa, wie ist die aktuelle Leistung?

    Schaltet Alexa intern den "Schalter" aktuelle Leistung an.

    Das registriert der IoBroker und schreibt dann in den speak der angesprochenen Alexa "die aktuelle Leistung ist xxx Watt" und dann schaltet dieses Skript den Schalter aktuelle Leistung wieder aus.

    Genau so halb oder hoch oder runter.

    Die Aussage "Alexa, Licht an/aus" habe ich auch so drin, ist jeweils ein "Schalter" wo aber vorher abfragt wird welche Alexa den Text gehört hat und dann wird in diesem Raum das Licht geschaltet.

  • Hi!
    Ich hab das mal probiert und manchmal funktioniert das auch super, dass hier gleich was passiert, manchmal dauert es ewig, bis eine Reaktion kommt. Eine Idee, an was das liegen könnte?

  • Die Idee nur mit dem alexa-Adapter zu arbeiten ohne iob-cloud gefällt mir sehr gut.

    Das script läuft auch bei mir, nur bekomme ich es nicht hin, dass auch die Alexa antwortet welche ich gefragt habe. Wie bekomme ich das mit blockly hin (d.h. Übergabe der Serien-Nr. an den Befehlt "speak")?

    Danke,

    Manfred

  • In alexa2.0.history.serialnumber wird nach einem Befehl, die alexa vermerkt, die den Befehl gehört hat.

    Über eine if seriennummer == xx else if .... kannst du nun selektieren und den passenden alexa2.0.echodevice.commands.speak auswählen.


    <xml xmlns="https://developers.google.com/blockly/xml">

    <block type="on_ext" id=":FiZdBGOsY7i0~^/?UB9" x="13" 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="h!5yAOG,*$T9gZZ#Yenx">

    <field name="oid">alexa2.0.History.summary</field>

    </shadow>

    </value>

    <statement name="STATEMENT">

    <block type="controls_if" id="ulMxio2=?Z?!U0outdq7">

    <value name="IF0">

    <block type="logic_compare" id="7)2]~!!+YI9LOvEyGo/]">

    <field name="OP">EQ</field>

    <value name="A">

    <block type="get_value" id="?0qub$$n!mepgBF2SRUx">

    <field name="ATTR">val</field>

    <field name="OID">alexa2.0.History.serialNumber</field>

    </block>

    </value>

    <value name="B">

    <block type="get_value" id="k]W6*ZjgjVJ?~b%1^qP]">

    <field name="ATTR">val</field>

    <field name="OID">alexa2.0.Echo-Devices.aaa55036383c46d6989fd1646b2a7b4f.Info.serialNumber</field>

    </block>

    </value>

    </block>

    </value>

    <statement name="DO0">

    <block type="control" id="pq~#+-SnoD/qO$Q]pIcp">

    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>

    <field name="OID">alexa2.0.Echo-Devices.aaa55036383c46d6989fd1646b2a7b4f.Commands.speak</field>

    <field name="WITH_DELAY">FALSE</field>

    <value name="VALUE">

    <block type="text" id="GhXRWWU%Z[g}::-=4bTL">

    <field name="TEXT">Hallo da bin ich</field>

    </block>

    </value>

    </block>

    </statement>

    </block>

    </statement>

    </block>

    </xml>

    Wenn die Antwort nicht ganz verständlich ist, schick mir eine Email und wir könnten Tel.Nummer austauschen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!