alexa-fhem: amazon alexa smart home skill für fhem

Begonnen von justme1968, 05 November 2016, 23:21:32

Vorheriges Thema - Nächstes Thema

visionsurfer

@retikulum

Ja klar, aber das bringt mir doch nichts. Ich will doch auf Basis der Weckzeit verschiedene Aktionen starten lassen.
Aktuell stelle ich den Wecker durch Spracheingabe im Tablet. Somit hab ich 3 Geräte im Schlafzimmer. Sonos, Tablet, Alexa. Wäre schön, wenn ich mir das Tablet zumindest sparen könnte und man später dann auch über Alexa eine Weckzeit in FHEM stellen kann. Vielleicht in der Art: Alexa, sag FHEM stelle Weckzeit auf 7 Uhr. Wobei "Alexa, stelle Wecker auf 7 Uhr" noch cooler wäre. Aber das wird dann wahrscheinlich nicht in FHEM ankommen.

Grüße,
Visionsurfer

retikulum

Verstehe.

Zitat"Wobei "Alexa, stelle Wecker auf 7 Uhr" noch cooler wäre. Aber das wird dann wahrscheinlich nicht in FHEM ankommen."
- Dürfte nur dann gehen (wenn es mit der Wecker-Funktion mal soweit ist), wenn du den Skill gestartet lässt. Also einmalig "Alexa, start fhem". Und ab dann nur noch "Alexa, stelle Wecker ...", "Alexa, Schalte Licht aus", etc.
Aber ja, ich weiß was du meinst.

justme1968

es gibt einen extra datentyp für die uhrzeit.

alexa, sag fhem stelle den wecker auf xy uhr

muss ich mal probieren.

sollte kein problem sein.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

visionsurfer

Wäre super. Ich nutze aktuell die Weckautomation vom fhem residents Modul. Also wenn ich dort die Weckzeit per Alexa anlegen könnte, wäre das sehr hilfreich. Aktuell mach ich das über Spracheingabe mit dem Tablet und AMAD.

Grüße,
Visionsurfer

EnderPhilipp

¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot

Fowler

Die Idee die Lampen in einer Lightscene zu bündeln und zu schalten funktioniert schon einmal (mittels readingsProxy).
Danke für die coole Idee.

Bei den Lightscenes gibt es ja aber viele verschiedene Einstellmöglichkeiten, könnte man die Szenen Namen irgendwie übergeben? Bzw. irgendwie einen Switch mit mehreren Zuständen über Alexa steuern? Oder gäbe es da einen passenderen Device-Type?

Joker

Zitat von: justme1968 am 14 Dezember 2016, 10:20:27
@Joker: der smart home skills kennt nur die geräte (alexa) namen und die in der alexa app konfigurierten räume.
Danke, habe da gerade mal experimentiert und ich versteh es noch nicht ganz. Welche Räume sind gemeint? Ich habe aktuell drei Geräte (alles Lampen) die der Smart Home Skill auch findet: "Deckenlampe", "Lowboard", "Steinwand".
Wenn ich nun sage "Schalte die Deckenlampe ein", dann geht ohne Rückmeldung der blaue Ring am Dot aus und es passiert gar nichts.
Dann habe ich eine Gruppe "Wohnzimmer" definiert (ist das mit "Räume" gemeint?), und alle drei Geräte darin aktiviert.
Wenn ich nun sage "Schalte im Wohnzimmer die Deckenlampe ein", dann gehen alle drei Geräte an, was ich ja nicht will. In der Beschreibung von den Gruppen steht aber in der App auch dass es gedacht ist um mehrere Geräte gleichzeitig zu schalten.
Was mach ich da jetzt falsch..?

visionsurfer

@Fowler
@justme1968

Also ich habe heute Abend noch mal Tests gemacht.

Ich hab nun im Alias zwei Wörter drin "szene entspannen" oder "szene kochen".

Ich kapiere nicht warum, aber Alexa scheint ein Problem mit dem Begriff "kochen" zu haben.

Wenn ich z.B. sage "Alexa, schalte szene entspannen ein", startet sofort meine entsprechende Szene. Wenn ich sage "Alexa, schalte szene entspannen aus", wird das Licht der entsprechenden Szene, bzw. die Geräte ausgeschaltet. PERFEKT.

Wenn ich meine andere Szene nehme klappt es nicht. Wie geschrieben habe ich das Alias "szene kochen" genannt. Sag ich nun "Alexa, schalte Szene kochen ein", wird die entsprechende Szene auch gestartet. Sag ich aber "Alexa, schalte Szene kochen aus". passiert gar nichts. Benenne ich das Alias von "Szene kochen" um auf "Szene wasser" (einfach so zum probieren), klappt alles perfekt. Die Geräte schalten ein und wenn ich sage "Alexa, schalte Szene Wasser aus", schalten auch die Geräte wieder aus. Ich lasse es ja über das ReadingProxys einfach bei OFF auf die entsprechende Szene bringen blablabla_end. In der _end Szene hab ich halt alle Geräte als OFF eingestellt, bzw. so eingestellt wie ich sie am Ende haben will.

Ich kapiere nicht, warum "kochen" nicht arbeitet ?

Kann es eventuell was damit zu tun haben, das ich in meiner Küchen 3 Events haben ? Also kochen, vorbereiten und ende. Im Schlafzimmer wo es perfekt funktioniert habe ich nur 2 Events. Also start und ende.

@Fowler
Wie hast du das mit den Szene gemacht ? Wie definierst du das bei dir so ?

Grüße,
Visionsurfer

Fowler

@visionsurfer
Ich habe bei mir eine lightscene die unter anderem die scenes "TV" (alle Lampen an) und "AUS" (alle Lampen aus) beinhaltet.

Ich habe dann für die lightscene noch einen readingProxy eingerichtet:


define HUE_PROXY readingsProxy HUE_SCENES:state
attr HUE_PROXY alias Fernsehen
attr HUE_PROXY genericDeviceType switch
attr HUE_PROXY room alexa
attr HUE_PROXY setFn {($CMD eq "on")?"scene TV":"scene AUS"}
attr HUE_PROXY setList on off
attr HUE_PROXY valueFn {($VALUE == "TV")?"on":"off"}


Dann kann ich mit "alexa schalte Fernsehen ein" bzw. "alexa schalte Fernsehen aus" das Licht ein und ausschalten.

Vielleicht hilft dies dir weiter.

visionsurfer

Hi,

Ok. Also hast du auch nur 2 Events. Interessant wäre zu wissen, ob es immer noch geht, wenn man 3 Events in lightscene definiert. Oder sogar noch mehr. Aktuell hast du 2 Events. An und aus. Das dritte könnte sein dimm 50%, oder so.

Ansonsten hab ich kein Plan mehr, warum er insbesondere beim ausschalten von kochen Stress macht.

Grüße
Visionsurfer

justme1968

es gibt keine mehrfach schalter. sondern nur ein bzw. aus. das bedeutet man braucht pro szene oder activity einen readingsProxy. in deinem beispiel bräucht man zwei readingsProxys. einen mit ein und aus und einen mit 50% und aus.

zum wecker: der version die ich hier habe kann ich mit drei zeilen konfiguration das setzen einer weckzeit beibringen:define wecker dummy
attr wecker genericDeviceType wecker
attr wecker homebridgeMapping Weckzeit=state,cmd=+

attr alexa alexaMapping ... Weckzeit=verb=stelle,valuePrefix=auf;für,values=AMAZON.TIME,valueSuffix=uhr ...


danach kann man dem custom skill sagen stelle den wecker auf 7 uhr 15 oder stelle den wecker für 7 uhr 15 und die zeit wird im dummy gesetzt als 07:15.


das ganze könnte man auch auf 'stelle einen wecker für ...' und 'lösche den wecker für ...' erweitern um mehrere weckzeiten zu setzen. zum verwalten der liste müsste man sich dann etwas code für 99_myUtils schreiben.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

#851
so ...

hier eine erste version des konfigurierbaren custom skills.

die prinzipielle beschreibung wie das konfigurieren funktioniert gab es hier:https://forum.fhem.de/index.php/topic,60244.msg532513.html#msg532513

wie dort schon geschrieben geht es erst mal um die kommandos an fhem. die status abfrage ist aber auch schon etwas weiter aufgebohrt.

zum testen kann man z.b. so etwas als alexaMapping verwenden:On=verb=schalte,valueOn=an;ein,valueOff=aus,valueToggle=um

Brightness=verb=stelle,valuePrefix=auf,values=AMAZON.NUMBER,valueSuffix=prozent

TargetPosition=verb=mach,articles=den,values=auf:100;zu:0
TargetPosition=verb=stelle,valuePrefix=auf,values=AMAZON.NUMBER,valueSuffix=prozent

Hue=verb=stelle,valuePrefix=auf,values=rot:0;grün:128;blau:200
Hue=verb=färbe,values=rot:0;grün:120;blau:220

TargetTemperature=verb=stelle,valuePrefix=auf,values=AMAZON.NUMBER,valueSuffix=grad

Weckzeit=verb=stelle,valuePrefix=auf;für,values=AMAZON.TIME,valueSuffix=uhr


nach dem man alexaMapping im alexa device gesetz hat kann man mit get <alexa> interactionModel die daten für das Interaktion model abfragen und mit get <alexa> customSlotTypes zusätzliche custom slots die man auch noch eintragen sollte. letzteres liefert nur dann ein ergebniss wenn alexa-fhem auch läuft.


der umbau der interaktion model vom alten auf den aktuellen custom skills ist leider etwas umständlich. am besten zuerst Intent Schema und Sample Utterances komplett leeren und speichern, dann alle Custom Slot Types entfernen, dann die neuen Custom Slot Types aus den beiden get von oben neu anlegen, dann Intent Schema und Sample Utterances mit dem ergebniss aus dem get interactionModel füllen und speichern.

leeres Intent Schema sieht so aus:{
   "intents" : [
   ]
}


edit: 2016-12-16: update mit ein paar kleineren bug fixes und der möglichkeit auch mehrere rolläden auf ein mal zu steuern.

edit: 2016-12-17:
- intern einiges umgebaut
- alexaTypes eingebaut
- neues schlüsselwort perfect im alexaMapping
- bessere bestätigungs texte
- bei mehreren gleich benannten geräten fragt alexa welcher raum gemeint war
- scope in config.json

edit: 2016-12-18:
- fix für geräte die in mehreren räumen sind
- maxValue und minValue werden berücksichtigt.

edit: 2016-12-19:
- fix für FHEM_xyY2rgb absturz
- unterstützt das fhemIntents attribut
- statt = kann jetzt auch : nach dem characteristic und namen verwendet werden.
- beim ändern der alexa device attribute werden diese automatisch von alexa-fhem neu eingelesen

edit: 2017-01-08:
- bessere interaktion zwischen dem alexa modul und alexa-fhem
- einstellbare gesprächigkeit bei antworten: alexaConfirmationLevel attribut
- über mehrere skills und/oder accounts die möglichkeit echos einem default raum zuzuordnen
  an die applicationId und/oder oauthClientID mit : anhängen. es sind jeweils mehrere ids mit , getrennt möglich.
  achtung: alle im gleichen string! 
- bessere antworten wenn ein gerät in mehreren räumen ist (z.b.: küche,ergeschoss)
- antworten mit temperaturen als dezimal zahl gehen jetzt
- leerzeichen können in alexaMapping und homebridgeMapping jetzt überall durch + maskiert werden
- bei mehreren intents mit identischem verb ist der name der eigenschaft um die es geht mit konfigurierbar.
   d.h. stelle die Helligkeit ..., stelle die Farbe ... und stelle die Sättigung ... ist konfigurierbar und unterscheidbar
   property= schlüsselwort im alexaMapping
- interne änderungen für das nächste update mit konfigurierbaren fragen
- noch ein paar kleinigkeiten mehr


edit 2017-02-10:
- fhem intents der art
  {meineSub()}=guten morgen und set|get|attr <device> xyz=gute nacht
  sind jetzt möglich. die rückgabe des jeweiligen kommandos wird als antwort für alexa verwendet
  d.h man kann damit beliebige texte aus fhem an alexa zurück geben.
- alexaConfirmationLevel 0 ist möglich wenn ein der skill mit alexa, sage fhem ... aufgerufen wird
- der fehler das in der antwort alle valuePrefixe eines intents gesagt wurden ist behoben

edit 2017-02-19:
- csrfToken support für fhem 5.8
- bug fix: + (d.h. leerzeichen) in values
- port parameter in alexa configuration
- webname paramter in der FHEM connection konfiguration

edit 2017-04-10:
- slots für fhemIntents -> hier: https://forum.fhem.de/index.php/topic,67490.msg589378.html#msg589378 beschrieben
- neues attribut echoRooms um für den custom skill einzelne echos einem default raum zuzuordnen
  dieser wird verwendet wenn im kommando kein raum angegeben wird
- neue readings echoId und echoRoom
- $_echoId und $_echoRoom für fhem intents mit slots

edit 2017-04-16:
- fix für fehlende echo id im event von amazon
- fit für batterie status, ausgabe von fenster und contact sensor status

edit 2017-04-26:
- fix für unbenutztes echoRoom attribut
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

MadMax-FHEM

Hi justme1968!

Tolle Arbeit!

Jetzt wird es Zeit, dass Weihnachten kommt und ich endlich Zeit finde mal einen custum skill einzurichten... :-)
...meine Harmony Elite müsste auch bald kommen und dann kann's so richtig los gehen... :-)

Immer nur eine Teststeckdose schalten ist dann (nach den ersten Glücksgefühlen) doch auch langsam langweilig... ;-)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

xanker

Ich weiß nicht ob die Idee schon aufgekommen ist, ich glaube aber nicht: Es müsste doch im Prinzip möglich sein, ALLE erkannten Strings von http://alexa.amazon.de/spa/index.html#settings/dialogs abzugreifen? Alle erkannten Strings werden dort "gepusht", es ist also kein Reload nötig. Logischerweise müsste man dann die Interpretation der Strings auf der FHEM Seite machen, aber es wäre eine super Ergänzung um in FHEM z.B. auch auf "mach lauter/leiser" oder "Rollo hoch/runter" zu reagieren (natürlich mit zusätzlichem Konfigurationsaufwand)
Maintainer vom flex Style.
Intel NUC mit fhem in Docker Container | Homematic | SIGNALduino 433MHz | HUE Bridge | Harmony HUB | lepresenced | alexa-fhem ...

justme1968

#854
nein. das geht nicht wirklich. zum einen landen dort nicht alle erkannten strings, die die dort landen tun es zum teil mit deutlicher verzögerung und ohne konfigurierten skill erkennt alexa sowieso nichts. wenn man den skill aber sowieso braucht kann man auch die amazon intelligenz nutzen. es gibt keinen grund etwas auf fhem seite zu interpretieren. das macht amazon doch viel besser.

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968