Seite 1 von 1

Rechnen / Arbeiten mit DateTime

Verfasst: 4. Nov 2020 10:05
von hurra
Hallo zusammen,

rechnen und arbeiten mit DateTime-Formaten macht mir weniger Spaß als gedacht.

Ich möchte die Zeit zwischen Sonnenauf- und untergang ausrechnen, in der Sitemap anzeigen und bei weniger als 10 Stunden einen Event auslösen.
Die Berechnung stimmt, im Log kommt der richtige Wert, aber ich verstehe nicht, warum in der Sitemap kein Wert angezeigt wird und warum die IF-Schleife nicht will. Vielleicht ist hier das Problem differenz.state? Stimmt das Format nicht?

VG
Christoph

Sitemap:

Code: Alles auswählen

Text item=Sunshine_Time
Items:

Code: Alles auswählen

DateTime         Sunshine_Time      "Sonnenschein heute"
Rule:

Code: Alles auswählen

    rule "Sonnenauf und untergang"
when
      Time cron "* 0/1 * * * ?" // zum Debug, wird später mit Sonnenaufgang getriggert
then
      val Date1= new DateTime(( Sunrise_Time.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli)
      val Date2 = new DateTime(( Sunset_Time.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli)
      var double differenz = (Date2.millis - Date1.millis)/1000/60

      logInfo("test", "Sonnenzeit in Minuten: " + differenz)
      Sunshine_Time.postUpdate(differenz)

      if (differenz.state <= 600) {
      logInfo("test", "weniger als 10 Stunden")
      }


end

Re: Rechnen / Arbeiten mit DateTime

Verfasst: 4. Nov 2020 10:37
von Tokamak
"differenz" ist ein double-Variable. Mit ihr kannst und musst du rechnen. Der Zugriff mittels .state ist Objekten, in unserem Falle Items vorbehalten. Allerdings ist "differenz" kein Item.

Es muss daher heißen:

Code: Alles auswählen

      if (differenz <= 600) {
      logInfo("test", "weniger als 10 Stunden")
      }

Re: Rechnen / Arbeiten mit DateTime

Verfasst: 4. Nov 2020 10:46
von hurra
differenz ist kein item, richtig. Wird nur innerhalb der Rule verwendet. Aber wie bringe ich dann die differenz in ein Item?

Re: Rechnen / Arbeiten mit DateTime

Verfasst: 4. Nov 2020 13:56
von peter-pan
Das mit dem Log passt so, wie Tokamak geschrieben hat. Allerdings sollte das Item wahrscheinlich vom Typ Number sein oder evtl auch String. Hab's jetzt nicht getestet. Evtl. solltest du auch noch ein Pattern/Formatter/Suffix in den Text mit aufnehmen "Sonnenschein heute [%s]"

Re: Rechnen / Arbeiten mit DateTime

Verfasst: 5. Nov 2020 20:28
von heiko74
Hallo,

ich habe da ein etwas anderen Ansatz gewählt.
Es gibt ein Astro-Binding, das ich so konfiguriert habe:

*things:

Code: Alles auswählen

astro:sun:home  [ geolocation="xxxxx,yyyyy, zzz", interval=60]
*items

Code: Alles auswählen

Number  Astro_Sun_Daylight   "Sun Daylight  [%.0f min]" {channel="astro:sun:home:daylight#duration"}
Da habe ich die länge des Tages schon berechnet in einem item liegend.

Damit könnte man auch die rule etwas einfacher gestalten (Rule ist nicht getestet):

Code: Alles auswählen

rule "Sonnenauf und untergang"
when
	Item Astro_Sun_Daylight  changed
then
	if ((Astro_Sun_Daylight.state as Number) <= 600) {
		logInfo("test", "weniger als 10 Stunden")
	}
end
Das Item wird Nachts um 0:00 aktualisiert.

Heiko

Re: Rechnen / Arbeiten mit DateTime

Verfasst: 9. Nov 2020 07:39
von hurra
heiko74 hat geschrieben: 5. Nov 2020 20:28 Hallo,

ich habe da ein etwas anderen Ansatz gewählt.
Es gibt ein Astro-Binding, das ich so konfiguriert habe:

*things:

Code: Alles auswählen

astro:sun:home  [ geolocation="xxxxx,yyyyy, zzz", interval=60]
*items

Code: Alles auswählen

Number  Astro_Sun_Daylight   "Sun Daylight  [%.0f min]" {channel="astro:sun:home:daylight#duration"}
Da habe ich die länge des Tages schon berechnet in einem item liegend.

Damit könnte man auch die rule etwas einfacher gestalten (Rule ist nicht getestet):

Code: Alles auswählen

rule "Sonnenauf und untergang"
when
	Item Astro_Sun_Daylight  changed
then
	if ((Astro_Sun_Daylight.state as Number) <= 600) {
		logInfo("test", "weniger als 10 Stunden")
	}
end
Das Item wird Nachts um 0:00 aktualisiert.

Heiko
na das ist ja die sauberste und eine Ressourcen sparende Lösung! Danke! Das Daylight habe ich dort noch gar nicht gesehen!

Besten Dank!!

Re: Rechnen / Arbeiten mit DateTime

Verfasst: 4. Jan 2021 19:28
von SolarVogel
Hallo,
habe eine ergänzende Frage. Das Daylight wird in Minuten angezeigt. Kann man das auch anders formatieren/anzeigen. Hätte das gerne hh:mm
Danke und Gruß
Michael