04
Jan 2017
Marko

amazon echo (alexa) mit Harmony Hub verbinden und TV-Sender schalten

Immer wieder lese ich, dass Besitzer eines Amazon echo* vor allem eine Integration mit einer Harmony Hub* vermissen.

Klar, der Amazon echo bzw. „Alexa“ ist noch etwas von der Marktreife und eine Offizielle Lösung wird früher oder später sicher verfügbar sein.

In meinem Wohnzimmer habe ich das nun „vorab“ bereits mit Hilfe eines FHEM-Servers und ein wenig Programmieren erreicht.
Wie das Genau geht beschreibe ich im folgenden.

Das ist die Voraussetzung

Ihr benötigt:

  1. Natürlich einen Amazon echo dot* oder ein Amazon echo*
  2. Einen installierten und Eingerichteten FHEM-Server
  3. Natürlich einen Harmony Hub*

das setze ich voraus:

  1. Die Harmony Hub ist bereits in FHEM eingerichtet. Ihr also via FHEM bereits den hub bedienen könnt
  2. Das Alexa Modul für FHEM ist eingerichtet (Alexa-Fhem)

Wenn ihr die Voraussetzungen erfüllt habt, solltet ihr also bereits ein Fhem-Switch per Alexa Steuern können „Alexa, Schalte XY ein“

Auf geht’s: wir legen FHEM Schalter an.

Zunächst legt ihr für jeden Kanal den Ihr schalten wollt einen Dummy switch an. Im Beispiel verwende ich die Sender Pro7, Sat1 und DMAX.
Die Switches nenne ich TV.KANAL.XXX uswso kann ich später leichter Aktionen für die komplette Gruppe ausführen.
Ausserdem definiere ich für jeden „Kanal-Schalter“ die Attribute
webCmd, room und eventMap.

!!!Gerade eventMap ist wichtig!
Sonst erkennt Alexa die Schalter nicht als Geräte.!!!

!!! Wichtig ist auch, dass ihr für jeden Kanal auch noch einen sprechenden „alexaName“ setzt z.B. „prosieben“ für TV.KANAL.PRO7 usw..  !!!

Das Ganze sieht jetzt in etwa so aus:

 

Immer wenn ein Sender eingeschaltet wird…

Nun erstellt man ein Notify. Dieses soll immer auslösen sobald ein TV-Kanal auf „AN“ geschaltet wird. Ich habe ihn notify.sender.wechsel genannt:

Was das Script tun soll

Die Theorie ist es einfach:
immer ein Kanal auf „EIN“ geschaltet wird. Sollen alle andere auf „AUS“ geschaltet werden. (denn es kann ja immer nur ein Kanal eingeschaltet sein)

Als nächstes schaut das Script welche Nummer zu dem eingeschalteten Kanal gehört und sendet entsprechende Tastenreihenfolge über das Harmony Hub Modul.

Ihr müsst also ab Zeile 6 eure Kanalnummern eintragen.
Außerdem müsst ihr die Zeile 10 anpassen..

Ich sende z.b. Taste 0  mit meiner Hub mit so einer Zeile:

in meinem Hub ist mein Samsung bereits verbunden.

Der Samsung TV heißt im FHEM  harmony_41246248 und der Befehl für Taste 0 ist Number0.

 

 

!!!Hier müsst ihr unbedingt euren Hub Name eintragen!!!

So sieht das Script bei mir aus:


Wenn man nun einen Kanal EIN schaltet gehen alle anderen Switches auf AUS.
Dann wird geschaut welcher Kanal eingeschaltet wurde, entsprechend der CODE ermittelt und gesendet.
Nun einmal ALEXA-FHEM neu starten und dann in der Alexa app nach neuen Geräten suchen

Das war es auch schon,

selbes Script „leicht modifiziert“ kann z.b. auch verwendet werden um Harmony Szenen zu wechseln.

Fragen beantworte ich gerne in den Kommentaren


10 Kommentare zu "amazon echo (alexa) mit Harmony Hub verbinden und TV-Sender schalten"

  1. Sven Giersch schreibt:

    Hallo Marko,

    vielen Dank für die Anleitung, funktioniert und ist sehr einfach zu konfigurieren.
    Ich habe nun versucht, mit einem zweiten modifizierten notify auch Activities aufzurufen, da haut irgendwas aber noch nicht hin. Da sich dabei ja nur das Hash-Array (Namen der Activities statt Ziffern) und der FHEM-Aufruf ( set HarmonyHub activity $char) unterscheiden, weiss ich noch nicht warum das notify nicht auslöst.

    Mir ist auch mangels tiefer Perl-Kenntnis nicht klar, wofür Du den „leeren“ split-Befehl ohne Angabe eines Trennzeichens brauchst?

    Danke für Tips,

    Sven

  2. Marko schreibt:

    Hi Sven,
    das der Kanal ist ein String „123“.. das leere Split ..wandelt den String „123“ in ein array [„1″,“2″,“3“] um .. fungiert quasi als string to array..
    und dann wird in einer schleife jede Taste einmal gesendet.. indem ich die zahl in den sring konkateniere..
    $char ist quasi 1 2 und 3 …im foreach…

    fhem „set harmony_41246248 Number$char“

    ps: ich kann auch kein perl 😉 ..
    dafür ein paar andere Sprachen und habe mir das dann so wie im Beispiel hergeleitet 😉

  3. Sven Giersch schreibt:

    Hi Marko,

    ach so, jetzt ist mir das klar…

    Natürlich, das ist für einstelligen Zahle (Kanäle) eigentlich nicht nötig, aber sobald es 2 oder mehr Tasten hat, muss ich die natürlich nacheinander senden.

    Das bedeutet dann auch, daß das Splitten bei den Activities natürlich Quatsch ist, da ich ja direkt eine ganze Zeichenkette an den Hub selber und keine IR-Tastendrücke über einen Hub-Kanal senden muss.

    Wenn also „Fernsehen“ der FHEM-Name der Activity im Hub selbst ist, wie bisher „dummy.TV“ => „Fernsehen“ im Hash umsetzen, dann aber direkt den „dummy.TV“ als index verwenden, also foreach-Schleife weglassen und

    fhem („set HarmonyHub activity $code_of{$NAME}“)

    müßte dann ja gehen…

    SG

  4. Peter Herold schreibt:

    Hallo Onkeloki,

    ich versuche gerade, das bei mir nachzubauen, scheitere aber scheinbar gerade am Scriptteil. Wenn ich es richtig verstehe, muss der Code ins 99_myUtils.pm, danach muss noch ein „reload 99_myUtils.pm“ gemacht werden.

    Hier bekomme ich jedoch eine Fehlermeldung und ich sehe nicht, wo der Fehler sein soll…

    syntax error at ./FHEM/99_myUtils.pm line 46, near „*:on “
    syntax error at ./FHEM/99_myUtils.pm line 94, near „}“

    Hast Du eine Idee, was noch schief gehen könnte?

    Gruß,
    Peter

  5. Peter Herold schreibt:

    Hallo Onkeloki,

    hab’s gefunden. Ist natürlich kein Perl Code für 99_myUtils.pm, sondern direkt für den notify 🙂

    Gruß,
    Peter

  6. Marko schreibt:

    Top! Sorry fürs späte melden hat ja dann doch geklappt

  7. krossi schreibt:

    komme nicht klar brauche Hilfe , wo füge ich das script nun ein , wenn ich es in der fhem.cfg ,lege bekomme ich nur fehlermeldung zb.Unknown command TV.KANAL.*:on, try help
    habe es wie folgt eingetragen in der fhemcfg.

    define TV.KANAL.PRO7 dummy;
    define TV.KANAL.SAT1 dummy;
    define TV.KANAL.DMAX dummy;
    define TV.KANAL.RTL2 dummy;
    define TV.KANAL.RTL dummy;
    define TV.KANAL.VOX dummy;
    define TV.KANAL.KABEL1 dummy;

    attr TV.KANAL.* webCmd on:off;
    attr TV.KANAL.* room TV-Kanal;
    attr TV.KANAL.* eventMap on off;

    define notify.sender.wechsel notify TV.KANAL.*:on {}

    TV.KANAL.*:on {
    my $alloff = „^(?!“.$NAME.“)TV.KANAL.* off“;
    print $alloff;
    fhem „set „.$alloff;
    my %code_of = (
    „TV.KANAL.PRO7“ => „146“,
    „TV.KANAL.SAT1“ => „173“,
    „TV.KANAL.DMAX“ =>“61″,
    „TV.KANAL.RTL2“ => „163“,
    „TV.KANAL.RTL“ => „160“,
    „TV.KANAL.VOX“ => „250“,
    „TV.KANAL.KABEL1“ => „110“,
    );
    foreach my $char (split //, $code_of{$NAME}) {
    fhem „set samsungTV Number$char“
    }
    }

    wo ist nun der Fehler??

  8. Marko schreibt:

    trägt dein device im harmony hub würklich „samsungTV“?
    ich muß fhem „set harmony_41246248 Number$char“ machen..

    „get harmonyhub devices“ liefert
    41246248 Samsung TV

  9. krossi schreibt:

    ja heisst so habe es mit rename geändert! aber meine frage ist ja das notify so wie es dort steht nimmt er es nicht, kannst du mir mal ein screenshot von deinem eintrag in der fhem cfg zeigen wie das notify richtig steht bzw.wo es steht
    krossi@freenet.de

  10. krossi schreibt:

    hat sich erledigt , habe es anders gelöst THX

Kommentar verfassen