Sunrise/Sunset als Nature

Hallo zusammen,
Ich habe ein Programm geschrieben, dass mir die die Sonnenauf und Sonnenuntergangszeiten in Abhängigkeit des Längen und Breitengrades berechnen soll.
Die Berechnung funktioniert soweit, nur werden die Werte, die ich in den Kanälen eintrage, nicht in meinen Variablen (longitude, latitude) gespeichert.
Desweiteren möchte ich Sunrise & Sunset als Nature anlegen, damit ich diese in anderen Bundles benutzen kann.

Hier meine Programmierung:

> package io.openems.edge.astronomy;
> 
> 
> @Designate( ocd=Config.class, factory=true)
> @Component(
> name="io.openems.edge.sunrisesunset",
> immediate = true , 
> configurationPolicy = ConfigurationPolicy.REQUIRE)		
> 
> public class Astronomy extends AbstractOpenemsComponent implements  Controller,OpenemsComponent  {
> 
> 	private double longitude = 0;
> 	private double latitude = 0;
> 	
> 	public Astronomy() {
> 		super(
> 				OpenemsComponent.ChannelId.values()
> 				);	
> 	}
> 	
> 
> 
> 	@Activate
> 	void activate(ComponentContext context, Config config) {
> 		super.activate(context, config.id(), config.alias(), config.enabled()
> 				);
> 		
> 		writeData(config);
> 	}
> 	
> 	private void writeData(Config config) {
> 	
> 		this.latitude = config.latitude();
> 		this.longitude = config.longitude();
> 		
> 		
> 	}
> 	
> 	
> 	@Deactivate
> 	protected void deactivate() { 
> 		super.deactivate();
> 	}
> 
> 	public enum ChannelId implements io.openems.edge.common.channel.ChannelId { 
> 	;
> 		private final Doc doc;
> 
> 		private ChannelId(Doc doc) {
> 			this.doc = doc;
> 		}
> 
> 		public Doc doc() {
> 			return this.doc;
> 		}
> 	}
> 
> 	
> 	@Activate
> 	public void run() throws OpenemsNamedException {
> 	
> 
> 		
> Calendar[] sunriseSunset = io.openems.edge.astronomy.SunriseSunset.getSunriseSunset(Calendar.getInstance(),latitude,longitude);
> System.out.println("Test:"+ latitude);
> System.out.println("Test:"+ longitude);
> 		
> }
> 	
> }

Beste Grüße
Dominik

Die Berechnung geschieht nun erfolgreich mit den in der config hinterlegten Werten.

Nun möchte ich noch, die Sonnenauf und Sonnenuntergangszeiten als Kanäle abspeichern

Ich habe hierzu Kanaldeklarationen angelegt:

public enum ChannelId implements io.openems.edge.common.channel.ChannelId {

  SUNRISE(Doc.of(OpenemsType.INTEGER).unit(Unit.MINUTE)),
  
  SUNSET(Doc.of(OpenemsType.INTEGER).unit(Unit.MINUTE));

Nun habe ich zwei Variablen angelegt, in denen die Sonnenaufgang/Sonnenuntergangszeiten seit Mitternacht in Minuten gespeichert werden.

Wie weise ich den erstellen Channel ID’s die Variablen zu?

Hat alles so funktioniert, wie gewünscht.

LG

Hallo,

sorry ich bin nicht dazu gekommen, zu antworten. Um den Wert im Channel zu setzen, schreibst du

this.channel(ChannelId.SUNRISE).setNextValue(latitude);

Eine Nature ist erstmal nichts anderes als ein Java interface. Das heißt du legst z. B. ein “Astronomy” interface an, das du in deiner Astronomy (oder dann “AstronomyImpl”) implementieren musst - siehe z. B. Sum und SumImpl.

Gruß,.
Stefan

Hallo Dominik,

hast du diese Komponente fertig entwickelt? Ich könnte Sonnenaufgang-/untergang in einem Controller brauchen und würde dafür gerne deine Komponente verwenden? Außerdem würde ich sie gerne in “develop” mergen.

Gruß,
Stefan