Hauptmenü

FHEM Steuert Heizungen nicht

Begonnen von Tardar, 23 Juni 2018, 19:16:19

Vorheriges Thema - Nächstes Thema

Tardar

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 =)

MadMax-FHEM

#1
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Tardar

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

Otto123

Hi,

Machst Du mal bitte ein list von deinem DOIF Device

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Tardar

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

Otto123

Sorry , ich kenne mich dem Perl Modell nicht aus. Aber schon zweimal DOIF im Code erscheint  mir falsch.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

amenomade

Naja... auch mit Perl Modus, muss die Perl Syntax respektiert werden...
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

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. ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

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 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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Tardar

#9
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 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.

Damian

#10
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");
        ...


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Tardar

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