Howto - Rauchmelderalarm (per zPNP)

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

Moderator: Co-Administratoren

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

Howto - Rauchmelderalarm (per zPNP)

Beitrag von dtp » 27.07.2021, 07:33

Nachfolgend möchte ich euch mein das zPNP nutzende Programm samt Skript zum Melden von Rauchalarmen vorstellen.

Code: Alles auswählen

! Rauchmelderalarm
! Version 2.6, Autor: dtp

! +++++ Gewerk der Raumchmelder +++++
string trade = "Sicherheit";

! +++++ 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; 
var device;

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

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

! +++++ auslösende Rauchmelder ermitteln +++++
foreach(index, dom.GetObject(ID_FUNCTIONS).Get(trade).EnumUsedIDs()){
  if(dom.GetObject(index).IsTypeOf(OT_CHANNEL)){
    device = dom.GetObject(dom.GetObject(index).Device());
    if(device.HssType()=="HM-Sec-SD"){
      if(dom.GetObject(index).DPByHssDP("STATE").Value()){
        list = list#"\n- "#device.Name();
      }
    }
    elseif(device.HssType()=="HmIP-SWSD"){
      if(dom.GetObject(index).DPByHssDP("SMOKE_DETECTOR_ALARM_STATUS").Value() == 1){
        list = list#"\n- "#device.Name();
      }
    }
  }
}

! +++++ Erzeugen der Nachricht +++++
message = "<font color=red>Achtung, Rauch im Haus!</font>";
message = message#list;

! +++++ zPNP ausführen +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
(dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
Und das zugehörige Programm:
Haus PRG Rauch.png
Die Systemvariable "CCU SV Status" dient lediglich dazu, dass das Programm beim Neustart der CCU nicht ausgeführt wird (siehe dazu meine Signatur).

Und noch die Meldung im Falle einer Auslösung.
2021-05-23 19-45-34.jpg
Gruß,

Thorsten
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.

dackelburg
Beiträge: 2
Registriert: 26.06.2020, 22:55
System: Alternative CCU (auf Basis OCCU)
Wohnort: 73066 Uhingen
Hat sich bedankt: 4 Mal

Re: Howto - Rauchmelderalarm (per zPNP)

Beitrag von dackelburg » 20.04.2022, 21:17

Hi Thorsten,

wie müsste Dein Script denn abgeändert werden, um anstelle der Rauchwarnmelder mehrere HmIP-SWD (Wassermelder) einzubinden?

Gruß,
Andy

McPan
Beiträge: 222
Registriert: 29.11.2021, 07:04
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 12 Mal
Danksagung erhalten: 44 Mal

Re: Howto - Rauchmelderalarm (per zPNP)

Beitrag von McPan » 22.04.2022, 15:46

Hab's bei mir, basierend auf dem Rauchmelderscript, so gelöst:

Code: Alles auswählen

! Wassermelder-Alarm, Autor: McPan
! basierend auf Rauchmelderalarm Version 2.6, Autor: dtp

! +++++ Gewerk der Raumchmelder +++++
string trade = "Meldeeinrichtungen";

! +++++ 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 zPNP"; ! obligatorisch

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

! +++++ Deklaration weiterer Variablen +++++
string index; 
string list = ""; 
string message=""; 
var device;
boolean triggerMsg = false;

! +++++ 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");}

! +++++ auslösende Rauchmelder ermitteln +++++
foreach(index, dom.GetObject(ID_FUNCTIONS).Get(trade).EnumUsedIDs()){
  if(dom.GetObject(index).IsTypeOf(OT_CHANNEL)){
    device = dom.GetObject(dom.GetObject(index).Device());
    if((device.HssType()=="HM-Sec-WDS")||(device.HssType()=="HM-Sec-WDS-2")){
      if(dom.GetObject(index).DPByHssDP("STATE").Value()){
        list = list#"\n- "#device.Name();
      }
    }
    elseif(device.HssType()=="HmIP-SWD"){
      if(dom.GetObject(index).DPByHssDP("MOISTURE_DETECTED").Value() == 1){
        list = list#"\nFeuchtigkeit erkannt:";
        list = list#"\n- "#device.Name();
      }
      if(dom.GetObject(index).DPByHssDP("WATERLEVEL_DETECTED").Value() == 1){
        list = list#"\nWasserstand erkannt:";
        list = list#"\n- "#device.Name();
      }
    }
    elseif(device.HssType()=="HmIP-FCI1"){
      if(dom.GetObject(index).DPByHssDP("STATE").Value() == 1){ ! Öffnerkontakt, STATE = 1 = betätigt = Überlauf
        list = list#"\nKontakt betätigt:";
        list = list#"\n- "#device.Name();
      }
    }    
  }
}

! +++++ Erzeugen der Nachricht +++++
message = "<font color=red>Achtung, Wassermelder angesprochen!</font>";
message = message#list;

! +++++ zPNP ausführen +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
(dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
Für meine HmIP-SWD funktioniert's, die HM-Sec-WDS-2 kann ich, mangels Gerät nicht testen. Der HmIP-FCI1 kann bei dir entfallen, den habe ich am Überlauf-Meldekontakt meiner Kondensatpumpe angeschlossen.
Grüße,
Marco

Elektrische Bauteile funktionieren mit Rauch. Der Beweis: tritt der Rauch aus, funktioniert das Bauteil nicht mehr!
Raspberrymatic @ RPi3b+, HmIP mit RPi-RF-MOD

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

Re: Howto - Rauchmelderalarm (per zPNP)

Beitrag von dtp » 22.04.2022, 15:58

McPan hat geschrieben:
22.04.2022, 15:46
Hab's bei mir, basierend auf dem Rauchmelderscript, so gelöst:
So ähnlich habe ich es auch gelöst. Kann ich heute Abend noch mal posten.

EDIT: Hier dann mal mein Wassermelderskript.

Code: Alles auswählen

! Meldung Wasser oder Feuchtigkeit
! Version 2.3, Autor: dtp

! Liste der Räume, in denen ein Wassermelder vorhanden ist
string roomsList = "HWR\tKüche";

! 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 #####
! #####################################################################

! +++++ Variablendeklaration +++++
string message; string channel; string type; string room; string sound;
integer prio; 

! +++++ auslösenden Kanal und Raum identifizieren +++++
channel = dom.GetObject(dom.GetObject("$src$").Channel());
if(channel){
  foreach(room, roomsList){
    if(channel.Name().Contains(room)){message = room;}
    else{message = "unbekanntem Raum";}
  }
  type = dom.GetObject("$src$").HssType();
  
  if(type.Contains("WATERLEVEL")){
    prio = 2; sound = "persistent";
    message = "<font color=red>Achtung, Wasser in "#message#"!</font>"; 
  }
  elseif(type.Contains("MOISTURE")){
    prio = 0; sound = "alien";
    message = "<font color=orange>Achtung, Feuchtigkeit in "#message#".</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(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)).State(sound);}  
  
  ! +++++ zPNP ausführen +++++
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
  (dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
}
Zuletzt geändert von dtp am 06.02.2023, 10:24, 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.

MGK
Beiträge: 14
Registriert: 19.09.2017, 07:05
Danksagung erhalten: 1 Mal

Re: Howto - Rauchmelderalarm (per zPNP)

Beitrag von MGK » 02.02.2023, 17:17

dtp hat geschrieben:
22.04.2022, 15:58
EDIT: Hier dann mal mein Wassermelderskript.

Code: Alles auswählen

! Meldung Wasser oder Feuchtigkeit
! Version 2.3, Autor: dtp

! Liste der Räume, in denen ein Wassermelder vorhanden ist
string roomsList = "HWR\tKüche";

! 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 #####
! #####################################################################

! +++++ Variablendeklaration +++++
string message; string channel; string type; string room; string sound;
integer prio; 

! +++++ auslösenden Kanal und Raum identifizieren +++++
channel = dom.GetObject(dom.GetObject("$src$").Channel());
if(channel){
  foreach(room, roomsList){
    if(channel.Name().Contains(room)){message = room;}
    else{message = "unbekanntem Raum";}
  }
  type = dom.GetObject("$src$").HssType();
  
  if(type.Contains("WATERLEVEL")){
    prio = 2; sound = "persistent";
    message = "<font color=red>Achtung, Wasser in "#message#"!</font>"; 
  }
  elseif(type.Contains("MOISTURE")){
    prio = 0; sound = "alien";
    message = "<font color=orange>Achtung, Feuchtigkeit in "#message#".</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(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)).State(sound);}  
  
  ! +++++ zPNP ausführen +++++
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
  (dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
Ich habe das Wassermelderskript so 1zu1 übernommen, jedoch hat es so auf Anhieb nicht funktioniert, eine geschweifte Klammer zu hat gefehlt.
Jetzt ist das Skript Fehlerfrei aber die Push Nachricht enthält nur den Raum, ohne zusätzliche Informationen.
Die If Scheifen mit WATERLEVEL und MOISTURE werden allem Anschein nach nie wahr.
Ich habe mir jetzt mal den Inhalt von der Variable "type" mit in der Push Nachricht anzeigen lassen, das Ergebniss was ALARMSTATE, was nun erklärt warum die If Schleifen nicht wahr werden.
Ich vermute den Fehler hier:
type = dom.GetObject("$src$").HssType();

@dtp: Funktioniert das Skript so bei dir?

Code: Alles auswählen

! Meldung Wasser oder Feuchtigkeit
! Version 2.3, Autor: dtp

! Liste der Räume, in denen ein Wassermelder vorhanden ist
string roomsList = "HWR";

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

! Name des zentralen Push-Nachrichten-Programms
string zPNP = "Pushover Nachricht"; ! obligatorisch

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

! +++++ Variablendeklaration +++++
string message; string channel; string type; string room; string sound;
integer prio; 

! +++++ auslösenden Kanal und Raum identifizieren +++++
channel = dom.GetObject(dom.GetObject("$src$").Channel());
if(channel)
{
  foreach(room, roomsList)
  {
    if(channel.Name().Contains(room)){message = room;}
    else{message = "unbekanntem Raum";}
  }
}
type = dom.GetObject("$src$").HssType();
  
if(type.Contains("WATERLEVEL"))
{
  prio = 2; sound = "persistent";
  message = "<font color=red>Achtung, Wasser in "#message#"!</font>"; 
}
elseif(type.Contains("MOISTURE"))
{
  prio = 0; sound = "alien";
  message = "<font color=orange>Achtung, Feuchtigkeit in "#message#".</font>"; 
}

message = "Raum: "#message#" - "#type#".";
 
! +++++ Setzen der Priorität für die Push-Nachricht +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State(prio);

! +++++ Sound für Pushover-Nachricht +++++
if(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)).State(sound);}  
  
! +++++ zPNP ausführen +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
(dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
Hier noch ein Foto wie es in Pushover aussieht.
Bild

Benutzeravatar
Baxxy
Beiträge: 10645
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 596 Mal
Danksagung erhalten: 2180 Mal

Re: Howto - Rauchmelderalarm (per zPNP)

Beitrag von Baxxy » 02.02.2023, 17:51

MGK hat geschrieben:
02.02.2023, 17:17
Funktioniert das Skript so
Bin zwar nicht @dtp, aber...

Sicher das du einen HmIP-SWD einsetzt?

Für HM-Sec-WDS / HM-Sec-WDS-2 funktioniert das Script so nicht.

MGK
Beiträge: 14
Registriert: 19.09.2017, 07:05
Danksagung erhalten: 1 Mal

Re: Howto - Rauchmelderalarm (per zPNP)

Beitrag von MGK » 02.02.2023, 20:48

Ja ich nutze einen HmIP-SWD.

Bild

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

Re: Howto - Rauchmelderalarm (per zPNP)

Beitrag von dtp » 06.02.2023, 10:26

Ich werde das in Kürze prüfen und melde mich dann.

Die fehlende geschweifte Klammer habe ich ergänzt. War ein Copy-&-Paste-Fehler. Danke für den Hinweis.
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.

sven.reichel
Beiträge: 3
Registriert: 20.04.2023, 15:42
System: CCU

Re: Howto - Rauchmelderalarm (per zPNP)

Beitrag von sven.reichel » 20.04.2023, 16:29

Ich habe jetzt mal mit dem Script versucht, meine Rauchmelder zum melden über das Script zu bewegen.

Ich kann die Testnachricht vom zPNP an sowohl Pushover, als auch Telegram schicken.
Wenn ich das Rauchmelder Programm starte passiert nichts und im Log ist das folgende drin:
Apr 20 16:17:46 ccu3-webui local0.err ReGaHss: ERROR: ScriptRuntimeError: ! Rauchmelderalarm ! Version 2.6, Autor: dtp ! +++++ Gewerk der Raumchmelder +++++ string trade = "Sicherheit"; ! +++++ 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; var device; ! +++++ Setzen der Priorität für die Push-Nachricht +++++ (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State("2"); ! +++++ Sound für
Ich bin absolut kein Experte auf dem Gebiet, kann mir da jemand sagen, wo mein Fehler - der sicher auf meiner Seite liegt- ist?
Besten Dank
Sven

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

Re: Howto - Rauchmelderalarm (per zPNP)

Beitrag von dtp » 20.04.2023, 19:40

Hast du mal einen Rauchmelder aktiv ausgelöst?
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!“