Hi,
ich habe ein Problem mit meiner Feuermelder Routine.
1.Ich möchte ganz gerne um Fehler im Script zu vermeiden die bei Eingabe der Attribute passieren können die Attribute im Script bevor ich es Ausführe überprüfen ob sie meinen Definitionen entsprechen.
Hier das Beispiel mit der Beschreibung was die Attribute beinhalten müssten.
2. Ich möchte ganz gerne noch prüfen ob die Devices die ich benötige existieren bevor alles durch läuft.
dummy_feueralarm_kontaktnummer1...3
dummy_feueralarm_kontaktemail1...3
3. Und ich möchte prüfen ob in dem Gerät welche ich auslese das Comment kürzer als 2 Zeichen ist. Dann soll das Script halt auch irgendetwas machen
######## Feuermelder Routine ############
######## Notwendige Routinen sind: DEBIANMAIL, VOIPCALL (dieses gibt es von dem Forumnutzer lammy)
######## Notwendige Zusatzstates für Feuermelder:
######## setreading feuer_feuermeldung_.* lastState AUS
######## im "comment" der Geräte muss der Raumname eingegeben sein
######## Beispiel:
######## Argumente:
######## Anzahl für Kontaktemailadressen/Nummer als Zahl: 1-3
######## Hierfür muss jeweils ein Dummy angelegt werden, damit könnt ihr die Telefonnummern und Emailadressen schnell in FHEM ändern
######## define dummy_feueralarm_kontaktnummer1...3 dummy
######## define dummy_feueralarm_kontaktemail1...3 dummy
######## Trigger für Email/Telefon: EMAIL , EMAILTELEFON
######## ({feueralarm("Gerätename", "Anzahl der Kontaktemailadressen als Zahl","Anzahl der Kontaktemailadressen als Zahl","Trigger für Email oder Telefon","Trigger für Feuermeldung EIN","Trigger für Feuermeldung AUS")})
######## ({feueralarm("feuer_feuermeldung_flur", "3","3","EMAILTELEFON","AN","AUS")})
feueralarm($$$$$$){
my ($geraetename, $anzahlkontaktemailadressen, $anzahlkontaktrufnummern, $benachrichtigungsoption, $triggernamean, $triggernameaus) = @_;
my $raumname = AttrVal("$geraetename","comment","");
my $feueralarmaktiv_meldung = 'Feueralarm: aktiviert - Raum: ';
my $feueralarminaktiv_meldung = 'Feueralarm: deaktiviert - Raum: ';
my $aktuellergeraetestatus = ReadingsVal("$geraetename","state","");
my $letztergeraetestatus = ReadingsVal("$geraetename","lastState","");
PS: Falls jemand Interesse an dem Script hat, jedoch läuft es im Moment nur im "Test-Mode" sprich es schreibt nur in die Log was es tut ;-)
######## Feuermelder Routine ############
######## Notwendige Routinen sind: DEBIANMAIL, VOIPCALL (dieses gibt es von dem Forumnutzer lammy)
######## Notwendige Zusatzstates für Feuermelder:
######## setreading feuer_feuermeldung_.* lastState AUS
######## im "comment" der Geräte muss der Raumname eingegeben sein
######## Beispiel:
######## Argumente:
######## Anzahl für Kontaktemailadressen/Nummer als Zahl: 1-3
######## Hierfür muss jeweils ein Dummy angelegt werden, damit könnt ihr die Telefonnummern und Emailadressen schnell in FHEM ändern
######## define dummy_feueralarm_kontaktnummer1...3 dummy
######## define dummy_feueralarm_kontaktemail1...3 dummy
######## Trigger für Email/Telefon: EMAIL , EMAILTELEFON
######## ({feueralarm("Gerätename", "Anzahl der Kontaktemailadressen als Zahl","Anzahl der Kontaktemailadressen als Zahl","Trigger für Email oder Telefon","Trigger für Feuermeldung EIN","Trigger für Feuermeldung AUS")})
######## ({feueralarm("feuer_feuermeldung_flur", "3","3","EMAILTELEFON","AN","AUS")})
########
######## ToDo's:
######## 1.
sub
feueralarm($$$$$$){
my ($geraetename, $anzahlkontaktemailadressen, $anzahlkontaktrufnummern, $benachrichtigungsoption, $triggernamean, $triggernameaus) = @_;
my $raumname = AttrVal("$geraetename","comment","");
my $feueralarmaktiv_meldung = 'Feueralarm: aktiviert - Raum: ';
my $feueralarminaktiv_meldung = 'Feueralarm: deaktiviert - Raum: ';
my $aktuellergeraetestatus = ReadingsVal("$geraetename","state","");
my $letztergeraetestatus = ReadingsVal("$geraetename","lastState","");
Log 1, "feueralarm - start";
Log 1, "feueralarm - Attribute - Geraetename: $geraetename , Anzahl Kontakt Emailadressen: $anzahlkontaktemailadressen , Anzahl Kontakt Rufnummern: $anzahlkontaktrufnummern , Benachrichtigungsoption: $benachrichtigungsoption";
Log 1, "feueralarm - Attribute - Triggername AN: $triggernamean, Triggername AUS: $triggernameaus , Aktueller Geraetestatus: $aktuellergeraetestatus , Letzter Geraetestatus: $letztergeraetestatus";
# Prüfung des Feuermelderstatus
if ("$aktuellergeraetestatus" eq "$triggernamean"){
# Routine für Feuermelder HAT ausgelöst und ein Feuer/Rauch erkannt
# Keine Prüfung ob der Feuermelder schon mal ausgelöst hat da dieser Regelmäßig sein Status sendet
Log 1, "feueralarm - Feuermelder hat ausgeloest";
# Setzte den Letzten Status des Feuermelder auf die Variable $triggernameaus
fhem("setreading $geraetename lastState $triggernameaus");
Log 1, "fhem(setreading $geraetename lastState $triggernameaus)";
# Sende Emails
Log 1, "feueralarm - Sende Emails ...";
#for (my $i = 1; $i=$anzahlkontaktemailadressen; $i = $i + 1) {
# Log 1, "feueralarm - Kontaktemail $i";
# DebianMail('[dummy_feueralarm_kontaktemail'.$i.']',"$feueralarmaktiv_meldung $raumname","");
#}
# Rufe Optional Telefonnummern an
if ("$benachrichtigungsoption" eq "EMAILTELEFON") {
Log 1, "feueralarm - Rufe Kontakte an ...";
#for (my $i = 1; $i = $anzahlkontaktrufnummern; $i++) {
# Log 1, "feueralarm - Kontaktnummer $i";
# voipcall("Es wurde ein Feuer Alarm im $raumname, $raumname, $raumname, $raumname, $raumname, ausgelöst. Bitte alarmiere die Feuerwehr.",'[dummy_feueralarm_kontaktnummer'.$i.']');
#}
}
}
else{
# Routine für Feuermelder hat NICHT ausgelöst und ein Feuer/Rauch erkannt
# Prüfung ob ob er vorher schon NICHT ausgelöst hat um keine Doppelmeldung zu senden
if ("$letztergeraetestatus" eq "$triggernameaus"){
Log 1, "feueralarm - Feuermelder hat Lebenszeichen gemeldet";
}
else{
Log 1, "feueralarm - Feuermelder hat Alarm beendet";
# Setzte den Letzten Status des Feuermelder auf die Variable $triggernamean
fhem("setreading $geraetename lastState $triggernameaus");
Log 1, "fhem(setreading $geraetename lastState $triggernameaus)";
# Sende Emails
Log 1, "feueralarm - Sende Emails ...";
#for (my $i = 1; $i=$anzahlkontaktemailadressen; $i = $i + 1) {
# Log 1, "feueralarm - Kontaktemail $i";
# DebianMail('[dummy_feueralarm_kontaktemail'.$i.']',"$feueralarminaktiv_meldung $raumname","");
#}
# Rufe Optional Telefonnummern an
if ("$benachrichtigungsoption" eq "EMAILTELEFON") {
Log 1, "feueralarm - Rufe Kontakte an ...";
#for (my $i = 1; $i = $anzahlkontaktrufnummern; $i = $i + 1) {
# Log 1, "feueralarm - Kontaktnummer $i";
# voipcall("Deaktivierung des Fehleralarms im Raum, $raumname, $raumname, $raumname, $raumname, $raumname,",'[dummy_feueralarm_kontaktnummer'.$i.']');
#}
}
}
}
Log 1, "feueralarm - ende";
}
##########################################################
1;
Zitat von: lammy am 04 September 2017, 22:33:39
1.Ich möchte ganz gerne um Fehler im Script zu vermeiden die bei Eingabe der Attribute passieren können die Attribute im Script bevor ich es Ausführe überprüfen ob sie meinen Definitionen entsprechen.
Satzzeichen würden dem Helfenden helfen, den Text zu verstehen, ohne ihn 3x lesen zu müssen.
Bitte für Code die "Code Tags" verwenden.
Zitat2. Ich möchte ganz gerne noch prüfen ob die Devices die ich benötige existieren bevor alles durch läuft.
if (IsDevice($dev)) {...}
Zitat3. Und ich möchte prüfen ob in dem Gerät welche ich auslese das Comment kürzer als 2 Zeichen ist.
if (length(AttrVal($dev,'comment',0)) < 2) {...}