Sonos Steuerung über KNX+IPS

Hallo Zusammen!

Kurz zu mir, ich heiße Mathias, bin 31 Jahre alt und komme aus Passau.

Wir haben Ende 2017 unser gebautes Haus bezogen, in dem ich eine KNX-Installation in Eigenregie geplant und programmiert habe.
Das funktioniert auch alles soweit wie gewünscht.
Für eine Philips-Hue-/Sonos-Integration hatte ich mir das Hager-IoT-Gateway angeschafft. Aus verschiedenen Gründen möchte ich dieses aber nun abstoßen, weshalb ich mich bei der Suche nach Ersatz für IP-Symcon entschieden habe.
Dieses läuft nun seit 2 Monaten auf meinem NAS-Server und erste Verbindungen mit Philips Hue habe ich schon lösen können.

Nun möchte ich Sonos integrieren.
Ich habe dazu schon meine Sonos Lautsprecher über das Modul in IPS eingefügt. Die Verbindung Sonos<->IPS funktioniert auch.
An meinem KNX-Taster habe ich 2 Tasten für Lauter/Leiser. Die Tasten erhöhen/verringern den Wert jeweils um 2 Prozent (So eingestellt im Taster) ausgehend von der aktuellen Lautstärke, welche sie über eine Status-GA erhalten.

In IPS habe ich mir dafür nun 2 Instanzen angelegt:

  1. Instanz mit der GA für die Lautstärke
  2. Instanz mi der GA für die Rückmeldung

Nun komme ich aber nicht weiter:
Wie verbinde ich nun meine KNX-GA´s mit den Variablen in IPS?

Für Binäre Sachen wie Ein/Aus oder Play/Pause habe ich das bisher über „ausgelöste Ereignisse“ geschafft, beim Auslöser bei bestimmten Wert die Variable auf den Bestimmten Wert zu ändern.

Aber wie mache ich das nun bei solchen Dingen?
Es gibt im Sonos-Modulja 2 Variablen für Lautstärke:

SNS_ChangeVolume(integer $InstanceID, integer $increment)

Ändert die Lautstärke einer Sonos Instanz um den mitgelieferten Wert in $increment.
Kann positiv oder negativ sein.
Falls die Lautstärke 100 übersteigen oder 0 unterschreiten würde, wird die Lautstärke auf diese Werte gesetzt.

SNS_SetVolume(integer $InstanceID, integer $volume)

Passt die Lautstärke einer Instanz an. Mögliche Werte liegen zwischen 0 and 100.

Da meine KNX-GA ja immer absolute Werte sendet, wäre die 2. Variable ja für mich richtig, oder?

Doch wie muss ich das nun verbinden?
Bisher musste ich einfach nur zusammen „klicken“, keinen Code schreiben.
Letzteres kann ich nämlich mal sowas von überhaupt nicht. :frowning:

Ich wäre daher sehr dankbar, wenn mir dazu jemand helfen könnte?!?

Vielen Dank!

Grüße Mathias

Hallo!
Ich kann heute mal nachsehen, aber was ich noch im Kopf habe ist ein Tastendruck auf knx Taster, dann variable plus eins rechnenlassen.
Mfg
Maxx

Hallo Maxx!

Danke, das wäre klasse.

Hallo ich mache das so ich hofe dir hilft es weiter:

gruß Stefan

Wahnsinn, ich habs geschafft.
Ich weiß zwar noch nicht genau, was ich da getan habe, aber egal…

Danke für die Screenshots! :smiley:

Hallo Mathias!

Glückwunsch dass du es geschafft hast.

Ich steuer ebenfalls Sonos über einen KNX Tastsensor.

Ich habe die Tasten als „dimmen“ festgelegt und schalte mit kurzem Tastendruck Sonos ein/aus und verstelle mit langem Tastendruck die Lautstärke mit den passenden GA.
Ebenso wähle ich über eine 2-te Taste Playlists bzw Radio ebenfalls mit kurzen und langen Tastendruck (also 4 Favoriten)

Falls du intersesse daran haben solltest kann ich dir gerne weiterhelfen.

Gruß Dani!

Hallo Dani,

Das hört sich auf alle Fälle interessant an!
Ich würde mich freuen, wenn du mir das bisschen zeigen könntest.

Vielen dank!

Grüße Mathias

Hallo Mathias!

Ich bin auch kein Experte, habe mir jedoch mit viel Zeit, Nerven und einigen Beiträgen im Forum eine Lösung gebastelt mit der ich mehr als zufrieden bin.

Also bitte nicht sauer sein wenn die Skripte nicht Perfekt sind. Das geht sicherlich noch besser. Es funktioniert aber gut.

Um uns im vorhinein Arbeit zu ersparen ein paar Fragen:

Wie viele Sonos komponenten willst du steuern? (Skript Quick and dirty oder Vorlagen für mehrere Sonos Boxen)
Sollen diese nur ein einzeln Steuerbar sein oder auch in einer Gruppe? (Multiroom)

Es kommt darauf an was du alles vor hast.
Ich habe dir ein Bild von einem Taster hochgeladen. (Ein/Aus; Lauter/Leiser; Quellen; Gruppe oder Alleine; Vor/Zurück)

Um kurz meine Lösung zu schildern:
Meine Hauptsonoskomponente sitzt im Gang und wird mittels BWM Mute und Unmute geschalten.
Alle anderen Sonoskomponenten werden mittels Taster bzw. Lichtschalter der Gruppe im Gang zugetilt bzw getrennt. Somit wird z.B. im WC die Sonos wenn ich das Licht einschalte aktiviert und spielt synchron mit dem Hausgang.Wenn ich das Licht im WC ausschalte trenne ich diese Sonosbox wieder von der Gruppe.
Die Auswahl der Quelle greift somit standardmässig auf alle Räume. Die Lautstärke und Ein/Aus immer nur im Raum.
Zusätzlich habe ich die Funktion die Quelle der Box alleine zu steuern also nicht Gruppiert. (Siehe Foto Taster: Alleine)

Bitte gib kurz bescheid was du alles machen willst bzw. was du für Vorstellungen hast.

Dann werde ich dich so gut ich kann, hoffentlich Schritt für Schritt zur Lösung führen.

Danke

Gruß Dani

Guten Morgen Dani,

danke für deine Hilfe, keine Sorge wegen deinen Skripten, ich habe eh keine Ahnung davon. Mir würde es also nicht mal auffallen, ob die perfekt sind oder nicht :slight_smile:

Also:
Ich habe momentan 3 Sonos Lautsprecher im Einsatz, habe aber noch 2 Stück rumstehen, welche ich über kurz oder lang auch einbinden will.

Momentan habe ich welche in der Küche (EG), Hauptbad (EG) und Büro (OG). Die 2 Übrigen sollen ins Gäste-WC (EG) und ins Duschbad (OG) kommen. In Zukunft dann vl. mal für Sprachansagen eine Weitere im Eingangsbereich, aber das ist noch nicht absehbar.

Ich erkläre das mal so, wie ich mir das auf die Schnelle mit deinem System vorstellen würde:

Wenn du schon mit Multiroom anfängst, würde ich das natürlich gerne realisieren, davon wagte ich im Eigenbau gar nicht zu träumen :slight_smile:

  • Küche (EG): Als Gruppenkopf EG für Hauptbad + Gäste WC

  • Hauptbad (EG) Als Gruppenteilnehmer für Küche (Alternativ auch als Einzeln, wobei ich hier probleme mit den zur verfügung stehenden Tasten bekomme, siehe unten)

  • Gäste-WC (EG): Mangels Taster im Raum möchte ich diesen über den Präsenzmelder starten und stoppen, wenn Bewegung im Raum ist UND in der Küche Musik läuft.

  • Büro (OG): Einzeln und als Gruppenkopf für Duschbad
    (Hier handelt es sich um nen Sonos Connect AMP, welchen ich aber eigentlich eh nur über die Software am PC bediene, was sich so schnell auch nicht ändern wird, da das sozusagen auch mein Ersatz für PC-Lautsprecher ist und tatsächlich nur im Einsatz ist, wenn ich am PC arbeite)

  • Duschbad (OG): Einzeln und als Teilnehmer für Büro. (Hier hätte ich vorerst 6 Tasten zur verfügung, Könnte also Einzeln UND Teilnehmer Büro realisieren)

Zu deiner Lösung:

Verstehe ich das richtig, dass deine Sonos im Gang quasi Tag und Nacht durchläuft und nur gemutet wird? Wie ist das im mitm Stromverbrauch?

Der Standbyverbrauch dieser Dinger ist mir nämlich eh ein Dorn im Auge.
Der Connect-AMP im Büro wird eh schon immer automatisch vom Strom genommen, wenn mein PC nicht an ist, die anderen sollen dem langfristig folgen, bei Abwesenheit oder wenn wir schlafen.
Ist das ein Problem für deine Lösung, weil die Lautsprecher ja dann erstmal ne Zeit lang nicht ansprechbar sind?

Als Bedieneinheit habe ich im Haus den MDT Glastaster 2 verbaut (Wohl die Nummer 1 beim Preisbewussten KNX-Selbstverwirklicher :smiley: )
Der Taster hat 6 Tastflächen. Bei einer Bedienebene hat man 6 Tasten zur Verfügung, wenn man auf 3 Bedienebenen umstellt, fallen die oberen beiden Tasten für das Umschalten der Ebenen weg, womit man noch 4 Tasten auf 3 Ebenen, also sozusagen 12 Tasten zur Verfügung hat.

Durch die Konfiguration auf 3 Ebenen bleiben für die Sonos Bedienung bei mir eigentlich nur 4 Tasten übrig (Küche und Hauptbad).
Ich könnte vl auf 6 oder im Extremfall vl. sogar 8 (wie bei dir) erweitern, wobei ich das eigentlich nur im Notfall machen möchte.
Denn das hätte auch zur Folge, dass die Bedienung auf 2 Ebenen verteilt wäre, wodurch sich wohl keiner mehr auskennt. Zusätzlich müsste ich die Bedienung der Raffstore streichen, was meine Frau wohl nicht so toll finden würde…

Jetzt kommt mir aber grad eine Idee:
Da ich die Sonos Lautsprecher eigentlich nur für Radio verwende (Spotify läuft dann auf der Stereoanlage oder wird eh übers Handy gesteuert), frage ich mich, ob ich für die Quellwahl überhaupt 2 Tasten benötige? Momentan schalte ich meine 4 favorisierten Radiosender ja auch schon mit einer Taste durch.

Wäre es also für mich nicht so am besten:

Taste 1+2 für Start/Stop (Langer Druck) sowie Lauter/Leiser (Kurzer Druck)
Taste 3 für Quellwahl (Gruppe) (Dabei gibt es getrennte Gruppen für EG und OG)
Taste 4 für Quellwahl Einzelner Raum (Favoritenumschalten der 4 Radiosender)

So hätte ich eigentlich alle Befehle abgedeckt, welche ich mir wünschen würde, wäre ich bei „Wünsch-dir-was“ :wink:

An dieser Stelle schonmal vielen, vielen Dank für deine Mühe und Hilfe!

Grüße Mathias

Der Standbyverbrauch dieser Dinger ist mir nämlich eh ein Dorn im Auge.

Mir auch.

Daher schalte ich die Steckdosen an dem Sonos hängt aus.
Sonos braucht hier so ~30-45 Sekunden zum booten nach dem einschalten, also ein Skript gebaut, wenn die Steckdose eingeschaltet wird kommt nach 60 Sekunden der Start der Sonos mit setzen der Grundlautstärke, Radiosender und Play.
Daraus hatte ich dann vor Jahren ein kleine Modul gebaut, wo noch etwas mehr drin ist, wie Titelanzeige auf einem LCN Display usw.
Aber für ein Einschaltereigniss könntest du es auch am KNX nehmen,
Kannst dir das ja mal anschauen und probieren :GitHub - ipstomgr/TS_LCN2Sonos

Hallo Mathias!

Ich habe mir heute Naachmnittag mal ein wenig Zeit genommen.

Zu deiner Antwort:

Verstehe ich das richtig, dass deine Sonos im Gang quasi Tag und Nacht durchläuft und nur gemutet wird? Wie ist das im mitm Stromverbrauch?

Das ist richtig. All meine Sonos Boxen laufen 24/7, wenn sie nicht eingeschalten sind, auf Standby. Die Play1 von mir nimmt 3,8W im Standby auf. Somit kostet mich eine Sonos Play1 in Österreich nichteinmal ganz 2,50€ im Jahr, wenn diese 24/7 im Standby wäre. Das ist mir der Komfort wert, dass ich immer sofort Musik habe und nicht jedesmal 1 Minute warten muss. Bei einem Besuch auf dem WC wäre ich da mit pinkeln schon fast fertig bevor die Musik einschaltet.
Somit läuft auf meinem „Master“ im Gang immer ein Radio bzw. Playlist und dieser wird lediglich mit Mute und Unmute geschalten. Alle anderen werden dann der Gruppe hinzugefügt bzw. entfernt oder laufen alleine.
Das ist jedoch Ansichtssache und jedem selbst überlassen.
Bei meinen Skripten ist genau dieses vorgesehen, wenn du diese wirklich wegschalten willst können wir das ja später noch einbauen.

Wäre es also für mich nicht so am besten:

Taste 1+2 für Start/Stop (Langer Druck) sowie Lauter/Leiser (Kurzer Druck)
Taste 3 für Quellwahl (Gruppe) (Dabei gibt es getrennte Gruppen für EG und OG)
Taste 4 für Quellwahl Einzelner Raum (Favoritenumschalten der 4 Radiosender)

Ich habe das soweit vorbereitet:
Taste 1+2 sollte als dimmen in der ETS konfiguriert werden Ein/Aus (Kurzer Tastendruck) - Lauter/Leiser (Langer Tastendruck) wie beim dimmen einer Lampe
Für die Quellenwahl muss ich dir später nochmal was basteln.
Welches Modul verwendest du? wie verwirklichst du die Favouritenumschaltung? Kannst du das Skript bitte online stellen, dann kann ich es dir probieren anzupassen.

Ich habe mal ein paar Sachen zusammengestellt, speziel auf dich zugeschnitten.

Ich arbeite auf der Basis von dem Modul tkugelberg/SymconSonos.

Schritt 1:
Sonos Instanz für jeden Raum anlegen - Hast du ja bereits

Schritt 2:
KNX Instanzen mit den GA für jeden Raum anlegen.

[ul]
[li]KNX Instanz für E/A (EIS1 Switch - Boolean)
[/li][li]KNX Instanz für Lauter/Leiser ( EIS2 DimControl - Integer)
[/li][li]
[/li][/ul]

Schritt 3:
Übergeordente Skripten anlegen:

Skript „Sonos Adressen“

<?

// In diesem Skript gibst du alle deine Sonosboxen bzw. Instanzen ein. Dieses Skript wird in den Nachfolgenden miteinbezogen. Somit musst du nicht immer all deine Skripte individuell anpassen.

$Sonos_Kueche=37870; //Sonos Instanz Küche Statt 37870 eingeben
$Sonos_Hauptbad=38616; //Sonos Instanz Hauptbad Statt 38616 eingeben
$Sonos_GaesteWC=32765; //Sonos Instanz Gäste WC Statt 32765 eingeben
$Sonos_Buero=13637; //Sonos Instanz Büro Statt 13637 eingeben
$Sonos_Duschbad=43928; //Sonos Instanz Duschbad Statt 43928 eingeben

$Sonos_HauptEG=$Sonos_Kueche; // Hier wird angegeben wer im EG der Gruppenmaster sein soll.
$Sonos_HauptOG=$Sonos_Buero; // Hier wird angegeben wer im OG der Gruppenmaster sein soll.

?>

Skript „Vorlage für alle Sonosinstanzen für Lautstärke“:

<?

		// In diesem Skript behandeln wir Global wie jede Sonosbox beim Dimm-befehl über KNX die Lautstärke ändern soll.
		
		//Vorgabe Lauter Leiser in % pro Abfrage
        $Lauter=2; // hier wird die Prozentzahl eingegeben um wieviel sich die Lautstärke in einem Step (hier im Beispiel 300ms) erhöhen soll
		$Leiser=-2; // hier wird die Prozentzahl eingegeben um wieviel sich die Lautstärke in einem Step (hier im Beispiel 300ms) veringern soll
		
		// In den folgenden Schritten wird der Dimm-KNX Wert aus dem Auslöseskript abgefragt und dementsprechend die Aktion auf der Sonosinstanz ausgeführt.
		
		
		if($KNX_Wert == 9)
        {
            //Timer anschalten = Der Timer läuft so lange der KNX Taster gedrückt wird.
            IPS_SetScriptTimer($_IPS['SELF'], 1); // setzt den Timer auf 1 sekunde. Das Heisst das dieses Skript alle 1s neu aufgerufen wird.
            //Sonos Lauter
			SNS_ChangeVolume($Sonos, $Lauter);
        }
        elseif ($KNX_Wert == 1)
        {
            //Timer anschalten = Der Timer läuft so lange der KNX Taster gedrückt wird.
            IPS_SetScriptTimer($_IPS['SELF'], 1);
            //Sonos Leiser
			SNS_ChangeVolume($Sonos, $Leiser);
        }
        elseif ($KNX_Wert == 0)
        {
            //Timer ausschalten = Der Timer wird zurückgesetzt wenn der KNX Taster losgelassen wird.
            IPS_SetScriptTimer($_IPS['SELF'], 0); // Der Skripttimer wird hier wieder auf 0 gesetzt.
        }

        ips_sleep(300); // Hier wird die Zeit in ms angegeben wie lange es dauern soll bis die nächste erhöhung bzw. veringerung der Lautstärke stattfindet. 300ms ist aus meinen Erfahrungen Perfekt.
		
		// Ab hier wird das ganze wiederholt. Der Skripttimer ist auf 1s gestellt. die Pause zwischen den Befehlen beträgt 300ms. Demnach wiederhole ich den Befehl 3mal. 3x300ms=900ms. Nach 1 Sekunde fängt das ganze wieder von vorne an bis der KNX-Taster losgelassen wird.

        $KNX_Wert;

        if($KNX_Wert == 9)
        {
            SNS_ChangeVolume($Sonos, $Lauter);
        }
        elseif ($KNX_Wert == 1)
        {
            SNS_ChangeVolume($Sonos, $Leiser);
        }
        elseif ($KNX_Wert == 0)
        {
            return;
        }
		
		 ips_sleep(300);

        $KNX_Wert;

        if($KNX_Wert == 9)
        {
            SNS_ChangeVolume($Sonos, $Lauter);
        }
        elseif ($KNX_Wert == 1)
        {
            SNS_ChangeVolume($Sonos, $Leiser);
        }
        elseif ($KNX_Wert == 0)
        {
            return;
        }
	
        ?>

Schritt 4:
Merker für jeden Raum anlegen:
Dazu in jedem Raum eine neue Variable vom Typ Boolean anlegen und dementsprechend benennen. Siehe auch auf Bild 1.

Schritt 5:
Skript „Sonosinstanz Ein/Aus“ für jeden Raum anlegen der nicht der Gruppenmaster im EG oder OG sein soll.

        <?
		// Id`s aus dem Skript "Sonos Adressen" holen. Nur einmal die ID des Skriptes "Sonos Adressen" eintragen. Bleibt dann für alle gleich.
		include "31534.ips.php"; // ID des Skriptes "Sonos Adressen" eingeben.
		
		//Werte zum Verändern
		
		//Wert von KNX Taster schalten holen
        $KNX_Wertswitch=GetValue(10748); // ID des KNX-Befehl "Boolean" Ein/Aus angeben. Hier wird der aktuelle Wert des KNX-Taster abgerufen.
		
		//Instanz Sonos Komponente
		$Sonos=$Sonos_Hauptbad; //Gibt an welche Instanz gesteuert werden soll.
		
		// Gibt an welche Instanz für das "Vorlagenskript EIN/AUS" als Gruppenadmin genommen werden soll.		
		$Sonos_Haupt=$Sonos_HauptEG; // Hier wird bestimmt in welche Gruppe sich die Instanz bei Multiroom eingliedern soll. Im OG einfach die Variable $Sonos_HauptOG angeben.
		
		// Hier wird der Merker für den Raum der Sonosinstanz bestimmt um unterscheiden zu können ob die Quellenauswahl nur für diese Instanz oder für die komplette Gruppe wirken soll.
		$Sonos_Merker=45540; // Hier die ID des Merkers (erstellte Merker Variable vom Typ Boolean) angeben.
		

    	// Nicht ändern.
		
        if($KNX_Wertswitch == true) // Wenn der KNX Befehl "Ein" aus dem Auslöseskript erfolgt
        {
			SNS_SetDefaultVolume($Sonos); // Setzt die Lautstärke der Sonosinstanz auf default, welche in der Distanz selber angegeben werden kann.
			SNS_SetGroup($Sonos, $Sonos_Haupt); // Gruppiert die Sonosbox in die Gruppe des Gruppenmasters
			SetValueBoolean($Sonos_Merker, true); // Setzt einen Merker um zu wissen ob bei Auswahl einer Quelle nur diese Instanz oder die Gruppe gewechselt werden soll.
        }
        if($KNX_Wertswitch == false) // Wenn der KNX Befehl "Aus" aus dem Auslöseskript erfolgt
        {
             SNS_SetGroup($Sonos, 0); //entfernt die Sonosbox wieder aus der Gruppe.
			 SetValueBoolean($Sonos_Merker, false); // Setzt einen Merker wieder auf 0 um zu wissen ob bei Auswahl einer Quelle nur diese Instanz oder die Gruppe gewechselt werden soll.
        }
        
		?&gt;

Diesem Skript ein Ereignis hinzufügen:

[ul]
[li]Ereignis - bei Variablenaktualisierung des Values Boolean für E/A (KNX) des Raumes skript ausführen
[/li][li]
[/li][/ul]

Schritt 6:
Skript „Sonosinstanz Mute/Unmute“ für die Räume anlegen die Gruppenmaster im EG oder OG sein soll.

        <?
		// Id`s aus dem Skript "Sonos Adressen" holen. Nur einmal die ID des Skriptes "Sonos Adressen" eintragen. Bleibt dann für alle gleich.
		include "31534.ips.php"; // ID des Skriptes "Sonos Adressen" eingeben.
		
		//Werte zum Verändern
		
		//Wert von KNX Taster schalten holen
        $KNX_Wertswitch=GetValue(10748); // ID des KNX-Befehl "Boolean" Ein/Aus angeben. Hier wird der aktuelle Wert des KNX-Taster abgerufen.
		
		//Instanz Sonos Komponente
		$Sonos=$Sonos_Kueche; //Gibt an welche Instanz gesteuert werden soll.
		
		// Hier wird der Merker für den Raum der Sonosinstanz bestimmt um unterscheiden zu können ob die Quellenauswahl nur für diese Instanz oder für die komplette Gruppe wirken soll.
		$Sonos_Merker=21078; // Hier die ID des Merkers (erstellte Merker Variable vom Typ Boolean) angeben.
		

    	// Nicht ändern.
		
        if($KNX_Wertswitch == true) // Wenn der KNX Befehl "Ein" aus dem Auslöseskript erfolgt
        {
			SNS_SetMute($Sonos, false); // Setzt die Instanz auf Unmute also Laut
			SetValueBoolean($Sonos_Merker, true); // Setzt einen Merker um zu wissen ob bei Auswahl einer Quelle nur diese Instanz oder die Gruppe gewechselt werden soll.
        }
        if($KNX_Wertswitch == false) // Wenn der KNX Befehl "Aus" aus dem Auslöseskript erfolgt
        {
             SNS_SetMute($Sonos, true); // Setzt Die Instanz auf Mute
			 SNS_SetDefaultVolume($Sonos_Kueche); // Setzt das Volume wieder auf default damit beim nächsten mal einschalten keiner an einem Herzinfarkt stirbt -:)
			 SetValueBoolean($Sonos_Merker, false); // Setzt einen Merker wieder auf 0 um zu wissen ob bei Auswahl einer Quelle nur diese Instanz oder die Gruppe gewechselt werden soll.
        }
        
		?&gt;

Diesem Skript ein Ereignis hinzufügen:

[ul]
[li]Ereignis - bei Variablenaktualisierung des Values Boolean für E/A (KNX) des Raumes skript ausführen
[/li][li]
[/li][/ul]

Schrit 7:

Skript „Sonosinstanz Lauter/Leiser“ für jeden Raum anlegen.

        <?
		// Id`s aus dem Skript "Sonos Adressen" holen
		include "31534.ips.php"; // ID des Skriptes "Sonos Adressen" eingeben. Nur einmal ID anpassen.
		
		//Werte zum Verändern
		
		//Wert von KNX Taster dimmen holen
        $KNX_Wert=GetValue(15496); // ID des KNX Befehls des Tasters dimmen "Integer" angeben.
		
		//Instanz Sonos Komponente
		$Sonos=$Sonos_Hauptbad; // Angeben welche Instanz gesteuert werden soll (hier z.B. $Sonos_Hauptbad). Diese Variable muss mit der in dem Skript "Sonos Adressen" überinstimmen.

        // NICHT ändern (Nur einmal die ID anpassen)
		//Vorlagenskript Lauter Leiser Global ausführen
		
        include(IPS_GetScriptFile(28067)); // ID des Skriptes "Vorlage für alle Sonosinstanzen für Lautstärke" eingeben.
		
        ?&gt;

Diesem Skript ein Ereignis hinzufügen:

[ul]
[li]Ereignis - bei Variablenänderung des Values Integer für Lauter/Leiser des Raumes skript ausführen
[/li][li]
[/li][/ul]

Schritt 8:
Skript für Quellenänderung folgt noch.

Im Anhang findest du noch ein Bild von meinem dazu gebastelten Stammbaum.

Habe kurz getestet, funktioniert soweit.

Das kannst du ja mal testen und schauen ob dir das so gefallen würde. Dann können wir ja weiter auf deine Wünsche eingehen.
Aber bitte kurz testen.
Denn falls du ein anderes Modul oder doch andere Vorstellungen hast, müssen wir umschwenken.

Ich hoffe das hilft dir ein wenig weiter.
Bei Fragen einfach melden.

Gruß Dani

Wow, ich weiß gar nicht was ich sagen soll! Danke!

Ich muss mir das jetzt die Tage mal genau ansehen, was du da machst und werde dann hoffentlich Anfang nächster Woche damit beginnen können, das einzuarbeiten. Am Wochenende schaffe ich es voraussichtlich leider nicht.

Nur kurz ein paar Punkte:

Vorweg, ich nutze auch das Sonos Modul von TKugelberg

Bzgl. der Standby-Problematik:

Das Thema mit dem Komfort verstehe ich, geht mir nicht anders.
Ich will die auch gar nicht erst immer einschalten müssen, wenn ich sie nutzen will.
Viel eher denke ich da an das Thema Abwesenheit oder Schlafen. Tagsüber, wenn jemand zu Hause ist, hab ich kein Problem damit, dass die alle im Standby hängen.
Dann sollte es doch auch kein Problem geben, oder?
Ich würde das wohl einfach über eine Logik KNX-Intern lösen.
Das Haus erkennt bereits komplette Abwesenheit, bzw. wenn einer oder beide Schlafen. Über ne Einfache Logik könnte ich die dann Ein-/Ausschalten.
Wenn die dann wieder im Netz hängen, funktioniert die Verbindung mit IPS ja automatisch oder?

Bzgl. meiner Favoritenwahl:

Ich sende bei Tastendruck über eine GA abwechselnd die Werte 1 bis 4. Zusätzlich habe ich noch die Taste so programmiert, dass bei langem Tastendruck immer die 1 gesendet wird.
Für die 4 Werte habe ich dann 4 Skripte erstellt, welche den jeweiligen Sender und danach ein Play ausführen. (Siehe Bild anbei)
Das Skript lasse ich über ein Ereignis ausführen, wenn bei der Instanz mit der KNX-GA die jeweilige Zahl aufgerufen wird.
Da ich mich mit PHP noch gar nicht auskenne, hab ich das eben so über 4 Skripte gelöst, weil ich nicht wusste, wie ich die KNX-GA sonst dem jeweiligen Part des Skriptes zuweisen müsste, wenn ich alle 4 Skripte in eines packen würde :smiley:

Noch ein paar Fragen:

  • Wie verhält es sich eigentlich, wenn ich Im Bad meinetwegen über die Quellenwahl „Einzeln“ einen anderen Sender ausgewählt habe und diesen Client nun wieder der EG-Gruppe hinzufügen will?
    Muss ich dann einfach am Taster im Bad die Quelle für die Gruppe wählen und er wird automatisch wieder der Gruppe hinzugefügt?

  • Was passiert anders rum, wenn ich im Bad einzeln einen Sender laufen habe und meine Frau ändert in der Küche die Quelle für die Gruppe?
    Meinem Verständnis nach sollte das im Bad ja keine Auswirkung haben, da ich die Instanz durch die eigen Quelle ja zwischenzeitlich aus der Gruppe genommen habe?

  • Da ich die 2 Play1 fürs Gäste-WC und Duschbad noch nicht integriert habe, bekomme ich da mit den Skripten jetzt dann Probleme? Denn ich hab die einer Verwandten in der Schweiz zum Ausprobieren geliehen und bekomme die erst März/April wieder zurück.

Ansonsten nochmal vielen, vielen Dank für deine Mühe!

Ich bin ja wirklich schon in vielen Foren unterwegs gewesen, aber diese Hilfsbereitschaft wie hier findet man nicht so oft… :slight_smile:

Beste Grüße und schönes Wochenende!

Gruß Mathias

Hallo Mathias!

Mir wurde in dem Forum auch schon etliche male geholfen. Jetzt bin ich froh dass ich mal was zurückgeben kann.

Keine Angst vor den Skripten. Ich habe alles genau beschrieben damit du auch verstehst was genau mit jeder Zeile passiert.
Ich habe nämlich auch oft das Problem, dass ich zwar Skripte kopiere aber den hintergrund nicht immer ganz checke. Somit wird es wirklich hart wenn man selber noch daran basteln will.
Ich hoffe das ich dich so ein wenig in die Skript geschichte einweihe und du die Angst davor verlierst.

Zu deinen Fragen:

Viel eher denke ich da an das Thema Abwesenheit oder Schlafen. Tagsüber, wenn jemand zu Hause ist, hab ich kein Problem damit, dass die alle im Standby hängen.
Dann sollte es doch auch kein Problem geben, oder?

Das sollte dann kein Problem geben. Jedoch sollten wir noch ein Skript einarbeiten das wenn du diese einschaltest automatisch nach einer Minute die Master in „Mute“ gehen und im Hintergrund deinen Favouriten Radio spielen. Dann könnte der BWM im Gäste WC deine Sonos auch aktivieren wenn in der Küche keine Musik läuft, falls gewünscht.

Wenn die dann wieder im Netz hängen, funktioniert die Verbindung mit IPS ja automatisch oder?

Ja das funktioniert normalerweise tadellos.

Für die 4 Werte habe ich dann 4 Skripte erstellt, welche den jeweiligen Sender und danach ein Play ausführen.

Bitte schicke mir alle 4 Skripte, dann kann ich dir eines bauen wo alle 4 Radiosender vorhanden sind.

  • Wie verhält es sich eigentlich, wenn ich Im Bad meinetwegen über die Quellenwahl „Einzeln“ einen anderen Sender ausgewählt habe und diesen Client nun wieder der EG-Gruppe hinzufügen will?
    Muss ich dann einfach am Taster im Bad die Quelle für die Gruppe wählen und er wird automatisch wieder der Gruppe hinzugefügt?

In dieser Variante was ich gebastelt habe, wird die Sonos im Bad durch einen „KNX - EIN“ Befehl der Gruppe zugeordnet und durch einen „KNX - AUS“ Befehl wieder von der Gruppe getrennt.
D.h. Wenn du auf „Aus“ drückst ist die Box für sich alleine und du kannst die Quelle auswählen welche dann nur im Bad gespielt wird bis du entweder wieder auf „AUS“ drückst (Dann ist sie wieder AUS) oder du auf „EIN“ drückst dann geht sie in die Gruppe und spielt das gleiche wie in der Küche.

Das ganze habe ich mit einer Taste für die Quellenauswahl gebastelt. Somit brauchst du nicht 2 Tasten (Allein und Gruppe) sondern die Quellenauswahl funktioniert automatisch je nachdem welcher Modus gerade aktiv ist. (Allein oder Gruppe).

Somit hättest du dann noch eine Taste frei zur Verfügung um evtl. weitere Favouriten (z.B. Playlist) oder Play/Pause… zu realisieren.

Was passiert anders rum, wenn ich im Bad einzeln einen Sender laufen habe und meine Frau ändert in der Küche die Quelle für die Gruppe?
Meinem Verständnis nach sollte das im Bad ja keine Auswirkung haben, da ich die Instanz durch die eigen Quelle ja zwischenzeitlich aus der Gruppe genommen habe?

Das ist richtig. Die Auswahl in der Küche hat keinen Einfluss auf das Bad wenn diese im „Stand alone“ Betrieb ist.

Da ich die 2 Play1 fürs Gäste-WC und Duschbad noch nicht integriert habe, bekomme ich da mit den Skripten jetzt dann Probleme? Denn ich hab die einer Verwandten in der Schweiz zum Ausprobieren geliehen und bekomme die erst März/April wieder zurück.

Das ist auch kein Problem, du kannst die entweder erst später einpflegen, oder du bereitest diese gleich schon vor.
Dann müsstest du nur noch Bei der Sonosinstanz die IP und RICON eintragen und das ganze sollte dann auch schon funktionieren.

Ich werde schauen, dass ich heute noch dazu komme um das ganze weiter zu basteln.
Also bitte wenn möglich noch die 4 Skripte von deinen Radiosendern schicken und ich Pflege diese noch ein.

Soll die zukünftige Sonos im Gäste WC immer bei Bewegung spielen oder wirklich nur wenn in der Küche Musik läuft?

Dir auch noch ein schönes Wochenende.

Schöne Grüße aus Tirol

Dani:cool:

Guten Morgen,

Prinzipiell soll die im Gäste-WC dann immer angehen, wenn jemand drinnen ist. Ausschlüsse kann ich ja dann wieder über ne Logik in KNX realisieren, dass er z.b. aus bleibt, wenn der TV läuft usw.

Anbei noch die 4 Skripte:

Bei Wert 1:

<?
SNS_SetRadio(54999, "ROCK ANTENNE");
SNS_Play(54999); //Start writing your scripts between the brackets

?>

Bei Wert 2:

<?
SNS_SetRadio(54999, "Rockit Radio Switzerland");
SNS_Play(54999); //Start writing your scripts between the brackets

?>

Bei Wert 3:

<?

SNS_SetRadio(54999, "FFH Rock");
SNS_Play(54999); //Start writing your scripts between the brackets

?>

Bei Wert 4:

<?

SNS_SetRadio(54999, "sunshine live");
SNS_Play(54999); //Start writing your scripts between the brackets

?>

Anbei auch noch ein weiteres Beispiel der Auslösung, ich hoffe das reicht dir als Infos.

Danke und Grüße

Ich bin nun doch schon dabei, das mal zu testen.

Als ersten Schritt habe ich mal in der Küche angefangen:

Da dies ja der Admin im EG wird, soll der ja nur stumm oder laut geschaltet werden. Das funktioniert soweit auch schon, nur komm ich bei der Lautstärke nicht klar.
Diese wird immer nur verringert, egal, welche der beiden Tasten ich drücke?!? :frowning:

Da ich dir ja keinen Fehler in deinem Skript unterstellen möchte, hast du ne Ahnung, woran das liegen könnte? :smiley:

Ich bin mir nicht ganz sicher, ob das nicht vl sogar am KNX liegt?
Wenn ich nämlich im Gruppenmonitor die Befehle verfolge schaut das so aus:

Bei Beginn der Lautstärkeerhöhung

$09 | Erhöhen, 100 %

Bei Ende

$00 | Verringern, Stopp

Bei Beginn der Lautstärkeverringerung

$01 | Verringern, 100 %

Bei Ende

$00 | Verringern, Stopp

Ich kenne mich da nicht so aus, aber es verwundert mich etwas dass er bei der Erhöung am Ende ein „Verringern, Stopp“ sendet und kein „Erhöhen, Stopp“.

Ist das so richtig?

Wenn ich das nämlich dann in IPS Betrachte sendet der bei Erhöhung zwar schon ein „Increase“ auf den Boolean-Wert, allerdings schaltet der sofort auf „Decrease“ um, wenn ich die Taste los lasse. (Siehe Bild)
Bei Leiser funktioniert alles wie es soll.

Danke für deine Hilfe!

Grüße und schönen Abend.

Hallo Mathias!

Ich habe ein wenig weiter gebastelt.

Als erstes bitte das Skript aus Schritt 6 durch dieses ersetzen. Da wird jetzt automatisch der Gruppenadmin hergenommen Also dieses Skript für Küche EG und Büro OG zum Ein/Aus schalten hernehmen.

        <?
		// Id`s aus dem Skript "Sonos Adressen" holen. Nur einmal die ID des Skriptes "Sonos Adressen" eintragen. Bleibt dann für alle gleich.
		include "31534.ips.php"; // ID des Skriptes "Sonos Adressen" eingeben.
		
		//Werte zum Verändern
		
		//Wert von KNX Taster schalten holen
        $KNX_Wertswitch=GetValue(10748); // ID des KNX Befehl "Boolean" Ein/Aus angeben. Hier wird der aktuelle Wert des KNX Taster abgerufen.
		
		//Instanz Sonos Komponente
		$Sonos=$Sonos_HauptEG; //Gibt an welche Instanz gesteuert werden soll.
		
		// Hier wird der Merker für den Raum der Sonosinstanz bestimmt um unterscheiden zu können ob die Quellenauswahl nur für diese Instanz oder für die komplette Gruppe wirken soll.
		$Sonos_Merker=21078; // Hier die ID des Merkers (erstellte Merker Variable vom Typ Boolean) angeben.
		

    	// Nicht ändern.
		
        if($KNX_Wertswitch == true) // Wenn der KNX Befehl "Ein" aus dem Auslöseskript erfolgt
        {
			SNS_SetMute($Sonos, false); // Setzt die Instanz auf Unmute also Laut
			SetValueBoolean($Sonos_Merker, true); // Setzt einen Merker um zu wissen ob bei Auswahl einer Quelle nur diese Instanz oder die Gruppe gewechselt werden soll.
        }
        if($KNX_Wertswitch == false) // Wenn der KNX Befehl "Aus" aus dem Auslöseskript erfolgt
        {
             SNS_SetMute($Sonos, true); // Setzt Die Instanz auf Mute
			 SNS_SetDefaultVolume($Sonos); // Setzt das Volume wieder auf default damit beim nächsten mal einschalten keiner an einem Herzinfarkt stirbt -:)
			 SetValueBoolean($Sonos_Merker, false); // Setzt einen Merker wieder auf 0 um zu wissen ob bei Auswahl einer Quelle nur diese Instanz oder die Gruppe gewechselt werden soll.
        }
        
		?&gt;

Dann habe ich das Skript für die Quellenauswahl geschrieben. Dieses Skript mit einem Ereignis „Variablenaktualisierung“ auslösen. Und zwar von deinem KNX Taster mit welchem du die Werte 1-4 schickst. Dieses in allen Räumen anlegen und anpassen.

   		<?
		
		// Id`s aus dem Skript "Sonos Adressen" holen
		include "31534.ips.php"; // ID des Skriptes "Sonos Adressen" eingeben.
		
		//Werte zum Verändern
		
		//Wert von KNX Taster holen
        $KNX_Wert=GetValue(12287; // ID von KNX Taster "Quelle auswählen" von Typ "Integer" eintragen.
		$Sonos_Merker_Quelle=GetValue(45540);  // Merker vom jeweiligen Raum auswählen um zu wissen ob "Stand alone" oder Gruppe
		
		//Instanz Sonos Komponente
		$Sonos=$Sonos_Hauptbad; // Variablen (hier z.B. $Sonos_Hauptbad) aus dem Skript Sonos Adressen nachsehen und dem entsprechenden Raum anpassen.
		
		//Instanz des Gruppenmasters
		$Sonos_Haupt=$Sonos_HauptEG; // Hier angeben wer der Gruppenmaster ist EG oder OG
		
		
		// Skript welches normalerweise nicht verändert werden muss, außer es kommt was dazu oder die Sender sollen sich ändern.
		
		
		if($Sonos_Merker_Quelle == true) // Wenn vom KNX Taster der EIN Befehl aktiv ist und die Sonosbox in der Gruppe ist werden die Befehle an den Gruppenmaster übergeben.
		{
        	if($KNX_Wert == 1)
        	{
            	 SNS_SetRadio($Sonos_Haupt, "ROCK ANTENNE");
           	     SNS_Play($Sonos_Haupt);
        	}
        	elseif($KNX_Wert == 2)
        	{
				SNS_SetRadio($Sonos_Haupt, "Rockit Radio Switzerland");
           	     SNS_Play($Sonos_Haupt);
        	}
			elseif($KNX_Wert == 3)
        	{
				SNS_SetRadio($Sonos_Haupt, "FFH Rock");
           	     SNS_Play($Sonos_Haupt);
        	}
			elseif($KNX_Wert == 4)
        	{
				SNS_SetRadio($Sonos_Haupt, "sunshine live");
           	     SNS_Play($Sonos_Haupt);
        	}
		}
		
		elseif($Sonos_Merker_Quelle == false) // Wenn vom KNX Taster der AUS Befehl aktiv ist und die Sonosbox "Stand alone" ist werden die Befehle an die Sonos im Raum übergeben.
		{
        	if($KNX_Wert == 1)
        	{
            	 SNS_SetRadio($Sonos, "ROCK ANTENNE");
           	     SNS_Play($Sonos);
        	}
        	elseif($KNX_Wert == 2)
        	{
				SNS_SetRadio($Sonos, "Rockit Radio Switzerland");
           	     SNS_Play($Sonos);
        	}
			elseif($KNX_Wert == 3)
        	{
				SNS_SetRadio($Sonos, "FFH Rock");
           	     SNS_Play($Sonos);
        	}
			elseif($KNX_Wert == 4)
        	{
				SNS_SetRadio($Sonos, "sunshine live");
           	     SNS_Play($Sonos);
        	}
		}
        ?&gt;

Dann noch das Skript welches aufgerufen werden sollte wenn du im Haus wieder „Anwesend“ bist und die Sonoskomponenten wieder mit Strom versorgt werden. Diese Skript schaltet nach 60 sekunden die Gruppenadmins auf Mute und auf Rock Antenne. Somit ist in allen anderen Räumen „Rock Antenne“ aktiv sobald Sie in die Gruppe eingeglidert werden. (z.B. BWM Gäste WC).

Dieses Skript ebenfalls mit einem Ereignis aufrufen. Und zwar mit dem bestimmten EIN-Befehl für die Steckdosen der Sonoskomponenten.

<?
	//Zu verändern:

 	// Id`s aus dem Skript "Sonos Adressen" holen
	include "31534.ips.php"; // ID des Skriptes "Sonos Adressen" eingeben. 
	
	// Eigentlich nicht zu verändern 

 	IPS_Sleep(60000); // 60 sekunden warten (Zeit ist angenommen und muss unter umständen noch angepasst werden.)
	
	SNS_SetMute($Sonos_HauptEG, true); // Setzt Die Instanz auf Mute
	SNS_SetDefaultVolume($Sonos_HauptEG); // Setzt das Volume wieder auf default damit beim nächsten mal einschalten keiner an einem Herzinfarkt stirbt -:)
	
	SNS_SetMute($Sonos_HauptOG, true); // Setzt Die Instanz auf Mute
	SNS_SetDefaultVolume($Sonos_HauptOG); // Setzt das Volume wieder auf default damit beim nächsten mal einschalten keiner an einem Herzinfarkt stirbt -:)
	
	
	IPS_Sleep(2000); // 2 sekunden warten
	SNS_SetRadio($Sonos_HauptEG, "ROCK ANTENNE");
    SNS_Play($Sonos_HauptEG);
	
	SNS_SetRadio($Sonos_HauptOG, "ROCK ANTENNE");
    SNS_Play($Sonos_HauptOG);

?&gt;

Ich hoffe du kommst damit klar und gibst mir Rückmeldung.

Falls Fragen oder Probleme auftauchen sollten bitte melden.
Ein schönes Wochende.

Gruß Dani

Hallo Mathias!

Vom KNX aus passt das soweit. Die Werte sind auch laut Skript ok. Siehe Skript Vorlage für Lauter Leiser Zeile 12/19/26.

Dein Problem scheint deine Instanz bzw. Value im IP Symcon zu sein. Diese muss wie in Schritt 2 beschrieben eine Integer mit EIS 2 DIMM Value sein

Schritt 2:
KNX Instanzen mit den GA für jeden Raum anlegen.

KNX Instanz für E/A (EIS1 Switch - Boolean)
KNX Instanz für Lauter/Leiser ( EIS2 DimControl - Integer)

Gruß Dani

Zur Erklärung:

Eine Boolean Variable kann nur 2 Zustände (0 und 1). Diese kann mit dem Wert 9 vom KNX nichts anfangen. Für die Boolean Variable bedeutet der Wert 9 Automatisch 1.

Eine Integer vom Typ EIS2 dimmen hat den Bereich 0-15. Mit diesem wird der Wert 9 vom KNX auch richtig an das Skript übergeben.

Gruß Dani

Guten Morgen!

Also die Küche läuft schonmal :slight_smile:

Ich hab ne Zeit gebraucht bis ich die richtige Instanz für Lauter/Leiser gefunden hatte. Bisher habe einfach immer unter dem Hersteller KNX den jeweiligen Datenpunkt ausgewählt und angelegt - äquivalent zum DPT in der ETS.
Nun habe ich aber unter dem Hersteller KNX/EIB das Gerät „KNX/EIB Device“ gefunden. Dort kann ich den von dir beschriebenen DPT „EIS2 DimControl“ auswählen.
Was ist da der Unterschied? Sollte ich vl sogar alle meine KNX-Instanzen auf solche KNX/EIB-Geräte ändern?

Da mir das mit Lauter/Leiser aber zu schnell ging, habe ich die Werte jetzt von 2% auf 1% geändert.
Allerdings ist mir das immer noch bisschen zu schnell. Wie kann ich das noch weiter verlangsamen? über die Zeit? Welche Variablen müsste ich in dem Skript denn nun verändern? Denn wenn ich die 300ms einfach auf 500ms ändere, dauert ja ein Turnus 1,5s und der Timer startet ja schon nach 1s das Skript neu.
Würde ich sozusagen die 2. Erhöhung dadurch komplett aussperren und hätte nur noch 1 Erhöhung je Zyklus?

<? 

        // In diesem Skript behandeln wir Global wie jede Sonosbox beim Dimm-befehl über KNX die Lautstärke ändern soll. 
         
        //Vorgabe Lauter Leiser in % pro Abfrage 
        $Lauter=1; // hier wird die Prozentzahl eingegeben um wieviel sich die Lautstärke in einem Step (hier im Beispiel 300ms) erhöhen soll 
        $Leiser=-1; // hier wird die Prozentzahl eingegeben um wieviel sich die Lautstärke in einem Step (hier im Beispiel 300ms) veringern soll 
         
        // In den folgenden Schritten wird der Dimm-KNX Wert aus dem Auslöseskript abgefragt und dementsprechend die Aktion auf der Sonosinstanz ausgeführt. 
         
         
        if($KNX_Wert == 9) 
        { 
            //Timer anschalten = Der Timer läuft so lange der KNX Taster gedrückt wird. 
            IPS_SetScriptTimer($_IPS['SELF'], 1); // setzt den Timer auf 1 sekunde. Das Heisst das dieses Skript alle 1s neu aufgerufen wird. 
            //Sonos Lauter 
            SNS_ChangeVolume($Sonos, $Lauter); 
        } 
        elseif ($KNX_Wert == 1) 
        { 
            //Timer anschalten = Der Timer läuft so lange der KNX Taster gedrückt wird. 
            IPS_SetScriptTimer($_IPS['SELF'], 1); 
            //Sonos Leiser 
            SNS_ChangeVolume($Sonos, $Leiser); 
        } 
        elseif ($KNX_Wert == 0) 
        { 
            //Timer ausschalten = Der Timer wird zurückgesetzt wenn der KNX Taster losgelassen wird. 
            IPS_SetScriptTimer($_IPS['SELF'], 0); // Der Skripttimer wird hier wieder auf 0 gesetzt. 
        } 

        ips_sleep(500); // Hier wird die Zeit in ms angegeben wie lange es dauern soll bis die nächste erhöhung bzw. veringerung der Lautstärke stattfindet. 300ms ist aus meinen Erfahrungen Perfekt. 
         
        // Ab hier wird das ganze wiederholt. Der Skripttimer ist auf 1s gestellt. die Pause zwischen den Befehlen beträgt 300ms. Demnach wiederhole ich den Befehl 3mal. 3x300ms=900ms. Nach 1 Sekunde fängt das ganze wieder von vorne an bis der KNX-Taster losgelassen wird. 

        $KNX_Wert; 

        if($KNX_Wert == 9) 
        { 
            SNS_ChangeVolume($Sonos, $Lauter); 
        } 
        elseif ($KNX_Wert == 1) 
        { 
            SNS_ChangeVolume($Sonos, $Leiser); 
        } 
        elseif ($KNX_Wert == 0) 
        { 
            return; 
        } 
         
         ips_sleep(500); 

        $KNX_Wert; 

        if($KNX_Wert == 9) 
        { 
            SNS_ChangeVolume($Sonos, $Lauter); 
        } 
        elseif ($KNX_Wert == 1) 
        { 
            SNS_ChangeVolume($Sonos, $Leiser); 
        } 
        elseif ($KNX_Wert == 0) 
        { 
            return; 
        } 
     
        ?>

Dein Skript für die Favoritenwahl habe ich auch eingepflegt, das geht nun auch.
Wie läuft das jetzt ab mit der Quellenwahl Gruppe vs. Einzelne Instanz? Meinem Verständnis nach muss ich eine neu GA in ETS anlegen, welche mir meinetwegen den Favoriten für „Gruppe EG“ sendet.
Danach erstelle ich in IPS wieder ein Skript mit dem Inhalt der Favoritenwahl, dort trage ich dann allerdings nicht die Sonosinstanz ein, sondern den Gruppenmaster?
Um meinetwegen das einzeln laufende Bad wieder der EG-Gruppe zuzuweisen muss ich ja nur kurz Aus/Ein Schalten. Aber wenn ich dann am Taster im Bad den Sender im ganzen EG ändern will, bräuchte ich diese Funktion dann ja, oder?

Ich werde mich nun ans Hauptbad machen, sollte ja nun alles schon bisschen besser flutschen. :slight_smile:

Wieder mal vielen Dank für deine Arbeit, echt klasse!

Grüße

Hallo Mathias!

Schön zu hören dass du fortschritte machst.
Ich benutze bei mir Nur die Instanz KNX/EIB Device. Bin mit dem immer gut gefahren. Aber im Grunde genommen sollte es eigentlich egal sein wenn du die richtige DPT auswählst. Ich finde die Device feiner zu konfigurieren, einfach anlegen und auswählen.

Zum Thema Lautstärke:
Du kannst den Timer auf 2 sekunden setzten und die Pause auf 500 ms. und unten nochmal einen part dazunehmen. sieht dann so aus:

<?

		// In diesem Skript behandeln wir Global wie jede Sonosbox beim Dimm-befehl über KNX die Lautstärke ändern soll.
		
		//Vorgabe Lauter Leiser in % pro Abfrage
        $Lauter=1; // hier wird die Prozentzahl eingegeben um wieviel sich die Lautstärke in einem Step (hier im Beispiel 500ms) erhöhen soll
		$Leiser=-1; // hier wird die Prozentzahl eingegeben um wieviel sich die Lautstärke in einem Step (hier im Beispiel 500ms) veringern soll
		
		// In den folgenden Schritten wird der Dimm KNX Wert aus dem Auslöseskript abgefragt und dementsprechend die Aktion auf der Sonosinstanz ausgeführt.
		
		
		if($KNX_Wert == 9) 
        {
            //Timer anschalten = Der Timer läuft so lange der KNX Taster gedrückt wird.
            IPS_SetScriptTimer($_IPS['SELF'], 2); // setzt den Timer auf 2 sekunden. Das Heisst das dieses Skript alle 1s neu aufgerufen wird.
            //Sonos Lauter
			SNS_ChangeVolume($Sonos, $Lauter);
        }
        elseif ($KNX_Wert == 1)
        {
            //Timer anschalten = Der Timer läuft so lange der KNX Taster gedrückt wird.
            IPS_SetScriptTimer($_IPS['SELF'], 2);
            //Sonos Leiser
			SNS_ChangeVolume($Sonos, $Leiser);
        }
        elseif ($KNX_Wert == 0)
        {
            //Timer ausschalten = Der Timer wird zurückgesetzt wenn der KNX Taster losgelassen wird.
            IPS_SetScriptTimer($_IPS['SELF'], 0); // Der Skripttimer wird hier wieder auf 0 gesetzt.
        }

        ips_sleep(500); // Hier wird die Zeit in ms angegeben wie lange es dauern soll bis die nächste erhöhung bzw. veringerung der Lautstärke stattfindet. 300ms ist aus meinen Erfahrungen Perfekt.
		
		// Ab hier wird das ganze wiederholt. Der Skripttimer ist auf 1s gestellt. die Pause zwischen den Befehlen beträgt 300ms. Demnach wiederhole ich den Befehl 3mal. 3x300ms=900ms. Nach 1 Sekunde fängt das ganze wieder von vorne an bis der KNX Taster losgelassen wird.

        $KNX_Wert;

        if($KNX_Wert == 9)
        {
            SNS_ChangeVolume($Sonos, $Lauter);
        }
        elseif ($KNX_Wert == 1)
        {
            SNS_ChangeVolume($Sonos, $Leiser);
        }
        elseif ($KNX_Wert == 0)
        {
            return;
        }
		
		 ips_sleep(500);

        $KNX_Wert;

        if($KNX_Wert == 9)
        {
            SNS_ChangeVolume($Sonos, $Lauter);
        }
        elseif ($KNX_Wert == 1)
        {
            SNS_ChangeVolume($Sonos, $Leiser);
        }
        elseif ($KNX_Wert == 0)
        {
            return;
        }
		
		 ips_sleep(500);

        $KNX_Wert;

        if($KNX_Wert == 9)
        {
            SNS_ChangeVolume($Sonos, $Lauter);
        }
        elseif ($KNX_Wert == 1)
        {
            SNS_ChangeVolume($Sonos, $Leiser);
        }
        elseif ($KNX_Wert == 0)
        {
            return;
        }
	
        ?>

Zum Thema Quellenwahl:

Wie läuft das jetzt ab mit der Quellenwahl Gruppe vs. Einzelne Instanz? Meinem Verständnis nach muss ich eine neu GA in ETS anlegen, welche mir meinetwegen den Favoriten für „Gruppe EG“ sendet.

Nein, du musst keine 2te GA anlegen. Ich habe das intern über eine Logik gelöst damit wir uns einen Taster sparen.
In mienem Skript wird in jedem Raum ein Merker verwendet welcher gesetzt wird wenn die Sonosbox einer Gruppe zugeschalten wird.
Skript „Sonosinstanz Ein/Aus“ bzw „Sonosinstanz Mute/Unmute“.

SetValueBoolean($Sonos_Merker, true); // Setzt einen Merker um zu wissen ob bei Auswahl einer Quelle nur diese Instanz oder die Gruppe gewechselt werden soll.

Dieser Merker wird bei dem Skript „Quellenauswahl“ wieder abgefragt und je nach zustand wird automatisch entweder die Gruppe oder die Sonosinstanz selbst gewechselt. (Zeile 22 und 46)

if($Sonos_Merker_Quelle == true) // Wenn vom KNX Taster der EIN Befehl aktiv ist und die Sonosbox in der Gruppe ist werden die Befehle an den Gruppenmaster übergeben.

elseif($Sonos_Merker_Quelle == false) // Wenn vom KNX Taster der AUS Befehl aktiv ist und die Sonosbox "Stand alone" ist werden die Befehle an die Sonos im Raum übergeben.

D.h.: Wenn du in einem Raum am KNX-Taster „EIN“ drückst dann wird diese Sonos der Gruppe hinzugefügt und die Quellenauswahle gilt automatisch für die Gruppe.
Wenn du in einem Raum am KNX-Taster „AUS“ drückst wird die Sonos wieder aus der Gruppe entfernt. Wenn du jetzt die Quellenauswahl betätigst sollte diese nur für die eine Sonos gelten. Auschalten der Box dann einfach wieder über den Befehl „AUS“.

Du hast in der Küche angefangen. Da diese Sonos als Gruppenadmin fürs EG in dem Skript „Sonos Adressen“ angegeben ist wirkt sich eine änderung der Quelle in diesem Raum immer für die ganze Gruppe aus.

Und vergiss nicht: Die 2 Instanzen welche du gerne als Gruppenadmin hättest (Küche und Büro) sollten mit dem Skript „Mute / Unmute“ Ein und ausgeschalten werden, alle anderen mit dem Skript „Ein/AUS“.

Wenn du die Instanz im Hauptbad fertig hast, kannst du dieses Szenario mal testen.

Ich hoffe ich konnte das halbwegs Plausiebel erklären.

Gruß Dani