FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: brown78 am 24 April 2019, 07:56:54

Titel: [gelöst] Uhrzeit vergleichen
Beitrag von: brown78 am 24 April 2019, 07:56:54
Hallo zusammen,

ich habe schon einiges gegoogelt, komme aber trotzdem nicht weiter. Ich habe 2 dummies, in welchen Uhrzeiten stehen - einmal für Rolladen auf und einmal für Rolladen zu. Das funktioniert soweit.
Jetzt möchte ich aber als Hitzeschutz die Rollos ab einer bestimmten Innentemperatur schließen - funktionert auch, und unterhalb dieser Temperatur wieder öffnen. Öffnen sollen die Rollos dann aber auch nur, wenn diese
sowieso offen sein dürften. Die Innentemperatur soll also kleiner als x sein und die aktuelle Uhrzeit größer als Rollo auf und aktuelle Uhrzeit kleiner als Rollo zu.

Ich bin nun soweit, dass der state des dummy ein string ist, der nur bis zum ":" verglichen wird, wie bekomme ich das denn hin?

Bisher habe ich versucht (erstmal nur die Zeiten ohne Temperatur):
($hms gt [dmy_rollo_auf:state] and $hms lt [dmy_rollo_zu:state])(set dmy_test auf)
führt immer cmd 2 aus.
($hms > [dmy_rollo_auf:state] and $hms < [dmy_rollo_zu:state])(set dmy_test auf)
funktioniert nur stunden genau - alles ab dem ":" wird ja nicht ausgewertet.
Also mit < und > wird alles vor dem ":" verglichen allerdings steht folgende Meldung im device:
condition c01: Argument "07:53:47" isn't numeric in numeric gt (>)

Titel: Antw:Uhrzeit vergleichen
Beitrag von: CoolTux am 24 April 2019, 08:08:22
Schau Dir mal das Modul AutoShuttersControl (ASC) an. Das kann sowas alles von sich aus.

Und nun zu Deiner Frage. Ich würde die Uhrzeit in Unix-Time umrechnen.
Titel: Antw:Uhrzeit vergleichen
Beitrag von: rabehd am 24 April 2019, 09:22:07
ZitatIch würde die Uhrzeit in Unix-Time umrechnen.
Ich auch.
Alternative wäre die Uhrzeit, das Datum, im Format YYYYMMDDHHmmss. Unix-Time ist schöner.

    my $unixtime = timelocal(00,$minute,$stunde,$tag,$monat-1,$jahr);
Titel: Antw:Uhrzeit vergleichen
Beitrag von: brown78 am 24 April 2019, 09:31:06
Also ASC habe ich mir mal kurz angeschaut, das ist aber sehr umfangreich, denke dazu brauche ich Rollo devices? Meine Rollos werden mit IT CMR-500 Funkschaltern angesteuert.... Sieht aber auf jeden Fall interessant aus - werde ich sobald die Zeit es zulässt näher anschauen.
Zur Unix Time - die Systemzeit liefert {time} oder? Wie wandle ich dann meinen dummy:state in unix zeit um?
Titel: Antw:Uhrzeit vergleichen
Beitrag von: CoolTux am 24 April 2019, 09:35:22
str2time (localtime(time));

Wie schaut denn Dein Zeitformat in den Dummys aus?
Titel: Antw:Uhrzeit vergleichen
Beitrag von: Damian am 24 April 2019, 09:37:07
Zuerst solltest du schreiben mit welchem Modul du hantierst. Ich kann mir denken, dass es DOIF ist, das steht aber nirgendwo. Wenn du mit Zeitintervallen dort arbeiten willst, dann solltest du auf Zeitintervalle zurückgreifen, dort kann man auch Dummys mit Zeiten angeben:

https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitintervallen
https://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben
Titel: Antw:Uhrzeit vergleichen
Beitrag von: brown78 am 24 April 2019, 09:37:12
In den Dummies steht die Uhrzeit als "8:00" in 15 Minuten Schritten kann ich die per dropdown ändern
Titel: Antw:Uhrzeit vergleichen
Beitrag von: Damian am 24 April 2019, 09:39:36
Zitat von: brown78 am 24 April 2019, 09:37:12
In den Dummies steht die Uhrzeit als "8:00" in 15 Minuten Schritten kann ich die per dropdown ändern

Dann sollten alle Voraussetzungen erfüllt sein.
Titel: Antw:Uhrzeit vergleichen
Beitrag von: brown78 am 24 April 2019, 09:42:47
Ich arbeite tatsächlich mit einem DOIF. Auf die Zeitintervalle bin ich gar nicht gekommen, das ist natürlich am einfachsten. Ein erster kurzer Test mit:
([[dmy_test_time:state]-[dmy_test_time_2:state]]) (set dummy_actor jetzt schon)  DOELSE (set dummy_actor jetzt nicht mehr)
hat schon mal funktioniert....
Titel: Antw:[gelöst] Uhrzeit vergleichen
Beitrag von: brown78 am 25 April 2019, 07:49:35
Ich habe hierzu noch eine kleine Frage, in einem DOIF mit Intervall:
([[dmy_test_time:state]-[dmy_test_time_2:state]] and [dmy_test_state:state] eq on) (set dummy_actor jetzt)  DOELSE (set dummy_actor jetzt nicht mehr)
Hätte ich gerne eine Verzögerung bzw. einen Offset, aber nur wenn "dmy_test_state" genau zur Zeit "dmy_test_time" auf on wechselt.
Mit Wait würde ja immer wenn Condition 1 wahr ist verzögert. Ich möchte aber quasi eine Zeit addieren.

Zur Erläuterung, die beiden Zeit Dummies sind die Öffungs- und Schließzeiten von Rolläden, der State Dummy wird temperaturabhänging gesetzt, um die Rollos bei Hitze zu schließen.
Hier möchte ich für die Schaltzeiten eine Entprellzeit. Also quasi wenn der Rollo um 8:00 Uhr aufgeht, soll vor 8:15 dieser nicht wieder zu gehen bei Hitze. Wird die Hitze erst um 14:00 Uhr erreicht, soll aber um 14:00 Uhr geschlossen werden.

Ich habe schon versucht:
[[dmy_test_time:state]+00:15-[dmy_test_time_2:state]]
und verschiedene Klammerungen - bekomme aber entweder wrong timespec oder unknown expression format.
[[[dmy_test_time:state]+00:15]-[dmy_test_time_2:state]]

::) ???
Titel: Antw:[gelöst] Uhrzeit vergleichen
Beitrag von: rabehd am 25 April 2019, 08:11:06
Ich denke Du brauchst erstmal eine Matrix der Bedingungen.

Welche Ereignisse unter welchen Bedingungen was auslösen.
Erstmal alle Varianten auflisten, dann prüfen ob sich welche zusammenfassen lassen und dann programmieren.
Titel: Antw:[gelöst] Uhrzeit vergleichen
Beitrag von: brown78 am 25 April 2019, 09:38:03
Hab ich bereits, was noch fehlt ist eben diese Entprellzeit damit nicht während dem hochfahren gleichzeitig geschlossen wird. Das kann in ungünstigen Konstellationen zu unangenehmen Effekten führen.
Titel: Antw:[gelöst] Uhrzeit vergleichen
Beitrag von: brown78 am 25 April 2019, 10:06:54
OK, hab es mit etwas rumprobieren raus bekommen, so scheint es zu funktionieren:
([([dmy_test_time:state]-{"00:24"})-[dmy_test_time_2:state]]) (set dummy_actor jetzt)