Nachdem das Thema nun in letzter Zeit öfter vorgekommen ist, wollte ich mich nun mit einem weiteren Script snippet beschäftigen.

Die beiden typischen Fälle, in denen dieses Script benötigt werden könnte, sind

Das Smarthome auf “offene Fenster” oder “offene Türen” prüfen.

oder

Den ausgelösten Bewegungsmelder melden

In beiden Fällen ist es hilfreich, den auslösenden Sensor zu bestimmten und in eine Variable zu schreiben. Wenn wir bei den Beispielvariablen der letzten drei Lektionen bleiben wollen, ist das Grundscript dafür, das Folgende.

var a = dom.GetObject(dom.GetObject("$src$").Device());
dom.GetObject("SYSTEMVARIABLE").State(a);

In diesem Script wird auch hier wieder die interne Variable “a” verwendet, um ein Gerät ausfindig zu machen. Allerdings wird hierbei nicht der direkte Kanal angesprochen, sondern die Quelle bzw. der Auslöser, der das Programm startet.

Im folgenden Programmbeispiel habe ich mehrere Bewegungsmelder, von denen jeder einzelne auslösen kann. Sobald einer auslöst, startet genau dieser “Auslöser” das Script. Das Script erkennt mit der ersten Zeile, um welches Gerät es sich handelt, und schreibt den Gerätenamen in die Sytemvariable aus der zweiten Zeile.

Wer in den letzten drei Lektionen daran gewöhnt ist, das Programm mit “WriteLine()” zu testen, wird hier sich hier wundern, dass das nicht funktioniert. Das Script benötigt einen Auslöser. Ohne diesen wird keine Variable befüllt.


Fertige Scripte:

  • Nach dem selben Prinzip funktioniert auch das Script von Christian Lütgens, welches die erkannte Bewegung als Email meldet.
  • Ebenso gibts im Homematic-Forum auch schon ein fertiges Script, um offene Fenster bzw. Türen zu prüfen.

In Facebook hat Bastian Kochsiek ein Script erarbeitet, welches die TFK auf Sabotage und Zustand prüft

object o_dp = dom.GetObject ("$src$");
if (o_dp) {
string s_status = "geschlossen;offen;Sabotage".StrValueByIndex (";", o_dp.Value());
object o_channel = dom.GetObject (o_dp.Device());
string s_channel = o_channel.Name();
string s_subject = s_channel # " " # s_status;
string s_body = "ALARM!!! " # s_channel # " hat Alarm ausgelöst. Der TFK ist jetzt " # s_status # ".";

dom.GetObject (SYSTEMVARIABLE").State (s_body);
}

 

Wer die erarbeitete Systemvariable noch per Telegram versenden möchte, kann hier im Homematic-Forum gucken. Sobald ich dazu komme, erstelle ich hierüber noch einen extra Beitrag.

Print Friendly, PDF & Email

Ein Kommentar

Kommentar schreiben