DOIF: Indirekte Zeitangaben auch innerhalb Perl-Funktion möglich?

Begonnen von FunkOdyssey, 22 Juli 2015, 18:18:58

Vorheriges Thema - Nächstes Thema

FunkOdyssey

Ich habe in der CommandRef folgendes Beispiel gesehen:

define di_time DOIF ([[begin]-[end]]) (set lamp on, set end {(OffTime("[begin]"))}) DOELSE (set lamp off)

Hier wird im Ausführungsteil innerhalb einer Perl-Funktion die DOIF-Syntax für einen Zeitdummy genutzt.

Versuche ich dies jedoch im Bedingungsteil des DOIFs, dann wird die Zeit bei mir nicht ausgelesen. Der Wert ist leer.

Ist dies ein Fehler auf meiner Seite oder geht das einfach nur nicht?

(
    [{(SucheZeit("[time]"))}]
)
    (set light on)
DOELSE
    (set light off)


Danke vielmals.

Damian

Zitat von: FunkOdyssey am 22 Juli 2015, 18:18:58
Ich habe in der CommandRef folgendes Beispiel gesehen:

define di_time DOIF ([[begin]-[end]]) (set lamp on, set end {(OffTime("[begin]"))}) DOELSE (set lamp off)

Hier wird im Ausführungsteil innerhalb einer Perl-Funktion die DOIF-Syntax für einen Zeitdummy genutzt.

Versuche ich dies jedoch im Bedingungsteil des DOIFs, dann wird die Zeit bei mir nicht ausgelesen. Der Wert ist leer.

Ist dies ein Fehler auf meiner Seite oder geht das einfach nur nicht?

(
    [{(SucheZeit("[time]"))}]
)
    (set light on)
DOELSE
    (set light off)


Danke vielmals.

Was macht deine Funktion SucheZeit?

Gruß

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

FunkOdyssey

Das war nur ein Beispiel, um es anschaulicher zu machen. In Wirklichkeit geht es mir um die Twilight-Funktion: twilight($twilight, $reading, $min, $max)

Damian

Zitat von: FunkOdyssey am 22 Juli 2015, 21:28:26
Das war nur ein Beispiel, um es anschaulicher zu machen. In Wirklichkeit geht es mir um die Twilight-Funktion: twilight($twilight, $reading, $min, $max)

Wichtig ist der Returnwert der Funktion. Es muss entweder eine Zeit im Format HH:MM oder eine Zahl (Sekunden nach Mitternacht) sein.

Dann kann man es so angeben:

[{Zeit("[time]")}]


oder:

[({Zeit("[time]")})]

Gruß

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

FunkOdyssey

Hmm. Sämtliche Schreibweisen funktionieren nicht bei mir leider nicht.

So sieht das Grundgerüst ohne die Klammern aus:

[{twilight("twilight", "sr_indoor", "[testtime]", "10:00")}]

Damian

Zitat von: FunkOdyssey am 22 Juli 2015, 21:59:56
Hmm. Sämtliche Schreibweisen funktionieren nicht bei mir leider nicht.

So sieht das Grundgerüst ohne die Klammern aus:

[{twilight("twilight", "sr_indoor", "[testtime]", "10:00")}]


ja, offenbar ist das schon eine Ebene zu viel, dann halt:

[{twilight("twilight", "sr_indoor", Value("testtime"), "10:00")}]

Gruß

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

FunkOdyssey

Schade. Darauf und auf ReadingsVal wollte ich eigentlich verzichten, da ich sonst die Aktualisierung der Uhrzeit im Dummy nicht unmittelbar im DOIF mitbekomme. Ich müsste also wieder ein weiteres DOIF nehmen, welches auf Veränderung des Dummys triggert.

Du hattest ja vor einiger Zeit das wahnsinnig praktische Feature aufgenommen, dass Änderungen in [[Dummys]] die DOIFs triggern. Dieses Feature wollte ich halt auch innerhalb einer Perl-Funktion nutzen.

Ich hatte gehofft, dass ich etwas falsch mache und es eine schlanke Lösung gibt. Ist aber nicht so schlimm. Danke dir.

Damian

Zitat von: FunkOdyssey am 22 Juli 2015, 22:48:03
Schade. Darauf und auf ReadingsVal wollte ich eigentlich verzichten, da ich sonst die Aktualisierung der Uhrzeit im Dummy nicht unmittelbar im DOIF mitbekomme. Ich müsste also wieder ein weiteres DOIF nehmen, welches auf Veränderung des Dummys triggert.

Du hattest ja vor einiger Zeit das wahnsinnig praktische Feature aufgenommen, dass Änderungen in [[Dummys]] die DOIFs triggern. Dieses Feature wollte ich halt auch innerhalb einer Perl-Funktion nutzen.

Ich hatte gehofft, dass ich etwas falsch mache und es eine schlanke Lösung gibt. Ist aber nicht so schlimm. Danke dir.

ja, so tief hatte ich nicht mehr programmiert, aber mal schauen, vielleicht reicht intern ein zusätzlicher Funktionsaufruf - muss ich mir mal anschauen.

Gruß

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