Time of Day Events

Virtual beer for you! Cheers @Udo_Hartmann !!

Running openHAB 2.2.0 Build #1112, it appears getCalendar() is now deprecated?

The method getCalendar() from the type DateTimeType is deprecated

Any ideas how I might tweak this rule to work?

rule "Get time period for right now"
when
System started
then
logInfo(“EXTRA”, “System started, attempting to get time period for right now”)
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 "

http://docs.openhab.org/configuration/rules-dsl.html#datetime-item

This should be useful.

The Design Pattern: Time Of Day has been updated since this posting (maybe was written after it actually) which has a little bit more concise implementation.

Hi All. i have tried this and ended up with some errors .

Part 1

2020-05-13 17:28:44.114 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:29:43.768 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:30:44.049 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:31:44.078 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:32:44.340 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:30:44.049 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:31:44.078 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:32:44.340 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:33:44.162 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:34:43.650 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:35:44.118 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:36:44.106 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:37:44.539 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:38:43.816 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:39:45.071 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:40:27.095 [ERROR] [org.influxdb.impl.BatchProcessor    ] - Batch could not be sent. Data will be lost

java.lang.RuntimeException: {"error":"timeout"}

	at org.influxdb.impl.InfluxDBErrorHandler.handleError(InfluxDBErrorHandler.java:19) ~[influxdb-java-2.2.jar:?]

2020-05-13 17:40:43.957 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:41:12.371 [ERROR] [org.influxdb.impl.BatchProcessor    ] - Batch could not be sent. Data will be lost

java.lang.RuntimeException: {"error":"timeout"}

	at org.influxdb.impl.InfluxDBErrorHandler.handleError(InfluxDBErrorHandler.java:19) ~[influxdb-java-2.2.jar:?]

2020-05-13 17:41:46.163 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:42:10.653 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Error during the execution of startup rule 'Get time period for right now': Could not cast NULL to org.eclipse.smarthome.core.library.types.DateTimeType; line 13, column 26, length 36

2020-05-13 17:42:22.685 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Error during the execution of startup rule 'Get time period for right now': Could not cast NULL to org.eclipse.smarthome.core.library.types.DateTimeType; line 13, column 26, length 36

2020-05-13 17:42:30.873 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunriseStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:42:30.874 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunriseStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:42:30.875 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:42:30.876 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunsetStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:42:30.877 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunsetStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:42:30.877 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:42:33.040 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunriseStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:42:33.042 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunriseStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:42:33.043 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:42:33.044 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunsetStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:42:33.045 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunsetStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:42:33.045 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:42:44.260 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:43:02.953 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunriseStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:43:02.954 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunriseStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:43:02.956 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:43:02.957 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunsetStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:43:02.958 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunsetStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:43:02.960 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:43:32.817 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunriseStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:43:32.820 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunriseStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:43:32.822 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:43:32.823 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunsetStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:43:32.824 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunsetStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:43:32.825 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:43:44.264 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:44:02.989 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunriseStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:44:02.991 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunriseStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:44:02.994 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:44:02.997 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunsetStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:44:02.998 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunsetStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:44:02.999 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:44:33.434 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunriseStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:44:33.435 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunriseStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:44:33.436 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:44:33.437 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunsetStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:44:33.438 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunsetStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:44:33.439 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:44:44.262 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-misc-restdocs'

2020-05-13 17:45:03.416 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunriseStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:45:03.417 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunriseStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:45:03.418 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:45:03.419 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunsetStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:45:03.419 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'SunsetStart_Time' for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

2020-05-13 17:45:03.420 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.sitemap.Text

Items

// Times of Day
String TimePeriodOfDay              "Time of Day [%s]"

DateTime DawnStart_Time             "Dawn Start [%1$tH:%1$tM]"              { channel="astro:sun:local:civilDawn#start" }
DateTime DawnStop_Time              "Dawn Stop [%1$tH:%1$tM]"               { channel="astro:sun:local:civilDawn#end" }
DateTime DayStart_Time              "Day Start [%1$tH:%1$tM]"               { channel="astro:sun:local:daylight#start" }
DateTime DayStop_Time               "Day Stop [%1$tH:%1$tM]"                { channel="astro:sun:local:daylight#end" }
DateTime DuskStart_Time             "Dusk Start [%1$tH:%1$tM]"              { channel="astro:sun:local:civilDusk#start" }
DateTime DuskStop_Time              "Dusk Stop [%1$tH:%1$tM]"               { channel="astro:sun:local:civilDusk#end" }
DateTime NightStart_Time            "Night Start [%1$tH:%1$tM]"             { channel="astro:sun:local:night#start" }
DateTime NightStop_Time             "Night Stop[%1$tH:%1$tM]"               { channel="astro:sun:local:night#end" }
DateTime MorningNightStart_Time     "MorningNightStart [%1$tH:%1$tM]"       { channel="astro:sun:local:morningNight#start" }
DateTime MorningNightStop_Time      "MorningNightStop [%1$tH:%1$tM]"        { channel="astro:sun:local:morningNight#end" }
DateTime EveningNightStart_Time     "EveningNightStart [%1$tH:%1$tM]"       { channel="astro:sun:local:eveningNight#start" }
DateTime EveningNightStop_Time      "EveningNightStop [%1$tH:%1$tM]"        { channel="astro:sun:local:eveningNight#end" }

// Events
Switch DawnStart_Event              "Start of Dawn Event"
Switch DayStart_Event               "Start of Day Event"                         
Switch DuskStart_Event              "Start of Dusk Event"                            
Switch NightStart_Event             "Start of Night Event"                           

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

Number SunAzimuth                   "Azimuth [%.0f °]"                      { channel="astro:sun:local:position#azimuth" }
Number SunElevation                 "Elevation [%.0f °]"                    { channel="astro:sun:local:position#elevation" }

String MoonPhase                    "MoonPhase [%s]"                        { channel="astro:moon:local:phase#name" }

Rule :

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 "

    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((SunsetStart_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, "Transitioning to Dawn!!!")
        DawnStart_Event.postUpdate(ON)
    }
    else if((now.getTime-(now.getTime%60000)) == (day.getTime-(day.getTime%60000))) {
        logInfo(RFN, "Transitioning to Day!!!")
        DayStart_Event.postUpdate(ON)
    }
    else if((now.getTime-(now.getTime%60000)) == (dusk.getTime-(dusk.getTime%60000))) {
        logInfo(RFN, "Transitioning to Dusk!!!")
        DuskStart_Event.postUpdate(ON)
    }
    else if((now.getTime-(now.getTime%60000)) == (night.getTime-(night.getTime%60000))) {
        logInfo(RFN, "Transitioning to Night!!!")
        NightStart_Event.postUpdate(ON)
    }

    if((now.getTime-(now.getTime%60000)) == (sunrise.getTime-(sunrise.getTime%60000))) {
        logInfo(RFN, "Start of Sunrise!")
        SunriseStart_Event.postUpdate(ON)
    }
    else if((now.getTime-(now.getTime%60000)) == (sunset.getTime-(sunset.getTime%60000))) {
        logInfo(RFN, "Start of Sunset!")
        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, "Its Dawn: " + 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, "Its Day: " + 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, "Its Dusk: " + 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, "Its Night: " + 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, "Its Sunrise : " + now)
end

rule "Sunset started"
when
    Item SunsetStart_Event received update ON
then
    val now = new Date()
    logInfo(RFN, "Its Sunset : " + now)
end

RestDocs moved from the misc category to the UIs category in OH 2.4 I think, maybe early on in OH 2.5. There are lots of threads discussing it with solutions.

And since the Astro binding supports events now (and has for some years) this particular approach is somewhat archaic.

Thank you. Will look in to it.