. :daumenhoch: Erstinstallation für Neueinsteiger: Bitte hier entlang!

. :daumenhoch: Robonect-Gebrauchsanweisung und Support für alle Robonect-Menüpunkte! Bitte hier entlang!

. :arrow: Für jeden Robonect-Menüpunkt gibt es dort ein eigenes Unterforum
. :arrow: Erklärung des Menüpunkts und unser Support direkt dort im Unterforum des Menüpunkts!

Zeiten über Robonect-Binding mit falscher Zeitzone

open Home Automation Bus (openHAB) ist eine in Java entwickelte Softwarelösung, die Komponenten zur Gebäudeautomatisierung von den verschiedensten Anbietern hersteller- und protokollneutral in einer Plattform miteinander verbindet.
Antworten
Rafterman
Forum-Anfänger
Beiträge: 7
Registriert: Fr 22. Mai 2020, 11:50
Mäher: noch kein Mäher
Robonect Firmware: -

Zeiten über Robonect-Binding mit falscher Zeitzone

Beitrag von Rafterman »

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

Rafterman
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

Beitrag von Rafterman »

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:

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
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.

ydobon1
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

Beitrag von ydobon1 »

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

Rafterman
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

Beitrag von Rafterman »

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.

Rafterman
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

Beitrag von Rafterman »

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.

sebastianhe
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

Re: Zeiten über Robonect-Binding mit falscher Zeitzone

Beitrag von sebastianhe »

Rafterman hat geschrieben:
Do 18. Jun 2020, 11:59
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.
Kann ich bestätigen.

Antworten

Zurück zu „OpenHAB“