Habe Probleme mit mathematischen Bedingungen

Begonnen von ChristianKnorr, 19 August 2014, 22:13:17

Vorheriges Thema - Nächstes Thema

ChristianKnorr

Hallo zusammen,
den "Fehler" vermute ich schon gar nicht in fhem, deshalb OffTopic.
WENN ÜBERHAUPT, dann in perl. Aber zu 99% wird er eher vor dem Bildschirm sitzen, aber ich komm einfach nicht weiter. Deshalb vermutlich mal zur Belustigung :-\

Ich möchte Dummys schalten die mir sagen ob Sonne auf ein bestimmtes Fenster scheint:define Sonne_auf_Kueche_Fenster dummy
attr Sonne_auf_Kueche_Fenster alias Kueche
attr Sonne_auf_Kueche_Fenster devStateIcon .*ja:rc_GREEN .*nein:rc_STOP
attr Sonne_auf_Kueche_Fenster icon scene_baking_oven
attr Sonne_auf_Kueche_Fenster room Sonnenstand


Jetzt wird minütlich das Twilight-Modul abgefragt und Azimuth und Elevation abgefragt und über simple Matematik ausgewertet ob ja oder nein:...snip...
my $azi = ReadingsVal("Twilight","azimuth",0);
my $ele = ReadingsVal("Twilight","elevation",0);

...
(Jetzt das Beispiel für die Küche)

if ( ( $azi gt 277 ) && ( $azi lt 350 ) && ( $ele gt -2 ) )
...snap...


Aber dennoch finde ich im Log (was ich testweise um Nicht-Vorkommnisse erweitert habe):2014.08.19 01:48:33 3: Sonnenstand: Azimut=2.19, Elevation=-27.17. Keine Übereinstimmung.
2014.08.19 01:49:33 3: Sonnenstand: Azimut=2.19, Elevation=-27.17. Keine Übereinstimmung.
2014.08.19 01:50:33 3: Sonnenstand: Azimut=2.19, Elevation=-27.17. Keine Übereinstimmung.
2014.08.19 01:51:33 3: Sonnenstand: Azimut=3.57, Elevation=-27.13. Sonne auf Schlafzimmer: ja
2014.08.19 01:51:33 3: Sonnenstand: Azimut=3.57, Elevation=-27.13. Sonne auf Kueche: ja
2014.08.19 01:52:36 3: Sonnenstand: Azimut=3.57, Elevation=-27.13. Keine Übereinstimmung.
2014.08.19 01:53:33 3: Sonnenstand: Azimut=3.57, Elevation=-27.13. Keine Übereinstimmung.
2014.08.19 01:54:33 3: Sonnenstand: Azimut=3.57, Elevation=-27.13. Keine Übereinstimmung.
2014.08.19 01:55:33 3: Sonnenstand: Azimut=3.57, Elevation=-27.13. Keine Übereinstimmung.
2014.08.19 01:56:33 3: Sonnenstand: Azimut=4.94, Elevation=-27.08. Sonne auf Schlafzimmer: nein
2014.08.19 01:56:33 3: Sonnenstand: Azimut=4.94, Elevation=-27.08. Sonne auf Kueche: nein
2014.08.19 01:57:33 3: Sonnenstand: Azimut=4.94, Elevation=-27.08. Keine Übereinstimmung.
2014.08.19 01:58:33 3: Sonnenstand: Azimut=4.94, Elevation=-27.08. Keine Übereinstimmung.
2014.08.19 01:59:33 3: Sonnenstand: Azimut=4.94, Elevation=-27.08. Keine Übereinstimmung.
2014.08.19 02:00:33 3: Sonnenstand: Azimut=4.94, Elevation=-27.08. Keine Übereinstimmung.


Ist mir unlogisch, kann mich Jemand erhellen?
Viele Grüße
Christian...

ChristianKnorr

Sicherheitshalber doch mal das ganze Script:WerteSonnenstand_notify {
  my $dev_WZ_gr = "Sonne_auf_Wohnzimmer_Fenster_Gross";
  my $dev_SZ = "Sonne_auf_Schlafzimmer_Fenster";
  my $dev_RZ = "Sonne_auf_Rosizimmer_Fenster";
  my $dev_KZ = "Sonne_auf_Kacperzimmer_Fenster";
  my $dev_Ku = "Sonne_auf_Kueche_Fenster";
  my $azi = ReadingsVal("Twilight","azimuth",0);
  my $ele = ReadingsVal("Twilight","elevation",0);
  my $name = "Sonnenstand";
  my $position = "Azimut=" . $azi . ", Elevation=" . $ele;
  my $match = "no";

  if ( ( $azi gt 10 ) && ( $azi lt 197 ) && ( $ele gt 10 ) ) {
    if ( Value($dev_WZ_gr) ne "ja" ) {
      fhem("set $dev_WZ_gr ja");
      Log3 $name, 3, $name . ": " . $position . ". " . "Sonne auf Wohnzimmer: ja";
      $match = "yes";
    }
  } else {
    if ( Value($dev_WZ_gr) ne "nein" ) {
      fhem("set $dev_WZ_gr nein");
      Log3 $name, 3, $name . ": " . $position . ". " . "Sonne auf Wohnzimmer: nein";
      $match = "yes";
    }
  }

  if ( ( $azi gt 205 ) && ( $azi lt 350 ) && ( $ele gt -2 ) ) {
    if ( Value($dev_SZ) ne "ja" ) {
      fhem("set $dev_SZ ja");
      Log3 $name, 3, $name . ": " . $position . ". " . "Sonne auf Schlafzimmer: ja";
      $match = "yes";
    }
  } else {
    if ( Value($dev_SZ) ne "nein" ) {
      fhem("set $dev_SZ nein");
      Log3 $name, 3, $name . ": " . $position . ". " . "Sonne auf Schlafzimmer: nein";
      $match = "yes";
    }
  }

  if ( ( $azi gt 90 ) && ( $azi lt 197 ) && ( $ele gt 20 ) ) {
    if ( Value($dev_RZ) ne "ja" ) {
      fhem("set $dev_RZ ja");
      Log3 $name, 3, $name . ": " . $position . ". " . "Sonne auf Rosizimmer: ja";
      $match = "yes";
    }
  } else {
    if ( Value($dev_RZ) ne "nein" ) {
      fhem("set $dev_RZ nein");
      Log3 $name, 3, $name . ": " . $position . ". " . "Sonne auf Rosizimmer: nein";
      $match = "yes";
    }
  }

  if ( ( $azi gt 90 ) && ( $azi lt 197 ) && ( $ele gt 20 ) ) {
    if ( Value($dev_KZ) ne "ja" ) {
      fhem("set $dev_KZ ja");
      Log3 $name, 3, $name . ": " . $position . ". " . "Sonne auf Kacpers Zimmer: ja";
      $match = "yes";
    }
  } else {
    if ( Value($dev_KZ) ne "nein" ) {
      fhem("set $dev_KZ nein");
      Log3 $name, 3, $name . ": " . $position . ". " . "Sonne auf Kacpers Zimmer: nein";
      $match = "yes";
    }
  }

  if ( ( $azi gt 277 ) && ( $azi lt 350 ) && ( $ele gt -2 ) ) {
    if ( Value($dev_Ku) ne "ja" ) {
      fhem("set $dev_Ku ja");
      Log3 $name, 3, $name . ": " . $position . ". " . "Sonne auf Kueche: ja";
      $match = "yes";
    }
  } else {
    if ( Value($dev_Ku) ne "nein" ) {
      fhem("set $dev_Ku nein");
      Log3 $name, 3, $name . ": " . $position . ". " . "Sonne auf Kueche: nein";
      $match = "yes";
    }
  }

  if ( $match eq "no" ) {
    Log3 $name, 3, $name . ": " . $position . ". Keine Übereinstimmung.";
  }
}

betateilchen

Spontan: Numerische Werte solltest Du nicht mit lt und gt vergleichen, sondern mit < bzw. > (wie man es mit Mathematikunterricht gelernt hat.

So ganz verstanden habe ich noch nicht, was Du da eigentlich tun willst.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ChristianKnorr

Zitat von: betateilchen am 19 August 2014, 22:44:56...snip...
Numerische Werte solltest Du nicht mit lt und gt vergleichen, sondern mit < bzw. >
...snap...
Das habe ich jetzt geändert, werde das beobachten und berichten.

Danke vorerst und viele Grüße
Christian...

ChristianKnorr

Ja, genau das war's. Jetzt funktioniert es. Danke Dir :)

Zitat von: betateilchen am 19 August 2014, 22:44:56So ganz verstanden habe ich noch nicht, was Du da eigentlich tun willst.
Im Moment gar nichts, die Dummys schalten und ich verfeinere die Vergleichswerte um den Sonnenstand so präzise wie möglich zu bestimmen, ohne astronomische Berechnungen anzustellen.

Am Wichtigsten ist das Schlafzimmerfenster. Da kommt es vor, wenn es richtig heiß und freier Himmel ist, dass da an Schlaf nicht zu denken ist. Also möchte ich erinnert werden rechtzeitig die Rolladen runter zu lassen. Mit Jabber und/oder Sprachausgabe.

Was dazu aber noch mit einfließen muss ist das Wetter. Das betrifft ja nur ein paar Tage im Jahr.

Und wenn ich das schon so aufsetze kann ich auch gleich ein paar Fenster mehr mit rein nehmen, ist ein Abwasch, frisst kein Brot und der Lernfaktor ist auch hoch (ich habe nämlich jetzt noch ein paar mehr Vergleichsoperationen zu berichtigen ;D ).

Viele Grüße
Christian...