[gelöst] DOIF Zeitberechnung negatives Reading führt zu Fehler

Begonnen von Ellert, 11 August 2015, 10:20:17

Vorheriges Thema - Nächstes Thema

Ellert

Ich habe versucht eine Zeitberechnung mit zwei Readings im Sekundenformat im Bedingungsteil des DOIF durchzuführen.
Dabei erhalte ich eine Fehlermeldung, wenn ein Reading negativ ist. Die Commandref sagt, dass ganze Zahlen verwendet werden können.
ZitatZeitsteuerung mit Zeitberechnung ... und Angaben in Sekunden als ganze Zahl ...

Wenn ich die Dummys setze
[h] ist 3600
[m] ist 900
und das DOIF definiere
define hmdif DOIF ([([h] + [m])])

Zitattimer_1_c1   12.08.2015 01:15:00   2015-08-11 09:40:16
ist alles o.k.

Wenn ich m auf -900 setze
[h] ist 3600
[m] ist -900
Zitattimer_1_c1   error: syntax error at (eval 20444) line 2, near "+) "   2015-08-11 09:47:29
entsteht der Fehler.

Wo liege ich falsch?

Ich habe im Forum nach den Begriffen "DOIF Zeitberechnung" und "DOIF Zeit berechnen" gesucht und auch keinen Wikieintrag gefunden.
Daher möchte ich jemanden bitten mir weiter zu helfen.

Damian

Zitat von: Ellert am 11 August 2015, 10:20:17
Ich habe versucht eine Zeitberechnung mit zwei Readings im Sekundenformat im Bedingungsteil des DOIF durchzuführen.
Dabei erhalte ich eine Fehlermeldung, wenn ein Reading negativ ist. Die Commandref sagt, dass ganze Zahlen verwendet werden können.
Wenn ich die Dummys setze
[h] ist 3600
[m] ist 900
und das DOIF definiere
define hmdif DOIF ([([h] + [m])])
ist alles o.k.

Wenn ich m auf -900 setze
[h] ist 3600
[m] ist -900entsteht der Fehler.

Wo liege ich falsch?

Ich habe im Forum nach den Begriffen "DOIF Zeitberechnung" und "DOIF Zeit berechnen" gesucht und auch keinen Wikieintrag gefunden.
Daher möchte ich jemanden bitten mir weiter zu helfen.

Offenbar wird das Minuszeichen nicht als Vorzeichen vom Perl-Interpreter erkannt. Du kannst das negative Reading zusätzlich in runde Klammern setzen:

define hmdif DOIF ([([h] + ([m]))])

Gruß

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

Ellert

Das klappt leider nicht. Die Fehlermeldung ist weg, das Ergebnis ist falsch.

Mit [h] = 3600 und ([m]) = -900 wird der Timer auf 01:00:00 gesetzt.

Wenn ich statt [m] Value("m") benutze wird richtig gerechnet, aber der Timer wird natürlich nicht aktualisiert, wenn m geändert wird.

Bis jetzt rechne ich die Zeiten in einer Perl-Funktion aus, die HH:MM:SS zurück gibt und warte 2 Tage bis die Änderung der Readings wirksam ist. Ich wollte auf die sofortige Änderung der Timer umstellen, das wird dann wohl erstmal nichts.

Von der Funktionalität des DOIF bin ich aber begeistert, es ist schon sehr vielfältig einsetzbar.


Damian

Zitat von: Ellert am 11 August 2015, 17:40:53
Das klappt leider nicht. Die Fehlermeldung ist weg, das Ergebnis ist falsch.

Mit [h] = 3600 und ([m]) = -900 wird der Timer auf 01:00:00 gesetzt.

Wenn ich statt [m] Value("m") benutze wird richtig gerechnet, aber der Timer wird natürlich nicht aktualisiert, wenn m geändert wird.

Bis jetzt rechne ich die Zeiten in einer Perl-Funktion aus, die HH:MM:SS zurück gibt und warte 2 Tage bis die Änderung der Readings wirksam ist. Ich wollte auf die sofortige Änderung der Timer umstellen, das wird dann wohl erstmal nichts.

Von der Funktionalität des DOIF bin ich aber begeistert, es ist schon sehr vielfältig einsetzbar.

Problem behoben, geht jetzt mit ([([h] + [m])])

Bei zurück in Vergangenheit gibt eine Fehlermeldung.

Kannst du hier laden: http://forum.fhem.de/index.php/topic,39070.msg312029.html#msg312029

Gruß

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

Ellert