Autor Thema: Alexa auf den genannten Sender schalten lassen  (Gelesen 259 mal)

Offline trs

  • Full Member
  • ***
  • Beiträge: 130
Alexa auf den genannten Sender schalten lassen
« am: 15 Juli 2019, 19:35:56 »
Hallo,

ich stecke gerade fest. Ich will, dass Alexa den genannten Sender einschaltet. Das klappt auch wunderbar mit dem FHEM Connector, dem Samsung TV Modul, einem Dummy für jeden Sender und einem dazugehörigen DOIF.
Jetzt muss allerdings für jeden einzelnen Sender der Dummy und das DOIF einzeln erstellt werden. Ich könnte in dem jeweiligen Programm-Dummy die Sendernummer als Konstante mit einem UserReading definieren. (oder als vier UserReadings, da die Sendernummer 4-stellig ist)
Dann würde ich ein DOIF erstellen, der dann die zum Sender (=Dummy) passende Sendernummer über das Samsung TV-Modul an den TV übermittelt. Das erspart jedenfalls die ganzen Programm-Dummys.

Jetzt fehlt mir nur ein Denkanstoß, wie ich das DOIF formuliere. Das jetzige DOIF für z.B. ARD sieht so aus:

defmod ARD_DOIF_1 DOIF (([ARD:"^on$"]) and ([Samsung_TV:state]eq"absent"))\
(set Samsung_TV power)\
(set Fernseher on)\
(set Samsung_TV 0) \
(set Samsung_TV 1)\
(set Samsung_TV 0) \
(set Samsung_TV 0)\
DOELSEIF (([ARD:"^on$"]) and ([Samsung_TV:state]ne"absent"))  \
(set Samsung_TV 0) \
(set Samsung_TV 1)\
(set Samsung_TV 0) \
(set Samsung_TV 0)
attr ARD_DOIF_1 do always
attr ARD_DOIdefmod ARD_DOIF_1 DOIF (([ARD:"^on$"]) and ([Samsung_TV:state]eq"absent"))\
(set Samsung_TV power)\
(set Fernseher on)\
(set Samsung_TV 0) \
(set Samsung_TV 1)\
(set Samsung_TV 0) \
(set Samsung_TV 0)\
DOELSEIF (([ARD:"^on$"]) and ([Samsung_TV:state]ne"absent"))  \
(set Samsung_TV 0) \
(set Samsung_TV 1)\
(set Samsung_TV 0) \
(set Samsung_TV 0)
attr ARD_DOIF_1 do always
attr ARD_DOIF_1 wait 0,5,25,0.5,0.2,0.2,0.2,0.2:0.5,0.2,0.2,0.2,0.2

setstate ARD_DOIF_1 cmd_2
setstate ARD_DOIF_1 2019-07-15 19:07:18 Device Samsung_TV
setstate ARD_DOIF_1 2019-07-15 18:36:50 cmd 2.4
setstate ARD_DOIF_1 2019-07-15 18:36:50 cmd_event ARD
setstate ARD_DOIF_1 2019-07-15 18:36:50 cmd_nr 2
setstate ARD_DOIF_1 2019-07-15 18:36:50 cmd_seqnr 4
setstate ARD_DOIF_1 2019-07-15 18:36:49 e_ARD_events on
setstate ARD_DOIF_1 2019-07-15 18:36:13 mode enabled
setstate ARD_DOIF_1 2019-07-15 18:36:50 state cmd_2
setstate ARD_DOIF_1 2019-07-15 18:36:50 wait_timer no timer

F_1 wait 0,5,25,0.5,0.2,0.2,0.2,0.2:0.5,0.2,0.2,0.2,0.2

setstate ARD_DOIF_1 cmd_2
setstate ARD_DOIF_1 2019-07-15 19:07:18 Device Samsung_TV
setstate ARD_DOIF_1 2019-07-15 18:36:50 cmd 2.4
setstate ARD_DOIF_1 2019-07-15 18:36:50 cmd_event ARD
setstate ARD_DOIF_1 2019-07-15 18:36:50 cmd_nr 2
setstate ARD_DOIF_1 2019-07-15 18:36:50 cmd_seqnr 4
setstate ARD_DOIF_1 2019-07-15 18:36:49 e_ARD_events on
setstate ARD_DOIF_1 2019-07-15 18:36:13 mode enabled
setstate ARD_DOIF_1 2019-07-15 18:36:50 state cmd_2
setstate ARD_DOIF_1 2019-07-15 18:36:50 wait_timer no timer

Hat jemand von euch schon einmal so ein Konstrukt gebastelt?

Gruss
Thorsten

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 6100
  • NIVEAu ist keine Creme...
Antw:Alexa auf den genannten Sender schalten lassen
« Antwort #1 am: 15 Juli 2019, 20:26:40 »
Ich mach das so:


sub my_MediaBoxControl($$)
{
  my ($Device,$Event) = @_;

  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");
 
    my $ChannelNr = (split(/: /, $Event))[1];

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

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

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

Ich hab's etwas zusammengekürzt, weil ich da auch Lautstärke usw. bei mir drin hab...
...und auf dem Handy zählen sich die Klammern schwer...
...kann also sein, dass die eine oder andere Klammer nicht so... ;)

Ich rufe das dann mit Notify auf Channel bei meinem Dummy der als MedienDevice oder so definiert ist...
Ich übergebe Name und Event...

Funktioniert wenn eine Nummer übergeben wird und ein Sendername...

Aber oft erkennt Alexa/Amazon den Sender nicht...
...oder übergibt "eigenartige Namen"... ;)

Bei manchen Nummern geht es auch manchmal schief, z.B. bei 16 wird oft 610 (also 6 - 10 ;)  ) übergeben...

Gruß, Joachim
« Letzte Änderung: 15 Juli 2019, 20:30:57 von MadMax-FHEM »
FHEM 5.9 PI3: HM-CFG-USB, 40x HM, ZWave-USB, 6x ZWave, EnOcean-PI, 3x EnOcean, HUE, CO2, ESP-Multisensor, FireTV, KODI, alexa-fhem, ...
FHEM 5.9 PI2: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, KODI, ha-bridge, ...
FHEM 5.9 PI3 (Test): HM-MOD-PCB, Snips, Google Home, ...

Offline trs

  • Full Member
  • ***
  • Beiträge: 130
Antw:Alexa auf den genannten Sender schalten lassen
« Antwort #2 am: 15 Juli 2019, 20:47:08 »
Danke Joachim für deine Lösung. Passt bei mir nicht ganz. Ich suche nur eine Lösung, wie ich die die Konstanten aus den einzelnen Programm-Dummys (z.B. ARD = 0,1,0,0, entspricht Sendernummer 0100) in ein universelles DOIF einbaue, der zu dem gewählten Sender die entsprechende Sendernummer übermittelt.

Gruss
Thorsten

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 6100
  • NIVEAu ist keine Creme...
Antw:Alexa auf den genannten Sender schalten lassen
« Antwort #3 am: 15 Juli 2019, 20:57:21 »
Du kannst ja 2 Arrays machen...

Also ich iteriere ja durch mein Array mit Sendernamen bis ich einen Treffer habe...

Die Stelle im Array ist dann die Sendernummer...

Wenn du mit dem Index in ein 2tes Array mit Sendernummern gehst und quasi parallel im 2ten Array passend die Sendernummer hast, dann kannst du die ja mit SenderNummerArray[$Index] auslesen...

$Index ist eben die Stelle im 1ten Array mit Sendernamen...


Oder ich hab noch nicht verstanden was genau du machen willst...

Was ist das mit dem/den Dummy?

EDIT: also wozu brauchst du für jeden Sender einen Dummy?

EDIT2: @Sendernamen("ARD","ZDF",...) / @Sendernummer("0100","0101",...)  also in Array Sendernamen nach "match" suchen und mit dem Index (also der Stelle im Array) dann im 2ten Array die Sendernummer auslesen und übergeben also umschalten (ich mache das bei mir im Code mit HarmonyHub)...

Gruß und sorry, Joachim
« Letzte Änderung: 15 Juli 2019, 21:06:53 von MadMax-FHEM »
FHEM 5.9 PI3: HM-CFG-USB, 40x HM, ZWave-USB, 6x ZWave, EnOcean-PI, 3x EnOcean, HUE, CO2, ESP-Multisensor, FireTV, KODI, alexa-fhem, ...
FHEM 5.9 PI2: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, KODI, ha-bridge, ...
FHEM 5.9 PI3 (Test): HM-MOD-PCB, Snips, Google Home, ...

Offline trs

  • Full Member
  • ***
  • Beiträge: 130
Antw:Alexa auf den genannten Sender schalten lassen
« Antwort #4 am: 15 Juli 2019, 21:26:00 »
Hallo,

den Dummy benötige ich, damit Alexa darau Zugriff hat. "Alexa, schalte ARD ein"


Gruss
Thorsten

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 6100
  • NIVEAu ist keine Creme...
Antw:Alexa auf den genannten Sender schalten lassen
« Antwort #5 am: 15 Juli 2019, 21:30:58 »
Aber warum für jeden Sender einen Dummy?

Ich habe einen Dummy mit dem ich Sender umschalte...
...per Sprache über Alexa (siehe "comment")...

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

Hier noch das Notify:

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


Gruß, Joachim
« Letzte Änderung: 15 Juli 2019, 21:36:51 von MadMax-FHEM »
FHEM 5.9 PI3: HM-CFG-USB, 40x HM, ZWave-USB, 6x ZWave, EnOcean-PI, 3x EnOcean, HUE, CO2, ESP-Multisensor, FireTV, KODI, alexa-fhem, ...
FHEM 5.9 PI2: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, KODI, ha-bridge, ...
FHEM 5.9 PI3 (Test): HM-MOD-PCB, Snips, Google Home, ...

Offline trs

  • Full Member
  • ***
  • Beiträge: 130
Antw:Alexa auf den genannten Sender schalten lassen
« Antwort #6 am: 15 Juli 2019, 21:50:45 »
Geht mit dem FHEM Connector leider nicht.

Gruss
Thorsten

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 6100
  • NIVEAu ist keine Creme...
Antw:Alexa auf den genannten Sender schalten lassen
« Antwort #7 am: 15 Juli 2019, 21:51:36 »
Warum nicht, habe auch nur den fhem Connector...

Ich sage: Alexa, schalte auf mediabox auf Kanal das erste oder zdf oder...

Das geht mit meinem Dummy, Notify und der Sub die ich gepostet habe...
...gut bei der Sub halt evtl. "Kürzungsfehler" beachten... ;)

Bei dir muss doch nur das "finden" der Sendernummer zur Weitergabe an den TV angepasst werden (siehe meine Idee mit dem 2ten Array)...

Gruß, Joachim
« Letzte Änderung: 15 Juli 2019, 22:21:01 von MadMax-FHEM »
FHEM 5.9 PI3: HM-CFG-USB, 40x HM, ZWave-USB, 6x ZWave, EnOcean-PI, 3x EnOcean, HUE, CO2, ESP-Multisensor, FireTV, KODI, alexa-fhem, ...
FHEM 5.9 PI2: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, KODI, ha-bridge, ...
FHEM 5.9 PI3 (Test): HM-MOD-PCB, Snips, Google Home, ...

Offline trs

  • Full Member
  • ***
  • Beiträge: 130
Antw:Alexa auf den genannten Sender schalten lassen
« Antwort #8 am: 15 Juli 2019, 21:53:39 »
Ok. Zur Entschuldigung: läuft bei mir erst seit ein paar Tagen...

Danke und Gruss
Thorsten