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.