Skip to content

Nutzung astronomischer Daten

Andi edited this page Aug 10, 2016 · 28 revisions

Übersicht

Grundlegende astronomische Daten werden bereits von den Systemitems bereitgestellt. Für die Nutzung in der Visualisierung und die Nutzung in KNX müssen die Daten ggf. unterschiedlich formatiert werden. In der Visualisierung genügt es, auf das Systemitem direkt zuzugreifen. KNX benötigt je nach DPT ein entsprechend vorformatiertes Item.

Visualisierung (SmartVisu)

Sonnenaufgang {{ basic.formula('Sonnenaufgang', 'env.location.sunrise', 'time') }}

Erläuterung:

env.location.sunrise ist dabei das Systemitem, dass von SmarthomeNG fertig bereitgestellt wird. Mit time wird dann nur noch die Ausgabe formatiert - in diesem Fall wird also die bereitgestellte Angabe 2016-08-11 06:02:56.375006+02:00 umformatiert in 06:02.

Item (SmarthomeNG)

[Zentral]
	[[Astronomie]]
		[[[Sonne]]]
			[[[[Berechnung]]]]
				type = bool
				visu = yes
				crontab = init = 1 | 30 2 * * = 1
				enforce_updates = true

			[[[[Aufgang]]]]
				type = foo
				visu = yes
				eval = sh.sun.rise().astimezone(sh.tzinfo())
				eval_trigger = Zentral.Astronomie.Sonne.Berechnung
				knx_dpt = 10
				knx_send = 0/2/10
				enforce_updates = true

Erläuterung:

In diesem Beispiel verwenden wir zwei Items. Das eigentliche Item für den Sonnenaufgang ist das Zentral.Astronomie.Sonne.Aufgang - Item. Damit der Sonnenaufgang bei diesem Item überhaupt berechnet wird, muss die Berechnung erst mal ausgelöst (getriggert) werden. Diese Triggerung wird über eval_trigger = Zentral.Astronomie.Sonne.Berechnung ausgelöst. Dabei wird durch das Item Zentral.Astronomie.Sonne.Berechnung, welches im oberen Codeausschnitt zu sehen ist, eine Neuberechnung des items Aufgang ausgelöst.

Beim Item für den Aufgang könnten wir nun natürlich auch das Systemitem env.location.sunrise verwenden, dieses Item stellt den Sonnenaufgang im KNX aber nicht immer in der gewünschten Formatierung dar. Daher wird in diesem Beispiel stattdessen die eigentliche (SmarthomeNG-) Funktion sh.sun.rise() aufgerufen und in diesem Fall noch um die Zeitzone korrigiert astimezone(sh.tzinfo()). Somit erhält man die gewünschte Zeitangabe datentypkonform für den DPT 10.001 in der Form Thuraday, 06:02:56.