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

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

Vorheriges Thema - Nächstes Thema

Esjay

Du musst nach dem Einrichten auch wirklich den Befehl geben das gerät einzuschalten, ansonsten sagt alexa, das sie kein Video Device gefunden hat..Sprich einfach als Tv hinzufügen, und dann steuern geht nicht.. Soweit verständlich?

JanWausH

Irgendwie stehe ich auf dem Schlauch :-/. Müsste ich nicht zumindest einen An- und Aus Schalter haben? Oder pausieren usw. über das Playback Attribut?

Ich hatte es schon mal versucht mit "Echo schalte Test ein oder aus" aber da ist nichts passiert aber sie hat auch nicht gemeckert.

JanWausH

Eine weitere Frage:

Ich habe über das Tahoma Modul einen Rolladen angebunden den ich auch wunderbar über die Oberfläche bedienen kann.

Über GenericDeviceType blind kann ich ihn auch in Alexa einbinden. Allerdings klappt die Steuerung nicht da ich im Log sehen kann, dass als Befehl pct anstatt dim zum Setzen des prozentualen Wertes genutzt wird. Kann ich irgendwie einstellen, dass dim genutzt wird?

Vielen Dank und Grüße,

Jan

TomLee


JanWausH


Klaus0815

Zitat von: justme1968 am 27 Dezember 2016, 15:29:27
@Esjay: ganz ohne DOIF und on/off:
define VolumeUpDown dummy
attr VolumeUpDown alexaName  Receiver
attr VolumeUpDown alexaRoom  Spielzimmer
attr VolumeUpDown genericDeviceType Speaker
attr VolumeUpDown homebridgeMapping LauterLeiser=harmony_39933799:state,cmd=command


und im alexaMapping zusätzlich: LauterLeiser=state,verb=mach,articles=den,values=lauter:VolumeUp;leiser:VolumeDown

damit kannst du sagen: mach den receiver lauter bzw. mach den receiver leiser

statt des dummys kann man auch das harmony device direkt verwenden.


Nachdem HABridge nicht mehr vernübftig funktioniert, versuche ich mich auch gerade an AlexaFHEM

Leider gelingt mir das mit der Lautstärkeregelung nicht

Müsste durch das Attribut genericDeviceType Speaker  das Gerät nicht zu einem Lautsprecher in der Amazon-App werden? bei mir bleibt es weiterhin Licht / Schalter?

Grüße

Klaus


TomLee

Wichtig wäre ein Reading volume in deinem Gerät.

Dein Zitat bezieht sich auf den Custom Skill.

Gruß

Thomas

Klaus0815

Zitat von: TomLee am 14 September 2019, 19:09:45
Wichtig wäre ein Reading volume in deinem Gerät.

Dein Zitat bezieht sich auf den Custom Skill.

Gruß

Thomas

Das heisst ein direktes "Alexa, mach die Stereoanlage lauter" wird gar nicht gehen, sondern nur " Alexa, sage FHEM, mache die STereoanlage lauter"?

Ein konkretes Gerät habe ich nicht, bzw. kein direkt steuerbares

Ich würde den Umweg über ein Dummy-Device in FHEM gehen.
Kann ich in FHEM was anlegen, das dann in der Alexa-App als Radio / Lautsprecher erscheint?
Oder dort einfach ein Reading Volume hinzufügen?

Grüße
Klaus


MadMax-FHEM

Doch geht auch mit dem Smart Home Skill...

Also direkt: "Alexa, mach Mediairgendwas lauter leiser"

Evtl. mal noch mal in der App löschen und noch mal alexa-fhem reload und noch mal suchen lassen...
...bzw. immer so wenn du etwas änderst/anpasst...

Ich habe einen Dummy so laufen und es geht...

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)

Klaus0815


Hallo Joachim,

könntest Du evtl. hier einen Screenshot dieses Dummy-Devices posten?

Als was wird dieser dann in der Alexa-App angezeigt?

Bei mir wird alles zu Schalter und Licht, oben zittiertes Beispiel findet Alexa erst gar nicht

Viele Grüße


Klaus



MadMax-FHEM

#4135
Klar...
Gibt's zwar schon irgendwo in einem der alexa-fhem Threads ;)

Wollt ich eh, bin nur grad unterwegs...
...sonst wär's schon gepostet... ;)

In der Alexa-App erscheint es als Lautsprecher...
Bzw. habe ich auf "Media-Device" hochgerüstet und kann so auch Kanal etc. schalten...
...daher sieht das Icon jetzt aus wie ein TV...

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)

MadMax-FHEM

Du brauchst (wie bereits geschrieben wurde) entsprechende Readings, also sowas wie volume...

Wenn du auch steuern willst, brauchst du auch ein passendes homebridgeMapping...

Ohne passende Readings, setList und gegebenenfalls homebridgeMapping kann alexa-fhem das nicht (vollständig) erkennen...

genericDeviceType ist nur ein (kleiner) Teil der gesamten "Erkennungslogik"... ;)

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)

MadMax-FHEM

#4137
Zitat von: MadMax-FHEM am 14 September 2019, 20:34:21
Klar...
Gibt's zwar schon irgendwo in einem der alexa-fhem Threads ;)

Wollt ich eh, bin nur grad unterwegs...
...sonst wär's schon gepostet... ;)

In der Alexa-App erscheint es als Lautsprecher...
Bzw. habe ich auf "Media-Device" hochgerüstet und kann so auch Kanal etc. schalten...
...daher sieht das Icon jetzt aus wie ein TV...

Gruß, Joachim

Hier wie versprochen:

zunächst mal der Dummy:


defmod dmControl_MediaBox dummy
attr dmControl_MediaBox alexaName media box
attr dmControl_MediaBox alias Mediabox
attr dmControl_MediaBox comment Wechsel auf media box auf Kanal Nummer | Name\
Nächsten Kanal auf media box\
Mach media box lauter\
Mach media box leiser\
Schalte media box stumm | Schalte den Ton von media box aus\
Schalte media box wieder lauter | Schalte den Ton von media box wieder an\
Wiedergabe auf media box fortsetzen | starten?\
Wiedergabe auf media box pausieren | pause\
Wiedergabe auf media box stoppen
attr dmControl_MediaBox genericDeviceType media
attr dmControl_MediaBox group Multimedia
attr dmControl_MediaBox homebridgeMapping PlaybackController:reading=playback,values=Play;;Pause;;Stop;;Previous;;Next,cmd=playback ChannelController:reading=channel,cmd=channel
attr dmControl_MediaBox icon rc_MEDIAMENU
attr dmControl_MediaBox oldreadings volume
attr dmControl_MediaBox readingList volume mute playback channel
attr dmControl_MediaBox room Wohnzimmer,alexa
attr dmControl_MediaBox setList on off volume mute channel


Etwas abgespeckt (also ohne Pause/Play) dann halt "nur" als Speaker...

Im comment steht was (meistens) sprachlich funktioniert ;)
Da mussten Alexa und ich etwas "üben" ;)
Manchmal klappt es auch (immer noch) nicht so...
...entweder, wenn Alexa die "Media Box" nicht als Gerät "rauskennt": es gibt kein Gerät was...
...oder den Kanal etc. nicht so...

Aber fleißig Rückmeldung per Alexa-App/Verlauf hilft...

Anmerkung: den Namen gut wählen! Habe auch lange rumgetan, bis es was war was ich mochte und Alexa zweifelsfrei (bis auf manchmal) verstand ;) Sowas wie Fernseher etc. ist schlecht (zumindest bei mir nicht so gut gegangen). Alexa versucht dann immer irgendwie/was Fernseher zu finden etc.

Manchmal (gerade) bei Pause/Play (wenn parallel was auf den Echos läuft) "überhört" Alexa auch das Gerät "Media Box" und führt dann das Kommando "einfach" beim Echo aus ;)
Aber auch hier: oft genug Rückmeldung, dann wird das schon ;)


Ah und jetzt noch etwas angepasst/verallgemeinert (also "Pseudo-Code") die Sub in myUtils bzw. vorher noch das Notify.
Wenn das Gerät direkt auf das Ändern der Readings etc. reagiert: dann ist das unnötig! (macht ein Dummy halt nicht bzw. ändern sich halt "nur" die Readings)
Also bei einem echten Gerät. Da dann evtl. mittels homebridgeMapping (falls Readings/Kommandos nicht [ganz] passen)...

Notify:


defmod nControl_MediaBox notify dmControl_MediaBox:(on|off|channel|mute|volume|playback).* {my_MediaBoxControl($NAME, $EVENT)}


Die Sub habe ich, da ich halt verschiedene Geräte habe und je nachdem welche Aktivität gerade läuft (HarmonyHub) ich verschiedene (zusätzliche) Dinge machen will...
...daher auch das "Pseudo-Gerät", Notify und Sub...
Und weil ich auch gleich eine Umsetzung von Kanalname auf Kanalnummer eingebaut habe.
Funktioniert aber naja, weil Alexa die Sender mal so und mal so und mal gar nicht erkennt/versteht...
Aber ist ja noch ausbaufähig, lasse ich mal drin...
...vielleicht kann es wer brauchen/anpassen/verbessern :)

Anmerkung: die Reihenfolge der Sendernamen im Array (also der jeweilige Index) ist dann eben die Kanalnummer ;)

"Ein-/Ausschalten" habe ich rausgenommen. Geht prinzipiell, allerdings gerade mit Lautstärke hat Alexa ab und an ein "Ein/Aus" (also on/off) geschickt, statt mute/unmute ;)
Ist halt doof, wenn statt dem Ton weg das Gerät aus geht...

Jaja und bevor jemand mit Ahnung vom Harmony-Modul bzw. Logitech Harmony schreibt: aber man kann doch play/pause einfach an die Activity schicken bevor man das an das jeweilige Gerät schickt: prinzipiell ja! Aber bei mir ist halt irgendwie im Hub bzw. im HarmonyHub-Modul das play/pause mit dem "falschen" Gerät "verknüpft"...
Daher die Umständlichkeiten... ;)

Das mit Lautstärke habe ich so, weil nur 1x lauter nix wirklich lauter macht, daher setze ich gleich um 5 höher :)
Und auch der Lautstärke-Wert der im Dummy steht passt (da ja nur Dummy ohne "Rück-Kanal") nicht, daher prüfe ich nur, ob es "sprachlich" rauf oder runter sollte ;)
Kann man auch anders machen.
Bzw. werde ich das evtl. noch umstellen, da mein neuer Verstärker (SR6013) direkt Lautstärkewerte kann und auch per Modul in fhem integriert wäre...
...der alte Verstärker (wo der Code her stammt) konnte das halt nicht, daher ;)

Und die Sub:


sub my_MediaBoxControl($$)
{
  my ($Device,$Event) = @_;
  my $CurrentActivity = ReadingsVal("HarmonyHub", "currentActivity", "n.a.");
  my @SenderListe = ("Das Erste", "ZDF", "br heimat", "sat.1", "rtl 2", "rtl", "ProSieben", "VOX", "kabel eins", "n24 doku", "dmax", "n. d. r.", "hr info", "wdr dortmund", "swr 2", "mdr sachsen", "rbb 88.8", "???", "zdfneo");
 
  Log3(undef, 3,"my_MediaBoxControl Device: $Device    Event: $Event");
 
#  if($Event eq "on")
#  {
#    fhem("set HarmonyHub activity Fernsehen");
#  }
#  elsif($Event eq "off")
#  {
#    {fhem "set HarmonyHub activity PowerOff"}
#  }
#  elsif($Event =~ m/mute/)
  if($Event =~ m/mute/)
  {
    if($Event =~ m/1/)
    {
      fhem("set HarmonyHub command Mute");
    }
    elsif($Event =~ m/0/)
    {
      fhem("set HarmonyHub command Mute");
    }
  }
  elsif($Event =~ m/volume/)
  {
    if(OldReadingsVal($Device, "volume", 0) > ReadingsVal($Device, "volume", 0))
    {
      my $NewVolume = ReadingsNum("SR6013", "volume", 0) - 5;
      fhem("set SR6013 volume $NewVolume");
    }
  else
  {
      if(ReadingsVal($Device, "mute", 0) eq "1")
      {
        fhem("set HarmonyHub command Mute");
        fhem("setreading $Device mute 0");
      }
      else
      {
        my $NewVolume = ReadingsNum("SR6013", "volume", 0) + 5;
        fhem("set SR6013 volume $NewVolume");
      }
    }
  }
  elsif($Event =~ m/playback/ &&  $CurrentActivity ne "Fernsehen")
  {
    my $PlayState = (split(/: /, $Event))[1];
    if($CurrentActivity =~ m/Amazon/)
    {
      fhem("set harmony_41290995 command $PlayState");
    }

    Log3(undef, 3,"my_MediaBoxControl Device: $Device    Event: $Event    PlayState: $PlayState");
  }
  # TODO: oder KODI
  elsif($Event =~ m/channel/ && $CurrentActivity eq "Fernsehen")
  {
    my $ChannelNr = (split(/: /, $Event))[1];

#    if(int($ChannelNr) eq $ChannelNr)
    if(looks_like_number($ChannelNr))
    {
      Log3(undef, 3,"my_MediaBoxControl auf Kanalnummer $ChannelNr geschalten");
      fhem("set HarmonyHub channel $ChannelNr");
    }
    else
    {
    #   my $SenderName = lc $ChannelNr;
    my $SenderName = $ChannelNr;
    my $ActSender = "";
    $ChannelNr = 1;

      foreach $ActSender (@SenderListe)
      {
        Log3(undef, 3,"my_MediaBoxControl ChannelNr: $ChannelNr    SenderName: $SenderName      ActSender: $ActSender");

    #        if($ActSender =~ m/$SenderName/)
    #        if($SenderName =~ m/$ActSender/)
        if($SenderName eq $ActSender)
        {
          fhem("set HarmonyHub channel $ChannelNr");
          Log3(undef, 3,"my_MediaBoxControl auf Kanalname $ChannelNr geschalten");
          last;
        }
        $ChannelNr++;
      }
    }
  }
}


Wie geschrieben: erst mal mein "Quick and Dirty" Code, den ich noch irgendwann überarbeiten will...
...nur fraglich wann irgendwann sein wird: weil prinzipiell tut es :)


Wie geschrieben: für die "reine" Erkennung und "Steuerung" der Readings reicht alleine der Dummy wie er ist...
...der Rest ist nur, damit BEI MIR AUCH DAS RICHTIGE PASSIERT :)

ANMERKUNG: die Schnipsel (bis auf die Sub) sind "raw definition"...

Viel Spaß, 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)

TomLee

ZitatAnmerkung: den Namen gut wählen! Habe auch lange rumgetan, bis es was war was ich mochte und Alexa zweifelsfrei (bis auf manchmal) verstand ;) Sowas wie Fernseher etc. ist schlecht (zumindest bei mir nicht so gut gegangen). Alexa versucht dann immer irgendwie/was Fernseher zu finden etc.

Manchmal (gerade) bei Pause/Play (wenn parallel was auf den Echos läuft) "überhört" Alexa auch das Gerät "Media Box" und führt dann das Kommando "einfach" beim Echo aus ;)
Aber auch hier: oft genug Rückmeldung, dann wird das schon ;)


hab zwei TVs einer heißt fernseher und einer tv, alles was ich hier als teste/schreibe klappt mit diesen Gerätenamen, in täglichen Leben nutz ich die Media-Befehle bezüglich TV aber auch so gut wie nicht.

Zu dem Media-Dummy wollte ich aber was sagen hast du den dummy zufällig in einer Gruppe ?
Weißt du das man die Angabe des alexaName (media box) in einer Gruppe weglassen kann wenn man einmal ein Media-Gerät erfolgreich angesprochen hat ?

Beispiel:

Echo, wechsel auf media box auf Kanal Nummer

wird dieser Befehl einmal erfolgreich bei dem Media-Gerät media box ausgeführt reicht bspw. beim nächsten Sprachbefehl ein

Echo, wechsel auf Kanal Nummer

um den Kanal zu ändern, oder ein

Echo,lauter/leiser

um bei der media box die Lautstärke zu ändern.

Jetzt hast du ein weiteres Media-Gerät in der Gruppe bspw. den fernseher.

Um diesen anzusprechen ist klar wieder ein

Echo, wechsel auf fernseher auf Kanal Nummer

um den Kanal zu wechseln.

Und jetzt verhält es sich wieder wie bei media box bei allen weiteren Befehlen an fernseher kann der alexaName wieder weggelassen werden, weil man immer das zuletzt verwendete Media-Gerät in der Gruppe anspricht.




MadMax-FHEM

#4139
Das mit dem Weglassen geht/ginge nur bedingt...
Vielleicht ist das inzwischen besser, es wird ja auf Seiten Amazon ständig rumgebaut...

Aber ich habe z.B. ( fälschlicherweise jetzt nicht mehr ;)  ) meinen TV in die FireTV-Steuerung "eingebaut" (musste man, sonst gings nicht weiter / konnte es nur nachher löschen) und dann war das mit dem Namen Fernseher "Essig" weil Alexa immer meinte ganz schlau zu sein und einfach den "echten" Fernseher genommen hat ;)

Und auch das ist genau das Problem (manchmal).

Es läuft z.B. was auf einem meiner Echos und ich sage irgendwas zu "MEINER" MediaBox, da denkt sich Alexa (oft) oh er meint bestimmt die Wiedergabe auf dem Echo...
Manchmal schaltet Alexa dann einfach irgendwas am Echo...
...oder sagt "Echo unterstützt das nicht, wenn blablabla dann soll ich doch den Gerätenamen nennen"...
...HABE ICH ABER JA ;)

Oder es läuft was auf einem meiner FireTV-Sticks...
Selbes. Manchmal hält sich Alexa halt für sehr smart ;)

Ja das mit Gruppe (wobei ich dachte ginge auch ohne Gruppe) bzw. das wie heißt das wieder "Kontext-Irgendwas" geht weiß ich.
Also das dann solange Alexa (glaubt) den Kontext (zu kennen) kennt gehen Folgebefehle an das gleiche Gerät...

Aber ich habe viel probiert...
...denke es kommt an auf vorhandene Geräte, Aussprache, Satzformulierung, was grad woanders (Echo, FireTV, ...) läuft und und und...

Wie geschrieben: Feedback hilft auch. Also oft genug bemängeln, dass es zwar verstanden wurde (sehe ich ja im Verlauf) aber anders ausgeführt wurde (sehe ich ja am alexa-fhem Log) hilft...
...irgendwann lernt die Gute dazu...

Dann bauen die Amazon-Frösche wieder weiter rum und manches was schon ging wird wieder schlechter...

Von daher: so geht es bei mir... :)

Ab und an probiere ich mal wieder rum...
...aber eigentlich habe ich dafür doch sehr wenig Zeit...

Und ich muss gestehen: mit Gruppen (außer Multiroom) habe ich noch nichts gemacht. Alles was ich machen will klappt noch gut ohne...

Und auch bei Multiroom gab es Probleme.
Hatte so einen tollen Namen: "Überall" :)

"Alexa spiele XY auf überall" :)

Ging echt lang (bestimmt 1/2 Jahr und länger) gut...
...bis vor nem Monat oder so.

Da kam immer: ich konnte kein Gerät finden das ... unterstützt. Ich soll doch ein Gerät nennen (HABE ICH JA ;)  ) oder eben Multiroom anlegen (HATTE ICH JA ;)  ).
Bis dann nach langem Hin-und-her mit Amazon Support rauskam, dass der Name nicht (mehr) geht/erlaubt ist... ;)

Jetzt heißt die Gruppe halt: "alle Echos"...
...bis das mal wieder nicht mehr gut ist ;)

Von daher...

Ich weiß schon, dass ich da optimieren kann...
...kann ich machen, wenn ich mal nicht mehr arbeiten muss... ;)

Aber danke für die Hinweise!

Ich lese das schon, nehme es auf, merke es mir...
...kommt halt auf den Stapel: kann man so und so optimieren...

Und dann muss halt wieder Zeit sein ;)

EDIT: allerdings nehme ich zum Testen neuer Möglichkeiten (trotzallem) "gerne" einen Dummy mit Notify und Sub, weil ich dann das Gerät (Dummy) sehr schnell auf die Bedürfnisse von Alexa anpassen kann (ein paar Readings vergeben und ein wenig setList, genericDeviceType und gut is :)  ). Danach kann ich mich dann mit Readings/Notify und Sub austoben und sehen was kommt wie was geht etc. Und dann könnte ich nat. umstellen... Meist geht es dann aber so gut, dass ich es (erst mal) lasse ;)  Bis ich wieder mal Zeit/Lust auf "Optimierungsorgie" habe... Weil ich immer gleich einiges auf einmal optimiere und dann brauche ich länger Ruhe und Zeit weil am Ende muss es ja wieder mindestens so laufen wie früher... Optimierung sehe/merke ja nur ich: weil ich weiß wie "schlimm" es vorher war und wie "schön" es jetzt ist... Das "Verhalten" ist ja mehr oder weniger (meistens) genau wie vorher... (und nur das bemerken "andere" ;)  )...

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)