Benachrichtigung Alarmanlage Auslöser

Ich habe heute noch eine kleine Optimierung bzw. Zusatz zu meiner Alarmanlage dazu programmiert.

Das ursprüngliche Script, welches ich hierzu abgewandelt habe, bezieht sich eigentlich auf die Rauchmelder um per Push den ausgelösten Rauchmelder als Information zu erhalten. Das Script habe ich wieder einmal im Homematic-Forum gefunden.

Schritt 1: Gewerk anlegen und überprüfen
Für das Script ist es nötig, alle zu prüfenden Fenster / Türkontakte in ein Gewerk zu packen, in meinem Fall Alarmanlage.

Mit folgendem Script (in der CCU -> Programme -> Skript testen), muss das Gewerk überprüft werden, als Ergebnis muss der Gewerkname ausgegeben werden.
Wenn das nicht der Fall ist muss das Gewerk gelöscht werden, die CCU neu starten, Gewerk wieder anlegen, Skript ausführen.

var sec = (dom.GetObject(ID_FUNCTIONS)).Get("Alarmanlage");
WriteLine(sec);

Schritt 2: Kontakte zuordnen
Natürlich müssen dem neuen Gewerk nun auch die Fenster -und Türkontakte zugewiesen werden, die der Alarmanlage zugeordnet sind, ggf. alle verfügbaren Kontakte.
Ich gehe hier aber nun nicht weiter darauf ein, wie das funktioniert 😉

Schritt 3: Systemvariablen
Es gibt eine Pflicht variable, die benötigt wird um später das Benachrichtigungsprogramm zu triggern, in meinem Fall als Variablentyp “Alarm” um das auch in der CCU entsprechend zu signalisieren.

Systemvariable “Alarmanlage ausgelöst” als Alarm

Wenn man das ganze noch per App abrufen möchte oder in der CCU anzeigen lassen möchte, kann man den Auslöser auch noch in eine Zeichenkette ausgeben lassen

Systemvariable “Alarmkontakt” als Zeichenkette

Schritt 4: Alarm-Programm
Nun wird ein neues Programm benötigt, mit dem die Alarm-Variable auf ausgelöst gesetzt wird, als Auslöser werden hier alle Fenster -und Türkontakte definiert.

Klicken zum vergrößern

Unten ist noch ein Script eingebettet, dass wie folgt aussieht:
dom.GetObject('Alarmkontakt').State("");
string list;
list="";

Schritt 5: Benachrichtigungsprogramm
Nun brauch man noch das Programm, welches die Benachrichtigung raushaut auf den Kanälen, die man haben möchte, in meinem Fall ist das pocketControl.

Klicken zum vergrößern

Script zu Erkennung, welcher Kontakt ausgelöst hat:
var sec = (dom.GetObject(ID_FUNCTIONS)).Get("Alarmanlage");
string i;
string list;
list="";
foreach(i,sec.EnumUsedIDs())
{
var item=dom.GetObject(i);
if(item.IsTypeOf(OT_CHANNEL))
{
var dev=dom.GetObject(item.Device());
if( (dev.HssType()=="HmIP-SWDM") || (dev.HssType()=="HM-Sec-SCo") || (dev.HssType()=="HMIP-SWDO") )
{
var state=item.DPByHssDP("STATE");
if(state.Value())
{
list=list+dev.Name();
}
if(state1.Value())
{
list=list+dev.Name();
}
}
}
}
dom.GetObject('Alarmkontakt').State(list);

Script für pocketControl-Push

string PushText = "Die Alarmanlage wurde durch "#list#" ausgelöst!";
dom.GetObject('pocketControlPushMessage').State(PushText);

Natürlich kann man hier auch jede andere Benachrichtigungsart verwenden.
Die verschiedenen Arten sind m.M. nach sehr gut in der Anleitung für das ursprüngliche Script beschrieben.
Das Ergebnis sieht dann wie folgt aus:

Speichere in deinen Favoriten diesen permalink.

4 Kommentare

  1. Hallo
    der Script zu Erkennung, welcher Kontakt ausgelöst hat
    bringt ein Fehler!
    Können Sie mir vieleicht weiter helfen?

    Error 1 at row 18 col 12 near ^.Value())
    {
    list=list+dev.Name();
    }
    }
    }
    }
    dom.GetObject(‘AlarmAusloeser’).State(
    Error 1 at row 18 col 12 near ^.Value())
    {
    list=list+dev.Name();
    }
    }
    }
    }
    dom.GetObject(‘AlarmAusloeser’).State(
    Error 1 at row 18 col 12 near ^.Value())
    {
    list=list+dev.Name();
    }
    }
    }
    }
    dom.GetObject(‘AlarmAusloeser’).State(
    Error 1 at row 18 col 12 near ^.Value())
    {
    list=list+dev.Name();
    }
    }
    }
    }
    dom.GetObject(‘AlarmAusloeser’).State(
    Parse following code failed:
    var sec = (dom.GetObject(ID_FUNCTIONS)).Get(“ALARMANLAGE”);
    string i;
    string list;
    list=””;
    foreach(i,sec.EnumUsedIDs())
    {
    var item=dom.GetObject(i);
    if(item.IsTypeOf(OT_CHANNEL))
    {
    var dev=dom.GetObject(item.Device());
    if( (dev.HssType()==”HmIP-SWDM”) || (dev.HssType()==”HM-Sec-SCo”) || (dev.HssType()==”HMIP-SWDO”) )
    {
    var state=item.DPByHssDP(“STATE”);
    if(state.Value())
    {
    list=list+dev.Name();
    }
    if(state1.Value())
    {
    list=list+dev.Name();
    }
    }
    }
    }
    dom.GetObject(‘AlarmAusloeser’).State(list);

    • Hallo Charalampos,

      hattest du das Gewerk mittels “Script Testen” überprüft?

      var sec = (dom.GetObject(ID_FUNCTIONS)).Get(“AlarmAusloeser”);
      WriteLine(sec);

      Der Fehler deutet darauf hin, dass er das Gewerk nicht findet.

      Aus diesem Grund ist die Überprüfung recht wichtig 🙂

      Gruß

      Janis

  2. Bei mir kommt auch dieser Fehler. Ich habe aus der Zeile
    if(state1.Value()) –> if(state.Value()) gemacht.Und der Fehler war weg.

  3. wie kann ich noch einen anderen Sound inzufügen ?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.