Master/Slave-Schaltung mit Steckdosen homematic

Hallo,

ich komme nicht weiter. Ich habe 5 Funksteckdosen von Homematic. Wenn ich eine Steckdose per Hand an-/ausschalte, sollen alle anderen das gleiche tun. Dazu habe ich den Zustand der Dosen überwacht und löse einen Skript aus, wenn eine Dose ein-/ausgeschalten wird. Leider endet das in einem Loop.

<?

$sonoswohnzimmer = GetValue(32439); 

if($sonosa == true) 

{
echo "Sonos ausgeschalten";
HM_WriteValueBoolean(44144, "STATE", false); //Sonos A
HM_WriteValueBoolean(40502, "STATE", false); //Sonos L
HM_WriteValueBoolean(33679, "STATE", false); //Sonos B
HM_WriteValueBoolean(22176, "STATE", false); //Sonos K
HM_WriteValueBoolean(38709, "STATE", false); //Sonos W
}

if($sonosa == false) 

{
echo "Sonos angeschalten";
HM_WriteValueBoolean(44144, "STATE", true); //Sonos A
HM_WriteValueBoolean(40502, "STATE", true); //Sonos L
HM_WriteValueBoolean(33679, "STATE", true); //Sonos B
HM_WriteValueBoolean(22176, "STATE", true); //Sonos K
HM_WriteValueBoolean(38709, "STATE", true); //Sonos W
}
?>

z.B.: Wenn Sonos A angeschalten wird, gehen alle an, jedoch löst der gleiche angepasste Skript bei Sonos L aus, weil sich die Variable ändert, dass dieser wieder ausgeschalten wird und so weiter.

Hat jemand eine Idee, wie ich das umgehen kann?

Gruß oekomat

Moin!

Spontan wäre eine einfache Variante, dass das Skript nur alle X Sekunden ausgeführt werden kann. Also einfach am Anfang vom Skript die letzte Ausführung abfangen und wenn kleiner X, dann raus aus dem Skript, ansonsten abarbeiten.

Grüße, Chris

Hat das den Grund das Du extra Strom Sparen willst das Du versuchst das mit Homematic zu lösen? Ansonsten lass doch den Sonos auch an und steuere so was über die Sonos Funktionen. Oder willst Du wenn ein bestimmter Sonos aus ist alle anderen Sonos vom Strom nehmen warum auch immer? Dann würde ich als Trigger nicht den Strom vom Sonos Wohnzimmer nehmen sondern den Zustand ob dieser was abspielt oder nicht. Eigentlich würde ich persönlich die Sonos einfach anlassen anstatt diese vom Strom zu nehmen aber das musst Du wissen.

Durch das ständige ein und ausschalten des Sonos muss dieser ja auch jedesmal erst wieder eine komplette Netzwerkverbindung zu allen anderen Sonos aufbauen, das dauert auch ein wenig. Wenn die Sonos vom Strom sind kannst Du z.B. nicht bei einem Event mal schnell eine Nachricht auf einem der Sonos ausgeben lassen, da musst Du dann immer warten bis dieser wirklich einsatzbereit ist.

Hay. Ja, solange ich noch keine PV Anlage zum Eigenverbrauch installiert habe, soll Stromsparen im Vordergrund stehen. Der boot jedesmal beim einschalten dauert ca 1min und ist für mich nicht relevant. Soweit ich weiss verbrauchen die Boxen bis zu 15watt im standby. Mir ist auch nicht bekannt,dass ich die Play1 über Sonos abschalten kann. Wenn du Hinweise dazu hast,würde ich mich über Hinweise freuen.

Gesendet von meinem SM-G930F mit Tapatalk

Ne mir fällt nix ein und für mich ist das hochfahren auch relevant deshalb sind die bei mir an. Aber wenn Du Strom Sparen willst Du prüfe wie gesagt mit dem Sonos Modul auf den aktuellen Status und wenn die Box nichts abspielt kannst Du diese ja ausschalten. Das kannst Du je nachdem wie Du das gerne hast ja auch für jede Box einzeln Prüfen mit einem Ereignis. Musst halt nur beachten das Du dann jedes mal wenn Du auch Sonos über IP-Symcon steuern willst vorher erst mal mit Vorlauf den Strom anschaltest.

Schade, denn das wäre mal eine gute Funktion gewesen. Mit dem triggern wenn was spielt, stelle ich mir schwierig vor. Beispiel:
Ich schalte einen sonos im Kinderzimmer ein, das gestartete Hörspiel ist zu ende und er geht aus. Dann würde mich der erneute boot schon stören, bevor ich ein neues Hörspiel starten kann. Auch muss ich dann den Sonos in der Küche manuell starten, wenn ich das Hörspiel vom Kinderzimmer in die Küche verlagern will.
Ich handhabe es immer so, wenn ich sonos brauche, schalte ich irgendeinen ein und habe alle Funktionen solange ich keinen Sonos mehr brauche weil ich z.b. das Haus verlasse.

mit Mobilgerät geantwortet

Nun ja wenn Du die sowieso von Hand ein und ausschaltest und nur die anderen Boxen das gleiche machen sollen dann reicht ja eine Boolean Variable. Also Aktion Skript schaltest Du bei ein alle ein und bei aus alle aus. Das Einzige was Du dann noch machen musst ist auf jeden Status der Steckdosen ein Event zu legen bei Variablen Aktualisierung.

Dann führst Du ein einziges Skript aus, das sorgt dafür wenn eine Dose ausgeschaltet wird das sich auch alle anderen ausschalten.

Das müsste dann wohl so in der Art aussehen


    $sonosA = GetValue(IPS_GetObjectIDByIdent("STATE", 44144));
	$sonosL = GetValue(IPS_GetObjectIDByIdent("STATE", 40502));
	$sonosB = GetValue(IPS_GetObjectIDByIdent("STATE", 33679));
	$sonosK = GetValue(IPS_GetObjectIDByIdent("STATE", 22176));
	$sonosW = GetValue(IPS_GetObjectIDByIdent("STATE", 38709));
	
	if(!$sonosA || !$sonosL || !$sonosB || !$sonosK || !$sonosW)
	{
		HM_WriteValueBoolean(44144, "STATE", false); //Sonos A 
		HM_WriteValueBoolean(40502, "STATE", false); //Sonos L 
		HM_WriteValueBoolean(33679, "STATE", false); //Sonos B 
		HM_WriteValueBoolean(22176, "STATE", false); //Sonos K 
		HM_WriteValueBoolean(38709, "STATE", false); //Sonos W 
	}


Irgendwie ist mir nicht klar, wie ich dann den Skrips auslösen lasse. ich müsste an jeder der 5 Boxen den zustand überwachen lassen, oder? Welche ich einschalte, soll ja egal sein. Wichtig ist ja nur, dass alle anderen dann in den gleichen Status gehen, wie die whallos ein-/ausgeschaltete Box.

gruß oekomat

Ja Du hast ein einziges Skript das wird immer ausgeführt wenn sich bei einem der Aktoren der Zustand der Variable aktualisiert. Das Skript fragt dann immer den Zustand ab und macht dann was passendes was Du willst.
Du hast also ein Skript markierst dies CTRL+4 fügst ein Ereignis hinzu bei Variablen Aktualisierung und wählst die passende Variable des Aktors. Das ganze wiederholst Du so oft wie die Aktoren hast die Du überwachen willst. Als Ergebnis solltest Du jetzt ein Skript mit mehreren Ereignissen darunter haben und das Skript wird dann jedes mal ausgeführt wenn einer der Aktor eine Variablen Aktualisierung erfährt.

So hab ich es. Problem:

W schalte ich an, dann wird der Skript ausgelöst und schaltet die anderen 4 an. da sich bei A auch die Variable durch das anschalten aktualisiert, läuft das Skript wieder von vorn und schalten W wieder aus. da sich bei L, B und K auch die Variablen ändern, läuft der Skript immer wieder von vorn.

Hallo,

so sollte es funktionieren.
Steckdose 1 bis 3 sind deine Sonosboxen, unter diesen jeweils ein Ereignis bei Variablenänderung mit folgenden Inhalt:

IPS_RunScriptEx(31382, Array(„id“ => $_IPS[‚VARIABLE‘], „value“ => $_IPS[‚VALUE‘])
);

Dann ein Script anlegen mit folgenden Inhalt und eine zusätzliche Variable (String) .

$id = $_IPS[‚id‘];
$value = $_IPS[‚value‘];
echo $id . " Value " . $value;
$zeit1 = 15;
if (getvalue(52742 /[TestForum\StatusSteckdose]/) == „“ )
{
if ($value)
// hier könnteste Du auch die ID sowie das value vom Script reinschreiben
setvalue(52742 /[TestForum\StatusSteckdose]/ , „AN“);
else
setvalue(52742 /[TestForum\StatusSteckdose]/ , „AUS“);

IPS_SetScriptTimer($_IPS['SELF'], $zeit1);	
setvalue (39659 /*[TestForum\Steckdose2]*/,$value);
setvalue (23201 /*[TestForum\Steckdose3]*/,$value);
setvalue (13117 /*[TestForum\Steckdoese1]*/,$value);

}

if($_IPS[‚SENDER‘] == „TimerEvent“)
{ IPS_LogMessage(„fern“, „TimerEvent“);
setvalue(52742 /[TestForum\StatusSteckdose]/, „“);
IPS_SetScriptTimer($_IPS[‚SELF‘], 0);
}

return;

Du schaltest eine Steckdose an und die anderen werden eingeschaltet, wenn du in der Zeit vom Timer wieder einen ausschaltet bleiben die andern trotzden an. Nach Ablauf der Timerzeit wenn Du dann wieder An oder Aus schaltest
beginnt das Speil von vorne.

VG
Ralf

Weil es mir gerade auffiel, habe ich den Fred gemeldet. Hat ja nicht mal ansatzweise mit einer Wechselschaltung zu tun, eher Master/Slave, o.ä. :cool:

Vielleicht erhört mich jemand und der Titel wird geändert.

PS: Für Skripte im Beitrag gibt es das Blatt mit php, dann kann der Text formatiert werden und es bleibt übersichtlich.

Z.B. Anfang und Ende des obigen Skripts

$id = $_IPS['id'];

....

return; 

Gruß
Bruno

php_symcon.JPG

Danke Bruno,

da sieht man, dass ich noch nicht viel Beiträge verfasst habe.

VG
Ralf

ich sehe Master Slave eher so, dass es nur Master gibt und mehrere Slave. Bei einer Wechselschaltung sind alle Schalter gleichberechtigt. So sollte es auch bei mir sein. Egal welcher Schalter genutzt wird, es sollen dann alle anderen eingeschalten werden. Vielleicht irre ich mich aber auch :confused:

Gruß oekomat

Wechselschaltung ist halt (für mich) ein klar definiertes Ding: Zwei Schalter betätigen einen Verbraucher.

Hier sind fünf Funksteckdosen, die in einer gewissen Abhängigkeit geschaltet werden sollen. Daher ist die, die betätigt wird, der Master bzw. löst das Skript aus und die anderen „laufen“ hinterher.

Sicher kann man das auch anders nennen, eine Wechselschaltung ist es aber nicht. Es gibt auch keine Wechselschaltung mit fünf Schaltern. Da müssten dann drei als Kreuzschaltung bezeichnet werden … noch mehr Verwirrung :wink:

Danke für eure Tipps, ich habe es jetzt hinbekommen. Ich lasse jeden Status eines Schalters mit einem eigenen Skrips überwachen.

Beispiel:

Wenn Sonos A an, dann ob alle anderen aus sind und schalte sie ein . . . oder beim ausschalten alles umgekehrt.

Bei Bedarf kann ich auch den Skript mal posten.

Gruß oekomat