Hallo Leute, ich habe ein DOIF, welches mir die Uhrzeit zu jeder vollen Minute als Reading schreibt...
Ich weiß leider nicht ehr, woher ich diesen Schnipsel habe um evtl. nachzuschauen, wie ich das Datum dazu bekomme
defmod Uhrzeit_DOIF DOIF (setreading $SELF time {(localtime (time + 5) =~ /(\d\d:\d\d)/;;$1)})
attr Uhrzeit_DOIF do always
Soweit so gut, wie kann ich es jetzt erreichen, dass es wie folgt aussieht:
Samstag, 11. April 2020 - 02:27
Grüße Marcel
Hallo Marcel,
vielleicht bekommst Du mit strftime das Ganze passend hin? Als Einstieg zum heranarbeiten https://perldoc.perl.org/functions/localtime.html
Gruß Otto
Danke für den richtigen Wink...
Jetzt habe ich folgendes im Ausführungsteil vom DOIF:
({fhem 'setreading Uhrzeit_DOIF Test '.strftime('%a, %e. %b %Y - %H:%M', localtime)})
Nun steht aber APRIL abgekürzt und wahrscheinlich auch nicht in deutsch, genau wie der Tag:
Sat, 11. Apr 2020 - 10:44
Ziel wäre ja:
Samstag, 11. April 2020 - 02:27
Hast du da auch eine Idee...?
Die großen Buchstaben liefern den ganzen Namen die kleinen die Abkürzung:
http://man7.org/linux/man-pages/man3/strftime.3.html
Das andere sollte die locale im system regeln.
Was gibt Dir in der FHEM Kommandozeile
{qx(locale)}
Sollte so aussehen:
ZitatLANG=de_DE.UTF-8
LANGUAGE=de_DE
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
In meinem Script (https://github.com/heinz-otto/raspberry/blob/master/setupBasic.sh) steht es so:
# config the language to german
localedef -f UTF-8 -i de_DE de_DE.UTF-8
# alternativ
#sed -i -e 's/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen
#locale-gen
localectl set-locale LANG=de_DE.UTF-8 LANGUAGE=de_DE
localectl set-keymap de
# setupcon liefert derzeit eine (einmalige?) Fehlermeldung https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=903393
# das scheint aber ohne Auswirkung?
setupcon
Zitat von: Otto123 am 11 April 2020, 11:15:43
Was gibt Dir in der FHEM Kommandozeile
{qx(locale)}
Sollte so aussehen:
FHEM läuft in einem Proxmox LXC
{qx(locale)} ergibt:
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
Naja da ist quasi gar keine Locale definiert (C steht für minimal Environment). Hast Du mal die Befehle oben in der Linux Kommandozeile im sudo su Kontext probiert? Ich glaube danach musst Du neu starten.
Danke...
Nein die Befehle habe ich noch nicht probiert, mache ich später, muss jetzt leider los...
Danke Otto, läuft jetzt...
Sei so nett und poste noch Deinen finalen Code als Raw Def - das hilft den Anderen in Zukunft.
Schöne Ostern
Otto
Gerne,
hab es noch etwas geändert, aber das sollte für jeden ersichtlich sein:
RAW Def.:
defmod Uhrzeit_DOIF DOIF ([+:01]) ({fhem 'setreading Uhrzeit_DOIF Date_Time '.strftime('%a %d.%m.%Y - %H:%M', localtime)})
attr Uhrzeit_DOIF do always
attr Uhrzeit_DOIF stateFormat Date_Time
Damit erhalte ich dann das Reading Date_Time in diesem DOIF mit dem Inhalt der so aus sieht:
So 12.04.2020 - 02:02
Auf der, von Otto schon geposteteten Seite, ist das sehr schön erklärt:
http://man7.org/linux/man-pages/man3/strftime.3.html (http://man7.org/linux/man-pages/man3/strftime.3.html)
Grüße Marcel
Bzw. hier auch, wie ich es zuerst haben wollte:
RAW Def.:
defmod Uhrzeit_DOIF DOIF ([+:01]) ({fhem 'setreading Uhrzeit_DOIF Date_Time '.strftime('%A, %d. %B %Y - %H:%M', localtime)})
attr Uhrzeit_DOIF do always
attr Uhrzeit_DOIF stateFormat Date_Time
Damit erhalte ich dann das Reading Date_Time in diesem DOIF mit dem Inhalt der so aus sieht:
Sonntag, 12. April 2020 - 02:13
Grüße Marcel
ich finde dieses sehr interessant und dachte mir das kann ich kurzer Hand mal eben in mein Überwachungsdummy (du_Ueberwachung) schreiben mit diesem Code, dass klappt aber gar nicht. Er schreibt mir immer den gesamten Perl Code rein.
Mein Uhrzeit DOIF heißt in dem Fall di_Uhrzeit
(set du_Ueberwachung {fhem 'setreading di_Uhrzeit Date_Time '.strftime('%A, %d. %B %Y - %H:%M', localtime)})
So funktioniert das dann allerdings:
(set du_Ueberwachung [di_Uhrzeit:Date_Time])
Evtl. kann man das mit der Uhrzeit auch in dem gleichen Überwachungs DOIF erstellen, auch das habe ich bisher nicht hinbekommen. Hat da jemand einen Lösungsansatz.?
Versuche mal so:
defmod Uhrzeit_DOIF DOIF ([+:01]) ({fhem 'setreading du_Ueberwachung state '.strftime('%A, %d. %B %Y - %H:%M', localtime)})
attr Uhrzeit_DOIF do always
attr Uhrzeit_DOIF stateFormat Date_Time
Ja super vielen Dank, manchmal sieht man den Wald vor bäumen nicht... <duck und weg> :-[
EDIT://
aber nun bekomme ich jede Menge Fehler anzeigen... das habe ich gerade erst gesehen..
2020.04.17 23:32:00 1: stacktrace:
2020.04.17 23:32:00 1: ERROR: empty name in readingsBeginUpdate
2020.04.17 23:31:01 1: Error: >Uhrzeit_DOIF< has no TYPE, but following keys: >READINGS<
2020.04.17 23:31:00 1: main::HandleTimeout called by fhem.pl (676)
2020.04.17 23:31:00 1: main::DOIF_TimerTrigger called by fhem.pl (3307)
2020.04.17 23:31:00 1: main::DOIF_Trigger called by ./FHEM/98_DOIF.pm (2739)
2020.04.17 23:31:00 1: main::DOIF_cmd called by ./FHEM/98_DOIF.pm (2415)
2020.04.17 23:31:00 1: main::ParseCommandsDoIf called by ./FHEM/98_DOIF.pm (2161)
2020.04.17 23:31:00 1: main::AnalyzePerlCommand called by ./FHEM/98_DOIF.pm (1725)
2020.04.17 23:31:00 1: (eval) called by fhem.pl (1142)
2020.04.17 23:31:00 1: main::fhem called by (eval 10562222) (1)
2020.04.17 23:31:00 1: main::AnalyzeCommandChain called by fhem.pl (3811)
2020.04.17 23:31:00 1: main::AnalyzeCommand called by fhem.pl (1096)
2020.04.17 23:31:00 1: main::CommandSetReading called by fhem.pl (1243)
2020.04.17 23:31:00 1: main::readingsSingleUpdate called by fhem.pl (2419)
2020.04.17 23:31:00 1: main::readingsBulkUpdate called by fhem.pl (4936)
Ich habe das DOIF heute nochmal gelöscht und neu erstellt nun gibt es keine Fehlermeldungen mehr... :-\
Danke nochmals