Skript: Meldung bei offenen Fenstern

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

Moderator: Co-Administratoren

rentier-s
Beiträge: 353
Registriert: 19.06.2017, 09:24
Hat sich bedankt: 20 Mal
Danksagung erhalten: 63 Mal

Re: Skript: Meldung bei offenen Fenstern

Beitrag von rentier-s » 26.01.2023, 20:06

Tibin hat geschrieben:
26.01.2023, 17:36
da wurde bei mir eine Warnmeldung im Log generiert, auch bei dem Code von rentier-s
Da ich ehrlich gesagt nicht so genau kapiert habe, was davon die ise_id als Zahl, den Namen als string, und was ein Objekt liefert, ist der Code durch try&error entstanden und ich einfach nur begeistert, dass es tut was es soll. Ins Log habe ich gar nicht geschaut.

Insofern, danke für den Hinweis, ich beschäftige mich nochmal genauer damit, wenn ich wieder Muße habe.

Edit:
Zwar fand sich die Warnung in meinem Systemprotokoll nicht, ich habe die Zeile aber trotzdem wie von Dir empfohlen geändert. Das Skript funktioniert immer noch. Rein logisch macht Channel() an der Stelle sowieso mehr Sinn, bzw. ist eigentlich sogar verwunderlich, dass Device() überhaupt funktioniert hat.

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

Re: Skript: Meldung bei offenen Fenstern

Beitrag von dtp » 04.02.2023, 10:48

Baxxy hat geschrieben:
17.01.2023, 23:09
Ich mache das über LastDPActionTimeSeconds() vom zugehörigen Kanal.
Danke. So klappt es in der Tat deutlich besser.

Code: Alles auswählen

! Meldung Fenster stehen seit xx:xx:xx Stunden offen
! Version 2.1, Autor: dtp

! +++++ Liste der zu berücksichtigenden Räume (mit "\t" trennen) +++++
string roomsList = "Bad";

! +++++ Verschluss-Gewerk +++++
string trade = "Verschluss";

! +++++ 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 index; string list = ""; string message; string room; string sound; string closureName;
string durS; string durM; string durH;
object closure;
integer duration; integer prio = 0;

! +++++ Auslesen der Fenster- und Türenzustände und Erzeugen einer Liste +++++
foreach(index, dom.GetObject(ID_FUNCTIONS).Get(trade).EnumUsedIDs()){
  if(dom.GetObject(index).IsTypeOf(OT_CHANNEL)){
    closure = dom.GetObject(dom.GetObject(index).Device());
    closureName = closure.Name();
    foreach(room, roomsList){
      if(closureName.Contains(room)){
        if((closure.HssType() == "HM-Sec-RHS") || (closure.HssType() == "HmIP-SRH")){
          if(dom.GetObject(index).DPByHssDP("STATE").Value() == 2){
            prio = 1;
            duration = currenttime.Format().ToTime().ToInteger() - channels.Get(closureName).LastDPActionTimeSeconds();
            durS = duration.ToTime().Format("%S"); durM = duration.ToTime().Format("%M"); durH = duration.ToTime().Format("%H").ToInteger()-1;
            list = list#"\n- <font color=orange>"#closureName#" seit "#durH#":"#durM#":"#durS#" Stunden offen.</font>";
          }
          elseif(dom.GetObject(index).DPByHssDP("STATE").Value() == 1){
            duration = currenttime.Format().ToTime().ToInteger() - channels.Get(closureName).LastDPActionTimeSeconds();
            durS = duration.ToTime().Format("%S"); durM = duration.ToTime().Format("%M"); durH = duration.ToTime().Format("%H").ToInteger()-1;
            list = list#"\n- <font color=royalblue>"#closureName#" seit "#durH#":"#durM#":"#durS#" Stunden gekippt.</font>";
          }
        }
        else{
          if((dom.GetObject(index).DPByHssDP("STATE").Value() == 1) || (dom.GetObject(index).DPByHssDP("STATE").Value() == true)){
            duration = currenttime.Format().ToTime().ToInteger() - channels.Get(closureName).LastDPActionTimeSeconds();
            durS = duration.ToTime().Format("%S"); durM = duration.ToTime().Format("%M"); durH = duration.ToTime().Format("%H").ToInteger()-1;
            list = list#"\n- <font color=orange>"#closureName#" seit "#durH#":"#durM#":"#durS#" Stunden offen.</font>";
          }
        }
      }
    }
  }
}

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

! +++++ Sound für Pushover-Nachricht +++++
if(prio > 0){sound = "siren";} else{sound = "magelan";}
if(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)).State(sound);}

! +++++ Erzeugen der Nachricht +++++
  if(list != ""){
    message = "Achtung!";
    message = message#list;

    ! ----- zPNP ausführen -----
    (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
    (dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
  }
}
2023-02-04 13-49-35.jpg
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.

Antworten

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