Squeezebox Modul - erste Version

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

Vorheriges Thema - Nächstes Thema

tomster

Vielen Dank für die Aufklärung!

Ich hab zwar eh nur noch ein Auge offen, werd das aber morgen einmal abchecken.
Was mir nur bei der (vermeintlich) korrekten Syntax auffällt:
Dann würde aber wohl auch beim befehl "unsync" ALLES ge-unsynct werden und nicht nur 1 Player, oder?

Wäre die Logik andersrum nicht sinnvoller?

joginet

ZitatWas mir nur bei der (vermeintlich) korrekten Syntax auffällt:
Dann würde aber wohl auch beim befehl "unsync" ALLES ge-unsynct werden und nicht nur 1 Player, oder?

Wäre die Logik andersrum nicht sinnvoller?

Moin Tomster,

beim unsync-Befehl ist es wieder andersrum:

set terrasse.SB_Player unsync kueche

trennt den Player "terrasse.SB_Player" vom Master "kueche"

Das kannst Du für jeden Player machen, der mit der Küche gesynct ist.

Gruß, Jochen
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

tomster

Ahhh, ok. Vielen Dank!
Das klingt zwar plausibel, macht's mir aber nicht unbedingt einfacher, die sync/unsync-Geschichte in's Tablet UI zu integrieren. Werd da wohl noch ein bissl Hirnschmalz drauf verwenden müssen...

Hat jemand auch eine Erklärung für das Stoppen des Masters beim sync?

gravidi

Moin tomster,

vielleicht hilft dir meine Lösung ansatzweise.

Ich nutze Smartvisu und habe mir mein Dashbaord als Multiroomaudiozentrale gebaut.

Neben Cover, Infos zum Track, Album, Künstler, Buttons für die Wiedergabe und Buttons für Playlisten habe ich jeweils einen Button pro Etage um diese als Player "heranzuholen" und zu syncen.

Normalerweise kannst du jeden Player mit jedem Player syncen. Das macht es schwierig auf der GUI zu händeln und die Mitbewohner kommen leicht durcheinander.

Bei mir hat sich herausgestellt das es einfacher ist einen zentralen Player zu haben wo alle Infos herkommen und die jeweiligen Playlisten ausgewählt werden. Diesen Player habe ich einfach als "Master" auf meinen Pi installiert und die restlichen Player syncen einfach alle mit diesem. Auf dem Pi läuft auch FHEM daher ist der eh immer an. Vorteil dabei ist natürlich auch das die GUI dann extrem einfacher zu entwickeln ist.

Grüße

Grav
FHEM: 5.6 RPI2 / CUL / BLUETOOTH / HMCFGLAN
ESXi HomeServer
CISCO WAP371 AC Cluster / 3 APs
CISCO ASA5505 SEC
Zodac HTPC & 2x RPI HTPC / 2x Trendnet HD IPCam PoE

joginet

Moin zusammen,
ich hab's in meiner "GUI" (Floorplan) so gelöst:

http://forum.fhem.de/index.php/topic,33088.msg288020.html#msg288020


Ist evt. ein bischen aufwändig mit den vielen dummys - aber so kann jeder Player auf Tastendruck mit jedem gesynct werden.
Hat sich in der Praxis bisher bestens bewährt...

Gruß, Jochen

Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

RoBra81

Zitat von: gravidi am 29 Mai 2015, 15:09:18
Normalerweise kannst du jeden Player mit jedem Player syncen. Das macht es schwierig auf der GUI zu händeln und die Mitbewohner kommen leicht durcheinander.

Ich hatte auch mal versucht, mir etwas einfach bedienbares zu basteln, bin damals aber gescheitert bzw. hatte den Versuch erstmal beiseite gelegt. Durch den Beitrag

Zitat von: joginet am 29 Mai 2015, 16:39:08
ich hab's in meiner "GUI" (Floorplan) so gelöst:

http://forum.fhem.de/index.php/topic,33088.msg288020.html#msg288020


auf eine Idee gebrachte, habe ich mir eine meiner Meinung nach praktikable Lösung ohne Dummys gebaut, die ich hier kurz vorstellen möchte:

Meine Ausgangssituation:
Ich habe fünf SqueezePlayer in meinem FHEM: OG.ez.RA.Player, OG.ku.RA.Player, OG.ba.RA.Player, DG.sz.RA.Player, DG.wz.RA.Player

Vorbereitung:
Zunächst benötige ich in jedem SqueezePlayer fünf neue userReadings, die den SyncStatus mit den anderen Player enthalten (eigentlich jeweils nur vier, da der SyncStatus mit sich selbst nicht benötigt wird, aber so ist der Befehl einfacher):

attr .G\...\.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'}}


Die "Schaltzentrale":
Für die Bedienung habe ich mir nun zunächst eine ReadingsGroup für alle Player gebaut - in Zukunft soll die Bedienung auf in jedem Raum möglich sein -> da wird dann jeweils nur eine Zeile der ReadingsGroup verwendet:

define Test.RG readingsGroup <>,<OG.ez.RA.Player>,<OG.ku.RA.Player>,<OG.ba.RA.Player>,<DG.sz.RA.Player>,<DG.wz.RA.Player>\
OG.ez.RA.Player:<OG.ez.RA.Player>,<>,!OG.ku.RA.Player,!OG.ba.RA.Player,!DG.sz.RA.Player,!DG.wz.RA.Player\
OG.ku.RA.Player:<OG.ku.RA.Player>,!OG.ez.RA.Player,<>,!OG.ba.RA.Player,!DG.sz.RA.Player,!DG.wz.RA.Player\
OG.ba.RA.Player:<OG.ba.RA.Player>,!OG.ez.RA.Player,!OG.ku.RA.Player,<>,!DG.sz.RA.Player,!DG.wz.RA.Player\
DG.sz.RA.Player:<DG.sz.RA.Player>,!OG.ez.RA.Player,!OG.ku.RA.Player,!OG.ba.RA.Player,<>,!DG.wz.RA.Player\
DG.wz.RA.Player:<DG.wz.RA.Player>,!OG.ez.RA.Player,!OG.ku.RA.Player,!OG.ba.RA.Player,!DG.sz.RA.Player,<>\

attr Test.RG commands { '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' }
attr Test.RG nonames 1
attr Test.RG notime 1
attr Test.RG valueIcon { 'OG.ez.RA.Player.synced' => 'it_network', 'OG.ez.RA.Player.not synced' => 'it_television', 'OG.ku.RA.Player.synced' => 'it_network', 'OG.ku.RA.Player.not synced' => 'it_television', 'OG.ba.RA.Player.synced' => 'it_network', 'OG.ba.RA.Player.not synced' => 'it_television', 'DG.sz.RA.Player.synced' => 'it_network', 'DG.sz.RA.Player.not synced' => 'it_television', 'DG.wz.RA.Player.synced' => 'it_network', 'DG.wz.RA.Player.not synced' => 'it_television' }


Der Vorteil gegenüber der Dummy-Lösung, davon abgesehen, dass man nicht so viele Dummys braucht, ist, dass der Status per Longpoll aktualisiert wird. Das heißt, wenn ich einen Player in einem Raum synce, wird das im anderen auch angezeigt...

Anbei noch ein Screenshot, wie es aktuell aussieht.

Ronny

kvo1

#741
Hallo Ronny,

sieht gut aus, danke das Du das hier vorstellst  ;) , muss ich mal testen ... bin ohnehin noch mitten in diesem Thema !

Der Vorteil der anderen Lösung (von Jochen) ist, daß man die Player auch noch steuern kann (Lautstärke , Playlists etc) !

Wie hast du das gelöst ?

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

RoBra81

Zitat von: kvo1 am 02 Juni 2015, 08:50:23
Der Vorteil der anderen Lösung (von Jochen) ist, daß man die Player auch noch steuern kann (Lautstärke , Playlists etc) !

Wie hast du das gelöst ?

Da es sich um eine ReadingsGroup handelt, kann diese nahezu beliebig erweitert werden. Ich habe mit zum Beispiel eine Readingsgroup für jeden Plaver gebaut und diese im jeweiligen Raum plaziert - diese habe ich nun um Buttons zur Synchronisation erweitert -> siehe Anhang...

Ronny

kvo1

Phuuuu wie schick ist das denn  :D

ZitatIch habe mit zum Beispiel eine Readingsgroup für jeden Plaver gebaut und diese im jeweiligen Raum plaziert - diese habe ich nun um Buttons zur Synchronisation erweitert -> siehe Anhang...

Würdest Du eine eine Readingsgroup  beispielhaft hier posten...... das steigert den WAF ganz enorm  ;) ;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

joginet

Da schliesse ich mich an - echt cool - Respekt !
Besonders der Volume-Slider gefällt mir - ist das die Tablet-UI ?

Gruß, Jochen
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

kvo1

Irgendwie will das mit dem Anlegen der Userreadings nicht klappen.

attr .G\...\.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'}}


wie würden diese aussehen ?

kvo1
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


kvo1

Zitat von: RoBra81 am 02 Juni 2015, 20:50:04
Wie heißen denn deine Player?

squeeze_pi2
squeeze_pi3
squeeze_Galaxy
squeeze_Denver
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

Dann musst du die Namen aus dem Statement entsprechend anpassen: aus .G\... usw. müsste zum Beispiel squeeze_.* werden. Und dann müssten meine Namen (z.B. OG.ku.RA.Player) noch durch deine entsprechenden Namen ersetzt werden...

kvo1

#749
so das passt schon mal .... (hoffe ich)

attr squeeze_.* userReadings
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'}}


jetzt habe ich noch ein Problem mit der RG ... hier mit den commands und der Anzeige der ICONS

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