alexa-fhem: amazon alexa smart home skill für fhem, api version 3

Begonnen von justme1968, 19 Dezember 2017, 22:16:30

Vorheriges Thema - Nächstes Thema

justme1968

@juemuc: ich habe leider keine idee was hier schief geht. irgendetwas passt mit der event verarbeitung nicht.
vielleicht mags du mal rudi fragen ob es bei den events für die arm gerate irgendwelche besonderheiten gibt.

@Brad Majors: deine beispiel zeile macht doch genau das was du willst. was geht denn nicht? du brauchst für jede szene ein eigenes device mit homebridge mapping. readingsProxy ist besser als dummy.

in einem der nächsten updates wird es direkten szenen support in alexa-fhem geben. dauert aber noch.

@Reinhart: so weit ich das sehe gilt das alles nur für einen custom skill und nicht für einen smart home skill.

der alexa-fhem custom skill gibt schon text informationen zurück die in der alexa app als cards auftauchen. sind die auf den echos mit display zu sehen?

ansonsten: ha klar könnte man hier mehr einbauen. da ich aber keinen echo mit display habe hat das erst mal niedrige priorität :). falls es mich überkommt und ich doch noch einen echo spot kaufe könnte es schneller gehen.

aber bevor ich mir das anschaue möchte ich eigentlich erst mal die notifications und den proxy einbauen. zu den notifications habe ich habe inzwischen rückmeldung von amazon das hier scheinbar noch etwas nicht stimmt und sie sich melden. keine ahnung wie lange das dauert.


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

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

Reinhart

#196
Zitat von: justme1968 am 28 Januar 2018, 20:08:26
@Reinhart: so weit ich das sehe gilt das alles nur für einen custom skill und nicht für einen smart home skill.

der alexa-fhem custom skill gibt schon text informationen zurück die in der alexa app als cards auftauchen. sind die auf den echos mit display zu sehen?

ansonsten: ha klar könnte man hier mehr einbauen. da ich aber keinen echo mit display habe hat das erst mal niedrige priorität :) . falls es mich überkommt und ich doch noch einen echo spot kaufe könnte es schneller gehen.

aber bevor ich mir das anschaue möchte ich eigentlich erst mal die notifications und den proxy einbauen. zu den notifications habe ich habe inzwischen rückmeldung von amazon das hier scheinbar noch etwas nicht stimmt und sie sich melden. keine ahnung wie lange das dauert.

Danke für die schnelle Antwort!

Ja ich habe den Custom Skill gemeint, weil ich ja damit die Messwerte zusammen baue und ausgebe. Und ja ist korrekt, Cards sind am Display zu sehen.
Ich muss mir einmal den Google-Skill genauer anschauen, der kann schon gleichzeitig Texte ausgeben.
Somit läßt sich das Ding auch als formschöner Monitor verwenden und es ist ein tolles Feedback wenn man das gesprochene auch als Ergebnis sieht.

LG
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

Reinhart

#197
ich habe mir jetzt deinen Code in der Server.js selber angesehen und festgestellt das du ja schon teilweise die Textausgabe vorbereitet hast, zumindest waren noch Teile für die Ausgabe enthalten.

    var response = { version: '1.0',
                     sessionAttributes: {},
                     response: {
                       outputSpeech: {
                         type: 'PlainText',
                         text: 'Hallo.'
                       },
                       card: {
                         type: 'Simple',
                         title: 'Smarthome',
                         content: ''
                       },
                       shouldEndSession: !in_session
                     }
                   };

ich habe mir jetzt die Server.js um die card erweitert.

response.response.card.content = result;
die Textübergabe im Code habe ich dann so gemacht, das schwierige für mich war eigentlich nur die richtigen Stellen zu finden da ich ja keine Ahnung von Java Script habe.

Aber ich bin mit dem Ergebnis schon sehr zufrieden, jetzt versuche ich noch Icons zu platzieren und den Text besser zu formatieren wenn möglich.

LG
Reinhart

FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

justme1968

das schaut doch gut aus.

wenn du eine version hast die von dir aus ok ist packe ich es ins nächste update mit rein.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rs

Bitte um etwas Nachhilfe. Stehe am Anfang und komme nicht weiter mit den Skills anlegen, da das Wiki von der aktuellen AWS Version sich unterscheidet. Für euch ist das bestimmt ein klacks, was für mich ein ShowStopper ist.

Habe die Wikis und auch dieses gelesen und die 4.4 installiert. Der Alexa Daemon läuft auch fehlerfrei nach dem booten.
So dass ich nun die Skills anlegen will, leider falle ich damit auf die Nase und bekomme immer Fehlermeldungen mit den ich nix anfangen kann bzw. nirgends beschrieben sind.

Smart Home Skill:
- Was ist der Default Endpoint?

Ohne den kann ich den Skill nicht anlegen ...


Gruss & Dank
ROland

rpi3+ & RaspBee | Phillips, Osram, IKEA, SIlvercrest Devices | FHEM 6.2 | Echo Show 15 | Yamaha YAS| LG TV | Ubuntu 22.04 - NextCloud 27 - OpemVPN - Wordpress - NAS - ...

Reinhart

steht im Wiki unter "SmartHome Skill anlegen" Punkt 4:

Auf der Seite Configuration Folgendes eingeben:
Service Endpoint Type -> AWS Lambda ist vorausgewählt und kann nicht geändert werden.
Geographical Region -> Europe auswählen und im Textfeld die ARN aus Abschnitt AWS Lambda Funktion eintragen.


Im AWS anmelden und auf Lambda klicken, dann FHEM auswählen das du bereits angelegt hast und rechts oben steht die ARN.

arn:aws:lambda:eu-west-1:xxxxxxxxxxxx:function:FHEM

LG
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

Allodo

Hallo,

ich habe ein Problem mit der Steuerung meiner Rollläden und alexa-fhem. Wohnzimmerlicht ist kein Problem.

Die Rollläden werden über Homematic-Aktoren angesprochen und die Steuerung per FHEM funktioniert einwandfrei.

Nur per alexa-fhem irgendwie nicht. Entweder kennt Alexa diese nicht, obwohl der Name richtig genannt wurde, oder sie fahren nicht komplett hoch bzw. runter :(

Hier mal exemplarisch der Auszug aus der fhem.cfg für meine Esszimmerrolllade:
define RolloEsszimmer CUL_HM 56F6E5
attr RolloEsszimmer IODev cul
attr RolloEsszimmer alexaName Esszimmerrollo
attr RolloEsszimmer alexaRoom Esszimmer
attr RolloEsszimmer autoReadReg 4_reqStatus
attr RolloEsszimmer devStateIcon on:shutter_open off:shutter_closed
attr RolloEsszimmer expert 2_raw
attr RolloEsszimmer firmware 2.11
attr RolloEsszimmer genericDeviceType blind
attr RolloEsszimmer icon shutter_halfopen
attr RolloEsszimmer model HM-LC-Bl1PBU-FM
attr RolloEsszimmer peerIDs 00000000,
attr RolloEsszimmer room CUL_HM,Erdgeschoss,Esszimmer,alexa
attr RolloEsszimmer serialNr xxxxxxx
attr RolloEsszimmer subType blindActuator
attr RolloEsszimmer webCmd up:pct:down


Mit dem genericDeviceType blind ist die Darstellung in der Alexa-App so, dass man damit gar nix schalten kann. Lasse ich den Eintrag weg, so wird die Rollade ähnlich einem Schalter behandelt. Nur verhält die Rolllade sich nicht korrekt.

In der Alexa-App kann ich diese auch nicht in eine Routine aufnehmen, was bei der Einbindung per ha-bridge jedoch funktionierte. Klappt das generell nicht, oder ist meine Konfiguration fehlerhaft? Wäre super wenn ihr mir weiterhelfen könntet.

Reinhart

@justme1968

Ich habe mir die Möglichkeiten der Bildschirmausgabe für den Spot in der API 3 mit "Card" genauer angesehen, aber was Formatierung betrifft ist da nicht viel zu machen. Dafür ist es einfach zu integrieren, ich habe die gepatchte Server.js hier angehängt, die funktioniert bei mir problemlos, ist aber jetzt nur für den Spot optimiert.

sub alexaeBus() {
   my $titlevorlauf = ReadingsVal("Vorlauf", "temperature", "");
        $titlevorlauf =~ s/\./,/g;
   my $titleruecklauf = ReadingsVal("Ruecklauf", "Ruecklauf", "");
        $titleruecklauf =~ s/\./,/g;
        my $titlekurve = ReadingsVal("HKurve", "HKurve", "");   
        $titlekurve =~ s/\./,/g;
        my $titlewater = ReadingsVal("WarmW.Temp.", "WarmW.Temp.", "");
        $titlewater =~ s/\./,/g;
        return "Vorlauf $titlevorlauf° Rücklauf $titleruecklauf° Warmwasser $titlewater° Heizkurve $titlekurve";

sub currentEnergy() {
        my $Alexa_Text= "";
   my $title = (int(ReadingsVal("LS110_2", "electricityPower", "")/100))/10;
        $title =~ s/\./,/g;
        my $titleday = int(ReadingsVal("LS110_2", "electricityConsumed_EnergyDay", ""));   
        my $titlespitze = int(ReadingsVal("LS110_2", "electricityConsumed_PowerDayMax", ""));   
        my $titlekosten = int(ReadingsVal("LS110_2", "electricityConsumed_EnergyCostDay", ""));   
        $titlekosten =~ s/\./,/g;
        return ("Leistung $title Kw Tageswert $titleday Kw Spitze $titlespitze Watt Kosten $titlekosten €");
}
}

eine typische Aufbereitung der Daten in der 99_myUtils.pm für die Anzeige der Heizungsdaten und des Energieverbrauches.
Da die Anzahl der darstellbaren Zeichen doch sehr beschränkt ist, muss da leider ein Kompromiss zwischen Information und Anzahl der Zeilen eingegangen werden, eher auf mehrere Abfragen aufteilen. Wie man auf den Fotos sieht, sind etwa maximal 4 Textzeilen möglich.

Ich habe auch schon mit Render Templates experimentiert, hier wäre das Ergebniss wesentlich besser, weil hier alles formatiert werden kann (Fett, Ausrichtung, Font etc.). Die Implementierung (vor allem die Übergabe der Texte) übersteigt aber meine Kenntnisse um das sauber zum Laufen zu bekommen.

    var response = { version: '1.0',
                     sessionAttributes: {},
                     response: {
                       outputSpeech: {
                         type: 'PlainText',
                         text: 'Hallo.'
                       },
                       card: null,                     
                       directives: [
                       {
                         type: 'Display.RenderTemplate',
                         template: {
                           type: 'BodyTemplate1',
                           token: 'fhem',
                           title: 'Smarthome',
                           textContent: {
                             primaryText: {
                               type: 'RichText',
                               text: 'You are going to have a <b>good day</b> today.'
                           }
                         }
                         }
                        }
                        ],                                           
                       shouldEndSession: !in_session
                     }
                   };

so sieht das mit einem Render Template aus (ab Zeile 829) , aber wie gesagt schaffe ich es mit meinem Wissen nicht wie ich den Text übergeben kann. Hier im Beispiel wird "good day" fett geschrieben. Die Infos und das Demo habe ich von hier.

response.response.directives.text = "Test";
ich habe die Textübergabe schon so und mit ähnlichen Varianten probiert, leider stimmt da die Syntax nicht.

Im Anhang ein paar Bilder wie das jetzt mit der lauffähigen "Card" aussieht.

LG
Reinhart
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

zap

Auf dem echo show wären ja mehr Zeichen möglich. Kann man im Skill bzw. der Server.js irgendwie feststellen, um welches Endgerät es sich handelt?
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

justme1968

ja. im event kann man sehen welcher device typ es war. aber ich kann es nicht probieren da ich keinen echo mit display habe.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Reinhart

#205
ich habe mir deshalb nur 4 Textzeilen dargestellt, weil ab der 5. Zeile kommt der Text schon in die Rundung und wird abgeschnitten, das schaut nicht gut aus. Übrigens ganz oben ist die titelzeile (Smarthome), die ist aber leider beider bei der Standardcard etwas kleiner als der Textbereich.
Die Deviceprüfung welches Echo das ist werde ich demnächst testen!

Übrigens hier sieht man schön wie die abgeschnittenen Texte dann aussehen. Das Testen ob es ein Display gibt ist hier beschrieben, bei mir bringt das Ergebnis True.

LG
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

DoubleD

Hallo justme1968

Danke erst mal für deine tolle Arbeit! Echt super!

Ich bin auch ein V3 geplagter und würde gerne mit alex einen DUMMY "schalten"
Das DUMMY habe ich wiefolgt angelegt.
Leider wird das Dummy nicht als Gerät erkannt.
Was muss ich noch für Atribute setzen?

Internals:
   CFGFN     
   NAME       schalter
   NR         29479
   STATE      off
   TYPE       dummy
   READINGS:
     2018-02-05 22:02:37   state           off
Attributes:
   DbLogExclude .*
   alexaName  Testschalter
   genericDeviceType switch
   room       alexa


Vielen Dank für Deine Hilfe

Gruß
Daniel

Esjay


DoubleD

Hallo Esjay

genau das habe ich getan und dort steht folgends:

ZitatEinfacher Schalter
Ein einfacher Schalter, der die set-Kommandos on und off kennt, kann direkt mit Alexa-Fhem gekoppelt werden
Für kompliziertere Aktionen, etwa das Übermitteln eines spezifischen Schaltbefehls an FHEM, ist die Einrichtung eines Dummies zu empfehlen.
Ob Dummy oder nicht, wichtig sind die drei fett gedruckten Zeilen

define Alexa.Party dummy
attr Alexa.Party alexaName party
attr Alexa.Party alexaRoom alexaroom
attr Alexa.Party genericDeviceType switch
attr Alexa.Party group AlexaGeräte
attr Alexa.Party room AlexaRoom
attr Alexa.Party setList on off

Ich habe meiner Meinung nach alles erfüllt was da steht.
Aber evtl. sehe ich auch den wald vor lauter Bäumen nicht.

Internals:
   CFGFN     
   NAME       schalter
   NR         29479
   STATE      off
   TYPE       dummy
   READINGS:
     2018-02-05 22:02:37   state           off
Attributes:
   DbLogExclude .*
   alexaName  Testschalter
   alexaRoom  alexaroom
   event-on-change-reading state
   genericDeviceType switch
   room       alexa
   webCmd     on:off


Danke für Eure Geduld

Esjay

Müssen aber viele Bäume sein  ;)
Ich sehe im Wiki nichts von webCmd,sondern eher ein setList.