Seite 1 von 2
Zeitformat openHAB 3
Verfasst: 24. Jan 2021 09:06
von Jojo
Servus,
ich habe eine Regel, die mir die Zeit der Aktualisierung eines Items anzeigt
Code: Alles auswählen
when
Item TempKeller received update
then
ZeitKeller.postUpdate(now.toLocalTime.toString("HH:mm"))
end
In OH3 ging die nicht mehr und ich habe now.toLocalTime eingefügt. Das hat fast funktioniert, die Zeitz wird korrekt angezeigt.
Das Datum aber ist 1970, wie bekomme ich das aktuell ?
Re: Zeitformat openHAB 3
Verfasst: 24. Jan 2021 10:43
von harteknut
Im Befehl machst Du ja nur ein Update von Stunde und Minute, da wird kein vollständiges DateTime-Element (bestehend aus Datum, Uhrzeit und Zeitzone) übergeben.
Übergebe im postUpdate-Kommando das ganze Element, und dann kannst Du bei der Anzeige auf hh:mm reduzieren.
Re: Zeitformat openHAB 3
Verfasst: 24. Jan 2021 14:51
von Jojo
Servus Harteknut,
Ich will ja nur Stunden und Minuten, das ist OK.
Aber das 1970-01-01 stört mich weil es einfach nicht stimmt.
Bildschirmfoto 2021-01-24 um 14.48.31.png
Die Rule macht an sich genau was sie soll, aber ich bekomme VSC langsam in den Griff und das mault eben rum ...
Re: Zeitformat openHAB 3
Verfasst: 24. Jan 2021 17:30
von int5749
Wie synchronisierst Du die Zeit? Hast Du NTP Binding installiert?
Re: Zeitformat openHAB 3
Verfasst: 24. Jan 2021 19:00
von harteknut
Hallo Jojo,
das verstehe ich schon. Es liegt m.E. daran, dass Deine Items (ZeitKeller und ZeitEG) "echte" DateTime-Items sind, und die enthalten eben auch Datum und Zeizone. Da Du aber nur (zumindest beim Keller) nur Stunde und Minuten aktualisiert, bleibt der Rest auf Default (01.01.1970).
Wie hast Du denn die Items definiert? Bei mir sind die Items, die nur als reine Uhrzeiten ohne Datum angezeigt werden, so definiert:
Code: Alles auswählen
DateTime Eine_Uhrzeit "der Zeitpunkt ist [%1$tH:%1$tM]"
Die werden dann automatisch als hh:mm angezeigt.
Bei mir werden die z.B. so beschrieben:
Code: Alles auswählen
Eine_Uhrzeit.postUpdate(ZonedDateTime.now().with(LocalTime.MIDNIGHT).plusMinutes(80).toLocalDateTime().toString())
Ich sehe gerade, dass Du nur "toLocalTime" verwendest. Es würde wahrscheinlich reichen, in "toLocalDateTime" zu ändern...
Re: Zeitformat openHAB 3
Verfasst: 24. Jan 2021 19:27
von Jojo
Servus Ihr beiden,
@int5749: Dank deines Hinweises ist jetzt das NTP Binding installiert, wie nutze ich das ? Ich bekomme das irgendwie nicht hin.
@Harteknut:
so sind meine definiert:
Code: Alles auswählen
DateTime ZeitEG "EG aktualisiert um: [%1$TH:%1$TM Uhr]" <time>
DateTime ZeitOG "OG aktualisiert um: [%1$tH:%1$tM Uhr]" <time>
DateTime ZeitKeller "aktualisiert um: [%1$tH:%1$tM Uhr]" <time>
Re: Zeitformat openHAB 3
Verfasst: 24. Jan 2021 20:03
von harteknut
... dann müsste doch ein
Code: Alles auswählen
ZeitEG.postUpdate(ZonedDateTime.now().toLocalDateTime().toString)
reichen, oder nicht?
Re: Zeitformat openHAB 3
Verfasst: 24. Jan 2021 21:41
von int5749
Jojo hat geschrieben: ↑24. Jan 2021 19:27
jetzt das NTP Binding installiert, wie nutze ich das ? Ich bekomme das irgendwie nicht hin.
Schau mal
Hier in einem alten Post habe ich meine NTP Konfig dargestellt
Re: Zeitformat openHAB 3
Verfasst: 25. Jan 2021 07:38
von Jojo
Super,
das habe ich mal implementiert.
Ändert aber nichts an der Ausgangslage
Die Rule:
Code: Alles auswählen
rule "Zeit oben"
when
Item TempBuero received update
then
ZeitOG.postUpdate(now.toLocalTime.toString("HH:mm"))
ZeitOG.postUpdate(now.Date.toString("HH:mm"))
end
einmal ist .toString rot unterkringelt ( Invalid number of arguments. The method toString() is not applicable for the arguments (String)(org.eclipse.xtext.xbase.validation.IssueCodes.invalid_number_of_arguments)
und einmal Date ( ist die Variable, die ich in den Items definiert habe ):The method or field Date is undefined for the type ZonedDateTime(org.eclipse.xtext.diagnostics.Diagnostic.Linking)
Was mache ich falsch ?
Re: Zeitformat openHAB 3
Verfasst: 25. Jan 2021 08:41
von harteknut
Nun,
als erstes müssen mal die HH:MM aus den Klammern raus. Den Formatfilter benötigst Du ja nur für die Anzeige. Da müssen die Klammern wie in meinem Vorschlag leer bleiben.
Dann musst Du die Methode mit "ZonedDateTime" definieren, das fehlt in Deinem Ausdruck.
Dann ist der Aufruf einer Variable hinter "now" mit dem Punkt nicht zulässig, so können nur Methoden (oder Felder) aufgerufen werden, und die Methode/Feld "Date" gibt es für ZonedDateTime nicht.
Ich habe die Zeile, die ich oben gepostet habe, mit C&P bei mir probiert, wird anstandslos umgesetzt. Kopier die bitte einfach mal genau so in Deine Rule und sag mal, ob das tut.
Noch ein anderer Hinweis / Frage:
Ist DateTime für Deinen Einsatz überhaupt der richte Item-Type? Wenn Du keine Funktionen damit schalten möchtest (mit isbefore oder isafter oder ähnlich), sondern wirklich nur eine Anzeige umsetzen möchtest, dann reicht auch ein String Item. Das kannst Du dann so beschreiben, wie Du es ganz am Anfang machen wolltest (im Format HH:MM), da ist dann auch kein 1970 drin. Damit kann man dann halt (bis auf die Anzeige) nix "machen".