Multiroom Audio

Begonnen von TWART016, 21 August 2015, 01:32:51

Vorheriges Thema - Nächstes Thema

TWART016

Hallo,

ich möchte ein Multiroom Audiosystem einrichten. Bei der Recherche bin ich auf folgende Möglichkeiten gestoßen:
   - Apple: Airport, ...
   - Sonos
   - Raspberry Pi mit Logitech Media Server (Squeezbox)
Gibt es sonst noch andere Systeme? Das Budget ist leider etwas begrenzt.

Ich habe folgende Anforderung:
   - Räume:
      ○ 1 Wohnzimmer mit AV Receiver und 5.1
      ○ 1 Zimmer mit 2/5/7 guten Lautsprechern
      ○ 2-3 weitere Zimmer mit 1-2 Lautsprechern
   - Zentrale Musikverwaltung
   - Steuerung per App und FHEM
   - Synchrones Abspielen in mehreren oder allen Räumen
   - Airplay fähig
   - Zukunftssicher

Tendenz geht derzeit Logitech Media Server. Wie kann ich mir den Squeezebox-Server vorstellen?
Läuft die Software auf jedem Raspberry Pi oder auf einem der Server und auf den anderen die Slaves? Wie kann ich mir das Multiroom vorstellen? Kann man "Gruppen" von einem oder mehreren Raspberry Pi's erstellen?

Ich gehe mal davon aus, dass ein beliebiger NAS / PC als Musikquelle verwendet werden kann.

Werden die Raspberry Pi's (Squeezebox-Server) irgendwie miteinander verbunden?

Kann auf den Raspberry Pi's parallel noch eine andere Anwendung laufen?

Wie können die Lautsprecher angeschlossen werden?? Klinke? Lautsprecherkabel? HDMI zu AV-Receiver? ...?

Derzeit habe ich noch einen Raspberry Pi B+ und einige normale Lautsprecher, die ich gerne einbinden würde. Weiter Raspberry Pi's sind bereits in Planung.


Gruß
TWART016

joginet

Moin !
Eine kurze Antwort - die Arbeit ruft...  ;D

Zitatoder auf einem der Server und auf den anderen die Slaves?
Genau.

ZitatWie kann ich mir das Multiroom vorstellen? Kann man "Gruppen" von einem oder mehreren Raspberry Pi's erstellen?
Die Raspis müssen sich im selben LAN befinden und werden vom Squeezebox-Server automatisch erkannt.
Man kann dann festlegen, welche "Clients" eine Wiedergabe starten und welche sich dazuschalten ("syncen") sollen.

Zitatch gehe mal davon aus, dass ein beliebiger NAS / PC als Musikquelle verwendet werden kann.
Ja, die Netzwerkfreigabe muß auf dem Pi (oder PC), auf dem der Squeezebox-Server läuft gemounted werden.

ZitatWerden die Raspberry Pi's (Squeezebox-Server) irgendwie miteinander verbunden?
Ja, LAN/WLAN

ZitatKann auf den Raspberry Pi's parallel noch eine andere Anwendung laufen?
Theoretisch ja. Auf dem piCorePlayer, den ich als "Client" verwende wird aber nur ein "minimal-Linux" gebootet, das nur den Player startet.

ZitatWie können die Lautsprecher angeschlossen werden?? Klinke? Lautsprecherkabel? HDMI zu AV-Receiver? ...?
Klinke. Besser ist der Sound mit einem HDMI-Audioextractor oder einem Hifiberry-Aufsatz.

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

ZitatZitat

    Kann auf den Raspberry Pi's parallel noch eine andere Anwendung laufen?

Theoretisch ja. Auf dem piCorePlayer, den ich als "Client" verwende wird aber nur ein "minimal-Linux" gebootet, das nur den Player startet.

Du kannst aber den "Squeezelite player" auch per Hand installieren, viel mehr ist im piCorePlayer-Image m.E.
auch nicht drin !
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

gravidi

#3
Hi,

als kleiner Tip am Rande. Wenn du dich für den Squeezebox Server entscheidest kannst du nicht nur picore Squeezeplayer oder Max2Play Squeezeplayer oder selbstinstallierte squeezeplayer Software nutzen, sondern auch Kodi durch ein Addon (XSqueeze) zum Squeezeplayer verwandeln. Alternative gibt es auch für Apple Geräte die App IPeng die aus deinen Apple Geräten einen Squeezeplayer erstellt. Alle diese Sourcen kannst du dann auch im Squeezeserver verwalten und vollständig nutzen.

Edit:
Vielleicht einfacher zu verstehen. Wie man es machen kann bzw wie mein Setup aussieht:

Squeezebox Server läuft auf meinem Server (geht auch RPI)

Wohnzimmer EG -> HTPC mit Kodi und XSqueeze Plugin hängt am Amp
Küche EG -> Windows Tablet mit Kodi und XSquezze Plugin / Lautsprecher vom Tablet
Flur EG -> Dort hängt mein IPad an der Wand für mein HomeControl Dashboard (Smartvisu) / im Background läuft Ipeng
Gästezimmer OG -> TV mit RPI mit Max2play, Kodi und Squeezeplayer / Lautsprecher per Klinke
Schlafzimmer OG -> TV mit RPI und Kodi und XSqueeze Plugin
Gallerie DG -> RPI mit Squeezeplayer / Lautsprecher mit Klinke
Dachterasse DG -> Tragbarer Player mit Ipeng

All diese Systeme sind im FHEM mit den Modulen SB_Player und SB_Server eingebunden und voll steuerbar. Ich habe mir noch ein kleines Smartvisu Dashboard für Multiroomaudio geschrieben wo auch Gruppen und Playlisten gewähl werden können.

Das ganze ist eine Menge Arbeit wenn man es vernünftig haben möchte. Sonos ist auf jedenfall einfacher in der Gesamtkonfiguration aber eben auch teurer.
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

igami

Zitat von: gravidi am 21 August 2015, 11:42:45
Ich habe mir noch ein kleines Smartvisu Dashboard für Multiroomaudio geschrieben wo auch Gruppen und Playlisten gewähl werden können.

Könntest du dazu noch einen Screenshot posten, oder gibt es den schon irgendwo im Forum?
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

gravidi

#5
Anbei ein Screenshot. Im forum gibt es das noch nicht. Ich wollte eh mal einen meine Steuerung unter "Projekte" zeigen. Bin ich aber noch nicht zu gekommen.

Edit:

Ich mag eine aufgeräumte UI :)
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

TWART016

#6
Hallo,

besten Dank für die Antworten.

Zitat von: joginet am 21 August 2015, 07:16:20
Klinke. Besser ist der Sound mit einem HDMI-Audioextractor oder einem Hifiberry-Aufsatz.
Was machen die Teile genau? Soundkarte als Aufsatz bzw. externe? Was ist der Unterschied zu einer USB Soundkarte?
Was heißt besser? höhere Qualität, lauter, basshaltiger?

Zitat von: gravidi am 21 August 2015, 11:42:45
Alternative gibt es auch für Apple Geräte die App IPeng die aus deinen Apple Geräten einen Squeezeplayer erstellt. Alle diese Sourcen kannst du dann auch im Squeezeserver verwalten und vollständig nutzen.
Das iPad oder das iPhone ist also nur eine Wiedergabequelle bzw. Lautsprecher und somit ein "Slave"? Sowie ich es sehe, gibt es das auch für Android und Windows, also auf allen relevanten Plattformen.

Zitat von: gravidi am 21 August 2015, 11:42:45
Dachterasse DG -> Tragbarer Player mit Ipeng

Was genau? Smartphone, Tablet? Gehen auch tragbare Lautsprecher?

Zitat von: gravidi am 21 August 2015, 11:42:45
Das ganze ist eine Menge Arbeit wenn man es vernünftig haben möchte. Sonos ist auf jedenfall einfacher in der Gesamtkonfiguration aber eben auch teurer.
Das ist auch der Grund, warum ich mir Squeezeplayer ansehe ;)

Zitat von: gravidi am 21 August 2015, 12:43:31
Anbei ein Screenshot. Im forum gibt es das noch nicht. Ich wollte eh mal einen meine Steuerung unter "Projekte" zeigen. Bin ich aber noch nicht zu gekommen.
Eine Einleitung im Forum wäre wirklich nicht schlecht. Könntest du vielleicht den Code zur Verfügung stellen? Mit Smartvisu bin ich auch gerade dabei. Kennt ihr gute Threads dazu, eventuell auch mit Musikplayer-Integration?

Edit: Mit den Playlisten wollte ich das genau so schon immer haben :D


Gruß
TWART016




igami

Zitat von: gravidi am 21 August 2015, 12:43:31
Ich wollte eh mal einen meine Steuerung unter "Projekte" zeigen.

Da freue ich mich schon drauf, bin momentan dabei mich da ein bisschen einzulesen, aber für die Gruppensteuerung hatte ich noch keine gute Idee, wollte mir das von Sonos abkupfer, wenn ich mal wieder bei meinen Eltern bin :D
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

gravidi

Natürlich kann ich das zur Verfügung stellen.

Smartvisu Teil:

multiroomaudio.html (Wird über das Notenschlüssel Icon im Hauptmenu angesprochen)


{% extends "base.html" %}
{% import "multimedia.html" as multimedia %}
{% block sidebar %}

<div class="block">
<div class="ui-bar-c ui-li-divider ui-corner-top">Infos:</div>
<div class="ui-fixed ui-body-a ui-corner-bottom">
            <div class="multiroomaudiofull_h1">K&uuml;nstler:</div>
            <div class="multiroomaudiofull_h2">{{ basic.value('visu_services_multiroomaudio_server.artist', 'service.eg-ar-multiroomaudio.artist') }} </div>
      <div class="multiroomaudiofull_h1">Lied:</div>
      <div class="multiroomaudiofull_h2">{{ basic.value('visu_services_multiroomaudio_server.track', 'service.eg-ar-multiroomaudio.track') }}</div>
      <div class="multiroomaudiofull_h1">Album:</div>
      <div class="multiroomaudiofull_h2">{{ basic.value('visu_services_multiroomaudio_server.album', 'service.eg-ar-multiroomaudio.album') }}</div>
      <div class="multiroomaudiofull_h1">L&auml;uft:</div>
      <div class="multiroomaudiofull_h2">{{ basic.value('visu_services_multiroomaudio_server.duration', 'service.eg-ar-multiroomaudio.duration') }}</div>
      <div class="multiroomaudiofull_h1">Playlist:</div>
      <div class="multiroomaudiofull_h2">{{ basic.value('visu_services_multiroomaudio_server.playlistname', 'service.eg-ar-multiroomaudio.playlistname') }}</div>
      <div class="multiroomaudiofull_h1">Playlist Nr:</div>
      <div class="multiroomaudiofull_h2">{{ basic.value('visu_services_multiroomaudio_server.playlisttrack', 'service.eg-ar-multiroomaudio.playlisttrack') }}</div>
      <div class="multiroomaudiofull_h1">Playlist Count:</div>
      <div class="multiroomaudiofull_h2">{{ basic.value('visu_services_multiroomaudio_server.playlistcount', 'service.eg-ar-multiroomaudio.playlistcount') }}</div>
</div>
  </div>
<div class="block">
<div class="ui-bar-c ui-li-divider ui-corner-top">Etage w&aumlhlen:</div>
<div class="ui-fixed ui-body-a ui-corner-bottom">
      <div class="multiroomaudiofull_h1">Wohnzimmer:</div>
      <div class="multiroomaudiofull_h2">{{ basic.flip('visu_services_multiroomaudio_server_wohnzimmer.sync', 'service.eg-ar-multiroomaudio.syncwohnzimmer', 'On', 'Off' ) }}</div>
      <div class="multiroomaudiofull_h1">Flur:</div>
      <div class="multiroomaudiofull_h2">{{ basic.flip('visu_services_multiroomaudio_server_flur.sync', 'service.eg-ar-multiroomaudio.syncflur', 'On', 'Off' ) }}</div>
      <div class="multiroomaudiofull_h1">Obergeschoss:</div>
      <div class="multiroomaudiofull_h2">{{ basic.flip('visu_services_multiroomaudio_server_obergeschoss.sync', 'service.eg-ar-multiroomaudio.syncgaestezimmer', 'On', 'Off' ) }}</div>
      <div class="multiroomaudiofull_h1">Dachgeschoss:</div>
      <div class="multiroomaudiofull_h2">{{ basic.flip('visu_services_multiroomaudio_server_dachgeschoss.sync', 'service.eg-ar-multiroomaudio.syncgallerie', 'On', 'Off' ) }}</div>
</div>
</div>
{% endblock %}


{% block content %}
<div  class="block">
<div class="set-2" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
<div data-role="collapsible" data-collapsed="false">
<h3>Cover</h3>
                {{ multimedia.image('visu_services_multiroomaudio_server.cover', 'http://deinlmsserver:9000/music/current/cover.jpg?player=deinemacadresse&x=40011', 'fill', '1s') }}
</div>
<div data-role="collapsible">
<h3>Hauseingang Livestream</h3>
                <img id="mjpeg_0" src="http://deineurlzurkamera"  width="100%" height="100%"/>
</div>
</div>
</div>   
 
<div  class="block">
<div class="set-2" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
<div data-role="collapsible" data-collapsed="false">
<h3>Master</h3>
            <div class="multiroomaudiofull_h1">Volume:</div>
            {{ basic.slider('visu_services_multiroomaudio_server.volume','service.eg-ar-multiroomaudio.volume','0','100','1') }}
                  <span data-role="controlgroup" data-type="horizontal">
                  {{ basic.button('visu_services_multiroomaudio_server.play', 'service.eg-ar-multiroomaudio.play', '', icon1~'audio_play.png', icon0~'audio_play.png', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server.pause', 'service.eg-ar-multiroomaudio.pause', '', icon1~'audio_pause.png', icon0~'audio_pause.png', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server.stop', 'service.eg-ar-multiroomaudio.stop', '', icon1~'audio_stop.png', icon0~'audio_stop.png', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server.next', 'service.eg-ar-multiroomaudio.next', '', icon1~'audio_ff.png', icon0~'audio_ff.png', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server.back', 'service.eg-ar-multiroomaudio.back', '', icon1~'audio_rew.png', icon0~'audio_rew.png', 'midi') }}
                  </span>
            <div class="multiroomaudiofull_h1">Playlist w&aumlhlen:</div>
                  <span data-role="controlgroup" data-type="horizontal">
                  {{ basic.button('visu_services_multiroomaudio_server_playlist.andreas', 'service.eg-ar-multiroomaudio.andreasplaylist', 'Andreas','','Andreas', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server_playlist.anke', 'service.eg-ar-multiroomaudio.ankeplaylist', 'Anke','','Anke', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server_playlist.hiphop', 'service.eg-ar-multiroomaudio.hiphopplaylist', 'HipHop','','HipHop', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server_playlist.schlager', 'service.eg-ar-multiroomaudio.schlagerplaylist', 'Schlager','','Schlager', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server_playlist.party', 'service.eg-ar-multiroomaudio.partyplaylist', 'Party','','Party', 'midi') }}
                 
                  </span>
</div>
<div data-role="collapsible">
<h3>Seperat</h3>
            <div class="multiroomaudiofull_h1">Flur:</div>
            {{ basic.slider('visu_services_multiroomaudio_flur.volume','service.eg-flur-multiroomaudio.volume','0','100','1') }}
            <div class="multiroomaudiofull_h1">Wohnzimmer:</div>
            {{ basic.slider('visu_services_multiroomaudio_whz.volume','service.eg-whz-multiroomaudio.volume','0','100','1') }}   
            <div class="multiroomaudiofull_h1">Obergeschoss:</div>
            {{ basic.slider('visu_services_multiroomaudio_obergeschoss.volume','service.og-gz-multiroomaudio.volume','0','100','1') }}
            <div class="multiroomaudiofull_h1">Dachgeschoss:</div>
            {{ basic.slider('visu_services_multiroomaudio_dachgeschoss.volume','service.dg-gal-multiroomaudio.volume','0','100','1') }}
</div>     
</div>
</div>
{% endblock %}


Die benötigten CSS Klassen: (aus der visu.css)


@import url(http://fonts.googleapis.com/css?family=Open+Sans:400,300,700);
.multiroomaudiofull_h1 {
font-family: 'Open Sans', sans-serif;
font-weight: 700;
font-size:22px;
color:#ffffff;
text-align:left;
}

.multiroomaudiofull_h2 {
font-family: 'Open Sans', sans-serif;
font-weight: 300;
font-size:20px;
color:#ffffff;
text-align:left;
}


Fhem Teil:

Ein Sync Beispiel für "Etage wählen", hier Obergeschoss -> Sync bzw unsync

Dummy zum auslösen des DOIF (Ist als On/Off Gad in fronthem)


##Obergeschoss
define sync_obergeschoss_onoff_dummy dummy
attr sync_obergeschoss_onoff_dummy alias SyncObergeschoss
attr sync_obergeschoss_onoff_dummy group Dummys
attr sync_obergeschoss_onoff_dummy icon im_bullhorn
attr sync_obergeschoss_onoff_dummy room Multiaudio
attr sync_obergeschoss_onoff_dummy setList off on
attr sync_obergeschoss_onoff_dummy webCmd on:off


Der DOIF Anteil:


##Logik: sync obergeschoss bei dummy on - bei dummy off unsync
define sync_obergeschoss_onoff_logik DOIF ([sync_obergeschoss_onoff_dummy] eq "on") (set multiroomaudiofirstsyncer sync Obergeschoss) DOELSEIF ([sync_obergeschoss_onoff_dummy] eq "off") (set multiroomaudioobergeschoss unsync)



Wichitg zu wissen:

Ich habe einen Squeezeplayer (multiroomaudiofirstsyncer) auf meinem Server der immer läuft. Smartvisu/fronthem holt sich die Infos nur von diesem ab und alle Räume werden nur mit diesem gesynct.
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

igami

Vielen Dank, werde ich mich dann genauer mit befassen, wenn es bei mir zur Einrichtung kommt.

Kannst du damit auch mehrere Gruppen definieren oder nur eine?
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

kvo1

Hallo Gravidi
das UI ist sehr schon gemacht, sieht echt gut aus!

Das mit dem Max2play und Addon (XSqueeze) für Kodi kannte ich auch noch nicht !

Wenn Du mehr vorstellst, lass es uns bitte wissen!






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

dev0

Zitat von: TWART016 am 21 August 2015, 01:32:51
ich möchte ein Multiroom Audiosystem einrichten.

Wenn du dich für Sonos entscheiden würdest, dann würdest du hier ein passendes FHEM/smartVISU Widget finden:
http://forum.fhem.de/index.php/topic,35598.msg325050.html#msg325050

/Uli

TWART016

Hallo gravidi,

besten Dank. Sobald ich dazu komme, werde ich sicherlich noch einige Fragen haben.

Zitat von: gravidi am 21 August 2015, 15:17:41
Wichitg zu wissen:

Ich habe einen Squeezeplayer (multiroomaudiofirstsyncer) auf meinem Server der immer läuft. Smartvisu/fronthem holt sich die Infos nur von diesem ab und alle Räume werden nur mit diesem gesynct.

Der Squeezeplayer auf den Raspberry Pi Master wird also dringend online benötigt, damit der Sync funktioniert? Wenn das so ist, hab ich kein Problem mit, der soll so oder so immer laufen, da dort auch FHEM installiert ist.


Gruß
TWART016

Sebastian

Zitat von: gravidi am 21 August 2015, 15:17:41
Natürlich kann ich das zur Verfügung stellen.

Smartvisu Teil:

multiroomaudio.html (Wird über das Notenschlüssel Icon im Hauptmenu angesprochen)


{% extends "base.html" %}
{% import "multimedia.html" as multimedia %}
{% block sidebar %}

<div class="block">
<div class="ui-bar-c ui-li-divider ui-corner-top">Infos:</div>
<div class="ui-fixed ui-body-a ui-corner-bottom">
            <div class="multiroomaudiofull_h1">K&uuml;nstler:</div>
            <div class="multiroomaudiofull_h2">{{ basic.value('visu_services_multiroomaudio_server.artist', 'service.eg-ar-multiroomaudio.artist') }} </div>
      <div class="multiroomaudiofull_h1">Lied:</div>
      <div class="multiroomaudiofull_h2">{{ basic.value('visu_services_multiroomaudio_server.track', 'service.eg-ar-multiroomaudio.track') }}</div>
      <div class="multiroomaudiofull_h1">Album:</div>
      <div class="multiroomaudiofull_h2">{{ basic.value('visu_services_multiroomaudio_server.album', 'service.eg-ar-multiroomaudio.album') }}</div>
      <div class="multiroomaudiofull_h1">L&auml;uft:</div>
      <div class="multiroomaudiofull_h2">{{ basic.value('visu_services_multiroomaudio_server.duration', 'service.eg-ar-multiroomaudio.duration') }}</div>
      <div class="multiroomaudiofull_h1">Playlist:</div>
      <div class="multiroomaudiofull_h2">{{ basic.value('visu_services_multiroomaudio_server.playlistname', 'service.eg-ar-multiroomaudio.playlistname') }}</div>
      <div class="multiroomaudiofull_h1">Playlist Nr:</div>
      <div class="multiroomaudiofull_h2">{{ basic.value('visu_services_multiroomaudio_server.playlisttrack', 'service.eg-ar-multiroomaudio.playlisttrack') }}</div>
      <div class="multiroomaudiofull_h1">Playlist Count:</div>
      <div class="multiroomaudiofull_h2">{{ basic.value('visu_services_multiroomaudio_server.playlistcount', 'service.eg-ar-multiroomaudio.playlistcount') }}</div>
</div>
  </div>
<div class="block">
<div class="ui-bar-c ui-li-divider ui-corner-top">Etage w&aumlhlen:</div>
<div class="ui-fixed ui-body-a ui-corner-bottom">
      <div class="multiroomaudiofull_h1">Wohnzimmer:</div>
      <div class="multiroomaudiofull_h2">{{ basic.flip('visu_services_multiroomaudio_server_wohnzimmer.sync', 'service.eg-ar-multiroomaudio.syncwohnzimmer', 'On', 'Off' ) }}</div>
      <div class="multiroomaudiofull_h1">Flur:</div>
      <div class="multiroomaudiofull_h2">{{ basic.flip('visu_services_multiroomaudio_server_flur.sync', 'service.eg-ar-multiroomaudio.syncflur', 'On', 'Off' ) }}</div>
      <div class="multiroomaudiofull_h1">Obergeschoss:</div>
      <div class="multiroomaudiofull_h2">{{ basic.flip('visu_services_multiroomaudio_server_obergeschoss.sync', 'service.eg-ar-multiroomaudio.syncgaestezimmer', 'On', 'Off' ) }}</div>
      <div class="multiroomaudiofull_h1">Dachgeschoss:</div>
      <div class="multiroomaudiofull_h2">{{ basic.flip('visu_services_multiroomaudio_server_dachgeschoss.sync', 'service.eg-ar-multiroomaudio.syncgallerie', 'On', 'Off' ) }}</div>
</div>
</div>
{% endblock %}


{% block content %}
<div  class="block">
<div class="set-2" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
<div data-role="collapsible" data-collapsed="false">
<h3>Cover</h3>
                {{ multimedia.image('visu_services_multiroomaudio_server.cover', 'http://deinlmsserver:9000/music/current/cover.jpg?player=deinemacadresse&x=40011', 'fill', '1s') }}
</div>
<div data-role="collapsible">
<h3>Hauseingang Livestream</h3>
                <img id="mjpeg_0" src="http://deineurlzurkamera"  width="100%" height="100%"/>
</div>
</div>
</div>   
 
<div  class="block">
<div class="set-2" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
<div data-role="collapsible" data-collapsed="false">
<h3>Master</h3>
            <div class="multiroomaudiofull_h1">Volume:</div>
            {{ basic.slider('visu_services_multiroomaudio_server.volume','service.eg-ar-multiroomaudio.volume','0','100','1') }}
                  <span data-role="controlgroup" data-type="horizontal">
                  {{ basic.button('visu_services_multiroomaudio_server.play', 'service.eg-ar-multiroomaudio.play', '', icon1~'audio_play.png', icon0~'audio_play.png', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server.pause', 'service.eg-ar-multiroomaudio.pause', '', icon1~'audio_pause.png', icon0~'audio_pause.png', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server.stop', 'service.eg-ar-multiroomaudio.stop', '', icon1~'audio_stop.png', icon0~'audio_stop.png', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server.next', 'service.eg-ar-multiroomaudio.next', '', icon1~'audio_ff.png', icon0~'audio_ff.png', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server.back', 'service.eg-ar-multiroomaudio.back', '', icon1~'audio_rew.png', icon0~'audio_rew.png', 'midi') }}
                  </span>
            <div class="multiroomaudiofull_h1">Playlist w&aumlhlen:</div>
                  <span data-role="controlgroup" data-type="horizontal">
                  {{ basic.button('visu_services_multiroomaudio_server_playlist.andreas', 'service.eg-ar-multiroomaudio.andreasplaylist', 'Andreas','','Andreas', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server_playlist.anke', 'service.eg-ar-multiroomaudio.ankeplaylist', 'Anke','','Anke', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server_playlist.hiphop', 'service.eg-ar-multiroomaudio.hiphopplaylist', 'HipHop','','HipHop', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server_playlist.schlager', 'service.eg-ar-multiroomaudio.schlagerplaylist', 'Schlager','','Schlager', 'midi') }}
                  {{ basic.button('visu_services_multiroomaudio_server_playlist.party', 'service.eg-ar-multiroomaudio.partyplaylist', 'Party','','Party', 'midi') }}
                 
                  </span>
</div>
<div data-role="collapsible">
<h3>Seperat</h3>
            <div class="multiroomaudiofull_h1">Flur:</div>
            {{ basic.slider('visu_services_multiroomaudio_flur.volume','service.eg-flur-multiroomaudio.volume','0','100','1') }}
            <div class="multiroomaudiofull_h1">Wohnzimmer:</div>
            {{ basic.slider('visu_services_multiroomaudio_whz.volume','service.eg-whz-multiroomaudio.volume','0','100','1') }}   
            <div class="multiroomaudiofull_h1">Obergeschoss:</div>
            {{ basic.slider('visu_services_multiroomaudio_obergeschoss.volume','service.og-gz-multiroomaudio.volume','0','100','1') }}
            <div class="multiroomaudiofull_h1">Dachgeschoss:</div>
            {{ basic.slider('visu_services_multiroomaudio_dachgeschoss.volume','service.dg-gal-multiroomaudio.volume','0','100','1') }}
</div>     
</div>
</div>
{% endblock %}


Die benötigten CSS Klassen: (aus der visu.css)


@import url(http://fonts.googleapis.com/css?family=Open+Sans:400,300,700);
.multiroomaudiofull_h1 {
font-family: 'Open Sans', sans-serif;
font-weight: 700;
font-size:22px;
color:#ffffff;
text-align:left;
}

.multiroomaudiofull_h2 {
font-family: 'Open Sans', sans-serif;
font-weight: 300;
font-size:20px;
color:#ffffff;
text-align:left;
}


Fhem Teil:

Ein Sync Beispiel für "Etage wählen", hier Obergeschoss -> Sync bzw unsync

Dummy zum auslösen des DOIF (Ist als On/Off Gad in fronthem)


##Obergeschoss
define sync_obergeschoss_onoff_dummy dummy
attr sync_obergeschoss_onoff_dummy alias SyncObergeschoss
attr sync_obergeschoss_onoff_dummy group Dummys
attr sync_obergeschoss_onoff_dummy icon im_bullhorn
attr sync_obergeschoss_onoff_dummy room Multiaudio
attr sync_obergeschoss_onoff_dummy setList off on
attr sync_obergeschoss_onoff_dummy webCmd on:off


Der DOIF Anteil:


##Logik: sync obergeschoss bei dummy on - bei dummy off unsync
define sync_obergeschoss_onoff_logik DOIF ([sync_obergeschoss_onoff_dummy] eq "on") (set multiroomaudiofirstsyncer sync Obergeschoss) DOELSEIF ([sync_obergeschoss_onoff_dummy] eq "off") (set multiroomaudioobergeschoss unsync)



Wichitg zu wissen:

Ich habe einen Squeezeplayer (multiroomaudiofirstsyncer) auf meinem Server der immer läuft. Smartvisu/fronthem holt sich die Infos nur von diesem ab und alle Räume werden nur mit diesem gesynct.

Hi,

wie hast du die dazugehörigen GADs definiert ?
Bei mir aktualisiert er die Tracks erst wenn ich die Seite neu lade.
Interessieren würde mich auch wie die GADs für Play, Pause etc definiert sind.
Das funktioniert bei mir nämlich nicht.

Gruß
Gruß
Sebastian

gravidi

#14
Hallo Sebastian,

das wird vermutlich nicht an Smartvisu liegen, sondern an deinen FHEM Einstellungen für den Squeeze Player.

Trag mal bitte beim Player folgendes attr ein.

attr meinplayer donotnotify false

EDIT:

Hatte die Gads überlesen ;)

Beispiel für Play:

mode:item
device: meinplayer
reading: null
converter: Direct
cmd set: play
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