Hallo Leute,
ich hab mal wieder ein kleineres Problem, bzw. finde ich nicht die richtige Lösung. Ich möchte, dass sich unter einer bestimmten Bedingung und nachdem die Sonne untergangen ist, sich einfach nur ein Licht einschaltet.
Bspw.:
when
Item changed
then
if (Sonne ist untergangen) {
Sendcommand(Licht, ON)
}
end
Das ganze ist natrülich ein bisschen mehr. Nur welches Thing im Astro Binding gibt mir die Info darüber ob die Sonne im Moment untergangen ist? Ich dachte es wäre das: 'astro:sun:local:noon#duration'. Damit funktioniert es aber nicht.
Am liebsten wäre mir ein Thing, das man einfach als Switch angeben könnte.
Frage zum Astro Binding
- alkaline
- Beiträge: 173
- Registriert: 20. Apr 2017 13:25
Re: Frage zum Astro Binding
Du kannst die Tageszeit bzw. deren Events berechnen und bei den jeweiligen Events ein "ON" oder "OFF" senden:
items:
rules:
map: siehe Datei
Hinweis: Die Rule bringt bei Start des Systems einen Fehler, weil die Daten noch nicht eingelesen wurde.
items:
Code: Alles auswählen
/* Gruppen */
Group gAstro "Astro" (Whg)
Group gAstroSonne "Astro Sonne" // Sonne
Group gAstroDaemmerung "Astro Dämmerung" // Dämmerung
Group gAstroMond "Astro Mond" // Mond
Group gAstroJahreszeit "Astro Jahreszeit" // Jahreszeit
Group gAstroEreignis "Astro Ereignis" // Ereignisse
Group gAstroSternzeichen "Astro Sternzeichen" // Sternzeichen
Group gNAstro "Astro Sonstiges"
/* ----------- Astro ---------------------- */
//
DateTime CurrentTime "Datum [%1$tA,%1$td.%1$tm.%1$tY]" <clock> (gAstro) { channel="ntp:ntp:local:dateTime" }
DateTime SunriseStart_Time "Sonnenaufgang [%1$tH:%1$tM Uhr]" <sunrise> (gAstro,gAstroSonne) { channel="astro:sun:home:rise#start" }
DateTime SunriseSet_Time "Sonnenuntergang [%1$tH:%1$tM Uhr]" <sunset> (gAstro,gAstroSonne) { channel="astro:sun:home:set#start" }
//
Switch Night_State "Nacht" (gNAstro)
//DateTime NightStartTime "Nacht Beginn [%1$tH:%1$tM Uhr]" <moon> (gAstro) { channel="astro:sun:home:night#start" }
//DateTime NightEndTime "Nacht Ende [%1$tH:%1$tM Uhr]" <moon> (gAstro) { channel="astro:sun:home:night#end" }
//
String Season_Name "Aktuelle Jahreszeit [MAP(astro.map):%s]" <jahreszeit> (gAstro,gAstroJahreszeit) { channel="astro:sun:home:season#name" }
DateTime Jahreszeit_Fruehjahr "Frühlingsbeginn [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" <fruehling> (gAstro, gAstroJahreszeit) {channel="astro:sun:home:season#spring"}
DateTime Jahreszeit_Sommer "Sommerbeginn [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" <sommer> (gAstro,gAstroJahreszeit) {channel="astro:sun:home:season#summer"}
DateTime Jahreszeit_Herbst "Herbstbeginn [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" <herbst> (gAstro,gAstroJahreszeit) {channel="astro:sun:home:season#autumn"}
DateTime Jahreszeit_Winter "Winterbeginn [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" <winter> (gAstro,gAstroJahreszeit) {channel="astro:sun:home:season#winter"}
String Zodiac_Sign "Tierkreiszeichen [MAP(astro.map):%s]" <zodiac> (gAstroSternzeichen) { channel="astro:sun:home:zodiac#sign" }
Number Sun_Elevation "Sonnenhöhe [%.1f °]" <sun> (gAstroSonne) { channel="astro:sun:home:position#elevation" }
Number Moon_Elevation "Mondhöhe [%.1f °]" <moon> (gAstroMond) { channel="astro:moon:home:position#elevation" }
String Moon_Phase "Mondphase [MAP(astro.map):%s]" <moon> (gAstro,gAstroMond) { channel="astro:moon:home:phase#name" }
DateTime Moon_Next_Full "Nächster Vollmond [%1$td.%1$tm.%1$tY, %1$tH:%1$tM Uhr]" <moon> (gAstroMond) { channel="astro:moon:home:phase#full" }
DateTime Moon_Next_New "Nächster Neumond [%1$td.%1$tm.%1$tY, %1$tH:%1$tM Uhr]" <moon> (gAstroMond) { channel="astro:moon:home:phase#new" }
//
String TimePeriodOfDay "Tageszeit [MAP(astro.map):%s]" (gNAstro)
//
DateTime DawnStart_Time "Morgendämmerung Beginn[%1$tH:%1$tM]" (gAstroDaemmerung) { channel="astro:sun:home:civilDawn#start" }
DateTime DawnStop_Time "Morgendämmerung Ende[%1$tH:%1$tM]" (gAstroDaemmerung) { channel="astro:sun:home:civilDawn#end" }
DateTime DayStart_Time "Tag Beginn [%1$tH:%1$tM]" (gNAstro) { channel="astro:sun:home:daylight#start" }
DateTime DayStop_Time "Tag Ende [%1$tH:%1$tM]" (gNAstro) { channel="astro:sun:home:daylight#end" }
DateTime DuskStart_Time "Abenddämmerung Beginn [%1$tH:%1$tM]" <moon> (gAstro,gAstroDaemmerung) { channel="astro:sun:home:civilDusk#start" }
DateTime DuskStop_Time "Abenddämmerung Ende [%1$tH:%1$tM]" (gAstroDaemmerung) { channel="astro:sun:home:civilDusk#end" }
DateTime NightStart_Time "Nacht Beginn[%1$tH:%1$tM]" <moon> (gAstro) { channel="astro:sun:home:night#start" }
DateTime NightStop_Time "Nacht Ende[%1$tH:%1$tM]" (gNAstro) { channel="astro:sun:home:night#end" }
DateTime MorningNightStart_Time "Nacht/Morgen Beginn [%1$tH:%1$tM]" (gNAstro) { channel="astro:sun:home:morningNight#start" }
DateTime MorningNightStop_Time "Nacht/Morgen Ende [%1$tH:%1$tM]" (gNAstro) { channel="astro:sun:home:morningNight#end" }
DateTime EveningNightStart_Time "Abend/Nacht Beginn [%1$tH:%1$tM]" (gNAstro) { channel="astro:sun:home:eveningNight#start" }
DateTime EveningNightStop_Time "Abend/Nacht Ende [%1$tH:%1$tM]" (gNAstro) { channel="astro:sun:home:eveningNight#end" }
// Events
Switch DawnStart_Event "Start of Dawn Event" (gAstroEreignis)
Switch DayStart_Event "Start of Day Event" (gAstroEreignis)
Switch DuskStart_Event "Start of Dusk Event" (gAstroEreignis)
Switch NightStart_Event "Start of Night Event" (gAstroEreignis)
Switch SunriseStart_Event "Start of Sunrise Event" (gAstroEreignis)
Switch SunsetStart_Event "Start of Sunset Event" (gAstroEreignis)
// Items
Switch Dawn "Dawn [%s]" // After Dawn and before Day
Switch Day "Day [%s]" // After Day and before Dusk
Switch Dusk "Dusk [%s]" // After Dusk and before Night
Switch Night "Night [%s]" // After Night and before Dawn
/* EXAMPLE
* https://community.openhab.org/t/explanation-of-eveningnight-and-morningnight/2194
*
* MorningNight_Start 00:00
* MorningNight_Stop 04:00
* Night_Stop 05:02
* AstroDawn_Start 05:00
* AstroDawn_Stop 05:45
* NauticDawn_Start 05:45
* NauticDawn_Stop 06:27
* CivilDawn_Start 06:27
* CivilDawn_Stop 07:02
* Sunrise_Start 07:02
* Sunrise_Stop 07:06
* Daylight_Start 07:06
* Noon_Start 13:17
* Noon_Stop 13:18
* Daylight_Stop 19:27
* Sunset_Start 19:27
* Sunset_Stop 19:31
* CivilDusk_Start 19:31
* CivilDusk_Stop 20:06
* NauticDusk_Start 20:06
* NauticDusk_Stop 20:48
* AstroDusk_Start 20:48
* AstroDusk_Stop 21:33
* Night_Start 21:33
* EveningNight_Start 21:33
* EveningNight_Stop 00:00
*/
Code: Alles auswählen
import java.util.Date
// Time of Day Rules
// Requires time update every 60 seconds
val String RFN = "time-of-day.rules"
rule "Get time period for right now"
when
System started
then
val now = new Date()
val dawn = new Date((DawnStart_Time.state as DateTimeType).calendar.timeInMillis)
val day = new Date((DayStart_Time.state as DateTimeType).calendar.timeInMillis)
val dusk = new Date((DuskStart_Time.state as DateTimeType).calendar.timeInMillis)
val night = new Date((NightStart_Time.state as DateTimeType).calendar.timeInMillis)
val String initStr = "Initializing time period. The time of day is "
Thread::sleep(30000)
if(now.after(dawn) && now.before(day)) {
logInfo(RFN, initStr + "Dawn: " + now)
Dawn.sendCommand(ON)
Day.sendCommand(OFF)
Dusk.sendCommand(OFF)
Night.sendCommand(OFF)
TimePeriodOfDay.postUpdate("Dawn")
}
else if(now.after(day) && now.before(dusk)) {
logInfo(RFN, initStr + "Day: " + now)
Dawn.sendCommand(OFF)
Day.sendCommand(ON)
Dusk.sendCommand(OFF)
Night.sendCommand(OFF)
TimePeriodOfDay.postUpdate("Day")
}
else if(now.after(dusk) && now.before(night)) {
logInfo(RFN, initStr + "Dusk: " + now)
Dawn.sendCommand(OFF)
Day.sendCommand(OFF)
Dusk.sendCommand(ON)
Night.sendCommand(OFF)
TimePeriodOfDay.postUpdate("Dusk")
}
else {
logInfo(RFN, initStr + "Night: " + now)
Dawn.sendCommand(OFF)
Day.sendCommand(OFF)
Dusk.sendCommand(OFF)
Night.sendCommand(ON)
TimePeriodOfDay.postUpdate("Night")
}
end
rule "Generate Time of Day Events"
when
Item CurrentTime received update
then
val now = new Date()
val dawn = new Date((DawnStart_Time.state as DateTimeType).calendar.timeInMillis)
val day = new Date((DayStart_Time.state as DateTimeType).calendar.timeInMillis)
val dusk = new Date((DuskStart_Time.state as DateTimeType).calendar.timeInMillis)
val night = new Date((NightStart_Time.state as DateTimeType).calendar.timeInMillis)
val sunset = new Date((SunriseSet_Time.state as DateTimeType).calendar.timeInMillis)
val sunrise = new Date((SunriseStart_Time.state as DateTimeType).calendar.timeInMillis)
if((now.getTime-(now.getTime%60000)) == (dawn.getTime-(dawn.getTime%60000))) {
logInfo(RFN, "Übergang zur Dämmerung")
DawnStart_Event.postUpdate(ON)
}
else if((now.getTime-(now.getTime%60000)) == (day.getTime-(day.getTime%60000))) {
logInfo(RFN, "Beginn der Morgendämmerung")
DayStart_Event.postUpdate(ON)
}
else if((now.getTime-(now.getTime%60000)) == (dusk.getTime-(dusk.getTime%60000))) {
logInfo(RFN, "Es wird Tag")
DuskStart_Event.postUpdate(ON)
}
else if((now.getTime-(now.getTime%60000)) == (night.getTime-(night.getTime%60000))) {
logInfo(RFN, "Es wird Nacht")
NightStart_Event.postUpdate(ON)
}
if((now.getTime-(now.getTime%60000)) == (sunrise.getTime-(sunrise.getTime%60000))) {
logInfo(RFN, "Sonnenaufgang")
SunriseStart_Event.postUpdate(ON)
}
else if((now.getTime-(now.getTime%60000)) == (sunset.getTime-(sunset.getTime%60000))) {
logInfo(RFN, "Sonnenuntergang")
SunsetStart_Event.postUpdate(ON)
}
end
rule "Dawn Started"
when
Item DawnStart_Event received update ON
then
val now = new Date()
val dawn = new Date((DawnStart_Time.state as DateTimeType).calendar.timeInMillis)
val day = new Date((DayStart_Time.state as DateTimeType).calendar.timeInMillis)
if(now.after(dawn) && now.before(day)) {
logInfo(RFN, "Start Morgendämmerung: " + now)
Dawn.sendCommand(ON)
Day.sendCommand(OFF)
Dusk.sendCommand(OFF)
Night.sendCommand(OFF)
TimePeriodOfDay.postUpdate("Dawn")
}
end
rule "Day Started"
when
Item DayStart_Event received update ON
then
val now = new Date()
val day = new Date((DayStart_Time.state as DateTimeType).calendar.timeInMillis)
val dusk = new Date((DuskStart_Time.state as DateTimeType).calendar.timeInMillis)
if(now.after(day) && now.before(dusk)) {
logInfo(RFN, "Es ist Tag: " + now)
Dawn.sendCommand(OFF)
Day.sendCommand(ON)
Dusk.sendCommand(OFF)
Night.sendCommand(OFF)
TimePeriodOfDay.postUpdate("Day")
}
end
rule "Dusk started"
when
Item DuskStart_Event received update ON
then
val now = new Date()
val dusk = new Date((DuskStart_Time.state as DateTimeType).calendar.timeInMillis)
val night = new Date((NightStart_Time.state as DateTimeType).calendar.timeInMillis)
if(now.after(dusk) && now.before(night)) {
logInfo(RFN, "Start Abenddämmerung: " + now)
Dawn.sendCommand(OFF)
Day.sendCommand(OFF)
Dusk.sendCommand(ON)
Night.sendCommand(OFF)
TimePeriodOfDay.postUpdate("Dusk")
}
end
rule "Night started"
when
Item NightStart_Event received update ON
then
val now = new Date()
val morningNightStart = new Date((MorningNightStart_Time.state as DateTimeType).calendar.timeInMillis)
val morningNightStop = new Date((MorningNightStop_Time.state as DateTimeType).calendar.timeInMillis)
val eveningNightStart = new Date((EveningNightStart_Time.state as DateTimeType).calendar.timeInMillis)
val eveningNightStop = new Date((EveningNightStop_Time.state as DateTimeType).calendar.timeInMillis)
if((now.after(morningNightStart) && now.before(morningNightStop)) ||
(now.after(eveningNightStart) && now.before(eveningNightStop))) {
logInfo(RFN, "Es ist Nacht: " + now)
Dawn.sendCommand(OFF)
Day.sendCommand(OFF)
Dusk.sendCommand(OFF)
Night.sendCommand(ON)
TimePeriodOfDay.postUpdate("Night")
}
end
rule "Sunrise started"
when
Item SunriseStart_Event received update ON
then
val now = new Date()
logInfo(RFN, "Sonnenaufgang: " + now)
end
rule "Sunset started"
when
Item SunsetStart_Event received update ON
then
val now = new Date()
logInfo(RFN, "Sonnenuntergang: " + now)
end
Hinweis: Die Rule bringt bei Start des Systems einen Fehler, weil die Daten noch nicht eingelesen wurde.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- alkaline
- Beiträge: 173
- Registriert: 20. Apr 2017 13:25
Re: Frage zum Astro Binding
Die oben stehende Konfig verrichtet bei mir seit 2-3 Monaten ihren Dienst. Habe aber gesehen, das es durchaus noch Potential gibt, siehe https://community.openhab.org/t/design- ... -day/15407
-
- Beiträge: 36
- Registriert: 10. Mär 2017 09:25
Re: Frage zum Astro Binding
Danke für die Antwort.
Die Lösung scheint ja doch komplizierter zu sein als ich dachte, das muss ich mir in Ruhe zu gemüte führen ^^
Die Lösung scheint ja doch komplizierter zu sein als ich dachte, das muss ich mir in Ruhe zu gemüte führen ^^
- seppy
- Beiträge: 738
- Registriert: 24. Sep 2015 20:25
- Wohnort: Bonn
Re: Frage zum Astro Binding
Hi thedk,
ich habe das etwas einfacher gelöst. Ich nutze aber noch das Legacy Binding, weil ich keine Lust bisher auf die Migration nach 2 hatte .
Hier die etwas gekürzte Variante.
Ich habe die folgenden Items definiert:
Und die passende Regel dazu:
Und auf die entsprechenden Schalter reagiere ich dann beispielsweise für die Lichtsteuerung:
Vielleicht kommst Du damit weiter?!
Grüße,
Seppy
ich habe das etwas einfacher gelöst. Ich nutze aber noch das Legacy Binding, weil ich keine Lust bisher auf die Migration nach 2 hatte .
Hier die etwas gekürzte Variante.
Ich habe die folgenden Items definiert:
Code: Alles auswählen
// 30 Minuten vor Sonnenuntergang
Switch Is30BeforeSunset
(gAstro)
//{channel="astro:sun:heidewegIs30BeforeSunset:rise#event"}
{astro="planet=sun, type=set, property=end, offset=-30"}
Switch SunsetStarts
"Sonnenuntergang beginnt"
(gAstro)
Switch SunriseEnds
"Sonnenaufgang endet"
(gAstro)
Code: Alles auswählen
/**
* Beginn des Sonnenuntergangs aktivieren
*/
rule "SunsetStarts"
when
Item Is30BeforeSunset changed to ON
then
SunsetStarts.sendCommand(ON)
SunriseEnds.sendCommand(OFF)
logInfo("Homebox.SystemRules:SunsetStarts", "Daylight: Sonnenuntergang beginnt (SunsetStarts: ON)")
end
Code: Alles auswählen
/**
* Gartenbeleuchtung mit Sonnenunter/-aufgang anschalten
*
* 60 Min vor Sonnenuntergang
* 60 Min vor Sonnenaufgang, aber nicht vor 7.00 Uhr
*/
rule "Astro_Gardenlights_On"
when
Item SunsetStarts received command or
Item SunriseStarts received command
then
if (receivedCommand == ON){
logInfo("Homebox.GardenRules:Astro_Gardenlights_On", "60 Minuten vor Sonnenuntergang/-aufgang --> Beleuchtung einschalten")
//Beleuchtung Terrasse
if (AussenTerrasseBeleuchtung.state == OFF){
AussenTerrasseBeleuchtung.sendCommand(ON)
logInfo("Homebox.GardenRules:Astro_Gardenlights_On", "--> AussenTerrasseBeleuchtung geschaltet (ON)")
}
//Beleuchtung Hauswand
if (AussenGartenHauswandBeleuchtung.state == OFF){
AussenGartenHauswandBeleuchtung.sendCommand(ON)
logInfo("Homebox.GardenRules:Astro_Gardenlights_On", "--> AussenGartenHauswandBeleuchtung geschaltet (ON)")
}
//Beleuchtung Balkon Wohnzimmer
if (AussenBalkonWZBeleuchtungState.state == OFF){
AussenBalkonWZBeleuchtungState.sendCommand(ON)
logInfo("Homebox.GardenRules:Astro_Gardenlights_On", "--> AussenBalkonWZBeleuchtungState geschaltet (ON)")
}
//Beleuchtung Vorgarten
if (AussenVorgartenBeleuchtungState.state == OFF){
AussenVorgartenBeleuchtungState.sendCommand(ON)
logInfo("Homebox.GardenRules:Astro_Gardenlights_On", "--> AussenVorgartenBeleuchtungState geschaltet (ON)")
}
// Weihnachtsbeleuchtung aktivieren, wenn Weihnachtszeit
if (GlobalChristmasPeriod.state == ON) {
AussenTerrasseSteckdosen.sendCommand(ON)
logInfo("Homebox.GardenRules:Astro_Gardenlights_On", "Weihnachtszeit! --> AussenTerrasseSteckdosen geschaltet (ON)")
}
}
end
Grüße,
Seppy
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren
- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung
- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung