[GELÖST] Verschachtelte IF's und Readings in Perl-code

Begonnen von AMD1212, 03 September 2016, 17:47:38

Vorheriges Thema - Nächstes Thema

AMD1212

Hallo,

Ich bin seit 2 Tagen stolzer Besitzer eines FHEM Servers und habe damit auch schon einiges Umgesetzt bekommen. Leider scheint es mir jetzt an Erfahrung/Wissen zu fehlen um das folgende zu bewerkstelligen:

Ich habe in meinem Vorhaus einen Multisensor (Bewegungssensor, Lichtmesser,...) und eine Led-Birne installiert (beides Z-Wave).
Nun habe ich ein notify definiert welches die Lampe bei bewegung einschalten soll, und zwar so je nach Raumhelligkeit gedimmt.

Das ganze habe ich zuerst mit standard IF (expr) (command) syntax versucht und bin daran gescheitert das dann keine elsif's funktionierten. Nach einigem Schmökern im Wiki, Forum und Codeschnippseln habe ich folgendes Konstrukt geschrieben das zumindest Syntax-Technisch OK zu sein scheint:


define Vorhaus_Licht_noti_moving notify Vorhaus_MultiSensor_1:alarm\:.HomeSecurity\:..Motion.Detection.* {
  if ( Value("Vorhaus_Lampe_1") eq "off" ) {
     if ( Value("Vorhaus_MultiSensor_1:luminance:d") <= 2 ) {
       fhem "set Vorhaus_Lampe_1 dim 10"
     } elsif ( Value("Vorhaus_MultiSensor_1:luminance:d") <= 5 ) {
       fhem "set Vorhaus_Lampe_1 dim 40"
    }
  }
}


Leider bekomme ich aber scheinbar mit Value den LUX Wert vom Multisensor nicht ausgelesen (steht zumindest so im Log), nachdem die Variable dann auf 0 zu stehen scheint matcht das erste if und die Lampe geht auf 10%:


2016.09.03 17:25:35 1: PERL WARNING: Argument "" isn't numeric in numeric le (<=) at (eval 176) line 3.
2016.09.03 17:25:35 3: eval: my $TYPE='ZWave';my $NAME='Vorhaus_MultiSensor_1';my $EVTPART8='0000';my $EVENT='alarm: HomeSecurity:  Motion Detection - Unknown Location, arg 0000';my $EVTPART7='arg';my $SELF='Vorhaus_Licht_noti_moving';my $EVTPART6='Location,';my $EVTPART4='-';my $EVTPART5='Unknown';my $EVTPART2='Motion';my $EVTPART0='alarm:';my $EVTPART1='HomeSecurity:';my $EVTPART3='Detection';{
if ( Value("Vorhaus_Lampe_1") eq "off" ) {
  if ( Value("Vorhaus_MultiSensor_1:luminance:d") <= 2 ) {
fhem "set Vorhaus_Lampe_1 dim 10"
  }
  elsif ( Value("Vorhaus_MultiSensor_1:luminance:d") <= 5 ) {
fhem "set Vorhaus_Lampe_1 dim 40"
  }
}
}


Jetzt meine Frage, wie bekomme ich die Daten des Multisensors in das Perl-Konstrukt. Ich hab es auch schon mit $data{} und $value{} versucht (das hatte ich in anderen Code schnippseln gefunden). Leider ohne Erfolg.

In meinem altem IF command hat das abfragen von "Vorhaus_MultiSensor_1:luminance:d" genau so funktioniert, nur leider das elsif nicht, deswegen konnte ich keine abstufungen machen.

Vielen Dank
Gruß
AMD



--------------------------------------------------------------------------------------edit------------------------------------------------------------------------
Ich denke ich hab beim Schmökern duch die Threads durch Zufall das gefunden was die Suchfunktion nicht hergeben wollte.
So scheint es jetzt zu funktionieren:

define Vorhaus_Licht_noti_moving notify Vorhaus_MultiSensor_1:alarm\:.HomeSecurity\:..Motion.Detection.* {
if ( Value("Vorhaus_Lampe_1") eq "off" ) {
  if ( ReadingsVal("Vorhaus_MultiSensor_1","luminance.d",0) <= 2 ) {
        fhem "set Vorhaus_Lampe_1 dim 10"
  }
  elsif ( ReadingsVal("Vorhaus_MultiSensor_1","luminance.d",0) <= 5 ) {
        fhem "set Vorhaus_Lampe_1 dim 40"
  }
}
}


Gruß
AMD

Ellert

ZitatIn meinem altem IF command hat das abfragen von "Vorhaus_MultiSensor_1:luminance:d" genau so funktioniert, nur leider das elsif nicht, deswegen konnte ich keine abstufungen machen.

Die neue Alternative zum IF wäre DOIF:
(["^Vorhaus_MultiSensor_1$:alarm: HomeSecurity:  Motion.Detection.*"] and [Vorhaus_Lampe_1] eq "off" and [Vorhaus_MultiSensor_1:luminance:d] <= 2)
   (set Vorhaus_Lampe_1 dim 10)
DOELSEIF (["^Vorhaus_MultiSensor_1$:alarm: HomeSecurity:  Motion.Detection.*"] and [Vorhaus_Lampe_1] eq "off" and [Vorhaus_MultiSensor_1:luminance:d] <= 5)
   (set Vorhaus_Lampe_1 dim 40)


Ggf. mit den Attributen
do always
notexist "0"

Siehe DOIF und
DOIF: Tips leichtere Bedienung Syntaxhervorhebung Klammerprüfung Suchen&Ersetzen