[gelöst]:Mehrfachschalter mit Alexa abbilden möglich?

Begonnen von dora71, 17 Mai 2020, 09:04:42

Vorheriges Thema - Nächstes Thema

dora71

Hallo Forum,

bin schon seit geraumer Zeit auf der Suche, wie ich am Besten einen Mehrfachschalter (entspricht einem Dummy mit mehreren vordefinierten Werten) mit Alexa steuern kann. Ist das überhaupt möglich?

Als Beispiel: "Alexa, setze Anwesenheit auf Büro", "Alexa, setze Anwesenheit auf Urlaub", "Alexa, setze Anwesenheit auf Freizeit"

Zur Zeit behelfe ich mir, für jede Einstellung einen eigenen Dummy zu "verschwenden". Wie habt Ihr das gelöst? Oder geht das gar nicht?

Gruß Rainer

MadMax-FHEM

#1
Geht nur mit Custom Skill...

ODER: eben (fast) so wie du es gemacht hast/vorhast...

Es würde aber auch ein dummy reichen: Licht das dimmbar ist...

Dann in der Alexa-App für jeden gewünschten "Zustand" eine Routine und am Ende eben verschiedene dimm-Werte...

Dann halt ein Notify auf den "Lampen-Dummy" und Abfragen des dimm-Wertes und entsprechende Aktion...
...oder halt DOIF und genauso...

In irgendeinem Alexa-Thread gibt es das als Beispiel...
...evtl. auch im Wiki!?

EDIT: hier der dummy als raw definition

defmod dmAlexaRoutine dummy
attr dmAlexaRoutine alexaName alexaRoutine
attr dmAlexaRoutine comment 0 - nichts\
1 - Frühschicht\
2 - Spätschicht\
3 - Nachtschicht\
4 - Panik
attr dmAlexaRoutine genericDeviceType light
attr dmAlexaRoutine homebridgeMapping Brightness=dim,cmd=dim On=state,valueOn=on,valueOff=off
attr dmAlexaRoutine readingList dim
attr dmAlexaRoutine room alexa
attr dmAlexaRoutine setList on off dim

setstate dmAlexaRoutine 2020-01-08 22:58:11 dim 0


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)

justme1968

es gibt drei möglichkeiten wie man alexa szenen mit fhem devices benutzen kann. structure, LightScene und dummy mit mehreren möglichen werten. siehe wiki.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

stephanr

Leider finde ich die entsprechende Information im Wiki nicht, um einen Dummy mit mehreren Values in der Setlist anzusprechen. Anbei der Dummy:

defmod HomeStatus dummy
attr HomeStatus alexaName Homestatus
attr HomeStatus alexaRoom Zustand
attr HomeStatus genericDeviceType scene
attr HomeStatus group Home-Status
attr HomeStatus room App,Home-Status
attr HomeStatus setList state:Zuhause,Abwesend,Schlafen
attr HomeStatus webCmd state:

setstate HomeStatus Zuhause
setstate HomeStatus 2020-11-08 06:30:00 state Zuhause


Habs auch schon mit folgenden Anpassungen an der Setlist versucht:

attr HomeStatus setList Zuhause Abwesend Schlafen
attr HomeStatus setList Zuhause Abwesend Schlafen on off

Wäre sehr dankbar für einen Denkanstoß.

justme1968

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

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

stephanr

Es wird bei den genannten Szenen immer nur vom ein- bzw. ausschalten geschrieben. Eine Umschaltung zwischen den in meinem Dummy vorhandenen Werten Zuhause, Abwesend und Schlafen ist also nicht möglich, oder verstehe ich den Wiki Artikel nicht?

justme1968

du schaltest von einer ,szene' auf eine andere. d.h. wenn du auf einen wert schaltest ist doch implizit der vorherige wert nicht mehr da.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

stephanr

Danke justme1968. Hab es jetzt so gelöst, dass ich in FHEM ein LightScene Device angelegt habe.

defmod Szenen LightScene HomeStatus
attr Szenen alexaName Homestatus
attr Szenen genericDeviceType scene

setstate Szenen Schlafen
setstate Szenen 2020-11-09 22:53:31 state Schlafen



Im LightScene Device habe ich drei Scenen hinterlegt, um meinen Dummy (HomeStatus) entsprechend zu setzen.


HomeStatus set Zuhause
HomeStatus set Abwesend
HomeStatus set Schlafen


In Alexa konnte ich dann drei Routinen erstellen, die jeweils eine der angelegten Szenen setzen/aktivieren. Danke für die Hilfestellung.

justme1968

der umweg über die LightScene ist nicht nötig. du kannst den dummy direkt für alexa szenen verwenden. du musst ihm nur ein passendes homebridgeMapping geben.

die routine ist nur nötig wenn dir der wortlaut zum direkten aktivieren der szene über alexa nicht gefällt.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

stephanr

Genau daran bin ich bisher gescheitert, wobei ich auch kein passendes homebridgeMapping gesetzt habe. Da muss ich mich auch nochmal reinleesen, das ist mir noch nicht klar. Aber danke für den Hinweis, dass es auch ohne Umweg geht.

stephanr

Also mit dem Homebridgemapping komme ich ehrlich gesagt nicht klar. Hab jetzt paar Stunden gelesen, aber ich verstehe z. B. nicht, wie ich die drei Werte meines Dummys (Zuhause, Abwesend, Schlafen) in ein Homebridgemapping mit entsprechendem Characteristic bekommen.

Meiner Ansicht nach muss ich ja zunächst eine Characteristic wählen. Logisch hätte ich gefunden es gebe eine Characteristic scene, aber das scheint nicht der Fall zu sein. Habs dann mal mit der On Charateristic versucht:

ZitatOn=verb=stelle,values=zuhause;abwesend;schlafen

Leider findet Alexa damit keine entsprechende Szene. Die ganzen Beispiele gehen bei On auch immer nur von zwei Werten aus (on/off). Vielleicht kommt bei mir ja noch die Erleuchtung. Über Hinweise wäre ich dankbar :-)

stephanr

#11
Mittlerweile bin ich soweit, dass ich mit der characteristic On eine Umschaltung der Zustände Schlafen und Zuhause umsetzen kann.

defmod HomeTest dummy
attr HomeTest alexaName Test
attr HomeTest genericDeviceType switch
attr HomeTest homebridgeMapping clear\
On=subtype=schlafen,valueOn=schlafen,cmdOn=schlafen,cmdOff=zuhause

setstate HomeTest schlafen
setstate HomeTest 2020-11-13 21:59:35 state schlafen


D. h. wenn ich also zu Amazon Alexa sage "Alexa, schalte Test an" wird der state von meinem Dummy Test auf schlafen gesetzt. Sage ich "Alexa, schalte Test aus" wird entsprechend der state vom Dummy auf zuhause gesetzt.

Was nicht funktioniert ist Alexa zu sagen "Alexa, schalte Test schlafen|zuhause". Wenn also nur an/aus als Kommandos gehen, wie soll ich dann jemals auf den dritten Status abwesend schalten können?

Ahh beim Schreiben fällt mir jetzt gerade auf, dass ich den Dummy ja als Szene setzen soll...das probiere ich nochmal. :)

dora71

... zumindest habe ich jetzt eine funktionierende Lösung. Ob es die beste ist, weiß ich nicht, aber ich möchte sie hier kurz erläutern, da ich denke, dass noch mehr Leute dieses Problem haben.

Den Dummy (genannt Anwesenheit mit den Werten Arbeit, Freizeit, Urlaub und HomeOffice) habe ich um folgende Attribute ergänzt:


   eventMap   /1:Arbeit/2:Freizeit/3:Urlaub/4:HomeOffice
   genericDeviceType light
   homebridgeMapping clear Brightness,values=Arbeit:1;Freizeit:2;Urlaub:3;HomeOffice:4;1:1;2:2;3:3;4:4
   room       Alexa,Zentralschalter
   setList    Arbeit Freizeit Urlaub HomeOffice
   webCmd     Arbeit:Freizeit:Urlaub:HomeOffice


Durch den Devicetyp "light" bekomme ich in Alexa den Regler "Helligkeit" angeboten. Dort kann ich dann mit den "Helligkeitswerten" 1 bis 4 den Dummy auf die entsprechenden Werte (Arbeit, Freizeit, Urlaub, HomeOffice) stellen. Entweder passiert das dann mit der Ansage: "Alexa, stelle Anwesenheit auf 1%" (für Arbeit). Schöner finde ich dann die Lösung mit einer Routine (falls "Alexa, stelle Aktivität auf Arbeit" gesagt wird, stelle Anwesenheit auf Helligkeit 1%).

Interessant ist, dass sich jetzt (durch die eventMap) state und STATE unterscheiden.

Was mir zur Zeit noch fehlt, ist, wie ich mit MQTT den STATE übertragen kann (bisher hatte ich den state ausgelesen, aber das nützt mir jetzt nichts, da ich da ja nur die Werte 1 bis 4 drin stehen habe) ... aber das wäre ein neues Thema  8)

Hoffe, es hilft dem einen oder anderen. Für Verbesserungen bin ich dankbar und offen.

Gruß Rainer

dora71

Sodele, das Thema MQTT konnte ich auch noch erfolgreich lösen:

Habe mir ein UserReading zusammengebastelt. Ja, ich weiß, dass das in Perl noch experimentell ist (so bekomme ich zumindest immer die Warnung), aber es funktioniert.  8) ;D Der nachfolgende Code ist aus der RAW Definition.

attr Anwesenheit userReadings status {\
  use feature qw(switch);;\
  given (ReadingsNum('Anwesenheit','state','nix')) {\
    when(1) {return "Arbeit"}\
when(2) {return "Freizeit"}\
when(3) {return "Urlaub"}\
when(4) {return "HomeOffice"}\
  }}


Und dieses Reading "status" wird dann zur Aktualisierung via MQTT verwendet.

Für mich wäre das Thema damit erledigt und ich setze gemäß guter alter Foren-Sitte das Thema auf "gelöst".

Gruß Rainer