Stern inaktivStern inaktivStern inaktivStern inaktivStern inaktiv
 

Weiterentwicklung eines bereits vorgestellten Programms:

Mit einem einzigen Programm kann eine ganze Reihe von Funkschaltern eingesetzt werden, um bei Betätigung jeweils eine Lampe ein- bzw- auszuschalten.

Das Programm besteht einmal aus einer "großen" Wenn-Bedingung, in der mit ODER die Betätigungen von allen Funkschaltern verknüpft werden, auf die das darauf im Folgenden ausgelöste Script reagieren soll:

 

Das Script selbst muss in der Variable "cfg" konfiguriert werden. Diese Variable ist ein langer String, in dem sich zeilenweise (mit Semikolon / ; getrennt) Paare aus Kanalnamen befinden (mit Komma / , getrennt): zuerst der Name des Funkschalter-Kanals, und dann der Name eines Aktoren-Kanals, dessen Status getoggelt werden soll. Das Script erkennt über das interne Objekt $src$, welcher Funkschalter die Aktion ausgelöst hat, sucht in der Konfiguration den dazu passenden Aktor und toggelt diesen.

! Funkschalter toggelt Deckenlicht
var source = dom.GetObject("$src$");
if (!source) { quit; }
string src_channel=dom.GetObject((source.Channel())).Name();

string cfg = "" #
  "Lichtschalter 2 EG FLUR 2 Funk,Deckenlicht EG FLUR;" #
  "Funkschalter 1 EG FLUR 1,Deckenlicht EG FLUR 1;" #
  "Funkschalter 2 EG FLUR 1,Deckenlicht EG FLUR 1";

string cfgline;

foreach (cfgline, cfg.Split(";"))  {
  string on_channel = cfgline.StrValueByIndex(",",0);
  string toggle_channel = cfgline.StrValueByIndex(",",1);

  if (src_channel == on_channel) {
    var o = dom.GetObject(toggle_channel).DPByHssDP("STATE");
    o.State(!(o.State()));
    quit;
  }
}


Voraussetzung ist: die Aktoren-Kanäle müssen über einen Datenpunkt "STATE" verfügen, der mit einem booleschen Wert den Status toggelt. Ich setze hier z. B. einen HM-SwI-3-FM ein.

Etwas schade ist, dass der Weg vom Funkschalter zur Zentrale über ein Programm zum Aktor spürbar lange dauert und der Aktor nicht mehr "gefühlt sofort", sondern mit spürbarer Verzögerung agiert. Ich muss trotzdem damit leben, denn ich kann keine Direktverknüpfung von einem Funk- zu einem Wired-Gerät schalten.