Removed an obsolete sensor

This commit is contained in:
Pierre committed 2026-10-06 22:46:23 +02:00
1 parent 0e64711c4f
commit 486956cd1f
2 files changed
+45 -46

No files matched your search

+44 -45
View File
@@ -37,9 +37,8 @@ class AlarmClock(SmartObject):
self.switch_alarmclock_secondary = self.args['switch_alarmclock_secondary']
self.inputdate_alarmclock_main = self.args['inputdate_alarmclock_main']
self.inputdate_alarmclock_secondary = self.args['inputdate_alarmclock_secondary']
self.input_text_wakeup_time = self.args['input_text_wakeup_time']
self.output_workday_sensor = self.args['output_workday_sensor']
#self.sensor_wakeup_datetime = self.args['sensor_wakeup_datetime']
self.sensor_wakeup_datetime_sensor = self.args['sensor_wakeup_datetime']
self.sleeping_condition = SmartCondition.Evaluator(self, self.args['sleeping_condition'], condition_name="sleeping_condition", constants=self.constants, templates_library=self.templates_library)
self.lock = Lock()
@@ -54,11 +53,8 @@ class AlarmClock(SmartObject):
self.run_hourly(self.on_refresh_cal,datetime.time(0, 0, 0))
self.sensor_wakeup_datetime_entity = self.create_entity("sensor.wakeup_datetime", icon="mdi:alarm")
self.sensor_wakeup_datetime_entity = self.create_entity(self.sensor_wakeup_datetime_sensor, icon="mdi:alarm")
self.workday_entity = self.create_entity(self.output_workday_sensor, icon="mdi:briefcase-check")
#sensor_wakeup_datetime_entity = self.get_entity(self.sensor_wakeup_datetime)
#if not sensor_wakeup_datetime_entity.exists():
# sensor_wakeup_datetime_entity.add()
self.calendar = list()
self.refresh_cal()
@@ -67,16 +63,17 @@ class AlarmClock(SmartObject):
self.update_wakeup_time()
def refresh_cal(self):
new_cal = list()
#if self.load_cal_from_google_calendar(new_cal):
if self.load_cal_from_ics(new_cal):
if not self.are_cal_identical(self.calendar,new_cal):
self.calendar = new_cal
self.log("Calendar has been updated!")
self.print_cal(self.calendar)
return True
with self.log_group("refresh_cal"):
new_cal = list()
#if self.load_cal_from_google_calendar(new_cal):
if self.load_cal_from_ics(new_cal):
if not self.are_cal_identical(self.calendar,new_cal):
self.calendar = new_cal
self.log_info("Calendar has been updated!")
self.print_cal(self.calendar)
return True
return False
return False
def are_cal_identical(self,calendar1,calendar2):
if len(calendar1) != len(calendar2): return False
@@ -89,20 +86,20 @@ class AlarmClock(SmartObject):
def print_cal(self,calendar):
for event in calendar:
self.log(f"{event}")
self.log_info(f"{event}")
def load_cal_from_ics(self,calendar):
calendar.clear()
try:
self.log(f"Retrieving calengar from outlook.office365.com")
self.log_info(f"Retrieving calengar from outlook.office365.com")
r = get("https://outlook.office365.com/owa/calendar/0c64359c70eb41cd9713fe92c470d3df@ubisoft.com/5edb3fb5150f4203b66d9cf8db3184be11626033572842691749/calendar.ics", timeout=10)#, headers=headers, verify=False)
#self.log(f"Processing Calendar")
#self.log_info(f"Processing Calendar")
today = datetime.datetime.combine(datetime.date.today(), datetime.time(0,0, 0))
start_load_date = today - datetime.timedelta(days=1)
end_load_date = today + datetime.timedelta(days=2)
#self.log("[" + str(start_load_date) + "]-[" + str(end_load_date) + "]")
#self.log_info("[" + str(start_load_date) + "]-[" + str(end_load_date) + "]")
calendar_ubi = icalendar.Calendar.from_ical(r.text)
for component in calendar_ubi.walk():
@@ -111,7 +108,7 @@ class AlarmClock(SmartObject):
if event_summary == "Away" or event_summary == "Absent(e)": event_type = EventType.Vacation
elif event_summary == "Busy" or event_summary == "Occupé(e)": event_type = EventType.Busy
elif event_summary == "Tentative" or event_summary == "Provisoire": event_type = EventType.Tentative
elif event_summary == "Working elsewhere" or event_summary == "Free": event_type = EventType.Flex
elif event_summary == "Working elsewhere" or event_summary == "Free" or event_summary == "Disponible": event_type = EventType.Flex
else: event_type = None
start_datetime = component.get('dtstart').dt
@@ -138,16 +135,16 @@ class AlarmClock(SmartObject):
if not outside_of_loading_period:
if event_type:
calendar.append(CalendarEvent(start_datetime,end_datetime,event_type))
else: self.log(f"[Unknow event : {event_summary}]Start at {start_datetime},Finish at {end_datetime}",level = "WARNING")
else: self.log_warning(f"[Unknow event : {event_summary}]Start at {start_datetime},Finish at {end_datetime}")
except ValueError:
self.log_error("Couldn't load calendar")
return False
except (requests.exceptions.ConnectionError,requests.exceptions.ReadTimeout):
self.log("Couldn't load calendar, request Timeout",level = "WARNING")
self.log_warning("Couldn't load calendar, request Timeout")
return False
#self.log(f"Calendar loaded")
#self.log_info(f"Calendar loaded")
return True
def on_alarm_clock_set(self, entity, attribute, old, new, kwargs):
@@ -160,10 +157,11 @@ class AlarmClock(SmartObject):
self.update_wakeup_time()
def update_workday_status(self):
is_workday = self.is_wakeup_time_on_a_working_day(datetime.datetime.now())
new_state = "on" if is_workday else "off"
if self.workday_entity.get_state() != new_state:
self.workday_entity.set_state(state=new_state)
with self.log_group("update_workday_status"):
is_workday = self.is_wakeup_time_on_a_working_day(datetime.datetime.now())
new_state = "on" if is_workday else "off"
if self.workday_entity.get_state() != new_state:
self.workday_entity.set_state(state=new_state)
def on_program_next_wakeup(self, kwargs):
self.handle_program_next_wakueup_cb = None
@@ -172,12 +170,12 @@ class AlarmClock(SmartObject):
#le reveil principal se reactive chaque matin
if self.get_state(self.switch_alarmclock_main) == 'off':
self.log("Turning on main alarm clock")
self.log_info("Turning on main alarm clock")
no_switch_changed = False
self.turn_on(self.switch_alarmclock_main)
#le reveil secondaire ne sonne qu'une fois, il est donc desactivé chaque matin
if self.get_state(self.switch_alarmclock_secondary) == 'on':
self.log("Turning off secondary alarm clock")
self.log_info("Turning off secondary alarm clock")
no_switch_changed = False
self.turn_off(self.switch_alarmclock_secondary)
@@ -196,7 +194,7 @@ class AlarmClock(SmartObject):
wakeup_message = "On se reveil dans " + str(wakeup_in) + " minutes"
self.log(wakeup_message)
self.log_info(wakeup_message)
if self.sleeping_condition.evaluate() == SmartCondition.Result.Succeeded: self.fire_event("WAKEUP_IN", wakeup_in = wakeup_in)
#self.call_service("notify/ios_iphone_de_pierre", title = "Reveil", message = wakeup_message)
@@ -205,7 +203,7 @@ class AlarmClock(SmartObject):
wakeup_message = "WAKE UP!!!! It's " + self.wakeup_time_str
self.log(wakeup_message)
self.log_info(wakeup_message)
if self.sleeping_condition.evaluate() == SmartCondition.Result.Succeeded: self.fire_event("WAKEUP")
#self.call_service("notify/ios_iphone_de_pierre", title = "Reveil", message = wakeup_message)
@@ -248,11 +246,11 @@ class AlarmClock(SmartObject):
wake_up_datetime = busy_event.start_time - datetime.timedelta(minutes=30)
new_wake_up_time = wake_up_datetime.strftime("%H:%M")
self.log(f"A meeting have been found at {busy_event.start_time}, we'll wake up at {new_wake_up_time}")
self.log_info(f"A meeting have been found at {busy_event.start_time}, we'll wake up at {new_wake_up_time}")
return new_wake_up_time
new_wake_up_time = wakeup_datetime.strftime("%H:%M")
#self.log(f"No meeting have been found before {wake_up_time}, we'll wake up at {wake_up_time}")
#self.log_info(f"No meeting have been found before {wake_up_time}, we'll wake up at {wake_up_time}")
return new_wake_up_time
def calculate_wakeup_time(self):
@@ -266,10 +264,10 @@ class AlarmClock(SmartObject):
new_wakeup_time = self.get_state(self.inputdate_alarmclock_main)[0:5]
new_wakeup_datetime = self.generate_wakeup_datetime_from_string(new_wakeup_time)
if not self.is_wakeup_time_on_a_working_day(new_wakeup_datetime):
self.log(f"Primary Wake up time ({new_wakeup_datetime}) is not on a working day")
self.log_info(f"Primary Wake up time ({new_wakeup_datetime}) is not on a working day")
new_wakeup_time = "--:--"
elif self.is_wakeup_time_on_a_flex_day(max_flex_wakeup_datetime):
self.log(f"Flex Wake up time ({max_flex_wakeup_datetime}) is on a flex office day")
self.log_info(f"Flex Wake up time ({max_flex_wakeup_datetime}) is on a flex office day")
new_wakeup_time = self.offset_wakeup_time_for_meeting(max_flex_wakeup_datetime)
else:
new_wakeup_time = self.offset_wakeup_time_for_meeting(new_wakeup_datetime)
@@ -290,15 +288,15 @@ class AlarmClock(SmartObject):
with self.lock:
#first, cancel all previous callbacks
if self.handle_program_next_wakueup_cb:
self.log("Canceling previous program next wakeup cb")
self.log_info("Canceling previous program next wakeup cb")
self.cancel_timer(self.handle_program_next_wakueup_cb)
self.handle_program_next_wakueup_cb = None
if self.handle_prewakueup_cb:
self.log("Canceling previous pre wakeup cb")
self.log_info("Canceling previous pre wakeup cb")
self.cancel_timer(self.handle_prewakueup_cb)
self.handle_prewakueup_cb = None
if self.handle_wakueup_cb:
self.log("Canceling previous wakeup cb")
self.log_info("Canceling previous wakeup cb")
self.cancel_timer(self.handle_wakueup_cb)
self.handle_wakueup_cb = None
@@ -311,7 +309,7 @@ class AlarmClock(SmartObject):
if datetime.datetime.now().hour >= 4:
program_next_wakeup_time = program_next_wakeup_time + datetime.timedelta(days=1)
self.log("program next wakeup cb registered for " + str(program_next_wakeup_time))
self.log_info("program next wakeup cb registered for " + str(program_next_wakeup_time))
self.handle_program_next_wakueup_cb = self.run_at(self.on_program_next_wakeup, program_next_wakeup_time)
self.sensor_wakeup_datetime_entity.set_state(state = 'unavailable')
else:
@@ -326,17 +324,18 @@ class AlarmClock(SmartObject):
prewakeup_datetime = wakeup_datetime - datetime.timedelta(minutes=prewakeup_offset)
self.handle_prewakueup_cb = self.run_at(self.on_pre_wakeup, prewakeup_datetime,wakeup_in = prewakeup_offset)
self.log("prewakup cb registered for " + str(prewakeup_datetime))
self.log_info("prewakup cb registered for " + str(prewakeup_datetime))
self.handle_wakueup_cb = self.run_at(self.on_wakeup, wakeup_datetime)
self.log("wakeup cb registered for " + str(wakeup_datetime))
self.log_info("wakeup cb registered for " + str(wakeup_datetime))
self.handle_program_next_wakueup_cb = self.run_at(self.on_program_next_wakeup, program_next_wakeup_datetime)
self.log("program next wakeup cb registered for " + str(program_next_wakeup_datetime))
self.log_info("program next wakeup cb registered for " + str(program_next_wakeup_datetime))
self.wakeup_time_str = wakeup_time_str
self.call_service("input_text/set_value", entity_id = self.input_text_wakeup_time, value = self.wakeup_time_str)
#self.call_service("input_text/set_value", entity_id = self.input_text_wakeup_time, value = self.wakeup_time_str)
def update_wakeup_time(self):
self.register_callbacks(self.calculate_wakeup_time())
def update_wakeup_time(self):
with self.log_group("update_wakeup_time"):
self.register_callbacks(self.calculate_wakeup_time())
+1 -1
View File
@@ -181,7 +181,7 @@ alarm_clock:
switch_alarmclock_secondary: input_boolean.secondary_alarmclock
inputdate_alarmclock_main: input_datetime.main_alarmclock
inputdate_alarmclock_secondary: input_datetime.secondary_alarmclock
input_text_wakeup_time: input_text.wakeup_time
sensor_wakeup_datetime: sensor.wakeup_datetime
output_workday_sensor: binary_sensor.pierre_workday
sleeping_condition: binary_sensor.is_bedroom_sleeping