Anfängefrage, 2 Schalter ein Verbraucher

Hallo Zusammen,

ich habe seit einiger Zeit IPS installiert und mich so einigermaßen zu recht gefunden. Nun scheiter ich an einem Problem. Ich möchte eineLampe mit zwei Schaltern (eigentlich eine simple Wechselschaltung) über FS20 schalten.

Meine Idee war folgend, die aber nicht geht:


FS20_SwitchMode(30618 /*[0 KG\Bar\Regal_LA]*/  	 , GetValueBoolean(27439 /*[0 KG\Bar\Fernbedienung\TA01]*/));
FS20_SwitchMode(30618 /*[0 KG\Bar\Regal_LA]*/  	 , GetValueBoolean (54556 /*[0 KG\Bar\TEMP\Status]*/ ));

da hat immer ein Schalter irgendwie Vorrang.

Danke für die Hilfe

Hallo BOAZ und willkommen im Forum

Klar… SwitchMode schaltet den Verbraucher. Wenn du SwitchMode zwei mal verwendest wird der Verbraucher zwei mal geschaltet. Erst auf den Wert des einen Schalters und dann auf den des Anderen. Logisch was dann passiert? Der Verbraucher hat den Wert von „KG\Bar\TEMP\Status“. Vielleicht haste mal Glück und das klappt mal durch Zufall. Dann ist im Funk-Kuddelmuddel mal eine Nachricht verloren gegangen.

Du brauchst zwei Scripte. Das eine enthält die erste Zeile und das andere die zweite Zeile. Dann triggerst du das script mit der ersten Zeile auf die Variable „KG\Bar\Fernbedienung\TA01“ (onChange) und das Script mit der zweiten Zeile (auch onChange) auf die Variable „KG\Bar\TEMP\Status“.

Fertig.

Gruß,

Toni

Danke für die schlnelle Antwort werde ich gleich probieren.

… oder so (ein Skript > n Schalter, ein Verbraucher):

$id_aktor = 22873;
$id_event = $IPS_VARIABLE;
FS20_SwitchMode($id_aktor, GetValue($id_event));

Trigger: x-beliebige FB oder PIR mit „TRUE“ oder „FALSE“ > „Bei Variablenänderung“ pro Sender

Einfacher geht es nimmer …

MST

Als Einzeiler:

FS20_SwitchMode(22873, GetValue($IPS_VARIABLE));

… nee noch einfacher:

FS20_SwitchMode(12345, $IPS_VALUE);

Erklärung:
12345 ist die ID des zu schaltenden Aktor
$IPS_VALUE enthält den aktuelle Wert der Variablen, die das Skript triggert.
Diese wird als Befehl an den Aktor gesendet: also AN oder AUS
Das Ganze funktioniert natürlich auch mit der HomeMatic oder kabelgebundenen Systeme.

Und als Treppenhaus-Schaltung (jeder Tast-Befehl toggelt den Aktor):

FS20_SwitchMode(12345, !GetValue(67890));

Wobei: 67890 die Staus-ID des zu schaltenden Aktors ist.

Alles klar ? :rolleyes:

MST

FS20_SwitchMode(12345, !GetValue(67890));

Das ist natürlich schon ziemlich cool… :cool:

Aber ich hab bei solchen Beispielen immer ein bissel Bauchschmerzen mit der Nachvollziehbarkeit für Neulinge. Nicht, das IPS am Ende den Ruf bekommt ein „abgefahrenes Freak-Spielzeug“ zu sein weil eben diese Neulinge absolut nicht mehr durchsteigen… :rolleyes:

„Einfach“ ist eben doch relativ. Micro-Code ist nicht einfacher… nur kürzer…

Toni

… mal abwarten, was BOAZ3 dazu sagt …

… Und alle die, die diesen Thread zukünftig ausgraben werden :wink:

ich bin ja von den regen Ideen beeindruckt und habe diese Variante

FS20_SwitchMode(12345, !GetValue(67890));

gleich probiert. Sie Funktioniert auch, bis auf eine kleine Sache. Da ich keine doppelte Kennzahl auf den Tasten habe, ist irgendwann bei EIN AUS und umgekehrt.

Ist aber nicht so Problematisch. Totzem vielen Dank für die schelle Hilfe

„EIN AUS und umgekehrt“ > völlig richtig, weil „toggle“
dann hier besser:
FS20_SwitchMode(12345, $IPS_VALUE);

MST

Ich habe gerade noch ein wenig herum gespielt. Dabei sind 2 scripte herausgekommen

if (GetValue (33385 /*[0 KG\Bar\Regal_LA\Status]*/ ) == true)
	{
	FS20_SwitchMode(30618 /*[0 KG\Bar\Regal_LA]*/, false);
	}

wobei ich einmal die Schalter bei true und false auslösen lasse.

… ja Toni, Du hattest leider Recht:

FS20_SwitchMode(12345, $IPS_VALUE);

versteht keiner :mad:

MST

Eure Skrip-Zeilen sind sehr lehrreich für mich … aber … ich als DAU mache das ganz einfach anders …
und lege die zwei (Hardware-) Schalter einfach auf die gleiche Adresse und lege im IPS noch einen 3. Schalter mit dieser Adresse an. Ist das nicht viel einfacher? Also z.B. Lampe Adresse = 1111, Schalter 1 = 1111 und Schalter 2 = 1111, sowie die IPS Instanz FS20_Sender =1111. Mache ich da was falsch? bei mir funktioniert es so aber auch. Egal ob Toggle oder Switch Modus. Somit brauche ich für gleiche Funktionalität gar kein Skript habe aber trotzdem die Möglichkeit den Aktor trotzdem über das WebFront zu schalten, sowie über beliebige Fernbedienungen.

Das ist genauso richtig. Unser Code ist nur Systemunabhängiger. Aber mit dem FS20-Weg ist es natürlich genauso gut :slight_smile:

Hier noch etwas für alle Liebhaber, die es noch universeller wollen:


 $id = 33821 /*[FS20 Empfänger]*/;
 FS20_SwitchMode($id, !GetValue(IPS_GetStatusVariableID($id, "StatusVariable")));

 //Wenn das Skript direkt unterhalb der Instanz liegt, geht auch folgendes:
 //Dann braucht man gar keine ID mehr.
 $obj = IPS_GetObject($IPS_SELF);
 $id = $obj['ParentID'];
 FS20_SwitchMode($id, !GetValue(IPS_GetStatusVariableID($id, "StatusVariable")));


paresy

Hallo Paresy,

wo steht denn der Befehl „IPS_GetStatusVariableID“ in der Doku?
Den hab ich ja noch nie „gefunden“, was aber an der Art und Weise der Doku liegen könnte, da mir eine Art „Stich- bzw.Schlagwortverzeichnis“ fehlt. manchmal finde ich im Forum Befehle, deren Syntax ich in der Doku suche, aber erst mal alle unterpunkte der Doku einzeln öffnen muss, bevor ich in vielleicht finde. Aber bei dem oben genannten ist mir das wieder mal nicht gelungen :wink:

– Edit –

Korrektur … Befehl in der Doku theoretisch gefunden … aber die Anleitung dahinter scheint falsch verlinkt zu sein … siehe Screenshot.

Da hat sich aber einer beim Fragezeichen Mühe gegeben ;).
Eine Übersicht aller normalen Befehle findest Du direkt unter Befehlsreferenz - IP-Symcon :: Automatisierungssoftware. Mit Strg+F kannst Du da auch wunderbar suchen. Dass da der Inhalt falsch ist liegt daran, dass wir am Anfang alle Seiten in der Doku mit diesem Text als Vorlage zum ändern kopiert haben. Leider wurde hier und da mal übersehen, dass der Text noch fehlt. Sind halt schon über 400 Seiten. Wenn Du wissen willst, welche Parameter ein Befehl hat, kannst Du im Skripteditor den Anfang des Befehls eingeben und Strg+Space drücken. Dann bekommst Du eine Liste von Befehlen, die so anfangen, mit zu übergebenden Variablen.