Homematic Systemvariablen über ein Skript automatisch erzeugen

Homematic Systemvariablen über ein Skript automatisch erzeugen

Viele Homematic Scripte greifen auf Systemvariablen zu, um einen Status auzulesen, Werte abzufragen oder zu hinterlegen. Um diese nicht manuell anlegen zu müssen, besteht die Möglichkeit im Script zu prüfen, ob eine Variable existiert. Falls nicht, kann diese dann direkt automatisch angelegt werden. Des Weiteren zeige ich, wie die Variable mit dem Skript gelöscht werden kann.

Allgemeines zu Systemvariablen

Variablentypen

Systemvariablen sind die Zustandsspeicher (Merker) des Homematic Systems, die z. B. für die Unterscheidung von Zuständen (z. B. Automatik/Manuell) benötigt werden. Es gibt unterschiedliche Variablentypen, die folgendermaßen verwendet werden können:

  • Logikwert: Dieser Variablentyp kann 2 Werte annehmen (true/false), wobei der Text frei vergeben werden kann (z. B. Automatik/Manuell).
  • Werteliste: Dieser Variablentyp kann eine Liste von Werten annehmen, die durch ein Semikolon getrennt werden. Die Variable kann dann auf einen der Werte in dieser Liste gesetzt werden (z. B. Frühling; Sommer; Herbst; Winter).
  • Zahl: Dieser Variablentyp kann positive und negative Zahlenwerte annehmen (z. B. Temperaturwerte werden in diesen Variablentyp geschrieben).
  • Zeichenkette: Dieser Variablentyp kann einen beliebigen Text (String) annehmen.
  • Alarm: Dieser Variablentyp kann 2 Werte annehmen (true/false), wobei der Text frei vergeben werden kann (z. B. ausgelöst/nicht ausgelöst). Wenn der Wert auf true (ausgelöst) gesetzt wird, erfolgt in der Kopfzeile der WebUI unter Alarmmeldungen eine Anzeige.

Variable mit/ohne Kanalzuordnung

Wird eine Systemvariable einem Kanal zugeordnet, taucht sie nicht mehr unter den allgemeinen Systemvariablen auf, sondern wird nur in Verbindung mit dem Kanal angezeigt und kann auch nur dort abgefragt und gesetzt werden. D. h., um diese Systemvariable abzufragen, muss innerhalb eines Programms unter „Bedingung“ der Kanal gewählt werden. Die Variable taucht dann in der nachfolgenden Optionsliste als Option auf. Entsprechendes gilt beim Setzen dieser Variablen unter Aktivität. Wählt man unter „Status und Bedienung“ ein Gerät aus, bei dem eine Systemvariable einem Kanal zugeordnet ist, wird die Variable dann auch beim entsprechenden Kanal mit angezeigt. Ein Anwendungsbeispiel hierzu wäre, den Temperaturwert eines Homematic Heizkörperthermostaten in eine Variable zu schreiben, um die Ist-Temperatur einzusehen, da eine Anzeige der Ist-Temperatur sonst nur über den Homematic Funk-Wandthermostaten möglich ist.

Prüfen, ob eine Variable existiert

string  svName = "VariableName";
object  svObj  = dom.GetObject(svName);

if (svObj){

    !Hier ihr Code, wenn die Varioable existiert

}

Mit dem obigen Skript wird geprüft, ob die Variable mit dem Namen „VariableName“ schon existiert.

Systemvariable erstellen

Zeichenkette

string  svName = "ZEICHENKETTE TEST";
object  svObj  = dom.GetObject(svName);

if (!svObj){  
    object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
    svObj = dom.CreateObject(OT_VARDP);
    svObjects.Add(svObj.ID());
    svObj.Name(svName);  
    svObj.ValueType(ivtString);
    svObj.ValueSubType(istChar8859);
    svObj.DPInfo("Hier kann die Beschreibung der angelegten Variable eingetragen werden");
    svObj.DPArchiv(false)
    svObj.ValueUnit("");
    svObj.State("Hallo Welt");
    svObj.Internal(false);
    svObj.Visible(true);
    dom.RTUpdate(false);
}

Mit dem obigen Skript wird eine Systemvariable vom Typ Zeichenkette angelegt und es wird ein Text eingetragen. Die Variable erhält den Namen „ZEICHENKETTE TEST“ und im Dokumentationsfeld den Eintrag „Hier kann die Beschreibung der angelegten Variable eingetragen werden“. Die Variable erhält nach der Definition über „State“ den Eintrag „Hallo Welt“. Durch den Parameter „DPArchive(true)“ werden alle Veränderungen der Systemvariable ins Systemprotokoll geschrieben. Mit dem Parameter DPArchive(false) werden die Veränderungen der angelegten Systemvariable nicht ins Systemprotokoll geschrieben  Wenn ihr das doch möchtet, einfach den Parameter DPArchive von false auf true ändern.

Zahl

string  svName = "ZAHL TEST";
object  svObj  = dom.GetObject(svName);

if (!svObj){  
    object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);

    svObj = dom.CreateObject(OT_VARDP);
    svObjects.Add(svObj.ID());
    svObj.Name(svName);  
    svObj.ValueType(ivtFloat);
    svObj.ValueSubType(istGeneric);
    svObj.DPInfo("Hier kann die Beschreibung der angelegten Variable eingetragen werden");
    svObj.ValueUnit("°C");
    svObj.ValueMin(-100);
    svObj.ValueMax(100);
    svObj.State(15);
    svObj.Internal(false);
    svObj.Visible(true);
    dom.RTUpdate(false);
}

Mit dem obigen Skript wird eine Systemvariable vom Typ Zahl angelegt und auf den Wert „15“ gesetzt. Die Variable erhält den Namen „ZAHL TEST“ und im Dokumentationsfeld den Eintrag „Hier kann die Beschreibung der angelegten Variable eingetragen werden“. Die Variable wir nach der Definition auf „15“ gesetzt. Im Feld „ValueUnit“ kann ebenfalls ein Wert, beispielsweise wie hier „°C“angegeben werden. In den Feldern „ValueMin“ bzw. „ValueMax“ kann die Spanne der Zahlen von/bis angegeben werden. Mit dem Parameter DPArchive(false) werden die Veränderungen der angelegten Systemvariable nicht ins Systemprotokoll geschrieben  Wenn ihr das doch möchtet, einfach den Parameter DPArchive von false auf true ändern.

Alarm

string  svName = "ALARM TEST";
object  svObj  = dom.GetObject(svName);

if (!svObj){  
    object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
    svObj = dom.CreateObject(OT_VARDP);
    svObjects.Add(svObj.ID());
    svObj.Name(svName);  
    svObj.ValueType(ivtBinary);
    svObj.ValueSubType(istAlarm);
    svObj.ValueName0("nicht ausgelöst");
    svObj.ValueName1("ausgelöst");   
    svObj.AlArm(false);
    svObj.ValueUnit("");
    svObj.DPInfo("Alarm test");
    svObj.DPArchive(false);  
    dom.RTUpdate(false);
}

! Alarm auslösen
! svObj.State(true);
! svObj.DPInfo("Alarm - aktiv");

Mit dem obigen Skript wird eine Systemvariable vom Typ Alarm angelegt und auf den Wert „true“ gesetzt. Die Variable erhält den Namen „ALARM TEST“ und im Dokumentationsfeld den Eintrag „Logische Variable Test“. Die Variable wir nach der Definition auf „true“, also „aktiv“ gesetzt. Mit dem Parameter DPArchive(false) werden die Veränderungen der angelegten Systemvariable nicht ins Systemprotokoll geschrieben  Wenn ihr das doch möchtet, einfach den Parameter DPArchive von false auf true ändern.

Logikwert

string  svName = "BOOL TEST";
object  svObj  = dom.GetObject(svName);

if (!svObj){  
    object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
    svObj = dom.CreateObject(OT_VARDP);
    svObjects.Add(svObj.ID());
    svObj.Name(svName);  
    svObj.ValueType(ivtBinary);
    svObj.ValueSubType(istBool);
    svObj.ValueName0("nicht anwesend");
    svObj.ValueName1("anwesend");   
    svObj.State(true);
    svObj.DPInfo("Hier kann die Beschreibung der angelegten Variable eingetragen werden");
    svObj.DPArchive(false)
    svObj.ValueUnit("");
    dom.RTUpdate(false);
}

Mit dem obigen Skript wird eine Systemvariable vom Typ Logikwert angelegt und auf den Wert „true“ gesetzt. Die Variable erhält den Namen „BOOL TEST“ und im Dokumentationsfeld den Eintrag „Hier kann die Beschreibung der angelegten Variable eingetragen werden“. Die Variable wir nach der Definition auf „false“, also „Alarm inaktiv“ gesetzt. Mit dem Parameter DPArchive(false) werden die Veränderungen der angelegten Systemvariable nicht ins Systemprotokoll geschrieben  Wenn ihr das doch möchtet, einfach den Parameter DPArchive von false auf true ändern.

Werteliste

string  svName = "WERTELISTE TEST";
object  svObj  = dom.GetObject(svName);
if (!svObj){  
    object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
    svObj = dom.CreateObject(OT_VARDP);
    svObjects.Add(svObj.ID());
    svObj.Name(svName);  
    svObj.ValueType(ivtInteger);
    svObj.ValueSubType(istEnum);
    svObj.ValueList("val1;val2;val3");
    svObj.State(1);
    svObj.DPInfo("Hier kann die Beschreibung der angelegten Variable eingetragen werden");
    svObj.DPArchive(false)
    dom.RTUpdate(false);
}

Mit dem obigen Skript wird eine Systemvariable vom Typ Werteliste mit den Werten „val1;val2;val3“ angelegt. Die Variable erhält den Namen „WERTELISTE TEST“ und im Dokumentationsfeld den Eintrag „Hier kann die Beschreibung der angelegten Variable eingetragen werden“. Die Variable wir nach der Definition mit dem Parameter „State(1)“ auf Wert 1, also „val2“ gesetzt.  Die möglichen Werte werden unter „Valuelist“ angegeben. Mit dem Parameter DPArchive(false) werden die Veränderungen der angelegten Systemvariable nicht ins Systemprotokoll geschrieben  Wenn ihr das doch möchtet, einfach den Parameter DPArchive von false auf true ändern.

Systemvariable löschen

Muss aus irgendeinem Grund eine Systemvariable gelöscht werden, kann dies auch direkt mit folgenden Homematic-Skript erledigt werden:

string  svName = "testVarAlarm";
object  svObj  = dom.GetObject(svName);
dom.DeleteObject(svObj.ID());

 

Schreibe einen Kommentar

Menü schließen