Alexa auf den genannten Sender schalten lassen

Begonnen von trs, 15 Juli 2019, 19:35:56

Vorheriges Thema - Nächstes Thema

trs

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

MadMax-FHEM

#1
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
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)

trs

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

MadMax-FHEM

#3
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
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)

trs

Hallo,

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


Gruss
Thorsten

MadMax-FHEM

#5
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
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)

trs

Geht mit dem FHEM Connector leider nicht.

Gruss
Thorsten

MadMax-FHEM

#7
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
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)

trs

Ok. Zur Entschuldigung: läuft bei mir erst seit ein paar Tagen...

Danke und Gruss
Thorsten

Guenni1404

Zitat von: MadMax-FHEM 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

Ich habe das bei mir mal umgesetz. Immer wenn ich lauter oder leiser machen will bekomme ich die Meldung "Media Box unterstützt das nicht."

Kann mir einer Helfen?

MadMax-FHEM

Poste doch mal ein list von deiner Umsetzung...

Und auch was im alexa-fhem Log steht bei der Erkennung...

Welches "Icon" ist denn in der Alexa App zu sehen...

Was auch sein kann (habe ich auch ab und an), dass Alexa da was "durcheinander" kriegt...
Da mal im Verlauf nachschauen (wobei der mittlerweile nicht mehr so gut ist wie früher v.a. bzgl. Feedback)...

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)

Guenni1404

Ich habe deine Umsetzung übernommen
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


FHEM connector gibt folgendes aus:
[2019-11-2 4:53:37 PM] [FHEM] dmControl_MediaBox is media
[2019-11-2 4:53:37 PM] [FHEM] dmControl_MediaBox has
[2019-11-2 4:53:37 PM] [FHEM]   On [undefined;on,off]
[2019-11-2 4:53:37 PM] [FHEM]   PlaybackController [playback]
[2019-11-2 4:53:37 PM] [FHEM]   ChannelController [channel]


Wie gesagt es geht alles außer Lautstärke.

MadMax-FHEM

Das ist kein list...

Hat dein Device auch die entsprechenden Readings!?

Und welches Icon wird angezeigt...

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)

Guenni1404

Sorry

Internals:
   CFGFN     
   FUUID      5dbda18f-f33f-83b5-3eed-8689a475af077225
   NAME       dmControl_MediaBox
   NR         35351
   STATE      ???
   TYPE       dummy
   READINGS:
     2019-11-02 16:39:41   channel         2
     2019-11-02 16:40:30   playback        Play
Attributes:
   alexaName  media box
   alias      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
   genericDeviceType media
   group      Multimedia
   homebridgeMapping PlaybackController:reading=playback,values=Play;Pause;Stop;Previous;Next,cmd=playback ChannelController:reading=channel,cmd=channel
   icon       rc_MEDIAMENU
   oldreadings volume
   readingList volume mute playback channel
   room       Wohnzimmer,alexa
   setList    on off volume mute channel


Alexa zeigt grün

Guenni1404

Ok, hat sich erledigt.
Hatte das Reading volume vergessen.