FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: FunkOdyssey am 06 September 2016, 16:10:04

Titel: Userreading in einem Dummy täglich neu berechnen?
Beitrag von: FunkOdyssey am 06 September 2016, 16:10:04
Hallo,

ich habe einen Dummy, indem ich die Uhrzeiten für das Hochfahren der Jalousien festhalte. Und zwar für jeden Werktag einzeln und für das Wochenende gemeinsam.
Ich bin ja schon happy, dass ich das mit dem userreading hinbekommen habe, so dass die Uhrzeit für den heutigen Tag in einem eigenen Reading gespeichert wird. Was ich nur nach der Euphorie vergessen habe, war die Tatsache, dass der Dummy sich ja überhaupt nicht regelm. aktualisiert.

Hat jemand eine andere Idee, wie ich Readings für die Wochentag und für den aktuellen Tag erhalte?
Wenn ich bei meiner Variante bleibe, wie könnte ich dann das "today"-Reading aktualisieren. Eigentlich würde ich gerne auch weitere AT und DOIFs verzichten. Aber darauf wird es wohl hinauslaufen, oder?

Internals:
   NAME       jalousie_hoch
   STATE      Heute:08:00
   TYPE       dummy
   Readings:
     2016-09-06 15:14:19   1mo             08:00
     2016-09-06 15:14:56   2di             08:00
     2016-09-06 11:13:48   3mi             07:00
     2016-09-06 11:13:50   4do             07:00
     2016-09-06 11:14:10   5fr             08:00
     2016-09-06 12:47:23   7saso           08:30
     2016-09-06 15:14:56   today           08:00
     2016-09-06 15:14:56   wday            2
Attributes:
   alias      Jalousien öffnen (Mo,Di,Mi,Do,Fr,Sa/So)
   readingList 1mo 2di 3mi 4do 5fr 7saso
   setList    1mo:time 2di:time 3mi:time 4do:time 5fr:time 7saso:time
   userReadings today {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);;
if ($wday == 1) {ReadingsVal("$name","1mo","")}
elsif ($wday == 2) {ReadingsVal("$name","2di","")}
elsif ($wday == 3) {ReadingsVal("$name","3mi","")}
elsif ($wday == 4) {ReadingsVal("$name","4do","")}
elsif ($wday == 5) {ReadingsVal("$name","5fr","")}
elsif ($wday == 7) {ReadingsVal("$name","7saso","")};;
},
wday {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);;
$wday;;
}

   webCmd     1mo:2di:3mi:4do:5fr:7saso


Danke.
Titel: Antw:Userreading in einem Dummy täglich neu berechnen?
Beitrag von: marvin78 am 06 September 2016, 16:48:31
Du könntest entweder die Readings mit einem at per setreading setzen und auf das userReading verzichten oder aber auch ein willkürliches Reading per at und setreading setzen, sodass das userReading getriggert wird.

Die Frage ist, warum schreibst du diese Zeiten überhaupt in einen dummy!?
Titel: Antw:Userreading in einem Dummy täglich neu berechnen?
Beitrag von: FunkOdyssey am 06 September 2016, 16:57:17
Achja, bevor es im Dummy zu komplex wird, könnte ich die Berechnung ja wirklich besser auslagern.
Gute Idee. Aber irgendwie gefällt mir das noch nicht. Das hat aber nichts hiermit zu tun, sondern mit der Tatsache, dass ich es übertreibe für zu wenig Nutzen.

Ich nutze die Zeiten in mehreren DOIFs.

Folgende Variante geht ja noch. Hier werden ja höchstens 6 Timer für dieses CMD angelegt und damit kann ich leben.


(
[[jalousie_hoch:1mo]|1] or
[[jalousie_hoch:2di]|2] or
[[jalousie_hoch:3mi]|3] or
[[jalousie_hoch:4do]|4] or
[[jalousie_hoch:5fr]|5] or
[[jalousie_hoch:7saso]|7]
)


Ich habe aber auch folgende DOIFs und durch meine Aufteilung auf nahezu täglich unterschiedlichen Hochfahrzeiten sprengt das in einigen DOIFs die Anzahl der Timer. Folgenden Vergleich habe ich innerhalb eines Sonnenschutz-DOIFs dreimal.


(
[[jalousie_hoch:1mo]|1-[jalousie_runter]] or
[[jalousie_hoch:2di]|2-[jalousie_runter]] or
[[jalousie_hoch:3mi]|3-[jalousie_runter]] or
[[jalousie_hoch:4do]|4-[jalousie_runter]] or
[[jalousie_hoch:5fr]|5-[jalousie_runter]] or
[[jalousie_hoch:7saso]|7-[jalousie_runter]]
)


Daher wollte ich das ein wenig eingrenzen, damit der Sonnenschutz nur dann aktiv wird, wenn die Jalousien nicht noch unten sind:

(
[[du_jal_time_hoch:today]-[jalousie_runter]]
)