Hallo,
ich bräuchte mal wieder hilfe. Ich habe ein AT und im Ausführungsteil habe ich bisher:
my $Month=(strftime "%B",localtime);; fhem("setreading Zahlstand '$Month' $Stand")
Ich schreibe also den Monatsnamen in die Variable $Month und schreibe mit setreading in das Device Zahlstand ind das reading $Month den Wert aus der variable $Stand. Das funktioniert aber nicht.
Letztendlich möchte ich den Wert in der Variable $Stand in ein reading schreiben das so aussehen soll:
01_Januar
oder eben für Februar:
02_Februar
usw.
Von https://metacpan.org/pod/POSIX::strftime::GNU (https://metacpan.org/pod/POSIX::strftime::GNU)
kann man mit strftime "%m",localtime die Monatsnummer (zweistellig) in eine variable schreiben.
Sollte dann in etwa so aussehen $VarMonthNu , "_", $VarMonthName um das reading abzubilden.
Wie macht man sowas?
Danke
Christian
{my $Month=(strftime "%m",localtime)._.(strftime "%B",localtime);;return $Month;;}
?
Zitat von: Kohle77 am 24 Mai 2021, 15:16:07
01_Januar
oder eben für Februar:
02_Februar
...
Wie macht man sowas?
strftime("%m_%B",localtime)
fhem("setreading Zahlstand ".strftime("%m_%B",localtime)." $Stand")
--
Hallo,
ich habe jetzt mal die variable $Month händisch mit 05_Mai befüllt aber irgendwie ändert er das reading nicht??
*23:59:00 { if ((strftime "%d",localtime time+86400) eq "01") {my $Stand = (ReadingsVal("Zaehlerstand","Akt_Ver",0));; my $Month=("05_Mai");; fhem("setreading Zaehlerstand $Month $Stand")}}
Dieser Teil
Zitat*23:59:00 { if ((strftime "%d",localtime time+86400) eq "01")
bedeutet das fhem um 23:59:00 von der localtime den Tag (Ziffer 0 bis 31) nimmt und 86400 sekunden addiert (was ein Tag ist). Er prüft dann ob das denn der erste ist, also somit der letzte eines Monats.
Mit
Zitatmy $Stand = (ReadingsVal("Zaehlerstand","Akt_Ver",0)
liest er aus dem device Zaehlerstand das Reading Akt_Ver und falls es nicht existiert eben 0. Das wären z.B. 10300 kWh.
Jetzt setze ich mit
Zitatmy $Month=("05_Mai")
in die variable $Month den Wert 05_Mai was dann mein Reading sein soll in das ich den $Stand hineinschreibe.
Dies will ich dann mit
Zitatfhem("setreading Zaehlerstand $Month $Stand")
machen aber das funktioniert nicht?
Gruß
Christian
Zitatich habe jetzt mal die variable $Month händisch mit 05_Mai befüllt aber irgendwie ändert er das reading nicht??
Evtl.komm ich nicht ganz mit, du sagst doch
ZitatEr prüft dann ob das denn der erste ist, also somit der letzte eines Monats.
dann must du halt bis zum letzten des Monats warten oder das
{my $Stand = (ReadingsVal("Zaehlerstand","Akt_Ver",0));; my $Month=("05_Mai");; fhem("setreading Zaehlerstand $Month $Stand")}}
einfach mal zum Test in der Kommandozeile ausführen.
Du musst auch nicht unbedingt prüfen ob der letzte des Monats ist, lies mal in der Hilfe unter den Hinweisen zum AT was die Funktion at_ultimo().
Und dann schau dir nochmal das letzte gezeigte Beispiel an
fhem("setreading Zahlstand ".strftime("%m_%B",localtime)." $Stand")
das passt du einfach an und addierst, wie oben schon selbst gemacht hast, einen Tag dazu.
Hallo,
laut Doku von https://wiki.fhem.de/wiki/At (https://wiki.fhem.de/wiki/At) kann man mit
Zitatset <devspec> execNow
das at ausführen ohne das Monatsende erreicht sein muss.
So verstehe ich es zumindest.
Gruß
Christian
Schon aber die Prüfung findet ja trotzdem statt und darum wird der Ausführungsteil bei einem execNow nicht ausgeführt.
Doppelte ;; braucht man übrigens nur für Perl-Code der in der Kommandozeile ausgeführt wird, in der DEF reicht eins.
Hallo,
ok wenn ich die Werte für Uhrzeit und Datum anpasse funktioniert es.
Ich dachte wenn ich ein execNow mache führt er den Ausführungsteil direkt aus.
Danke für die Hilfe.
Gruß
Christian