Squeezebox Modul - erste Version

Begonnen von bugster_de, 17 Dezember 2013, 22:12:10

Vorheriges Thema - Nächstes Thema

RoBra81


kvo1

#751
Hallo Ronny,

Zitat von: RoBra81 am 02 Juni 2015, 22:20:05
In das Eingabefeld von fhem

habe ich ja gemacht, aber es werden keine Readings angelegt. E müßten doch bei jedem

Player die Readings

squeeze_pi2:synced
squeeze_pi3:synced
squeeze_Galaxy:synced
squeeze_Denver:synced

zu sehen sein, oder ?


ein Attribute "userReadings" wird angelegt mit folgenden Inhalt:

squeeze_pi2:synced {if (index(ReadingsVal($name,'synced',''), 'squeeze_pi2') != -1) {return 'synced'} else {return 'not synced'}}, squeeze_pi3:synced {if (index(ReadingsVal($name,'synced',''), 'squeeze_pi3') != -1) {return 'synced'} else {return 'not synced'}}, squeeze_Galaxy:synced {if (index(ReadingsVal($name,'synced',''), 'squeeze_Galaxy') != -1) {return 'synced'} else {return 'not synced'}}, squeeze_Denver:synced {if (index(ReadingsVal($name,'synced',''), 'squeeze_Denver') != -1) {return 'synced'} else {return 'not synced'}}


Wie schaut das den bei Dir aus ?

gruss klaus
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

tomster

#752
Haben Deine Player die gleichen Namen wie in FHEM?

Sonst geht es auch so:

<Name des Players in FHEM>:synced {if (index(ReadingsVal($name,'synced',''), '<Name des Players>') != -1) {return 'synced'} else {return 'not synced'}}

RoBra81

Die Readings werden erst angelegt, wenn sich das Reading synced ändert.

kvo1

Zitat von: tomster am 03 Juni 2015, 00:06:07
Haben Deine Player die gleichen Namen wie in FHEM?

Sonst geht es auch so:

<Name des Players in FHEM>:synced {if (index(ReadingsVal($name,'synced',''), '<Name des Players>') != -1) {return 'synced'} else {return 'not synced'}}


genau so hab ich das ja angeben, siehe Beitrag darüber ....

<Name des Players in FHEM>    ==>    squeeze_pi2

squeeze_pi2:synced {if (index(ReadingsVal($name,'synced',''), 'squeeze_pi2') != -1) {return 'synced'} else {return 'not synced'}}
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

kvo1

Hi Ronny,
danke für Deine Geduld....

Zitat von: RoBra81 am 03 Juni 2015, 05:46:15
Die Readings werden erst angelegt, wenn sich das Reading synced ändert.

hmmm... dann müßte es doch vorhanden sein wenn ich z.B.   squeeze_pi2 mit squeeze_pi3  synce ?

RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

RoBra81

Zitat von: kvo1 am 03 Juni 2015, 07:21:13
hmmm... dann müßte es doch vorhanden sein wenn ich z.B.   squeeze_pi2 mit squeeze_pi3  synce ?

Ja, dadurch sollte sich das Reading synced ändern und damit auch das neue Reading angelegt werden. Hast du vielleicht das Attribut donotnotify auf true?

tomster

#757
Zitat von: kvo1 am 03 Juni 2015, 07:17:36
genau so hab ich das ja angeben, siehe Beitrag darüber ....

<Name des Players in FHEM>    ==>    squeeze_pi2

squeeze_pi2:synced {if (index(ReadingsVal($name,'synced',''), 'squeeze_pi2') != -1) {return 'synced'} else {return 'not synced'}}

Das habe ich gesehen. Meine Frage ging aber in die Richtung, ob die Player auch wirklich so heissen. In meinem Fall sind die Player in der Squeezebox-Umgebung anders als in FHEM "getauft". Darum schaut's eben so aus:

Wohnzimmer.SB_PLAYER:synced {if (index(ReadingsVal($name,'synced',''), 'Wohnzimmer') != -1) {return 'synced'} else {return 'not synced'}},
Werkstatt.SB_PLAYER:synced {if (index(ReadingsVal($name,'synced',''), 'LMS') != -1) {return 'synced'} else {return 'not synced'}}


Was vielleicht eine Verzögerung bringen könnte ist das attr donotnotify in den Playern. Setze das Mal testweise auf "false". <-- Hat ja RoBra81 schon geschrieben, hab's wohl vorhin überlesen...

kvo1

ZitatWas vielleicht eine Verzögerung bringen könnte ist das attr donotnotify in den Playern. Setze das Mal testweise auf "false". <-- Hat ja RoBra81 schon geschrieben, hab's wohl vorhin überlesen...

bei allen 4 Playern habe ich  donotnotify auf "false" , das ist ja per Default ohnehin eingestellt !

ALso wird nur ein Notity erzeugt wenn sich state (on/off) ändert !

Vielleicht muss ich mein ...

event-on-change-reading    currentTitle,currentArtist,state,playlistCurrentTrack,playlistTracks erweitern ?


Wenn mal jemand sein Attributes und Readings posten könnte , wäre mir schon geholfen !
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

RoBra81

Probier's doch einfach mal, wenn du dein event-on-changed-reading um synced erweiterst...

kvo1

#760
Hallo Ronny

Zitat von: RoBra81 am 03 Juni 2015, 16:06:59
Probier's doch einfach mal, wenn du dein event-on-changed-reading um synced erweiterst...

jep....... das war´s , zumindest habe ich jetzt die readingsGroup ! Nur die commands tun noch nicht , mal sehen
woran das liegt.

Noch eine andere Frage:
müßte ich nicht bei den Internals unter

SYNCMASTERS  alle anderen Player sehen ? Ich sehe hier einen oder zwei !


//EDIT
Kaum macht man es richtig, schon geht es auch.
1. Fehler      Einer der Player hatte intern doch einen falschen / anderen Namen ...@ tomster: Danke für den Tipp
2. Fehler      die commmands waren als mapping eingetragen (vermutlich beim copy/paste passiert)
3. Fehler      s.o. synced fehlte in den  event-on-changed-reading

RoBra81:
Magst Du uns ein Beispiel für die RG der einzelnen Räume posten ?? (versuche auch wenig Probleme zu machen  ;) ;D )

klaus


RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

RoBra81

#761
Zitat von: kvo1 am 03 Juni 2015, 19:30:08
RoBra81:
Magst Du uns ein Beispiel für die RG der einzelnen Räume posten ?? (versuche auch wenig Probleme zu machen  ;) ;D )

Kann ich gerne tun. Zunächst braucht man noch ein paar zusätzliche UserReadings beim Player:

attr OG.ez.RA.Player userReadings OG.ez.RA.Player:synced {if (index(ReadingsVal($name,'synced',''), 'OG.ez.RA.Player') != -1) {return 'synced'} else {return 'not synced'}}, OG.ku.RA.Player:synced {if (index(ReadingsVal($name,'synced',''), 'OG.ku.RA.Player') != -1) {return 'synced'} else {return 'not synced'}}, OG.ba.RA.Player:synced {if (index(ReadingsVal($name,'synced',''), 'OG.ba.RA.Player') != -1) {return 'synced'} else {return 'not synced'}}, DG.sz.RA.Player:synced {if (index(ReadingsVal($name,'synced',''), 'DG.sz.RA.Player') != -1) {return 'synced'} else {return 'not synced'}}, DG.wz.RA.Player:synced {if (index(ReadingsVal($name,'synced',''), 'DG.wz.RA.Player') != -1) {return 'synced'} else {return 'not synced'}}, iconFWD:playlistTracks {if (ReadingsVal($name,'playlistTracks',0) <= 1) {return 'none'} else {return 'FWD'}}, iconBWD:playlistTracks {if (ReadingsVal($name,'playlistTracks',0) <= 1) {return 'none'} else {return 'BWD'}}, iconPlay {if (ReadingsVal($name,'playlistTracks',0) == 0) {return 'none'} else {if (ReadingsVal($name,'playStatus','') eq 'stopped' or ReadingsVal($name,'playStatus','') eq 'paused') {return 'PLAY'} else {return 'PAUSE'}}}, coverarturl_remote:coverarturl {my $temp = ReadingsVal($name,'coverarturl','');; $temp =~ s/127.0.0.1/192.168.18.10/g;; $temp =~ s/%20//g;; return $temp}


Das sind zum einen die bereits bekannten Readings für das Syncen. Außerdem habe ich die Readings für die Icons. Das Reading coverarturl_remote habe ich eingefügt, da zum einen im Reading coverarturl immer die localhost-IP drin steht, da mein LMS auf dem gleichen Rechner wie FHEM läuft und zum anderen muss ich ein zusätzliches Leerzeichen in der URL entfernen was vom Stream von RadioLausitz kommt. Da ich auch oft Radio EINS höre, muss ich irgendwann mal dafür auch noch eine Anpassung machen, da in dessem Stream nur eine relative Adresse drin steht...

Außerdem brauche ich für die Readingsgroup noch eine Funktion in der 99_myUtils:


sub
wrapLine($$)
{
  my ($string, $maxLength) = @_;
  my @stringParts = split(/ /, $string);
  my $actRowLength = 0;
  my $resultString;
  while (scalar(@stringParts) > 0) {
  my $tempString = shift @stringParts;
    if ($actRowLength > 0)
    {
    if (($actRowLength + length($tempString)) > $maxLength)
      {
      $actRowLength = 0;
        $resultString .= '<br>';
      }
    }
    $resultString .= $tempString;
    $actRowLength += length($tempString);
    if (scalar(@stringParts) > 0)
    {
    $resultString .= ' ';
    $actRowLength += 1;
    }
  }
  if ($resultString eq '')
  {
  return ' ';
  }
  else
  {
  return $resultString;
  }
}


Diese Funktion bricht Künstler und Titel auf mehrere Zeilen definierter Länge, da ich es nicht mag, wenn die ReadingsGroup immer ihre Breite ändert...

Hier nun die Readingsgroup:

define OG.ez.RA.Player.RG.Control readingsGroup OG.ez.RA.Player:volume\
OG.ez.RA.Player:!shuffle,!repeat,<>,<>\
OG.ez.RA.Player:!iconBWD,!iconPlay,!iconStop,!iconFWD\
OG.ez.RA.Player:!VolumeDown,!VolumeMute,!VolumeUp\
OG.ez.RA.Player:!Playlistauswahl\
OG.ez.RA.Player:playlists\
OG.ez.RA.Player:!Zufall\
OG.ez.RA.Player:!Synchronisieren\
OG.ez.RA.Player:!OG.ku.RA.Player,!OG.ba.RA.Player,!DG.sz.RA.Player,!DG.wz.RA.Player\
OG.ez.RA.Player:currentArtist\
OG.ez.RA.Player:currentTitle\
OG.ez.RA.Player:coverarturl_remote\

attr OG.ez.RA.Player.RG.Control commands {'VolumeMute' => 'set $DEVICE volume 0', 'iconStop' => 'set $DEVICE clearPlaylist', 'iconPlay.PLAY' => 'set $DEVICE play', 'iconPlay.PAUSE' => 'set $DEVICE pause', 'VolumeDown' => 'set %DEVICE volumeDown', 'VolumeUp' => 'set %DEVICE volumeUp', 'iconFWD.FWD' => 'set $DEVICE next', 'iconBWD.BWD' => 'set $DEVICE prev', 'playlists' => 'playlists:', 'shuffle.off' => 'set $DEVICE shuffle on', 'shuffle.song' => 'set $DEVICE shuffle off', 'repeat.off' => 'set $DEVICE repeat one', 'repeat.one' => 'set $DEVICE repeat all', 'repeat.all' => 'set $DEVICE repeat off', 'OG.ez.RA.Player.synced' => 'set $READING unsync $DEVICE', 'OG.ez.RA.Player.not synced' => 'set $DEVICE sync $READING', 'OG.ku.RA.Player.synced' => 'set $READING unsync $DEVICE', 'OG.ku.RA.Player.not synced' => 'set $DEVICE sync $READING', 'OG.ba.RA.Player.synced' => 'set $READING unsync $DEVICE', 'OG.ba.RA.Player.not synced' => 'set $DEVICE sync $READING', 'DG.sz.RA.Player.synced' => 'set $READING unsync $DEVICE', 'DG.sz.RA.Player.not synced' => 'set $DEVICE sync $READING', 'DG.wz.RA.Player.synced' => 'set $READING unsync $DEVICE', 'DG.wz.RA.Player.not synced' => 'set $DEVICE sync $READING', 'Zufall' => 'set $DEVICE favorites Zufaellige_Titel', 'volume' => 'volume:knob,min:0,max:100,width:180,height:150,fgColor:yellow,skin:tron,thickness:0.3,angleoffset:-125,anglearc:250' }
attr OG.ez.RA.Player.RG.Control nameStyle style="font-weight:bold;; color:yellow;;"
attr OG.ez.RA.Player.RG.Control noheading 1
attr OG.ez.RA.Player.RG.Control nonames 1
attr OG.ez.RA.Player.RG.Control notime 1
attr OG.ez.RA.Player.RG.Control style style="padding:5px;; text-align:center;; background:rgba(0, 0, 0, .4);; border:1px solid;; border-color:gray;;"
attr OG.ez.RA.Player.RG.Control valueColumns { 'playlists' => 'colspan="4"', 'Zufall' => 'colspan="4"', 'FavoritsList' => 'colspan="4"', 'currentArtist' => 'colspan="4"', 'currentTitle' => 'colspan="4"', 'VolumeMute' => 'colspan="2"', 'volume' => 'colspan="4"', 'coverarturl_remote' => 'colspan="4"', 'Synchronisieren' => 'colspan="4"', 'Playlistauswahl' => 'colspan="4"' }
attr OG.ez.RA.Player.RG.Control valueFormat { return wrapLine((join " ", map {ucfirst} split / /, lc $VALUE),25) if (($READING eq 'currentArtist') || ($READING eq 'currentTitle'));; return 0 if ($value eq 'muted');; }
attr OG.ez.RA.Player.RG.Control valueIcon { 'Zufall' => 'unknown.svg@lightgray', 'iconBWD.none' => 'rc_PREVIOUS@DarkSlateGray', 'iconFWD.none' => 'rc_NEXT@DarkSlateGray', 'iconBWD.BWD' => 'rc_PREVIOUS@lightgray', 'iconFWD.FWD' => 'rc_NEXT@lightgray', 'iconStop' => 'rc_STOP@lightgray', 'iconPlay.PLAY' => 'rc_PLAY@lightgray', 'iconPlay.PAUSE' => 'rc_PAUSE@lightgray', 'iconPlay.none' => 'rc_PLAY@DarkSlateGray', 'Close' => 'control_x@lightgray', 'VolumeUp' => 'rc_VOLPLUS@lightgray', 'VolumeDown' => 'rc_VOLMINUS@lightgray', 'VolumeMute' => 'rc_MUTE@lightgray', 'Details' => 'audio_sound@lightgray', 'shuffle.off' => 'audio_shuffle@DarkSlateGray', 'shuffle.song' => 'audio_shuffle@lightgray', 'repeat.off' => 'audio_repeat@DarkSlateGray', 'repeat.one' => 'audio_repeat_one@lightgray', 'repeat.all' => 'audio_repeat@lightgray', 'OG.ez.RA.Player.synced' => 'scene_dinner@lightgray', 'OG.ez.RA.Player.not synced' => 'scene_dinner@DarkSlateGray', 'OG.ku.RA.Player.synced' => 'scene_cooking@lightgray', 'OG.ku.RA.Player.not synced' => 'scene_cooking@DarkSlateGray', 'OG.ba.RA.Player.synced' => 'scene_bathroom@lightgray', 'OG.ba.RA.Player.not synced' => 'scene_bathroom@DarkSlateGray', 'DG.sz.RA.Player.synced' => 'scene_sleeping_alternat@lightgray', 'DG.sz.RA.Player.not synced' => 'scene_sleeping_alternat@DarkSlateGray', 'DG.wz.RA.Player.synced' => 'scene_livingroom@lightgray', 'DG.wz.RA.Player.not synced' => 'scene_livingroom@DarkSlateGray' }
attr OG.ez.RA.Player.RG.Control valuePrefix { 'coverarturl_remote' => '<img src="' }
attr OG.ez.RA.Player.RG.Control valueStyle { 'Synchronisieren' => 'style="text-align:center;;font-weight:bold;;color:yellow;;"', 'Playlistauswahl' => 'style="text-align:center;;font-weight:bold;;color:yellow;;"' }
attr OG.ez.RA.Player.RG.Control valueSuffix { 'coverarturl_remote' => '" width="180" onError="this.src=\'http://192.168.18.10:8085/fhem/images/default/cover_200x200.png\';;" >' }


Viel Erfolg damit.

Bei Bedarf versuche ich natürlich gern zu helfen.

Ronny

RoBra81

Ich habe gerade mal noch auf die Schnelle eine Version gebaut, die alle Player bedienen kann:

define XX.xx.RG.Player.Control readingsGroup OG.ez.RA.Player:!Esszimmer,playlists,!Zufall,!shuffle,!repeat,<>,<>,!OG.ku.RA.Player,!OG.ba.RA.Player,!DG.sz.RA.Player,!DG.wz.RA.Player\
OG.ez.RA.Player:volume,!iconBWD,!iconPlay,!iconStop,!iconFWD\
OG.ku.RA.Player:!Küche,playlists,!Zufall,!shuffle,!repeat,<>,!OG.ez.RA.Player,<>,!OG.ba.RA.Player,!DG.sz.RA.Player,!DG.wz.RA.Player\
OG.ku.RA.Player:volume,!iconBWD,!iconPlay,!iconStop,!iconFWD\
OG.ba.RA.Player:!Bad,playlists,!Zufall,!shuffle,!repeat,<>,!OG.ez.RA.Player,!OG.ku.RA.Player,<>,!DG.sz.RA.Player,!DG.wz.RA.Player\
OG.ba.RA.Player:volume,!iconBWD,!iconPlay,!iconStop,!iconFWD\
DG.sz.RA.Player:!Schlafzimmer,playlists,!Zufall,!shuffle,!repeat,<>,!OG.ez.RA.Player,!OG.ku.RA.Player,!OG.ba.RA.Player,<>,!DG.wz.RA.Player\
DG.sz.RA.Player:volume,!iconBWD,!iconPlay,!iconStop,!iconFWD\
DG.wz.RA.Player:!Wohnzimmer,playlists,!Zufall,!shuffle,!repeat,<>,!OG.ez.RA.Player,!OG.ku.RA.Player,!OG.ba.RA.Player,!DG.sz.RA.Player,<>\
DG.wz.RA.Player:volume,!iconBWD,!iconPlay,!iconStop,!iconFWD\

attr XX.xx.RG.Player.Control commands { 'VolumeMute' => 'set $DEVICE volume 0', 'iconStop' => 'set $DEVICE clearPlaylist', 'iconPlay.PLAY' => 'set $DEVICE play', 'iconPlay.PAUSE' => 'set $DEVICE pause', 'VolumeDown' => 'set %DEVICE volumeDown', 'VolumeUp' => 'set %DEVICE volumeUp', 'iconFWD.FWD' => 'set $DEVICE next', 'iconBWD.BWD' => 'set $DEVICE prev', 'playlists' => 'playlists:', 'shuffle.off' => 'set $DEVICE shuffle on', 'shuffle.song' => 'set $DEVICE shuffle off', 'repeat.off' => 'set $DEVICE repeat one', 'repeat.one' => 'set $DEVICE repeat all', 'repeat.all' => 'set $DEVICE repeat off', 'OG.ez.RA.Player.synced' => 'set $READING unsync $DEVICE', 'OG.ez.RA.Player.not synced' => 'set $DEVICE sync $READING', 'OG.ku.RA.Player.synced' => 'set $READING unsync $DEVICE', 'OG.ku.RA.Player.not synced' => 'set $DEVICE sync $READING', 'OG.ba.RA.Player.synced' => 'set $READING unsync $DEVICE', 'OG.ba.RA.Player.not synced' => 'set $DEVICE sync $READING', 'DG.sz.RA.Player.synced' => 'set $READING unsync $DEVICE', 'DG.sz.RA.Player.not synced' => 'set $DEVICE sync $READING', 'DG.wz.RA.Player.synced' => 'set $READING unsync $DEVICE', 'DG.wz.RA.Player.not synced' => 'set $DEVICE sync $READING', 'Zufall' => 'set $DEVICE favorites Zufaellige_Titel', 'volume' => 'volume:slider,0,1,100' }
attr XX.xx.RG.Player.Control noheading 1
attr XX.xx.RG.Player.Control nonames 1
attr XX.xx.RG.Player.Control notime 1
attr XX.xx.RG.Player.Control style style="padding:5px;; text-align:center;; background:rgba(0, 0, 0, .4);; border:1px solid;; border-color:gray;;"
attr XX.xx.RG.Player.Control valueColumns { 'Esszimmer' => 'rowspan="2"', 'Küche' => 'rowspan="2"', 'Bad' => 'rowspan="2"', 'Wohnzimmer' => 'rowspan="2"', 'Schlafzimmer' => 'rowspan="2"', 'OG.ez.RA.Player' => 'rowspan="2"', 'OG.ku.RA.Player' => 'rowspan="2"', 'OG.ba.RA.Player' => 'rowspan="2"', 'DG.sz.RA.Player' => 'rowspan="2"', 'DG.wz.RA.Player' => 'rowspan="2"' }
attr XX.xx.RG.Player.Control valueIcon { 'Zufall' => 'unknown.svg@lightgray', 'iconBWD.none' => 'rc_PREVIOUS@DarkSlateGray', 'iconFWD.none' => 'rc_NEXT@DarkSlateGray', 'iconBWD.BWD' => 'rc_PREVIOUS@lightgray', 'iconFWD.FWD' => 'rc_NEXT@lightgray', 'iconStop' => 'rc_STOP@lightgray', 'iconPlay.PLAY' => 'rc_PLAY@lightgray', 'iconPlay.PAUSE' => 'rc_PAUSE@lightgray', 'iconPlay.none' => 'rc_PLAY@DarkSlateGray', 'Close' => 'control_x@lightgray', 'VolumeUp' => 'rc_VOLPLUS@lightgray', 'VolumeDown' => 'rc_VOLMINUS@lightgray', 'VolumeMute' => 'rc_MUTE@lightgray', 'Details' => 'audio_sound@lightgray', 'shuffle.off' => 'audio_shuffle@DarkSlateGray', 'shuffle.song' => 'audio_shuffle@lightgray', 'repeat.off' => 'audio_repeat@DarkSlateGray', 'repeat.one' => 'audio_repeat_one@lightgray', 'repeat.all' => 'audio_repeat@lightgray', 'OG.ez.RA.Player.synced' => 'scene_dinner@lightgray', 'OG.ez.RA.Player.not synced' => 'scene_dinner@DarkSlateGray', 'OG.ku.RA.Player.synced' => 'scene_cooking@lightgray', 'OG.ku.RA.Player.not synced' => 'scene_cooking@DarkSlateGray', 'OG.ba.RA.Player.synced' => 'scene_bathroom@lightgray', 'OG.ba.RA.Player.not synced' => 'scene_bathroom@DarkSlateGray', 'DG.sz.RA.Player.synced' => 'scene_sleeping_alternat@lightgray', 'DG.sz.RA.Player.not synced' => 'scene_sleeping_alternat@DarkSlateGray', 'DG.wz.RA.Player.synced' => 'scene_livingroom@lightgray', 'DG.wz.RA.Player.not synced' => 'scene_livingroom@DarkSlateGray' }


Ronny

kvo1

das hat mir dann doch keine Ruhe gelassen  ;D
und ich muß sagen....einfach Genial ! nur das Cover will noch nicht .....
scheint wohl an meine IP´s und der fehlenden cover_200x200.png  zu liegen..


klaus
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

ChrisD

Hallo,

Ich habe eine neue Version des Player-Modules erstellt.

Änderungen:
- Timeouts für TTS hinzugefügt
- mit TTS warten bis Player eingeschaltet ist

@Rince, @Dieda: könnt ihr testen ob damit die TTS-Probleme behoben sind ?

- mp3s im TTS dürfen Leerzeichen enthalten
- set-Befehle ignorieren wenn Player nicht vorhanden ist
- 'playlist add' und 'playlist insert' hinzugefügt
- 'playlist genre:xxx album:yyy artist:zzz' reaktiviert
- bei sync nach FHEM-Gerätenamen suchen wenn Playername nicht gefunden wird (für diejenigen die ihre Player umbenannt haben)
    Beispiel: Namen im LMS: playerA und playerB, Namen in FHEM: SB.pl.A und SB.pl.B, bisher musste zum Syncen
set SB.pl.A sync playerBverwendet werden, jetzt ist zusätzlich auch
set SB.pl.A sync SB.pl.Bmöglich

- asSlave bei sync hinzugefügt, damit kann die Reihenfolge (wer ist Master und wer ist Slave) umgedreht werden
set SB.pl.A sync SB.pl.Bfügt SB.pl.B zur Gruppe von SB.pl.A hinzu (wie bisher)
set SB.pl.A sync SB.pl.B asSlavefügt SB.pl.A zur Gruppe von SB.pl.B hinzu

- Dokumentation ergänzt

Zum Aktualisieren kann wie üblich
update all https://raw.githubusercontent.com/ChrisD70/FHEM-Modules/master/autoupdate/sb/controls_squeezebox.txt
benutzt werden.

Noch ein Hinweis zum unsync: Es ist nicht nötig nach dem unsync einen Playernamen mit anzugeben,
set SB.pl.B unsync SB.pl.Aist das Gleiche wie
set SB.pl.B unsync

Der Player SB.pl.B wird in beiden Fällen aus der Gruppe entfernt und gestoppt.

@tomster:
ZitatHat jemand auch eine Erklärung für das Stoppen des Masters beim sync?

Ich denke nicht dass der Master gestoppt wurde. Wenn ich deinen Versuch richtig verstanden habe lief der Player 'kueche' und du wolltest den Player 'terrasse' der gestoppt oder aus war dazusyncen. Durch den Befehl
set terrasse.SB_PLAYER sync kuechewurde aber terrasse zum Master und kueche hat dessen Zustand (gestoppt) übernommen.

Grüße,

ChrisD