Hauptmenü

Zu blöd für ELSIF

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

Vorheriges Thema - Nächstes Thema

ChristianH

Hallo in die Runde,

ich versuche gerade mal meine Dashbutton Implementation zu verbessern - grundsätzlich ist die Idee:
Dash wird gedrückt - Prüfen auf der Status auf on ist

  • wenn on und zwischen 22:00 und 23:55, dann schalte Lichter aus und schalte eine Licht an
  • wenn on und nicht zwischen 22:00 und 23:55, dann schalte Lichter aus
  • wenn off, dann schalte auf on

Folgendes habe ich definiert:

DashButton_Ariel:b4-7c-9c-73-2f-f6:.short IF ( [Wohnzimmerbeleuchtung] eq "on" && [22:00-23:55])
(
set Wohnzimmerbeleuchtung off,
set IT_V3_Dose3 on-for-timer 1200
set $SELF inactive,
sleep 2,
set $SELF active
)
ELSIF
( [Wohnzimmerbeleuchtung] eq "on")
(
set Wohnzimmerbeleuchtung off,
set $SELF inactive,
sleep 2,
set $SELF active
)
ELSE
(
set Wohnzimmerbeleuchtung on,
set $SELF inactive,
sleep 2,
set $SELF active
)


Klappt aber nicht - es klappte gut, bis ich die weitere Abfrage der Uhrzeit eingefügt habe (und damit das ELSIF).

Danke

Christian

Beta-User

Hast du mal eine Fundstelle, wo das mit ELSIF so drinsteht ;) ?

Mir ist "elsif" (klein geschrieben) nur im Perl-Umfeld ein Begriff. Für IF würde ich mal darauf tippen, dass man sowas als ELSE IF schreiben kann - habe damit aber keine Erfahrung mehr, da ich seit einiger Zeit nur noch Perl-Syntax verwende; das finde ich auf die Dauer übersichtlicher.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

nils_

https://commandref.fhem.de/#IF

da gibt es kein ELSIF, dann musst du verschachteln....

IF( lampe = on)
(
    IF ( zeitspanne )
    (  schalte..... )
    ELSE
    ( schalte andere sachen.....)
)
ELSE
(
    schalte was auch immer....
)
viele Wege in FHEM es gibt!


CoolTux

Es gibt einen Unterschied zwischen Perl if und elsif und dem FHEM Modul IF
IF ist ein FHEM Modul genau wie DOIF.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Beta-User

Zumindest die ersten beiden Fundstellen _schreiben das klein_ und beziehen sich auf ein Perl-Umfeld :P , auch wenn der Autor der zweiten Fundstelle da irgendwas unspezifisch auch mit Großschreibung hantiert (siehe zu blogs &Co: https://wiki.fhem.de/wiki/Dokumentationsstruktur).
Zitat von: Beta-User am 22 Januar 2019, 14:04:34
Mir ist "elsif" (klein geschrieben) nur im Perl-Umfeld ein Begriff. Für IF würde ich mal darauf tippen, dass man sowas als ELSE IF schreiben kann - habe damit aber keine Erfahrung mehr, da ich seit einiger Zeit nur noch Perl-Syntax verwende; das finde ich auf die Dauer übersichtlicher.
Du nutzt hier - wie von CoolTux angemerkt - aber die FHEM-Funktion IF, und bei der gibt es lt. commandref https://fhem.de/commandref.html#IF immer noch nur ELSE ;D
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

ChristianH

Tja, dann ist das wohl so ... mir ist nicht klar, wie ich nun also "on" und Zeitfenster mit einem IF/ELSE verknüpfe und stampfe ne Notify ein!

Danke für eure Mühen!

Christian

Beta-User

Na ja, entweder nutzt du die Quellen, die du für elsif gefunden hast und verwendest richtigen Perl-Code, oder du nutzt IF, dann hatte nils_ ja auch schon die Struktur aus der comamndref dargestellt...
Zitat von: nils_ am 22 Januar 2019, 14:24:02
IF( lampe = on)
(
    IF ( zeitspanne )
    (  schalte..... )
    ELSE
    ( schalte andere sachen.....)
)
ELSE
(
    schalte was auch immer....
)

Anmerkung: Ganz ohne eigene Transferleistung (also das Anpassen gegebener Grundstrukturen auf deine Bedürfnisse) wird das mit FHEM (und jeder anderen HA-Lösung) schwierig...
Nix für ungut, nur meine 2ct.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

flipse

Kann man im Notify nicht auch zwei IF Anweisungen ohne Else stehen lassen?

RGB_Esszimmer:dim.*|RGB_Esszimmer:rgb.*|RGB_Esszimmer.on|RGB_Esszimmer.off
setreading RGB_Esszimmer myLastAction $EVENT;

IF ([RGB_Esszimmer] eq "off")
         (
              set ZWave_SW_Voute_Esszimmer off
         )
ELSE
        (
             IF ("off" eq "off")
             (
                   set ZWave_SW_Esszimmer on,
                   sleep 10
              );

             IF ("$EVTPART0" eq "rgb")
              (
                    set ZWave_SW_RGBW rgb $EVTPART1
              )
             ELSE
             (
                   IF ("$EVTPART0" eq "dim")
                   (
                    set ZWave_SW_RGBW dim $EVTPART1
                    )
             )
         )


Das funktioniert leider nicht.

IF ("off" eq "off")
             (
                   set ZWave_SW_Esszimmer on,
                   sleep 10
              );


Bei diesem Block bekomme ich die Meldung, dass schließende /right Klammern fehlen


RGB_EZ_Chg_n return value: IF: no right bracket: ( IF ("off" eq "off") ( set ZWave_SW_Esszimmer on, sleep 10 )

Beta-User

Zitat von: flipse am 22 Januar 2019, 16:25:45
Kann man im Notify nicht auch zwei IF Anweisungen ohne Else stehen lassen?
Zwei Anmerkungen:
- An sich sehe ich keine großen Probleme dabei (ohne FHEM-IF noch näher zu kennen), mit Perl-if wäre das jedenfalls kein Thema.
- In dem IF-Beispiel aus der cref waren keine ";" drin. Das mit den ";" ist Perl-like ;) . Vielleicht versuchst du es erst mal ohne...

Generelle Empfehlungen bei Fehlermeldungen welcher Art auch immer: Erst mal das Umfeld ansehen und vor allem dann an der Fehlerstelle _genau_ mit den Beispielen vergleichen. Da findet sich in gefühlt 80% schon der Fehler.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

flipse

Zitat von: Beta-User am 22 Januar 2019, 16:33:34
Zwei Anmerkungen:
- An sich sehe ich keine großen Probleme dabei (ohne FHEM-IF noch näher zu kennen), mit Perl-if wäre das jedenfalls kein Thema.
- In dem IF-Beispiel aus der cref waren keine ";" drin. Das mit den ";" ist Perl-like ;) . Vielleicht versuchst du es erst mal ohne...

Generelle Empfehlungen bei Fehlermeldungen welcher Art auch immer: Erst mal das Umfeld ansehen und vor allem dann an der Fehlerstelle _genau_ mit den Beispielen vergleichen. Da findet sich in gefühlt 80% schon der Fehler.

oh man. habs mit nem Komma statt Semikolon versucht. geht... danke

Otto123

Zitat von: ChristianH am 22 Januar 2019, 16:00:24
Tja, dann ist das wohl so ... mir ist nicht klar, wie ich nun also "on" und Zeitfenster mit einem IF/ELSE verknüpfe und stampfe ne Notify ein!

Danke für eure Mühen!

Christian
Hallo Christian,

lös deine Aufgabe doch einfach mit DOIF! Da geht das mit dem Zeitfenster ganz easy.

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

ChristianH

Hallo Otto,

das schaue ich mir später noch mal an .... habe bei der Cmandref nun erkannt, dass man schachteln kann, also IF .. IF ... das war mir nicht klar. Ich habe es nun also so angelegt und prüfe also mal zwischen 22:00-23:55 ;)

DashButton_Ariel:b4-7c-9c-73-2f-f6:.short 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
    )
)


Morgen bin ich klüger ... wen das läuft, dann schmeiss ich es raus und setze mich an DOIF

Christian


ChristianH

Ja . .... ach ja, läuft noch immer nicht ....

2019.01.23 15:14:56 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:14:56 1: PERL WARNING: Bareword found where operator expected at (eval 65158) line 1, near ")fhem"
2019.01.23 15:14:56 1: ERROR evaluating my $EVTPART0='b4-7c-9c-73-2f-f6:';my $TYPE='dash_dhcp';my $NAME='DashButton_Ariel';my $SELF='DashButton_Ariel_notify';my $EVENT='b4-7c-9c-73-2f-f6: short';my $EVTPART1='short';{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 65158) line 1, near ")fhem"

2019.01.23 15:14:56 3: DashButton_Ariel_notify return value: syntax error at (eval 65158) line 1, near ")fhem"