FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: kjmEjfu am 04 November 2020, 10:42:06

Titel: gelöst: Problem mit Template
Beitrag von: kjmEjfu am 04 November 2020, 10:42:06
Hi zusammen,

ich habe mir, nach dem Vorbild https://wiki.fhem.de/wiki/DOIF/Automatisierung#Beschattungssteuerung_abh.C3.A4ngig_von_der_Zimmertemperatur_und_Sonneneinstrahlung_f.C3.BCr_mehrere_Szenarien ,  folgendes Template gebastelt:

DEF TPL_light (    ## Definition des Templates namens TPL_light
## Parameternummer $1             $2                           $3                  $4              $5          $6          $7             $8                       $9
## Bedeutung       Name der Szene Lichtsensor des Zimmers  Lichtaktor      Schwellwert ein   Schwellwert aus  von Uhrzeit  bis Uhrzeit   Befehl zum Einschalten Befehl zum Ausschalten
light_$1 { 

## DOIF Block

  if ([$6-$7]) {                                 ## innerhalb des Zeitfensters     
    if ([$2:control:d] < [$4] and !$VAR{$1}) { ## Wenn die Helligkeit unterhalb des Schwellwerts_ein liegt und Sonne scheint und die Lampe noch nicht eingeschaltet wurde
      fhem_set("$3 $8");                       ## Fenster herunterfahren
      set_State("Szene: $1 Lampe ein");       ## Status mit letztem Befehl belegen
      $VAR{$1}=1;                               ## Merker setzen, dass Fenster bereits heruntergefahren wurde
    } elsif ([$2:control:d] > [$5] and $VAR{$1}) { ## Wenn die Helligkeit oberhalb des Schwellwerts_aus liegt
      fhem_set("$3 $9");                      ## Fenster hochfahren
      set_State("Szene: $1 Lampe aus");; ## Status mit letztem Befehl belegen
      $VAR{$1}=0;                               ## Merker zurücksetzen
    }
  } 
}
)  ## Ende der Templatedefinition

reset {[00:01];delete $VAR;}    ## DOIF-Block namens reset um nachts alle Merker zu löschen

## Definition einzelner DOIF-Blöcke pro Fenstergruppe mit Hilfe des Templates
##        $1                 $2                        $3              $4   $5   $6    $7    $8                  $9
TPL_light (Treppenbeleuchtung,Sensor_Aussen_Kind1_Sonne,Licht_EG_Treppe,1600,2500,00:00,23:59,datapoint 2.STATE 1,datapoint 2.STATE 0)
TPL_light (Wohnzimmer_Stehlampe,Sensor_Aussen_Ankleide_Sonne,Steckdose_Roaming_Roaming_Sonoff,3000,3500,00:00,23:59,on,off)


Aber aus irgendeinem Grund läuft das immer in den if-Zweig und landet nicht im elsif. Obwohl die beiden Lichtsensor aktuell auf mehr als 10000 stehen.
An welcher Stelle habe ich denn Tomaten vor den Augen?
Titel: Antw:Problem mit Template
Beitrag von: Damian am 04 November 2020, 16:44:05
Der vierte und fünfte Parameter $4 oder $5 wird mit Zahlen belegt z. B. 1600

mit if ([$2:control:d] < [$4] and !$VAR{$1})

steht dann da:

.... < [1600] and ...

so etwas gibt es nicht in Perl und es ist auch keine DOIF-Syntax.
Titel: Antw:Problem mit Template
Beitrag von: kjmEjfu am 04 November 2020, 17:02:33
Aaargh, ich wusste das ich was banales übersehe.

Danke für den Hinweis. Ich nehme dann mal die [] weg.
Titel: Antw:Problem mit Template
Beitrag von: Damian am 04 November 2020, 17:10:05
Zitat von: kjmEjfu am 04 November 2020, 17:02:33
Aaargh, ich wusste das ich was banales übersehe.

Danke für den Hinweis. Ich nehme dann mal die [] weg.

ja, am Ende muss DOIF-Perl-Syntax rauskommen.

Mit list kannst du intern sehen, was DOIF aus deinem Template an Szenarien erstellt hat:)