Kann mit einem DOIF ein Countdownzähler realisiert werden.?

Begonnen von moonsorrox, 01 November 2016, 18:16:59

Vorheriges Thema - Nächstes Thema

moonsorrox

ich habe in der commandref darüber nichts gefunden und deshalb meine Frage.
Beispiel:
Ich möchte vom 1. November die Tage herunter zählen bis z.B. zum 31. Januar. mit der Anzeige eben "Es sind noch 90 Tage", "Es sind noch 89 Tage","Es sind noch 88 Tage" usw. also ein "tägliches" runter zählen.
Wobei man sicher den Text gestalten kann wie man möchte, aber eben die Zahl der Tage ist ja wichtig.
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Ellert

Ja, benutze ein einmaliges Tagesereigniss (z.B. einen Zeitpunkt) als trigger und ziehe im set-Befehl bei jedem Trigger 1 vom aktuellen Wert ab.

moonsorrox

was wäre denn in dem Fall der "aktuelle Wert"..?
die Tage die erst einmal gezählt werden müssen bis zum Ereignis Datum.
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Ellert

Ja, dafür könntest Du einen Dummy nehmen oder ein Reading in einem dazu gehörenden Gerät, nicht im DOIF, das ist nicht neustartfest.

Damian

Zitat von: Ellert am 01 November 2016, 19:03:30
Ja, dafür könntest Du einen Dummy nehmen oder ein Reading in einem dazu gehörenden Gerät, nicht im DOIF, das ist nicht neustartfest.

Neustartfest schon, aber es überlebt kein modify, daher ist ein eigener Dummy schon ok. Bei dieser Lösung darf das Runterzählen an keinem Tag ausfallen, sonst passt es nicht.

Gruß

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

moonsorrox

Zitat von: Damian am 01 November 2016, 19:27:32
Bei dieser Lösung darf das Runterzählen an keinem Tag ausfallen, sonst passt es nicht.
deshalb dachte ich das ich dieses per Beginn Datum erreichen kann. Wenn es doch mal passiert müßte ich also die Tagesbeginn Zahl (ich nenne sie mal so) anpassen
Das wäre z.B. heute bis zum 28. Februar 119, das heißt es passiert irgend wann mal ein Neustart, dann wäre diese Zahl hinfällig..?

gehört hier jetzt nicht her...
So z.B. habe ich heute einen Neustart von Fhem gemacht und alle meine Dummys zeigen ??? versteh ich grad nicht weil ich es so noch nicht hatte. Meine ganzen Dummy zeiten auch alle ???
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Ellert

Zitat von: moonsorrox am 01 November 2016, 19:48:36
deshalb dachte ich das ich dieses per Beginn Datum erreichen kann. Wenn es doch mal passiert müßte ich also die Tagesbeginn Zahl (ich nenne sie mal so) anpassen
Das wäre z.B. heute bis zum 28. Februar 119, das heißt es passiert irgend wann mal ein Neustart, dann wäre diese Zahl hinfällig..?

gehört hier jetzt nicht her...
So z.B. habe ich heute einen Neustart von Fhem gemacht und alle meine Dummys zeigen ??? versteh ich grad nicht weil ich es so noch nicht hatte. Meine ganzen Dummy zeiten auch alle ???
Das mit dem Neustart war ein Irrtum meinerseits. Wenn Du neu startest und das DOIF verpasst dann gerade den Zeitpunkt zum abziehen, dann stimmen die Resttage nicht mehr.

Fall Du das Risiko nicht eingehen willst, müsstest Du die täglich Differenz zwischen dem aktuellen Datum und dem 31.01. bilden. Das stimmt jeden Tag, auch, wenn mal an einem Tag die Berechnung ausfällt.

ZitatSo z.B. habe ich heute einen Neustart von Fhem gemacht und alle meine Dummys zeigen ??? versteh ich grad nicht weil ich es so noch nicht hatte. Meine ganzen Dummy zeiten auch alle ???

Ja, das ist bekannt, da war das save-File geleert. Das aktuelle update-Komando sichert auch das save-File.

Damian

Bevor wir hier noch weiter philosophieren, hier etwas Konkretes ohne extra Dummy und immer aktuell ;) :

define di DOIF ([00:00])
attr di state {(int((time_str2num("2017-01-31")-time())/86400))}
attr di do always


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

moonsorrox

#8
EDITH:// habe wohl zu spät geschrieben, ich werde mir das von Damian mal anschauen...!  ;)

puh, nu sehe ich überhaupt nicht mehr durch...
Also ich habe jetzt ein DOIF nach folgendem Beispiel mit der Berechnung aus der commandref genommen
define di_average DOIF ([08:00]) (set TH_Modul desired {([default:temperature]+[outdoor:temperature])/2})

d.h. für mich ich berechne hier erst einmal die eingestellten Tage meines dummy - 1,
dass sieht so aus Uhrzeit ist erstmal zum probieren
define di_countdown ([20:03]) (set di_countdown state {[du_countdown]-[1]})

du_countdown steht auf 119 (für den 28. Februar)
aber ich bekomme irgendwie nirgends die Zahl 118 nachdem er getriggert hat

Das mit der Datumberechnung schaue ich mir später an, muss erst mal obigen Teil verstehen
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

moonsorrox

Zitat von: Damian am 01 November 2016, 20:18:23
Bevor wir hier noch weiter philosophieren, hier etwas Konkretes ohne extra Dummy und immer aktuell ;) :

define di DOIF ([00:00])
attr di state {(int((time_str2num("2017-01-31")-time())/86400))}
attr di do always


das wäre doch ein weitere gutes Beispiel für die Commandref..!  ;)
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 01 November 2016, 20:42:11
das wäre doch ein weitere gutes Beispiel für die Commandref..!  ;)

ja, allerdings ist es recht spezifisch und hat wenig mit DOIF zutun.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF