Sonos Steuerung über KNX+IPS

Bad geht jetzt auch. :loveips:

Das ist ja der Hammer!
Ich hab mir jetzt auch noch 2 Rückmeldungen für Titel und Lautstärke gebastelt, damit mir die aktuellen Werte aufm Display des Tasters angezeigt werden. Bild anbei.

Ich bin völlig begeistert, vor allem die dynamische Steuerung mit der Quellenwahl Gruppe/Einzeln ist ja völlig easy! Jetzt hab ich sogar noch eine Taste meiner 4 verfügbaren frei.

1000 Dank schonmal! :smiley:

Schönen Sonntag.

Grüße Mathias

Ups, Bild vergessen…

Gern geschehen!

Das sieht ja wirklich richtig gut aus!
Ich hoffe ich hab alles in den Skripten gut genug erklärt, damit du die Angst vor Skripten verlierst!
Ich wünsch dir auch ein schönes Wochenende und viel Spaß mit den neuen Funktionen.
Wenn noch Fragen auftauchen einfach melden.

Gruß aus Tirol
Dani

Hallo Dani,

gibt es bei deinem Skript aus #16 für die „Anwesenheit“ eigentlich auch die Möglichkeit, dass nicht immer nur Rock Antenne gewählt wird, sondern die Quelle, welche er vorm stromlos schalten inne hatte?

Hintergrund ist folgender:

Ich habe den Amp im Büro an einer schaltbaren Steckdose zusammen mit den Monitoren von meinem PC.
Jetzt habe ich eine Logik, welche die Steckdosen stromlos schalten, wenn einige Zeit keine Bewegung mehr im Büro war.

Wenn ich wieder rein komme und der PC ist aktiv, werden die Steckdosen auch wieder mit Strom versorgt.

Da ich recht viel im Home-Office arbeite, halte ich mich im Büro auch nur dann auf, wenn der PC läuft, wodurch das für mein Szenario recht viel Sinn macht und auch funktioniert.

Ich habe an der Stelle aber leider keine weitere schaltbare Steckdose zur Verfügung.

Nun Hätte ich aber gerne, dass eben nicht immer nur stur der eine Sender Rockantenne zurück gewählt wird, sondern eben derjenige Sender, welchen ich bei meiner letzten Anwesenheit im Büro aktiviert hatte.

Geht sowas überhaupt?

Außerdem bekomme ich leider eine Fehlermeldung bei diesem Skript, weiß allerdings nicht, woran die Limitierung auf 30 Sekunden liegt.
Leider liegt die Startdauer, bis mein Amp im Büro wieder wieder einsatzbereit ist, bei +37 Sekunden, bis er wieder verfügbar ist.

Vielen Dank für deine Hilfe!

Grüße Mathias

Fehler.jpg

Hallo Mathias!

Sollte normalerweise schon machbar sein. Dazu muss ich nochmal eine „Merker-Variable“ einbauen. Ich habe zur zeit relativ viel um die Ohren, aber ich werde sehen dass ich morgen vielleicht dazu komme.

Bezüglich dem Fehler muss ich nachsehen, dieser ist bei mir in der Testphase nicht vorgekommen.:confused:

Gruß

Dani.

Hallo Dani,

nur keine Eile. :wink:

Ich bin momentan eh intensiv an der Standby-Geschichte bei Abwesenheit bzw. Schlafen dran.
In diesem Zuge hab ich auch mit deinem Skript weiter gemacht.
Da ich den Gruppenkopf im OG zu anderen Bedingungen abschalten lassen will wie den im EG, habe ich als erstes dein Skript in 2 seperate Skripte aufgeteilt.

Bei der 30s-Fehlermeldung hatte ich als erstes getestet, ob es was bringt, wenn ich statt einer Pause mit der Zeit 46S einfach 2 Pausen hintereinander mit je 23 Sekunden ausführen lasse und siehe da:

Es kommt eine andere, neue Fehlermeldung (Siehe Bild).
In meinem Laienhaften PHP/IPS-Verständnis würde ich das so interpretieren, dass die Zeit, welche für die Ausführung eines Skriptes benötigt werden darf, diese 30s-Grenze nicht überschreiten darf?
Woher diese Grenze kommt, weiß ich aber nicht. Bin ich da vl limitiert, weil ich nur die Basic-Lizenz von IPS habe?

Egal, ich bin deshalb nun anderweitig zum Ziel gekommen:

Wird die Steckdose eingeschaltet, löst durch eine KNX-interne Logik mit einr Zeitverzögerung eine weitere GA aus, welche dann als Auslöser für das Skript gilt.
Dadurch konnte ich die Pause aus dem Skript raus nehmen und es geht.
Da ich auf die neue GA durch die Logik immer nur ein „EIN“ sende, wenn die Steckdose eingeschaltet wird (Bei „AUS“ passiert nichts), Musste ich in IPS beim Ereignisauslöser noch auf „Variablenaktualisierung“ umstellen.

Mein Skript fürs EG schaut nun so aus, fürs OG dementsprechend abgeändert:

<? 
    //Zu verändern: 

     // Id`s aus dem Skript "Sonos Adressen" holen 
    include "41213.ips.php"; // ID des Skriptes "Sonos Adressen" eingeben.  
     
    // Eigentlich nicht zu verändern  
     
    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 -:) 
     
     
    IPS_Sleep(1000); // 2 sekunden warten 
    SNS_SetRadio($Sonos_HauptEG, "ROCK ANTENNE"); 
    SNS_Play($Sonos_HauptEG); 
   
?&gt;

Wenn jetzt iwann noch die bereits angesprochene Funktion möglich wird, dass immer der letztgewählte Sender ausgewählt wird, bin ich wunschlos glücklich! :slight_smile:

Grüße

Hallo Mathias!

Fehler Timeout siehe:
https://www.raketenschnecke.net/2013/03/20/ips-tippstricks-scriptlaufzeiten-in-ip-symcon/

Das dürfte ich früher vielleicht mal umgestellt haben. Aber dieses Problem hast du ja bereits über KNX gelöst.

Somit zum Sender Merken:

Du musst dir für die gewünschten Sonosinstanzen jeweils eine Variable vom Typ String anlegen.
In meinem Beispiel „Merker Sender“. In diesen Merker schreiben wir bei jedem Senderwechsel den Aktuellen sender.
Dieser wird dann bei neustart wieder abgefragt. Somit wird der Sender aktiviert welcher vor dem ausschalten aktiv war.

Dazu folgende Schritte:

  1. Die Merker-Variable „Merker Sender“ vom Typ String im gewünschten Raum anlegen.

  2. Skript Quelle Auswählen abändern:
    Unter Zeile Sonos_Merker_Quelle noch folgendes hinzufügen:

$Sonos_Meker_SenderEG=47630 /*[Sonos für Forum\Sonos Küche\Merker Sender]*/;

hier musst du die Angelegte Variable „Merker Sender“ eingeben.

Dann jewiels bei den einzelnen aktionen zusätzlich zum Senderwechsel die Merker Variable beschreiben:

SetValue($Sonos_Meker_SenderEG, "ROCK ANTENNE");

Das sieht im Paket dann so aus:

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);
				 SetValue($Sonos_Meker_SenderEG, "ROCK ANTENNE");
        	}
        	elseif($KNX_Wert == 2)
        	{
				SNS_SetRadio($Sonos_Haupt, "Rockit Radio Switzerland");
           	     SNS_Play($Sonos_Haupt);
				 SetValue($Sonos_Meker_SenderEG, "Rockit Radio Switzerland");
        	}
			elseif($KNX_Wert == 3)
        	{
				SNS_SetRadio($Sonos_Haupt, "FFH Rock");
           	     SNS_Play($Sonos_Haupt);
				 SetValue($Sonos_Meker_SenderEG, "FFH Rock");
        	}
			elseif($KNX_Wert == 4)
        	{
				SNS_SetRadio($Sonos_Haupt, "sunshine live");
           	     SNS_Play($Sonos_Haupt);
				 SetValue($Sonos_Meker_SenderEG, "sunshine live");
        	}
		}
  1. Das Skript „Sonos nach Neustart wieder aktivieren“ abändern:
    Unter der Zeile include folgendes hinzufügen
$Sonos_Meker_SenderEG=GetValue(47630 /*[Sonos für Forum\Sonos Küche\Merker Sender]*/);

Dort wieder die Variable Merker Sender angeben.

Dann noch die Zeile mit SNS_SetRadio folgendermassen abändern:

SNS_SetRadio($Sonos_HauptEG, $Sonos_Meker_SenderEG);

Dann sollte es funktionieren.

Für OG natürlich das ganze nochmal mit OG.

Test bei mir hat funktioniert.

Gruß Dani

Läuft, danke! :smiley:

Hallo zusammen,

mir war das Lautstärke Script etwas zu „sperrig“. Hab mir das mal etwas einfacher gebastelt…

Vielleicht könnt ihr was damit anfangen.

LG

Stephan




<?php

$Sonos = 52234;  // Instanz der Sonos

$VolumeControl = GetValueInteger(35297);
$VolumeControlUpDown = GetValueBoolean(14616);
$VolumeUp='+1';  //Schrittweise Lautstärke hoch
$VolumeDown='-1';


switch ($VolumeControl) 
{
    case 0:
        IPS_SetScriptTimer($_IPS['SELF'], 0);
        break;
    case 1:
        if ($VolumeControlUpDown == TRUE)
        {
            IPS_SetScriptTimer($_IPS['SELF'], 1);
            SNS_ChangeVolume($Sonos,$VolumeUp);
        }
        
        else
        {
            IPS_SetScriptTimer($_IPS['SELF'], 1);
            SNS_ChangeVolume($Sonos,$VolumeDown);
        }
        break;
}


Das ganze dann auf den Integer vom DPT3 (Dimmer Schritt) getriggert…

1 „Gefällt mir“

Hell again :slight_smile:

Hab nochmal was geändert… Jetzt läuft es absolut smooth…

Viel Spaß dabei.



<?php

$Sonos = 52234;  

$VolumeControlUpDown = GetValueBoolean(14616);
$VolumeUp='+1';
$VolumeDown='-1';


while (GetValueInteger(35297) == (1))

{
    
        if ($VolumeControlUpDown == TRUE)
        {
            SNS_ChangeVolume($Sonos,$VolumeUp);
            IPS_Sleep(100);
        }
        
        else
        {
            SNS_ChangeVolume($Sonos,$VolumeDown);
            IPS_Sleep(100);
        }

}


1 „Gefällt mir“

Hallo Zusammen,

nach längerer Zeit Pause bin ich nun dabei, den Play 1 im Gäste-WC zu realisieren.
Als ersten Versuch habe ich ihn einfach starten lassen, wenn jemand ins Klo kam, wenn der PM dann keine Bewegung mehr meldet, sollte er wieder aus gehen.
Er sollte sich dazu in die Gruppe EG eingliedern, also das wiedergeben, was der Gruppenmaster in der Küche abspielt.

Funktioniert auch soweit, allerdings wollte ich das noch verfeinern, weshalb ich im KNX noch ne Logik gebastelt hab:

Er geht nicht an

  • wenn der AV-Receiver an ist
    ODEr
  • Beide Elternteile „schlafen“ (Realisiert duch einfache Tasten im Bad/SZ und noch für viele Andere Sachen sinnvoll)

So ist gewährleistet, dass man während eines Filmabends am Klo immer noch den TV-Sound hört bzw. man nicht noch wacher wird, wenn man nachts mal auf das Klo geht.

Das alles kommt KNX-seitig daher und hat erstmal nichts mit IPS zu tun.

Nun würde ich allerdings noch einen Schritt weiter gehen und benötige da bitte eure Hilfe, vl kann @odermerk mir da nochmal so toll helfen bitte? :wink:

Folgendes Szenario:
Ist der Gruppenmaster im EG nicht gemutet, man hört also etwas, so soll sich der Lautsprecher in die Gruppe eingliedern wie gehabt.
Ist der Gruppenmaster im EG allerdings stumm, so soll der WC-Sonos einen bestimmten Sender starten.

Ist das so ohne weiteres umzusetzen? Mir fehlen da leider nach wie vor die IPS-Kenntnisse. :frowning:

@epogo: Danke für dein Skript. Darf ich fragen, welche Vorteile ich davon habe, im Vergleich zum ursprünglichen Skript von Dani?

Danke für eure Hilfe!

Grüße

Hallo Matte!

Kannst du das bitte näher erklären mit dem PM und dem Start von Sonos.
Das würde nämlich auch gerne so machen, damit mein keine unangenehmen Nebengeräusche hört wenn sich jemand besonders Mühe gibt beim …

Es sollte entweder ein mp3 mit Entspannungsmusik oder ein Radiosender mit eben dieser gestartet werden, und nach verlassen wieder ausgeschalten werden.

Vielen Dank und lg

Hallo cbeham!

Ich bin da folgendermaßen vorgegangen:

Ich habe grundsätzlich in jedem Raum einen PM, in denen ich je einen separaten Schaltblock dafür verwendet habe, eine Art Präsenzerkennung zu realisieren.
Geht man nun in einen Raum, so meldet das der PM, ohne etwas Anderes (wie licht) zu schalten. Diese Schaltblöcke funktionieren auch komplett ohne Abhängigkeit der Helligkeit im Raum oder der Uhrzeit.

Diese Signale habe ich noch verfeinert, z.b.:

  • Im Wohnzimmer meldet eine Logik Präsenz, wenn eben der PM meldet, ODER der TV an ist. So wird vermieden, dass der Bus auf Abwesenheit schaltet, wenn man mal ruhig auf der Couch liegt und TV sieht.
  • Im SZ meldet eine Logik Präsenz, wenn der PM meldet, ODER einer von beiden Personen auf „Schlafen“ ist. Dadurch erkennt das System, dass bei längeren Schlafphasen trotzdem jemand zu Hause ist.

Nun bin ich im Falle des WC´s wie folgt vorgegangen:

Über eine Logik sendet das Präsenzsignal vom PM Ein/Aus auf eine separate GA, welche das Kommando Ein/Aus für den Sonos auf den Bus schickt.
Dass ist quasi die Aufforderung für IPS, den Sonos zu starten. (Screenshot von der Logik anbei)

Ab da läuft in IPS erstmal alles, wie von Dani erstellt. (Screenshots auch anbei)

Die Logiken für KNX habe ich im Gira X1 erstellt.

Grüße

Kann man hier Beiträge nicht bearbeiten? :confused: Hab mich da in nem Satz bisschen verhaspelt… :wink:

Nach 25 Beiträgen, fehlt dir nur noch einer ;).

Ok, danke für die Info! Dann hat sich das ja jetzt erledigt :smiley:

Hallo zusammen,
nachdem das die Sonos Steuerung über KNX nun ne zeitlang ohne Probleme lief, hab ich blöderweise das Sonos Update auf den S2 Controller gemacht. Da ich im Büro noch nen Sonos AMP nutze, welcher für das Update zu alt ist, musste ich nun umständlich erst alles wieder auf S1 zurück setzen.

Ich hab mein Setup soweit auch hinbekommen, allerdings will das Script Favoritenwahl nicht funktionieren und ich weiß nicht, wie ich das wieder zum laufen bekomme.

Das Skript dient dazu, bei Tastendruck über KNX den Radiosender umzuschalten. dabei soll zwischen 4 Sendern gewechselt werden.
Fehlermeldung hängt auch dran.
Anfänglich hatte ich die Meldung mit nem Anderen Sender, den ich nun testweise ausgetasucht hatte, nun kommt das Ganze mit Sunshine Live daher.

Würde mich sehr freuen, wenn mir da jemand auf die Sprünge helfen kann…

Danke!

Skript:

      <? 
         
        // Id`s aus dem Skript "Sonos Adressen" holen 
        include "41213.ips.php"; // ID des Skriptes "Sonos Adressen" eingeben. 
         
        //Werte zum Verändern 
         
        //Wert von KNX Taster holen 
        $KNX_Wert=GetValue(37655); // ID von KNX Taster "Quelle auswählen" von Typ "Integer" eintragen. 
        $Sonos_Merker_Quelle=GetValue(26756);  // Merker vom jeweiligen Raum auswählen um zu wissen ob "Stand alone" oder Gruppe 
        $Sonos_Meker_SenderEG=36490 /*[Sonos für Forum\Sonos Küche\Merker Sender]*/;  
         
        //Instanz Sonos Komponente 
        $Sonos=$Sonos_Kueche; // 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); 
                    SetValue($Sonos_Meker_SenderEG, "ROCK ANTENNE");
            } 
            elseif($KNX_Wert == 2) 
            { 
                SNS_SetRadio($Sonos_Haupt, "Radio BOB!"); 
                    SNS_Play($Sonos_Haupt); 
                    SetValue($Sonos_Meker_SenderEG, "Radio BOB!");
            } 
            elseif($KNX_Wert == 3) 
            { 
                SNS_SetRadio($Sonos_Haupt, "Ibiza Live Radio"); 
                    SNS_Play($Sonos_Haupt); 
                    SetValue($Sonos_Meker_SenderEG, "Ibiza Live Radio");
            } 
            elseif($KNX_Wert == 4) 
            { 
                SNS_SetRadio($Sonos_Haupt, "sunshine live"); 
                    SNS_Play($Sonos_Haupt); 
                    SetValue($Sonos_Meker_SenderEG, "sunshine live");
            } 
        } 
         
        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, "Radio BOB!"); 
                    SNS_Play($Sonos); 
            } 
            elseif($KNX_Wert == 3) 
            { 
                SNS_SetRadio($Sonos, "Ibiza Live Radio"); 
                    SNS_Play($Sonos); 
            } 
            elseif($KNX_Wert == 4) 
            { 
                SNS_SetRadio($Sonos, "sunshine live"); 
                    SNS_Play($Sonos); 
            } 
        } 
        ?&gt;

Sonos.JPG