Klingelprellen - wo ist mein Fehler?

Begonnen von reticon, 23 Januar 2013, 10:29:04

Vorheriges Thema - Nächstes Thema

reticon

Hallo zusammen,

es gab im letzten Jahr schon einmal eine Diskussion auf der Liste, wie man das "Prellen" der Türklingel abfangen kann.
https://groups.google.com/forum/#!msg/fhem-users/0VlGPjZrvlA/2ofJU7ou4j4J

Ich habe versucht mich daran zu orientieren, wollte das aber ordentlich (Vorsatz 2013 ;-) in die 99_myUtils auslagern.
Und so habe ich jetzt:

- meinen FS20-Klingeltaster: au_KlingelTaste
- einen Dummy "Klingel" und einen Dummy "KlingelEnable" (der auf 1 gesetzt wurde)
- ein Notify "Klingel_Notify" -> da steht drin: au_KlingelTaste {klingel_activate}
- in der 99_myUtils folgendes:
sub klingel_activate ()                                                                                                          
{                                                                                                                                
  my ($KlingelEnable) = @_;                                                                                
  if (Value($KlingelEnable) eq "1") {                                                                                            
  fhem("set KlingelEnable 0");                                                                              
  fhem("set Klingel on");                                                                                                        
  fhem("delete kdtimer");                                                                                                        
  fhem("define kdtimer at +00:00:06 set KlingelEnable 1");                                                                        
 }                                                                                                                                
}

Irgendwie fällt mir kein Denkfehler mehr auf .. trotzdem funktioniert es nicht.
Im Log kriege ich beim Auslösen der Klingel den Eintrag:

2013.01.23 09:15:50 2: FS20 set au_KlingelTaste on
Use of uninitialized value $d in hash element at fhem.pl line 2771.

Sieht jemand was ich falsch mache?

Viele Grüße,
Martin

reticon

Nochmal gestern abend rumprobiert - vermutlich mein üblicher Fehler, dass ich nicht außeinanderhalte was in Perl geht und was fhem-Syntax ist.
Fehler ist wohl, dass die Zeile if (Value($KlingelEnable) eq "1") {  den Variablenwert nicht zieht ...
Nun denn .. ob das jetzt schöner ist wie ich es nun mache .. weiß ich nicht .. funktioniert aber erstmal ...
Falls es jemandem hilft .. unten die Funktion, die für mich das Klingelprellen erstmal abschafft ... ich greife das dann ab und lasse z.B. das Telefon parallel klingeln.

Viele Grüße,
Martin

my $KlingelEnable = ReadingsVal("KlingelEnable","state","");  
sub klingel_activate ()                                                                                                          
{                                                                                                                                
  #my ($KlingelEnable) = @_;i                                                                                                    
  my $KlingelEnable = ReadingsVal("KlingelEnable","state","");                                                                    
  if ($KlingelEnable eq "1") {                                                                                                    
  fhem("set KlingelEnable 0");                                                                                                    
  fhem("set Klingel on");                                                                                                        
  fhem("delete kdtimer");                                                                                                        
  fhem("define kdtimer at +00:00:16 set KlingelEnable 1");                                                                        
 }                                                                                                          
}

Reinerlein

Hi Martin,

das kannst du zumindest mal etwas vereinfachen, da du die Variable nicht brauchst:

sub klingel_activate ()
{
  if (ReadingsVal('KlingelEnable', 'state', '1') == 1) {
    fhem('set KlingelEnable 0');
    fhem('set Klingel on');
    fhem('delete kdtimer');
    fhem('define kdtimer at +00:00:16 set KlingelEnable 1');
  }
}


Du kannst das ganze aber natürlich auch in eine fhem.cfg packen...

Grüße Reinerlein