FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Tardar am 23 Juni 2018, 19:16:19

Titel: FHEM Steuert Heizungen nicht
Beitrag von: Tardar am 23 Juni 2018, 19:16:19
Hallo zusammen,

ich hab gedacht, dass ich die Steuerung endlich hinbekommen habe ;)
Leider funktioniert es aktuell nicht.

Bevor ich noch Stunden davorsitze und suche - mag jemand von Euch einmal einen Blick auf meine Steuerung (DOIF) werfen ?
Bin zwar noch Neuling, hoffe aber dass Ihr evtl. den Fehler seht :)

my $durchschnittsTemperatur = ReadingsNum("doif_Heizungssteuerung_Wochenende", "durchTemp", "0")
my $einFensterOffen = ([XMI_158d0002091ead:state] eq "open" or [XMI_158d00020b5d5e:state] eq "open" or [XMI_158d0002092032:state] eq "open" or [XMI_158d00020b5d5d:state] eq "open")
my $alleFensterGeschlossen = ([XMI_158d0002091ead:state] eq "close" && [XMI_158d00020b5d5e:state] eq "close" && [XMI_158d0002092032:state] eq "close" && [XMI_158d00020b5d5d:state] eq "close")
my $heizungAufSechsGrad = (set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 6); (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 6)
my $heizungAufSiebzehnGrad = (set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 17); (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 17)
my $heizungAufFuenfUndZwanzigGrad = (set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 25); (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 25)
my $heizungAufZwanzigGrad =  (set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 20); (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 20)
my $heizungAufVierUndZwanzigGrad = (set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 24); (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 24)
my $heizungAufZweiUndZwanzigGrad = (set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 22); (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 22)

DOIF ($we)
DOIF ($einFensterOffen)
$heizungAufSechsGrad
DOELSEIF (([00:00-07:59]) && $alleFensterGeschlossen)
$heizungAufSiebzehnGrad
DOELSEIF (([08:00-23:59]) && ($durchschnittsTemperatur >= 24) && $alleFensterGeschlossen)
$heizungAufSiebzehnGrad
DOELSEIF (([08:00-11:59]) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen)
$heizungAufFuenfUndZwanzigGrad
DOELSEIF (([12:00-14:59]) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen)
$heizungAufZwanzigGrad
DOELSEIF (([15:00-19:59]) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen)
$heizungAufVierUndZwanzigGrad
DOELSEIF (([20:00-23:59]) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen)
$heizungAufZweiUndZwanzigGrad


durchTemp wird aus einem userReading erzeugt:
durchTemp {return ((ReadingsNum("Heizung_Computer", "1.ACTUAL_TEMPERATURE", "1000") + ReadingsNum("Heizung_Wohnzimmer", "1.ACTUAL_TEMPERATURE", "1000"))/2)}


Ich habe die Vermutung, dass Formate nicht ganz passen.
Damit meine ich, dass die durchTemp ein float ist (Bsp. 22.85) und ggf. die Prüfung im DOIF damit nicht richtig umgehen kann.



Ich danke euch =)
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: MadMax-FHEM am 23 Juni 2018, 19:25:27
Wo hast du das denn stehen?

Du hast bestimmt Fehler im fhem-Log!?

DOIF ist ein fhem-Modul und KEIN perl-Befehl muss also definiert werden und landet dann in der fhem.cfg...
...Variablen deklarieren/definieren und benutzen ist perl -> muss in eine Sub in myUtils etc.

Gemischt wie bei dir gibt es so keine Stelle in fhem wo das so hin kommen kann.

Einsteiger Doku gelesen!?

EDIT: Anmerkung (am Rande) was nutzt du zur Steuerung, also HW!? HW für Heizungssteuerung kann alles/einiges von dem was du per fhem steuerst/steuern willst "selbst" (Wochenprogramm, Fenstererkennung, ...). Was passiert, wenn fhem mal abstürzt, hängt, falsch programmiert wurde oder einfach nur die HW defekt geht?! Dann steuert nichts mehr die Heizung...

Gruß, Joachim
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Tardar am 23 Juni 2018, 19:37:29
Hey,

aktuell habe ich in einem separaten Raum ein DOIF Device angelegt, indem ich das alles konfiguriert habe.
Im Log sind keine Fehler zu finden.

Ich nutze HMIP Thermostate und Tür- / Fensterkontakte von XIAOMI.
Zur Steuerung nutze ich aktuell nur FHEM und wenn das nicht funktioniert halt manuell am Thermostat oder über die CCU.

Ansonsten keine separate Hardware.


Danke schonmal für deine Mühe
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Otto123 am 23 Juni 2018, 19:42:14
Hi,

Machst Du mal bitte ein list von deinem DOIF Device

Gruß Otto
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Tardar am 23 Juni 2018, 19:45:19
Zitat von: Otto123 am 23 Juni 2018, 19:42:14
Hi,

Machst Du mal bitte ein list von deinem DOIF Device

Gruß Otto

Hi,

natürlich, gern.


Internals:
   CFGFN     
   DEF        my $durchschnittsTemperatur = ReadingsNum("doif_Heizungssteuerung_Wochenende", "durchTemp", "0")
my $einFensterOffen = ([XMI_158d0002091ead:state] eq "open" or [XMI_158d00020b5d5e:state] eq "open" or [XMI_158d0002092032:state] eq "open" or [XMI_158d00020b5d5d:state] eq "open")
my $alleFensterGeschlossen = ([XMI_158d0002091ead:state] eq "close" && [XMI_158d00020b5d5e:state] eq "close" && [XMI_158d0002092032:state] eq "close" && [XMI_158d00020b5d5d:state] eq "close")
my $heizungAufSechsGrad = (set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 6); (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 6)
my $heizungAufSiebzehnGrad = (set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 17); (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 17)
my $heizungAufFuenfUndZwanzigGrad = (set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 25); (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 25)
my $heizungAufZwanzigGrad =  (set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 20); (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 20)
my $heizungAufVierUndZwanzigGrad = (set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 24); (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 24)
my $heizungAufZweiUndZwanzigGrad = (set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 22); (set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 22)

DOIF ($we)
DOIF ($einFensterOffen)
$heizungAufSechsGrad
DOELSEIF (([00:00-07:59]) && $alleFensterGeschlossen)
$heizungAufSiebzehnGrad
DOELSEIF (([08:00-23:59]) && ($durchschnittsTemperatur >= 24) && $alleFensterGeschlossen)
$heizungAufSiebzehnGrad
DOELSEIF (([08:00-11:59]) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen)
$heizungAufFuenfUndZwanzigGrad
DOELSEIF (([12:00-14:59]) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen)
$heizungAufZwanzigGrad
DOELSEIF (([15:00-19:59]) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen)
$heizungAufVierUndZwanzigGrad
DOELSEIF (([20:00-23:59]) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen)
$heizungAufZweiUndZwanzigGrad
   MODEL      Perl
   NAME       doif_Heizungssteuerung_Wochenende
   NR         1225
   NTFY_ORDER 50-doif_Heizungssteuerung_Wochenende
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2018-06-23 19:18:54   durchTemp       22.85
     2018-06-23 17:10:32   durchschnittstemperatur 1
     2018-06-23 19:18:54   mode            enabled
     2018-06-23 19:18:54   state           initialized
   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0         
   devices:
   helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   itimer:
   perlblock:
     0          heizungAufZweiUndZwanzigGrad
   uiState:
   uiTable:
Attributes:
   alias      Heizungssteuerung Sa-So, Feiertags
   room       01_Logik
   userReadings durchTemp {return ((ReadingsNum("Heizung_Computer", "1.ACTUAL_TEMPERATURE", "1000") + ReadingsNum("Heizung_Wohnzimmer", "1.ACTUAL_TEMPERATURE", "1000"))/2)}
   verbose    5
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Otto123 am 23 Juni 2018, 20:12:54
Sorry , ich kenne mich dem Perl Modell nicht aus. Aber schon zweimal DOIF im Code erscheint  mir falsch.

Gruß Otto
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: amenomade am 23 Juni 2018, 23:18:15
Naja... auch mit Perl Modus, muss die Perl Syntax respektiert werden...
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Damian am 23 Juni 2018, 23:42:06
Zitat von: amenomade am 23 Juni 2018, 23:18:15
Naja... auch mit Perl Modus, muss die Perl Syntax respektiert werden...

Da hilft nur das Studium der Commandref, sonst ist viel Mühe umsonst. ;)
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Otto123 am 23 Juni 2018, 23:46:34
Zitat von: amenomade am 23 Juni 2018, 23:18:15
Naja... auch mit Perl Modus, muss die Perl Syntax respektiert werden...
Genau und der beginnt schon mal damit {}  ::)
Ich habe mir mal ein Beispiel in der Doku  (https://commandref.fhem.de/commandref_DE.html#DOIF_Perl_Modus)hergenommen damit ich weiß wie es prinzipiell aussehen muss.

Also mein Tipp: der Perl Block gehört in diese Klammern {<Hier steht Perl>} Das heisst nicht das der Codes dann irgendetwas tut.  :o
Und ich würde den Perlcode im DOIF nicht mit den Codeworten DOIF (mehrfach) DOELSEIF usw. (klassische DOIF Zweige) kombinieren. Hab ich so in der Doku nicht gefunden.
Das userReadings ist ja offenbar intakt.

Gruß Otto
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Tardar am 24 Juni 2018, 00:45:52
Zitat von: Otto123 am 23 Juni 2018, 23:46:34
Genau und der beginnt schon mal damit {}  ::)
Ich habe mir mal ein Beispiel in der Doku  (https://commandref.fhem.de/commandref_DE.html#DOIF_Perl_Modus)hergenommen damit ich weiß wie es prinzipiell aussehen muss.

Also mein Tipp: der Perl Block gehört in diese Klammern {<Hier steht Perl>} Das heisst nicht das der Codes dann irgendetwas tut.  :o
Und ich würde den Perlcode im DOIF nicht mit den Codeworten DOIF (mehrfach) DOELSEIF usw. (klassische DOIF Zweige) kombinieren. Hab ich so in der Doku nicht gefunden.
Das userReadings ist ja offenbar intakt.

Gruß Otto

Genau, das userReading funktioniert - zeigt den korrekten Wert auch in den Readings an.
Habe den Code nochmal angepasst:
Internals:
   DEF        { # Variablendeklaration
my $durchschnittsTemperatur = ReadingsNum("doif_Heizungssteuerung_Wochenende", "durchTemp", "0");
my $einFensterOffen = (([XMI_158d0002091ead:state] eq "open") or ([XMI_158d00020b5d5e:state] eq "open") or ([XMI_158d0002092032:state] eq "open") or ([XMI_158d00020b5d5d:state] eq "open"));
my $alleFensterGeschlossen = (([XMI_158d0002091ead:state] eq "close") && ([XMI_158d00020b5d5e:state] eq "close") && ([XMI_158d0002092032:state] eq "close") && ([XMI_158d00020b5d5d:state] eq "close"));
my $heizungCAufSechsGrad = fhem("set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 6");
my $heizungWAufSechsGrad = fhem("set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 6");
my $heizungCAufSiebzehnGrad = fhem("set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 17");
my $heizungWAufSiebzehnGrad = fhem("set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 17");
my $heizungCAufFuenfUndZwanzigGrad = fhem("set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 25");
my $heizungWAufFuenfUndZwanzigGrad = fhem("set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 25");
my $heizungCAufZwanzigGrad =  fhem("set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 20");
my $heizungWAufZwanzigGrad =  fhem("set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 20");
my $heizungCAufVierUndZwanzigGrad = fhem("set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 24");
my $heizungWAufVierUndZwanzigGrad = fhem("set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 24");
my $heizungCAufZweiUndZwanzigGrad = fhem("set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 22");
my $heizungWAufZweiUndZwanzigGrad = fhem("set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 22");


# Funktionen ausführen
if ($we){
if ($einFensterOffen){
$heizungCAufSechsGrad;
$heizungWAufSechsGrad;
} elsif (([00:00-07:59]) && $alleFensterGeschlossen){
$heizungCAufSiebzehnGrad;
$heizungWAufSiebzehnGrad;
} elsif (([08:00-23:59]) && ($durchschnittsTemperatur >= 24) && $alleFensterGeschlossen){
$heizungCAufSiebzehnGrad;
$heizungWAufSiebzehnGrad;
} elsif (([08:00-11:59]) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen){
$heizungCAufFuenfUndZwanzigGrad;
$heizungWAufFuenfUndZwanzigGrad;
} elsif (([12:00-14:59]) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen){
$heizungCAufZwanzigGrad;
$heizungWAufZwanzigGrad;
} elsif (([15:00-19:59]) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen){
$heizungCAufVierUndZwanzigGrad;
$heizungWAufVierUndZwanzigGrad;
} else (([20:00-23:59]) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen){
$heizungCAufZweiUndZwanzigGrad;
$heizungWAufZweiUndZwanzigGrad;
}
}
}
   MODEL      Perl
   NAME       doif_Heizungssteuerung_Wochenende
   NR         64
   NTFY_ORDER 50-doif_Heizungssteuerung_Wochenende
   STATE      initialized
   TYPE       DOIF
   OLDREADINGS:
   READINGS:
     2018-06-24 00:44:26   durchTemp       22.5
     2018-06-24 00:44:26   mode            enabled
     2018-06-24 00:44:26   state           initialized
     2018-06-24 00:44:26   timer_01_c01    25.06.2018 00:00:00
     2018-06-24 00:44:26   timer_02_c01    24.06.2018 07:59:00
     2018-06-24 00:44:26   timer_03_c01    24.06.2018 08:00:00
     2018-06-24 00:44:26   timer_04_c01    24.06.2018 23:59:00
     2018-06-24 00:44:26   timer_05_c01    24.06.2018 08:00:00
     2018-06-24 00:44:26   timer_06_c01    24.06.2018 11:59:00
     2018-06-24 00:44:26   timer_07_c01    24.06.2018 12:00:00
     2018-06-24 00:44:26   timer_08_c01    24.06.2018 14:59:00
     2018-06-24 00:44:26   timer_09_c01    24.06.2018 15:00:00
     2018-06-24 00:44:26   timer_10_c01    24.06.2018 19:59:00
     2018-06-24 00:44:26   timer_11_c01    24.06.2018 20:00:00
     2018-06-24 00:44:26   timer_12_c01    24.06.2018 23:59:00
   Regex:
   condition:
     0           # Variablendeklaration
my $durchschnittsTemperatur = ReadingsNum("doif_Heizungssteuerung_Wochenende", "durchTemp", "0");
my $einFensterOffen = ((ReadingValDoIf($hash,'XMI_158d0002091ead','state') eq "open") or (ReadingValDoIf($hash,'XMI_158d00020b5d5e','state') eq "open") or (ReadingValDoIf($hash,'XMI_158d0002092032','state') eq "open") or (ReadingValDoIf($hash,'XMI_158d00020b5d5d','state') eq "open"));
my $alleFensterGeschlossen = ((ReadingValDoIf($hash,'XMI_158d0002091ead','state') eq "close") && (ReadingValDoIf($hash,'XMI_158d00020b5d5e','state') eq "close") && (ReadingValDoIf($hash,'XMI_158d0002092032','state') eq "close") && (ReadingValDoIf($hash,'XMI_158d00020b5d5d','state') eq "close"));
my $heizungCAufSechsGrad = fhem("set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 6");
my $heizungWAufSechsGrad = fhem("set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 6");
my $heizungCAufSiebzehnGrad = fhem("set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 17");
my $heizungWAufSiebzehnGrad = fhem("set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 17");
my $heizungCAufFuenfUndZwanzigGrad = fhem("set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 25");
my $heizungWAufFuenfUndZwanzigGrad = fhem("set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 25");
my $heizungCAufZwanzigGrad =  fhem("set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 20");
my $heizungWAufZwanzigGrad =  fhem("set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 20");
my $heizungCAufVierUndZwanzigGrad = fhem("set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 24");
my $heizungWAufVierUndZwanzigGrad = fhem("set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 24");
my $heizungCAufZweiUndZwanzigGrad = fhem("set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 22");
my $heizungWAufZweiUndZwanzigGrad = fhem("set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 22");


# Funktionen ausführen
if ($we){
if ($einFensterOffen){
$heizungCAufSechsGrad;
$heizungWAufSechsGrad;
} elsif ((DOIF_time($hash,0,1,$wday,$hms)) && $alleFensterGeschlossen){
$heizungCAufSiebzehnGrad;
$heizungWAufSiebzehnGrad;
} elsif ((DOIF_time($hash,2,3,$wday,$hms)) && ($durchschnittsTemperatur >= 24) && $alleFensterGeschlossen){
$heizungCAufSiebzehnGrad;
$heizungWAufSiebzehnGrad;
} elsif ((DOIF_time($hash,4,5,$wday,$hms)) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen){
$heizungCAufFuenfUndZwanzigGrad;
$heizungWAufFuenfUndZwanzigGrad;
} elsif ((DOIF_time($hash,6,7,$wday,$hms)) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen){
$heizungCAufZwanzigGrad;
$heizungWAufZwanzigGrad;
} elsif ((DOIF_time($hash,8,9,$wday,$hms)) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen){
$heizungCAufVierUndZwanzigGrad;
$heizungWAufVierUndZwanzigGrad;
} elseif ((DOIF_time($hash,10,11,$wday,$hms)) && ($durchschnittsTemperatur < 24) && $alleFensterGeschlossen){
$heizungCAufZweiUndZwanzigGrad;
$heizungWAufZweiUndZwanzigGrad;
}
}

   days:
   devices:
     0           XMI_158d0002091ead XMI_158d00020b5d5e XMI_158d0002092032 XMI_158d00020b5d5d
     all         XMI_158d0002091ead XMI_158d00020b5d5e XMI_158d0002092032 XMI_158d00020b5d5d
   helper:
     globalinit 1
     last_timer 12
     sleeptimer -1
   interval:
     0          -1
     1          0
     10         -1
     11         10
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
     8          -1
     9          8
   intervalfunc:
   itimer:
   localtime:
     0          1529877600
     1          1529819940
     10         1529863200
     11         1529877540
     2          1529820000
     3          1529877540
     4          1529820000
     5          1529834340
     6          1529834400
     7          1529845140
     8          1529845200
     9          1529863140
   perlblock:
     0         
   readings:
     0           XMI_158d0002091ead:state XMI_158d00020b5d5e:state XMI_158d0002092032:state XMI_158d00020b5d5d:state
     all         XMI_158d0002091ead:state XMI_158d00020b5d5e:state XMI_158d0002092032:state XMI_158d00020b5d5d:state
   realtime:
     0          00:00:00
     1          07:59:00
     10         20:00:00
     11         23:59:00
     2          08:00:00
     3          23:59:00
     4          08:00:00
     5          11:59:00
     6          12:00:00
     7          14:59:00
     8          15:00:00
     9          19:59:00
   time:
     0          00:00:00
     1          07:59:00
     10         20:00:00
     11         23:59:00
     2          08:00:00
     3          23:59:00
     4          08:00:00
     5          11:59:00
     6          12:00:00
     7          14:59:00
     8          15:00:00
     9          19:59:00
   timeCond:
     0          0
     1          0
     10         0
     11         0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
     9          0
   timer:
     0          0
     1          0
     10         0
     11         0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
     9          0
   timers:
     0           0  1  2  3  4  5  6  7  8  9  10  11
   triggertime:
     1529819940:
       localtime  1529819940
       hash:
     1529820000:
       localtime  1529820000
       hash:
     1529834340:
       localtime  1529834340
       hash:
     1529834400:
       localtime  1529834400
       hash:
     1529845140:
       localtime  1529845140
       hash:
     1529845200:
       localtime  1529845200
       hash:
     1529863140:
       localtime  1529863140
       hash:
     1529863200:
       localtime  1529863200
       hash:
     1529877540:
       localtime  1529877540
       hash:
     1529877600:
       localtime  1529877600
       hash:
   uiState:
   uiTable:
Attributes:
   alias      Heizungssteuerung Sa-So, Feiertags
   room       01_Logik
   userReadings durchTemp {return ((ReadingsNum("Heizung_Computer", "1.ACTUAL_TEMPERATURE", "1000") + ReadingsNum("Heizung_Wohnzimmer", "1.ACTUAL_TEMPERATURE", "1000"))/2)}


So dürfte das für PERL ok sein - nach dem,was ich in der Doku gelesen habe-
Jetzt sehe ich auch die programmierten Timer mit Endzeiten:
timer_01_c02   25.06.2018 00:00:00
timer_02_c02   24.06.2018 07:59:00
timer_03_c02   24.06.2018 08:00:00
timer_04_c02   24.06.2018 23:59:00
timer_05_c02   24.06.2018 08:00:00
timer_06_c02   24.06.2018 11:59:00
timer_07_c02   24.06.2018 12:00:00
timer_08_c02   24.06.2018 14:59:00
timer_09_c02   24.06.2018 15:00:00
timer_10_c02   24.06.2018 19:59:00
timer_11_c02   24.06.2018 20:00:00
timer_12_c02   24.06.2018 23:59:00

Nur die Thermostate werden nicht angesteuert.
Wenn ich manuell den Wert setze im FHEM-Command funktioniert es.
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Damian am 24 Juni 2018, 09:48:07
Wenn man sich für den Perl-Modus entscheidet, dann sind gewisse Mindestkenntnisse in Programmierung nicht unwichtig.

z. B.

if ($einFensterOffen){
$heizungCAufSechsGrad;
$heizungWAufSechsGrad;
        ...


Die Angaben beginnend mit $ sind Variablen. Sie beinhalten irgendwelche Werte, die zuvor dort abgelegt wurden. Bei der Angabe z. B. $heizungCAufSechsGrad wird der Inhalt (der Wert) der Variablen zurückgeliefert und nicht mehr. Es wird natürlich zu diesem Zeitpunkt kein fhem-Befehl ausgeführt. Den musst du schon an der Stelle angeben, wo er ausgeführt werden soll. Also

if ($einFensterOffen){
fhem("set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 6");
fhem("set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 6");
        ...


Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Otto123 am 24 Juni 2018, 10:31:25
Moin,

na bloß gut, das Damian das auch so sieht  :D
Ich hatte schon gedacht er hat da was ganz Besonderes eingebaut oder ich habe diese "Funktion von Perl" einfach noch nie gesehen.

Gruß Otto
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Damian am 24 Juni 2018, 11:02:52
Im Prinzip geht so etwas über Referenzen auf Subroutinen, aber damit wollen wir an dieser Stelle erst gar nicht anfangen, wenn die Bedeutung einer Variablen noch nicht klar ist. Man kann natürlich für jeden fhem-Aufruf eine eigene Subroutine definieren, was aber in diesem Fall nicht gerade sinnvoll ist, da man sie nur einmal aufruft.
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Otto123 am 24 Juni 2018, 12:27:26
Hi Tardar,

da Du ja nun noch mit CoolTux das Problem structure deiner Fensterkontakte besprochen hast solltest Du vielleicht grundlegend mal sagen:
Liegt Dir die Perl Programmierung oder hast Du Kenntnis in anderen Sprachen?
Willst Du es eher "Abstrakter" also weniger Programm Kauderwelch?

Pack mal Deine Aufgabe in kleine Teilaufgaben und löse die Stück für Stück.
Definiere mal genau was jetzt geht und welche Aufgabe Du dringend lösen willst.
Welche Komponenten spielen eine Rolle und über welche Wege sind die jetzt in FHEM eingebunden.

Diesen völlig wirr erscheinenden Mammut Codeblock hier wird Dir keiner auflösen. Aber bei konkreten Fragen wirst Du auch Hilfe bekommen.
Schau dir die DOIF Dokumentation an (nicht Perl Modell), da stehen für das was Du machen willst, die meisten Dinge in einzelnen Programmzweigen fix und fertig.

Gruß Otto
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Tardar am 24 Juni 2018, 15:06:21
Grundkenntnisse - das mit den Variablen muss am stundenlangen grübeln gelegen haben - ist ja mittlkerweile der 4. Tag :D (darf man keinem erzählen^^)

Zitat von: Otto123 am 24 Juni 2018, 12:27:26
Hi Tardar,

da Du ja nun noch mit CoolTux das Problem structure deiner Fensterkontakte besprochen hast solltest Du vielleicht grundlegend mal sagen:
Liegt Dir die Perl Programmierung oder hast Du Kenntnis in anderen Sprachen?
Willst Du es eher "Abstrakter" also weniger Programm Kauderwelch?

Pack mal Deine Aufgabe in kleine Teilaufgaben und löse die Stück für Stück.
Definiere mal genau was jetzt geht und welche Aufgabe Du dringend lösen willst.
Welche Komponenten spielen eine Rolle und über welche Wege sind die jetzt in FHEM eingebunden.

Diesen völlig wirr erscheinenden Mammut Codeblock hier wird Dir keiner auflösen. Aber bei konkreten Fragen wirst Du auch Hilfe bekommen.
Schau dir die DOIF Dokumentation an (nicht Perl Modell), da stehen für das was Du machen willst, die meisten Dinge in einzelnen Programmzweigen fix und fertig.

Gruß Otto

Hi, ja - wenn man den Code irgendwie venünftig debuggen könnte und sehen, wo Fehler auftreten sollte das machbar sein.
Da ich nicht weiß ob/wie das geht erschwert das ganze sich enorm.



Habs jetzt rein aus nem DOIF geschrieben, rein ohne PerlCode
Internals:
   DEF        DOIF ($we and (([ReadingsVal("XMI_158d0002091ead", "state", "")] eq "open") or ([ReadingsVal("XMI_158d00020b5d5e", "state", "")] eq "open") or ([ReadingsVal("XMI_158d0002092032", "state", "")] eq "open") or ([ReadingsVal("XMI_158d00020b5d5d", "state", "")] eq "open")))
(set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 6, set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 6)
DOELSEIF ($we and ([00:00-07:59]) and (([ReadingsVal("XMI_158d0002091ead", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d00020b5d5e", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d0002092032", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d00020b5d5d", "state", "")] eq "closed")))
(set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 17, set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 17)
DOELSEIF ($we and ([08:00-23:59]) and ([ReadingsNum("doif_Heizungssteuerung_Wochenende", "durchTemp", "0")] >= 24) and (([ReadingsVal("XMI_158d0002091ead", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d00020b5d5e", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d0002092032", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d00020b5d5d", "state", "")] eq "closed")))
(set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 17, set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 17)
DOELSEIF ($we and ([08:00-11:59]) and ([ReadingsNum("doif_Heizungssteuerung_Wochenende", "durchTemp", "0")] < 24) and (([ReadingsVal("XMI_158d0002091ead", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d00020b5d5e", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d0002092032", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d00020b5d5d", "state", "")] eq "closed")))
(set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 25, set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 25)
DOELSEIF ($we and ([12:00-14:59]) and ([ReadingsNum("doif_Heizungssteuerung_Wochenende", "durchTemp", "0")] < 24) and (([ReadingsVal("XMI_158d0002091ead", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d00020b5d5e", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d0002092032", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d00020b5d5d", "state", "")] eq "closed")))
(set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 20, set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 20)
DOELSEIF ($we and ([15:00-19:59]) and ([ReadingsNum("doif_Heizungssteuerung_Wochenende", "durchTemp", "0")] < 24) and (([ReadingsVal("XMI_158d0002091ead", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d00020b5d5e", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d0002092032", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d00020b5d5d", "state", "")] eq "closed")))
(set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 24, set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 24)
DOELSEIF ($we and ([20:00-23:59]) and ([ReadingsNum("doif_Heizungssteuerung_Wochenende", "durchTemp", "0")] < 24) and (([ReadingsVal("XMI_158d0002091ead", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d00020b5d5e", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d0002092032", "state", "")] eq "closed") and ([ReadingsVal("XMI_158d00020b5d5d", "state", "")] eq "closed")))
(set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 22, set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 22)
DOELSE
(set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 17, set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 17)
   MODEL      Perl
   NAME       doif_Heizungssteuerung_Wochenende
   NR         64
   NTFY_ORDER 50-doif_Heizungssteuerung_Wochenende
   STATE      initialized
   TYPE       DOIF
   OLDREADINGS:
   READINGS:
     2018-06-24 14:59:56   durchTemp       22.25
     2018-06-24 14:59:56   mode            enabled
     2018-06-24 14:59:56   state           initialized
   Regex:
   condition:
     0         
   devices:
   helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   itimer:
   perlblock:
     0         
   uiState:
   uiTable:
Attributes:
   alias      Heizungssteuerung Sa-So, Feiertags
   room       01_Logik
   userReadings durchTemp {(((ReadingsNum("Heizung_Computer", "1.ACTUAL_TEMPERATURE", "1000") + ReadingsNum("Heizung_Wohnzimmer", "1.ACTUAL_TEMPERATURE", "1000"))/2)-0.85)}



Aber es funktioniert dennoch nicht.
Hab auch kein struct angelegt, daher die vielen Prüfungen in den Bedingungen.

Bin gespannt, ob ich das in diesem Leben noch hinbekomm  :-X
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: CoolTux am 24 Juni 2018, 15:21:18
Ich habe meinen Namen gelesen  ;D


Du machst Dir das unnötig selber schwer. Man debugged nie den gesamten Code sondern immer nur Teile.
Versuch doch erstmal nur 2 Zeilen also mit einem DOELSEIF
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Damian am 24 Juni 2018, 15:22:46
Du kombinierst Sachen miteinander, die es nicht gibt:

[ReadingsVal("XMI_158d0002091ead", "state", "")]

Die DOIF-Syntax für Readings lautet aber:

[<DEVICE>:<Reading>]


ReadingsVal("XMI_158d0002091ead", "state", "")

ist dagegen ein Aufruf einer Perl-Funktion, dieser triggert im Gegensatz zu DOIF-Syntax allerdings nicht das DOIF-Modul.

Bevor du weitere vier Tage kämpfst. Nimm dir eine halbe Stunde Zeit und lies dir aufmerksam die Einleitung hier: https://fhem.de/commandref_DE.html#DOIF , denn die hast du offenbar zu schnell überflogen.
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: CoolTux am 24 Juni 2018, 15:34:37
Oder aber, Sorry Damian, Du baust das ganze als wirkliche 99myUtils und triggerst mit Notify
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Damian am 24 Juni 2018, 15:59:26
Zitat von: CoolTux am 24 Juni 2018, 15:34:37
Oder aber, Sorry Damian, Du baust das ganze als wirkliche 99myUtils und triggerst mit Notify

Das kann er machen, wenn er ohne Zeittrigger auskommt.

Er muss nur beachten, dass auch dort, solche Angaben nicht funktionieren:

[ReadingsVal("XMI_158d0002091ead", "state", "")]

Zeitintervalle in der Syntax:

[08:00-11:59]

nicht existieren.

Und er selbst verhindern muss, dass bei jedem Temperatur-Event ein set-Befehl ausgeführt wird.


Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Tardar am 24 Juni 2018, 16:17:44
Hey,

ich danke euch allen :)
Grundsätzlich funktioniert es nun (zumindest mit weniger Codezeilen :D).

Allerdings wird der Zeitraum, den ich eingrenzen möchte, falsch interpretiert.

Zwischen 16:00 und 17:59 HEUTE soll die Heizung so geschaltet werden.
Aktuell wird die 16:00 (da sie heute nicht mehr zutreffen kann !?) auf den 25.06. geprüft und die Bedingung trifft nicht.

Ich habe Euch mal einen Screenshot angefügt (Timer 01_c02 wird auf den morgigen, statt den heutigen tag gesetzt).

Weiß da noch wer Rat ? ;)
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Damian am 24 Juni 2018, 16:34:17
Mit der Ausgaben von  "list <dein DOIF-Modul>" in der Kommandozeile kann man mehr erkennen.

Angaben der Art:

[XMI_158d0002091ead:&STATE,""] lassen sich einfach angeben: [XMI_158d0002091ead]

$we and [00:00-07:59] kannst du einfacher angeben [00:00-07:59|WE]

Noch ein Gedanke zu Triggern:

Grundsätzlich triggert alles was in eckigen Klammern vorkommt, soll die Angabe nur abgefragt werden, dann muss man ein Fragezeichen voranstellen z. B.
[?XMI_158d0002091ead]

Na ja, ich wiederhole mich, das habe ich eigentlich doch schon alles in die Commandref geschrieben ;)
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Tardar am 24 Juni 2018, 16:40:21
Zitat von: Damian am 24 Juni 2018, 16:34:17
Mit der Ausgaben von  "list <dein DOIF-Modul>" in der Kommandozeile kann man mehr erkennen.

Angaben der Art:

[XMI_158d0002091ead:&STATE,""] lassen sich einfach angeben: [XMI_158d0002091ead]

$we and [00:00-07:59] kannst du einfacher angeben [00:00-07:59|WE]

Noch ein Gedanke zu Triggern:

Grundsätzlich triggert alles was in eckigen Klammern vorkommt, soll die Angabe nur abgefragt werden, dann muss man ein Fragezeichen voranstellen z. B.
[?XMI_158d0002091ead]

Na ja, ich wiederhole mich, das habe ich eigentlich doch schon alles in die Commandref geschrieben ;)

Ja schon :)
Aber es dürfte doch egal sein, ob ich mit $we & {zeitbereich} prüfe oder wie du es schreibst.
Oder hat das Auswirkungen auf die "Tage" die für die Zeit angenommen werden ?

Hier das aktuelle list:
Internals:
   DEF        ($we and (([XMI_158d0002091ead:&STATE,""] eq "open") or ([XMI_158d00020b5d5e:&STATE,""] eq "open") or ([XMI_158d0002092032:&STATE,""] eq "open") or ([XMI_158d00020b5d5d:&STATE,""] eq "open")))
(set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 6, set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 6)
DOELSEIF (($we and [16:00-17:59]) and (([XMI_158d0002091ead:&STATE,""] eq "closed") and ([XMI_158d00020b5d5e:&STATE,""] eq "closed") and ([XMI_158d0002092032:&STATE,""] eq "closed") and ([XMI_158d00020b5d5d:&STATE,""] eq "closed")))
(set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 17, set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 17)
DOELSE (set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 30, set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 30)
   MODEL      FHEM
   NAME       doif_Heizungssteuerung_Wochenende
   NR         64
   NTFY_ORDER 50-doif_Heizungssteuerung_Wochenende
   STATE      cmd_3
   TYPE       DOIF
   OLDREADINGS:
   READINGS:
     2018-06-24 16:34:20   Device          XMI_158d00020b5d5e
     2018-06-24 16:34:22   cmd             3
     2018-06-24 16:34:22   cmd_event       XMI_158d00020b5d5e
     2018-06-24 16:34:22   cmd_nr          3
     2018-06-24 16:34:22   durchTemp       22.5
     2018-06-24 16:34:20   e_XMI_158d00020b5d5e_STATE close
     2018-06-24 16:34:02   mode            enabled
     2018-06-24 16:34:22   state           cmd_3
     2018-06-24 16:34:02   timer_01_c02    25.06.2018 16:00:00
     2018-06-24 16:34:02   timer_02_c02    24.06.2018 17:59:00
   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          $we and ((InternalDoIf($hash,'XMI_158d0002091ead','STATE','""') eq "open") or (InternalDoIf($hash,'XMI_158d00020b5d5e','STATE','""') eq "open") or (InternalDoIf($hash,'XMI_158d0002092032','STATE','""') eq "open") or (InternalDoIf($hash,'XMI_158d00020b5d5d','STATE','""') eq "open"))
     1          ($we and DOIF_time($hash,0,1,$wday,$hms)) and ((InternalDoIf($hash,'XMI_158d0002091ead','STATE','""') eq "closed") and (InternalDoIf($hash,'XMI_158d00020b5d5e','STATE','""') eq "closed") and (InternalDoIf($hash,'XMI_158d0002092032','STATE','""') eq "closed") and (InternalDoIf($hash,'XMI_158d00020b5d5d','STATE','""') eq "closed"))
   days:
   devices:
     0           XMI_158d0002091ead XMI_158d00020b5d5e XMI_158d0002092032 XMI_158d00020b5d5d
     1           XMI_158d0002091ead XMI_158d00020b5d5e XMI_158d0002092032 XMI_158d00020b5d5d
     all         XMI_158d0002091ead XMI_158d00020b5d5e XMI_158d0002092032 XMI_158d00020b5d5d
   do:
     0:
       0          set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 6, set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 6
     1:
       0          set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 17, set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 17
     2:
       0          set Heizung_Computer datapoint 1.SET_POINT_TEMPERATURE 30, set Heizung_Wohnzimmer datapoint 1.SET_POINT_TEMPERATURE 30
   helper:
     event      close,no_close: 0
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   XMI_158d00020b5d5e
     timerevent close,no_close: 0
     triggerDev XMI_158d00020b5d5e
     DOIF_eventas:
       cmd_nr: 3
       cmd: 3
       cmd_event: XMI_158d00020b5d5e
       state: cmd_3
     timerevents:
       close
       no_close: 0
     timereventsState:
       state: close
       no_close: 0
     triggerEvents:
       close
       no_close: 0
     triggerEventsState:
       state: close
       no_close: 0
   internals:
     0           XMI_158d0002091ead:STATE XMI_158d00020b5d5e:STATE XMI_158d0002092032:STATE XMI_158d00020b5d5d:STATE
     1           XMI_158d0002091ead:STATE XMI_158d00020b5d5e:STATE XMI_158d0002092032:STATE XMI_158d00020b5d5d:STATE
     all         XMI_158d0002091ead:STATE XMI_158d00020b5d5e:STATE XMI_158d0002092032:STATE XMI_158d00020b5d5d:STATE
   interval:
     0          -1
     1          0
   intervalfunc:
   itimer:
   localtime:
     0          1529935200
     1          1529855940
   readings:
   realtime:
     0          16:00:00
     1          17:59:00
   time:
     0          16:00:00
     1          17:59:00
   timeCond:
     0          1
     1          1
   timer:
     0          0
     1          0
   timers:
     1           0  1
   trigger:
   triggertime:
     1529855940:
       localtime  1529855940
       hash:
     1529935200:
       localtime  1529935200
       hash:
   uiState:
   uiTable:
Attributes:
   alias      test
   room       01_Logik
   userReadings durchTemp {(((ReadingsNum("Heizung_Computer", "1.ACTUAL_TEMPERATURE", "1000") + ReadingsNum("Heizung_Wohnzimmer", "1.ACTUAL_TEMPERATURE", "1000"))/2)-0.85)}
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Damian am 24 Juni 2018, 16:44:11
     2018-06-24 16:34:22   cmd_event       XMI_158d00020b5d5e
     2018-06-24 16:34:22   cmd_nr          3


Daran siehst du, dass XMI_158d00020b5d5e um 16:34:22 Uhr das Modul getriggert hat und weil es im dritten Zweig vorkommt und die dazugehörige Bedingung zum Triggerzeitpunkt wahr war, der Befehl von cmd_3 ausgeführt wurde. Eigentlich ganz einfach.
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Tardar am 24 Juni 2018, 16:50:51
Schon, aber die Triggerzeit liegt doch im geprüften Zeitraum (16:00 - 17:59).
Warum greift da dann das DOELSE (Heizung 30) anstatt der Command zuvor (Heizung 17) ? :)

Timer_01_c02 = 25.06. (morgen, warum nicht heute - zumal morgen kein Wochenende mehr ist ^^ - es soll ja der Zeitraum am Wochenende greifen, da macht das keinen Sinn, dass er von morgen ausgeht  ;D)
Timer_02_c02 = 24.06. (heute - passt)
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Damian am 24 Juni 2018, 17:04:33
ZitatNoch ein Gedanke zu Triggern:

Grundsätzlich triggert alles was in eckigen Klammern vorkommt, soll die Angabe nur abgefragt werden, dann muss man ein Fragezeichen voranstellen z. B.
[?XMI_158d0002091ead]
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Damian am 24 Juni 2018, 19:59:35
Und noch eine wichtige Info, die in der Einleitung der Commanref steht:

ZitatZu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten. Kommt ein Device in mehreren Bedingungen vor, so wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist.
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Prof. Dr. Peter Henning am 24 Juni 2018, 20:51:28
Sicher. Aber bitte vorher:
1. Perl lernen
2. Die komplizierten Sachen in ein ordentliches Perl-Unterprogrammn auslagern, z.B. in der 99_myUtils.pm

Sonst kann das m.E. nichts werden.

LG

pah
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Tardar am 24 Juni 2018, 21:13:44
Hey,

habs jetzt hinbekommen - es läuft.
Nur die Frage die sich mir stellt - ich habe Feiertage mit inkludiert und prüfe mit [Uhrzeit1:Uhrzeit2|WE] in der Bedingung.

In den timern bei den Readings wird allerdings als nächster der morgige Tag angegeben.
Nicht, dass mich das stört, weil die DOIF nur am Wochenende läuft, ist das normal oder lässt sich die Anzeige auf das "nächste Wochenende" setzen ?

Und ja - ich merk, dass ich mich langsam wieder mehr mit Programmierung beschäftigen sollte :)
Danke an alle, die geholfen haben bzw. versucht haben, mir zu helfen :)
Titel: Antw:FHEM Steuert Heizungen nicht
Beitrag von: Damian am 24 Juni 2018, 22:31:10
Zitat von: Tardar am 24 Juni 2018, 21:13:44
Hey,

habs jetzt hinbekommen - es läuft.
Nur die Frage die sich mir stellt - ich habe Feiertage mit inkludiert und prüfe mit [Uhrzeit1:Uhrzeit2|WE] in der Bedingung.

In den timern bei den Readings wird allerdings als nächster der morgige Tag angegeben.
Nicht, dass mich das stört, weil die DOIF nur am Wochenende läuft, ist das normal oder lässt sich die Anzeige auf das "nächste Wochenende" setzen ?

Und ja - ich merk, dass ich mich langsam wieder mehr mit Programmierung beschäftigen sollte :)
Danke an alle, die geholfen haben bzw. versucht haben, mir zu helfen :)

Es wird jeden Tag geprüft, ob die Zeitangabe inklusive Wochentage bzw. Feiertage gültig ist und damit ob die Bedingung auf Wahrheit geprüft wird oder nicht, daher steht die Zeitangaben auf dem nächsten Tag.

Als Tipp kann ich nur empfehlen in kleinen Schritten anzufangen, denn zu der typischen sequentiellen Abarbeitung von Befehlen kommen Ereignis- und Zeittrigger hinzu, die man - auch als Programmierer - erst einmal verinnerlichen muss.