Hi, I am not a developer. so I used examples and copied and pasted till I got things to work.
I used an alarm clock that worked quite well for me. But since I migrated to OH3 it is no longer working.
I know it’s quite old, but I like what it did
It was based on this one: https://github.com/openhab/openhab1-addons/wiki/AlarmClock#alarm-clock—example-ii
here is my rule
import java.time.ZonedDateTime
import java.time.DayOfWeek
var Timer timer1 = null
var java.util.concurrent.locks.ReentrantLock lock1 = new java.util.concurrent.locks.ReentrantLock()
rule "Initialization"
when
System started
then
postUpdate(alarmTimeHour, 6)
postUpdate(alarmTimeMinute, 00)
postUpdate(alarmMonday, ON)
postUpdate(alarmTuesday, ON)
postUpdate(alarmWednesday, ON)
postUpdate(alarmThursday, ON)
postUpdate(alarmFriday, ON)
postUpdate(alarmSaturday, OFF)
postUpdate(alarmSunday, OFF)
end
rule "Alarm"
when
Item alarmTimeHour changed or
Item alarmTimeMinutes changed
then
lock1.lock()
try {
var String msg = ""
var hour = alarmTimeHour.state as Number
var minute = alarmTimeMinute.state as Number
if ( hour < 10 ) { msg = "0" }
msg = msg + alarmTimeHour.state.format ( "%d" ) + ":"
if ( minute < 10 ) { msg = msg + "0" }
msg = msg + alarmTimeMinute.state.format ( "%d" )
postUpdate(alarmTimeMessage,msg)
var int alarm1
alarm1 = (alarmTimeHour.state as DecimalType).intValue * 60 + (alarmTimeMinute.state as DecimalType).intValue
alarm1 = alarm1.intValue
var int now1
now1 = ZonedDateTime::now.getMinute
now1 = now1.intValue
var int delta1
delta1 = ( alarm1 - now1 )
delta1 = delta1.intValue
if (now1 > alarm1) { delta1 = delta1 + 1440 }
if (timer1 !== null ) {
timer1.cancel
timer1 = null
}
timer1 = createTimer(ZonedDateTime::now.plusMinutes(delta1)) [|
var Number day = ZonedDateTime::now.getDayOfWeek.getValue
if (((day == 1) && (alarmMonday.state == ON)) ||
((day == 2) && (alarmTuesday.state == ON)) ||
((day == 3) && (alarmWednesday.state == ON)) ||
((day == 4) && (alarmThursday.state == ON)) ||
((day == 5) && (alarmFriday.state == ON)) ||
((day == 6) && (alarmSaturday.state == ON)) ||
((day == 7) && (alarmSunday.state == ON))) {
// The things to do if the alarm clock is enabled for this day of week:
Light_Bedroom.sendCommand(ON)
IpRadio_Power.sendCommand(ON)
// ...
}
timer1.reschedule(ZonedDateTime::now.plusHours(24))
]
}
finally {
lock1.unlock()
}
end
//End Alarm Clock
and my sitemap
Frame label="Alarm clock" {
Text label="Alarm Clock [%s]" item=alarmTimeMessage icon="time" {
Frame label="Time" {
Setpoint item=alarmTimeHour minValue=0 maxValue=23 step=1
Setpoint item=alarmTimeMinute minValue=0 maxValue=55 step=5
}
Frame label="Weekdays" {
Switch item=alarmMonday
Switch item=alarmTuesday
Switch item=alarmWednesday
Switch item=alarmThursday
Switch item=alarmFriday
Switch item=alarmSaturday
Switch item=alarmSunday
}
}
I’d like to keep the same functionality but rewrite the code so it will work in OH3
How do I get even started?
Thanks in advance, A lot!