(erledigt) DOIF Anzeigefehler bei Zeitintervall

Begonnen von rapster, 09 Dezember 2015, 16:14:11

Vorheriges Thema - Nächstes Thema

rapster

Hallo Damian,

bei diesem test DOIF:
define di_test DOIF ([00:01-23:59]) ()

Erhalte ich diese readings:
Zitat
timer_1_c1   10.12.2015 00:01:00
timer_2_c1   09.12.2015 23:59:00

time_1_c1 sollte aber doch ebenfalls das Datum 09.12.2015 haben, oder?

Gruß
  Claudiu


Damian

Zitat von: rapster am 09 Dezember 2015, 16:14:11
Hallo Damian,

bei diesem test DOIF:
define di_test DOIF ([00:01-23:59]) ()

Erhalte ich diese readings:
time_1_c1 sollte aber doch ebenfalls das Datum 09.12.2015 haben, oder?

Gruß
  Claudiu

Es ist korrekt. Denn die nächste Triggerzeit nach dem du dein Modul definiert hast, ist um 23:59 Uhr und dann erst 00:01.

Gruß

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

rapster

#2
OK verstehe deinen Gedanken dahinter.

Vll. kannst du mir allerdings bei meinem konkreten Problem auf die Sprünge helfen, stehe da grad ziemlich auf'm Schlauch.

- Thema: "Terminabhängige Raumtemperierung"
- Im Büro pusht der Raumreservierungs Kalender die täglichen Termine nach fhem.
- Beim eintreffen dieser berechne ich den aktuellen/nächsten Termin und setze 2 Readings mit einem konfigurierten Start-Offset für die Aufwärmphase des Raumes.
   "heatingStart" und "heatingEnd"
   EDIT: die readings heatingStart und heatingEnd sind immer im Format HH:MM:SS
- Jetzt dachte ich, ich kann die Schaltbedingung relativ einfach über DOIF realisieren, z.B.

DOIF ( [[Konferenzraum:heatingStart]-[Konferenzraum:heatingEnd]] and [?Konferenzraum_tc_Climate:desired-temp] ne [Konferenzraum:temperature] )
    ( set Konferenzraum_tc_Climate desired-temp [Konferenzraum:temperature] )
DOELSEIF ( ([00:00-[Konferenzraum:heatingStart]] or [[Konferenzraum:heatingEnd]-23:59:59]) and [?Konferenzraum_tc_Climate:desired-temp] ne "off" )
    ( set Konferenzraum_tc_Climate desired-temp off )


Das würde zwar jetzt funktionieren wenn "heatingStart" beim auftreten immer in der Zukunft wäre, was es allerdings nicht zwangläufig ist,
da eine Raumreservierung entweder sehr kurzfristig, oder auch zu spät erfolgen kann, oder durch den dazuadierten "Offset" in der Vergangenheit liegen kann.

Ebenso schaltet sich natürlich auf diese Weise die Heizung bei einer Verkleinerung des Offsets nicht wieder aus, nachdem sie einmal gestartet ist.


Hast du evtl. einen Tipp wie ich das am besten lösen kann, respektive ob das mit den Zeitfunktion in DOIF i.M. überhaupt machbar ist?


Gruß
  Claudiu

Damian

#3
Zitat von: rapster am 09 Dezember 2015, 19:44:05
OK verstehe deinen Gedanken dahinter.

Vll. kannst du mir allerdings bei meinem konkreten Problem auf die Sprünge helfen, stehe da grad ziemlich auf'm Schlauch.

- Thema: "Terminabhängige Raumtemperierung"
- Im Büro pusht der Raumreservierungs Kalender die täglichen Termine nach fhem.
- Beim eintreffen dieser berechne ich den aktuellen/nächsten Termin und setze 2 Readings mit einem konfigurierten Start-Offset für die Aufwärmphase des Raumes.
   "heatingStart" und "heatingEnd"
   EDIT: die readings heatingStart und heatingEnd sind immer im Format HH:MM:SS
- Jetzt dachte ich, ich kann die Schaltbedingung relativ einfach über DOIF realisieren, z.B.

DOIF ( [[Konferenzraum:heatingStart]-[Konferenzraum:heatingEnd]] and [?Konferenzraum_tc_Climate:desired-temp] ne [Konferenzraum:temperature] )
    ( set Konferenzraum_tc_Climate desired-temp [Konferenzraum:temperature] )
DOELSEIF ( ([00:00-[Konferenzraum:heatingStart]] or [[Konferenzraum:heatingEnd]-23:59:59]) and [?Konferenzraum_tc_Climate:desired-temp] ne "off" )
    ( set Konferenzraum_tc_Climate desired-temp off )


Das würde zwar jetzt funktionieren wenn "heatingStart" beim auftreten immer in der Zukunft wäre, was es allerdings nicht zwangläufig ist,
da eine Raumreservierung entweder sehr kurzfristig, oder auch zu spät erfolgen kann, oder durch den dazuadierten "Offset" in der Vergangenheit liegen kann.

Ebenso schaltet sich natürlich auf diese Weise die Heizung bei einer Verkleinerung des Offsets nicht wieder aus, nachdem sie einmal gestartet ist.


Hast du evtl. einen Tipp wie ich das am besten lösen kann, respektive ob das mit den Zeitfunktion in DOIF i.M. überhaupt machbar ist?


Gruß
  Claudiu

Wenn du kein do always definiert hast und Konferenzraum_tc_Climate:desired-temp regelmäßig etwas sendet, dann brauchst du nur das Fragezeichen davor zu entfernen, dann wir beim Trigger innerhalb der Zeitspanne entsprechend geschaltet.

Edit: Da du ja [Konferenzraum:temperature] abfragst, sollte bereits die aktuelle Temperatur bereits triggern.

Gruß

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

rapster

Danke dir!, hat mir auf jedenfall auf die Sprünge geholfen :)

Verstehe ich das richtig,
in diesem Kontext wird die Zeitspanne richtig interpretiert, also am selben Tag obwohl das Reading bereits das Datum des nächsten Tages anzeigt,
es trigger nur den Start nicht, wird allerdings als Zeitspanne am heutigen Tag korrekt ausgewertet wenn in der gleichen Bedingung ein anderer trigger eingeht?

Habe das nun erfolgreich so gelöst (denke ich zumindest nach den ersten Tests):

attr Konferenzraum_tc_Climate event-on-update-reading desired-temp

DOIF ( [?Konferenzraum:heating] == 0
and [Konferenzraum:heatingStart] ne "0"
and [Konferenzraum:heatingEnd] ne "0"
and [Konferenzraum_tc_Climate:desired-temp] =~ /.+/
and [[Konferenzraum:heatingStart]-[Konferenzraum:heatingEnd]] )
    ( set Konferenzraum heating 1,set Konferenzraum_tc_Climate desired-temp [Konferenzraum:temperature] )
DOELSEIF ( [?Konferenzraum:heating] == 1
and [Konferenzraum_tc_Climate:desired-temp] =~ /.+/
and ([00:00-[Konferenzraum:heatingStart]] or [[Konferenzraum:heatingEnd]-23:59:59] or ([Konferenzraum:heatingStart] eq "0" and [Konferenzraum:heatingEnd] eq "0")) )
    ( set Konferenzraum heating 0,set Konferenzraum_tc_Climate desired-temp off )



Und wenn ich schon am fragen bin :), welches vorgehen ist richtig wenn ein reading lediglich als trigger dienen soll?
In diesem Beispiel das "desired-temp" reading, welches ich mit "[Konferenzraum_tc_Climate:desired-temp] =~ /.+/" nur zum triggern der Bedingung eingebunden habe.

PS.  [Konferenzraum:temperature] ist die Konfigurierte Soll-Temperatur, [Konferenzraum:heating] werde ich ohne do-always wahrscheinlich nicht brauchen, verwende ich aber sowieso zur Visualisierung.


Gruß
  Claudiu

rapster

Nochmal eine kurze Frage zu dem Thema die mir vorhin durch den Kopf ging.

Lässt sich eine Zeitspanne negieren? Habe dazu nichts in den Beispielen finden können, also z.B.:
DOIF ( ! [[Konferenzraum:heatingStart]-[Konferenzraum:heatingEnd]] ) ()

oder ist hier das Vorgehen welches ich bereits eingebaut habe richtig?
DOIF ( [00:00-[Konferenzraum:heatingStart]] or [[Konferenzraum:heatingEnd]-23:59:59] ) ()

Gruß
  Claudiu

Damian

Zitat von: rapster am 09 Dezember 2015, 22:07:17
Nochmal eine kurze Frage zu dem Thema die mir vorhin durch den Kopf ging.

Lässt sich eine Zeitspanne negieren? Habe dazu nichts in den Beispielen finden können, also z.B.:
DOIF ( ! [[Konferenzraum:heatingStart]-[Konferenzraum:heatingEnd]] ) ()
ja, das Ausrufezeichen muss allerdings direkt an die eckige Klammer ohne Leerzeichen.

Zitatoder ist hier das Vorgehen welches ich bereits eingebaut habe richtig?
DOIF ( [00:00-[Konferenzraum:heatingStart]] or [[Konferenzraum:heatingEnd]-23:59:59] ) ()

Das sollte das Gleiche sein, allerdings wird im Gegensatz zu oben hier vier, statt zwei mal getriggert.

Gruß

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

Damian

Zitat von: rapster am 09 Dezember 2015, 22:01:06

Und wenn ich schon am fragen bin :), welches vorgehen ist richtig wenn ein reading lediglich als trigger dienen soll?
In diesem Beispiel das "desired-temp" reading, welches ich mit "[Konferenzraum_tc_Climate:desired-temp] =~ /.+/" nur zum triggern der Bedingung eingebunden habe.


Zum einfachen Triggern würde ich eine Event-Angabe nehmen:

... and [Konferenzraum_tc_Climate:?desired-temp]

triggert auf alle Events des Devices mit "desired-temp"

Gruß

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

rapster

Ohwei klar, da hätte ich aber auch selbst drauf kommen können  :-X

Das negieren funktioniert auch 1A wenn man das Leerzeichen weglässt, Danke dir! :)

Gruß
  Claudiu