Howto - Erkennen von Fenster- und Türzuständen (per zPNP)

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Antworten
dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Howto - Erkennen von Fenster- und Türzuständen (per zPNP)

Beitrag von dtp » 29.07.2021, 07:38

Hier zwei Programme, die ich zum Erkennen der Fenster- und Türenzustände unter Nutzung meines zPNP verwende.

Das erste Programm dient zum Erkennen von offenen oder gekippten Fenstern beim Abschließen der Haustür.
2018-09-21_17h48_15.png
Und das zugehörige Skript:

Code: Alles auswählen

! Meldung Fenster/Türen schließen
! Version 2.9.2, Autor: dtp

! Liste der Gewerke für die Türen- und Fenster-Sensoren (trennen mit "\t")
string tradesList = "Verschluss";

! Listen geöffneter und gekippter Fenster und Türen, die nicht berücksichtigt werden sollen (trennen mit "\t")
string exTiltList = "UG Keller Fenster"; ! gekippte Fenster und Türen
string exOpenList = ""; ! geöffnete Fenster und Türen

! Schlüsselbegriffe von Fenstern und Türen mit Priorität 2 (trennen mit "\t")
string highPrioKeywordsList = "EG\tUG";

! Namen der verwendeten Systemvariablen
string svPushText = "CCU SV Push Text"; ! gem. zPNS-xx, obligatorisch
string svPushPrio = "CCU SV Push Prio"; ! gem. zPNS-xx, obligatorisch
string svPushoverSound = "CCU SV Pushover Sound"; ! gem. zPNS-Po, optional

! Name des zentralen Push-Nachrichten-Programms
string zPNP = "CCU PRG Push-Nachrichten"; ! obligatorisch

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

! +++++ Deklaration weiterer Variablen +++++
var device;
string trade; string index; string list = ""; string stateList = ""; string message; string highPrioKeyword; 
integer prio = 0;

! +++++ Sound für Pushover-Nachricht +++++
if(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)).State("alien");}

! +++++ Auslesen der Fenster- und Türenzustände und Erzeugen einer Liste +++++
foreach(trade, tradesList){
  foreach(index, dom.GetObject(ID_FUNCTIONS).Get(trade).EnumUsedIDs()){
    if(dom.GetObject(index).IsTypeOf(OT_CHANNEL)){
      device = dom.GetObject(dom.GetObject(index).Device());
      if(!exTiltList.Contains(device.Name())){
        if((device.HssType() == "HM-Sec-RHS") || (device.HssType() == "HmIP-SRH")){
          if(dom.GetObject(index).DPByHssDP("STATE").Value() == 1){
            list = list#"\n- "#device.Name()#"<font color=orange> gekippt</font>.";
            stateList = stateList#dom.GetObject(index).DPByHssDP("STATE").Value();
          }
        }
      }
      if((!exOpenList.Contains(device.Name())) || (!exOpenList.Contains((device.Channel()).Name()))){
        if((device.HssType() == "HM-Sec-RHS") || (device.HssType() == "HmIP-SRH")){
          if(dom.GetObject(index).DPByHssDP("STATE").Value() == 2){
            list = list#"\n- "#device.Name()#"<font color=red> offen</font>.";
            stateList = stateList#dom.GetObject(index).DPByHssDP("STATE").Value();
          }
        }
        if((device.HssType() == "HM-Sec-SC") || (device.HssType() == "HM-Sec-SC-2") || (device.HssType() == "HM-Sec-SCo") || (device.HssType() == "HMIP-SWDO")){
          if((dom.GetObject(index).DPByHssDP("STATE").Value() == 1) || (dom.GetObject(index).DPByHssDP("STATE").Value() == true)){
            list = list#"\n- "#device.Name()#"<font color=red> offen</font>.";
            stateList = stateList#"2";
          }
        }
        if((device.HssType() == "HmIPW-FIO6")){
          if(dom.GetObject(index).DPByHssDP("STATE").Value() == true){
            list = list#"\n- "#(device.Channel()).Name()#"<font color=red> offen</font>.";
            stateList = stateList#"2";
          }
        }
      }
    }
  }
}

! +++++ Setzen der Priorität in Abhängigkeit vom Zustand der Fenster und Türen sowie der Schlüsselbegriffe +++++
if(stateList.Contains("2")){
  foreach(highPrioKeyword, highPrioKeywordsList){
    if((list.Trim().StrValueByIndex("\n", stateList.Trim().Find("2"))).Contains(highPrioKeyword)){prio = 2; break;} 
  }
  if(prio != 2){prio = 1;}
}
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State(prio);

! +++++ Erzeugen der Nachricht +++++
if(prio == 2){message = "<font color=red>Achtung, Fenster/Türen schließen!</font>";}
else{message = "<font color=orange>Achtung, Fenster/Türen schließen!</font>";}

if(list != ""){
  message = message#list;
  
  ! +++++ zPNP ausführen +++++
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
  (dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
}
Mit den Skriptvarialben "exTiltList" und "exOpenList" kann man die Erkennung bestimmter gekippter und geöffneter Fenster oder Türen ausschließen. Das ist z.B. sinnvoll, wenn man über ein geöffnetes Garagentor oder ein gekipptes Kellerfenster nicht informiert werden möchte.

Hier eine Beispiel für eine entsprechende Push-Nachricht (siehe roter Rahmen).
Fenster_Abschließen.PNG
Das zweite Programm verwende ich zum Erfassen sämlticher Fenstern und Türen des Hauses, die während der Abwesenheit betätigt werden könnten.
2017-03-11_14h18_32.png
2017-03-11_14h19_09.png
Das zugehörige Skript:

Code: Alles auswählen

! Meldung Fenster in Abwesenheit betätigt
! Version 2.2.2, Autor: dtp

! Namen der verwendeten Systemvariablen
string svPushText = "CCU SV Push Text"; ! gem. zPNS-xx, obligatorisch
string svPushPrio = "CCU SV Push Prio"; ! gem. zPNS-xx, obligatorisch
string svPushoverSound = "CCU SV Pushover Sound"; ! gem. zPNS-Po, optional

! Name des zentralen Push-Nachrichten-Programms
string zPNP = "CCU PRG Push-Nachrichten"; ! obligatorisch

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

! +++++ Deklaration weiterer Variablen +++++
string message;
var source = dom.GetObject("$src$");
var device = dom.GetObject(source.Channel());

! +++++ Setzen der Priorität für die Push-Nachricht +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State("1");

! +++++ Sound für Pushover-Nachricht +++++
if(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)).State("alien");}

! +++++ Erzeugen der Nachricht +++++
if(source.Value() == 0){
  message = "<font color=red>Achtung, "#device.Name()#" wurde in Abwesenheit geschlossen.</font>";
}
if(source.Value() == 1){
  message = "<font color=red>Achtung, "#device.Name()#" wurde in Abwesenheit gekippt.</font>";
}
if(source.Value() == 2){
  message = "<font color=red>Achtung, "#device.Name()#" wurde in Abwesenheit geöffnet.</font>";
}
     
! +++++ zPNP ausführen +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
(dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
Und noch ein Beispiel für zwei Push-Nachrichten (siehe roter Rahmen), die per Telegram gesendet werden, wenn in Abwesenheit eine Betätigung erfolgt.
Fenster_Abwesenheit.PNG
Bis dann,

Thorsten
Zuletzt geändert von dtp am 09.08.2023, 08:56, insgesamt 1-mal geändert.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Mag1984
Beiträge: 5
Registriert: 18.01.2022, 08:35
System: Alternative CCU (auf Basis OCCU)

Re: Howto - Erkennen von Fenster- und Türzuständen (per zPNP)

Beitrag von Mag1984 » 07.02.2022, 11:08

Hallo dtp,

ich habe versucht diese Programme bei mir zu integrieren im meine Raspberrymatic, leider bekomme ich als Pushnachricht nur eine Meldung mit "Achtung, " und dann werden keine Devices angezeigt. Habe einige HMIP-SWDO und einige CUXD wrapper devices mit state (diese werden aber vermutlich nicht erkannt). Soll das so sein oder läuft da etwas schief? Fenster sind keine geöffnet.

Grüße Mag

Rais
Beiträge: 43
Registriert: 25.12.2015, 13:48
Hat sich bedankt: 2 Mal

Re: Howto - Erkennen von Fenster- und Türzuständen (per zPNP)

Beitrag von Rais » 21.05.2023, 15:58

Schön wäre wenn er die HmIP-SWDO-I auch erkennen würde, kann mir wer deibei bitte helfen
Gruß Andi

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“