Ankündigung

Einklappen
Keine Ankündigung bisher.

Alexa Custom Skill für EDOMI (LBS 19000646 und 19000647)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • benji
    antwortet
    Ich hab jetzt mal die Lamellenfunktion im Custom Skill bei mir integriert. Im Develop Portal über Test funktioniert die Sache schon mal.
    Heute Abend werde ich mal die Geschichte in Edomi integrieren und testen.



    Einen Kommentar schreiben:


  • 2Fast4You78
    antwortet
    Zitat von jonofe Beitrag anzeigen
    Im Smarthome Update wird die Unterstützung für Lamellen enthalten sein. Habe es gerade angepasst, allerdings nur für die neue Version, welche den SmartHome Skill enthält. Daher noch ein klein wenig Geduld.
    da bin ich auch schon heiß drauf. Und meine Frau glaub noch mehr wie ich..

    Einen Kommentar schreiben:


  • benji
    antwortet


    Danke, da bin ich gespannt.

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Im Smarthome Update wird die Unterstützung für Lamellen enthalten sein. Habe es gerade angepasst, allerdings nur für die neue Version, welche den SmartHome Skill enthält. Daher noch ein klein wenig Geduld.

    Einen Kommentar schreiben:


  • benji
    antwortet
    Danke für das Angebot.

    Die Lamellen werden wie die Position Jalousie/Rolladen über einen Wert 0-255 gesteuert. (0=offen / 255= geschlossen)
    Deswegen dachte ich auch, man könnte ja das Skill und alexa.php um die von mir angegebenen variablen erweitern, zu Blind_Position noch Lam_Position hinzufügen.

    in der variable $moveVal könnte man dann öffne = 0 und schließe = 255 hinzufügen.


    Unabhängig davon, dass du es einbaust würde ich es gerne verstehen um meine Kenntnisse zu erweitern

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Ja, du kannst mir auch einfach beschreiben, wie man die Lamellen steuert und und welchen Wertebereich diese haben, dann kann ich das einbauen.
    Werde dann den Wertebereich über einen Eingang konfigurierbar machen und jeweils zwei Ausgänge spendieren, einen von 0-100 und einen weiteren von 0-255.
    Okay?

    Einen Kommentar schreiben:


  • benji
    antwortet
    Stimmt, Intent habe ich vergessen. Dort müsste ja dann noch folgendes angelegt werden.

    Code:
        {
          "slots": [
            {
              "name": "Article",
              "type": "Article_Type"
            },
            {
              "name": "Praeposition",
              "type": "Praeposition_Type"
            },
            {
              "name": "Lam_Position_Name",
              "type": "Lam_Type"
            },
            {
              "name": "Lam_Position_Room",
              "type": "Room_Type"
            },
            {
              "name": "Lam_Position_Value",
              "type": "Percent_Type"
            }
          ],
          "intent": "Lam_Position"
        },
        {
          "slots": [
            {
              "name": "Article",
              "type": "Article_Type"
            },
            {
              "name": "Praeposition",
              "type": "Praeposition_Type"
            },
            {
              "name": "Lam_Position_Name",
              "type": "Lam_Type"
            },
            {
              "name": "Lam_Position_Room",
              "type": "Room_Type"
            }
          ],
          "intent": "Lam_Position_Status"
        },

    Ich werde mir mal anschauen mit dem zweiten SKill. Ich kann ja auch den Port usw. belassen da ja nie beide Skills gleichzeitig senden können (2 versch. Invocation Namen) ???

    Wenn ich die Lamellengeschichte integriere und am laufen habe, würdest du diese dann in deinen LBS (alexa.php) mit übernehmen? Dann müsste ich in Zukunft nicht immer alles anpassen wenn ein Update kommt.


    würde dann auch mal schauen ob ich (für mich) eventuell die die Dimmfunktion anpasse, dazu müsste ich doch in alexa.php nur den wert mit 2.55 multiplizieren oder??






    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Nein, das wird nicht reichen. Es ist auch ein neuer Intent notwendig.
    Wenn du experimentieren willst, dann würde ich empfehlen einen zweiten Skill anzulegen mit einem zweiten Invocation Name und damit zu testen.
    Aus alexa.php machst du dann alexa2.php und verlinkst den neuen Skill auf alexa2.php. Der Alexa Receiver und Command Validator sollten eigentlich unverändert damit klar kommen.

    Einen Kommentar schreiben:


  • benji
    antwortet
    Hi,

    bevor ich mir mein ganze "Alexa Geschichte" zerschieße wollte ich hier mal kurz nachfragen

    In Bezug auf die Funktion Lamellen Position zu steuern. Wenn ich es richtig verstanden habe, würde es doch reichen wenn ich folgendes ergänze.


    alexa.php

    PHP-Code:

    <? 
     case "Lam_Position":
                $response = '{
                        "version": "1.0",
                        "sessionAttributes": {},
                        "response": {
                            "outputSpeech": {
                                "type": "PlainText",
                                "text": ' . ($debug ? '"Lamellen Positionsbefehl empfangen."' : '"Okay"') . '},
                            "shouldEndSession": "true"
                        }
                    }';
                $command['group'] = 'Lamellen position';
                if (array_key_exists('slots', $intent)) {
                    $slots = $intent['slots'];
                    if (array_key_exists('Lam_Position_Name', $slots) && array_key_exists('value', $slots['Lam_Position_Name']))
                        $command['name'] = $slots['Lam_Position_Name']['value'];
                    if (array_key_exists('Lam_Position_Room', $slots) && array_key_exists('value', $slots['Lam_Position_Room']))
                        $command['location'] = $slots['Lam_Position_Room']['value'];
                    if (array_key_exists('Lam_Position_Value', $slots) && array_key_exists('value', $slots['Lam_Position_Value']))
                        $command['value'] = @round($percentVal[$slots['Lam_Position_Value']['value']] * 2.55);
                    logging(print_r($command, true));
                }
                break;
            case "Lam_Position_Status":
                $response = '{
                        "version": "1.0",
                        "sessionAttributes": {},
                        "response": {
                            "outputSpeech": {
                                "type": "PlainText",
                                "text": ' . ($debug ? '"Lamellen Positions Status Befehl empfangen."' : '"Okay"') . '},
                            },
                            "shouldEndSession": "true"
                        }
                    }';
                $command['group'] = 'Lamellen position status';
                if (array_key_exists('slots', $intent)) {
                    $slots = $intent['slots'];
                    if (array_key_exists('Lam_Position_Name', $slots) && array_key_exists('value', $slots['Lam_Position_Name']))
                        $command['name'] = $slots['Lam_Position_Name']['value'];
                    if (array_key_exists('Lam_Position_Room', $slots) && array_key_exists('value', $slots['Lam_Position_Room']))
                        $command['location'] = $slots['Lam_Position_Room']['value'];
                    if (array_key_exists('Lam_Position_Value', $slots) && array_key_exists('value', $slots['Lam_Position_Value']))
                        $command['value'] = @$percentVal[$slots['Lam_Position_Value']['value']];
                    logging(print_r($command, true));
                }
                break;

    ?>

    Utterances im Skill

    Code:
    Lam_Position Fahre die Lamelle{Lam_Position_Name} {Praeposition} {Lam_Position_Room} auf {Lam_Position_Value} Prozent
    Lam_Position Fahre {Praeposition} {Lam_Position_Room} die Lamelle{Lam_Position_Name} auf {Lam_Position_Value} Prozent
    Lam_Position Fahre die Lamelle{Praeposition} {Lam_Position_Room} auf {Lam_Position_Value} Prozent
    Lam_Position Fahre {Praeposition} {Lam_Position_Room} die Lamelleauf {Lam_Position_Value} Prozent
    Lam_Position Fahre die Lamelleauf {Lam_Position_Value} Prozent
    Lam_Position_Status nach der Position der Lamelle{Lam_Position_Name} {Praeposition} {Lam_Position_Room}
    Lam_Position_Status Wie ist die Position der Lamelle{Lam_Position_Name} {Praeposition} {Lam_Position_Room}
    Lam_Position_Status Wie ist {Praeposition} {Lam_Position_Room} die Position der Lamelle{Lam_Position_Name}
    Lam_Position_Status nach der Position der Lamelle{Praeposition} {Lam_Position_Room}
    Lam_Position_Status Wie ist die Position der Lamelle{Praeposition} {Lam_Position_Room}
    Lam_Position_Status Wie ist {Praeposition} {Lam_Position_Room} die Position der Lamelle

    Slot Type im Skill

    Code:
    Group_Type: Lamellenstatus

    Für Fahre Lamelle müsste ich mir etwas einfallen lassen, ist auch erstmal nicht so wichtig.

    "auf" und "zu" wird ja schon umgesetzt auf 0 und 1 wenn ich dies richtig interpretiert habe. Eventuell würde ich hier "öffne" und "schließe" auf "0" und "255" umsetzen.


    Gruß benji

    Einen Kommentar schreiben:


  • benji
    antwortet
    Das mag sein, ich werde es definitiv mal testen wenn du es online hast...... Eigentlich wäre für mich die Traumlösung, dass SmartHome Skill durch ein eigenes Zustrom Still in Alexa ersetzen zu können. Quasi wie ein Favorit wählen und dann gehen alle SmartHome Sachen an dieses CustomSkill.

    Dadurch könnte man sich dann den Aufruf des Skills sparen. Aber ich glaube das bleibt auch ein Traum.

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Zitat von benji Beitrag anzeigen



    Aber natürlich. Ich wollte heute schon für Lichtbefehle den LBS 19000660 bei mir integrieren. So gut ich das Custom Skill auch finde ist das SmartHome schon etwas genialer.
    Also ich bin da nicht ganz so sicher. Der Smarthome Skill ist schon ziemlich eingeschränkt von den Sprachkommandos. Einziger Einfluss, den man hat ist der Name des Devices, der Rest ist komplett von Amazon vorgegeben. Ich finde der Custom Skill hört sich vom eigentlichen Befehl natürlicher an, wobei das "starte edomi, und ..." natürlich dann nicht so schön ist. Naja, kann ja dann jeder selbst für sich entscheiden ... und man kann es ja dann auch mischen ...

    Einen Kommentar schreiben:


  • benji
    antwortet
    Zitat von jonofe Beitrag anzeigen
    Falls Interesse vorhanden ist, würde ich als nächstes die Doku angehen...


    Aber natürlich. Ich wollte heute schon für Lichtbefehle den LBS 19000660 bei mir integrieren. So gut ich das Custom Skill auch finde ist das SmartHome schon etwas genialer.

    Also ich bin voller Vorfreude auf dein Werk......

    Gruß Benji

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Als kleine Preview: Der Smarthome Skill ist so gut wie fertig und läuft bei mir recht zuverlässig, inkl. Discovery der Smarthome Devices, die jeweils durch eine LBS Instanz des Alexa Smarthome Command Validators abgebildet werden:
    Screenshot from 2017-04-03 22-38-21.png




    E1 ist die Verbindung zum Alexa Receiver
    E2 ist der Loglevel
    E3 ist eine eindeutige frei wählbare ID
    E4 ist der Name, den man auch später bei den Sprachkommandos verwendet
    E5-E15 erlaubt die Konfiguration welche Befehle von diesem virtuellen Smarthome Device unterstützt werden. Dazu müssen die enstprechen Eingänge auf 1 gesetzt werden. Bsp.: E5=1 E6=1 bedeutet ein einfaches Schalt-Device
    E16-E20: Hier werden die entsprechenden Statuswerte angelegt, um z.B. Statusabfragen zu beantworten oder bei Increment/Decrement Befehlen auch den neuen Zielwert berechnen zu können.

    A1 Hier wird der Discovery JSON String an den Receiver LBS gesendet. Dieser baut dann bei einem eingehenden Discovery Request ("Alexa, finde meine smarten Geräte") die Liste der Devices zusammen.
    A2 wird 1 sobald ein Befehl für dieses Device empfangen wurde
    A3 Enthält die Device ID des empfangenen Befehls (wird eigentlich nicht benötigt)
    A4 bekommt die On/Off Befehle
    A5/A6 bekommt die Prozentwerte (z.B. Dimmen); A5 ist dabei der neue Dimwert und A6 der Deltawert, sofern ein Increment/Decrement Befehl empfangen wurde
    A7/A8 funktioniert wie A5/A6 nur mit Temperaturwerten
    A9 funktioniert derzeit nur mit US Alexa Service in Englisch, sollte dann aber sofort funktionieren, wenn von Amazon in deutsch umgesetzt
    A10 Timestamp des letzten validierten Befehls
    A11 Die Response als JSON auf den letzten empfangenen und validierten Befehl. Dieser wird auch per MessageQueue an den Alexa Receiver weitergereicht und von dort an die Lambda Funktion gesendet.

    Gefühlt ist die Reaktionszeit des Smarthome Skills etwas länger als die vom Custom Skill, was vermutlich am Umweg über die Lambda Funktion liegt. Diese reicht den Befehl allerdings nur an den Smarthome Skill durch, den ich in PHP implementiert habe.

    Vom Ende des Sprachbefehls bis zur Schaltaktion sind es ungefähr 3 Sekunden.
    Habe es gerade mal verglichen mit dem Custom Skill. Dort sind es ca. 1,8 Sekunden bis zur Schaltaktion.
    Ich werde bald mal durchmessen, wo die Zeit verbraten wird, ggf. lässt sich da noch etwas optimieren.

    Ein Sprachbefehl bis zur Bestätigung durch das Echo Device läuft also wie folgt ab: (Bsp.: Ich: "Alexa, schalte die Deckenleuchte ein." Alexa: "OK")

    Sprachbefehl => Echo Device => Alexa Voice Service => Lambda Smarthome Skill Adapter => PHP Smarthome Skill => Alexa Receiver => Alexa Smarthome Validator (Schaltaktion + Antwort generieren) => Alexa Receiver => PHP Smarthome Skill => Lambda Smarthome Skill Adapter => Alexa Voice Service => Echo Device => Ohren des Benutzers

    Falls Interesse vorhanden ist, würde ich als nächstes die Doku angehen...

    Zuletzt geändert von jonofe; 03.04.2017, 22:08.

    Einen Kommentar schreiben:


  • benji
    antwortet
    Zitat von jonofe Beitrag anzeigen

    Derzeit ist es tatsächlich so, dass der eigentlich Prozentwert ausgegeben wird. Wenn du die Skala 0-255 brauchst, dann musst du im Moment mit 2.55 multiplizieren.
    Hm Ok, hab ich auch schon getestet. Nachteil ist, dass bei Neustart von Edomi die Lampen alle den Hwert = 0 bekommen da ja value leer und somit leer * 2,5 = 0
    Muss ich mir mal überlegen.


    Zitat von jonofe Beitrag anzeigen
    Ich würde an deiner Stelle lediglich das Wort "Rolläden" in den Utterances in "Jalousie" ändern und sonst nichts verändern. Kannst Utterances auch kopieren, dann sollte es sowohl mit Rolläden als auch mit Jalousie funktionieren. Lediglich beim Group Eingang E3 des Command Validators benutzt du weiterhin Rolläden. Dies wird ja nur zu Identifizierung gemacht und hat keinen Einfluss auf die Sprachbefehle.

    Ok, dann werde ich es kopieren und mal teste. Denkst du, dass irdgendwann noch Funktion Lamelle integriert wird???

    Gruß Benjamin

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Zitat von benji Beitrag anzeigen

    1. Wenn ich einen Dimmwert setze über Edomi beträgt mein Value 100 wenn ich 100% sage, im Wert entspricht dies aber nur ca. 40%. Der Wert müsste ja eigentlich 255 sein. Bei den Rolladen funktioniert dies, wenn ich dort 100% sage kommt 255.
    Derzeit ist es tatsächlich so, dass der eigentlich Prozentwert ausgegeben wird. Wenn du die Skala 0-255 brauchst, dann musst du im Moment mit 2.55 multiplizieren.

    Zitat von benji Beitrag anzeigen
    2. Ich würde meine Rolladen lieber Jalousie nennen da es eigentlich Jalousien sind :-) Hierzu würde doch reichen wenn ich dies in Utterances anpasse, quasi alles Rolladen gegen Jalousie tauschen sowie die Funktion zu Rolladen in der alexa.php oder ist es nicht so einfach getan???
    Ich würde an deiner Stelle lediglich das Wort "Rolläden" in den Utterances in "Jalousie" ändern und sonst nichts verändern. Kannst Utterances auch kopieren, dann sollte es sowohl mit Rolläden als auch mit Jalousie funktionieren. Lediglich beim Group Eingang E3 des Command Validators benutzt du weiterhin Rolläden. Dies wird ja nur zu Identifizierung gemacht und hat keinen Einfluss auf die Sprachbefehle.



    Einen Kommentar schreiben:

Lädt...
X