Gelöst: Über Dummy Lautstärke setzen

Begonnen von coolheizer, 26 März 2021, 17:55:34

Vorheriges Thema - Nächstes Thema

coolheizer

Leider hat Amazon schon wieder mal Änderungen vorgenommen, so das es mit der Ha Bridge mal wieder Probleme gibt.

Alexa FHEM habe ich schon länger am laufen, aber den schritt alles darauf zu portieren bisher gescheut.

Über einen dummy kann ich, so wie es vorher mit der Ha Bridge auch geschaltet wurde, mit "Fernseher an" Verstärker ein und auf richtigen Kanal schalten, Sat Receiver sowie Fernseher einschalten.

Nun würde ich gerne auch die Lautstärke wie gewohnt hierüber steuern, und hier hapert es, einen Slider habe ich bereits eingefügt.

Schätze das ganze wird über homebridgeMapping umgesetzt, und genau dieses bekomme ich nicht hin.

Die lautstärke soll über den verstärker (Denon) geändert werden.

Mein dummy:

defmod Fernsehen dummy
attr Fernsehen Gesamtes_Licht Gesamte_Wohnung
attr Fernsehen alexaName Wohnzimmer1 Fernseher
attr Fernsehen genericDeviceType Speaker
attr Fernsehen room 1_Wohnzimmer
attr Fernsehen setList on off :slider,00,0.5,60
attr Fernsehen webCmd on:off


Verstärker:
defmod Denon DENON_AVR 191.168.178.203:23
attr Denon userattr TV TV_map structexclude
attr Denon TV Gesamte_Wohnung
attr Denon alexaName Verstärker
attr Denon alexaRoom 1
attr Denon cmdIcon muteT:rc_MUTE
attr Denon devStateIcon on:rc_GREEN:main_off main_off:rc_YELLOW:main_on off:rc_STOP:main_on absent:rc_RED:main_on muted:rc_MUTE@green:muteT playing:rc_PLAY@green:pause paused:rc_PAUSE@green:play disconnected:rc_RED
attr Denon genericDeviceType light
attr Denon room 1_Wohnzimmer
attr Denon stateFormat stateAV
attr Denon suppressReading HASH.*
attr Denon webCmd volume:muteT:input:surroundMode

setstate Denon off
setstate Denon 2018-10-21 10:16:20 HASH(0x30e9bd8) -
setstate Denon 2021-03-26 10:55:32 Muting-Level mute
setstate Denon 2021-03-26 10:55:32 Volume-Display absolute
setstate Denon 2021-03-26 10:55:32 Volume-Startup last
setstate Denon 2021-03-26 10:55:33 allZoneStereo off
setstate Denon 2019-10-06 12:25:35 ampAssign 5.1-Channel+Zone2
setstate Denon 2021-03-26 10:55:33 aspectRatio 16:9
setstate Denon 2021-03-26 10:55:32 autoStandby 15min
setstate Denon 2021-03-26 10:55:33 bass 3
setstate Denon 2021-03-26 10:55:33 cinemaEQ off
setstate Denon 2021-03-26 10:55:32 currentAlbum -
setstate Denon 2021-03-26 10:55:32 currentArtist -
setstate Denon 2021-03-26 10:55:32 currentBitrate -
setstate Denon 2021-03-26 10:55:32 currentCover http://191.168.178.203/img/album%20art_S.png?1616752532000
setstate Denon 2021-03-26 10:55:32 currentMedia -
setstate Denon 2021-03-26 10:55:32 currentPlaytime -
setstate Denon 2021-03-26 10:55:32 currentStation -
setstate Denon 2021-03-26 10:55:31 currentStream -
setstate Denon 2021-03-26 10:55:32 currentTitle -
setstate Denon 2021-03-26 10:55:32 digitalInput auto
setstate Denon 2021-03-26 10:55:32 display bright
setstate Denon 2021-03-26 10:55:33 dynamicCompression off
setstate Denon 2021-03-26 10:55:33 dynamicEQ on
setstate Denon 2021-03-26 10:55:33 dynamicVolume off
setstate Denon 2021-03-26 10:55:32 eco auto
setstate Denon 2019-02-02 14:04:36 graphicEQ on
setstate Denon 2021-03-26 10:54:30 httpError 191.168.178.203: Connection refused (111)
setstate Denon 2021-03-26 10:54:30 httpState ERROR
setstate Denon 2021-03-26 10:55:32 ignore -
setstate Denon 2021-03-26 10:55:31 input Sat/Cbl
setstate Denon 2021-03-26 10:55:32 inputSound hdmi
setstate Denon 2020-03-08 15:06:57 levelCenter 0
setstate Denon 2020-03-08 15:06:57 levelFrontLeft 0
setstate Denon 2020-03-08 15:06:57 levelFrontRight 0
setstate Denon 2020-03-08 15:06:57 levelSourroundLeft 0
setstate Denon 2020-03-08 15:06:57 levelSourroundRight 0
setstate Denon 2020-03-07 19:19:50 levelSubwoofer 2
setstate Denon 2019-10-06 12:25:35 lock off
setstate Denon 2021-03-26 10:55:33 loudness on
setstate Denon 2021-03-26 10:55:33 lowFrequencyEffects 0
setstate Denon 2019-10-06 12:25:34 model AVR-X3100W
setstate Denon 2021-03-26 10:55:33 multEQ reference
setstate Denon 2021-03-26 10:55:31 mute off
setstate Denon 2021-03-26 10:55:32 playStatus stopped
setstate Denon 2021-03-26 10:55:31 power off
setstate Denon 2021-03-26 10:55:31 presence present
setstate Denon 2021-03-26 10:55:32 resolution auto
setstate Denon 2021-03-26 10:55:32 resolutionHDMI auto
setstate Denon 2021-03-26 09:36:05 samplingRate 48 khz
setstate Denon 2021-03-26 10:55:32 setup off
setstate Denon 2020-03-11 22:26:51 signal PCM
setstate Denon 2021-03-26 10:55:31 sleep off
setstate Denon 2020-03-10 11:05:34 sound Stereo
setstate Denon 2021-03-26 10:55:33 sound_out Stereo
setstate Denon 2021-03-26 10:55:31 sound_signal_in -
setstate Denon 2021-03-26 10:55:31 state off
setstate Denon 2021-03-26 10:55:32 stateAV off
setstate Denon 2021-03-25 20:36:49 surroundMode Movie
setstate Denon 2021-03-26 10:55:33 toneControl on
setstate Denon 2021-03-26 10:55:33 treble 0
setstate Denon 2021-03-26 10:55:33 trigger1 off
setstate Denon 2021-03-26 10:55:33 tunerBand FM
setstate Denon 2021-03-26 10:55:33 tunerFrequency 87.5 MHz
setstate Denon 2021-03-26 10:55:33 tunerMode auto
setstate Denon 2021-03-26 10:55:33 tunerPreset 1
setstate Denon 2021-03-26 10:55:33 videoProcessingMode auto
setstate Denon 2021-03-26 10:55:33 videoSelect off
setstate Denon 2021-03-26 10:55:31 volume 10
setstate Denon 2021-03-26 10:55:31 volumeMax  80
setstate Denon 2021-03-26 10:55:31 volumeStraight -70
setstate Denon 2021-03-26 10:55:31 zone2 off
setstate Denon 2021-03-26 09:36:48 zoneMain off



Kann mir da jemand weiter helfen?

Gruß
Karsten
FHEM 5.8 auf Raspberry Pi 3, HM-MOD-UART und  MapleCUN.
HM-MOD-Re-8 für Velux Rolladensteuerung.
HM-CC-RT-DN.
HM-SEC-SCo.
HM-LC-Bl1PBU-FM.

jhohmann

Ich kann dir zwar nicht wirklich helfen, aber warum hast du dein Denon als Licht definiert?
Zitatattr Denon genericDeviceType light
Probiere doch mal
attr Denon genericDeviceType Speaker
Oder lass das mal komplett weg. Eventuell wird das Gerät dann schon richtig erkannt. Bei mir gehen meine Yamaha Geräte auch ohne dieses Attribut in HomeBridge.
Raspberry Pi 4 - bookworm / EnOcean - Rollo+Licht, deCONZ - Licht+Sensoren, ZWave - CO Messung, HMCCU mit piVCCU - Heizung+Rollo
plus dovecot, minidlna

coolheizer

Danke jhomann für den Versuch,
ich möchte jedoch nicht direkt über den Verstärker die Lautstärke einstellen sondern über den dummy.

Wie soll ich das erklären? Die Lautstärke wird zwar über den Denon verändert aber:


Mit "Alexa Fernseher an" schaltet Fernseher, Verstärker auf richtigen Kanal und Sat-Receiver ein.

Der befehl für lauter soll entsprechend "Alexa Fernseher Lautstärke auf 30%" und halt nicht "Alexa Verstärker Lautstärke auf 30%"



genericDeviceType habe ich hier beim Denon nicht all zu viel Beachtung geschenkt, stammt noch von den ersten Versuchen, gab es bei der HA Bridge doch nur Lichter,
aber immerhin konnte ich einfach als Dimmwert die Lautstärke Verstellen.
FHEM 5.8 auf Raspberry Pi 3, HM-MOD-UART und  MapleCUN.
HM-MOD-Re-8 für Velux Rolladensteuerung.
HM-CC-RT-DN.
HM-SEC-SCo.
HM-LC-Bl1PBU-FM.

MadMax-FHEM

#3
Ich poste mal was ich habe...

Dummy (raw definition / wichtig: auch die sets mit eingeben ODER: die Readings volume etc. "manuell" erzeugen: setreading):


defmod dmControl_MediaBox dummy
attr dmControl_MediaBox alexaName media box
attr dmControl_MediaBox alias Mediabox
attr dmControl_MediaBox genericDeviceType media
attr dmControl_MediaBox homebridgeMapping PlaybackController:reading=playback,values=Play;;Pause;;Stop;;Previous;;Next,cmd=playback ChannelController:reading=channel,cmd=channel
attr dmControl_MediaBox oldreadings volume
attr dmControl_MediaBox readingList volume mute playback channel
attr dmControl_MediaBox setList playback on off volume mute channel
attr dmControl_MediaBox webCmd :

setstate dmControl_MediaBox 2
setstate dmControl_MediaBox 2021-02-27 20:24:45 channel 2
setstate dmControl_MediaBox 2021-02-18 21:10:37 mute 0
setstate dmControl_MediaBox 2021-02-16 18:03:57 playback Play
setstate dmControl_MediaBox 2021-03-27 00:59:10 state off
setstate dmControl_MediaBox 2021-01-29 17:30:14 volume 60


oldreadings habe ich damit meine Lautstärke-Funktion tut...

Hier das notify (ebenfalls raw definition):


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


Hier die sub (etwas gekürzt):


sub my_ControlMediaBox($$)
{
  my ($Device,$Event) = @_;
  my $CurrentActivity = ReadingsVal("HarmonyHub", "currentActivity", "n.a.");
  my $Volume = ReadingsNum("SR6013", "volume", 0);
  my $ActVolMB = ReadingsNum($Device, "volume", 0);
  my $OldVolMB = OldReadingsNum($Device, "volume", 0);
 
  Log3(undef, 3,"my_ControlMediaBox Device: $Device    Event: $Event");
 
  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($OldVolMB > $ActVolMB || $ActVolMB == 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");
      }
    }
  }
}


Ich hoffe ich habe nicht zu viel rausgekürzt...
Aber du wolltest ja eigenltich auch "nur" den dummy zur Lautstärkesteuerung...

Wenn du nur Lautstärke (und an/aus, wobei das habe ich "rausgenommen") willst, geht statt "genericDeviceType media" auch speaker...

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)

coolheizer

#4
Zitat von: MadMax-FHEM am 28 März 2021, 20:01:30
Ich poste mal was ich habe...

Hi Joachim,
das ist doch mal genial, vielen dank dafür

Mein angepasster dummy:

defmod Fernsehen dummy
attr Fernsehen alexaName media box
attr Fernsehen alias Mediabox
attr Fernsehen genericDeviceType media
attr Fernsehen homebridgeMapping PlaybackController:reading=playback,values=Play;;Pause;;Stop;;Previous;;Next,cmd=playback ChannelController:reading=channel,cmd=channel
attr Fernsehen oldreadings volume
attr Fernsehen readingList volume mute playback channel
attr Fernsehen room 1_Wohnzimmer
attr Fernsehen setList playback on off volume mute channel
attr Fernsehen webCmd :

setstate Fernsehen on
setstate Fernsehen 2021-03-29 09:08:54 channel 2
setstate Fernsehen 2021-03-29 09:09:40 mute 1
setstate Fernsehen 2021-02-16 18:03:57 playback Play
setstate Fernsehen 2021-03-29 19:27:08 state on
setstate Fernsehen 2021-03-29 09:09:54 volume 10


notify

defmod nControl_MediaBox notify Fernsehen:(on|off|channel|mute|volume|playback).* {my_ControlMediaBox($NAME, $EVENT)}
attr nControl_MediaBox room 1_Wohnzimmer

setstate nControl_MediaBox 2021-03-29 19:27:08
setstate nControl_MediaBox 2021-03-29 08:58:23 state active



und die sub

sub my_ControlMediaBox($$)
{
  my ($Device,$Event) = @_;
  my $CurrentActivity = ReadingsVal("Denon", "currentActivity", "n.a.");
  my $Volume = ReadingsNum("Denon", "volume", 0);
  my $ActVolMB = ReadingsNum($Device, "volume", 0);
  my $OldVolMB = OldReadingsNum($Device, "volume", 0);

  Log3(undef, 3,"my_ControlMediaBox Device: $Device    Event: $Event");

  if($Event =~ m/mute/)
  {
    if($Event =~ m/1/)
    {
      fhem("set Denon mute on");
    }
    elsif($Event =~ m/0/)
    {
      fhem("set Denon mute off");
    }
  }
  elsif($Event =~ m/volume/)
  {
    if($OldVolMB > $ActVolMB || $ActVolMB == 0)
    {
      my $NewVolume = ReadingsNum("Denon", "volume", 0) - 5;
      fhem("set Denon volume $NewVolume");
    }
  else
  {
      if(ReadingsVal($Device, "mute", 0) eq "1")
      {
        fhem("set Denon mute off");
        fhem("setreading $Device mute 0");
      }
      else
      {
        my $NewVolume = ReadingsNum("Denon", "volume", 0) + 5;
        fhem("set Denon volume $NewVolume");
      }
    }
  }
}

1;




Schätze hier habe ich bestimmt noch irgendwo Fehler drinnen.

Was geht:
lauter (+5%)
leiser (-5%)
mute an/aus
TV+Verstärker+Receiver an/aus

Hätte jetzt noch gerne eine direkte angabe der Lautstärke:

" Alexa Mediabox auf Lautstärke 30"

Der dummy nimmt die Lautstärke an, fehlt nur noch die angepasste sub.

Gut das du mir geschrieben hast die sets mit zu schreiben, hatte die bisher immer ausgelassen.



Wenn es tatsächlich jetzt noch ginge die Sender auf der Enigma2/Dreambox
um zu schalten wäre das genial, wichtiger aber erst einmal die Lautstärke.

Gruß
Karsten
FHEM 5.8 auf Raspberry Pi 3, HM-MOD-UART und  MapleCUN.
HM-MOD-Re-8 für Velux Rolladensteuerung.
HM-CC-RT-DN.
HM-SEC-SCo.
HM-LC-Bl1PBU-FM.

MadMax-FHEM

#5
Naja, da die sub volume auswertet aber eben mit dem alten Wert vergleicht und damit dann "ableitet", ob lauter oder leiser kannst du nat. nicht GLEICHZEITIG eine bestimmte Lautstärke anwählen.

Wenn du auf lauter/leiser verzichtest, dann einfach den übergebenen volume-Wert setzen.
Beides wird nicht gehen, außer du siehst eine Möglichkeit eine Unterscheidung zu finden, ich sehe keine...

Bzgl. Sendereinstellung kann ich meinen Code schon posten.
Allerdings geht das BESTIMMT besser.
Und: es kommt immer drauf an wie Alexa die gesprochenen Sender erkennt.
Auf Dauer war ich es leid da immer "nachzuprogrammieren".
Soll heißen: es hat mal funktioniert. Aber ich nutze es eigentlich (schon länger) nicht mehr...
Daher: keine Garantie.

Was ich ab und an noch nutze: auf bestimmte Kanalnummer setzen. Also hier gibt es ja eine Unterscheidung zwischen Kanal-Name und einer Zahl ;)
Allerdings: wenn der TV etc. läuft, versteht Alexa das schon mal schwer. Und: ich muss jedes mal schauen wie ich eine Kanalumschaltung an Alexa "übermittle" (also was ich da immer so sprechen muss)...

Will sagen: ja ich hab das eingerichtet, allerdings mehr "Spielerei". Eine Fernbedienung geht schneller und v.a. viel zuverlässiger...

Hier der "fehlende Teil der Sub:


...
# die hier gelisteten Sender-Namen müssen so geschrieben werden, wie sie eben jeweils von Alexa erkannt werden (z.B. in der Alexa-App -> Verlauf)
# die Reiheinfolge in dem Array ist auch gleich die Kanal-Nummer...
  my @SenderListe = ("Das Erste", "ZDF", "br heimat", "sat.1", "RTL II", "rtl", "ProSieben", "VOX", "kabel eins", "n24 doku", "dmax", "n. d. r.", "hr info", "wdr dortmund", "swr 2", "mdr sachsen", "rbb", "???", "zdf_neo");
...
  elsif($Event =~ m/playback/ &&  $CurrentActivity ne "Fernsehen")
  {
    my $PlayState = (split(/: /, $Event))[1];
    if($CurrentActivity =~ m/Amazon/)
    {
      fhem("set harmony_41290995 command $PlayState");
    }
    # evtl. sonst einfach $PlayState an den HarmonyHub
    # weil nur FireTV und AlexaMusic nicht passen (neben Fernsehen)
    elsif($CurrentActivity =~ m/BluRay/)
    {
      fhem("set harmony_41290504 command $PlayState");
    }

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

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

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

# evtl. hier mit "match" arbeiten, statt genauem Namen. Aber evtl. Problematisch bei RTL / RTL 2 oder ZDF / ZDF neo etc.
        if($SenderName eq $ActSender)
        {
          fhem("set HarmonyHub channel $ChannelNr");
          Log3(undef, 3,"my_ControlMediaBox auf Kanalname $ChannelNr geschalten");
          last;
        }
        $ChannelNr++;
      }
    }
  }


Und du musst halt noch ein Reading channel in die readingList/setList eintragen und auch per setreading ein channel Reading "erzeugen"...
Achja ich habe auch noch Play/Pause gepostet.
Dazu halt dann auch noch ein Reading playback ähnlich volume, channel etc.

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)

coolheizer

#6
Zitat von: MadMax-FHEM am 29 März 2021, 21:19:18

Wenn du auf lauter/leiser verzichtest, dann einfach den übergebenen volume-Wert setzen.

Ich bekomme die Auswertung leider nicht umgeschrieben so das der gewünschte Wert übernommen wird.

Schätze das sind die Zeilen die umgeschrieben werden müssen:
  elsif($Event =~ m/volume/)
  {
    if($OldVolMB > $ActVolMB || $ActVolMB == 0)
    {
      my $NewVolume = ReadingsNum("Denon", "volume", 0) - 5;
      fhem("set Denon volume $NewVolume");
    }
  else
  {
      if(ReadingsVal($Device, "mute", 0) eq "1")
      {
        fhem("set Denon mute off");
        fhem("setreading $Device mute 0");
      }
      else
      {
        my $NewVolume = ReadingsNum("Denon", "volume", 0) + 5;
        fhem("set Denon volume $NewVolume");
      }
    }
  }
}


Nur wie?


Play/ Pause wäre auch noch interressant um vom Sat Receiver die Timeshift Funktion zu nutzen, habe ich diese in der sub übersehen?


Umschalten lasse ich dann mal lieber, wenn es bei dir auch schon nicht vernüntig funktioniert versuche ich es erst garnicht, zumal ich schon mit dem Enigma2 Modul Probleme habe zu schalten,
ist und war mir aber auch nicht wichtig.

Gruß Karsten


Edit:

Noch einmal geschaut Play/Pause scheint dieser Teil zu sein:
elsif($Event =~ m/playback/ &&  $CurrentActivity ne "Fernsehen")
  {
    my $PlayState = (split(/: /, $Event))[1];
    if($CurrentActivity =~ m/Amazon/)
    {
      fhem("set harmony_41290995 command $PlayState");
    }
    # evtl. sonst einfach $PlayState an den HarmonyHub
    # weil nur FireTV und AlexaMusic nicht passen (neben Fernsehen)
    elsif($CurrentActivity =~ m/BluRay/)
    {
      fhem("set harmony_41290504 command $PlayState");
    }


jetzt muss ich mal schauen wie ich diesen Teil in
##############################################
# $Id: myUtilsTemplate.pm 21509 2020-03-25 11:20:51Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;

##############################################
# $Id: myUtilsTemplate.pm 21509 2020-03-25 11:20:51Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;

sub my_ControlMediaBox($$)
{
  my ($Device,$Event) = @_;
  my $CurrentActivity = ReadingsVal("Denon", "currentActivity", "n.a.");
  my $Volume = ReadingsNum("Denon", "volume", 0);
  my $ActVolMB = ReadingsNum($Device, "volume", 0);
  my $OldVolMB = OldReadingsNum($Device, "volume", 0);

  Log3(undef, 3,"my_ControlMediaBox Device: $Device    Event: $Event");

  if($Event =~ m/mute/)
  {
    if($Event =~ m/1/)
    {
      fhem("set Denon mute on");
    }
    elsif($Event =~ m/0/)
    {
      fhem("set Denon mute off");
    }
  }
  elsif($Event =~ m/volume/)
  {
    if($OldVolMB > $ActVolMB || $ActVolMB == 0)
    {
      my $NewVolume = ReadingsNum("Denon", "volume", 0) - 5;
      fhem("set Denon volume $NewVolume");
    }
  else
  {
      if(ReadingsVal($Device, "mute", 0) eq "1")
      {
        fhem("set Denon mute off");
        fhem("setreading $Device mute 0");
      }
      else
      {
        my $NewVolume = ReadingsNum("Denon", "volume", 0) + 5;
        fhem("set Denon volume $NewVolume");
      }
    }
  }
}

1;

sub
NetDevDa($)
{
    my $n = 0;
    my ($Reading) = @_;
    $Reading =~ tr/:/_/;
    my @fbs = devspec2array("TYPE=FRITZBOX");
       foreach( @fbs ) {
          my $Name = ReadingsVal($_,"mac_" . $Reading,"");
          if( ($Name ne "") && ($Name ne "inactive") ) {
              $n++;
          }
       }
    if( $n == 0) {
        return 0;
    } else {
        return 1;
    }
}


1;

# Nächster Code
# Enter you functions below _this_ line.


1;


eingebaut bekomme
FHEM 5.8 auf Raspberry Pi 3, HM-MOD-UART und  MapleCUN.
HM-MOD-Re-8 für Velux Rolladensteuerung.
HM-CC-RT-DN.
HM-SEC-SCo.
HM-LC-Bl1PBU-FM.

MadMax-FHEM

#7
Was willst du denn "umschreiben"?

Nur eine bestimmte Lautstärke setzen?

Dann einfach das Vergleichen mit dem OldReading rausnehmen und direkt den Wert setzen.

Warum ich da was mit mute drin habe: keine Ahnung (mehr). Wie gesagt, das ist schon ewig her und kaum genutzt...

Evtl. so (also Lautstärke direkt setzen, dann aber kein lauter/leiser mehr):


  elsif($Event =~ m/volume/)
  {
      my $NewVolume = ReadingsNum($Device, "volume", 0);
      fhem("set Denon volume $NewVolume");
  }


Wenn dann etwas bei mute/unmute nicht mehr geht, müsste ich noch mal überlegen und hoffen, dass ich mich wieder erinnere was ich mir damit gedacht habe ;)

Play und Pause sollte in meinem letzten Post drin sein, da wo auch die Kanalumschaltung drin ist...
EDIT: müsste der Teil sein...

  elsif($Event =~ m/playback/ &&  $CurrentActivity ne "Fernsehen")
  {
    my $PlayState = (split(/: /, $Event))[1];
    if($CurrentActivity =~ m/Amazon/)
    {
      fhem("set harmony_41290995 command $PlayState");
    }
    # evtl. sonst einfach $PlayState an den HarmonyHub
    # weil nur FireTV und AlexaMusic nicht passen (neben Fernsehen)
    elsif($CurrentActivity =~ m/BluRay/)
    {
      fhem("set harmony_41290504 command $PlayState");
    }

    Log3(undef, 3,"my_ControlMediaBox Device: $Device    Event: $Event    PlayState: $PlayState");
  }

Das ganze mit welche Activity grad läuft brauchst du ja verm. nicht (auf jeden Fall würden die bei dir ja auch wohl anders heißen ;)  ).
In "$PlayState" sollte dann eben: play, pause, stop stehen, so wie eben von Alexa "übermittelt"...
Wird aber ja im Log ausgegeben, dann kannst du ja nachschauen...

Neben dem Verlauf in der Alexa-App stehen nat. die erkannten Kanalnamen auch im Reading "channel" des dummy ;)
Wenn du willst, kannst du ja ein Reading channel anlegen und einfach mal per Sprache Kanäle schalten lassen und sehen was denn im Reading "channel" so drin steht.
(musst ja [noch] nicht drauf reagieren ;)  )
Dann siehst du ja, ob Alexa das überhaupt zufriedenstellend erkennt.
Wenn ja, dann kannst du das ja immer noch umsetzen...
...wenn nein: einfach nicht nutzen ;)

Wenn du weniger nutzt, dann würde ich die ungenutzen "RegEx" auch aus dem notifx nehmen, damit wird das notify weniger "gerufen"...
(was bei einem dummy mit expliziter Sprachnutzung nicht so schlimm wäre, wenn nicht)

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)

coolheizer

Mute, Lautstärke, an und aus funktionieren jetzt perfekt.

VIELEN dank für deine Hilfe.

Leider bekomme ich es nicht ohne deine Hilfe hin, auch die Pause Funktion zu nutzen.

##############################################
# $Id: myUtilsTemplate.pm 21509 2020-03-25 11:20:51Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;

##############################################
# $Id: myUtilsTemplate.pm 21509 2020-03-25 11:20:51Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;

sub my_ControlMediaBox($$)
{
  my ($Device,$Event) = @_;
  my $CurrentActivity = ReadingsVal("Denon", "currentActivity", "n.a.");
  my $Volume = ReadingsNum("Denon", "volume", 0);
  my $ActVolMB = ReadingsNum($Device, "volume", 0);
  my $OldVolMB = OldReadingsNum($Device, "volume", 0);

  Log3(undef, 3,"my_ControlMediaBox Device: $Device    Event: $Event");

  if($Event =~ m/mute/)
  {
    if($Event =~ m/1/)
    {
      fhem("set Denon mute on");
    }
    elsif($Event =~ m/0/)
    {
      fhem("set Denon mute off");
    }
  }
  elsif($Event =~ m/volume/)
  {
      my $NewVolume = ReadingsNum($Device, "volume", 0);
      fhem("set Denon volume $NewVolume");
  }
  elsif($Event =~ m/playback/)
  {
    my $PlayState = ReadingsNum($Device, "playback", 0);
    fhem("set SATReceiver $PlayState");
    }   
    }
1;


Habe versucht es selbst an zu passen (letzte Zeilen) wird nur leider nix.

Gruß
Karsten
FHEM 5.8 auf Raspberry Pi 3, HM-MOD-UART und  MapleCUN.
HM-MOD-Re-8 für Velux Rolladensteuerung.
HM-CC-RT-DN.
HM-SEC-SCo.
HM-LC-Bl1PBU-FM.

MadMax-FHEM

Der Playstate ist ja auch keine "Nummer" sondern ein String... ;)

Also entweder statt ReadingsNum eben ReadingsVal, dann könnte dein Code schon tun...
my $PlayState = ReadingsVal($Device, "playback", "n.a.");

Oder (wie in meinem Code):     my $PlayState = (split(/: /, $Event))[1];

Weil der Playstate ja auch mit dem Event mitkommt:

playstate:play/pause/stop -> d.h. split "trennt" beim Doppelpunkt und nimmt dann den "2ten Teil", also play/pause/stop

Du musst halt noch sehen was dein Satreceiver "versteht".
Wenn er nicht direkt "play/pause/stop" (oder was immer Alexa liefert, siehe Reading oder Logausgabe) versteht, dann musst du das eben noch "übersetzen"...

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)

coolheizer

Klasse, jetzt funktioniert es einwandfrei.

Übersetzen brauchte ich glücklicherweise nicht, der Receiver erkennt die befehle, bei stop wird allerdings abgeschaltet,
aber nicht schlimm, benutze ich eh nicht.


Noch einmal vielen Dank das du deine Zeit für mich geopfert hast, klasse Arbeit :)

Gruß der Karsten
FHEM 5.8 auf Raspberry Pi 3, HM-MOD-UART und  MapleCUN.
HM-MOD-Re-8 für Velux Rolladensteuerung.
HM-CC-RT-DN.
HM-SEC-SCo.
HM-LC-Bl1PBU-FM.

MadMax-FHEM

Hallo Karsten,

freut mich!

Dann viel Spaß damit, 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)