⚙️Programme und HomeMatic-Skript
In der WebUI baut man Programme aus Wenn-Bedingungen und Dann/Sonst-Aktivitäten. Ausgeführt werden sie von der Logikschicht ReGaHss – die auch HomeMatic-Skript versteht. Hier läuft beides in einer eigenen, vereinfachten Engine für ein erfundenes Beispielhaus.
🧠Die drei Auslösearten
Das Programm startet nur, wenn sich der Wert ändert (Fenster zu → offen). Wiederholt das Gerät denselben Zustand, passiert nichts.
Startet bei jeder Meldung, auch mit gleichem Wert – nötig für Tastendrücke (PRESS_SHORT ist immer true).
Löst nie aus, wird aber mitgeprüft, wenn eine andere Bedingung das Programm gestartet hat (z. B. „um 22:00 und Fenster zu“).
🏠Simulator: Programme im Beispielhaus
! Steckdose umschalten
var sd = dom.GetObject("HmIP-RF.000A1BE9A00003:3.STATE");
if (sd.State()) {
sd.State(false);
WriteLine("Steckdose war an – jetzt aus");
} else {
sd.State(true);
WriteLine("Steckdose eingeschaltet");
}Löse links ein Ereignis aus – z. B. „Fenster öffnen“ oder „Taster kurz“ – oder spule auf 22:00 vor.
Nachgebildete Regeln: Bedingungsblöcke sind ODER-verknüpft, Bedingungen innerhalb eines Blocks UND; verzögerte Aktivitäten starten bei erneutem Auslösen neu; Verschachtelungen über 8 Ebenen werden als mögliche Endlosschleife abgebrochen. Die echte ReGaHss hat weitere Feinheiten (z. B. „Sonst, wenn“-Blöcke, Zeitmodul mit Serien).
📜HomeMatic-Skript – Grundlagen
Skripte laufen in der ReGaHss – als Aktivität „Skript ausführen“ in einem Programm oder zum Testen unter „Programme → Skript testen“. Zugriff auf Geräte und Variablen geht über das Objektmodell dom:
dom.GetObject("HmIP-RF.000A1BE9A00001:1.ACTUAL_TEMPERATURE")– Datenpunkt holen.State()lesen,.State(wert)schreiben (löst Funk aus!)dom.GetObject(ID_SYSTEM_VARIABLES).Get("Anwesenheit")– Systemvariable.Value()lesen,WriteLine(…)gibt Text aus,#verkettet Texte- Kommentare beginnen mit
!, Anweisungen enden mit;
! Beispiel: Heizung absenken, wenn Fenster offen
var fenster = dom.GetObject("HmIP-RF.000A1BE9A00002:1.STATE");
var soll = dom.GetObject("HmIP-RF.000A1BE9A00001:1.SET_POINT_TEMPERATURE");
if (fenster.State() == 1) {
soll.State(12.0);
WriteLine("Fenster offen → 12 °C");
} else {
WriteLine("Fenster zu");
}🧪Skript-Spielwiese
Noch nicht ausgeführt.