Hauptmenü

gelöst: Problem mit Template

Begonnen von kjmEjfu, 04 November 2020, 10:42:06

Vorheriges Thema - Nächstes Thema

kjmEjfu

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?
Migriere derzeit zu Home Assistant

Damian

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

kjmEjfu

Aaargh, ich wusste das ich was banales übersehe.

Danke für den Hinweis. Ich nehme dann mal die [] weg.
Migriere derzeit zu Home Assistant

Damian

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