SB-Player: Zeigt her eure Oberflächen!

Begonnen von FHEm2005, 05 Dezember 2015, 13:04:03

Vorheriges Thema - Nächstes Thema

tomster

#15
Zitat von: FHEm2005 am 16 Dezember 2015, 21:06:54
Iin Deiner FTUI-Konfiguration für die Synchronisation habe ich den Befehl "sync Kueche.SB_PLAYER asSlave" gefunden.
Das kapiere ich nicht so wirklich. Du rufst vom Wohnzimmer.SB_PLAYER(Slave) den Kueche.SB_PLAYER als Master auf. Den Zusatz asSlave habe ich nirgends in der Beschreibung gefunden. Der Rufende ruft laut CLI-Doku doch immer als Slave den gerufenen Player (Master) auf. Oder habe ich da etwas falsch verstanden?
Das dachte ich bis gestern auch. Aber bei meiner Recherche heute hab ich das hier http://forum.fhem.de/index.php/topic,17667.msg301116/topicseen.html#msg301116 gefunden. Da die Logik in meinem Code damit besser klarkommt, hab ich diesen Weg gewählt.

Zitat
Ich bin nicht unbedingt in Perl zuhause. Versuche zwar geschriebene Codes zu verstehen, scheitere leider schon mal dabei. Ich verstehe bei den UserReadings die if-Abfrage if(index(ReadingsVal($name,'synced',''),'Wohnzimmer')!=-1) nicht so wirklich.

Du fragt den Index des rufenden Players ab. Es gibt doch gar kein Reading index. Ich weiß, dass auf der CLI-Schnittstelle mit Indizes gearbeitet wird: <MAC-Adresse> sync 1 bzw <MAC.Adreese> sync - . Aber im Modul selber wird das wohl umgesetzt.
Diesen Code-Teil hab ich entfernt, weil ich die Logik ein bisschen umgestellt habe. Ich hatte zunächst entsprechende Readings hinzugefügt, damit an zentraler Stelle gesammelt wird, welcher Player gesynct ist und welcher nicht. Braucht man nicht. Und ja, auch ich hab es nicht verstanden, aber diese Lösung ist, glaub ich, auch im SB-Modul-Thread enstanden. Draufgekommen bin ich aber erst, weil wohl seit irgendeiner Modul-Version idismac standardmäßig auf "true" gesetzt wird. Bei der Erstellung meines Scripts hab ich noch mit den Playernamen gearbeitet. Da diese nicht gleich mit den Namensdefinitionen in FHEM waren war's damals ein ganz schöne Hirnschmalzvergeudung.

So wie es nun oben steht, sollte der Sync einwandfrei funktionieren. Geht zumindest bei mir ;-)

FHEm2005

#16
Ich habe meine Oberfläche um die Synchronisation mit anderen Playern erweitert. Da eine umfangreiche Dastellung keinen Platz mehr auf der PLayeroberfläche hat, habe ich die Lösung eines Pop-Up-Fensters gewählt. Hier können alle möglichen Synchronisationen vorgenommen werden.

Ein wichtiger grundsätzlicher Hinweis zum Synchronisieren anhand eines Beispiels:

Ich habe den Player SBT.Wohnzimmer und einen Player SB3.Buero. Wenn ich den Befehl
set SBT.Wohnzimmer sync SB3.Buero
absende wird die Synchronisation vom SBT.Wohnzimmer an SB3.Büro übergeben; d.h.ein eingestellter Sender der SBT wird an die SB3 übergeben und dort ebenfalls abgespielt.

Wenn ich den Befehl
set SBT.Wohnzimmer sync SB3.Buero asSlave
absende wird die Synchronisation vom SBT.Wohnzimmer von der SB3.Büro übernommen; d.h.ein eingestellter Sender der SB3 wird von der SBt übernommen und dort ebenfalls abgespielt. Ich habe mich für die Variante 'übernehmen' entschieden, deshalb auch im Kopf des pop-up-Fensters: "SBT.Wohnzimmer übernimmt von:"

Oben rechts in der Player-Oberfläche wird angezeigt, ob mit irgendeiner anderen SB synchronisiert wird. Ein "klick" auf das Symbol öffnet ein kleines Fenster in dem die Zustände dargestellt und verändert werden können.

Die FHEM Definition
zusätzliche UserReadings speichern den Zustand der Synchronisation für jede SB gesondert ab, die von der FTUI-Oberfläche abgefragt werden. Zusätzlich habe ich noch das UserReadings synced_FTUI angelegt. Dort werden die ersten beiden Buchstaben des Readings 'synced' eingelesen. Da alle Player bei mir mit SB... beginnen, kann in snced_FTUI entweder 'SB' oder 'no' erscheinen. Dies benutzen wir dann für die Darstellung der Synchronisation auf der Oberfläche.

Definition geändert, siehe Fußnote 'Edit am 22.04.2016'!
attr sbt.Wohnzimmer userReadings
sb_name {"SBT.Wohnzimmer"},FAVSTR_FTUI {my $t=InternalVal($name,'FAVSTR','');$t=~s/,/:/g;return($t)},
synced_FTUI {my $s=(ReadingsVal($name,'synced',''));$s=substr($s,0,2); return($s)},
SBT.Buero {if(index(ReadingsVal($name,'synced',''),'SBT.Buero')!=-1){return 'synced'} else {return('not synced')}},
SB3.Buero {if(index(ReadingsVal($name,'synced',''),'SB3.Buero')!=-1){return 'synced'} else {return('not synced')}},
SB3.Kueche {if(index(ReadingsVal($name,'synced',''),'SB3.Kueche')!=-1){return 'synced'} else {return('not synced')}},
SB3.Bad {if(index(ReadingsVal($name,'synced',''),'SB3.Bad')!=-1){return 'synced'} else {return('not synced')}}


Hier nun der FTUI-Teil:

<!-- Synchronisatio mit anderen Playern  -->
<div data-type="popup"
data-height="110px"
data-width="350px"
style="top: -36px !important;
left: 78px !important;">
<div data-type="symbol"
data-device ="SBT.Wohnzimmer"
data-get="synced_FTUI"
data-get-on='["SB","no"]'
data-icons='["fa-link","fa-unlink"]'
data-background-icon="fa-square-o"
data-on-background-color="rgba(147, 147, 147, 0)"
data-off-background-color="rgba(147, 147, 147, 0)"
data-on-color="rgba(208,208,208,.8)"
data-off-color="rgba(208,208,208,.8)"
style= "font-size: 16px;
top: -36px;
left: 79px;
">
</div>
<div class="dialog"
style="background-image: url('images/squeezebox/wallpaper/fab4_sonata.png');
border: 1px solid;
font-size:12px;
text-shadow: black 1px 1px 0px;">
<header style="background-color:rgba(147, 147, 147, 0);color:white;" >SBT.Wohnzimmer &uuml;bernimmt von:</header>

<div class="left">
<div data-type="label"
class="cell">SBT.Buero
</div>
<div data-type="switch"
data-device="SBT.Wohnzimmer"
data-get="SBT.Buero"
data-get-on='["synced","not synced"]'
data-icons='["fa-link","fa-unlink"]'
data-set-on="sync SBT.Buero asSlave"
data-set-off="unsync"
data-background-icon="fa-square-o"
data-on-background-color="rgba(147, 147, 147, 0)"
data-off-background-color="rgba(147, 147, 147, 0)"
data-on-color="rgba(208,208,208,.8)"
data-off-color="rgba(208,208,208,.8)"
class="cell small narrow"
style="text-shadow:none;">
</div>
</div>

<div class="cell left inline">
<div data-type="label"
class="cell">SB3.Buero
</div>
<div data-type="switch"
data-device="SBT.Wohnzimmer"
data-get="SB3.Buero"
data-get-on='["synced","not synced"]'
data-icons='["fa-link","fa-unlink"]'
data-set-on="sync SB3.Buero asSlave"
data-set-off="unsync"
data-background-icon="fa-square-o"
data-on-background-color="rgba(147, 147, 147, 0)"
data-off-background-color="rgba(147, 147, 147, 0)"
data-on-color="rgba(208,208,208,.8)"
data-off-color="rgba(208,208,208,.8)"
class="cell small narrow"
style="text-shadow:none;">
</div>
</div>


<div class="cell left inline">
<div data-type="label"
class="cell">SB3.Kueche
</div>
<div data-type="switch"
data-device="SBT.Wohnzimmer"
data-get="SB3.Kueche"
data-get-on='["synced","not synced"]'
data-icons='["fa-link","fa-unlink"]'
data-set-on="sync SB3.Kueche asSlave"
data-set-off="unsync"
data-background-icon="fa-square-o"
data-on-background-color="rgba(147, 147, 147, 0)"
data-off-background-color="rgba(147, 147, 147, 0)"
data-on-color="rgba(208,208,208,.8)"
data-off-color="rgba(208,208,208,.8)"
class="cell small narrow"
style="text-shadow:none;">
</div>
</div>

<div class="cell left inline">
<div data-type="label"
class="cell">SB3.Bad
</div>
<div data-type="switch"
data-device="SBT.Wohnzimmer"
data-get="SB3.Bad"
data-get-on='["synced","not synced"]'
data-icons='["fa-link","fa-unlink"]'
data-set-on="sync SB3.Bad asSlave"
data-set-off="unsync"
data-background-icon="fa-square-o"
data-on-background-color="rgba(147, 147, 147, 0)"
data-off-background-color="rgba(147, 147, 147, 0)"
data-on-color="rgba(208,208,208,.8)"
data-off-color="rgba(208,208,208,.8)"
class="cell small narrow"
style="text-shadow:none;">
</div>
</div>
</div>
</div>


Viele Grüße
Eberhard

Edit am 22.04.2016: Die o.a. FHEM-userReadings mussten geändert werden, weil die Darstellung der Synchronisation nicht richtig fünktionierte. Das ":synced" hinter den UserReadings-Namen musste weg!


Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

tomster

Sehr schöne Lösung, Eberhard. Gefällt mir ausgesprochen gut!

kvo1

Hallo Eberhard,

Sehr cool, danke das Du das hier bereit stellst !

@tomster , danke auch an dich  ;)

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

kvo1

Hallo Zusammen,

der erste Versuch (ohne sync) läuft soweit, nur das SB-Fenster ist kleiner als der eigentliche Hintergrund !

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

FHEm2005

#20
Hallo kvo1,
dann mach' doch den Hintergrund kleiner. Am SB-Fenster zu "spielen" bringt gar nichts. Dabei gehe ich davon aus, dass der Hintergrund das <li>-Element ist. Die SB-Oberfläche hat eine fixe Größe von 320 x 172 Pixel. Da wird immer ein Hintergrund des Containers sichtbar bleiben. Ist bei mir auch.

Du kannst zwar die Größe mit "transform:scale(1.5)" an dieser Stelle anpassen:
<!-- Rahmen mit Hintergundbild -->
<div class="left";
style= " transform: scale(1.5);
                                   width:320px;
                          ..... etc.


Dann verschieben sich aber einige Elemente, deren Position angepasst werden müsste und das Sychronosierungsfenster erscheint nicht mehr. Das wäre noch zusätzliche Arbeit. Ich vermute es liegt irgendwo im Hintergrund. Das müsste dann mit z-index wieder nach vorne geholt werden.

Gruß
Eberhard

Edit: Ich hoffte die transform-Zeile würde blau geschrieben - Fehlanzeige.
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

masterpete23

sorry 4 OT -  aber hier erwische ich wohl die Experten.

Wo bekomm ich derzeit passende Hardware? günstig?
greetz

FHEm2005

Hallo masterpete23,

Squeezebox-hardware gibt es neu auf dem Markt leider höchst selten, wenn gar nicht mehr. Deshalb greifen viel auf sog. headless-Geräte zurück. Eine SB-Software auf Raspi ist soetwas.
Glücklicherweise gibt es immer noch in der Bucht viele Geräte zu erwerben. Meine SB3 (Squeezbox Classic) habe ich auch daher.
Gruß
Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

kvo1

Hallo Eberhard,

Danke ! werde es testen. 


@masterpete23 schau mal hier , wenn du nix selber bauen willst
http://shop.max2play.com/

Ansonsten hat Eberhard Recht !

Gruß 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


kvo1

Hallo Eberhard,

ZitatHallo kvo1,
dann mach' doch den Hintergrund kleiner. Am SB-Fenster zu "spielen" bringt gar nichts. Dabei gehe ich davon aus, dass der Hintergrund das <li>-Element ist. Die SB-Oberfläche hat eine fixe Größe von 320 x 172 Pixel. Da wird immer ein Hintergrund des Containers sichtbar bleiben. Ist bei mir auch.

Du kannst zwar die Größe mit "transform:scale(1.5)" an dieser Stelle anpassen:
Code: [Auswählen]

<!-- Rahmen mit Hintergundbild -->
      <div class="left";
         style= " transform: scale(1.5);
                                   width:320px;
                          ..... etc.

Wie bekomme ich denn den Hintergrund Container kleiner als auf die Größe der  SB-Oberfläche ?

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

FHEm2005

Hallo Klaus,

die SB-Oberfläche ist in den Container eingebunden. Machst Du den Container kleiner als die SB-UI wird die UI über den Rand hinausragen - und das sieht richtig sch...e aus. Das Einzige was Du machen kannst, ist die Containergroße möglichst nah an die SB-UI anzupassen. Folgende Größenordnung ist optimal:

Zitat<li data-row="<Deine Reihe>" data-col="<Deine Spalte>" data-sizex="6" data-sizey="4">

Eine weitere Zentrierung ist leider nicht möglich, da Elemente enthalten sind, deren Position sich nicht an dem äußeren Rahmen der SB-UI orientieren. Da muss ich dann wohl irgendwann noch mal ran.

Gruß
Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

FHEm2005

Zitat von: masterpete23 am 18 Dezember 2015, 13:55:10
ist das sowas? http://www.ebay.de/itm/Logitech-Squeezebox-Classic-Mediaplayer-/151914852909?hash=item235ed4b22d:g:PDUAAOSwNphWbaaj

Hallo masterpete,
was Du uns gezeigt hast, ist die SB3 oder auch SB-Classic. Das vorletzte Gerät ohne eigenen Verstärker. Danach kam nur noch die SB-Touch; die hat aber eine grafische Oberfläche. Der SB3 wird nachgesagt, dass sie den besten AD-Wandler aller SB-Geräte habe. SB-Classic und SB-Touch haben je einen Glasfaser-Ausgang. Du siehst: Das sind hochwertige Geräte. Wenn Du die Dinger für unter 80 Euronen bekommst und die sind i.O. machst Du IMHO nix falsch.

Da Multiroom-Lösungen von SONOS, Teufel und Bose (alle drei sind eingetragene Markennamen und gehören ihren Eigentümern) in den Markt gedrückt werden, gehe ich davon aus, dass für SB-Equipment die Preise auch nachgeben werden.

Gruß Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

kvo1

Hallo Eberhard,
Danke

Zitat von: FHEm2005 am 18 Dezember 2015, 15:28:11
Hallo Klaus,

die SB-Oberfläche ist in den Container eingebunden. Machst Du den Container kleiner als die SB-UI wird die UI über den Rand hinausragen - und das sieht richtig sch...e aus. Das Einzige was Du machen kannst, ist die Containergroße möglichst nah an die SB-UI anzupassen. Folgende Größenordnung ist optimal:

Eine weitere Zentrierung ist leider nicht möglich, da Elemente enthalten sind, deren Position sich nicht an dem äußeren Rahmen der SB-UI orientieren. Da muss ich dann wohl irgendwann noch mal ran.

Gruß
Eberhard

derzeit (noch Test) habe ich
<li data-row="1" data-col="5" data-sizex="4" data-sizey="3">

PS:
ich muss mich dringend mit HTML beschäftigen ... kann ja kein Hexenwerk sein !
Habe erst einmal 2 player zum Test, jetzt mach ich mich mal an´s sync :-)

Danke.
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

Hyperbit

wie bekomme ich es eigentlich hin das ich über das Dropdown feld in dieser tollen oberfläche einen radiosender wählen kann,
was muss ich in FHEM oder dem Squeeze Server dazu einstellen?