Neues Modul für Alarmanlage

Begonnen von Prof. Dr. Peter Henning, 08 September 2014, 20:43:06

Vorheriges Thema - Nächstes Thema

Hobbybauer

Hallo,
dann stelle ich hier nochmal die Frage: Ich möchte eine Scharfschaltung der Alarmanlage für intern und für extern.
Intern sind dann nur die Sensoren der Außenhaut des Hauses aktiv.
Keine Bewegungsmelder im Haus. Man kann sich also im Haus bewegen ohne Alarmauslösung.
Geht das mit dem Modul?
MfG

Esjay

Zitat von: Hobbybauer am 21 November 2017, 22:25:08
Hallo,
dann stelle ich hier nochmal die Frage: Ich möchte eine Scharfschaltung der Alarmanlage für intern und für extern.
Intern sind dann nur die Sensoren der Außenhaut des Hauses aktiv.
Keine Bewegungsmelder im Haus. Man kann sich also im Haus bewegen ohne Alarmauslösung.
Geht das mit dem Modul?
MfG
Dafür gibt es die verschiedenen Alarm Level. Also kurz gesagt "Ja"..
Spiel einfach mal ein bisschen rum,dann bekommst du einen Eindruck.

Gruß

DarkT

Hallo zusammen,

ich habe eine Frage. Als Aktor würde ich gerne Pushbullet einrichten, das klappt soweit auch. Allerdings habe ich das Problem, dass bei Pushbullet die Nachricht in der folgenden Form definiert wird

set Push message <text> | <Überschrift>

das Problem ist, dass die den selben Trenner "|" benutzen, der auch intern zur Trennung der Parameter verwendet wird.

Wie kann man das Problem lösen?

Prof. Dr. Peter Henning

#948
Neue Version mit animiertem Icon und diversen Verbesserungen. U.a. wird die Scharfschaltung in einer separaten Datei abgelegt, so dass diese Einstellungen beim Neustart des Systems ohne Probleme zur Verfügung stehen.

Vollständige Regelung für Escape-Sequenzen (= beliebige Zeichen) ist in Arbeit, aber noch nicht enthalten.

LG

pah

NilsB

Persistierte Scharfschaltung klingt super! Auf das Icon bin ich gespannt [emoji848]

Nächste Woche wird getestet. Danke für das Update, pah.

Gruß
Nils


Gesendet von iPhone mit Tapatalk

DarkT

Wird das modul automatisch aktualisiert?

Denn ein ,,Update" liefert mir keine Änderung.


2017.12.09 21:36:27 1 :
2017.12.09 21:36:27 1 : fhem
2017.12.09 21:36:28 1 : nothing to do...
2017.12.09 21:36:28 1 :
2017.12.09 21:36:28 1 : TVSender
2017.12.09 21:36:28 1 : nothing to do...


mumpitzstuff

Dauert immer einen Tag, bis die Änderungen für alle verfügbar sind.

refi

Zitat von: Prof. Dr. Peter Henning am 09 Dezember 2017, 19:20:43
Neue Version mit animiertem Icon und diversen Verbesserungen.

Hallo,

ich habe nach dem Update Fehlermeldungen im Logfile:

2017.12.10 10:51:18 1: PERL WARNING: Use of uninitialized value $name in substitution (s///) at ./FHEM/95_Alarm.pm line 1088, <FH> line 18898.
2017.12.10 10:51:18 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4164, <FH> line 18898.
2017.12.10 10:51:18 1: PERL WARNING: Use of uninitialized value $name in hash element at ./FHEM/95_Alarm.pm line 1111, <FH> line 18898.
2017.12.10 10:51:18 1: PERL WARNING: Use of uninitialized value $name in hash element at ./FHEM/95_Alarm.pm line 1112, <FH> line 18898.
2017.12.10 10:51:18 1: PERL WARNING: Use of uninitialized value $val in string eq at ./FHEM/95_Alarm.pm line 1137, <FH> line 18898.
2017.12.10 10:51:18 1: PERL WARNING: Use of uninitialized value $val in string eq at ./FHEM/95_Alarm.pm line 1139, <FH> line 18898.
2017.12.10 10:51:18 1: PERL WARNING: Use of uninitialized value $val in string eq at ./FHEM/95_Alarm.pm line 1141, <FH> line 18898.
2017.12.10 10:51:20 1: Error: >< has no TYPE, but following keys: ><
2017.12.10 10:53:31 1: [Alarm_widget] name= gstate=disarmed dstate=-------- sizep=
2017.12.10 10:53:33 1: Error: >< has no TYPE, but following keys: ><
2017.12.10 10:53:48 1: [Alarm_widget] name= gstate=disarmed dstate=-------- sizep=
2017.12.10 10:53:49 1: Error: >< has no TYPE, but following keys: ><


Gruß
René
Raspberry Pi3: Duofern, Z-Wave, EnOcean

Prof. Dr. Peter Henning

Das sind keine Fehlermeldungen, sondern Warnungen. Ignorieren.

LG

pah

phil82

Hallo,

ich bekomme seit dem Update folgenden Fehler angezeigt, wenn ich die Alarmanlage öffnenen will:
Modification of a read-only value attempted at ./FHEM/95_Alarm.pm line 460

Und auch im Log stehen einige Warnung und Fehler:
2017.12.10 19:17:06 3: [sysAlarm V3.1] Added hidden room 'AlarmRoom' to guiWeb_127.0.0.1_56578
2017.12.10 19:17:06 3: [sysAlarm V3.1] Added hidden room 'AlarmRoom' to guiWeb_127.0.0.1_56582
2017.12.10 19:17:37 1: PERL WARNING: Use of uninitialized value $name in concatenation (.) or string at ./FHEM/95_Alarm.pm line 1086.
2017.12.10 19:17:37 3: eval: {Alarm_Html("sysAlarm")}
2017.12.10 19:17:37 1: PERL WARNING: Use of uninitialized value $sizep in concatenation (.) or string at ./FHEM/95_Alarm.pm line 1086.
2017.12.10 19:17:37 3: eval: {Alarm_Html("sysAlarm")}
2017.12.10 19:17:37 1: [Alarm_widget] name= gstate=disarmed dstate=-------- sizep=
2017.12.10 19:17:37 1: PERL WARNING: Use of uninitialized value $name in substitution (s///) at ./FHEM/95_Alarm.pm line 1088.
2017.12.10 19:17:37 3: eval: {Alarm_Html("sysAlarm")}
2017.12.10 19:17:37 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4164.
2017.12.10 19:17:37 3: eval: {Alarm_Html("sysAlarm")}
2017.12.10 19:17:37 1: PERL WARNING: Use of uninitialized value $name in hash element at ./FHEM/95_Alarm.pm line 1111.
2017.12.10 19:17:37 3: eval: {Alarm_Html("sysAlarm")}
2017.12.10 19:17:37 1: PERL WARNING: Use of uninitialized value $name in hash element at ./FHEM/95_Alarm.pm line 1112.
2017.12.10 19:17:37 3: eval: {Alarm_Html("sysAlarm")}
2017.12.10 19:17:37 1: PERL WARNING: Use of uninitialized value $val in string eq at ./FHEM/95_Alarm.pm line 1137.
2017.12.10 19:17:37 3: eval: {Alarm_Html("sysAlarm")}
2017.12.10 19:17:37 1: PERL WARNING: Use of uninitialized value $val in string eq at ./FHEM/95_Alarm.pm line 1139.
2017.12.10 19:17:37 3: eval: {Alarm_Html("sysAlarm")}
2017.12.10 19:17:37 1: PERL WARNING: Use of uninitialized value $val in string eq at ./FHEM/95_Alarm.pm line 1141.
2017.12.10 19:17:37 3: eval: {Alarm_Html("sysAlarm")}
2017.12.10 19:17:37 1: Error: >< has no TYPE, but following keys: ><
2017.12.10 19:17:37 3: Please define sysAlarmanlage_alarmDirektalarmSettings first
2017.12.10 19:17:37 1: ERROR evaluating {Alarm_Html("sysAlarm")}: Modification of a read-only value attempted at ./FHEM/95_Alarm.pm line 460.

2017.12.10 19:17:47 1: [Alarm_widget] name= gstate=disarmed dstate=-------- sizep=
2017.12.10 19:17:47 1: Error: >< has no TYPE, but following keys: ><
2017.12.10 19:17:47 3: Please define sysAlarmanlage_alarmDirektalarmSettings first
2017.12.10 19:17:47 1: ERROR evaluating {Alarm_Html("sysAlarm")}: Modification of a read-only value attempted at ./FHEM/95_Alarm.pm line 460.


Ignorieren kann ich das leider nicht, da die Alarmanlage nicht mehr funktioniert.
Ein Device "sysAlarmanlage_alarmDirektalarmSettings" gibt es bei mir nicht, aber einen "sysAlarmanlage_alarmDirekt" (Aktor).

Prof. Dr. Peter Henning

Erstens: Eine Fehlermeldung sehe ich nicht, nur ein paar Perl Warnungen.

Zweitens: In Zeile 460 von Alarm.pm wird definitiv kein read-only Wert verändert - und diese Routine wurde seit Monaten in keiner Weise modifiziert.

Fazit: Sieht nach unvollständiem Update aus.

LG

pah

phil82

Hallo Prof. Dr. Henning,
ich hab das Update nochmal durchgeführt und leider immer noch das gleiche Ergebnis. Das ganze Modul bricht beim Aufruf ab, daher scheint mir das ein Fehler in der Programmierung zu sein.
Und auch die ganzen Error-Meldungen und "Please define sysAlarmanlage_alarmDirektalarmSettings first" scheinen nicht richtig zu sein.

Ich hab mir daher mal die Zeile 460 angeschaut und mit der Datei aus dem Backup verglichen. Es scheint, dass in der Funktion "Alarm_getsettings($$$)" die Zeile 459 bis 461 hinzugekommen ist:
    #-- unset func may be missing
    $aval[2] = ""
      if(!defined($aval[2]));

Ich weiß leider nicht genau wann ich das vorletzte letzte Fhem Update gemacht habe, aber das müsste erste ein paar Tage her sein und nicht erst mehrere Monate.  Wie auch immer.

Ich bin kein Perl-Experte, aber ich vermute der Fehler in der Initialisierung von $aval[3] vor $aval[2] liegt . Wenn $aval[3] nicht definiert ist, dann wird dies in Zeile 449 durchgeführt. Wenn $aval[2] nicht initialisiert wird, dann wird dies aber erst in 460 durchgeführt.
Bei einem meiner Aktoren steht "alarmSettings" auf "alarm6,|set sysAlarmanlage warn||", daher $aval[2] und $aval[3] sind nicht definiert und kommt es zu dem Fehler.
Ich hab die Initialisierung von $aval[2] vor die Initialisierung von $aval[3] gepackt, dann funktioniert es.

Das Ganze liegt natürlich auch an meiner Konfiguration mit "alarmSettings" = "alarm6,|set sysAlarmanlage warn||".


Das Problem mit "Please define sysAlarmanlage_alarmDirektalarmSettings first" besteht wohl schon länger. Ist mir vorher nur nicht aufgefallen.
Problem ist hier Zeile 469 der gleichen Routine. Hier fehlt einfach nur ein Leerzeichen zwischen $dev. und ' alarmSettings':
CommandAttr(undef,$dev.' alarmSettings '.join('|',@aval));
Die Zeile 452 mit '$aval[3] = "";' macht zusammen mit dem CommandAttr aber keinen Sinn. Wenn $aval[3] auf "" steht, dann wird $aval[3] auf "" gesetzt und das CommandAttr ausgeführt, obwohl sich die Attribute nicht geändert haben.
Ich vermute mal, dass $aval[3] auf "00:00" gesetzt werden müsste. (betrifft mehrere Stellen)

Die Funktion sieht jetzt bei mir so aus:
sub Alarm_getsettings($$$){

  my ($hash,$dev,$type) = @_;
  my $chg = 0;
  my @aval = split('\|',AttrVal($dev, "alarmSettings","|||00:00"));
 
  if( $type eq "Actor"){
    #-- unset func may be missing
    $aval[2] = ""
      if(!defined($aval[2]));
#-- check delay time
    if( !defined($aval[3]) || $aval[3] eq "" ){
      $aval[3] = "00:00";
      $chg     = 1;
    }elsif( $aval[3] =~ /^\d+$/ ){
      $aval[3] = sprintf("00:%02d",$aval[3]);
      $chg     = 1;
    }elsif( $aval[3] !~ /^(\d\d:)?\d\d:\d\d/ ){
      Log3 $hash, 1, "[Alarm] Delay time $aval[3] ill defined for alarmActor $dev";
      $aval[3] = "00:00";
      $chg     = 1;
    }
    #-- position 0:set by, 1:set func, 2:unset func, 3:delay
    if( int(@aval) != 4 || !defined($aval[0]) || !defined($aval[1]) ){
      Log3 $hash, 1, "[Alarm] Settings incomplete for alarmActor $dev";
    }
  } 
 
  if( $chg==1 ){
    CommandAttr(undef,$dev.' alarmSettings '.join('|',@aval));
  }
  return @aval;
}



Woher die Error-Meldung mit "Error: >< has no TYPE, but following keys: ><" kommt, konnte ich leider nicht herausfinden.
Die Meldung "[Alarm_widget] name= gstate=disarmed dstate=-------- sizep=" ist nur eine interne Log-Nachricht.


Gruß
Philipp

Esjay

Zitat von: phil82 am 10 Dezember 2017, 22:07:35
Hallo Prof. Dr. Henning,
ich hab das Update nochmal durchgeführt und leider immer noch das gleiche Ergebnis. Das ganze Modul bricht beim Aufruf ab, daher scheint mir das ein Fehler in der Programmierung zu sein.
Und auch die ganzen Error-Meldungen und "Please define sysAlarmanlage_alarmDirektalarmSettings first" scheinen nicht richtig zu sein.

Ich hab mir daher mal die Zeile 460 angeschaut und mit der Datei aus dem Backup verglichen. Es scheint, dass in der Funktion "Alarm_getsettings($$$)" die Zeile 459 bis 461 hinzugekommen ist:
    #-- unset func may be missing
    $aval[2] = ""
      if(!defined($aval[2]));

Ich weiß leider nicht genau wann ich das vorletzte letzte Fhem Update gemacht habe, aber das müsste erste ein paar Tage her sein und nicht erst mehrere Monate.  Wie auch immer.

Ich bin kein Perl-Experte, aber ich vermute der Fehler in der Initialisierung von $aval[3] vor $aval[2] liegt . Wenn $aval[3] nicht definiert ist, dann wird dies in Zeile 449 durchgeführt. Wenn $aval[2] nicht initialisiert wird, dann wird dies aber erst in 460 durchgeführt.
Bei einem meiner Aktoren steht "alarmSettings" auf "alarm6,|set sysAlarmanlage warn||", daher $aval[2] und $aval[3] sind nicht definiert und kommt es zu dem Fehler.
Ich hab die Initialisierung von $aval[2] vor die Initialisierung von $aval[3] gepackt, dann funktioniert es.

Das Ganze liegt natürlich auch an meiner Konfiguration mit "alarmSettings" = "alarm6,|set sysAlarmanlage warn||".


Das Problem mit "Please define sysAlarmanlage_alarmDirektalarmSettings first" besteht wohl schon länger. Ist mir vorher nur nicht aufgefallen.
Problem ist hier Zeile 469 der gleichen Routine. Hier fehlt einfach nur ein Leerzeichen zwischen $dev. und ' alarmSettings':
CommandAttr(undef,$dev.' alarmSettings '.join('|',@aval));
Die Zeile 452 mit '$aval[3] = "";' macht zusammen mit dem CommandAttr aber keinen Sinn. Wenn $aval[3] auf "" steht, dann wird $aval[3] auf "" gesetzt und das CommandAttr ausgeführt, obwohl sich die Attribute nicht geändert haben.
Ich vermute mal, dass $aval[3] auf "00:00" gesetzt werden müsste. (betrifft mehrere Stellen)

Die Funktion sieht jetzt bei mir so aus:
sub Alarm_getsettings($$$){

  my ($hash,$dev,$type) = @_;
  my $chg = 0;
  my @aval = split('\|',AttrVal($dev, "alarmSettings","|||00:00"));
 
  if( $type eq "Actor"){
    #-- unset func may be missing
    $aval[2] = ""
      if(!defined($aval[2]));
#-- check delay time
    if( !defined($aval[3]) || $aval[3] eq "" ){
      $aval[3] = "00:00";
      $chg     = 1;
    }elsif( $aval[3] =~ /^\d+$/ ){
      $aval[3] = sprintf("00:%02d",$aval[3]);
      $chg     = 1;
    }elsif( $aval[3] !~ /^(\d\d:)?\d\d:\d\d/ ){
      Log3 $hash, 1, "[Alarm] Delay time $aval[3] ill defined for alarmActor $dev";
      $aval[3] = "00:00";
      $chg     = 1;
    }
    #-- position 0:set by, 1:set func, 2:unset func, 3:delay
    if( int(@aval) != 4 || !defined($aval[0]) || !defined($aval[1]) ){
      Log3 $hash, 1, "[Alarm] Settings incomplete for alarmActor $dev";
    }
  } 
 
  if( $chg==1 ){
    CommandAttr(undef,$dev.' alarmSettings '.join('|',@aval));
  }
  return @aval;
}



Woher die Error-Meldung mit "Error: >< has no TYPE, but following keys: ><" kommt, konnte ich leider nicht herausfinden.
Die Meldung "[Alarm_widget] name= gstate=disarmed dstate=-------- sizep=" ist nur eine interne Log-Nachricht.


Gruß
Philipp

Moin phil82
ich konnte auch die von dir beschriebenen Probleme feststellen. Ich habe dann gestern Abend ein reload 95_Alarm.pm gemacht, und heute morgen gab es keine Fehler beim Einschalten der Alarmanlage.
Hast du das schonmal gemacht? Vll behebt es auch deine Schwierigkeiten.
Ps: Respekt, das du dich mit dem Quellcode beschäftigt hast, und auch aufzeigst, wo es deiner Meinung nach nicht passt.

Grüße

Prof. Dr. Peter Henning

Erstens: Das "Nichtfunktionieren" der Alarmanlage hat mit den aufgetretenen Meldungen gar nichts zu tun.

Zweitens: Die aufgetretenen Meldungen kommen daher, dass irgendjemand bei seiner Installation unvollständige Settings angegeben hat z.B. das Delay einfach weggelassen hat. Das nennt man das GIGO-Prinzip... Egal, ich habe diese Fehleingaben jetzt abgefangen.


LG

pah

DarkT

Zitat von: Prof. Dr. Peter Henning am 11 Dezember 2017, 10:45:50
Zweitens: Die aufgetretenen Meldungen kommen daher, dass irgendjemand bei seiner Installation unvollständige Settings angegeben hat z.B. das Delay einfach weggelassen hat. Das nennt man das GIGO-Prinzip... Egal, ich habe diese Fehleingaben jetzt abgefangen.

LG

pah

Ist halt wie immer in der Software-Entwicklung, wo man Raum für Fehler lässt, da passieren Sie auch. Schön, dass das in Zukunft dann abgefangen wird.

Danke auch für die persistente Speicherung der Alarmstatus ohne Änderung der cnf-Datei.