Hi zusammen,
wenn ich über das Robonect-Binding Zeiten vom Mäher einlese (z.B. Last Error Date), so kommen diese mit der falschen Zeitzone (2020-06-02T13:17:34.000+0000). Diese Zeit ist in UTC (+0000) statt in MESZ. Das führt dazu, dass die Zeiten mit einem Versatz von 2 Stunden in der BasicUI und dem Habpanel angezeigt werden (also diese Zeit dann als 15:17 statt als 13:17). Die Zeit auf Robonect wird aus dem Internet synchronisiert, eine Einstellung für eine Zeitzone habe ich dort nicht gefunden (ich gehe davon aus, dass automatisch per ntp richtig gesetzt wird).
Hat jemand eine Idee, ob das ein Fehler in der Robonect-Firmware oder dem Binding ist? Gibt es einen Fix oder einen Workaround?
Danke, Steffen
Zeiten über Robonect-Binding mit falscher Zeitzone
-
- Forum-Anfänger
- Beiträge: 7
- Registriert: Fr 22. Mai 2020, 11:50
- Mäher: noch kein Mäher
- Robonect Firmware: -
Re: Zeiten über Robonect-Binding mit falscher Zeitzone
Nach längerer Recherche habe ich herausgefunden, was das Problem ist. Der Mäher kennt keine Zeitzonen. Das OH2-Binding wandelt alle gelieferten Zeiten in UTC um, so dass sie nicht stimmen. Das Problem wurde hier auch schon erkannt und beantwortet (https://forum.robonect.de/viewtopic.php?f=184&t=2780).
Ich habe das Problem jetzt so umgangen, dass ich mir zwei Items und eine Rule in Openhab gebaut habe. Das erste Item ist mit dem Channel des Bindings verknüpft (z.B. mowerLastErrorDateTimeRaw). Wenn es sich ändert triggert eine Rule, die einen angepassten Wert errechnet und in das zweite Item speichert (mowerLastErrorDateTimeAdj). Die Rule sieht so aus:
Das Item mowerLastErrorDateTimeAdj nehme ich dann für die Anzeige auf der UI. Der Code sollte auch nach dem Wechsel von Sommer- auf Winterzeit funktionieren, das habe ich aber noch nicht getestet. Wahrscheinlich kann man ihn auch noch optimieren, Vorschläge sind willkommen.
Die Zeitzone ist im Moment hart in die Regel eingebaut, wenn jemand eine Idee hat, wie man die systemseitig eingestellt Zeitzone von OH2 aus den Regional Settings auslesen kann, dann bin ich gespannt. Die Regel kann man sicher auch noch so umbauen, dass sie für ganze Gruppen von Raw-Items funktioniert.
Ich habe einen Enhancement-Request im OH2-Robonect-Binding aufgemacht (https://github.com/openhab/openhab-addons/issues/7848), um die Anpassung gleich dort durchzuführen, vielleicht kann ich meine Regel bald wieder wegwerfen.
Ich habe das Problem jetzt so umgangen, dass ich mir zwei Items und eine Rule in Openhab gebaut habe. Das erste Item ist mit dem Channel des Bindings verknüpft (z.B. mowerLastErrorDateTimeRaw). Wenn es sich ändert triggert eine Rule, die einen angepassten Wert errechnet und in das zweite Item speichert (mowerLastErrorDateTimeAdj). Die Rule sieht so aus:
Code: Alles auswählen
import java.time.Instant
import java.time.ZonedDateTime
import java.time.ZoneId
rule "Mower last error date timezone adjustment"
when
mowerLastErrorDateTimeRaw changed
then
val long epochSecs = (mowerLastErrorDateTimeRaw.state as DateTimeType).zonedDateTime.toEpochSecond
val long adjEpochSecs = epochSecs - ZonedDateTime.now.getOffset.getTotalSeconds
val Instant instant = Instant.ofEpochMilli(Long.valueOf(adjEpochSecs) * 1000)
val ZonedDateTime zdt = instant.atZone(ZoneId.of("Europe/Berlin"))
mowerLastErrorDateTimeAdj.sendCommand(new DateTimeType(zdt))
end
Die Zeitzone ist im Moment hart in die Regel eingebaut, wenn jemand eine Idee hat, wie man die systemseitig eingestellt Zeitzone von OH2 aus den Regional Settings auslesen kann, dann bin ich gespannt. Die Regel kann man sicher auch noch so umbauen, dass sie für ganze Gruppen von Raw-Items funktioniert.
Ich habe einen Enhancement-Request im OH2-Robonect-Binding aufgemacht (https://github.com/openhab/openhab-addons/issues/7848), um die Anpassung gleich dort durchzuführen, vielleicht kann ich meine Regel bald wieder wegwerfen.
-
- Forum-Anfänger
- Beiträge: 1
- Registriert: Fr 28. Apr 2017, 18:50
- Mäher: Gardena R38Li
- Firmware des Mähers (MSW): MSW 2.xx.xx
- Herstellungsjahr: 2017
- Robonect-Modul: noch kein Robonect verbaut
- Robonect Firmware: -keine
Re: Zeiten über Robonect-Binding mit falscher Zeitzone
Hallo Steffan,
ich habe das gleiche Problembei mir.
Leider erhalte ich Fehlermeldung :
[WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'Zeitanpassung_Shawn.rules' has errors, therefore ignoring it: [7,2]: no viable alternative at input 'mowernextjob'
[21,2]: no viable alternative at input 'mowerErrortime'
Code:
import java.time.Instant
import java.time.ZonedDateTime
import java.time.ZoneId
rule "Adjustment1"
when
mowernextjob changed
then
val long epochSecs = (mowernextjob.state as DateTimeType).zonedDateTime.toEpochSecond
val long adjEpochSecs = epochSecs - ZonedDateTime.now.getOffset.getTotalSeconds
val Instant instant = Instant.ofEpochMilli(Long.valueOf(adjEpochSecs) * 1000)
val ZonedDateTime zdt = instant.atZone(ZoneId.of("Europe/Berlin"))
mowernextjobAdj.sendCommand(new DateTimeType(zdt))
end
rule "Adjustment2"
when
mowerErrortime changed
then
val long epochSecs = (mowerErrortime.state as DateTimeType).zonedDateTime.toEpochSecond
val long adjEpochSecs = epochSecs - ZonedDateTime.now.getOffset.getTotalSeconds
val Instant instant = Instant.ofEpochMilli(Long.valueOf(adjEpochSecs) * 1000)
val ZonedDateTime zdt = instant.atZone(ZoneId.of("Europe/Berlin"))
mowerErrortimeAdj.sendCommand(new DateTimeType(zdt))
end
Irgendjemand eine Idee?
Grüße
ich habe das gleiche Problembei mir.
Leider erhalte ich Fehlermeldung :
[WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'Zeitanpassung_Shawn.rules' has errors, therefore ignoring it: [7,2]: no viable alternative at input 'mowernextjob'
[21,2]: no viable alternative at input 'mowerErrortime'
Code:
import java.time.Instant
import java.time.ZonedDateTime
import java.time.ZoneId
rule "Adjustment1"
when
mowernextjob changed
then
val long epochSecs = (mowernextjob.state as DateTimeType).zonedDateTime.toEpochSecond
val long adjEpochSecs = epochSecs - ZonedDateTime.now.getOffset.getTotalSeconds
val Instant instant = Instant.ofEpochMilli(Long.valueOf(adjEpochSecs) * 1000)
val ZonedDateTime zdt = instant.atZone(ZoneId.of("Europe/Berlin"))
mowernextjobAdj.sendCommand(new DateTimeType(zdt))
end
rule "Adjustment2"
when
mowerErrortime changed
then
val long epochSecs = (mowerErrortime.state as DateTimeType).zonedDateTime.toEpochSecond
val long adjEpochSecs = epochSecs - ZonedDateTime.now.getOffset.getTotalSeconds
val Instant instant = Instant.ofEpochMilli(Long.valueOf(adjEpochSecs) * 1000)
val ZonedDateTime zdt = instant.atZone(ZoneId.of("Europe/Berlin"))
mowerErrortimeAdj.sendCommand(new DateTimeType(zdt))
end
Irgendjemand eine Idee?
Grüße
-
- Forum-Anfänger
- Beiträge: 7
- Registriert: Fr 22. Mai 2020, 11:50
- Mäher: noch kein Mäher
- Robonect Firmware: -
Re: Zeiten über Robonect-Binding mit falscher Zeitzone
Es sieht so aus, als ob das Item mowererrortime nicht korrekt definiert wurde. Check das mal, ob sich da vielleicht ein Fehler eingeschlichen hat.
Eine Lösung für das Problem innerhalb des Bindings ist übrigens in Arbeit, heute ist dort ein erster Lösungsvorschlag gemacht worden. Vielleicht ist so eine Regel ja bald überflüssig und das Binding erzeugt korrigierte Timestamps.
Eine Lösung für das Problem innerhalb des Bindings ist übrigens in Arbeit, heute ist dort ein erster Lösungsvorschlag gemacht worden. Vielleicht ist so eine Regel ja bald überflüssig und das Binding erzeugt korrigierte Timestamps.
-
- Forum-Anfänger
- Beiträge: 7
- Registriert: Fr 22. Mai 2020, 11:50
- Mäher: noch kein Mäher
- Robonect Firmware: -
Re: Zeiten über Robonect-Binding mit falscher Zeitzone
Ab Version 2.5.6 sollte das Binding automatisch die Zeiten, die der Mäher liefert, in die in den OH-Settings definierte Zeitzone umrechnen. Damit ist dann auch die Anzeige auf z.B. Habpanel korrekt.
-
- Forum-Nutzer
- Beiträge: 47
- Registriert: Sa 10. Aug 2019, 17:05
- Wohnort: Reutlingen
- Mäher: Gardena SILENO
- Firmware des Mähers (MSW): MSW 15.xx.xx
- Herstellungsjahr: 2019
- Robonect-Modul: Robonect Hx (Rev.6)
- Robonect Firmware: V1.3