DOIF neue Features: Generalisierung, $DEVICE, $EVENT, Attribut notexist

Begonnen von Damian, 28 Dezember 2015, 22:06:42

Vorheriges Thema - Nächstes Thema

JoeALLb

Zitat von: Damian am 03 Februar 2016, 08:46:40
Noch nicht alle ;)
Wenn wir schon am träumen sind... :)
Wir wäre es mit einer (einfachen) Verschachtelung von IFs ,ähnlich zu

(set lg_light on [DOIFsub $EVENT eq "TEMPL"])



oder gar

  DOIF ([winter])
    (set desired-temp 18 )
    CASE ([light] eq "on")
       (set xyy)
    CASE ([garage] eq "offen")
       (set xyyZZ)
    CASEEND
  DOELSEIF ([sommer])
    (set desired-temp off )


Zum Hintergrund:
Ich habe in ein großes DOIF mit sehr vielen (set ...) Einträgen, manche haben aber bestimmte Bedingungen wie Lichteinfall, etc.
Mit reinen DOELSEIF ist das schwierig, mit notify auch ;-). Das alles in eigene DOIFS zu ziehen wird unübersichtlich...

Aber wie gesagt, nur ein Traum... vielen Dank für die tolle Arbeit!

FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Per


l2r

Wissen ist Macht.
Ich weiß nix.
Macht nix.

Ellert

Ich versuche gerade ein DOIF zu definieren mit

define doif DOIF ([Test:"test: "])

da kommt eine Fehlermeldung: DOIF: unknown expression format: ". Es liegt am Doppelpunkt in  "test: ".

Ist der Doppelpunkt als Zeichen nicht erlaubt? Ich dachte in der neuen DOIF Version ist er erlaubt.

Damian

Ideen sind natürlich immer willkommen. Zu bedenken ist allerdings immer, das Modul nicht unnötig komplizierter zu machen als es schon ist. Manche Sachen lassen sich leicht einbauen, Manche Sachen würde man wieder gerne herausnehmen, weil sie im Nachhinein Verwirrung stiften. Dann gibt es das Problem der verfügbaren Programmierzeit. Und es gibt  Dinge, die der Anwender zunächst nicht sieht, aber auf meiner Liste ganz oben stehen:

1. Nur ein Trigger bei gleichen Zeiten -> damit wird die Reihenfolge der Abarbeitung gewährleistet (ist zur Zeit nicht der Fall)

2. Setzen der Anfangszeit eines Zeitintervalls erst beim End-Trigger des Intervalls -> damit würde man bei Zeitintervallen nicht mehrfach triggern, wenn die neue Zeit sich noch innerhalb des alten Intervalls befindet z. B. [([10:00]+rand(120)) - 12:00]

Es gibt also genug zu tun. Es lebe der Karneval und die Zeit zum Programmieren ;)

Gruß

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zitat von: Ellert am 03 Februar 2016, 10:15:41
Ich versuche gerade ein DOIF zu definieren mit

define doif DOIF ([Test:"test: "])

da kommt eine Fehlermeldung: DOIF: unknown expression format: ". Es liegt am Doppelpunkt in  "test: ".

Ist der Doppelpunkt als Zeichen nicht erlaubt? Ich dachte in der neuen DOIF Version ist er erlaubt.

ja, bei

(["Test:test: "])


habe ich es schon berücksichtigt, in dem anderen Fall wohl noch nicht.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Zitat von: JoeALLb am 03 Februar 2016, 09:25:08
Wenn wir schon am träumen sind... :)
Wir wäre es mit einer (einfachen) Verschachtelung von IFs ,ähnlich zu

(set lg_light on [DOIFsub $EVENT eq "TEMPL"])



oder gar

  DOIF ([winter])
    (set desired-temp 18 )
    CASE ([light] eq "on")
       (set xyy)
    CASE ([garage] eq "offen")
       (set xyyZZ)
    CASEEND
  DOELSEIF ([sommer])
    (set desired-temp off )


Zum Hintergrund:
Ich habe in ein großes DOIF mit sehr vielen (set ...) Einträgen, manche haben aber bestimmte Bedingungen wie Lichteinfall, etc.
Mit reinen DOELSEIF ist das schwierig, mit notify auch ;-). Das alles in eigene DOIFS zu ziehen wird unübersichtlich...

Aber wie gesagt, nur ein Traum... vielen Dank für die tolle Arbeit!

Das geht schon:
  DOIF ([winter])
    (set desired-temp 18,
    IF ([light] eq "on")
       (set xyy),
    IF ([garage] eq "offen")
       (set xyyZZ))
DOELSEIF ([sommer])
    (set desired-temp off )

JoeALLb

Zitat von: Ellert am 03 Februar 2016, 10:30:56
Das geht schon:

VIELEN Dank!!! Das war mich echt nicht bewußt, und ich habe schon einiges darüber gesucht...
Auch aus der commandref kann ich das nicht herauslesen?!?
Beiträgen wie diese führten mich auch nicht weiter http://forum.fhem.de/index.php?topic=34935.0!!

Wie auch immer, VIELEN DANK!!! Mein Tag ist gerettet.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Ellert

Zitat von: JoeALLb am 03 Februar 2016, 10:46:40
VIELEN Dank!!! Das war mich echt nicht bewußt, und ich habe schon einiges darüber gesucht...
Auch aus der commandref kann ich das nicht herauslesen?!?
Beiträgen wie diese führten mich auch nicht weiter http://forum.fhem.de/index.php?topic=34935.0!!

Wie auch immer, VIELEN DANK!!! Mein Tag ist gerettet.

Im Nachhinein denke ich, es hat nicht die gewünschte Funktionalität, denn IF ([ABC] eq "xyz") triggert nicht, es ist ein FHEM-Befehl, s. http://fhem.de/commandref_DE.html#IF

Damian

Zitat von: JoeALLb am 03 Februar 2016, 09:25:08
Wenn wir schon am träumen sind... :)
Wir wäre es mit einer (einfachen) Verschachtelung von IFs ,ähnlich zu

(set lg_light on [DOIFsub $EVENT eq "TEMPL"])



oder gar

  DOIF ([winter])
    (set desired-temp 18 )
    CASE ([light] eq "on")
       (set xyy)
    CASE ([garage] eq "offen")
       (set xyyZZ)
    CASEEND
  DOELSEIF ([sommer])
    (set desired-temp off )


Zum Hintergrund:
Ich habe in ein großes DOIF mit sehr vielen (set ...) Einträgen, manche haben aber bestimmte Bedingungen wie Lichteinfall, etc.
Mit reinen DOELSEIF ist das schwierig, mit notify auch ;-). Das alles in eigene DOIFS zu ziehen wird unübersichtlich...

Aber wie gesagt, nur ein Traum... vielen Dank für die tolle Arbeit!

Es ist auch nicht klar, ob der CASE-Fall ohne Winter-Trigger ausgewertet werden soll oder nicht, auf der anderen Seite kann Winter und light nicht gleichzeitig triggern. Mit anderen Worten, wenn man sich eine Syntax überlegt, dann muss man auch alle Eventualitäten berücksichtigen.

Man könnte auch definieren:

DOIF ([winter] or [light] or [garage])
    (set desired-temp 18,
    IF ([light] eq "on")
       (set xyy),
    IF ([garage] eq "offen")
       (set xyyZZ))
DOELSEIF ([sommer])
    (set desired-temp off )


Es gibt also auch jetzt schon vielfältige Möglichkeiten seine Wünsche umzusetzen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Zitat von: Damian am 03 Februar 2016, 13:21:48 DOIF ([winter] or [light] or [garage])
Sollte es nicht ([winter] and ([light] or [garage])) sein? Zumindest passend zur angegebenen Aufgabenstellung.

Damian

Zitat von: Per am 03 Februar 2016, 14:56:25
Sollte es nicht ([winter] and ([light] or [garage])) sein? Zumindest passend zur angegebenen Aufgabenstellung.

Nein, es geht hier nur um den Trigger, der Inhalt der Variablen ist egal und normalerweise immer wahr, weil ungleich "".
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF


Damian

Zitat von: Damian am 03 Februar 2016, 10:19:37
ja, bei

(["Test:test: "])


habe ich es schon berücksichtigt, in dem anderen Fall wohl noch nicht.

([Test:"test: "])

funktioniert ab morgen auch.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert