Zahl aus Alexabefehl in Iobroker/Blockly integrieren

  • Hallo zusammen,

    danke erstmal für die vielen ausführlichen Tutorials. Heute ist mir zwar ein paarmal der FI rausgeflogen, da ich den Sonoff POW falsch verkabelt habe, aber morgen sollte das besser werden :)

    Meine Frage: Ich möchte sagen "Alexa, schalt die Waschmaschine in 30 Minuten an". Normalerweise weise ich Alexabefehlt über Routinen in Iobroker aus und kriege sie so easy in Blockly. Aber wie kriege ich die Zahl aus meinen Befehl in den Iobroker und anschließend in Blockly?

    Danke, Grüße

  • Hier mal ein Vorschlag:

    Die Variablen: <alexaText>, <alexaZahl>, <alexaWortliste> erstellen

    Das Objekt<summary> stammt aus Alexa2.0->History->summary

    Den Datenpunkt: <AusgabeScript> erstellen. (Habe ich z.B. in Alexa2.0->History gemacht, dann hat man sie mit <summary> auf einen Blick).

    Das Tennzeichen im Befehl: "<alexaWortliste> erstellen" ist ein Leerzeichen!!

    Wenn du Alexa etwas sagst kannst du das als Text im iobroker->objekte->Alexa2.0->History->summary sehen.

    Funktion: sobald sich <summary> ändert, wird der Text in einzelne Worte an den Leerzeichen aufgespalten und die Variable <alexaWortliste> eingetragen.

    Die Variable <alexaZahl> wird zu Null gesetzt.

    Die <alexaWortliste> wird Wort für Wort mit "Zahlworten" verglichen und bei erfolgreichem Vergleich die entsprechende Zahl zur bisherigen <alexaZahl> addiert.

    Am Ende wird das Ergebnis in den Datenpunkt <AusgabeScript> eingetragen.

    Hier kann dieser dann wieder als Trigger für ein weiteres script verwendet werden.

    Anmerkung:

    Das obige script soll nur das mögliche Verfahren darstellen.

    Die Liste der möglichen Zahlen ist unvollständig !!! Noch etwas Tipparbeit.

    Zahlen wie "zwei hundert" werden noch nicht richtig verarbeitet, da hier die Rechnung 2 mal 100 wäre.

    Für Zahlen von "eins" bis "neun und neunzig" (9 plus 90) sollte es aber klappen.

    Sicherlich ist das ganze mit einem Javascript eleganter zu lösen, aber als Blockly-Anfänger-Lösung schon ganz passabel.

  • Irgendwie scheine ich noch nicht verstanden zu haben, was du mit der "zwanzig" bzw "20" am Ende machen möchtest. Etwa die Waschmaschine via Blockly einschalten ohne dazu eine in der AlexaApp hinterlegte Routine zu verwenden?

    Was verstehst du unter "direkten" Weg.

  • Also mein Standartweg ist eine Alexa Routine zu erstellen, wenn ich die Routinge ausführe wird ein boolean im Iobroker true. Diesen Boolean habe ich als trigger im Blockly und folglich wird anschließend meine Lampe angemacht etc.

    Wenn ich eine Routine erstelle, muss ich aber ja immer genau den Text vorgeben Bsp. "Alexa, schalte das Sofalicht aus". Ich möchte aber sagen "Alexa, schalte das Sofalicht in 20 Minuten aus", was entsprechend dann in 20 Min ausgeführt wird.

    Mit direkt meine ich dass ich den Text in der Routine benenne mit "Alexa, schalte das Sofalicht in <Integer> Minuten aus". Den Integer Wert kann ich dann verwenden.

    Ist das jetzt klarer geworden?

  • Ich habe das blockly-script erweitert und die js- scriptDatei als Anhang eingefügt.

    Ich habe den Datenpunkt: Alexa2.0->History->sofalicht neu angelegt.

    Damit das script bei dir läuft bitte die Datenpunkte wie beschrieben anlegen. Sonst nach Import im blockly anpassen.

    Das Beispiel verwendet den Satz: "Alexa schalte das Sofalicht in xx an" oder "... aus".

    Bitte "an" verwenden, da "ein" als Zahl erkannt wird (für ein hundert z.B.)

    Man kann natürlich auch noch Minuten, Sekunden, ... abprüfen. Im Augenblick wird die Zahl als Minuten interpretiert.

    Zuerst wird nach "alexa schalte das sofalicht" gesucht. Dann nach "an" oder "aus".

    Der gefundene Zeitwert(MInuten) wird mit 10 erweitert, um einen 10sek Takt verwenden zu können.

    (Ich habe einen zehhSekundenZaehler verwendet, damit man im debug was sieht.)

    Das ganze soll das Prinzip zeigen. Es geht natürlich eleganter.

Jetzt mitmachen!

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