Hauptmenü

Zu blöd für ELSIF

Begonnen von ChristianH, 22 Januar 2019, 13:53:25

Vorheriges Thema - Nächstes Thema

Otto123

Hi,

sowas kann das IF nicht!
IF ([?22:00-23:55])
Das ist DOIF Syntax!

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

nils_

ZitatZeitabhängig schalten: In der Zeit zwischen 20:00 und 22:00 Uhr soll das Licht ausgehen, wenn es an war und ich den Raum verlasse:

define n_lamp_off notify sensor IF ($hms gt "20:00" and $hms lt "22:00" and [sensor] eq "absent") (set lamp:FILTER=STATE!=off off)

das ist syntax im IF

das andere ist - so wie otto geschrieben hat -  DOIF syntax --> anderes modul.
evtl. guckst du dir das mal an :)
https://commandref.fhem.de/commandref_DE.html#DOIF
viele Wege in FHEM es gibt!

ChristianH

Ok - warum die syntaktisch alle unterschiedlich sind, ist sicher ein feature ;)

Das "?" ist es nicht:

2019.01.23 15:51:49 5: Triggering DashButton_Ariel_notify
2019.01.23 15:51:49 4: DashButton_Ariel_notify exec IF ( [Wohnzimmerbeleuchtung] eq "on" )
(
    IF ([22:00-23:55])
    (
        set $SELF inactive,
        set Wohnzimmerbeleuchtung off,
        set IT_V3_Dose3 on-for-timer 1200,
        sleep 2,
        set $SELF active
    )   
    ELSE
    (
        set $SELF inactive,
        set Wohnzimmerbeleuchtung off,
        sleep 2,
        set $SELF active
    )
ELSE
    (
    set $SELF inactive,
    set Wohnzimmerbeleuchtung on,
    sleep 2,
    set $SELF active
    )
)
2019.01.23 15:51:49 1: PERL WARNING: Bareword found where operator expected at (eval 70915) line 1, near ")fhem"
2019.01.23 15:51:49 1: ERROR evaluating my $EVTPART1='short';my $EVENT='b4-7c-9c-73-2f-f6: short';my $SELF='DashButton_Ariel_notify';my $NAME='DashButton_Ariel';my $EVTPART0='b4-7c-9c-73-2f-f6:';my $TYPE='dash_dhcp';{if( InternalIf('Wohnzimmerbeleuchtung','STATE','') eq "on" ){fhem('    IF ([22:00-23:55])     (         set DashButton_Ariel_notify inactive,        set Wohnzimmerbeleuchtung off,        set IT_V3_Dose3 on-for-timer 1200,        sleep 2,        set DashButton_Ariel_notify active    )       ELSE    (         set DashButton_Ariel_notify inactive,        set Wohnzimmerbeleuchtung off,        sleep 2,        set DashButton_Ariel_notify active    )')fhem('ELSE     (     set DashButton_Ariel_notify inactive');fhem('    set Wohnzimmerbeleuchtung on');fhem('    sleep 2;    set DashButton_Ariel_notify active    )')}}: syntax error at (eval 70915) line 1, near ")fhem"

2019.01.23 15:51:49 3: DashButton_Ariel_notify return value: syntax error at (eval 70915) line 1, near ")fhem"


Was mich wundert, im Debug Output taucht auf einmal vor jedem einzelnen Befehl "fhem(' .." auf.

nils_

ZitatIF ([22:00-23:55])

das geht nicht im zusammenspiel mit IF. egal ob mit ? oder ohne. es geht nicht......
habe auch schon das beispiel aus der commandref gepostet wie man beim IF eine zeitliche abfrage macht.

ansonsten nimm DOIF, da kannste dann mit ? und triggern und nicht triggern und so Sachen rumspielen.

aber achtung: wieder eine etwas andere syntax !!!

Zitat von: ChristianH am 23 Januar 2019, 15:57:41
Was mich wundert, im Debug Output taucht auf einmal vor jedem einzelnen Befehl "fhem(' .." auf.
das macht das IF. und um es vorweg zu nehmen, beim DOIF wird dir sowas noch viel mehr begegnen.
Aber im Grunde muss es dich nicht jucken, wenn du dich an die korrekte (!!!!)  _modulspezifische_ Syntax hältst.
viele Wege in FHEM es gibt!

Otto123

#19
Zitat von: ChristianH am 23 Januar 2019, 15:57:41
Ok - warum die syntaktisch alle unterschiedlich sind, ist sicher ein feature ;)
Weil die Welt bunt ist :)

Was denkst Du warum es IF gibt und warum es DOIF gibt?  ;D

Auf alle Fälle IF kennt keinen Zeitbereich als wahr oder unwahr! Er rechnet eventuell - keine Ahnung.
Du könntest mit IF die Stunde und minute separat abfragen - aber ....  :-X
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

IF ist ein FHEM-Befehl, es kann nicht mehr als ein Perl-if - es vereinfacht lediglich nur die Syntax (intern wird die Angabe in Perl-if übersetzt)

DOIF ist ein FHEM-Modul, es arbeitet eigenständig und kann wesentlich mehr als der IF-Befehl, weil es nicht auf die Perl-if-Syntax angewiesen ist.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF