isday() in doif - bitte um Hilfe

Begonnen von FränkyBoy, 06 Februar 2019, 11:23:11

Vorheriges Thema - Nächstes Thema

FränkyBoy

Moin,

ich möchte gern meine Garagen-Außenbeleuchtung beim Öffnen des Tors anschalten. Das geht auch recht einfach mit einem doif.
Am Tage soll dies aber nicht passieren, also habe ich mich hier etwas umgesehen und bin bei isday() gelandet.

Leider bekomme ich eine Fehlermeldung , wenn ich es mit folgender Def im doif versuche:

{
   if ([Garagentor] eq "opening" and !isday())
   {fhem_set "Garage_Beleuchtung_S1 on-for-timer 300"}
}


Fehlermeldung des doif : condition c01: Bareword "isday" not allowed while "strict subs" in use, line 2.

Kann mir da mal jemand auf die Sprünge helfen?

Gruß
Frank

r00t2

#1
Schon mal so versucht?

{
  if (Value("Garagentor") eq "opening") && (!isday())
  {
    fhem_set "Garage_Beleuchtung_S1 on-for-timer 300"
  }
}

FHEM 6.0 (Raspberry Pi 2 B | Raspberry Pi OS Lite | Perl 5.28.1 | UZB Z-WAVE.Me | Hue Bridge V1 | SIGNALDuino 433 MHz | FritzBox | Kodi | Pioneer AVR | MQTT | Node-RED | Diverse Google Dienste)

FränkyBoy

Hi,

danke für die schnelle Antwort.
Hab das grade ausprobiert. Nun kommt zwar keine Fehlermeldung, aber die Lampe geht auch nicht an (habe testweise das ! weggelassen).


Christoph Morrison

DOIF ([Garagentor] eq "opening" and !isday) ( ... )

müsste funktionieren. Beachte, dass [Garagentor] den STATE von Garagentor ausliest und nicht den state.

Damian

Zitat von: FränkyBoy am 06 Februar 2019, 11:23:11
Moin,

ich möchte gern meine Garagen-Außenbeleuchtung beim Öffnen des Tors anschalten. Das geht auch recht einfach mit einem doif.
Am Tage soll dies aber nicht passieren, also habe ich mich hier etwas umgesehen und bin bei isday() gelandet.

Leider bekomme ich eine Fehlermeldung , wenn ich es mit folgender Def im doif versuche:

{
   if ([Garagentor] eq "opening" and !isday())
   {fhem_set "Garage_Beleuchtung_S1 on-for-timer 300"}
}


Fehlermeldung des doif : condition c01: Bareword "isday" not allowed while "strict subs" in use, line 2.

Kann mir da mal jemand auf die Sprünge helfen?

Gruß
Frank

Die Syntax entspricht dem Perl-Modus, ich glaube dieser ist hier nicht beabsichtigt gewesen, daher die DOIF-Bedingung des FHEM-Modus, wie bereits vorgeschlagen, in runden Klammern angeben.

PS: Im DOIF Perl-Modus müssen allgemeine FHEM-Funktionen des main-Namensraums, wie in der Commandref beschrieben, mit vorangestellten Doppelpunkten angegeben werden, hier ::isday().
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FränkyBoy

Jetzt habt ihr es geschafft, ich bin verwirrt :-)

Also das doif "läuft im Perl Modus".

@Damian: Könntest du bitt mal die Def des doif bearbeiten und posten?

Ich seh so langsam den Wald vor lauter Klammern nicht mehr  :-[
Den Unterschied zwischen STATE und state habe ich zwar nicht auf dem Zettel, aber in Garagentor scheint beides gleich zu sein...

Gruß
Frank

FränkyBoy

So...

Nach langem Ausprobieren:

{
  if ([Garagentor] eq "opening"  and !::isday)
  { fhem_set "Garage_Beleuchtung_S1 on-for-timer 300"}
}


Das scheint nun zu Funktionieren. Der Abschließende Test kommt heute Abend, wenn es dunkel ist. Da ich nicht ganz sicher bin ob das "!" vor oder nach den "::" kommt.

Vielen Dank für die Anregungen und Hilfestellungen.

Gruß
Frank