Calendar zur Heizungssteuerung - Notify-Problem...

Begonnen von MatthiasR, 26 April 2013, 21:12:11

Vorheriges Thema - Nächstes Thema

Dietmar63

Gib mal beide Vergleichswerte in in einer Zeile aus. Dann kann man einfacher vergleichen.

  Log 3, "Gaeste---------$G--->$state2";

Bitte für alle State's.

Du musst dann Zeilen mit gleichen Werten finden, obwohl sie es deiner Meinung nach nicht sein sollten.
Es ist manchmal nicht einfach in fhem den bug ohne echten Debugger zu finden.

Ich habe viel probiert, ob man den state für alle möglichen Kombinationsmöglichkeiten von HC korrekt auf active/inaktiv setzen kann.

Es geht nicht:
Das liegt daran, dass HC Perlcode generiert, dem ich(per Analyse) nicht ansehen kann, ob er ausgeführt werden wird.
Der Code wird generiert und an das Perllaufzeitsystem übergeben. Den Rest erledigt Perl.

Jetzt gibt es die Möglichkeit ich lasse den Code in HC so wie er ist(funktioniert in 70% der Fälle), dann wird es aber immer wieder jemanden auffallen, wenn es nicht funktioniert und hier einen Fehler melden, der mit hohem Aufwand bearbeitet werden muss.
Ich denke darüber nach, die Erweiterung zu streichen.

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Dietmar63

Ich habe den Fehler gefunden:

##### Meine Routine für Heizungsparameter
sub
Heizungsprofil($$$$$$) {
   my ($JZ, $WE, $G, $HO, $ZH, $AW)  = @_;
   #we ermitteln (kopierter Code)
   my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
   my $we = (($wday==0 || $wday==6) ? 1 : 0);

   $WE = $we if (!defined($WE));
   Log 3, "WE-----$we------->$WE";
   my $state1 = ReadingsVal("JahresZeit", "state", "Winter");
   $JZ = $state1 if (!defined($JZ));
   Log 3, "JahresZeit----$JZ-------->$state1";
   my $state2 = ReadingsVal("Gaeste", "state", "Nein");
   $G= $state2 if (!defined($G));
   Log 3, "Gaeste-------$G----->$state2";
   my $state3 = ReadingsVal("Homeoffice", "state", "Nein");
   $HO = $state3 if (!defined($HO));
   Log 3, "HomeOffice-----$HO------->$state3";
   my $state4 = ReadingsVal("ZuHause", "state", "Nein");
   $ZH = $state4 if (!defined($ZH));
   Log 3, "ZuHause-----$ZH------->$state4";
   my $state5 = ReadingsVal("Abwesend", "state", "Nein");
   $AW = $state5 if (!defined($AW));
   Log 3, "Abwesend------$AW------>$state5";
   my $ret = ($state1 eq $JZ && $WE == $we && $state2 eq $G && $state3 eq $HO && $state4 eq $ZH && $state5 eq $AW);
   Log 3, "ret------------>$ret";
   return $ret;
}


in der Zeile
my ($JZ, $WE, $G, $HO, $ZH, $AW)  = @_;
fehlt bei dir die Zuweisung: "= @_"

dann greifen die Zeilen
$AW = $state5 if (!defined($AW));

und es wird immer true zurückgegeben.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

AnonymousHolger

Hallo Dietmar,

Vielen Dank für dein Durchhaltevermögen !!

Jetzt läuft es ... und zwar Super !!!

Ich bin total begeistert.

Nun muss ich nur noch die Anbindung vom Kalender machen um die Trigger bzgl. der einzelnen Profile über den Kalender zu setzen.

Auch die Anzeige der aktiven Profile funktioniert mit der aktuellen Version von dir prima (man muss halt immer eine Bedingung definieren).

Jetzt muss ich die ganze Sache noch ein wenig aufräumen.

Logging habe ich auch noch einmal aufgehübscht sodass ich im Log immer genau sehen kann, wann welches Profil gesetzt wurde.


(siehe Anhang / see attachement)


(siehe Anhang / see attachement)