Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

Begonnen von Otto123, 31 Mai 2020, 18:30:55

Vorheriges Thema - Nächstes Thema

Mitch

Guter Punkt, war auf Complex.

Ich habe aber gerade ein neues FHEM aufgesetzt.
Nur MQTT, sonst nichts. Dort auf simple.

Ergebnis ist "suboptimal".

Ein paar Player erhalten den richtigen Alias, ein paar nicht.
Icon funktioniert gar nicht.

Hier der Log dazu:
2020.11.02 18:34:20 2: autocreate: define MQTT2_RINCON_5CAAFDA1C27201400 MQTT2_DEVICE RINCON_5CAAFDA1C27201400 MQTT
2020.11.02 18:34:20 2: autocreate: define FileLog_MQTT2_RINCON_5CAAFDA1C27201400 FileLog ./log/MQTT2_RINCON_5CAAFDA1C27201400-%Y.log MQTT2_RINCON_5CAAFDA1C27201400
2020.11.02 18:34:20 2: autocreate: define MQTT2_RINCON_949F3E84C8BC01400 MQTT2_DEVICE RINCON_949F3E84C8BC01400 MQTT
2020.11.02 18:34:20 2: autocreate: define FileLog_MQTT2_RINCON_949F3E84C8BC01400 FileLog ./log/MQTT2_RINCON_949F3E84C8BC01400-%Y.log MQTT2_RINCON_949F3E84C8BC01400
2020.11.02 18:34:20 2: autocreate: define MQTT2_RINCON_000E58D0E48001400 MQTT2_DEVICE RINCON_000E58D0E48001400 MQTT
2020.11.02 18:34:20 2: autocreate: define FileLog_MQTT2_RINCON_000E58D0E48001400 FileLog ./log/MQTT2_RINCON_000E58D0E48001400-%Y.log MQTT2_RINCON_000E58D0E48001400
2020.11.02 18:34:20 2: autocreate: define MQTT2_RINCON_B8E9373184A001400 MQTT2_DEVICE RINCON_B8E9373184A001400 MQTT
2020.11.02 18:34:20 2: autocreate: define FileLog_MQTT2_RINCON_B8E9373184A001400 FileLog ./log/MQTT2_RINCON_B8E9373184A001400-%Y.log MQTT2_RINCON_B8E9373184A001400
2020.11.02 18:34:20 2: autocreate: define MQTT2_RINCON_7828CAF11E7601400 MQTT2_DEVICE RINCON_7828CAF11E7601400 MQTT
2020.11.02 18:34:20 2: autocreate: define FileLog_MQTT2_RINCON_7828CAF11E7601400 FileLog ./log/MQTT2_RINCON_7828CAF11E7601400-%Y.log MQTT2_RINCON_7828CAF11E7601400
2020.11.02 18:34:20 2: autocreate: define MQTT2_RINCON_000E5870A13001400 MQTT2_DEVICE RINCON_000E5870A13001400 MQTT
2020.11.02 18:34:20 2: autocreate: define FileLog_MQTT2_RINCON_000E5870A13001400 FileLog ./log/MQTT2_RINCON_000E5870A13001400-%Y.log MQTT2_RINCON_000E5870A13001400
2020.11.02 18:34:20 2: autocreate: define MQTT2_RINCON_B8E9375200CE01400 MQTT2_DEVICE RINCON_B8E9375200CE01400 MQTT
2020.11.02 18:34:20 2: autocreate: define FileLog_MQTT2_RINCON_B8E9375200CE01400 FileLog ./log/MQTT2_RINCON_B8E9375200CE01400-%Y.log MQTT2_RINCON_B8E9375200CE01400
2020.11.02 18:34:20 2: autocreate: define MQTT2_RINCON_347E5CF7E6D001400 MQTT2_DEVICE RINCON_347E5CF7E6D001400 MQTT
2020.11.02 18:34:20 2: autocreate: define FileLog_MQTT2_RINCON_347E5CF7E6D001400 FileLog ./log/MQTT2_RINCON_347E5CF7E6D001400-%Y.log MQTT2_RINCON_347E5CF7E6D001400
2020.11.02 18:34:20 2: autocreate: define MQTT2_RINCON_B8E9375294B201400 MQTT2_DEVICE RINCON_B8E9375294B201400 MQTT
2020.11.02 18:34:20 2: autocreate: define FileLog_MQTT2_RINCON_B8E9375294B201400 FileLog ./log/MQTT2_RINCON_B8E9375294B201400-%Y.log MQTT2_RINCON_B8E9375294B201400
2020.11.02 18:34:21 3: MQTT2_DEVICE set MQTT2_RINCON_5CAAFDA1C27201400 x_raw_payload {"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}
sh: 1: cannot open url: No such file
2020.11.02 18:34:21 3: MQTT2_DEVICE set MQTT2_RINCON_949F3E84C8BC01400 x_raw_payload {"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}
2020.11.02 18:34:21 3: MQTT2_DEVICE set MQTT2_RINCON_000E58D0E48001400 x_raw_payload {"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}
2020.11.02 18:34:21 3: MQTT2_DEVICE set MQTT2_RINCON_B8E9373184A001400 x_raw_payload {"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}
sh: 1: cannot open url: No such file
2020.11.02 18:34:21 3: MQTT2_DEVICE set MQTT2_RINCON_7828CAF11E7601400 x_raw_payload {"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}
2020.11.02 18:34:21 3: MQTT2_DEVICE set MQTT2_RINCON_000E5870A13001400 x_raw_payload {"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}
sh: 1: cannot open url: No such file
2020.11.02 18:34:21 3: MQTT2_DEVICE set MQTT2_RINCON_B8E9375200CE01400 x_raw_payload {"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}
2020.11.02 18:34:21 3: MQTT2_DEVICE set MQTT2_RINCON_347E5CF7E6D001400 x_raw_payload {"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}
2020.11.02 18:34:22 1: PERL WARNING: Use of uninitialized value $mn in concatenation (.) or string at (eval 275) line 8.
2020.11.02 18:34:22 3: eval: my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $NAME=   $evalSpecials->{'%NAME'};my $SELF=   $evalSpecials->{'%SELF'};my $TYPE=   $evalSpecials->{'%TYPE'};{
  my @tv = ("S14","S11","S9");
  my @line = ("S5","Z90","ZP120");
  my $url="http://$EVTPART1:1400";
  my $xmltext = GetFileFromURL("$url/xml/device_description.xml");
  my ($mn)=$xmltext =~ /(S[0-9]+)/;
  my ($img)=$xmltext =~ /(.*)<\/url>/;
  my $icon="Sonos2mqtt_icon-$mn";
  my $setList=AttrVal($NAME,'setList','');
  fhem("setreading $NAME modelNumber $mn");
  fhem("\"wget -qO ./www/images/default/$icon.png $url$img\"");
  fhem("attr $NAME icon $icon;sleep 4 WI;set WEB rereadicons");
  if (grep(/$mn/, @tv)) {$setList=~s/input:Queue \{/input:Queue,TV \{/};
  if (grep(/$mn/, @line)) {$setList=~s/input:Queue \{/input:Queue,Line_In \{/};
  $setList=~s/;/;;/g;
  fhem("attr $NAME setList $setList")
}
2020.11.02 18:34:22 1: PERL WARNING: Use of uninitialized value $mn in concatenation (.) or string at (eval 275) line 10.
2020.11.02 18:34:22 3: eval: my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $NAME=   $evalSpecials->{'%NAME'};my $SELF=   $evalSpecials->{'%SELF'};my $TYPE=   $evalSpecials->{'%TYPE'};{
  my @tv = ("S14","S11","S9");
  my @line = ("S5","Z90","ZP120");
  my $url="http://$EVTPART1:1400";
  my $xmltext = GetFileFromURL("$url/xml/device_description.xml");
  my ($mn)=$xmltext =~ /(S[0-9]+)/;
  my ($img)=$xmltext =~ /(.*)<\/url>/;
  my $icon="Sonos2mqtt_icon-$mn";
  my $setList=AttrVal($NAME,'setList','');
  fhem("setreading $NAME modelNumber $mn");
  fhem("\"wget -qO ./www/images/default/$icon.png $url$img\"");
  fhem("attr $NAME icon $icon;sleep 4 WI;set WEB rereadicons");
  if (grep(/$mn/, @tv)) {$setList=~s/input:Queue \{/input:Queue,TV \{/};
  if (grep(/$mn/, @line)) {$setList=~s/input:Queue \{/input:Queue,Line_In \{/};
  $setList=~s/;/;;/g;
  fhem("attr $NAME setList $setList")
}
2020.11.02 18:34:22 3: setreading MQTT2_RINCON_000E58D0E48001400 modelNumber  : Usage: setreading <name> [YYYY-MM-DD HH:MM:SS] <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.

2020.11.02 18:34:22 1: PERL WARNING: Use of uninitialized value $mn in regexp compilation at (eval 275) line 13.
2020.11.02 18:34:22 3: eval: my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $NAME=   $evalSpecials->{'%NAME'};my $SELF=   $evalSpecials->{'%SELF'};my $TYPE=   $evalSpecials->{'%TYPE'};{
  my @tv = ("S14","S11","S9");
  my @line = ("S5","Z90","ZP120");
  my $url="http://$EVTPART1:1400";
  my $xmltext = GetFileFromURL("$url/xml/device_description.xml");
  my ($mn)=$xmltext =~ /(S[0-9]+)/;
  my ($img)=$xmltext =~ /(.*)<\/url>/;
  my $icon="Sonos2mqtt_icon-$mn";
  my $setList=AttrVal($NAME,'setList','');
  fhem("setreading $NAME modelNumber $mn");
  fhem("\"wget -qO ./www/images/default/$icon.png $url$img\"");
  fhem("attr $NAME icon $icon;sleep 4 WI;set WEB rereadicons");
  if (grep(/$mn/, @tv)) {$setList=~s/input:Queue \{/input:Queue,TV \{/};
  if (grep(/$mn/, @line)) {$setList=~s/input:Queue \{/input:Queue,Line_In \{/};
  $setList=~s/;/;;/g;
  fhem("attr $NAME setList $setList")
}
2020.11.02 18:34:22 1: PERL WARNING: Use of uninitialized value $mn in regexp compilation at (eval 275) line 14.
2020.11.02 18:34:22 3: eval: my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $NAME=   $evalSpecials->{'%NAME'};my $SELF=   $evalSpecials->{'%SELF'};my $TYPE=   $evalSpecials->{'%TYPE'};{
  my @tv = ("S14","S11","S9");
  my @line = ("S5","Z90","ZP120");
  my $url="http://$EVTPART1:1400";
  my $xmltext = GetFileFromURL("$url/xml/device_description.xml");
  my ($mn)=$xmltext =~ /(S[0-9]+)/;
  my ($img)=$xmltext =~ /(.*)<\/url>/;
  my $icon="Sonos2mqtt_icon-$mn";
  my $setList=AttrVal($NAME,'setList','');
  fhem("setreading $NAME modelNumber $mn");
  fhem("\"wget -qO ./www/images/default/$icon.png $url$img\"");
  fhem("attr $NAME icon $icon;sleep 4 WI;set WEB rereadicons");
  if (grep(/$mn/, @tv)) {$setList=~s/input:Queue \{/input:Queue,TV \{/};
  if (grep(/$mn/, @line)) {$setList=~s/input:Queue \{/input:Queue,Line_In \{/};
  $setList=~s/;/;;/g;
  fhem("attr $NAME setList $setList")
}
sh: 1: cannot open url: No such file
sh: 1: cannot open url: No such file
sh: 1: cannot open url: No such file
2020.11.02 18:34:22 3: MQTT2_DEVICE set MQTT2_RINCON_B8E9375294B201400 x_raw_payload {"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}
sh: 1: cannot open url: No such file
sh: 1: cannot open url: No such file
FHEM im Proxmox Container

Otto123

kannst Du mal bitte einen der nicht richtig geht listen.
Ich habe eine Ahnung, die Modellnumber ist sicher nicht Sxx. Das muss ich anpassen.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Mitch

#707
doch, ist sie  ;)

Play 3:

Internals:
   CFGFN     
   CID        RINCON_B8E9373184A001400
   DEF        RINCON_B8E9373184A001400
   DEVICETOPIC MQTT2_RINCON_B8E9373184A001400
   FUUID      5fa0512c-f33f-f3cd-cb23-03eeaf9c7fac3e5d
   IODev      MQTT
   LASTInputDev MQTT
   MQTT_MSGCNT 12
   MQTT_TIME  2020-11-02 18:45:03
   MSGCNT     12
   NAME       MQTT2_RINCON_B8E9373184A001400
   NR         69
   STATE      STOPPED
   TYPE       MQTT2_DEVICE
   JSONMAP:
     mute_Master mute
     transportState state
     volume_Master volume
   READINGS:
     2020-11-02 18:34:21   CopyrightInfo   © 2003-2019, Sonos, Inc. All rights reserved.
     2020-11-02 18:34:21   DisplaySoftwareVersion 11.2.3
     2020-11-02 18:34:21   ExtraInfo       OTP:
     2020-11-02 18:34:21   Flags           0
     2020-11-02 18:34:21   HTAudioIn       0
     2020-11-02 18:34:21   HardwareVersion 1.8.1.3-2.0
     2020-11-02 18:34:21   IPAddress       192.168.0.38
     2020-11-02 18:34:21   MACAddress      B8:E9:37:31:84:A0
     2020-11-02 18:34:21   SerialNumber    B8-E9-37-31-84-A0:5
     2020-11-02 18:34:21   SoftwareVersion 57.3-81090
     2020-11-02 18:34:21   associatedWith  SonosBridge
     2020-11-02 18:34:21   attrTemplateVersion 20200729
     2020-11-02 18:45:03   bass            3
     2020-11-02 18:45:03   coordinatorUuid RINCON_B8E9373184A001400
     2020-11-02 18:45:03   currentTrack_AlbumArtUri http://192.168.0.38:1400/getaa?s=1&u=x-sonosapi-stream:nur-die-musik%3fsid%3d269%26flags%3d8224%26sn%3d18
     2020-11-02 18:44:12   currentTrack_Artist Loud Luxury feat. brando
     2020-11-02 18:44:06   currentTrack_Duration 0:00:01
     2020-11-02 18:45:03   currentTrack_ItemId -1
     2020-11-02 18:45:03   currentTrack_ParentId -1
     2020-11-02 18:45:03   currentTrack_ProtocolInfo sonos.com-http:*:*:*
     2020-11-02 18:45:03   currentTrack_Title x-sonosapi-stream:nur-die-musik?sid=269&amp;flags=8224&amp;sn=18
     2020-11-02 18:45:03   currentTrack_TrackUri x-sonosapi-stream:nur-die-musik?sid=269&flags=8224&sn=18
     2020-11-02 18:45:03   currentTrack_UpnpClass object.item
     2020-11-02 18:45:03   enqueuedMetadata_ItemId -1
     2020-11-02 18:45:03   enqueuedMetadata_ParentId -1
     2020-11-02 18:45:03   enqueuedMetadata_Title Antenne Bayern
     2020-11-02 18:45:03   enqueuedMetadata_UpnpClass object.item.audioItem.audioBroadcast
     2020-11-02 18:45:03   groupName       Büro
     2020-11-02 18:34:21   modelNumber     S3
     2020-11-02 18:45:03   mute            false
     2020-11-02 18:45:03   mute_LF         false
     2020-11-02 18:34:20   mute_Master     false
     2020-11-02 18:45:03   mute_RF         false
     2020-11-02 18:45:03   name            Büro
     2020-11-02 18:45:03   playmode        NORMAL
     2020-11-02 18:45:03   state           STOPPED
     2020-11-02 18:34:20   transportState  STOPPED
     2020-11-02 18:45:03   treble          5
     2020-11-02 18:45:03   ts              1604342703208
     2020-11-02 18:45:03   uuid            RINCON_B8E9373184A001400
     2020-11-02 18:45:03   volume          5
     2020-11-02 18:45:03   volume_LF       100
     2020-11-02 18:34:20   volume_Master   5
     2020-11-02 18:45:03   volume_RF       100
Attributes:
   IODev      MQTT
   alias      Büro
   devStateIcon {
my $wpix = '250px';
my $groupname = ReadingsVal($name,'groupName','0');
my $sgroupname = (split(' ',ReadingsVal($name,'groupName','')))[0];
my $uuidtoname = (devspec2array('DEF='.ReadingsVal($name,'coordinatorUuid','0')))[0];
my $vol = ReadingsVal($name,'volume','');
my $img = ReadingsVal($name,'currentTrack_AlbumArtUri','');
my $mystate = $name eq $uuidtoname
  ? ReadingsVal($name,'state','FEHLER') : ReadingsVal($uuidtoname,'state','');
my $playpic = $mystate eq 'PLAYING'
  ? 'rc_PAUSE@red'    : $mystate eq 'PAUSED_PLAYBACK'
  ? 'rc_PLAY@green'   : $mystate eq 'STOPPED'
  ? 'rc_PLAY@green'   : $mystate eq 'TRANSITIONING'
  ? 'rc_PLAY@blue'    : $mystate eq 'set_next'
  ? 'rc_NEXT@blue'    : $mystate eq 'set_previous'
  ? 'rc_PREVIOUS@blue': $mystate eq 'set_volumeUp'
  ? 'rc_VOLUP@blue'   : $mystate eq 'set_volumeDown'
  ? 'rc_VOLDOWN@blue' : $mystate eq 'set_mute'
  ? 'rc_MUTE@blue'    : 'rc_PLAY@yellow';
my $mutecmd = ReadingsVal($name,'mute','0') eq 'false'?'true':'false';
my $mutepic = $mutecmd eq 'on'?'rc_MUTE':'rc_VOLUP';
my $show = 'FEHLER';
my $currentTrack_Artist = ReadingsVal($name,'currentTrack_Artist','FEHLER');
my $currentTrack_Title = ReadingsVal($name,'currentTrack_Title','FEHLER');
if ($currentTrack_Title =~ 'x-sonosapi-stream:'){$currentTrack_Title=''};
my $currentTrack = $mystate eq 'TRANSITIONING'
  ? 'Puffern...' : $currentTrack_Artist.' - '.$currentTrack_Title;
my $nextTrack_Artist = ReadingsVal($name,'nextTrack_Artist','FEHLER');
my $nextTrack_Title = ReadingsVal($name,'nextTrack_Title','FEHLER');
my $nextTrack = $nextTrack_Artist.' - '.$nextTrack_Title;
my $previouspic = 'rc_PREVIOUS';
my $nextpic = 'rc_NEXT';
my $voldownpic = 'rc_VOLDOWN';
my $voluppic = 'rc_VOLUP';
my $leavegrouppic = 'rc_LEFT';
my $showlg = ReadingsVal($name,"name","0") ne $groupname ? "<a href=\"/fhem?cmd.dummy=set $name leaveGroup&XHR=1\">".FW_makeImage($leavegrouppic)."</a>" : "";
if (($mystate eq 'PLAYING')
  || ($mystate eq 'TRANSITIONING' )
  || ($mystate eq 'set_next' )
  || ($mystate eq 'set_previous' )
  || ($mystate eq 'set_volumeUp' )
  || ($mystate eq 'set_volumeDown' )
  || ($mystate eq 'set_mute' )) {
    my $shownp = ReadingsVal($name,'name','') eq $sgroupname
    ? "<a href=\"/fhem?cmd.dummy=set $name previous&XHR=1\">".FW_makeImage($previouspic)."</a>
       <a href=\"/fhem?cmd.dummy=set $name next&XHR=1\">".FW_makeImage($nextpic)."</a>" : ""; 
    $show = "$showlg <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($playpic)."</a>
    <a href=\"/fhem?cmd.dummy=set $name volumeDown&XHR=1\">".FW_makeImage($voldownpic)."</a>
    $shownp
    <a href=\"/fhem?cmd.dummy=set $name volumeUp&XHR=1\">".FW_makeImage($voluppic)."</a>
    &nbsp;&nbsp;&nbsp;&nbsp;
    <a href=\"/fhem?cmd.dummy=set $name mute $mutecmd&XHR=1\">".FW_makeImage($mutepic)."</a><br>";
 
    if (ReadingsVal($name,'name','') eq $sgroupname) {
      $show = ReadingsVal($name,'currentTrack_TrackUri','') =~ 'spdif'
      ? 'TV': ReadingsVal($name,'enqueuedMetadata_UpnpClass','FEHLER') ne 'object.item.audioItem.audioBroadcast'
      ? "$show<marquee style='width: $wpix'>Aktueller Track: $currentTrack<br>Nächster Track: $nextTrack</marquee>"
      : "$show<marquee style='width: $wpix'>Radio: $currentTrack</marquee>"
    }
    elsif (ReadingsVal($name,'name','') ne $groupname) {
      $show = "$show Master: $sgroupname"}
    }
    else {
      $show = $name eq $uuidtoname
      ? "$showlg <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($playpic)."</a>"
      : "$showlg <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($playpic)."</a><br>Master: $sgroupname"
    }
  "<div>
   <table>
     <tr>
       <td><div style='display: inline-block; margin-right: 5px; border: 1px solid lightgray;
              height: 4.00em; width: 4.00em; background-image: url($img); background-size: contain;'></div></td>
       <td>$show</td>
     </tr>
   </table>
   </div>"
}
   icon       Sonos2mqtt_icon-S3
   jsonMap    volume_Master:volume mute_Master:mute transportState:state
   model      sonos2mqtt_speaker
   readingList sonos/RINCON_B8E9373184A001400:.* { json2nameValue($EVENT,'',$JSONMAP) }
sonos/RINCON_B8E9373184A001400/ZoneInfo:.* { json2nameValue($EVENT) }
   room       MQTT2_DEVICE
   setList    stop:noArg sonos/RINCON_B8E9373184A001400/control { "command": "stop" }
  play:noArg sonos/RINCON_B8E9373184A001400/control { "command": "play" }
  pause:noArg sonos/RINCON_B8E9373184A001400/control { "command": "pause" }
  toggle:noArg sonos/RINCON_B8E9373184A001400/control { "command": "toggle" }
  volumeUp:noArg sonos/RINCON_B8E9373184A001400/control { "command": "volumeup" }
  volumeDown:noArg sonos/RINCON_B8E9373184A001400/control { "command": "volumedown" }
  volume:slider,0,1,100 sonos/RINCON_B8E9373184A001400/control { "command": "volume", "input": $EVTPART1 }
  mute:true,false { my $value = $EVTPART1 eq "true" ? "mute" : "unmute"; qq(sonos/RINCON_B8E9373184A001400/control { "command": "$value" } ) }
  next:noArg sonos/RINCON_B8E9373184A001400/control { "command": "next" }
  previous:noArg sonos/RINCON_B8E9373184A001400/control { "command": "previous" }
  joinGroup:textField sonos/RINCON_B8E9373184A001400/control { "command": "joingroup",  "input": "$EVTPART1"}
  leaveGroup:noArg { my $value = ReadingsVal("RINCON_B8E9373184A001400","groupName","all"); qq(sonos/RINCON_B8E9373184A001400/control { "command": "leavegroup",  "input": "$value" } ) }
  setAVTUri:textField sonos/RINCON_B8E9373184A001400/control { "command": "setavtransporturi",  "input": "$EVTPART1"}
  playUri:textField {fhem("set $NAME setAVTUri $EVTPART1; sleep 1; set $NAME play")}
  input:Queue { my $value = $EVTPART1 eq "TV" ? "tv" : $EVTPART1 eq "Line_In" ? "line" : "queue"; qq(sonos/RINCON_B8E9373184A001400/control { "command": "switchto$value" } ) }
  notify:textField sonos/RINCON_B8E9373184A001400/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":10,"volume":$EVTPART1,"delayMs":700}}
  x_raw_payload:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq(sonos/RINCON_B8E9373184A001400/control $payload)}
  speak:textField { my $tts="SonosTTS";my ($cmd,$vol,$text)=split(' ', $EVENT,3);fhem("set $tts tts $text;sleep $tts:playing:.0 ;set $NAME notify $vol [$tts:httpName]")}


Play 1:
Internals:
   CFGFN     
   CID        RINCON_949F3E84C8BC01400
   DEF        RINCON_949F3E84C8BC01400
   DEVICETOPIC MQTT2_RINCON_949F3E84C8BC01400
   FUUID      5fa0512c-f33f-f3cd-b6f0-f806272116647fea
   IODev      MQTT
   LASTInputDev MQTT
   MQTT_MSGCNT 14
   MQTT_TIME  2020-11-02 18:52:39
   MSGCNT     14
   NAME       MQTT2_RINCON_949F3E84C8BC01400
   NR         65
   STATE      PLAYING
   TYPE       MQTT2_DEVICE
   JSONMAP:
     mute_Master mute
     transportState state
     volume_Master volume
   READINGS:
     2020-11-02 18:34:21   CopyrightInfo   © 2003-2019, Sonos, Inc. All rights reserved.
     2020-11-02 18:34:21   DisplaySoftwareVersion 11.2.3
     2020-11-02 18:34:21   ExtraInfo       
     2020-11-02 18:34:21   Flags           0
     2020-11-02 18:34:21   HTAudioIn       0
     2020-11-02 18:34:21   HardwareVersion 1.20.1.6-2.2
     2020-11-02 18:34:21   IPAddress       192.168.0.147
     2020-11-02 18:34:21   MACAddress      94:9F:3E:84:C8:BC
     2020-11-02 18:34:21   SerialNumber    94-9F-3E-84-C8-BC:4
     2020-11-02 18:34:21   SoftwareVersion 57.3-81090
     2020-11-02 18:34:21   associatedWith  SonosBridge
     2020-11-02 18:34:21   attrTemplateVersion 20200729
     2020-11-02 18:52:39   bass            4
     2020-11-02 18:52:39   coordinatorUuid RINCON_949F3E84C8BC01400
     2020-11-02 18:52:39   currentTrack_Album Folge 93: braucht Hilfe
     2020-11-02 18:52:39   currentTrack_AlbumArtUri http://192.168.0.147:1400/getaa?s=1&u=x-sonos-http:song:1144135689.mp4%3fsid%3d204%26flags%3d8224%26sn%3d10
     2020-11-02 18:52:39   currentTrack_Artist Bibi Blocksberg
     2020-11-02 18:52:39   currentTrack_Duration 0:01:33
     2020-11-02 18:52:39   currentTrack_ItemId -1
     2020-11-02 18:52:39   currentTrack_ParentId -1
     2020-11-02 18:52:39   currentTrack_ProtocolInfo sonos.com-http:*:audio/mp4:*
     2020-11-02 18:52:39   currentTrack_Title Kapitel 21 - Bibi braucht Hilfe (Folge 093)
     2020-11-02 18:52:39   currentTrack_TrackUri x-sonos-http:song:1144135689.mp4?sid=204&flags=8224&sn=10
     2020-11-02 18:52:39   currentTrack_UpnpClass object.item.audioItem.musicTrack
     2020-11-02 18:52:39   enqueuedMetadata_Album Folge 93: braucht Hilfe
     2020-11-02 18:52:39   enqueuedMetadata_AlbumArtUri https://is2-ssl.mzstatic.com/image/thumb/Music22/v4/17/d6/d8/17d6d841-ee21-e9f7-42cd-95a4db1eef19/source/400x400bb.jpeg
     2020-11-02 18:52:39   enqueuedMetadata_Artist Bibi Blocksberg
     2020-11-02 18:52:39   enqueuedMetadata_ItemId 1004206calbum%3a1144135664
     2020-11-02 18:52:39   enqueuedMetadata_ParentId 10052064artist%3a41480004
     2020-11-02 18:52:39   enqueuedMetadata_Title Folge 93: braucht Hilfe
     2020-11-02 18:52:39   enqueuedMetadata_UpnpClass object.container.album.musicAlbum.#AlbumView
     2020-11-02 18:52:39   groupName       Carlotta
     2020-11-02 18:34:21   modelNumber     S12
     2020-11-02 18:52:39   mute            false
     2020-11-02 18:52:39   mute_LF         false
     2020-11-02 18:34:21   mute_Master     false
     2020-11-02 18:52:39   mute_RF         false
     2020-11-02 18:52:39   name            Carlotta
     2020-11-02 18:52:39   nextTrack_Album Folge 93: braucht Hilfe
     2020-11-02 18:52:39   nextTrack_AlbumArtUri http://192.168.0.147:1400/getaa?s=1&u=x-sonos-http:song:1144135690.mp4%3fsid%3d204%26flags%3d8224%26sn%3d10
     2020-11-02 18:52:39   nextTrack_Artist Bibi Blocksberg
     2020-11-02 18:52:39   nextTrack_Duration 0:01:34
     2020-11-02 18:52:39   nextTrack_ItemId -1
     2020-11-02 18:52:39   nextTrack_ParentId -1
     2020-11-02 18:52:39   nextTrack_ProtocolInfo sonos.com-http:*:audio/mp4:*
     2020-11-02 18:52:39   nextTrack_Title Kapitel 22 - Bibi braucht Hilfe (Folge 093)
     2020-11-02 18:52:39   nextTrack_TrackUri x-sonos-http:song:1144135690.mp4?sid=204&flags=8224&sn=10
     2020-11-02 18:52:39   nextTrack_UpnpClass object.item.audioItem.musicTrack
     2020-11-02 18:52:39   playmode        REPEAT_ALL
     2020-11-02 18:52:39   state           PLAYING
     2020-11-02 18:34:21   transportState  PLAYING
     2020-11-02 18:52:39   treble          7
     2020-11-02 18:52:39   ts              1604343158790
     2020-11-02 18:52:39   uuid            RINCON_949F3E84C8BC01400
     2020-11-02 18:52:39   volume          39
     2020-11-02 18:52:39   volume_LF       100
     2020-11-02 18:34:21   volume_Master   39
     2020-11-02 18:52:39   volume_RF       100
Attributes:
   IODev      MQTT
   alias      Carlotta
   devStateIcon {
my $wpix = '250px';
my $groupname = ReadingsVal($name,'groupName','0');
my $sgroupname = (split(' ',ReadingsVal($name,'groupName','')))[0];
my $uuidtoname = (devspec2array('DEF='.ReadingsVal($name,'coordinatorUuid','0')))[0];
my $vol = ReadingsVal($name,'volume','');
my $img = ReadingsVal($name,'currentTrack_AlbumArtUri','');
my $mystate = $name eq $uuidtoname
  ? ReadingsVal($name,'state','FEHLER') : ReadingsVal($uuidtoname,'state','');
my $playpic = $mystate eq 'PLAYING'
  ? 'rc_PAUSE@red'    : $mystate eq 'PAUSED_PLAYBACK'
  ? 'rc_PLAY@green'   : $mystate eq 'STOPPED'
  ? 'rc_PLAY@green'   : $mystate eq 'TRANSITIONING'
  ? 'rc_PLAY@blue'    : $mystate eq 'set_next'
  ? 'rc_NEXT@blue'    : $mystate eq 'set_previous'
  ? 'rc_PREVIOUS@blue': $mystate eq 'set_volumeUp'
  ? 'rc_VOLUP@blue'   : $mystate eq 'set_volumeDown'
  ? 'rc_VOLDOWN@blue' : $mystate eq 'set_mute'
  ? 'rc_MUTE@blue'    : 'rc_PLAY@yellow';
my $mutecmd = ReadingsVal($name,'mute','0') eq 'false'?'true':'false';
my $mutepic = $mutecmd eq 'on'?'rc_MUTE':'rc_VOLUP';
my $show = 'FEHLER';
my $currentTrack_Artist = ReadingsVal($name,'currentTrack_Artist','FEHLER');
my $currentTrack_Title = ReadingsVal($name,'currentTrack_Title','FEHLER');
if ($currentTrack_Title =~ 'x-sonosapi-stream:'){$currentTrack_Title=''};
my $currentTrack = $mystate eq 'TRANSITIONING'
  ? 'Puffern...' : $currentTrack_Artist.' - '.$currentTrack_Title;
my $nextTrack_Artist = ReadingsVal($name,'nextTrack_Artist','FEHLER');
my $nextTrack_Title = ReadingsVal($name,'nextTrack_Title','FEHLER');
my $nextTrack = $nextTrack_Artist.' - '.$nextTrack_Title;
my $previouspic = 'rc_PREVIOUS';
my $nextpic = 'rc_NEXT';
my $voldownpic = 'rc_VOLDOWN';
my $voluppic = 'rc_VOLUP';
my $leavegrouppic = 'rc_LEFT';
my $showlg = ReadingsVal($name,"name","0") ne $groupname ? "<a href=\"/fhem?cmd.dummy=set $name leaveGroup&XHR=1\">".FW_makeImage($leavegrouppic)."</a>" : "";
if (($mystate eq 'PLAYING')
  || ($mystate eq 'TRANSITIONING' )
  || ($mystate eq 'set_next' )
  || ($mystate eq 'set_previous' )
  || ($mystate eq 'set_volumeUp' )
  || ($mystate eq 'set_volumeDown' )
  || ($mystate eq 'set_mute' )) {
    my $shownp = ReadingsVal($name,'name','') eq $sgroupname
    ? "<a href=\"/fhem?cmd.dummy=set $name previous&XHR=1\">".FW_makeImage($previouspic)."</a>
       <a href=\"/fhem?cmd.dummy=set $name next&XHR=1\">".FW_makeImage($nextpic)."</a>" : ""; 
    $show = "$showlg <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($playpic)."</a>
    <a href=\"/fhem?cmd.dummy=set $name volumeDown&XHR=1\">".FW_makeImage($voldownpic)."</a>
    $shownp
    <a href=\"/fhem?cmd.dummy=set $name volumeUp&XHR=1\">".FW_makeImage($voluppic)."</a>
    &nbsp;&nbsp;&nbsp;&nbsp;
    <a href=\"/fhem?cmd.dummy=set $name mute $mutecmd&XHR=1\">".FW_makeImage($mutepic)."</a><br>";
 
    if (ReadingsVal($name,'name','') eq $sgroupname) {
      $show = ReadingsVal($name,'currentTrack_TrackUri','') =~ 'spdif'
      ? 'TV': ReadingsVal($name,'enqueuedMetadata_UpnpClass','FEHLER') ne 'object.item.audioItem.audioBroadcast'
      ? "$show<marquee style='width: $wpix'>Aktueller Track: $currentTrack<br>Nächster Track: $nextTrack</marquee>"
      : "$show<marquee style='width: $wpix'>Radio: $currentTrack</marquee>"
    }
    elsif (ReadingsVal($name,'name','') ne $groupname) {
      $show = "$show Master: $sgroupname"}
    }
    else {
      $show = $name eq $uuidtoname
      ? "$showlg <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($playpic)."</a>"
      : "$showlg <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($playpic)."</a><br>Master: $sgroupname"
    }
  "<div>
   <table>
     <tr>
       <td><div style='display: inline-block; margin-right: 5px; border: 1px solid lightgray;
              height: 4.00em; width: 4.00em; background-image: url($img); background-size: contain;'></div></td>
       <td>$show</td>
     </tr>
   </table>
   </div>"
}
   icon       Sonos2mqtt_icon-S12
   jsonMap    volume_Master:volume mute_Master:mute transportState:state
   model      sonos2mqtt_speaker
   readingList sonos/RINCON_949F3E84C8BC01400:.* { json2nameValue($EVENT,'',$JSONMAP) }
sonos/RINCON_949F3E84C8BC01400/ZoneInfo:.* { json2nameValue($EVENT) }
   room       MQTT2_DEVICE
   setList    stop:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "stop" }
  play:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "play" }
  pause:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "pause" }
  toggle:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "toggle" }
  volumeUp:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "volumeup" }
  volumeDown:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "volumedown" }
  volume:slider,0,1,100 sonos/RINCON_949F3E84C8BC01400/control { "command": "volume", "input": $EVTPART1 }
  mute:true,false { my $value = $EVTPART1 eq "true" ? "mute" : "unmute"; qq(sonos/RINCON_949F3E84C8BC01400/control { "command": "$value" } ) }
  next:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "next" }
  previous:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "previous" }
  joinGroup:textField sonos/RINCON_949F3E84C8BC01400/control { "command": "joingroup",  "input": "$EVTPART1"}
  leaveGroup:noArg { my $value = ReadingsVal("RINCON_949F3E84C8BC01400","groupName","all"); qq(sonos/RINCON_949F3E84C8BC01400/control { "command": "leavegroup",  "input": "$value" } ) }
  setAVTUri:textField sonos/RINCON_949F3E84C8BC01400/control { "command": "setavtransporturi",  "input": "$EVTPART1"}
  playUri:textField {fhem("set $NAME setAVTUri $EVTPART1; sleep 1; set $NAME play")}
  input:Queue { my $value = $EVTPART1 eq "TV" ? "tv" : $EVTPART1 eq "Line_In" ? "line" : "queue"; qq(sonos/RINCON_949F3E84C8BC01400/control { "command": "switchto$value" } ) }
  notify:textField sonos/RINCON_949F3E84C8BC01400/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":10,"volume":$EVTPART1,"delayMs":700}}
  x_raw_payload:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq(sonos/RINCON_949F3E84C8BC01400/control $payload)}
  speak:textField { my $tts="SonosTTS";my ($cmd,$vol,$text)=split(' ', $EVENT,3);fhem("set $tts tts $text;sleep $tts:playing:.0 ;set $NAME notify $vol [$tts:httpName]")}


Hab gerade gestehen, die Aliasse passen, aber die Icons noch nicht.
FHEM im Proxmox Container

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Mitch

Hab ich, keine Änderung.
Die Icons sind auch nicht runter geladen worden.
FHEM im Proxmox Container

Otto123

Ja das sind sicher die Fehlermeldungen. Kannst DU mal schauen ob es die ICON Dateien gibt? Die URL dorthin steht da drin:
http://192.168.0.147:1400/xml/device_description.xml


Sind die Player alle von FHEM aus netzwerktechnisch erreichbar?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Mitch

FHEM im Proxmox Container

Otto123

Ok - dann klappt es nicht wenn sich zu viele Player gleichzeitig melden?
Kannst Du einen Player "nachpflegen"
set Player x_raw_payload {"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}
Dann sollte das andere notify nochmal anspringen :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Mitch

Hab ich, hat aber nichts geändert  ???

Ist jetzt auch nicht so schlimm und wegen mir brauchst du da keine Zeit investieren.
Ich spiele mal noch ein bisschen, aber Icon und Co ist mir nicht wichtig.
Ich brache eigentlich nur speak und playSound

Natürlich teste ich gerne für dich weiter
FHEM im Proxmox Container

Mitch

#714
Habe es jetzt nochmal mit verbose 5 gemacht:

2020.11.02 20:57:43 4: WEB_192.168.0.218_51206 POST /fhem&detail=MQTT2_RINCON_949F3E84C8BC01400&dev.setMQTT2_RINCON_949F3E84C8BC01400=MQTT2_RINCON_949F3E84C8BC01400&fwcsrf=csrf_558243214419674&cmd.setMQTT2_RINCON_949F3E84C8BC01400=set&arg.setMQTT2_RINCON_949F3E84C8BC01400=x_raw_payload&val.setMQTT2_RINCON_949F3E84C8BC01400=%7B%22command%22%3A+%22adv-command%22%2C%22input%22%3A+%7B%22cmd%22%3A%22GetZoneInfo%22%2C%22reply%22%3A%22ZoneInfo%22%7D%7D; BUFLEN:0
2020.11.02 20:57:43 5: Cmd: >set MQTT2_RINCON_949F3E84C8BC01400 x_raw_payload {"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}<
2020.11.02 20:57:43 3: MQTT2_DEVICE set MQTT2_RINCON_949F3E84C8BC01400 x_raw_payload {"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}
2020.11.02 20:57:43 5: Cmd: >{ my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq(sonos/RINCON_949F3E84C8BC01400/control $payload)}<
2020.11.02 20:57:43 5: MQTT: PUBLISH sonos/RINCON_949F3E84C8BC01400/control {"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}
2020.11.02 20:57:43 5:   MQTT_192.168.0.208_35034 mqttjs_740d5d53 => sonos/RINCON_949F3E84C8BC01400/control:{"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}
2020.11.02 20:57:43 5: Starting notify loop for MQTT2_RINCON_949F3E84C8BC01400, 1 event(s), first is x_raw_payload
2020.11.02 20:57:43 5: createNotifyHash
2020.11.02 20:57:43 5: End notify loop for MQTT2_RINCON_949F3E84C8BC01400
2020.11.02 20:57:43 5: GET /fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id= HTTP/1.1
Host: 192.168.0.230:8083
Origin: http://192.168.0.230:8083
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400
Accept-Encoding: gzip, deflate
Accept-Language: de-de
2020.11.02 20:57:43 4: WEB_192.168.0.218_51206 GET /fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=; BUFLEN:0
2020.11.02 20:57:43 4: WEB: /fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id= / RL:9149 / text/html; charset=UTF-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate

2020.11.02 20:57:43 4:   MQTT_192.168.0.208_35034 mqttjs_740d5d53 PUBLISH sonos/RINCON_949F3E84C8BC01400/ZoneInfo:{"SerialNumber":"94-9F-3E-84-C8-BC:4","SoftwareVersion":"57.3-81090","DisplaySoftwareVersion":"11.2.3","HardwareVersion":"1.20.1.6-2.2","IPAddress":"192.168.0.147","MACAddress":"94:9F:3E:84:C8:BC","CopyrightInfo":"© 2003-2019, Sonos, Inc. All rights reserved.","ExtraInfo":"","HTAudioIn":0,"Flags":0}
2020.11.02 20:57:43 5: MQTT: dispatch autocreate=simple\000mqttjs_740d5d53\000sonos/RINCON_949F3E84C8BC01400/ZoneInfo\000{"SerialNumber":"94-9F-3E-84-C8-BC:4","SoftwareVersion":"57.3-81090","DisplaySoftwareVersion":"11.2.3","HardwareVersion":"1.20.1.6-2.2","IPAddress":"192.168.0.147","MACAddress":"94:9F:3E:84:C8:BC","CopyrightInfo":"© 2003-2019, Sonos, Inc. All rights reserved.","ExtraInfo":"","HTAudioIn":0,"Flags":0}
2020.11.02 20:57:43 4: MQTT2_DEVICE_Parse: MQTT2_RINCON_949F3E84C8BC01400 sonos/RINCON_949F3E84C8BC01400/ZoneInfo => { json2nameValue($EVENT) }
2020.11.02 20:57:43 5: Starting notify loop for MQTT2_RINCON_949F3E84C8BC01400, 10 event(s), first is Flags: 0
2020.11.02 20:57:43 5: Triggering n_configSonos2
2020.11.02 20:57:43 4: n_configSonos2 exec {
  my @tv = ("S14","S11","S9");;
  my @line = ("S5","Z90","ZP120");;
  my $url="http://$EVTPART1:1400";;
  my $xmltext = GetFileFromURL("$url/xml/device_description.xml");;
  my ($mn)=$xmltext =~ /(S[0-9]+)/;;
  my ($img)=$xmltext =~ /(.*)<\/url>/;;
  my $icon="Sonos2mqtt_icon-$mn";;
  my $setList=AttrVal($NAME,'setList','');;
  fhem("setreading $NAME modelNumber $mn");;
  fhem("\"wget -qO ./www/images/default/$icon.png $url$img\"");;
  fhem("attr $NAME icon $icon;;sleep 4 WI;;set WEB rereadicons");;
  if (grep(/$mn/, @tv)) {$setList=~s/input:Queue \{/input:Queue,TV \{/};;
  if (grep(/$mn/, @line)) {$setList=~s/input:Queue \{/input:Queue,Line_In \{/};;
  $setList=~s/;;/;;;;/g;;
  fhem("attr $NAME setList $setList")
}
2020.11.02 20:57:43 5: Cmd: >{
  my @tv = ("S14","S11","S9");
  my @line = ("S5","Z90","ZP120");
  my $url="http://$EVTPART1:1400";
  my $xmltext = GetFileFromURL("$url/xml/device_description.xml");
  my ($mn)=$xmltext =~ /(S[0-9]+)/;
  my ($img)=$xmltext =~ /(.*)<\/url>/;
  my $icon="Sonos2mqtt_icon-$mn";
  my $setList=AttrVal($NAME,'setList','');
  fhem("setreading $NAME modelNumber $mn");
  fhem("\"wget -qO ./www/images/default/$icon.png $url$img\"");
  fhem("attr $NAME icon $icon;sleep 4 WI;set WEB rereadicons");
  if (grep(/$mn/, @tv)) {$setList=~s/input:Queue \{/input:Queue,TV \{/};
  if (grep(/$mn/, @line)) {$setList=~s/input:Queue \{/input:Queue,Line_In \{/};
  $setList=~s/;/;;/g;
  fhem("attr $NAME setList $setList")
}<
2020.11.02 20:57:43 5: HttpUtils url=http://192.168.0.147:1400/xml/device_description.xml
2020.11.02 20:57:43 5: HttpUtils request header:
GET /xml/device_description.xml HTTP/1.0
Host: 192.168.0.147:1400
User-Agent: fhem
Accept-Encoding: gzip,deflate

2020.11.02 20:57:43 4: http://192.168.0.147:1400/xml/device_description.xml: HTTP response code 200
2020.11.02 20:57:43 5: HttpUtils http://192.168.0.147:1400/xml/device_description.xml: Got data, length: 9274
2020.11.02 20:57:43 5: HttpUtils response header:
HTTP/1.1 200 OK
Content-Type: text/xml
Transfer-Encoding: chunked
Server: Linux UPnP/1.0 Sonos/57.3-81090 (ZPS12)
Connection: close
2020.11.02 20:57:43 5: Cmd: >setreading MQTT2_RINCON_949F3E84C8BC01400 modelNumber S12<
2020.11.02 20:57:43 5: Cmd: >"wget -qO ./www/images/default/Sonos2mqtt_icon-S12.png http://192.168.0.147:1400        <url>/img/icon-S12.png"<
2020.11.02 20:57:43 5: Cmd: >attr MQTT2_RINCON_949F3E84C8BC01400 icon Sonos2mqtt_icon-S12<
2020.11.02 20:57:43 5: Starting notify loop for global, 1 event(s), first is ATTR MQTT2_RINCON_949F3E84C8BC01400 icon Sonos2mqtt_icon-S12
sh: 1: cannot open url: No such file
2020.11.02 20:57:43 5: End notify loop for global
2020.11.02 20:57:43 5: Cmd: >sleep 4 WI<
2020.11.02 20:57:43 5: Cmd: >attr MQTT2_RINCON_949F3E84C8BC01400 setList stop:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "stop" }
  play:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "play" }
  pause:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "pause" }
  toggle:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "toggle" }
  volumeUp:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "volumeup" }
  volumeDown:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "volumedown" }
  volume:slider,0,1,100 sonos/RINCON_949F3E84C8BC01400/control { "command": "volume", "input": $EVTPART1 }
  mute:true,false { my $value = $EVTPART1 eq "true" ? "mute" : "unmute"; qq(sonos/RINCON_949F3E84C8BC01400/control { "command": "$value" } ) }
  next:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "next" }
  previous:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "previous" }
  joinGroup:textField sonos/RINCON_949F3E84C8BC01400/control { "command": "joingroup",  "input": "$EVTPART1"}
  leaveGroup:noArg { my $value = ReadingsVal("RINCON_949F3E84C8BC01400","groupName","all"); qq(sonos/RINCON_949F3E84C8BC01400/control { "command": "leavegroup",  "input": "$value" } ) }
  setAVTUri:textField sonos/RINCON_949F3E84C8BC01400/control { "command": "setavtransporturi",  "input": "$EVTPART1"}
  playUri:textField {fhem("set $NAME setAVTUri $EVTPART1; sleep 1; set $NAME play")}
  input:Queue { my $value = $EVTPART1 eq "TV" ? "tv" : $EVTPART1 eq "Line_In" ? "line" : "queue"; qq(sonos/RINCON_949F3E84C8BC01400/control { "command": "switchto$value" } ) }
  notify:textField sonos/RINCON_949F3E84C8BC01400/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":10,"volume":$EVTPART1,"delayMs":700}}
  x_raw_payload:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq(sonos/RINCON_949F3E84C8BC01400/control $payload)}
  speak:textField { my $tts="SonosTTS";my ($cmd,$vol,$text)=split(' ', $EVENT,3);fhem("set $tts tts $text;sleep $tts:playing:.0 ;set $NAME notify $vol [$tts:httpName]")}<
2020.11.02 20:57:43 5: Starting notify loop for global, 1 event(s), first is ATTR MQTT2_RINCON_949F3E84C8BC01400 setList stop:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "stop" }\n  play:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "play" }\n  pause:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "pause" }\n  toggle:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "toggle" }\n  volumeUp:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "volumeup" }\n  volumeDown:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "volumedown" }\n  volume:slider,0,1,100 sonos/RINCON_949F3E84C8BC01400/control { "command": "volume", "input": $EVTPART1 }\n  mute:true,false { my $value = $EVTPART1 eq "true" ? "mute" : "unmute"; qq(sonos/RINCON_949F3E84C8BC01400/control { "command": "$value" } ) }\n  next:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "next" }\n  previous:noArg sonos/RINCON_949F3E84C8BC01400/control { "command": "previous" }\n  joinGroup:textField sonos/RINCON_949F3E84C8BC01400/control { "command": "joingroup",  "input": "$EVTPART1"}\n  leaveGroup:noArg { my $value = ReadingsVal("RINCON_949F3E84C8BC01400","groupName","all"); qq(sonos/RINCON_949F3E84C8BC01400/control { "command": "leavegroup",  "input": "$value" } ) }\n  setAVTUri:textField sonos/RINCON_949F3E84C8BC01400/control { "command": "setavtransporturi",  "input": "$EVTPART1"}\n  playUri:textField {fhem("set $NAME setAVTUri $EVTPART1; sleep 1; set $NAME play")}\n  input:Queue { my $value = $EVTPART1 eq "TV" ? "tv" : $EVTPART1 eq "Line_In" ? "line" : "queue"; qq(sonos/RINCON_949F3E84C8BC01400/control { "command": "switchto$value" } ) }\n  notify:textField sonos/RINCON_949F3E84C8BC01400/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":10,"volume":$EVTPART1,"delayMs":700}}\n  x_raw_payload:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq(sonos/RINCON_949F3E84C8BC01400/control $payload)}\n  speak:textField { my $tts="SonosTTS";my ($cmd,$vol,$text)=split(' ', $EVENT,3);fhem("set $tts tts $text;sleep $tts:playing:.0 ;set $NAME notify $vol [$tts:httpName]")}
2020.11.02 20:57:43 5: End notify loop for global
2020.11.02 20:57:43 5: End notify loop for MQTT2_RINCON_949F3E84C8BC01400
2020.11.02 20:57:44 5: GET /fhem/pgm2/style.css?v=1604342017 HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
If-None-Match: "1580044447"
Accept: text/css,*/*;q=0.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:44 4: WEB_192.168.0.218_51206 GET /fhem/pgm2/style.css?v=1604342017; BUFLEN:0
2020.11.02 20:57:44 4: WEB_192.168.0.218_51206 => 304 Not Modified
2020.11.02 20:57:44 5: GET /fhem/pgm2/jquery-ui.min.css HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
If-None-Match: "1580044447"
Accept: text/css,*/*;q=0.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:44 4: WEB_192.168.0.218_51207 GET /fhem/pgm2/jquery-ui.min.css; BUFLEN:0
2020.11.02 20:57:44 4: WEB_192.168.0.218_51207 => 304 Not Modified
2020.11.02 20:57:44 4: Connection accepted from WEB_192.168.0.218_51391
2020.11.02 20:57:44 5: GET /fhem/pgm2/jquery.min.js HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
If-None-Match: "1580044447"
Accept: */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:44 4: WEB_192.168.0.218_51391 GET /fhem/pgm2/jquery.min.js; BUFLEN:0
2020.11.02 20:57:44 4: WEB_192.168.0.218_51391 => 304 Not Modified
2020.11.02 20:57:44 5: GET /fhem/pgm2/jquery-ui.min.js HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
If-None-Match: "1580044447"
Accept: */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:44 4: WEB_192.168.0.218_51206 GET /fhem/pgm2/jquery-ui.min.js; BUFLEN:0
2020.11.02 20:57:44 4: WEB_192.168.0.218_51206 => 304 Not Modified
2020.11.02 20:57:44 4: Connection accepted from WEB_192.168.0.218_51392
2020.11.02 20:57:44 4: Connection accepted from WEB_192.168.0.218_51393
2020.11.02 20:57:44 5: GET /fhem/pgm2/ios7Common.css HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
If-None-Match: "1580044447"
Accept: text/css,*/*;q=0.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:44 4: WEB_192.168.0.218_51207 GET /fhem/pgm2/ios7Common.css; BUFLEN:0
2020.11.02 20:57:44 4: WEB_192.168.0.218_51207 => 304 Not Modified
2020.11.02 20:57:44 5: GET /fhem/pgm2/fhemweb.js HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
If-None-Match: "1604341667"
Accept: */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:44 4: WEB_192.168.0.218_51393 GET /fhem/pgm2/fhemweb.js; BUFLEN:0
2020.11.02 20:57:44 4: WEB_192.168.0.218_51393 => 304 Not Modified
2020.11.02 20:57:44 5: GET /fhem/images/default/icoEverything.png HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
If-None-Match: "1580044447"
Accept: image/png,image/svg+xml,image/*;q=0.8,video/*;q=0.8,*/*;q=0.5
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:44 4: WEB_192.168.0.218_51392 GET /fhem/images/default/icoEverything.png; BUFLEN:0
2020.11.02 20:57:44 4: WEB_192.168.0.218_51392 => 304 Not Modified
2020.11.02 20:57:44 5: GET /fhem/pgm2/dashboard_ios7.css HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
If-None-Match: "1580044447"
Accept: text/css,*/*;q=0.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:44 4: WEB_192.168.0.218_51206 GET /fhem/pgm2/dashboard_ios7.css; BUFLEN:0
2020.11.02 20:57:44 4: WEB_192.168.0.218_51206 => 304 Not Modified
2020.11.02 20:57:44 5: GET /fhem?cmd=%7BReadingsVal(%22MQTT2_RINCON_949F3E84C8BC01400%22%2C%22volume%22%2C%22%22)%7D&XHR=1&fwcsrf=csrf_558243214419674 HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:44 4: WEB_192.168.0.218_51206 GET /fhem?cmd=%7BReadingsVal(%22MQTT2_RINCON_949F3E84C8BC01400%22%2C%22volume%22%2C%22%22)%7D&XHR=1&fwcsrf=csrf_558243214419674; BUFLEN:0
2020.11.02 20:57:44 5: Cmd: >{ReadingsVal("MQTT2_RINCON_949F3E84C8BC01400","volume","")}<
2020.11.02 20:57:44 4: WEB: /fhem?cmd=%7BReadingsVal(%22MQTT2_RINCON_949F3E84C8BC01400%22%2C%22volume%22%2C%22%22)%7D&XHR=1&fwcsrf=csrf_558243214419674 / RL:23 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate

2020.11.02 20:57:44 5: GET /fhem?cmd=%7BAttrVal(%22MQTT2_RINCON_949F3E84C8BC01400%22%2C%22room%22%2C%22%22)%7D&XHR=1&fwcsrf=csrf_558243214419674 HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:44 4: WEB_192.168.0.218_51207 GET /fhem?cmd=%7BAttrVal(%22MQTT2_RINCON_949F3E84C8BC01400%22%2C%22room%22%2C%22%22)%7D&XHR=1&fwcsrf=csrf_558243214419674; BUFLEN:0
2020.11.02 20:57:44 5: Cmd: >{AttrVal("MQTT2_RINCON_949F3E84C8BC01400","room","")}<
2020.11.02 20:57:44 4: WEB: /fhem?cmd=%7BAttrVal(%22MQTT2_RINCON_949F3E84C8BC01400%22%2C%22room%22%2C%22%22)%7D&XHR=1&fwcsrf=csrf_558243214419674 / RL:33 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate

2020.11.02 20:57:44 5: GET /fhem?XHR=1&inform=type=status;filter=MQTT2_RINCON_949F3E84C8BC01400;since=1604350662;fmt=JSON&fw_id=568×tamp=1604350664178 HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:44 4: WEB_192.168.0.218_51206 GET /fhem?XHR=1&inform=type=status;filter=MQTT2_RINCON_949F3E84C8BC01400;since=1604350662;fmt=JSON&fw_id=568×tamp=1604350664178; BUFLEN:0
2020.11.02 20:57:47 5: Cmd: >set WEB rereadicons<
2020.11.02 20:57:47 5: Starting notify loop for WEB, 1 event(s), first is rereadicons
2020.11.02 20:57:47 5: createNotifyHash
2020.11.02 20:57:47 5: End notify loop for WEB
2020.11.02 20:57:50 5: POST /fhem?cmd=save%20?&XHR=1&fwcsrf=csrf_558243214419674&fw_id=568 HTTP/1.1
Host: 192.168.0.230:8083
Origin: http://192.168.0.230:8083
Accept-Encoding: gzip, deflate
Content-Length: 0
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Language: de-de
X-Requested-With: XMLHttpRequest
2020.11.02 20:57:50 4: WEB_192.168.0.218_51207 POST /fhem?cmd=save%20?&XHR=1&fwcsrf=csrf_558243214419674&fw_id=568; BUFLEN:0
2020.11.02 20:57:50 5: Cmd: >save ?<
2020.11.02 20:57:50 4: WEB: /fhem?cmd=save%20?&XHR=1&fwcsrf=csrf_558243214419674&fw_id=568 / RL:76 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate

2020.11.02 20:57:50 5: GET /fhem/pgm2/images/ui-icons_222222_256x240.png HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
If-None-Match: "1580044447"
Accept: image/png,image/svg+xml,image/*;q=0.8,video/*;q=0.8,*/*;q=0.5
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:50 4: WEB_192.168.0.218_51207 GET /fhem/pgm2/images/ui-icons_222222_256x240.png; BUFLEN:0
2020.11.02 20:57:50 4: WEB_192.168.0.218_51207 => 304 Not Modified
2020.11.02 20:57:50 5: GET /fhem/pgm2/images/ui-bg_glass_100_f6f6f6_1x400.png HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
If-None-Match: "1580044447"
Accept: image/png,image/svg+xml,image/*;q=0.8,video/*;q=0.8,*/*;q=0.5
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:50 4: WEB_192.168.0.218_51391 GET /fhem/pgm2/images/ui-bg_glass_100_f6f6f6_1x400.png; BUFLEN:0
2020.11.02 20:57:50 4: WEB_192.168.0.218_51391 => 304 Not Modified
2020.11.02 20:57:50 5: GET /fhem/pgm2/images/ui-bg_diagonals-thick_20_666666_40x40.png HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
If-None-Match: "1580044447"
Accept: image/png,image/svg+xml,image/*;q=0.8,video/*;q=0.8,*/*;q=0.5
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:50 4: WEB_192.168.0.218_51207 GET /fhem/pgm2/images/ui-bg_diagonals-thick_20_666666_40x40.png; BUFLEN:0
2020.11.02 20:57:50 4: WEB_192.168.0.218_51207 => 304 Not Modified
2020.11.02 20:57:50 5: GET /fhem/pgm2/images/ui-bg_glass_100_fdf5ce_1x400.png HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
If-None-Match: "1580044447"
Accept: image/png,image/svg+xml,image/*;q=0.8,video/*;q=0.8,*/*;q=0.5
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:50 4: WEB_192.168.0.218_51207 GET /fhem/pgm2/images/ui-bg_glass_100_fdf5ce_1x400.png; BUFLEN:0
2020.11.02 20:57:50 4: WEB_192.168.0.218_51207 => 304 Not Modified
2020.11.02 20:57:51 5: GET /fhem/pgm2/images/ui-bg_glass_65_ffffff_1x400.png HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
If-None-Match: "1580044447"
Accept: image/png,image/svg+xml,image/*;q=0.8,video/*;q=0.8,*/*;q=0.5
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Accept-Language: de-de
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Encoding: gzip, deflate
2020.11.02 20:57:51 4: WEB_192.168.0.218_51207 GET /fhem/pgm2/images/ui-bg_glass_65_ffffff_1x400.png; BUFLEN:0
2020.11.02 20:57:51 4: WEB_192.168.0.218_51207 => 304 Not Modified
2020.11.02 20:57:52 5: POST /fhem?cmd=save&XHR=1&fwcsrf=csrf_558243214419674&fw_id=568 HTTP/1.1
Host: 192.168.0.230:8083
Origin: http://192.168.0.230:8083
Accept-Encoding: gzip, deflate
Content-Length: 0
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Language: de-de
X-Requested-With: XMLHttpRequest
2020.11.02 20:57:52 4: WEB_192.168.0.218_51207 POST /fhem?cmd=save&XHR=1&fwcsrf=csrf_558243214419674&fw_id=568; BUFLEN:0
2020.11.02 20:57:52 5: Cmd: >save<
2020.11.02 20:57:52 5: Starting notify loop for global, 1 event(s), first is SAVE
2020.11.02 20:57:52 5: End notify loop for global
2020.11.02 20:57:52 4: WEB: /fhem?cmd=save&XHR=1&fwcsrf=csrf_558243214419674&fw_id=568 / RL:52 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/ Cache-Control: no-cache, no-store, must-revalidate

2020.11.02 20:57:55 4: Connection closed for WEB_192.168.0.218_51206: EOF
2020.11.02 20:57:55 5: GET /fhem/FileLog_logWrapper?dev=Logfile&type=text&file=fhem-2020-11.log HTTP/1.1
Host: 192.168.0.230:8083
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
Referer: http://192.168.0.230:8083/fhem?detail=MQTT2_RINCON_949F3E84C8BC01400&fw_id=
Accept-Language: de-de
Accept-Encoding: gzip, deflate
2020.11.02 20:57:55 4: WEB_192.168.0.218_51207 GET /fhem/FileLog_logWrapper?dev=Logfile&type=text&file=fhem-2020-11.log; BUFLEN:0


Dann nochmal mit 3, weil es doch unübersichtlich wurde:
2020.11.02 21:02:56 3: MQTT2_DEVICE set MQTT2_RINCON_B8E9375200CE01400 x_raw_payload {"command": "adv-command","input": {"cmd":"GetZoneInfo","reply":"ZoneInfo"}}
sh: 1: cannot open url: No such file


irgendwie kann eine/die? url nicht geöffnet werden
FHEM im Proxmox Container

Mitch

habe jetzt mal deinen notify umgebaut, um alle Variablen in readings zu haben.
Es scheint ein Fehler beim holen des png Namen zu sein.
In der Variablen $img steht: <url>/img/icon-S18.png

Dadruch ergibt sich der Pfad: http://192.168.0.183:1400 <url>/img/icon-S18.png
Das kann nicht gehen.

Leider bin ich bei RegEx und Escapen der volle Depp, weswegen ich es nicht korrigieren kann  :-[
FHEM im Proxmox Container

Otto123

Ja sowas habe ich mir gedacht, poste mal bitte das XML File, da ist wahrscheinlich etwas anders bei manchen Playern.

Ich schau es mir morgen an :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Mitch

#717
Bitte schön:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:ZonePlayer:1</deviceType>
<friendlyName>192.168.0.183 - Sonos One</friendlyName>
<manufacturer>Sonos, Inc.</manufacturer>
<manufacturerURL>http://www.sonos.com</manufacturerURL>
<modelNumber>S18</modelNumber>
<modelDescription>Sonos One</modelDescription>
<modelName>Sonos One</modelName>
<modelURL>http://www.sonos.com/products/zoneplayers/S18</modelURL>
<softwareVersion>57.3-81090</softwareVersion>
<swGen>1</swGen>
<hardwareVersion>1.26.1.6-2.2</hardwareVersion>
<serialNum>78-28-CA-F1-1E-76:D</serialNum>
<MACAddress>78:28:CA:F1:1E:76</MACAddress>
<UDN>uuid:RINCON_7828CAF11E7601400</UDN>
<iconList>
<icon>
<id>0</id>
<mimetype>image/png</mimetype>
<width>48</width>
<height>48</height>
<depth>24</depth>
<url>/img/icon-S18.png</url>
</icon>
</iconList>
<minCompatibleVersion>56.0-00000</minCompatibleVersion>
<legacyCompatibleVersion>36.0-00000</legacyCompatibleVersion>
<apiVersion>1.18.9</apiVersion>
<minApiVersion>1.1.0</minApiVersion>
<displayVersion>11.2.3</displayVersion>
<extraVersion/>
<roomName>Küche</roomName>
<displayName>One</displayName>
<zoneType>20</zoneType>
<feature1>0x00000000</feature1>
<feature2>0x01c18332</feature2>
<feature3>0x0001100e</feature3>
<seriesid>A200</seriesid>
<variant>2</variant>
<internalSpeakerSize>5</internalSpeakerSize>
<bassExtension>75.000</bassExtension>
<satGainOffset>6.000</satGainOffset>
<memory>1024</memory>
<flash>1024</flash>
#DEACTIVATION_STATE_TAG_AND_VALUE# #DEACTIVATION_TTL_TAG_AND_VALUE# #DEACTIVATION_DATE_TIME_TAG_AND_VALUE#
<ampOnTime>20</ampOnTime>
<retailMode>0</retailMode>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:AlarmClock:1</serviceType>
<serviceId>urn:upnp-org:serviceId:AlarmClock</serviceId>
<controlURL>/AlarmClock/Control</controlURL>
<eventSubURL>/AlarmClock/Event</eventSubURL>
<SCPDURL>/xml/AlarmClock1.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:MusicServices:1</serviceType>
<serviceId>urn:upnp-org:serviceId:MusicServices</serviceId>
<controlURL>/MusicServices/Control</controlURL>
<eventSubURL>/MusicServices/Event</eventSubURL>
<SCPDURL>/xml/MusicServices1.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:DeviceProperties:1</serviceType>
<serviceId>urn:upnp-org:serviceId:DeviceProperties</serviceId>
<controlURL>/DeviceProperties/Control</controlURL>
<eventSubURL>/DeviceProperties/Event</eventSubURL>
<SCPDURL>/xml/DeviceProperties1.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:SystemProperties:1</serviceType>
<serviceId>urn:upnp-org:serviceId:SystemProperties</serviceId>
<controlURL>/SystemProperties/Control</controlURL>
<eventSubURL>/SystemProperties/Event</eventSubURL>
<SCPDURL>/xml/SystemProperties1.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:ZoneGroupTopology:1</serviceType>
<serviceId>urn:upnp-org:serviceId:ZoneGroupTopology</serviceId>
<controlURL>/ZoneGroupTopology/Control</controlURL>
<eventSubURL>/ZoneGroupTopology/Event</eventSubURL>
<SCPDURL>/xml/ZoneGroupTopology1.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:GroupManagement:1</serviceType>
<serviceId>urn:upnp-org:serviceId:GroupManagement</serviceId>
<controlURL>/GroupManagement/Control</controlURL>
<eventSubURL>/GroupManagement/Event</eventSubURL>
<SCPDURL>/xml/GroupManagement1.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-tencent-com:service:QPlay:1</serviceType>
<serviceId>urn:tencent-com:serviceId:QPlay</serviceId>
<controlURL>/QPlay/Control</controlURL>
<eventSubURL>/QPlay/Event</eventSubURL>
<SCPDURL>/xml/QPlay1.xml</SCPDURL>
</service>
</serviceList>
<deviceList>
<device>
<deviceType>urn:schemas-upnp-org:device:MediaServer:1</deviceType>
<friendlyName>192.168.0.183 - Sonos One Media Server</friendlyName>
<manufacturer>Sonos, Inc.</manufacturer>
<manufacturerURL>http://www.sonos.com</manufacturerURL>
<modelNumber>S18</modelNumber>
<modelDescription>Sonos One Media Server</modelDescription>
<modelName>Sonos One</modelName>
<modelURL>http://www.sonos.com/products/zoneplayers/S18</modelURL>
<UDN>uuid:RINCON_7828CAF11E7601400_MS</UDN>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:ContentDirectory:1</serviceType>
<serviceId>urn:upnp-org:serviceId:ContentDirectory</serviceId>
<controlURL>/MediaServer/ContentDirectory/Control</controlURL>
<eventSubURL>/MediaServer/ContentDirectory/Event</eventSubURL>
<SCPDURL>/xml/ContentDirectory1.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
<serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
<controlURL>/MediaServer/ConnectionManager/Control</controlURL>
<eventSubURL>/MediaServer/ConnectionManager/Event</eventSubURL>
<SCPDURL>/xml/ConnectionManager1.xml</SCPDURL>
</service>
</serviceList>
</device>
<device>
<deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType>
<friendlyName>Küche - Sonos One Media Renderer</friendlyName>
<manufacturer>Sonos, Inc.</manufacturer>
<manufacturerURL>http://www.sonos.com</manufacturerURL>
<modelNumber>S18</modelNumber>
<modelDescription>Sonos One Media Renderer</modelDescription>
<modelName>Sonos One</modelName>
<modelURL>http://www.sonos.com/products/zoneplayers/S18</modelURL>
<UDN>uuid:RINCON_7828CAF11E7601400_MR</UDN>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType>
<serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId>
<controlURL>/MediaRenderer/RenderingControl/Control</controlURL>
<eventSubURL>/MediaRenderer/RenderingControl/Event</eventSubURL>
<SCPDURL>/xml/RenderingControl1.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
<serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
<controlURL>/MediaRenderer/ConnectionManager/Control</controlURL>
<eventSubURL>/MediaRenderer/ConnectionManager/Event</eventSubURL>
<SCPDURL>/xml/ConnectionManager1.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType>
<serviceId>urn:upnp-org:serviceId:AVTransport</serviceId>
<controlURL>/MediaRenderer/AVTransport/Control</controlURL>
<eventSubURL>/MediaRenderer/AVTransport/Event</eventSubURL>
<SCPDURL>/xml/AVTransport1.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-sonos-com:service:Queue:1</serviceType>
<serviceId>urn:sonos-com:serviceId:Queue</serviceId>
<controlURL>/MediaRenderer/Queue/Control</controlURL>
<eventSubURL>/MediaRenderer/Queue/Event</eventSubURL>
<SCPDURL>/xml/Queue1.xml</SCPDURL>
</service>
<service>
<serviceType>
urn:schemas-upnp-org:service:GroupRenderingControl:1
</serviceType>
<serviceId>urn:upnp-org:serviceId:GroupRenderingControl</serviceId>
<controlURL>/MediaRenderer/GroupRenderingControl/Control</controlURL>
<eventSubURL>/MediaRenderer/GroupRenderingControl/Event</eventSubURL>
<SCPDURL>/xml/GroupRenderingControl1.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:VirtualLineIn:1</serviceType>
<serviceId>urn:upnp-org:serviceId:VirtualLineIn</serviceId>
<controlURL>/MediaRenderer/VirtualLineIn/Control</controlURL>
<eventSubURL>/MediaRenderer/VirtualLineIn/Event</eventSubURL>
<SCPDURL>/xml/VirtualLineIn1.xml</SCPDURL>
</service>
</serviceList>
<X_Rhapsody-Extension xmlns="http://www.real.com/rhapsody/xmlns/upnp-1-0">
<deviceID>
urn:rhapsody-real-com:device-id-1-0:sonos_1:RINCON_7828CAF11E7601400
</deviceID>
<deviceCapabilities>
<interactionPattern type="real-rhapsody-upnp-1-0"/>
</deviceCapabilities>
</X_Rhapsody-Extension>
<qq:X_QPlay_SoftwareCapability xmlns:qq="http://www.tencent.com">QPlay:2</qq:X_QPlay_SoftwareCapability>
<iconList>
<icon>
<mimetype>image/png</mimetype>
<width>48</width>
<height>48</height>
<depth>24</depth>
<url>/img/icon-S18.png</url>
</icon>
</iconList>
</device>
</deviceList>
</device>
</root>


Benutz du S2 oder bist du noch auf S1?
Ich habe noch S1, weil mein AMP nicht update-fähig ist.
FHEM im Proxmox Container

Mitch

#718
Habe den notify jetzt so umgebaut, dass es geht.
Allerdings nur mit S-Playern.

Mein Amp ist ein ZP120, aber der notify filtert nur nach S.
Leider weis ich nicht, wie ich das machen kann  :-[

defmod n_configSonos2 notify MQTT2_RINCON_[A-Z0-9]+:IPAddress:.* {\
  my @tv = ("S14","S11","S9");;\
  my @line = ("S5","Z90","ZP120");;\
  my $url="http://$EVTPART1:1400";;\
  my $xmltext = GetFileFromURL("$url/xml/device_description.xml");;\
  my ($mn)=$xmltext =~ /(S[0-9]+)/;;\
  my $icon="Sonos2mqtt_icon-$mn.png";;\
  my $setList=AttrVal($NAME,'setList','');;\
  fhem("setreading $NAME modelNumber $mn");;\
  fhem("\"wget -qO ./www/images/default/$icon $url/img/icon-$mn.png\"");;\
  fhem("attr $NAME icon $icon;;sleep 4 WI;;set WEB rereadicons");;\
  if (grep(/$mn/, @tv)) {$setList=~s/input:Queue \{/input:Queue,TV \{/};;\
  if (grep(/$mn/, @line)) {$setList=~s/input:Queue \{/input:Queue,Line_In \{/};;\
  $setList=~s/;;/;;;;/g;;\
  fhem("attr $NAME setList $setList")\
}
FHEM im Proxmox Container

Otto123

Ich bin noch auf S1 weil ich meinen Play5 nicht alleine stellen will.
Und für meinen alten connect (den ich wirklich seit Jahren nicht mehr brauchte) konnte ich ein Paket bestellen - was alles hatte was ich noch so wollte :)
Mal sehen wie lange das geht.

Auf den ersten Blick sehen die XML Daten aus wie meine, da hab ich wohl einen Bug in meinem regExp...

Ich war zu langsam :)
Aha ok. Schau ich mir an
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz