FHEM Forum

FHEM => fhem-users => Thema gestartet von: Guest am 17 September 2012, 11:15:01

Titel: Problem mit Notify
Beitrag von: Guest am 17 September 2012, 11:15:01
Originally posted by: <email address deleted>

Hallo,
ich habe folgende notifys:

define greenhouse_cold notify th_greenhouse:T:.* {\
  if(%EVTPART1 < 20.0 && Value("mailSent") ne "true") {\
    system("/sbin/mailer -s 'Greenhouse COLD: %EVTPART1'");;\
    fhem("set mailSent true");;\
  }\
}

define greenhouse_ok notify th_greenhouse:T:.* {\
  if((%EVTPART1 ge 20.0) && (%EVTPART1 < 40.0) && Value("mailSent") ne
"false") {\
    system("/sbin/mailer -s 'Greenhouse OK: %EVTPART1'");;\
    fhem("set mailSent false");;\
  }\
}

define greenhouse_hot notify th_greenhouse:T:.* {\
  if(%EVTPART1 ge 40.0 && Value("mailSent") ne "true") {\
    system("/sbin/mailer -s 'Greenhouse HOT: %EVTPART1'");;\
    fhem("set mailSent true");;\
  }\
}

Das hat auch bis jetzt einwandfrei funktioniert, allerdings sind ja jetzt
die Temperaturen niedriger und nachts befindet sich die Temperatur ständig
unter 10°. Komischerweise aktiviert sich ständig der "ok" notify, aber nur
wenn es unter 10° ist, wenn die Temperatur steigt, ist wieder alles in
Ordnung.
Mich nervt das, weil ich jedes mal eine SMS kriege und eben wenn es unter
10 fällt eine von "ok" und dann gleich eine von "cold"

Kann mir hier jemand helfen?

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Problem mit Notify
Beitrag von: rudolfkoenig am 17 September 2012, 11:23:15
                                                   

>   if(%EVTPART1 < 20.0 && Value("mailSent") ne "true") {\
...
>   if((%EVTPART1 ge 20.0) && (%EVTPART1 < 40.0) && Value("mailSent") ne

Vielleicht hilft folgendes: < ist Zahlenvergleich, ge ist Stringvergleich.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Problem mit Notify
Beitrag von: Zrrronggg! am 17 September 2012, 21:18:19
                                                     

> >   if(%EVTPART1 < 20.0 && Value("mailSent") ne "true") {\
> ...
> >   if((%EVTPART1 ge 20.0) && (%EVTPART1 < 40.0) && Value("mailSent") ne
>
> Vielleicht hilft folgendes: < ist Zahlenvergleich, ge ist Stringvergleich.

Habe gerade mal versucht rauszubekommen was "ge" überhaupt macht.
Das ist offenbar gar nicht so leicht zu beantworten.
Also wann strings "equal" sind ist ja klar, aber wann ist ein string
"greater" als ein anderer?

Offenbar ist ja bei Samuel 10 ge 20 false, aber 9 ge 20 true.
Hätte ich bestenfalls andersrum erwartet.

Egal, kann halt kein Perl.
Aber
 %EVTPART1 >= 20.0
wirds wohl machen.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Problem mit Notify
Beitrag von: rudolfkoenig am 18 September 2012, 08:40:30
                                                   

> Also wann strings "equal" sind ist ja klar, aber wann ist ein string
> "greater" als ein anderer?

Birne ge Apfel => Wahr

D.h. die Buchstaben werden Zeichen fuer Zeichen verglichen (siehe auch
Alphabet), und die erste Ungleichheit gewinnt. Dieses Verfahren ist seit
laengerem bekannt, z.Bsp. aus dem Telefonbuch.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Problem mit Notify
Beitrag von: Zrrronggg! am 18 September 2012, 18:43:09
                                                     

> Birne ge Apfel => Wahr
>
> D.h. die Buchstaben werden Zeichen fuer Zeichen verglichen (siehe auch
> Alphabet), und die erste Ungleichheit gewinnt. Dieses Verfahren ist seit
> laengerem bekannt, z.Bsp. aus dem Telefonbuch.

Ah. Ich hab mir aus Neugierde mal den Output von dem hier angesehen:

my $l = 0;
for(my $i =0; $i < 21001; $i++) {
    if ($i ge 20.0) {
        print " $i ge 20.0\n" if $l == 0;
        $l = 1;
    }
    else {
        print " $i not ge 20.0\n" if $l == 1;
        $l = 0;
    }
}


Das führt dann zu

    0 not ge 20.0
    1 not ge 20.0
    2 not ge 20.0
    3 ge 20.0
    ...
    3 ge 20.0
   10 not ge 20.0
   11 not ge 20.0
    ...
   19 not ge 20.0
   20 ge 20.0

mit anderen Worten: Wenn man nicht genau weiss, was das macht (also
Rudis Erklärung oben), wird man von den Ergebnissen total überrascht
sein.  :-D




--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Problem mit Notify
Beitrag von: Puschel74 am 18 September 2012, 18:50:31
                                               

Hallo,

naja, überrascht?
Warum?
Es wird Zeichenweise verglichen und der erste Treffer schlägt zu.
Wenn also 3 mit 20 verglichen wird, wird erstmal 3 mit 2 verglichen und das
ist
eindeutig größer als 2 und somit wahr.
Da die 0 von 20 mit nichtsmehr verglichen wird bleibt der Ausdruck auch
wahr.

Grüße

Am Dienstag, 18. September 2012 18:43:11 UTC+2 schrieb Zrrronggg!:
>
>
> > Birne ge Apfel => Wahr
> >
> > D.h. die Buchstaben werden Zeichen fuer Zeichen verglichen (siehe auch
> > Alphabet), und die erste Ungleichheit gewinnt. Dieses Verfahren ist seit
> > laengerem bekannt, z.Bsp. aus dem Telefonbuch.
>
> Ah. Ich hab mir aus Neugierde mal den Output von dem hier angesehen:
>
> my $l = 0;
> for(my $i =0; $i < 21001; $i++) {
>     if ($i ge 20.0) {
>         print " $i ge 20.0\n" if $l == 0;
>         $l = 1;
>     }
>     else {
>         print " $i not ge 20.0\n" if $l == 1;
>         $l = 0;
>     }
> }
>
>
> Das führt dann zu
>
>     0 not ge 20.0
>     1 not ge 20.0
>     2 not ge 20.0
>     3 ge 20.0
>     ...
>     3 ge 20.0
>    10 not ge 20.0
>    11 not ge 20.0
>     ...
>    19 not ge 20.0
>    20 ge 20.0
>
> mit anderen Worten: Wenn man nicht genau weiss, was das macht (also
> Rudis Erklärung oben), wird man von den Ergebnissen total überrascht
> sein.  :-D
>
>
>
>
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Problem mit Notify
Beitrag von: Guest am 18 September 2012, 18:58:24
Originally posted by: <email address deleted>

Danke, dass hat geholfen. Jetzt geht es wieder!

Am Montag, 17. September 2012 21:18:20 UTC+2 schrieb Zrrronggg!:
>
>
> > >   if(%EVTPART1 < 20.0 && Value("mailSent") ne "true") {\
> > ...
> > >   if((%EVTPART1 ge 20.0) && (%EVTPART1 < 40.0) && Value("mailSent") ne
> >
> > Vielleicht hilft folgendes: < ist Zahlenvergleich, ge ist
> Stringvergleich.
>
> Habe gerade mal versucht rauszubekommen was "ge" überhaupt macht.
> Das ist offenbar gar nicht so leicht zu beantworten.
> Also wann strings "equal" sind ist ja klar, aber wann ist ein string
> "greater" als ein anderer?
>
> Offenbar ist ja bei Samuel 10 ge 20 false, aber 9 ge 20 true.
> Hätte ich bestenfalls andersrum erwartet.
>
> Egal, kann halt kein Perl.
> Aber
>  %EVTPART1 >= 20.0
> wirds wohl machen.
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com