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

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

Vorheriges Thema - Nächstes Thema

thunder1902

#2055
Zitat von: justme1968 am 15 Februar 2017, 22:22:37
@thunder1902: wie kommst du auf window und geschossRolladen? ausserdem scheinst du alexaMapping und homebridgeMapping durcheinander zu schmeissen. im alexaMapping gibst du an was du sagen willst um etwas zu tun, im homebridgeMapping gibst du an mit welchem fhem kommando dieses etwas dann getan wird.

für rolläden ist TargetPosition zuständig und window ist für elektrische fenster. hier gibt es ebenfalls eine TargetPosition characteristic.

cmdOn und cmdOff sind NUR zum ein und aus schalten und gibt es nur beim On intent.


Ich versteh's wirklich noch nicht so ganz...

geschossRolladen:
Kann ich denn so eine Characteristic nicht frei erfinden?

Allgemein Characteristics:
Gibt es irgendwo einen Katalog, in dem alle Characteristiken mit den möglichen Intents stehen?  z.B. dass es in dem On-Intent nur cmdOn und cmdOff gibt- oder dass es bei Window ein TargetPosition gibt..??

Wie unterscheide ich die verschiedenen Intents, wenn es z.B. zwei gleiche Intents für unterschiedliche Characteristicen gibt, z.B:

geschossRolladen=verb=mach,values=auf:hoch;zu:runter
TargetPosition=verb=mach,values=auf:100;zu:0


Ist es nicht so, dass dies durch die HomeBridge-Eigenschaft des jeweiligen Gerätes geschieht? Z.B. wenn im Dummy-HomeBridge-Feld window=blablabla steht, wird auch der Window-Intent herangezogen..

EDIT:
Nach langem experimentieren hab ich jetzt meine Lösung gefunden: Ich denke mal, dass Alexa die obigen Characteristicen nicht unterscheiden kann. Deswegen ist mir das Wort "Property" ins Auge gefallen.

geschossRolladen=verb=mach,property=alle,values=auf:hoch;zu:runter

Dummy heißt "RollädenimErdgeschoss"

Scheint auf "mach alle Rolläden-im-Ergeschoss auf" zu hören - und "schaltet auch den Dummy auf "hoch" und "runter". Das genericDevice des Dummy's ist blind.

Nun leuchtet mir der Unterschied von AlexaMapping und HomebridgeMapping ein:

Mit AlexaMapping kann ich einen Satz mit Werten "vorgeben". z.B. Mach das Gerät auf. -  oder Mach das Gerät an. Je nachdem, ob ich am Ende auf - oder an sage, unterscheidet sich dann die verwendete Characteristic. Bei der property "alle" reagiert er nur auf die Characteristik, die das Zwischenwort "alle" enthält.

HomebridgeMapping münzt dann den on/off - Befehl auf den Status um. Bei meiner geschossRolladen-Characteristic wird das "hoch" auf den State des Dummy's angewendet.

Ich hoffe, ich hab das jetzt richtig verstanden.. :-)

Thyraz

Ich muss zugeben, ich hab da auch noch etwas Schwierigkeiten, wie wich was selbst denfinieren kann/darf und was Specialtricks des Moduls sind.

Gerade auch so Dinge cmdOn/cmdOff ode rauch valueOn/valueOff statt values.
Und wo finde ich was geht? :)

Falls "On" eine komplette Sonderbehandlung darstellt, welche so selbst nicht erstellt werden kann,
ist die Definition in den Beispiel Characteristics evtl. nicht so gut aufgehoben und sollte stattdessen eher vor dem User versteckt werden. ;)

Aber bin auch noch nicht sooo tief im Thema drin nach ein paar Tagen.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

michael.winkler

Hallo,

ich habe, glaube ich einen BUG gefunden.

wenn in dem attr alexaTypes eine Leerzeile am Ende ist, ist im alexa.log folgendes zu sehen. Ist das schon bekannt?


[2/16/2017, 3:35:12 PM] [FHEM] TypeError: Cannot read property 'length' of null
    at Server.<anonymous> (/opt/alexa-fhem/lib/server.js:433:20)
    at emitOne (events.js:96:13)
    at FHEM.emit (events.js:188:7)
    at FHEM.<anonymous> (/opt/alexa-fhem/lib/fhem.js:1093:28)
    at Request._callback (/opt/alexa-fhem/lib/fhem.js:1148:27)
    at Request.self.callback (/opt/alexa-fhem/node_modules/request/request.js:186:22)
    at emitTwo (events.js:106:13)
    at Request.emit (events.js:191:7)
    at Request.<anonymous> (/opt/alexa-fhem/node_modules/request/request.js:1081:10)
    at emitOne (events.js:96:13)
    at Request.emit (events.js:188:7)

Wolle02

Interessant. Bei mir lässt sich der Alexa-Dienst nicht aus FHEM heraus starten; die Fehlermeldung im Alexa-Logfile sieht fast gleich aus:

path.js:8
    throw new TypeError('Path must be a string. Received ' +
    ^

TypeError: Path must be a string. Received undefined
    at assertPath (path.js:8:11)
    at Object.posix.join (path.js:479:5)
    at Function.User.storagePath (/volume1/@appstore/FHEM/alexa-fhem/lib/user.js:30:15)
    at Function.User.configPath (/volume1/@appstore/FHEM/alexa-fhem/lib/user.js:34:25)
    at Server._loadConfig (/volume1/@appstore/FHEM/alexa-fhem/lib/server.js:30:25)
    at new Server (/volume1/@appstore/FHEM/alexa-fhem/lib/server.js:24:23)
    at module.exports (/volume1/@appstore/FHEM/alexa-fhem/lib/cli.js:17:16)
    at Object.<anonymous> (/volume1/@appstore/FHEM/alexa-fhem/bin/alexa:17:22)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)


Mein Problem ist hier: https://forum.fhem.de/index.php/topic,60452.msg586464.html#msg586464

justme1968

#2059
@Ma_Bo: ich habe eine idee was es eventuell sein könnte.
kannst du mal in lib/server.js in zeile 738 das name durch:'setreading '+ fhem.alexa_device.Name +' fhemIntent '+ name + applicationId +';' +nameersetzen und schauen ob es dann geht? d.h. die beiden fhem.execute zu einem einzigen aufruf Zusammen zu fassen.

@thunder1902: ja. du hast es richtig verstanden. aber ich verstehe nicht warum du nicht einfach alexaRoom bei den jeweiligen rolläden auf erdgeschoss setzt und dann  sagst 'alexa, sage fhem: mach die rolläden im erdgeschoss auf'. das geht out of the box mit der default konfiguration im alexa device. dazu braucht man keine extra characteristic, keine extra dummys. einfach nur normal konfiguriert devices. und du kannst jedes device auch in mehreren räumen haben und raum oder geschoss weise steuern. alles ohne etwas zusätzlich zu konfigurieren.

@michael.winkler: danke. hab den fehler behoben.

@Wolle02: es hilft nicht wenn du in zwei threads das gleiche postest.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Ma_Bo

@justme1968: werde ich diese Nacht oder morgen früh testen, Danke schon mal für den Hinweis...


Gesendet von iPhone mit Tapatalk
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

elmer

Ich möchte meinen Rollo in 10 Prozent Schritten schalten.

Im Homebridge Mapping habe ich folgendes probiert:

position {(ReadingsVal($NAME,"state","off") eq "off")?100:0}
CurrentPosition=state,values=Zu:0;;Auf:100 TargetPosition=CurrentPosition,minStep=50,cmds=0:Zu;;/.*/:Auf

Er geht auch rauf und runter und fährt in 10 Prozent Schritten, aber leider falsch.

Wenn ich sage ich will Rollo 20 Prozent schliesen geht er 80 Prozent zu, wenn ich 30 Prozent sage geht er 70 Prozent zu....

Wie kann ich das ganze drehen in die andere Richtung?

Roman

Hallo,
Zitat
@Roman: etwas so:
Code: [Auswählen]
ContactSensorState=present,values=1:CONTACT_DETECTED;0:CONTACT_NOT_DETECTED CurrentDoorState= present,values1:CLOSED;0:OPEN

da hat auch nicht funktioniert, hab hier mit den verschiedensten Einstellungen probiert, aber Alexa hat immer nur den Status 0 oder 1 angesagt.

Habs jetzt anders gelöst.
Hab für meine iButtons (genericDevice Contact) jeweils ein neues reading mit Namen 'alexastate' hinzugefügt, das bei Änderung vom state mit dem Prosatext (offen, geschlossen) aktualisiert wird. Im Homebridgemapping dann ein 'state=alexstate'. Nun sagt mir Alexa den Status auch so an wie ich das haben wollte.

Gruß
Roman

schnun

Vorab Respekt und vielen Dank an Andre für die bemerkenswerte Arbeit die er geleistet hat.
Wäre eine Einbindung des echo. in FHEM aus irgendwelchen Gründen nicht möglich gewesen, hätte
ich mir gar keinen bestellt und auf GoogleH + Tasker + Autovoice gesetzt.
So ist es mir aber deutlich lieber  ;)

Ich muss aber jetzt leider dazwischengrätschen mit einer eher "Anfängerfrage" zu diesem Thema.
Ich habe Home und Custom skill eingerichtet. Lichter etc. schalten brav, Alexa liest mir
den Status der Thermostate vor. Heizung lässt sich regeln. Alles gut.

Aber ich habe es noch nicht verstanden wie ich meine Rolläden mit auf/ab oder hoch/runter
ansteuern kann. Mit meiner bisherigen Konfiguration über den Home skill  geht ja nur ein: Alexa, schalte Rolladen in der Küche aus...

Eine ähnliche Frage habe ich auf einigen zig Seiten vorher in diesem Thread schon gelesen, aber leider nicht
die für mich verständliche Antwort gefunden. Ein Schubser in die richtige Richtung wäre nett...
FHEM 5.7
FB 7362 SL
Raspberry Pi Model B
RFXTRX 433mhz
2 x HM-Lan-Adapter

Esjay

Zitat von: schnun am 16 Februar 2017, 21:06:40
Vorab Respekt und vielen Dank an Andre für die bemerkenswerte Arbeit die er geleistet hat.
Wäre eine Einbindung des echo. in FHEM aus irgendwelchen Gründen nicht möglich gewesen, hätte
ich mir gar keinen bestellt und auf GoogleH + Tasker + Autovoice gesetzt.
So ist es mir aber deutlich lieber  ;)

Ich muss aber jetzt leider dazwischengrätschen mit einer eher "Anfängerfrage" zu diesem Thema.
Ich habe Home und Custom skill eingerichtet. Lichter etc. schalten brav, Alexa liest mir
den Status der Thermostate vor. Heizung lässt sich regeln. Alles gut.

Aber ich habe es noch nicht verstanden wie ich meine Rolläden mit auf/ab oder hoch/runter
ansteuern kann. Mit meiner bisherigen Konfiguration über den Home skill  geht ja nur ein: Alexa, schalte Rolladen in der Küche aus...

Eine ähnliche Frage habe ich auf einigen zig Seiten vorher in diesem Thread schon gelesen, aber leider nicht
die für mich verständliche Antwort gefunden. Ein Schubser in die richtige Richtung wäre nett...
Auf/Ab Hoch / runter zum Beispiel über fhemIntens im Custom skill.Auf / zu geht durch das alexaMapping ohne weitere Konfiguration im Custom Skill .  Prozent über genericDeviceType blind über den Smarthome Skill.
Gruß

blasterx

@elmer
kann es sein damit Du bei deinem Rollladenactor unter Attributes die Option param auf levelInverse gestellt hast? das gleiche Problem hatte ich auch am Anfang. Ich habe das levelInverse gelöscht und den Rollladenactor umgepolt dann ging es.

Gruß BlasterX
Gruß-BlasterX

elmer

Auf levelInverse steht bei mir nichts. Komisch finde ich das wenn ich in Fhem das ganze am Tablet schalte wird alles richtig gemacht, wenn ich dort 10 Prozent schalte fährt der Rollo 10 Prozent nach unten.

Wenn ich Alexa sage das sie 10 Prozent zu machen soll macht sie 90 Prozent zu und lässt 10 Prozent offen.

Ist es eigentlich auch möglich damit Sonos Lautsprecher zu bedienen, ich kann da leider nichts genaues dazu finden, ich schalte die Sonos bisher mit Yonomi aber der Skill läuft bei mir sehr unzuverlässig.

Ma_Bo

#2067
@justme1968: ich habe jetzt mal ein wenig rumprobiert, deine Änderung habe ich versucht, dann führt er die sub garnicht aus und schreibt mir stattdessen den auszuführenden Namen hinter die applicationId

Zitat@Ma_Bo: ich habe eine idee was es eventuell sein könnte.
kannst du mal in lib/server.js in zeile 738 das name durch:

'setreading '+ fhem.alexa_device.Name +' fhemIntent '+ name + applicationId +',' +name
ersetzen und schauen ob es dann geht? d.h. die beiden fhem.execute zu einem einzigen aufruf Zusammen zu fassen.


Also aus dem hier :
   } else if( name.match(/^{.*}$/) ) {
            if( applicationId !== '' ) applicationId = ' :' +applicationId;
            fhem.execute( 'setreading '+ fhem.alexa_device.Name +' fhemIntent '+ name + applicationId );
            fhem.execute( name, function(result) {
              response.response.outputSpeech.text = result;
              callback( response );
            } );
            return;


habe ich das hier gemacht, wie du beschrieben hast:
   } else if( name.match(/^{.*}$/) ) {
            if( applicationId !== '' ) applicationId = ' :' +applicationId;
            fhem.execute( 'setreading '+ fhem.alexa_device.Name +' fhemIntent '+ name + applicationId );
            fhem.execute( 'setreading '+ fhem.alexa_device.Name +' fhemIntent '+ name + applicationId +',' +name, function(result) {
              response.response.outputSpeech.text = result;
              callback( response );
            } );
            return;

dann kommt aber im Alexadevice folgendes fhemIntent Reading :
{alexa_guten_morgen()} :amzn1.ask.skill.xxxxxxxxxxxxxx,{alexa_guten_morgen()}

danach habe ich die 737 einmal gelöscht:
   } else if( name.match(/^{.*}$/) ) {
            if( applicationId !== '' ) applicationId = ' :' +applicationId;
            fhem.execute( 'setreading '+ fhem.alexa_device.Name +' fhemIntent '+ name + applicationId +',' +name, function(result) {
              response.response.outputSpeech.text = result;
              callback( response );
            } );
            return;

dann kommt das selbe im Alexadevice fhemIntent Reading :
{alexa_guten_morgen()} :amzn1.ask.skill.xxxxxxxxxxxxxx,{alexa_guten_morgen()}


Dann hab ich noch eine Frage, würde es Sinn machen, das Reading "fhemIntent" nur mit "name" zu befüllen und ein neues Reading mit der "applicationId" zu machen?
oder sollte ich mir lieber das Reading fhemIntent mit einem userReading selber zerlegen, wenn ich dies mal brauche?
Hintergrund dafür ist, ich möchte direkt anhand der Readings sehen können, welcher Skill angesprochen wurde.

Vielleicht könnte man es mit attr machen, das man den "amzn1.ask.skill.111111" usw direkt einen Namen geben kann.
amzn1.ask.skill.111111 = Fernseher
amzn1.ask.skill.222222 = Badezimmer
amzn1.ask.skill.333333 = Wohnzimmer
usw.

Grüße Marcel
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

wthiess

Hallo
Wo bitte finde ich
ARN der AWS Lambda Funktion bestimmen
Auf der Übersichtsseite oben links den Menüpunkt Functions aúswählen

Lg
Wolfgang
Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

Ma_Bo

Unter http://aws.amazon.com über den Button "An der Konsole anmelden" anmelden
In dem Suchfeld "Lambda" eingeben und den Eintrag "Lambda" anklicken
Links oben auf Functions, dann deine Lambda Function auswählen und dann steht rechts oben die ARN
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.