Bau dir deinen eigenen Fibaro Alexa Echo Skill

Fibaro -Amazon Echo Skill
Geschrieben von crissxcross

Vor kurzem hatte ich dir hier auf siio eine Lösung mit dem Rapberry Pi gezeigt, um verbundene Geräte des Fibaro Home Center mithilfe von Amazon´s Alexa zu steuern. Mit diesem Skill kannst du Geräte nicht nur steuern, sondern auch Informationen abfragen - und du brauchst kein Raspberry Pi.

Sprachassitenten sind momentan stark im Trend und werden, davon bin ich überzeugt, das Thema Smart Home in diesem Jahr vorantreiben. Mehr noch, Sie werden bald so selbstverständlich wie grafische Oberflächen von uns bedient werden.

Bislang gibt es von Fibaro noch kein eigenes Amazon Echo Skill - ist aber schon angekündigt und erste große Veränderungen im Hause Fibaro, wie der Wechsel von home.Fibaro auf das neue Portal "Fibaro-ID", lassen hoffen das es bald soweit ist. Doch wissen wir stand heute noch nicht, ob Amazon ein Custom Skill umsetzen wird, oder sich an das Amazon Smart Home Skill anbindet. Der Unterschied ist schnell erklärt und dann bin ich mit meinem Vorgeplänkel auch fertig:

Smart Home Skill:
Ermöglicht den generischen Aufruf von Geräten. Bislang ist nur das Steuern von Geräten, wie ein- / ausschalten, dimmen usw. möglich. Auf dieser Basis setzt auch Philips Hue oder die TP-Link Steckdose auf.

Alexa, schalte Waschmaschine ein.

-okay

Custom Skill:
Erfordert einen Invocation Name (Aufrufnamen) vor dem Befehl. Ermöglicht aber auch Informationen abzurufen, wie Beispielsweise die Temperatur in einem Raum, Status von Geräten oder nach offenen Fenstern fragen. Wird genutzt von RWE, Magenta Smart Home und eben von dem hier in diesem Artikel vorgestellten Fibaro Skill.

Alexa, frage Fibaro, welche Fenster sind geöffnet?

-Folgende Fenster sind geöffnet: Fenster Büro, Fenster Kinderzimmer, ...

Was ist das, was brauchen wir und ist das gut?

Wie Eingangs beschrieben, benötigen wir keinen Raspberry Pi. Was du dir gleich herunter lädst, ist ein komplettes Skill - so wie es von den Entwicklern auch bei Amazon eingereicht wird. Irgendwie müssen die Entwickler Ihre Arbeit ja auch testen, daher gibt es sogenannte Developer Accounts. Skills welche dort hochgeladen werden, sind automatisch auf dem mit diesem Account verknüpften Amazon Echo verfügbar. Das ist genau den Weg welchen wir nehmen werden.

Aber keine Angst, du musst nicht hart programmieren, ich verspreche dir das es ganz einfach ist - aber mit viel Fleißarbeit verbunden.

Wir brauchen dazu zwei Accounts:

An dieser Stelle in ganz wichtiger Hinweis: Beide Accounts können kostenfrei angelegt werden - aber - der AWS Account ist nur 12 Monate ab dem Datum der Registrierung kostenfrei. Siehe mehr hier. Daher muss bei der Registrierung eine Zahlungsart hinterlegt werden.

Skill von GitHub laden

Das Skill ist wie bereits angeführt keine offizielle Entwicklung von Amazon, sondern wurde wird von Alexander Naumann entwickelt. Sieh das Skill bitte auch so an - es ist nicht offiziell und steckt in der Entwicklung. Es wäre daher fantastisch, wenn Ihr in den Kommentaren Feedback gebt, was noch nicht geht, damit Alex es vielleicht umsetzen kann. Wie du gleich sehen wirst, ist es eine große Fleißarbeit, alle möglichen Variationen der Aufrufe einzuarbeiten. Daher bitten wir hier um eure Unterstützung!

Den Skill kannst du hier herunterladen.

Lade dir das ZIP File (GitHub Seite oben rechts) herunter und entpacke es.

Konfigurieren der index.js

Fibaro Skill Source Code

Fibaro Skill Source Code

In dem ZIP Container findest du eine "index.js" Datei. Öffne diese mit einem Script-Editor.  Was du benötigst ist:

  • dein Home Center Lite / 2 muss von Aussen per DynDns erreichbar sein. Darauf, wie ein DynDns angelegt und im Router konfiguriert wird möchte ich jetzt nicht eingehen, sonst sprengt es den Rahmen des Artikels. Angabe der URL erfolgt an dieser Stelle ohne dem http Zusatz.
[alert variation="alert-info"]Dein Router ist somit immer über die DynDns Domain erreichbar. Damit auf Port 80 (Webanwendung) deine Fibaro antwortet, musst du diesen Port noch forwarden, also auf deine Fibaro weiterleiten. Sei dir aber bewusst, das du damit eine potentielle Tür zu deiner Fibaro ins Netz stellst. Befehle die via http übermittelt werden sind unverschlüsselt und könnten mitgelesen werden.[/alert]
  • <PORT> den von Aussen auf das Home Center weitergeleiteten Port
  • <USER> dein Benutzername auf dem Home Center, sollte wenn möglich noch ein "normaler" Benutzer sein, also noch keine eMail, wie sie derzeit im Zuge der Migration von dem Fibaro Wizard erstellt wird.
  • <PASSWORD> - das zum Nutzer zugehörige Passwort.
  • <APPID> - diese erhältst du im Amazon Developer Center. Dies erkläre ich dir im nächsten Schritt.

Amazon Developer Center

Nachdem du dich im Amazon Developer Center registriert und eingeloggt hast (die Registrierung sollte mit der eMail erfolgen, mit welcher auch dein Amazon Echo verknüpft ist), klickst du oben im Kopfmenü auf Alexa - > Alexa Skills Kit. Hier legst du über den Button "Add a New Skill" ein neues Skill an.

Developer Center

Developer Center

Der "Skill Type" bleibt auf "Costum Interaction Model" (den Unterschied zu den anderen Optionen hatte ich ja Eingangs beschrieben).
Language = German (Deutsch)

Name: Dies ist frei wählbar, das ist der angezeigte Name.
Invoction Name: Das auch frei wählbar, aber viel spannender! Das ist der Aufrufname. Trägst du hier Fibaro ein, heißt folglich der Aufruf:

Alexa, frage Fibaro ...

Sobald du auf den Button "Next" geklickt hast, erhältst du auch die , welche du in die index.js (welche wir eben bearbeitet hatten), an der entsprechenden Stelle einträgst.

Amazon Developer Center - Skill erstellen

Amazon Developer Center - Skill erstellen

Bis zu diesem Punkt ist im Developer Center erstmal Stopp - unsere Fleißarbeit geht dort aber gleich weiter. Daher öffne das AWS Center am besten in einem neuen Tab, so das du dann gleich wieder in das Developer Center zurück wechseln kannst.

Amazon AWS Center

Du hast nun alle benötigten Informationen in die index.js Datei eingetragen?

  • <USER>
  • <PASSWORD>
  • <APPID>
  • <URL>
  • <PORT>

Dann erstelle nun aus beiden *.js Dateien (AlexaSkill.js und index.js) eine ZIP Datei. Wie du das Paket benennst ist völlig egal.
Danach gehst du in dein Amazon AWS Account.

Hier klickst du oben rechts auf die Landesauswahl und wählst: EU (Irland) aus. (Alexa Service ist für EU Frankfurt noch nicht verfügbar).

Amazon AWS - EU Irland auswählen

Amazon AWS - EU Irland auswählen

Danach klickst du oben links auf Services und suchst nach "Lambda".

Amazon AWS - nach Lambda suchen

Amazon AWS - nach Lambda suchen

Nun erstellt du eine neue Funktion. Wähle "Blank Function" und als Trigger das "Alexa Skill Kit".

Amazon AWS - blanc Function erstellen

Amazon AWS - blanc Function erstellen

Im nächsten Schritt wählst du folgende Einstellungen:

  • Name: Frei wählbar, beschreibt deine Funktion- zum Beispiel: Fibaro
  • Runtime: Node.js 4.3
  • Code entry type: Upload a. ZIP file -> hier lädst du das zuvor erstellte ZIP File aus den beiden *.js Dateien hoch
  • Handler: index.handler
  • Role: a costum role -> und auf der sich nun öffnenden Seite wählst du eine der bestehenden Lambda Roles aus, zum Beispiel "lambda_basic_execution
    • als Policy Name: eine bestehende Policy, zum Beispiel: oneClick_lambda_basic_execution
    • mit dem Button "Allow" rechts unten gehts weiter.
  • Memory 512MB
  • die weiteren Einstellungen bleiben wie voreingestellt.
Amazon AWS Function konfigurieren

Amazon AWS Function konfigurieren

Mit dem Button "Next" geht es weiter. Hier erscheint noch eine Übersichtsseite und du findest unten rechts den Button "Create function".  Das wars im AWS Account.

Zurück in den Amazon Developer Account

Auf der linken Seite siehst du quasi den "Fortschritt". Den Abschnitt "Skill Informationen" (dort wo du die App-ID erhalten hast, welche du vor dem Upload der ZIP auf AWS in die index.js eingetragen hast), haben wir vorhin bereits abgeschlossen.
Jetzt beginnt die eigentliche Fleißarbeit und viel copy & paste Arbeit.

In dem ZIP File, welches du vorhin von GitHub geladen hattest, waren neben der beiden *.js Dateien eine ganze Reihe Textfiles (*.txt). Diese werden wir gleich ALLE brauchen.
Klicke auf den "Add Slot Type" Button zwischen den beiden Feldern: Intent Schema und Sample Utterances.

Amazon AWS- Slot Types definieren.

Amazon Developer- Slot Types definieren.

Slot Types:

Für jeden benötigten Slot gibt es eine eigene Textdatei, dessen Inhalt du in den jeweiligen Slot Type kopieren und auf dein Home Center anpassen musst. Die Namen der Slot Types müssen in GROSSBUCHSTABEN eingegeben werden.

Beispiel: Beginne mit der Datei "slot_szenennames.txt. Benenne im AWS den Slot Type nach dem Namen der Textdatei, aber wie bereits beschrieben, in Grossbuchstaben - also: SZENENAMES
Dann öffne die"slot_szenennames.txt" Datei und kopiere dessen Inhalt um Ihn im Developer Center einzufügen. Der Inhalt muss entsprechend auf deine Szenennamen angepasst werden.

Amazon AWS: Slot Type anlegen

Amazon Developer: Slot Type anlegen

Das ganze ist nun mit allen Dateien zu wiederholen, wobei die Inhalte angepasst werden müssen:

  • slot_areanames.txt -> AREANAMES
  • slot_buttonlabels.txt -> BUTTONLABELS
  • slot_device.txt -> DEVICE -> Name der Geräte anzupassen
  • slot_devicetypes.txt -> DEVICETYPES
  • slot_directtypes.txt -> DIRECTTYPES
  • slot_heatingtypes.txt -> HEATINGTYPES
  • slot_lighttypes.txt -> LIGHTTYPES
  • slot_modulnames.txt -> MODULNAMES -> Name der Virtual Devices anzupassen
  • slot_names.txt -> NAMES
  • slot_rollotypes.txt -> ROLLOTYPES
  • slot_rooms.txt -> ROOMS -> Name der Räume aus dem HC2 1:1 übernehmen
  • slot_roomtype.txt -> ROOMTYPE
  • slot_statuswert.txt -> STATUSWERT
  • slot_szenenames.txt -> SZENENAMES
  • slot_toggles.txt -> TOGGLES
  • slot_variablenames.txt -> VARIABLENAMES -> Name ausgewählten Variablen übernehmen
  • slot_yesno.txt -> YESNO

Für den Abschnitt "Interaction Model" benötigen wir nun die Textdatei: "intent.txt". Öffne diese und kopiere dessen Inhalt im Developer Center in das Feld: "Intent Schema". Gleiches wiederholst du mit der Datei: "Utterance.txt", dessen Inhalt kopierst du in das Feld: "Sample Utterances".

Amazon Developer Center: Interaction Model

Amazon Developer Center: Interaction Model

So sollte das ganze dann aussehen:

Amazon AWS - alle Slot Types angelegt

Amazon Developer - alle Slot Types angelegt

Nachdem du deine Fleißarbeit beendet hast klicke auf "Save", es wird das Build erstellt, das dauert eine Weile, danach geht es mit "Next" weiter.

Amazon Developer Configuration

Amazon Developer - Configutation

Amazon Developer - Configuration

Du hast es fast geschafft. In dieser Seite wählst du noch als Endpoint: "AWS Lambda ARN (Amazon Recource Name)" aus. Danach setzt du die Checkbox bei "Europe". In das Eingabefeld unter Europa kommt die "ARN" Nummer, welche du im AWS Account findest. Also wechsle nochmal zurück in deinen AWS Account. Wenn du in der Maske der vorhin erstellten Funktion bist, findest du die ARN Nummer ganz oben rechts.

Amazon AWS ARN Nummer

Amazon AWS ARN Nummer

Testen

Klicke nun auf "Save", nicht auf Next, dann dort gelangst du zu der Maske, um deinen Skill im Amazon Store freizugeben.

Wenn du nun alles richtig gemacht hast, frage Alexa doch ein paar Dinge - wie zum Beispiel:

Alexa, frage Fibaro wie warm ist es im Schlafzimmer ?

Alexa, frage Fibaro wie feucht ist es im Bad ?

Alexa, frage Fibaro welche Fenster sind offen ?

Alexa, sage Fibaro, stelle die Heizung im Wohnzimmer auf 24° für 30 Minuten.

Alexa, sage Fibaro, schalte die Lampen im Büro ein.

.. das Wort Fibaro ist natürlich durch dein eigenes Aktivierungswort zu ersetzen, welches du im Amazon Developer Center im Abschnitt "Skill Information" angegeben hast.

Hilf mit beim entwickeln!

Wie eingangs beschrieben, steckt dieser Skill noch mitten in der Entwicklung. Alexander, der Entwickler, kann natürlich nicht jedes Gerät zur Verfügung haben oder kommt auf die gleichen Fragestellungen, Aussagen ect wie Ihr. Postet doch bitte in den Kommentaren welche Funktionen Ihr umgesetzt haben möchtet- oder vielleicht schon habt. Alternativ könnt Ihr Fragen auch im Forum stellen, dort wird es wohl einfacher sein euch zu helfen, da Ihr dort auch Screenshots posten könnt. Einen Log findet ihr im Amazon AWS unter: Monitoring -> View logs in Cloudwatch. Wenn Ihr Probleme habt brauchen wir zwingend einen Screenshot des aktuellsten Logs.

Viel Spaß mit Alexa ;-)

Diesen Blogpost hat geschrieben ...

crissxcross

Chris, Gründer und Blogger von siio.
Gelernter IT-Systemelektroniker, seit vielen Jahren beruflich als Produktmanager im Smart Home unterwegs. Technikverliebter Familienvater, Apple Fan. Nach einigen Jahren Stadtleben wieder froh auf dem Land zu sein.

101 Kommentare

      • Und was kostet dann der Amazon AWS Account?
        habe da leider keine preise entdecken können.

        Und wird dieser account dann danach noch benötigt wenn mann dann alles fertig hat und nichts mehr verändern will?
        lg

        • Wenn ich es richtig gelesen haben sollte, kostet es nichts, solange man weniger als 1 Million Abfragen im Monat hat und auch den Dienst nicht mehr als 3,2 Millionen Sekunden im Monat nutzt.

          Man braucht das Konto jedoch weiterhin, bis Amazon seien Alexa-Schnittstelle ergänzt hat, dass man die Slots/Intents/utterances dynamisch befüllen kann.
          Dann könnte man das Skill direkt installieren.

  • Erstmal Mega Lob an den Entwickler! Und an das siio Team für das Tutorial.
    Funktioniert sehr gut. Was mir bisher aufgefallen ist:
    Alexa, wie feucht ist es im Bad: -> Antwort ist: Die Luftfeuchtigkeit im Raum Bad beträgt 63 Dollar / Unit
    Vielleicht kann man das Dollar / Unit noch durch Prozent / % ersetzen?

  • Guten Morgen,

    beim eintragen der Custom Slot Types kommt immer:

    Submit for Certification Next
    Error: There was a problem with your request: Unknown slot type 'ROOMTYPE' for slot 'Raumtyp'

  • Hi, vielen Dank für die super Anleitung. Werde es aber leider nicht testen da per NAT Port 80 benötigt wird :(
    Wollte mein Haus eigentlich nicht direkt ohne SSL in das Netz stellen :)
    Hoffen wir mal das Fibaro auch bald SSL auf der GUI unterstützen wird .....

      • Man könnte noch aufnehmen, dass ein Reverse Proxy hierfür eine gute Lösung wäre.
        Am einfachsten ist dies umzusetzen, wenn jemand ein Synology NAS daheim hat. Ansonsten funktioniert auch bestimmt ein RasbPi oder jeder andere kleine (Linux/Windows-)Server
        Somit lässt sich die Fibaro-API über HTTPS aufrufen.

  • Wird hier unbedingt das große Amazon Echo benötigt, oder genügt auch nur das kleine Echo DOT 2?

    würde es gerne mal testen aber ungern das große kaufen.

    LG

  • Hallo Zusammen,

    bei mir hat das ganze mit der neuen FIbaro ID nicht funktioniert! (E-Mail Adresse)
    Habe einen neuen Benutzer angelegt und es damit versucht, funktioniert ohne Probleme.

    lg. Beijonig

  • Hi erst einmal vielen Dank für den Skill, ich selber entwickel gerade einen SKILL in C#.

    Ich habe mir deinen Skill angeschaut und finde ihn sehr gut, nur den Satzbau könnte man ein bisschen verbessern.

    Wieso du aber nur den temperatureSensor ausliest wenn man das Wort "warm" verwendet, habe ich nicht ganz verstanden.

    TemperatureIntent Wie ist die Temperatur {Raumtyp} {Raum} in diesen Satz ließt du den Temperatursensor nicht aus?

    Grüße

    • Da verstehe dich leider nicht, was genau meinst du mit:
      "TemperatureIntent Wie ist die Temperatur {Raumtyp} {Raum} in diesen Satz ließt du den Temperatursensor nicht aus?"

      • HI,

        TemperatureIntent:

        if (typ==STATE_RESPONSES.Warm)
        In diesem Fall gehst du in diese Schleife und ließt die Temperatur meine Motion Sensor aus.

        Wenn man aber beim Utterance einen Satz nimmt ohne "typ = warm, kalt ...... " bekommt man die wärme nicht ausgelesen.

        Z.b: Wie ist die Temperatur {Raumtyp} {Raum}
        Hier ist der Raumtyp "im" und Raum "Keller" bekommt man keine Antwort von Alexa weil man nicht warm,kalt usw im satz vewendet.

        Sorry für die späte Antwort

        • Danke für die Erklärung!
          Welche Version von index.js hast du drauf.
          Bei mir sieht die Stelle seit ein paar Tagen so aus:
          if (typ==STATE_RESPONSES.Warm||typ==STATE_RESPONSES.Temperature)

          Und ich bekomme die Temperatur für den Raum genannt.

          • Muss wohl mal wieder updaten.

            Da ich dein Plugin sehr stark teste, könnten wir gerne auch Kontaktdaten austauschen, dann kann ich dir meine Meinungen besser zukommen lassen.

      • Hallo Alex,

        Erst einmal ein dickes Lob für diesen Skill! Hier meine entdeckten Probleme:
        Variablen auslesen und oder ändern funktioniert bei mir nicht. Es kommt die Antwort "Bei der Antwort des angeforderten Skill ist ein Problem aufgetreten" Danach beendet sich der Skill.
        Ich arbeite mit Master / Slave Gateways. Scheinbar kann er die Geräte auf dem Slave nicht finden. Benutze ich "schalte die Lichter...." kommt "es konnten keine Lichter im Raum.... gefunden werden. Mit Sensoren etc. ebenfalls. wie hell? wie warm?... Die Api gibt die Gerate aber aus! Ideen?

        • Gem. Log scheint es die Schreibweise zu sein. Meine Variablen beginnen mit einem Großbuchstaben. Im Log kommt die klein an. Rufe ich die über API in klein auf, geht das auch nicht. Nur die exakte Schreibweise geht.
          /api/globalVariables/Baden (bei mir)
          /api/globalVariables/baden (im Log)

          in der VARIABLENAMES aber korrekt geschrieben.
          Lege ich eine in klein an, kann ich den Status erfragen. Setzen aber nicht. Dann kommt "Der globale Wert $Value ist für die Globale Variable nicht gültig"

          • Das gleiche Problem habe ich auch. Groß- und Kleinschreibung ist sehr wichtig und der Code reagiert darauf SEHR sensibel :-(

  • Hallo. ich bekomme seit der neuen Version immer wenn ich den Skill starte als erstes : "Ein ungültiger Wert wurde erkannt". Frage ich dann nochmal zb. nach der Temperatur wird es korrekt angesagt... Ist das momentan so oder ist bei mir was falsch ? Gruß

    • Das habe ich auch gerade festgestellt und kann es mir noch nicht erklären.
      Es sieht so aus, als ob Alexa Probleme hat die Wörter "warm" oder "Temperatur" zu erkennen.
      Im Simulator klappt es ohne Probleme, wenn ich es spreche nicht immer.
      Ich untersuche es noch.

      • Hey. Danke für die Antwort. Sie sagt bei mir auch : folgende Türen und Fenster sind offnet.. ? :-) Hat glaube ich vorher schon mal richtig "geöffnet" gesagt. Bekomme auch keine Szene gestartet. Kommt immer : bei der Antwort des angeforderten Skills ist ein Problem aufgetreten. Ist das noch so im Moment ? Vielen Dank. Der Skill ist super und macht richtig Spaß. Top.

        • Kann ich nicht reproduzieren. Sind alle Slots up-to-date?

          Zu dem Problem bei den Szenen: Da hast du recht, da hat sich irgendwann ein Fehler eingeschlichen. Ist nun behoben.
          (zum selber beheben: es muss heißen: "var sceneName=intent.slots.Name.value;" und nicht "var sceneName=intent.slots".

  • Szenen funktionieren jetzt super. Nur bei der Frage : Alexa Frage Fibaro wie warm ist es im Badezimmer kommt noch das mit dem ungültigen Wert. Aber nur bei dieser Frage . ( wenn es um die Temperatur geht.) Bei Frage nach Bewegung - gibt es direkr eine korrekte Antwort... Gruß

  • Hallo und danke für diesen wirklich praktischen Skill und die ganze Arbeit! Nachdem ich mit meiner Fibaro ID zunächst gescheitert war, funktioniert der Skill nun mit einem separaten Account ziemlich gut. Das könnte vielleicht noch im Text angepasst werden, wo zwar ein klassischer Benutzer empfohlen, aber eine E-Mail Adresse bzw. ID zumindest nicht ausgeschlossen wird.

    Nun besitze ich meinen Echo erst seit heute und hätte daher noch eine Frage, die womöglich auch nichts mit dem Skill selbst zu tun hat: Nachdem ich ein Kommando ausgeführt habe, bleibt der Echo in Bereitschaft für weitere Kommandos an den Skill, sodass ich stets wieder abbrechen muss. Lässt sich dieses Verhalten anpassen?

    Danke vorab!

  • Prinzipiell wäre das möglich. Müsste ich aber noch einbauen, habe bisher nur die Unterstützung von Buttons drinnen.
    Hatte das bisher nicht weiter verfolgt, da es eigentlich sowieso irgendwann ein Sonos-Skill geben soll.
    Bzw für Sonos habe ich mein eigenes Skill bisher, das nicht über die HC2 arbeitet.

    Dennoch könnt eich die Slider-Unterstützung mit einbauen.

      • Hallo Alex,

        das ging aber schnell :-) Erstmal vielen Dank dafür!!!! Kannst du mir noch kurz sagen wie ich die ganze Sache aktualliesiere? Welche Dateien muss ich Tauschen bzw. Ersetzen?

        Lg. Beijonig

        • Habs gefunden! Steht ja bei GitHub hinter wann was geändert wurde (5 hours ago).

          Habe es grade getestet es funktioniert! Vielen Dank für die Umsetzung.

          Ist natürlich ein langer Satz um einfach nur lauter und leiser zu machen.
          Alexa sage Fibaro Stelle Slider Volume auf 30% im Modul Sonos Küche

          Aber immerhin eine Möglichkeit wenn mal keine Hand frei ist :-)

          Lg. Beijonig

          • Schön, dass es geklappt hat :)

            Das "Sage Fibaro" ist leider notwendig.

            Und kürzer geht leider kaum, man muss das Modul benennen, den Slider und den Wert.

            Theoretisch könntest du natürlich den Code auf feste Werte anpassen, dann würdest du dir Eingaben ersparen.

  • Hi Alex,

    Thanks for reaching out.
    Sure, I can help you out with the translation. Please bear in mind however, that I will use Google translator for that purpose so my translations may not be perfect. But this should be a good starting point.

    Could you shoot me an e-mail at contactmaciey (at) gmail (dot) com, so we can go over the details?

    Thanks,
    maciey

  • Hey,
    beim anlegen der AWS-Lambda-Function kann ich als Trigger nicht "Alexa Skill Kit" auswählen.
    Da gibt es nur :
    API Gateway
    AWS IoT
    CloudFront
    CloudWatch
    Cognito Sync
    DynamoDB
    Kinesis
    S3
    SNS

    Was ist zu Tun?

    Danke,
    Olaf

  • Hi, also in der index.js wurde wohl vor 3 Tagen etwas geändert.
    USER, PORT etc. wie in der Anleitung oben beschrieben wurde, gibt es in dem File nicht mehr.
    Kann da jemand mal nachschauen?

    Danke und Gruß
    Marco

  • Hey zusammen,
    hat jemand eine Idee wieso die Anfrage

    "Alexa, frage Fibaro wie ist die Temperatur im Schlafzimmer"

    eine richtige Antwort liefert und warum

    "Alexa, frage Fibaro wie warm ist es im Schlafzimmer"

    mit "ein ungültiger Wert wurde gefunden" beantwortet wird.
    Wenn man in die Utterance.txt schaut sollte der Intent

    TemperatureIntent Wie {Type} ist es {Roomtype} {Room}

    {Type} = warm
    {Roomtype} = im
    {Room} = Schlafzimmer

    eigentlich funktionieren.

    Gruß, Olaf

  • Könntest du dazu ins Log schauen und prüfen, was Alexa erkannt hat?

    Bzw unter developer.amazon.com beim Service Simulator diesen Satz eingeben und prüfen, was Alexa jeweils erkannt kann?

    Wenn diese Ausgabe kommt, bedeutet es, dass '{Type} = warm' so nicht erkannt wurde.

    • Hey, wenn ich den Satz im Simulator eingebe kommt auch die richtige Antwort.

      Hier ist dann der Log vom gesprochenen Satz

      START RequestId: 300d05d9-f3c7-11e6-8ca1-9d3117cbd320 Version: $LATEST
      2017-02-15T21:39:11.638Z 300d05d9-f3c7-11e6-8ca1-9d3117cbd320 session applicationId: amzn1.ask.skill.81313d28-4b07-45a7-8dde-0202110c052c
      2017-02-15T21:39:11.639Z 300d05d9-f3c7-11e6-8ca1-9d3117cbd320 EchoFibaro onSessionStarted requestId: amzn1.echo-api.request.4dcd7528-33be-4394-ad9e-959286dbff03, sessionId: amzn1.echo-api.session.9569cc6f-8521-40f9-ab6a-c75890842b92
      2017-02-15T21:39:11.639Z 300d05d9-f3c7-11e6-8ca1-9d3117cbd320 dispatch intent = TemperatureIntent
      2017-02-15T21:39:11.639Z 300d05d9-f3c7-11e6-8ca1-9d3117cbd320 TemperatureIntent received
      2017-02-15T21:39:11.639Z 300d05d9-f3c7-11e6-8ca1-9d3117cbd320 { Roomtype: { name: 'Roomtype', value: 'im' }, Type: { name: 'Type' }, Room: { name: 'Room', value: 'schlafzimmer' } }
      2017-02-15T21:39:11.679Z 300d05d9-f3c7-11e6-8ca1-9d3117cbd320 Room: schlafzimmer
      2017-02-15T21:39:11.679Z 300d05d9-f3c7-11e6-8ca1-9d3117cbd320 Typ: undefined
      2017-02-15T21:39:11.680Z 300d05d9-f3c7-11e6-8ca1-9d3117cbd320 Trying to find ID for room schlafzimmer
      2017-02-15T21:39:11.680Z 300d05d9-f3c7-11e6-8ca1-9d3117cbd320 Called getJsonRoomFromFibaro
      2017-02-15T21:39:11.858Z 300d05d9-f3c7-11e6-8ca1-9d3117cbd320 Rooms: [{"id":8,"name":"Wintergarten","sectionID":8,"icon":"User1001","defaultSensors":{"temperature":54,"humidity":0,"light":0},"defaultThermostat":0,"sortOrder":1},{"id":9,"name":"Diele","sectionID":8,"icon":"room_wardrobe","defaultSensors":{"temperature":33,"humidity":0,"light":0},"defaultThermostat":0,"sortOrder":2},{"id":10,"name":
      2017-02-15T21:39:11.858Z 300d05d9-f3c7-11e6-8ca1-9d3117cbd320 Parsing data to find room
      2017-02-15T21:39:11.858Z 300d05d9-f3c7-11e6-8ca1-9d3117cbd320 Ein ungültiger Wert wurde erkannt
      END RequestId: 300d05d9-f3c7-11e6-8ca1-9d3117cbd320
      REPORT RequestId: 300d05d9-f3c7-11e6-8ca1-9d3117cbd320 Duration: 222.41 ms Billed Duration: 300 ms Memory Size: 512 MB Max Memory Used: 30 MB

      Das ist der Log vom Simulator

      START RequestId: 6568cd6c-f410-11e6-83ac-a1d12a6a953c Version: $LATEST
      2017-02-16T06:23:14.533Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c session applicationId: amzn1.ask.skill.81313d28-4b07-45a7-8dde-0202110c052c
      2017-02-16T06:23:14.534Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c EchoFibaro onSessionStarted requestId: EdwRequestId.ab5bc1ae-6a1a-41e6-b842-774d768886c4, sessionId: SessionId.3e93b88c-ac11-48b8-bc7b-dae0487fe8ed
      2017-02-16T06:23:14.534Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c dispatch intent = TemperatureIntent
      2017-02-16T06:23:14.535Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c TemperatureIntent received
      2017-02-16T06:23:14.535Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c { Roomtype: { name: 'Roomtype', value: 'im' }, Type: { name: 'Type', value: 'warm' }, Room: { name: 'Room', value: 'schlafzimmer' } }
      2017-02-16T06:23:14.566Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c Room: schlafzimmer
      2017-02-16T06:23:14.566Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c Typ: warm
      2017-02-16T06:23:14.567Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c Trying to find ID for room schlafzimmer
      2017-02-16T06:23:14.567Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c Called getJsonRoomFromFibaro
      2017-02-16T06:23:14.749Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c Rooms: [{"id":8,"name":"Wintergarten","sectionID":8,"icon":"User1001","defaultSensors":{"temperature":54,"humidity":0,"light":0},"defaultThermostat":0,"sortOrder":1},{"id":9,"name":"Diele","sectionID":8,"icon":"room_wardrobe","defaultSensors":{"temperature":33,"humidity":0,"light":0},"defaultThermostat":0,"sortOrder":2},{"id":10,"name":
      2017-02-16T06:23:14.749Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c Parsing data to find room
      2017-02-16T06:23:14.750Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c Temperature
      2017-02-16T06:23:14.750Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c Called getJsonDataFromFibaro
      2017-02-16T06:23:14.864Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c Result: [{"id":466,"name":"TempBett","roomID":10,"type":"com.fibaro.temperatureSensor","baseType":"com.fibaro.multilevelSensor","enabled":true,"visible":true,"isPlugin":false,"parentId":463,"remoteGatewayId":0,"viewXml":false,"configXml":false,"interfaces":["battery","zwave","zwaveWakeup"],"properties":{"batteryLevel":100,"pollingTimeSe
      2017-02-16T06:23:14.864Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c Found one: 18
      2017-02-16T06:23:14.865Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c Called getJsonDataFromFibaro
      2017-02-16T06:23:14.979Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c Result: [{"id":66,"name":"HK_Schlafzimmer","roomID":10,"type":"com.fibaro.thermostatDanfoss","baseType":"com.fibaro.hvac","enabled":true,"visible":true,"isPlugin":false,"parentId":65,"remoteGatewayId":0,"viewXml":false,"configXml":false,"interfaces":["battery","zwave","zwaveProtection","zwaveWakeup"],"properties":{"batteryLevel":46,"pol
      2017-02-16T06:23:14.980Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c Found one: HK_Schlafzimmer
      2017-02-16T06:23:14.980Z 6568cd6c-f410-11e6-83ac-a1d12a6a953c Die Temperatur im Raum schlafzimmer beträgt 18 Grad. Das Thermostat steht auf 18.00 Grad.
      END RequestId: 6568cd6c-f410-11e6-83ac-a1d12a6a953c
      REPORT RequestId: 6568cd6c-f410-11e6-83ac-a1d12a6a953c Duration: 448.64 ms Billed Duration: 500 ms Memory Size: 512 MB Max Memory Used: 31 MB

      Ich hoffe das hilft weiter
      Gruß Olaf

      • Das was ich "befürchtet" habe, Alexa hat aus irgend einem Grund dein "warm" nicht erkennen wollen....
        Type: { name: ‚Type‘ }
        Hier fehlt: value: 'warm'

        War der gesprochene Satz wirklich zu 100% identisch zu dem eingegebenen? Falls nicht,, kann man ggf. was an den Utterances ändern.

        • Der Satz war genau so gesprochen und ich hab auch mal versucht die Geschwindigkeit zu ändern.
          Auch hab ich versucht das "warm" extrem deutlich auszusprechen.
          Hat aber nichts gebracht. Funzt es denn bei Anderen?

          Hab da noch ein anliegen. "warm" und "kalt" sollte beides gehen. Hab es in den "STATUSVALUE" hinzugefügt, aber im Simulator funzt es dann nicht.

          Der Satz: "Wie kalt Ist es im kühlschrank" führt zur Service Response

          {
          "version": "1.0",
          "response": {
          "outputSpeech": {
          "type": "PlainText",
          "text": "Ein ungültiger Wert wurde erkannt"
          },
          "shouldEndSession": true
          },
          "sessionAttributes": {}
          }

          "Wie warm ist es im Kühlschrank" gibt die richtige Temperatur aus.

          • OK, es reicht nicht die STATUSVALUE anzupassen auch index.js und languagefile.js muss auch angepasst werden.
            Jetzt funzt es mit dem Simulator, ob auch die Sprache geht muss ich heute Abend testen.

  • Hi!
    Klasse tutorial, danke fürs teilen!
    Bevor ich mich dran mache, habe ich aber ein paar grundsätzliche Fragen:
    Ich besitze Alexa und würde gerne mit Ihr die Haustechnik steuern. - Dabei geht es mir eher um Kommandos an die Aktoren, weniger um Status-Abfragen.
    - Wenn ich die Abfragen nicht brauche, macht es trotzdem Sinn dieses Skill zu benutzen? - Mich würde z.B. eher stören, wenn ich jedesmal sagen muss: "Alexa SAG FIBARO..." - Mir wäre es viel lieber ich würde einfach sagen "Alexa, Licht im Wohnzimmer an".
    - Kann dies dieses Skill oder sollte ich dann lieber den anderen Weg (über Rasperry Pi) gehen?
    - Oder lieber auf die offizielle Implementierung durch Fibaro warten?
    - Ich möchte auch ungewöhnliche Dinge (z.B. über einen IR Extender) automatisieren. Brauche ich für solche Dinge solch ein Skill, da die offizielle Anbindung eher Standard-Befehle erkennen wird?
    Andere Frage bzgl. des öffnen des Ports 80:
    - Anscheinend kann man sich dann leichter ins System einhacken. - Kann der Angreifer dann nur ins HC2 oder auch leichter andere Computer im selben Netzwerk angreifen? - Wenns nur der HC2 wäre, würde ich das Risiko eingehen.
    Vielen Dank für Eure Antworten, Gerd

    • Hi...

      komme mal direkt zu deinen Fragen:

      1. Bei diesem Skill musst du immer den Zusatz mit Fibaro nutzen. Möglicherweise ist dies aber auch bei dem offiziellen Fibaro-Skill so. Weiß man derzeit leider nicht...
      2. Nein, da musst du den anderen Weg gehen.
      3. Siehe oben ^^
      4. Dafür brauchst du solch ein Skill. Wie die offizielle Anbindung kann dir leider keiner sagen. Vielleicht funktioniert dies dort ohne Probleme.
      5. Du öffnest damit dein gesamtes Netzwerk. Die Port-Freigabe muss ja auf deinem Router durchgeführt werden, wodurch dieser natürlich angreifbar wird.

      Gruß

      • Zu 5.) würde ich raten, einen Reverse Proxy mit HTTPS Zugriff und Authentifizierung einzurichten, am einfachen ist das, wenn du schon einen "Server" (Synology NAS, Raspberry Pi" daheim hast.
        Genau auf diesem Server würde ich dann zur Steuerung die HABridge installieren, solange es noch nicht das Skill von Fibaro gibt.

  • Falls jemand keinen Benutzer nutzen möchte, sondern seinen Admin-Account wird Probleme bekommen, de der Benutzername nun in Form einer E-Mail-Adresse ist.

    Damit dies im Skill funktioniert, kann man in options.js folgende Änderung machen:

    Aus der Zeile:
    'Authorization': 'Basic ' + new Buffer(encodeURIComponent("BENUTZERNAME") + ":" + encodeURIComponent("PASSWORT")).toString("base64"),
    in das hier ändern:
    'Authorization': 'Basic ' + new Buffer("EMAILADRESSEOHNEENCODING:PASSWORT").toString("base64"),

    Also beispielsweise:
    'Authorization': 'Basic ' + new Buffer("support@fibaro.com:supportme").toString("base64"),

    encodeURIComponent oder die Änderung vom @-Zeichen in "%40" würde die Anmeldung scheitern lassen.

  • Hi,

    ich bekomme beim letzten Punkt folgende Fehlermeldung:

    Error: Please make sure that "Alexa Skills Kit" is selected for the event source type of arn:aws:lambda:eu-west-1:911768899111:function:Fibaro

    Kann jemand helfen?
    Gruß
    Marco

  • Hi
    I get the error

    Error: There was a problem with your request: Unknown slot type 'SCENENAMES' for slot 'Name'

    Using the English version files

  • in the amazon developer console
    I have inputted the 18 slot files modified the content to my devices
    and put in the intent and utterance files
    when i press next that when i get the error

  • Thanks for that removed the SLOT_ did all the other steps
    when i enter in the service simulator test "ask hal to turn off gym light" i get as a service request "The remote endpoint could not be called, or the response it returned was invalid."

    {
    "session": {
    "sessionId": "SessionId.d6d37baf-fa52-4656-8447-b4a6637f93bb",
    "application": {
    "applicationId": "amzn1.ask.skill.6528c449-b989-4017-8b3a-78bc278c12f1"
    },
    "attributes": {},
    "user": {
    "userId": "amzn1.ask.account.AEPG2ORNABEBD7TUJZ5NOWASZCGH4HFYEHLFEJF3DFA2YF3DVWTD7AI2UZJ437YNBLFIIJOXYWOYDPQS5CQKQRZTXC7D4OXWTR53JO4GQOSTHNUSUA3U2GXSHDZDTHX7RCP4RKWZVXCPC67I6JIRQBUVLB4RKRCOR2UUITW2M4LWMPWYQ5PHR7YVFRL2TWW35WMC3W4MSQ7W5GY"
    },
    "new": true
    },
    "request": {
    "type": "IntentRequest",
    "requestId": "EdwRequestId.220b7fae-6bbd-4549-ab58-70d2d6aa31cb",
    "locale": "en-GB",
    "timestamp": "2017-03-02T12:31:16Z",
    "intent": {
    "name": "SwitchIntent",
    "slots": {
    "Status": {
    "name": "Status",
    "value": "off"
    },
    "Device": {
    "name": "Device",
    "value": "gym light"
    },
    "Yesno": {
    "name": "Yesno"
    },
    "Devicetypes": {
    "name": "Devicetypes"
    }
    }
    }
    },
    "version": "1.0"
    }

    • Good to hear that it fianlly worked. Also the reqest looks fine too.
      Can you have a look at the log (https://eu-west-1.console.aws.amazon.com/cloudwatch/home)?

      But what is actually wrong is that the SwitchIntent has been choosen. It should be the LightIntent. So there might be something wrong with the english utterances.
      It might help if you add something similar like:
      LightIntent Turn {Status} {Light} {Lighttype}

  • i changed the request to
    ask hal to dim gym light 10%
    got the same response "The remote endpoint could not be called, or the response it returned was invalid."
    in log
    2017-03-02T12:56:39.613Z ad43eec5-ff47-11e6-92c5-25e3384ae96d Unexpected exception Invalid applicationId

    {
    "session": {
    "sessionId": "SessionId.e05ed16b-1210-41bd-b5ca-3a0fd6cfa08f",
    "application": {
    "applicationId": "amzn1.ask.skill.6528c449-b989-4017-8b3a-78bc278c12f1"
    },
    "attributes": {},
    "user": {
    "userId": "amzn1.ask.account.AEPG2ORNABEBD7TUJZ5NOWASZCGH4HFYEHLFEJF3DFA2YF3DVWTD7AI2UZJ437YNBLFIIJOXYWOYDPQS5CQKQRZTXC7D4OXWTR53JO4GQOSTHNUSUA3U2GXSHDZDTHX7RCP4RKWZVXCPC67I6JIRQBUVLB4RKRCOR2UUITW2M4LWMPWYQ5PHR7YVFRL2TWW35WMC3W4MSQ7W5GY"
    },
    "new": true
    },
    "request": {
    "type": "IntentRequest",
    "requestId": "EdwRequestId.1f5dac3a-9b2d-4aa6-baa7-474d58e81a12",
    "locale": "en-GB",
    "timestamp": "2017-03-02T12:56:39Z",
    "intent": {
    "name": "LightIntent",
    "slots": {
    "Status": {
    "name": "Status"
    },
    "Roomtype": {
    "name": "Roomtype"
    },
    "Light": {
    "name": "Light",
    "value": "gym light 10%"
    },
    "Roomtwo": {
    "name": "Roomtwo"
    },
    "Lighttwo": {
    "name": "Lighttwo"
    },
    "Room": {
    "name": "Room"
    },
    "Lighttype": {
    "name": "Lighttype"
    }
    }
    }
    },
    "version": "1.0"
    }

    • Why do you get an "Invalid applicationId" now? You did not have this error before.
      Also in the simulator you must enter "ten percent" instead of "10%" I think.

  • Sorry, I don't know if there are any problems with engliush US or UK.
    So you tried to replace "10%" by "ten percent"?
    Is must have something to do with the english version (or files), the german one is running fine, just tested it right now.

  • Hallo,

    ich bin wohl aktuell mit Blindheit geschlagen.
    Leider finde ich im index.js die Zeile nicht wo der Port, User etc. eingegeben werden müssen.

    Hat vielleicht jemand die Zeile für mich?

    Danke Andreas

  • Moin, ich habe den Fehler
    Unexpected Communication Issue

    Request Identifier: amzn1.echo-api.request.ba.........d5
    There was a problem communicating with the requested skill.

    Jemand eine Idee, an welcher Stelle es klemmen könnte bzw. einen Tipp, wie man in dieser Amazonumgebung überhaupt Fehler suchen kann?

  • Hi,
    Vielen Dank für die Mühe eine so Detaillierte Anleitung zu erstellen.

    Ich hänge leider am Punkt Slot Types: Nachdem ich alle Slots Ordnungsgemäß eingetragen habe und auch die Feder „Interaction Model“ und „Sample Utterances“ wie beschrieben befüllt habe, bekomme ich beim Versuch zu speichern fogenden Fehler:

    Error: There was a problem with your request: Unknown slot type 'SCENENAMES' for slot 'Name'

    was mache ich falsch? Weis jemand einen Rat?

    Grüße, Jürgen

  • Was mache ich denn falsch, wenn ich die Fehlermeldung erhlate "The remote endpoint could not be called, or the response it returned was invalid."
    Ich bin im Serive Simulator und rufe eine "Utterance" auf: starte szene test123.
    Die Szene test123 gibt es natürlich in meiner HC2. Und meine HC2 ist auch per DynDNS mit Port-Weiterleitung erreichbar. Das habe ich manuell getestet.
    Habt ihr eine Idee? Das Verhalte kann ich auch für andere Fragen bzw Anweisungen reproduzieren.

    Die Fehlermeldung in CloudWatch schaut folgendermaßen aus:
    2017-08-01
    No older events found at the moment. Retry.

    19:35:52
    START RequestId: a0c9606f-76f0-11e7-8e64-193c2f837076 Version: $LATEST
    START RequestId: a0c9606f-76f0-11e7-8e64-193c2f837076 Version: $LATEST

    19:35:52
    2017-08-01T19:35:52.609Z a0c9606f-76f0-11e7-8e64-193c2f837076 session applicationId: amzn1.ask.skill.08571be9-dbaa-4b88-9940-662cfd8823e2
    2017-08-01T19:35:52.609Z a0c9606f-76f0-11e7-8e64-193c2f837076 session applicationId: amzn1.ask.skill.08571be9-dbaa-4b88-9940-662cfd8823e2

    19:35:52
    2017-08-01T19:35:52.609Z a0c9606f-76f0-11e7-8e64-193c2f837076 EchoFibaro onSessionStarted requestId: EdwRequestId.868d4c16-e7c8-47de-9d63-139972c54f0c, sessionId: SessionId.8ef7fca1-9424-4b5e-991a-e09469cb6306
    2017-08-01T19:35:52.609Z a0c9606f-76f0-11e7-8e64-193c2f837076 EchoFibaro onSessionStarted requestId: EdwRequestId.868d4c16-e7c8-47de-9d63-139972c54f0c, sessionId: SessionId.8ef7fca1-9424-4b5e-991a-e09469cb6306

    19:35:52
    2017-08-01T19:35:52.610Z a0c9606f-76f0-11e7-8e64-193c2f837076 Unexpected exception Unsupported intent = SceneIntent
    2017-08-01T19:35:52.610Z a0c9606f-76f0-11e7-8e64-193c2f837076 Unexpected exception Unsupported intent = SceneIntent

    19:35:52
    2017-08-01T19:35:52.611Z a0c9606f-76f0-11e7-8e64-193c2f837076 {"errorMessage":"Unsupported intent = SceneIntent"}
    2017-08-01T19:35:52.611Z a0c9606f-76f0-11e7-8e64-193c2f837076
    {
    "errorMessage": "Unsupported intent = SceneIntent"
    }


    19:35:52
    END RequestId: a0c9606f-76f0-11e7-8e64-193c2f837076
    END RequestId: a0c9606f-76f0-11e7-8e64-193c2f837076

    19:35:52
    REPORT RequestId: a0c9606f-76f0-11e7-8e64-193c2f837076 Duration: 4.37 ms Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 36 MB
    REPORT RequestId: a0c9606f-76f0-11e7-8e64-193c2f837076 Duration: 4.37 ms Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 36 MB

Gib deinen Senf dazu!

Cookie Consent mit Real Cookie Banner