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

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

Vorheriges Thema - Nächstes Thema

Longknife

Bei dem Aufruf
https://www.amazon.com/ap/oa
bekomme ich nur:

Tut uns leid!
Beim Bearbeiten Ihres Auftrags ist ein Fehler aufgetreten. Wir arbeiten bereits daran und haben das Problem in Kürze gelöst.

oder bekomme ich die Authorization-Url noch irgend wo anders her?

Danke und mit freundlichen Grüssen Long

MadMax-FHEM

#1786
Zitat von: Longknife am 05 Februar 2017, 23:38:06
Bei dem Aufruf
https://www.amazon.com/ap/oa
bekomme ich nur:

Tut uns leid!
Beim Bearbeiten Ihres Auftrags ist ein Fehler aufgetreten. Wir arbeiten bereits daran und haben das Problem in Kürze gelöst.

oder bekomme ich die Authorization-Url noch irgend wo anders her?

Danke und mit freundlichen Grüssen Long

Du sollst die url nicht aufrufen sondern wie im Wiki angegeben genau diese url in der Konfiguration bei "Authorization URL" eintragen...

Weitere Installationsprobleme dann dort weiterbehandeln: https://forum.fhem.de/index.php/topic,60452.0.html

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)

Freddy

Hallo,

Ich habe auf meine Pi B Fhem und die Alexa Programme installiert.

Nach derAnleitung im Wiki installiert und könnte eine Lampe ausschalten.

Aber jetzt findest Alex die Lampe aber sagt immer nur das die Funktion
In off ein aus; nicht gibt?

Was soll ich machen? 

MadMax-FHEM

Zitat von: Freddy am 06 Februar 2017, 00:23:46
Hallo,

Ich habe auf meine Pi B Fhem und die Alexa Programme installiert.

Nach derAnleitung im Wiki installiert und könnte eine Lampe ausschalten.

Aber jetzt findest Alex die Lampe aber sagt immer nur das die Funktion
In off ein aus; nicht gibt?

Was soll ich machen?

Welche Skills hast du eingerichtet?
Welche Skills willst du verwenden?

Was sagst du zu Alexa?

Was sagt die Alexa-App was verstanden wurde?

Poste doch mal ein list des Gerätes...

Hast du etwas am Alexa-Modul verändert?
Also beispielsweise alexaMapping.

Ansonsten kann man nur raten...

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)

cyvr1

Hallo Oliver,


Zitat von: dl6kbg am 04 Februar 2017, 20:17:48
1. Kopiere die server.js nach server.js.old zur Sicherheit.

Füge das Folgende in die Funktion StatusIntent ein:


if( device.mappings.CurrentSensorState ) {
if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
state += 'ist '+ (device.fhem.cached(device.mappings.CurrentSensorState.informId)?'geschlossen':'offen');
}


füge ich den Code in meine server.js unter lib ein bekomme ich als Status immer 'geschlossen' für mein Fenster ausgegeben. Ändere ich den Code auf

if( device.mappings.CurrentSensorState ) {
if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
state += 'ist '+ device.fhem.cached(device.mappings.CurrentSensorState.informId);
}


wird der korrekte Status open/closed/tilted auf englisch angesagt.

Vermutlich habe ich irgendwo noch eine notwendige Änderung übersehen. Am Fester kommt übrigens der Homematic Kontakt HM-SEC-RHS zum Einsatz, der drei Stati zurück melden kann.

Hast du eine Idee, woran das liegen kann?


Grüße
Stephan Krätzschmar

----------
Stephan Krätzschmar

justme1968

@kawa0815: natürlich geht es auch ohne alexaName und alexaRoom wenn der alias oder device name passt.

@Romoker: du hast einen dummy mit setList on off und genericDeviceType switch. d.h. es ist ein schalter. schalter haben die eigenschaft das man sie ein- und ausschalten kann. nicht öffnen oder schliessen.

bitte schau dir an wie alexaMapping funktioniert. darüber kannst du konfigurieren mit welchen kommandos zu welche eigenschaften steuerst.

@dl6kbg,cyvr1: ich habe keine ahnung wo ihr CurrentSensorState her habt. das gibt es nicht. nur ContactSensorState.

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

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

cyvr1

#1791
Hallo justme1968,

ich hatte CurrentSensorState aus einem Post von Oliver übernommen. Hab es jetzt auf ContactSensorState geändert.


  if( device.mappings.ContactSensorState ) {
    if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
    state += 'ist '+ (device.fhem.cached(device.mappings.ContactSensorState.informId)?'geschlossen':'geöffnet');
  }


Das Ergebnis ist aber das gleiche.

Alexa sagt z.B. "Terassentür ist geschlossen.", obwohl sie geöffnet ist und dies auch so in FHEM angezeigt wird.
Ändere ich die Funktion auf


  if( device.mappings.ContactSensorState ) {
    if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
    state += 'ist '+ device.fhem.cached(device.mappings.ContactSensorState.informId);
  }


erfolgt die Ausgabe des korrekten Status, allerdings eben auf Englisch.

Beim Fensterkontakt selber habe ich noch ein homebridgeMapping drin:
clear ContactSensorState=state,values=closed:CLOSED;open:OPEN


Und von mir auch noch mal herzlichen Dank für diese geniale Erweiterung.

----------
Stephan Krätzschmar

dl6kbg

Zitat von: justme1968 am 06 Februar 2017, 09:16:08
@dl6kbg,cyvr1: ich habe keine ahnung wo ihr CurrentSensorState her habt. das gibt es nicht. nur ContactSensorState.

Moin !

Um ehrlich zu sein, ich weiß es nicht. Es scheint als hätte ich da selbst was kreiert. Werde meine Posts dahingehend heute Abend abändern:

lib/server.js:


if( device.mappings.CurrentSensorState ) {
             if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
             state += 'ist '+ (device.fhem.cached(device.mappings.CurrentSensorState.informId)?'geschlossen':'offen');
          }


alexa Konsolen Ausgabe:


[2017-02-06 09:39:01] [FHEM] homebridgeMapping: clear CurrentSensorState=state,values=closed:CLOSED;open:OPEN
[2017-02-06 09:39:01] [FHEM] Bad.Tuerkontakt is ContactSensor
[2017-02-06 09:39:01] [FHEM] Bad.Tuerkontakt has
[2017-02-06 09:39:01] [FHEM]   CurrentSensorState [state]


Ich bekomme es richtig angesagt: gerade noch einmal aus der Ferne getestet:


"Türkontakt, die Tür ist geschlossen."

Sorry, für die Verwirrung.

Grüße, Oliver

cyvr1

Hallo Oliver,

seltsam, bei mir funktioniert es mit deinen Änderungen leider nicht.

Ich habe mir jetzt selber etwas in Anlehnung an die replace() Funktion in JS gebaut.

replace() kann ja von Haus aus nur einen String durch einen anderen ersetzen. So funtioniert es zwar, wenn ich den Code auf

if( device.mappings.ContactSensorState ) {
    if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
    state += 'ist '+ device.fhem.cached(device.mappings.ContactSensorState.informId).replace['closed','geschlossen');
  }


ändere. Jedoch bekomme ich nur einen deutschen Status, wenn der angefragte Kontakt geschlossen ist.

Ich habe mir daraufhin eine Funktion geschrieben, die mehrere Strings ersetzen kann:

String.prototype.multi_str_replace=function(s,r)
{
  var t=this;
  var s=(typeof s=='string')?[s]:s;
  var r=(typeof r=='string')?[r]:r;
  for(var i=0;i<s.length;++i)
  {
    t=t.replace(new RegExp(s[i]),
                (typeof r[i]!='undefined')
                  ?r[i]
                  :''
               );
  }
  return t;
}


Dann habe ich den Eintrag für ContactSensorState entsprechend geändert:


if( device.mappings.ContactSensorState ) {
    if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
    state += 'ist '+ device.fhem.cached(device.mappings.ContactSensorState.informId).multi_str_replace(['closed','open','tilted'],['geschlossen','offen','gekippt']);
  }


Jetzt bekomme ich die deutsche Statusansage für alle drei Stati geschlossen, offen und gekippt.

Beides kommt in die lib/server.js.

----------
Stephan Krätzschmar

thunder1902

#1794
Hallo!

kurze Frage(n) :-)

- in meinem myAlexa-Device liefert "get myAlexa customSlotTypes" nichts zurück. Was mache ich falsch??

- was muss ich in AlexaMapping und alexaTypes hinzufügen, damit ich meine Rolläden auf- und zumachen kann??

Danke schonmal! :-)

cyvr1

Hallo thunder1902,

hm, ich bekomme bei der Abfrage zuerst ein Fenster mit den entsprechenden Werten und, wenn ich dann unten auf OK klicke auch noch ein leeres Fester, nur mit OK-Button.

Hat myAlexa denn bei die den Status "active"?

Zum Schließen der Rolläden musst du eigentlich garnichts speziell konfigurieren. Mit "Alexa, stelle <device>  auf 0 Prozent/100 Prozent" kannst du die Rolläden schon rauf und runter fahren. Ich habe mir im MyAlexa-Device noch etwas das alexaMapping für TargetPosition erweitert:


TargetPosition=verb=mache,articles=die,values=hoch:auf:100;runter:zu:0
TargetPosition=verb=fahre,values=hoch:auf:100;runter:zu:0
TargetPosition=verb=stelle,valuePrefix=auf,values=AMAZON.NUMBER,valueSuffix=prozent
TargetPosition=verb=fahre,valuePrefix=auf,values=AMAZON.NUMBER,valueSuffix=prozent


So kann man auch mit folgenden Anweisungen die Rolläden steuern:

Alexa,
mache die Wohnzimmerrollade hoch, auf, zu, runter.
fahre die Wohnzimmerrollade hoch, auf, zu, runter.
stelle die Wohnzimmerrollade auf 60 Prozent.
fahre die Wohnzimmerrollade auf 30 Prozent.

Wichtig ist auch den CustomSkill immer anzupassen (IntentSchame, Custom Slot Types und die Sample Utterances).

----------
Stephan Krätzschmar

thunder1902

@cyvr1:
Danke für Deine Hilfe, ja, myAlexa hat den Status 'Active'. Was mir aber aufgefallen ist, bei mir wird die Ausgabe der customSlotTypes in dem Alexa-Dienst ausgegeben..??? Das interactionModel hingegen wird im Fhem-Fenster dargestellt.. Irgendwas passt doch da nicht. Hab Fhem gerade geupdatet - aber es kommt trotzdem kein Fenster bei customSlotTypes. Das alexa-fhem Script hat die Version 0.1.9.

Danke für die Tips mit den Rolläden.. Du hast das sehr gut erklärt! Werde mir deinen Beitrag in meinem persönlichen HowTo speichern :-)
Wie hast du die Rolläden eigentlich benannt? Ich habe irgendwo mal gelesen, dass man alle Rolläden gleich benennen soll (z.B. Rolladen). Dann sollte man sagen können "Mach die Rolläden im Wohnzimmer zu". Aber eigentlich ist das doch dann Raumbezogen, und hat nichts mit den Namen der einzelnen Rolläden zu tun, oder?

Esjay

Zitat von: thunder1902 am 06 Februar 2017, 11:51:53
@cyvr1:
Danke für Deine Hilfe, ja, myAlexa hat den Status 'Active'. Was mir aber aufgefallen ist, bei mir wird die Ausgabe der customSlotTypes in dem Alexa-Dienst ausgegeben..??? Das interactionModel hingegen wird im Fhem-Fenster dargestellt.. Irgendwas passt doch da nicht. Hab Fhem gerade geupdatet - aber es kommt trotzdem kein Fenster bei customSlotTypes. Das alexa-fhem Script hat die Version 0.1.9.

Danke für die Tips mit den Rolläden.. Du hast das sehr gut erklärt! Werde mir deinen Beitrag in meinem persönlichen HowTo speichern :-)
Wie hast du die Rolläden eigentlich benannt? Ich habe irgendwo mal gelesen, dass man alle Rolläden gleich benennen soll (z.B. Rolladen). Dann sollte man sagen können "Mach die Rolläden im Wohnzimmer zu". Aber eigentlich ist das doch dann Raumbezogen, und hat nichts mit den Namen der einzelnen Rolläden zu tun, oder?

Schau mal bezüglich deines ersten Problems in die Commandref von Alexa. Nicht myAlexa, sondern Fhem-alexa muss laufen um die CustomslotTypes zu erhalten.
Rolläden sollst du dann in der Alexa App in Gruppen bspw. Wohnzimmer zusammenfassen.

Gruß

cyvr1

#1798
Hallo thunder1902,

die Rolläden haben bei mir alle unterschiedliche Namen: Wohnzimmerrollade links, Wohnzimmerrollade rechts, Arbeitszimmerrollade usw.

Trotzdem kann ich sie alle gemeinsam oder allgemein angesprochen steuern. Bei mir funktioniert statt des direkt angesprochenen Geräts (Alexa, sage fhem fahre Wohnzimmerrollade links hoch) auch:

Alexa, sage fhem fahre Rolläden im Wohnzimmer runter, hoch. (Beide Rolläden werden angesteuert)
Alexa, sage fhem stelle Rollade im Arbeitszimmer auf 50 Prozent.
Alexa, sage fhem fahre Rolläden hoch. (alle Rolläden im Haus werden geöffnet)

Das gleiche funktioniert mit Lampen. Meine Lampen heißen alle unterschiedlich, ich kann sie dann über den Namen ansprechen oder über:

Alexa, sage fhem schalte Licht (Lampe) in der Küche ein.

Da wir dort zwei Lampen (Deckenlampe und Beleuchtung über der Arbeitsplatte) haben, werden beide Lampen gleichzeitig geschaltet.

Das funktioniert anscheinend mit dem pro Gerät festgelegten genericDeviceType.
Ich habe mir im Alexa Device das unter alexaTypes so eingetragen bzw. erweitert, denn das meiste steht schon per default drin:

#Type=<alias>[,<alias2>[,...]]
light=licht,lampen
blind=rollade,rolladen,rolläden,jalousie,jalousien,rollo,rollos
outlet=steckdose
thermostat=heizung,heizkörper



@esjay
Die Gruppen in der Alexa App funktionieren aber nur mit dem Smarthome Skill nicht mit dem Custom Skill.

----------
Stephan Krätzschmar

thunder1902

@cyvr1: Danke für die Erklärung. Wenn man die Räume in der Alexa-App eingerichtet hat - könnte man doch auch ohne "Alexa, sage fhem.." die Rolläden im Wohnzimmer aufmachen (mit dem Alexa-Skill) -  oder?
Also: Alexa, mach die Rolläden im Wohnzimmer auf / zu. Oder geht das nur mit dem Custom-Skill??

@Esjay: Ja, Alexa-Fhem läuft und Alexa (Device) steht auf active. Trotzdem krieg' ich bei "get myAlexa customSlotTypes" kein Fenster angezeigt. Alex-Fhem zeigt in der Linux-Console dann die customSlotTypes an...