perl Attribut Frage zum Feuermelder Script

Begonnen von lammy, 04 September 2017, 22:33:39

Vorheriges Thema - Nächstes Thema

lammy

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;

dev0

#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) {...}