Hello,
ci-dessous le code de l’app et ma config appdaemon
2023-06-02 19:46:22.910604 INFO pool_pump_manager: Initialized
2023-06-02 19:46:22.919178 CRITICAL pool_pump_manager: Entity defined in 'pump_sensor_id' configuration don't exist. Please update your configuration !
2023-06-02 19:46:22.924212 INFO pool_pump_manager: Error in configuration. Stopping app waiting configuration correction
2023-06-02 19:46:22.927094 DEBUG pool_pump_manager: call_service: app/stop, {'app': 'pool_pump_manager', 'namespace': 'admin', '__name': 'pool_pump_manager'}
2023-06-02 20:22:45.660484 INFO pool_pump_manager: Initialized
2023-06-02 20:22:45.675961 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-02 20:22:45.737805 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-02 20:22:45.746759 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-02 20:22:45.751525 INFO pool_pump_manager: INIT - Pool is in mode Standard
2023-06-02 20:22:45.754449 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-02 20:22:45.758745 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-02 20:22:45.767421 DEBUG pool_pump_manager: Registering run_every starting 2023-06-03 06:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-02 20:22:45.776034 INFO pool_pump_manager: Generate a daily task at 06:00:00 for slot1 start
2023-06-02 20:22:45.779353 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-02 20:22:45.785738 DEBUG pool_pump_manager: Registering run_every starting 2023-06-03 14:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-02 20:22:45.794868 INFO pool_pump_manager: Generate a daily task at 14:00:00 for slot2 start
2023-06-02 20:22:45.797459 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-02 20:22:45.801771 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-02 20:22:45.804621 DEBUG pool_pump_manager: Registering run_at at 2023-06-02 00:00:00+02:00 for pool_pump_manager
2023-06-02 20:22:45.811483 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-02 20:22:45.816809 INFO pool_pump_manager: INIT - Based on slot1 end time in input_datetime.pool_stop_slot1, we create a task with handler 3515d0ff3796433296d22ab0d6f5dde1 at 00:00:00
2023-06-02 20:22:45.819558 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-02 20:22:45.824834 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-02 20:22:45.827736 DEBUG pool_pump_manager: Registering run_at at 2023-06-02 00:00:00+02:00 for pool_pump_manager
2023-06-02 20:22:45.834453 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-02 20:22:45.839907 INFO pool_pump_manager: INIT - Based on slot2 end time in input_datetime.pool_stop_slot2, we create a task with handler 5108a884a08547b489409f2ed6763c4e at 00:00:00
2023-06-02 20:22:45.845484 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot1, {'duration': 1, 'slot': 1} from pool_pump_manager
2023-06-02 20:22:45.851943 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot2, {'duration': 1, 'slot': 2} from pool_pump_manager
2023-06-02 20:22:45.857296 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_mode, {'duration': 1} from pool_pump_manager
2023-06-02 20:22:45.862473 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_boost, {} from pool_pump_manager
2023-06-02 20:22:45.866789 DEBUG pool_pump_manager: Calling listen_event for pool_pump_manager
2023-06-02 20:22:45.877247 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-03 00:00:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=1 message=Slot1 Automation
2023-06-02 20:22:45.883115 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-03 00:00:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=2 message=Slot2 Automation
2023-06-02 20:22:45.889134 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-03 06:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=1
2023-06-02 20:22:45.894838 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-03 14:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=2
2023-06-02 20:23:08.461818 INFO pool_pump_manager: Change in boost trigger detected : 1H (Old: Aucun)
2023-06-02 20:23:08.465355 DEBUG pool_pump_manager: call_service: timer/start, {'entity_id': 'timer.pool_boost', 'duration': '01:00:00'}
2023-06-02 20:23:08.475109 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-02 20:23:08.487456 INFO pool_pump_manager: Starting Pump - Boost 1H
2023-06-02 20:23:08.493244 DEBUG pool_pump_manager: call_service: homeassistant/turn_on, {'entity_id': 'switch.pool_switch'}
2023-06-02 20:23:10.450576 INFO pool_pump_manager: Change in boost trigger detected : 4H (Old: 1H)
2023-06-02 20:23:10.454372 DEBUG pool_pump_manager: call_service: timer/start, {'entity_id': 'timer.pool_boost', 'duration': '04:00:00'}
2023-06-02 20:23:10.462499 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-02 20:23:10.475733 INFO pool_pump_manager: Boost 4H - Pump is already On !
2023-06-02 20:23:19.325828 INFO pool_pump_manager: Change in boost trigger detected : Aucun (Old: 4H)
2023-06-02 20:23:19.328698 DEBUG pool_pump_manager: call_service: timer/cancel, {'entity_id': 'timer.pool_boost'}
2023-06-02 20:23:19.336617 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-02 20:23:19.341572 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-02 20:23:19.354854 INFO pool_pump_manager: As boost change from mode 4H to Aucun during normal filtration time, pump stopping is canceled
2023-06-02 20:37:15.427046 INFO pool_pump_manager: Change detected in input_datetime.pool_start_slot2 time - old value 14:00:00 / new value : 21:00:00
2023-06-02 20:37:15.431911 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-02 20:37:15.438597 DEBUG pool_pump_manager: Registering run_every starting 2023-06-02 21:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-02 20:37:15.448049 INFO pool_pump_manager: Generate a daily task at 21:00:00 for slot2 start
2023-06-02 20:37:15.454228 INFO pool_pump_manager: Generate a new task with handler 16c922577179496d9e4bcdf60385e653 for slot2 - at 21:00:00
2023-06-02 20:37:15.457874 DEBUG pool_pump_manager: Canceling timer with handle 21c1e3dc51644d778795a2b748752f68 for pool_pump_manager
2023-06-02 20:37:15.465596 DEBUG pool_pump_manager: New handler 16c922577179496d9e4bcdf60385e653 stored for slot2
2023-06-02 20:37:19.684072 INFO pool_pump_manager: Change detected in input_datetime.pool_start_slot2 time - old value 21:00:00 / new value : 20:00:00
2023-06-02 20:37:19.688176 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-02 20:37:19.694505 DEBUG pool_pump_manager: Registering run_every starting 2023-06-03 20:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-02 20:37:19.703801 INFO pool_pump_manager: Generate a daily task at 20:00:00 for slot2 start
2023-06-02 20:37:19.710036 INFO pool_pump_manager: Generate a new task with handler 04a94eb75dce4f828763a9b18eedfddc for slot2 - at 20:00:00
2023-06-02 20:37:19.713448 DEBUG pool_pump_manager: Canceling timer with handle 16c922577179496d9e4bcdf60385e653 for pool_pump_manager
2023-06-02 20:37:19.720724 DEBUG pool_pump_manager: New handler 04a94eb75dce4f828763a9b18eedfddc stored for slot2
2023-06-02 20:37:23.048443 INFO pool_pump_manager: Change detected in input_datetime.pool_start_slot2 time - old value 20:00:00 / new value : 20:38:00
2023-06-02 20:37:23.052945 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-02 20:37:23.059125 DEBUG pool_pump_manager: Registering run_every starting 2023-06-02 20:38:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-02 20:37:23.069843 INFO pool_pump_manager: Generate a daily task at 20:38:00 for slot2 start
2023-06-02 20:37:23.076507 INFO pool_pump_manager: Generate a new task with handler a326d716435f487a9fbba7fa0f9f2a98 for slot2 - at 20:38:00
2023-06-02 20:37:23.080660 DEBUG pool_pump_manager: Canceling timer with handle 04a94eb75dce4f828763a9b18eedfddc for pool_pump_manager
2023-06-02 20:37:23.089165 DEBUG pool_pump_manager: New handler a326d716435f487a9fbba7fa0f9f2a98 stored for slot2
2023-06-02 20:38:00.016106 DEBUG pool_pump_manager: get state: sensor.temps_de_filtration_ecoule, {} from pool_pump_manager
2023-06-02 20:38:00.019242 DEBUG pool_pump_manager: get state: sensor.recommandation_duree_de_filtration_sonde_piscine, {} from pool_pump_manager
2023-06-02 20:38:00.023388 DEBUG pool_pump_manager: call_service: input_number/set_value, {'value': 390, 'entity_id': 'input_number.filtration_duration_calculated'}
2023-06-02 20:38:00.031814 DEBUG pool_pump_manager: get state: sensor.recommandation_duree_de_filtration_sonde_piscine, {} from pool_pump_manager
2023-06-02 20:38:00.042907 INFO pool_pump_manager: Based on configuration, filtration duration is 390 minutes (iopool recommandation is 390 minutes)
2023-06-02 20:38:00.050738 INFO pool_pump_manager: Slot2 - Elapsed time of filtration : 12 minutes / Remaining time : 378 minutes
2023-06-02 20:38:00.054799 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-02 20:38:00.059522 DEBUG pool_pump_manager: set state: input_datetime.pool_stop_slot2, {'state': '02:56:00'} from pool_pump_manager
2023-06-02 20:38:00.914059 INFO pool_pump_manager: Slot2 Filtration times - Start : 20:38:00 / End : 02:56:00
2023-06-02 20:38:00.917636 DEBUG pool_pump_manager: Checking timer with handle 5108a884a08547b489409f2ed6763c4e for pool_pump_manager
2023-06-02 20:38:00.920671 DEBUG pool_pump_manager: Canceling timer with handle 5108a884a08547b489409f2ed6763c4e for pool_pump_manager
2023-06-02 20:38:00.928820 INFO pool_pump_manager: Cancel existing timer for slot2 with handler 5108a884a08547b489409f2ed6763c4e
2023-06-02 20:38:00.932998 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-02 20:38:00.941382 INFO pool_pump_manager: Starting Pump - Pump starting for slot 2
2023-06-02 20:38:00.946228 DEBUG pool_pump_manager: call_service: homeassistant/turn_on, {'entity_id': 'switch.pool_switch'}
2023-06-02 20:38:00.956446 DEBUG pool_pump_manager: Registering run_at at 2023-06-02 02:56:00+02:00 for pool_pump_manager
2023-06-02 20:38:00.967737 INFO pool_pump_manager: Create new timer for slot2 with handler 28c303d367534f688ee3f56a695dcc7b
2023-06-03 00:00:00.024175 DEBUG pool_pump_manager: get state: timer.pool_boost, {} from pool_pump_manager
2023-06-03 00:00:00.028487 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-03 00:00:00.034364 INFO pool_pump_manager: Stopping Pump - Slot1 Automation
2023-06-03 00:00:00.040732 DEBUG pool_pump_manager: call_service: homeassistant/turn_off, {'entity_id': 'switch.pool_switch'}
2023-06-03 02:56:00.026505 DEBUG pool_pump_manager: get state: timer.pool_boost, {} from pool_pump_manager
2023-06-03 02:56:00.029458 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-03 02:56:00.034716 INFO pool_pump_manager: Stopping Pump - Slot2 Automation
2023-06-03 02:56:00.038888 DEBUG pool_pump_manager: call_service: homeassistant/turn_off, {'entity_id': 'switch.pool_switch'}
2023-06-03 02:56:00.047113 DEBUG pool_pump_manager: get state: sensor.recommandation_duree_de_filtration_sonde_piscine, {} from pool_pump_manager
2023-06-03 02:56:00.054790 DEBUG pool_pump_manager: call_service: input_number/set_value, {'value': 390, 'entity_id': 'input_number.filtration_duration_calculated'}
2023-06-03 02:56:00.067146 DEBUG pool_pump_manager: get state: sensor.recommandation_duree_de_filtration_sonde_piscine, {} from pool_pump_manager
2023-06-03 02:56:00.086876 INFO pool_pump_manager: Based on configuration, filtration duration is 390 minutes (iopool recommandation is 390 minutes)
2023-06-03 02:56:00.092941 DEBUG pool_pump_manager: get state: sensor.temps_de_filtration_ecoule, {} from pool_pump_manager
2023-06-03 02:56:00.101478 DEBUG pool_pump_manager: get state: timer.pool_boost, {} from pool_pump_manager
2023-06-03 06:00:00.027302 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-03 06:00:00.033215 INFO pool_pump_manager: Pump starting for slot 1 - Pump is already On !
2023-06-03 06:00:00.036613 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 06:00:00.040136 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 06:00:00.043257 DEBUG pool_pump_manager: get state: sensor.recommandation_duree_de_filtration_sonde_piscine, {} from pool_pump_manager
2023-06-03 06:00:00.047086 DEBUG pool_pump_manager: call_service: input_number/set_value, {'value': 390, 'entity_id': 'input_number.filtration_duration_calculated'}
2023-06-03 06:00:00.055139 DEBUG pool_pump_manager: get state: sensor.recommandation_duree_de_filtration_sonde_piscine, {} from pool_pump_manager
2023-06-03 06:00:00.065087 INFO pool_pump_manager: Based on configuration, filtration duration is 390 minutes (iopool recommandation is 390 minutes)
2023-06-03 06:00:00.078474 DEBUG pool_pump_manager: Duration Between slots : 878 minutes / Filtration Duration : 156 (minutes)
2023-06-03 06:00:00.080914 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 06:00:00.084601 DEBUG pool_pump_manager: set state: input_datetime.pool_stop_slot1, {'state': '08:36:00'} from pool_pump_manager
2023-06-03 06:00:00.117766 INFO pool_pump_manager: Slot1 Filtration times - Start : 06:00:00 / End : 08:36:00
2023-06-03 06:00:00.121046 DEBUG pool_pump_manager: Checking timer with handle 3515d0ff3796433296d22ab0d6f5dde1 for pool_pump_manager
2023-06-03 06:00:00.123922 DEBUG pool_pump_manager: Registering run_at at 2023-06-03 08:36:00+02:00 for pool_pump_manager
2023-06-03 06:00:00.134572 INFO pool_pump_manager: Create new timer for slot1 with handler f22e862e85b84498acf160944e55ec7d
2023-06-03 08:36:00.016981 DEBUG pool_pump_manager: get state: timer.pool_boost, {} from pool_pump_manager
2023-06-03 08:36:00.019756 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-03 08:36:00.025062 INFO pool_pump_manager: Stopping Pump - Slot1 Automation
2023-06-03 08:36:00.030156 DEBUG pool_pump_manager: call_service: homeassistant/turn_off, {'entity_id': 'switch.pool_switch'}
2023-06-03 16:59:30.644989 INFO pool_pump_manager: New mode detected : Active (Old: Standard)
2023-06-03 16:59:30.649930 DEBUG pool_pump_manager: call_service: app/restart, {'app': 'pool_pump_manager', 'namespace': 'admin', '__name': 'pool_pump_manager'}
2023-06-03 16:59:30.691598 INFO pool_pump_manager: Initialized
2023-06-03 16:59:30.708694 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 16:59:30.712598 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 16:59:30.718761 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 16:59:30.724686 INFO pool_pump_manager: INIT - Pool is in mode Active
2023-06-03 16:59:30.727892 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 16:59:30.730827 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 16:59:30.739460 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 02:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 16:59:30.746373 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 04:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 16:59:30.752241 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_mode, {'duration': 1} from pool_pump_manager
2023-06-03 16:59:30.756463 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_boost, {} from pool_pump_manager
2023-06-03 16:59:30.759325 DEBUG pool_pump_manager: Calling listen_event for pool_pump_manager
2023-06-03 16:59:30.768142 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 02:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_start_filtration / kwargs : interval=86400 message=Active Winter
2023-06-03 16:59:30.773597 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 04:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_stop_filtration / kwargs : interval=86400 message=Active Winter
2023-06-03 16:59:33.287560 INFO pool_pump_manager: New mode detected : Standard (Old: Active)
2023-06-03 16:59:33.290513 DEBUG pool_pump_manager: call_service: app/restart, {'app': 'pool_pump_manager', 'namespace': 'admin', '__name': 'pool_pump_manager'}
2023-06-03 16:59:33.322892 INFO pool_pump_manager: Initialized
2023-06-03 16:59:33.332818 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 16:59:33.336106 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 16:59:33.341117 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 16:59:33.346050 INFO pool_pump_manager: INIT - Pool is in mode Standard
2023-06-03 16:59:33.349215 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 16:59:33.352536 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 16:59:33.357920 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 06:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 16:59:33.365708 INFO pool_pump_manager: Generate a daily task at 06:00:00 for slot1 start
2023-06-03 16:59:33.368660 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 16:59:33.373684 DEBUG pool_pump_manager: Registering run_every starting 2023-06-03 20:38:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 16:59:33.381612 INFO pool_pump_manager: Generate a daily task at 20:38:00 for slot2 start
2023-06-03 16:59:33.384209 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-03 16:59:33.389899 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-03 16:59:33.392843 DEBUG pool_pump_manager: Registering run_at at 2023-06-03 08:36:00+02:00 for pool_pump_manager
2023-06-03 16:59:33.397845 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-03 16:59:33.403510 INFO pool_pump_manager: INIT - Based on slot1 end time in input_datetime.pool_stop_slot1, we create a task with handler d917c994b10c4fe9ab7b191206ab4dcc at 08:36:00
2023-06-03 16:59:33.406184 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-03 16:59:33.408943 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-03 16:59:33.411722 DEBUG pool_pump_manager: Registering run_at at 2023-06-03 02:56:00+02:00 for pool_pump_manager
2023-06-03 16:59:33.418206 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-03 16:59:33.425770 INFO pool_pump_manager: INIT - Based on slot2 end time in input_datetime.pool_stop_slot2, we create a task with handler 74af97cbcf7f4a99bc16aa04e82f5c56 at 02:56:00
2023-06-03 16:59:33.429735 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot1, {'duration': 1, 'slot': 1} from pool_pump_manager
2023-06-03 16:59:33.433772 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot2, {'duration': 1, 'slot': 2} from pool_pump_manager
2023-06-03 16:59:33.438038 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_mode, {'duration': 1} from pool_pump_manager
2023-06-03 16:59:33.442163 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_boost, {} from pool_pump_manager
2023-06-03 16:59:33.445545 DEBUG pool_pump_manager: Calling listen_event for pool_pump_manager
2023-06-03 16:59:33.453846 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-03 20:38:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=2
2023-06-03 16:59:33.460154 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 02:56:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=2 message=Slot2 Automation
2023-06-03 16:59:33.466524 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 06:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=1
2023-06-03 16:59:33.475364 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 08:36:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=1 message=Slot1 Automation
2023-06-03 17:08:01.587926 INFO pool_pump_manager: New mode detected : Passive (Old: Standard)
2023-06-03 17:08:01.590715 DEBUG pool_pump_manager: call_service: app/restart, {'app': 'pool_pump_manager', 'namespace': 'admin', '__name': 'pool_pump_manager'}
2023-06-03 17:08:01.621998 INFO pool_pump_manager: Initialized
2023-06-03 17:08:01.633473 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 17:08:01.636735 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 17:08:01.640891 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 17:08:01.646137 INFO pool_pump_manager: INIT - Pool is in mode Passive
2023-06-03 17:08:01.649340 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 17:08:01.652185 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 17:08:01.655684 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_mode, {'duration': 1} from pool_pump_manager
2023-06-03 17:08:01.659949 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_boost, {} from pool_pump_manager
2023-06-03 17:08:01.662876 DEBUG pool_pump_manager: Calling listen_event for pool_pump_manager
2023-06-03 17:08:11.517916 INFO pool_pump_manager: New mode detected : Standard (Old: Passive)
2023-06-03 17:08:11.521115 DEBUG pool_pump_manager: call_service: app/restart, {'app': 'pool_pump_manager', 'namespace': 'admin', '__name': 'pool_pump_manager'}
2023-06-03 17:08:11.552844 INFO pool_pump_manager: Initialized
2023-06-03 17:08:11.562826 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 17:08:11.566181 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 17:08:11.571161 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 17:08:11.576200 INFO pool_pump_manager: INIT - Pool is in mode Standard
2023-06-03 17:08:11.579161 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 17:08:11.582089 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 17:08:11.587656 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 06:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 17:08:11.595230 INFO pool_pump_manager: Generate a daily task at 06:00:00 for slot1 start
2023-06-03 17:08:11.598156 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 17:08:11.603162 DEBUG pool_pump_manager: Registering run_every starting 2023-06-03 20:38:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 17:08:11.611938 INFO pool_pump_manager: Generate a daily task at 20:38:00 for slot2 start
2023-06-03 17:08:11.615304 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-03 17:08:11.619118 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-03 17:08:11.622079 DEBUG pool_pump_manager: Registering run_at at 2023-06-03 08:36:00+02:00 for pool_pump_manager
2023-06-03 17:08:11.627663 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-03 17:08:11.632985 INFO pool_pump_manager: INIT - Based on slot1 end time in input_datetime.pool_stop_slot1, we create a task with handler e249d4a37c524284a6faa5d20ef20e27 at 08:36:00
2023-06-03 17:08:11.635683 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-03 17:08:11.638809 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-03 17:08:11.641744 DEBUG pool_pump_manager: Registering run_at at 2023-06-03 02:56:00+02:00 for pool_pump_manager
2023-06-03 17:08:11.647326 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-03 17:08:11.652409 INFO pool_pump_manager: INIT - Based on slot2 end time in input_datetime.pool_stop_slot2, we create a task with handler 583cd3d346e646679973f29ce7dff9c0 at 02:56:00
2023-06-03 17:08:11.655957 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot1, {'duration': 1, 'slot': 1} from pool_pump_manager
2023-06-03 17:08:11.660693 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot2, {'duration': 1, 'slot': 2} from pool_pump_manager
2023-06-03 17:08:11.665339 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_mode, {'duration': 1} from pool_pump_manager
2023-06-03 17:08:11.669178 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_boost, {} from pool_pump_manager
2023-06-03 17:08:11.671759 DEBUG pool_pump_manager: Calling listen_event for pool_pump_manager
2023-06-03 17:08:11.680099 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-03 20:38:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=2
2023-06-03 17:08:11.685434 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 02:56:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=2 message=Slot2 Automation
2023-06-03 17:08:11.690799 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 06:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=1
2023-06-03 17:08:11.695962 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 08:36:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=1 message=Slot1 Automation
2023-06-03 17:13:00.159239 INFO pool_pump_manager: Change in boost trigger detected : 1H (Old: Aucun)
2023-06-03 17:13:00.162804 DEBUG pool_pump_manager: call_service: timer/start, {'entity_id': 'timer.pool_boost', 'duration': '01:00:00'}
2023-06-03 17:13:00.172844 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-03 17:13:00.182994 INFO pool_pump_manager: Boost 1H - Pump is already On !
2023-06-03 17:14:35.336449 INFO pool_pump_manager: Change in boost trigger detected : Aucun (Old: 1H)
2023-06-03 17:14:35.339869 DEBUG pool_pump_manager: call_service: timer/cancel, {'entity_id': 'timer.pool_boost'}
2023-06-03 17:14:35.346878 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 17:14:35.352455 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-03 17:14:35.358603 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 17:14:35.364891 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-03 17:14:35.377198 DEBUG pool_pump_manager: get state: timer.pool_boost, {} from pool_pump_manager
2023-06-03 17:14:35.383934 DEBUG pool_pump_manager: get state: input_select.pool_boost, {} from pool_pump_manager
2023-06-03 17:14:35.390725 INFO pool_pump_manager: Boost is in progress (Aucun). Pump stopping is canceled.
2023-06-03 17:14:35.397117 INFO pool_pump_manager: Boost mode change from 1H to Aucun. Stopping filtration
2023-06-03 17:15:46.060083 INFO pool_pump_manager: Change detected in input_datetime.pool_start_slot1 time - old value 06:00:00 / new value : 08:00:00
2023-06-03 17:15:46.063138 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 17:15:46.068065 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 08:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 17:15:46.076178 INFO pool_pump_manager: Generate a daily task at 08:00:00 for slot1 start
2023-06-03 17:15:46.082097 INFO pool_pump_manager: Generate a new task with handler 9032560281c64a749dbdf1560d4e0db8 for slot1 - at 08:00:00
2023-06-03 17:15:46.085368 DEBUG pool_pump_manager: Canceling timer with handle 1383ff7a03b84fb8858b50e2edf7d59d for pool_pump_manager
2023-06-03 17:15:46.092852 DEBUG pool_pump_manager: New handler 9032560281c64a749dbdf1560d4e0db8 stored for slot1
2023-06-03 17:15:58.726556 INFO pool_pump_manager: Change detected in input_datetime.pool_start_slot2 time - old value 20:38:00 / new value : 14:38:00
2023-06-03 17:15:58.729960 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 17:15:58.734723 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 14:38:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 17:15:58.742734 INFO pool_pump_manager: Generate a daily task at 14:38:00 for slot2 start
2023-06-03 17:15:58.747638 INFO pool_pump_manager: Generate a new task with handler 3348319c7d0542ae9adc604e7d9767de for slot2 - at 14:38:00
2023-06-03 17:15:58.750486 DEBUG pool_pump_manager: Canceling timer with handle a362543537384ce7990f1c88df477704 for pool_pump_manager
2023-06-03 17:15:58.756059 DEBUG pool_pump_manager: New handler 3348319c7d0542ae9adc604e7d9767de stored for slot2
2023-06-03 17:16:00.705292 INFO pool_pump_manager: Change detected in input_datetime.pool_start_slot2 time - old value 14:38:00 / new value : 14:00:00
2023-06-03 17:16:00.708603 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 17:16:00.713885 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 14:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 17:16:00.722838 INFO pool_pump_manager: Generate a daily task at 14:00:00 for slot2 start
2023-06-03 17:16:00.727747 INFO pool_pump_manager: Generate a new task with handler a32e5642b479418c863e1f23ce422bdf for slot2 - at 14:00:00
2023-06-03 17:16:00.730585 DEBUG pool_pump_manager: Canceling timer with handle 3348319c7d0542ae9adc604e7d9767de for pool_pump_manager
2023-06-03 17:16:00.736459 DEBUG pool_pump_manager: New handler a32e5642b479418c863e1f23ce422bdf stored for slot2
2023-06-03 17:25:15.869015 INFO pool_pump_manager: New mode detected : Passive (Old: Standard)
2023-06-03 17:25:15.872052 DEBUG pool_pump_manager: call_service: app/restart, {'app': 'pool_pump_manager', 'namespace': 'admin', '__name': 'pool_pump_manager'}
2023-06-03 17:25:15.927091 INFO pool_pump_manager: Initialized
2023-06-03 17:25:15.939181 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 17:25:15.942740 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 17:25:15.947006 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 17:25:15.951855 INFO pool_pump_manager: INIT - Pool is in mode Passive
2023-06-03 17:25:15.955525 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 17:25:15.960952 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 17:25:15.965836 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_mode, {'duration': 1} from pool_pump_manager
2023-06-03 17:25:15.972826 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_boost, {} from pool_pump_manager
2023-06-03 17:25:15.977205 DEBUG pool_pump_manager: Calling listen_event for pool_pump_manager
2023-06-03 17:25:54.777130 INFO pool_pump_manager: New mode detected : Standard (Old: Passive)
2023-06-03 17:25:54.779700 DEBUG pool_pump_manager: call_service: app/restart, {'app': 'pool_pump_manager', 'namespace': 'admin', '__name': 'pool_pump_manager'}
2023-06-03 17:25:54.809784 INFO pool_pump_manager: Initialized
2023-06-03 17:25:54.820322 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 17:25:54.823732 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 17:25:54.828170 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 17:25:54.833014 INFO pool_pump_manager: INIT - Pool is in mode Standard
2023-06-03 17:25:54.836217 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 17:25:54.839388 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 17:25:54.844929 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 08:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 17:25:54.851935 INFO pool_pump_manager: Generate a daily task at 08:00:00 for slot1 start
2023-06-03 17:25:54.854704 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 17:25:54.859927 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 14:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 17:25:54.868688 INFO pool_pump_manager: Generate a daily task at 14:00:00 for slot2 start
2023-06-03 17:25:54.871500 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-03 17:25:54.874235 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-03 17:25:54.877043 DEBUG pool_pump_manager: Registering run_at at 2023-06-03 08:36:00+02:00 for pool_pump_manager
2023-06-03 17:25:54.882375 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-03 17:25:54.888102 INFO pool_pump_manager: INIT - Based on slot1 end time in input_datetime.pool_stop_slot1, we create a task with handler 4fb4cef4249c4065a80483da0f34d50c at 08:36:00
2023-06-03 17:25:54.891188 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-03 17:25:54.894298 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-03 17:25:54.897187 DEBUG pool_pump_manager: Registering run_at at 2023-06-03 02:56:00+02:00 for pool_pump_manager
2023-06-03 17:25:54.902920 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-03 17:25:54.908506 INFO pool_pump_manager: INIT - Based on slot2 end time in input_datetime.pool_stop_slot2, we create a task with handler a56948be84df4ee2a91bf5f0b170606d at 02:56:00
2023-06-03 17:25:54.912443 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot1, {'duration': 1, 'slot': 1} from pool_pump_manager
2023-06-03 17:25:54.917428 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot2, {'duration': 1, 'slot': 2} from pool_pump_manager
2023-06-03 17:25:54.921751 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_mode, {'duration': 1} from pool_pump_manager
2023-06-03 17:25:54.926660 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_boost, {} from pool_pump_manager
2023-06-03 17:25:54.929590 DEBUG pool_pump_manager: Calling listen_event for pool_pump_manager
2023-06-03 17:25:54.937968 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 02:56:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=2 message=Slot2 Automation
2023-06-03 17:25:54.943512 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 08:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=1
2023-06-03 17:25:54.951824 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 08:36:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=1 message=Slot1 Automation
2023-06-03 17:25:54.957432 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 14:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=2
2023-06-03 17:42:17.967295 INFO pool_pump_manager: Initialized
2023-06-03 17:42:17.995815 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 17:42:18.101966 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 17:42:18.112069 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 17:42:18.123602 INFO pool_pump_manager: INIT - Pool is in mode Standard
2023-06-03 17:42:18.130538 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 17:42:18.136302 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 17:42:18.171972 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 08:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 17:42:18.188618 INFO pool_pump_manager: Generate a daily task at 08:00:00 for slot1 start
2023-06-03 17:42:18.194810 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 17:42:18.205943 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 14:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 17:42:18.224851 INFO pool_pump_manager: Generate a daily task at 14:00:00 for slot2 start
2023-06-03 17:42:18.231137 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-03 17:42:18.237216 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-03 17:42:18.243079 DEBUG pool_pump_manager: Registering run_at at 2023-06-03 08:36:00+02:00 for pool_pump_manager
2023-06-03 17:42:18.254727 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-03 17:42:18.270006 INFO pool_pump_manager: INIT - Based on slot1 end time in input_datetime.pool_stop_slot1, we create a task with handler c0c65dc126994ad28551e22e44e5ad03 at 08:36:00
2023-06-03 17:42:18.275558 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-03 17:42:18.281046 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-03 17:42:18.287633 DEBUG pool_pump_manager: Registering run_at at 2023-06-03 02:56:00+02:00 for pool_pump_manager
2023-06-03 17:42:18.299017 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-03 17:42:18.312121 INFO pool_pump_manager: INIT - Based on slot2 end time in input_datetime.pool_stop_slot2, we create a task with handler 9179e6a285824a04a07b405e31a8f034 at 02:56:00
2023-06-03 17:42:18.320251 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot1, {'duration': 1, 'slot': 1} from pool_pump_manager
2023-06-03 17:42:18.330007 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot2, {'duration': 1, 'slot': 2} from pool_pump_manager
2023-06-03 17:42:18.340067 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_mode, {'duration': 1} from pool_pump_manager
2023-06-03 17:42:18.349047 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_boost, {} from pool_pump_manager
2023-06-03 17:42:18.356034 DEBUG pool_pump_manager: Calling listen_event for pool_pump_manager
2023-06-03 17:42:18.377191 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 02:56:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=2 message=Slot2 Automation
2023-06-03 17:42:18.390981 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 08:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=1
2023-06-03 17:42:18.403965 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 08:36:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=1 message=Slot1 Automation
2023-06-03 17:42:18.417130 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 14:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=2
2023-06-03 19:19:02.555604 INFO pool_pump_manager: Change detected in input_datetime.pool_start_slot2 time - old value 14:00:00 / new value : 20:00:00
2023-06-03 19:19:02.561457 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 19:19:02.566727 DEBUG pool_pump_manager: Registering run_every starting 2023-06-03 20:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 19:19:02.574328 INFO pool_pump_manager: Generate a daily task at 20:00:00 for slot2 start
2023-06-03 19:19:02.578924 INFO pool_pump_manager: Generate a new task with handler 3cdc74a421264391a115b3cb926464c8 for slot2 - at 20:00:00
2023-06-03 19:19:02.581750 DEBUG pool_pump_manager: Canceling timer with handle 972e874c7c664daa87e4cd529f7fc80a for pool_pump_manager
2023-06-03 19:19:02.587349 DEBUG pool_pump_manager: New handler 3cdc74a421264391a115b3cb926464c8 stored for slot2
2023-06-03 20:00:00.019176 DEBUG pool_pump_manager: get state: sensor.temps_de_filtration_ecoule, {} from pool_pump_manager
2023-06-03 20:00:00.022524 DEBUG pool_pump_manager: get state: sensor.recommandation_duree_de_filtration_sonde_piscine, {} from pool_pump_manager
2023-06-03 20:00:00.025987 DEBUG pool_pump_manager: call_service: input_number/set_value, {'value': 390, 'entity_id': 'input_number.filtration_duration_calculated'}
2023-06-03 20:00:00.035369 DEBUG pool_pump_manager: get state: sensor.recommandation_duree_de_filtration_sonde_piscine, {} from pool_pump_manager
2023-06-03 20:00:00.050776 INFO pool_pump_manager: Based on configuration, filtration duration is 390 minutes (iopool recommandation is 390 minutes)
2023-06-03 20:00:00.060879 INFO pool_pump_manager: Slot2 - Elapsed time of filtration : 1200 minutes / Remaining time : -810 minutes
2023-06-03 20:00:00.067477 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 20:00:00.072127 DEBUG pool_pump_manager: set state: input_datetime.pool_stop_slot2, {'state': '06:30:00'} from pool_pump_manager
2023-06-03 20:00:00.105276 INFO pool_pump_manager: Slot2 Filtration times - Start : 20:00:00 / End : 06:30:00
2023-06-03 20:00:00.108286 DEBUG pool_pump_manager: Checking timer with handle 9179e6a285824a04a07b405e31a8f034 for pool_pump_manager
2023-06-03 20:00:00.111242 DEBUG pool_pump_manager: Canceling timer with handle 9179e6a285824a04a07b405e31a8f034 for pool_pump_manager
2023-06-03 20:00:00.119566 INFO pool_pump_manager: Cancel existing timer for slot2 with handler 9179e6a285824a04a07b405e31a8f034
2023-06-03 20:00:00.127822 INFO pool_pump_manager: There is no more filtration time left to do
2023-06-03 21:34:14.685004 INFO pool_pump_manager: New mode detected : Active (Old: Standard)
2023-06-03 21:34:14.688281 DEBUG pool_pump_manager: call_service: app/restart, {'app': 'pool_pump_manager', 'namespace': 'admin', '__name': 'pool_pump_manager'}
2023-06-03 21:34:14.723556 INFO pool_pump_manager: Initialized
2023-06-03 21:34:14.735159 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 21:34:14.738711 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 21:34:14.742832 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 21:34:14.747955 INFO pool_pump_manager: INIT - Pool is in mode Active
2023-06-03 21:34:14.751350 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 21:34:14.754684 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 21:34:14.760556 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 02:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 21:34:14.767238 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 04:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 21:34:14.772536 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_mode, {'duration': 1} from pool_pump_manager
2023-06-03 21:34:14.776369 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_boost, {} from pool_pump_manager
2023-06-03 21:34:14.779321 DEBUG pool_pump_manager: Calling listen_event for pool_pump_manager
2023-06-03 21:34:14.787579 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 02:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_start_filtration / kwargs : interval=86400 message=Active Winter
2023-06-03 21:34:14.793648 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 04:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_stop_filtration / kwargs : interval=86400 message=Active Winter
2023-06-03 21:35:09.126130 INFO pool_pump_manager: New mode detected : Standard (Old: Active)
2023-06-03 21:35:09.129059 DEBUG pool_pump_manager: call_service: app/restart, {'app': 'pool_pump_manager', 'namespace': 'admin', '__name': 'pool_pump_manager'}
2023-06-03 21:35:09.159501 INFO pool_pump_manager: Initialized
2023-06-03 21:35:09.169463 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 21:35:09.172762 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 21:35:09.178214 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 21:35:09.183755 INFO pool_pump_manager: INIT - Pool is in mode Standard
2023-06-03 21:35:09.187003 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-03 21:35:09.189932 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 21:35:09.194884 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 08:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 21:35:09.202237 INFO pool_pump_manager: Generate a daily task at 08:00:00 for slot1 start
2023-06-03 21:35:09.205206 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 21:35:09.210609 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 20:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-03 21:35:09.219674 INFO pool_pump_manager: Generate a daily task at 20:00:00 for slot2 start
2023-06-03 21:35:09.222313 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-03 21:35:09.225449 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-03 21:35:09.228486 DEBUG pool_pump_manager: Registering run_at at 2023-06-03 08:36:00+02:00 for pool_pump_manager
2023-06-03 21:35:09.234623 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-03 21:35:09.241128 INFO pool_pump_manager: INIT - Based on slot1 end time in input_datetime.pool_stop_slot1, we create a task with handler 180be82a443e45889840b66782093ba5 at 08:36:00
2023-06-03 21:35:09.243745 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-03 21:35:09.246530 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-03 21:35:09.249317 DEBUG pool_pump_manager: Registering run_at at 2023-06-03 06:30:00+02:00 for pool_pump_manager
2023-06-03 21:35:09.255536 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-03 21:35:09.264301 INFO pool_pump_manager: INIT - Based on slot2 end time in input_datetime.pool_stop_slot2, we create a task with handler 802e1f0c94c7464692fee6cccc366945 at 06:30:00
2023-06-03 21:35:09.267640 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot1, {'duration': 1, 'slot': 1} from pool_pump_manager
2023-06-03 21:35:09.272116 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot2, {'duration': 1, 'slot': 2} from pool_pump_manager
2023-06-03 21:35:09.276998 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_mode, {'duration': 1} from pool_pump_manager
2023-06-03 21:35:09.281496 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_boost, {} from pool_pump_manager
2023-06-03 21:35:09.284441 DEBUG pool_pump_manager: Calling listen_event for pool_pump_manager
2023-06-03 21:35:09.293430 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 06:30:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=2 message=Slot2 Automation
2023-06-03 21:35:09.300063 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 08:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=1
2023-06-03 21:35:09.305934 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 08:36:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=1 message=Slot1 Automation
2023-06-03 21:35:09.311347 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 20:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=2
2023-06-03 21:37:45.060825 INFO pool_pump_manager: Change in boost trigger detected : 1H (Old: Aucun)
2023-06-03 21:37:45.063918 DEBUG pool_pump_manager: call_service: timer/start, {'entity_id': 'timer.pool_boost', 'duration': '01:00:00'}
2023-06-03 21:37:45.072994 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-03 21:37:45.083221 INFO pool_pump_manager: Boost 1H - Pump is already On !
2023-06-03 22:37:45.027798 INFO pool_pump_manager: Boost Timer finish (timer.finished) with data: {'entity_id': 'timer.pool_boost', 'finished_at': '2023-06-03T20:37:45+00:00', 'metadata': {'origin': 'LOCAL', 'time_fired': '2023-06-03T20:37:45.001570+00:00', 'context': {'id': '01H21FNXD9B70RPM7RQ4P6SDN4', 'parent_id': None, 'user_id': None}}}
2023-06-03 22:37:45.031315 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 22:37:45.034839 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-03 22:37:45.039534 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 22:37:45.042506 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-03 22:37:45.047031 DEBUG pool_pump_manager: get state: input_select.pool_boost, {} from pool_pump_manager
2023-06-03 22:37:45.053199 INFO pool_pump_manager: As boost 1H end during normal filtration time, pump stopping is canceled
2023-06-03 22:37:45.056601 DEBUG pool_pump_manager: get state: input_select.pool_boost, {} from pool_pump_manager
2023-06-03 22:37:45.089754 DEBUG pool_pump_manager: call_service: input_select/select_option, {'option': 'Aucun', 'entity_id': 'input_select.pool_boost'}
2023-06-03 22:37:45.132793 INFO pool_pump_manager: Change in boost trigger detected : Aucun (Old: 1H)
2023-06-03 22:37:45.135307 DEBUG pool_pump_manager: call_service: timer/cancel, {'entity_id': 'timer.pool_boost'}
2023-06-03 22:37:45.142135 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-03 22:37:45.146068 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-03 22:37:45.156975 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-03 22:37:45.165520 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-03 22:37:45.177451 INFO pool_pump_manager: As boost change from mode 1H to Aucun during normal filtration time, pump stopping is canceled
2023-06-04 06:30:00.038085 DEBUG pool_pump_manager: get state: timer.pool_boost, {} from pool_pump_manager
2023-06-04 06:30:00.045632 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-04 06:30:00.056062 INFO pool_pump_manager: Stopping Pump - Slot2 Automation
2023-06-04 06:30:00.061729 DEBUG pool_pump_manager: call_service: homeassistant/turn_off, {'entity_id': 'switch.pool_switch'}
2023-06-04 06:30:00.073549 DEBUG pool_pump_manager: get state: sensor.recommandation_duree_de_filtration_sonde_piscine, {} from pool_pump_manager
2023-06-04 06:30:00.081760 DEBUG pool_pump_manager: call_service: input_number/set_value, {'value': 390, 'entity_id': 'input_number.filtration_duration_calculated'}
2023-06-04 06:30:00.093786 DEBUG pool_pump_manager: get state: sensor.recommandation_duree_de_filtration_sonde_piscine, {} from pool_pump_manager
2023-06-04 06:30:00.108995 INFO pool_pump_manager: Based on configuration, filtration duration is 390 minutes (iopool recommandation is 390 minutes)
2023-06-04 06:30:00.113857 DEBUG pool_pump_manager: get state: sensor.temps_de_filtration_ecoule, {} from pool_pump_manager
2023-06-04 06:30:00.118712 DEBUG pool_pump_manager: get state: timer.pool_boost, {} from pool_pump_manager
2023-06-04 07:29:06.180820 INFO pool_pump_manager: Initialized
2023-06-04 07:29:06.199149 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-04 07:29:06.263932 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-04 07:29:06.271037 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-04 07:29:06.277321 INFO pool_pump_manager: INIT - Pool is in mode Standard
2023-06-04 07:29:06.281982 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-04 07:29:06.285383 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-04 07:29:06.307902 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 08:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-04 07:29:06.318759 INFO pool_pump_manager: Generate a daily task at 08:00:00 for slot1 start
2023-06-04 07:29:06.322642 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-04 07:29:06.329101 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 20:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-04 07:29:06.338672 INFO pool_pump_manager: Generate a daily task at 20:00:00 for slot2 start
2023-06-04 07:29:06.341746 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-04 07:29:06.345711 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-04 07:29:06.349640 DEBUG pool_pump_manager: Registering run_at at 2023-06-04 08:36:00+02:00 for pool_pump_manager
2023-06-04 07:29:06.355943 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-04 07:29:06.362911 INFO pool_pump_manager: INIT - Based on slot1 end time in input_datetime.pool_stop_slot1, we create a task with handler bbb91a516cbc40438898026fec67013a at 08:36:00
2023-06-04 07:29:06.366094 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-04 07:29:06.370464 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-04 07:29:06.373584 DEBUG pool_pump_manager: Registering run_at at 2023-06-04 06:30:00+02:00 for pool_pump_manager
2023-06-04 07:29:06.381024 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-04 07:29:06.387515 INFO pool_pump_manager: INIT - Based on slot2 end time in input_datetime.pool_stop_slot2, we create a task with handler 4df37f29921d44f6a7402a2aa6988c58 at 06:30:00
2023-06-04 07:29:06.392820 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot1, {'duration': 1, 'slot': 1} from pool_pump_manager
2023-06-04 07:29:06.398302 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot2, {'duration': 1, 'slot': 2} from pool_pump_manager
2023-06-04 07:29:06.404808 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_mode, {'duration': 1} from pool_pump_manager
2023-06-04 07:29:06.411191 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_boost, {} from pool_pump_manager
2023-06-04 07:29:06.415648 DEBUG pool_pump_manager: Calling listen_event for pool_pump_manager
2023-06-04 07:29:06.427457 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 08:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=1
2023-06-04 07:29:06.435670 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 08:36:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=1 message=Slot1 Automation
2023-06-04 07:29:06.443529 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 20:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=2
2023-06-04 07:29:06.451547 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-05 06:30:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=2 message=Slot2 Automation
2023-06-04 08:00:00.066535 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-04 08:00:00.108399 INFO pool_pump_manager: Pump starting for slot 1 - Pump is already On !
2023-06-04 08:00:00.116529 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-04 08:00:00.121811 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-04 08:00:00.127194 DEBUG pool_pump_manager: get state: sensor.recommandation_duree_de_filtration_sonde_piscine, {} from pool_pump_manager
2023-06-04 08:00:00.132508 DEBUG pool_pump_manager: call_service: input_number/set_value, {'value': 390, 'entity_id': 'input_number.filtration_duration_calculated'}
2023-06-04 08:00:00.145020 DEBUG pool_pump_manager: get state: sensor.recommandation_duree_de_filtration_sonde_piscine, {} from pool_pump_manager
2023-06-04 08:00:00.155840 INFO pool_pump_manager: Based on configuration, filtration duration is 390 minutes (iopool recommandation is 390 minutes)
2023-06-04 08:00:00.168623 DEBUG pool_pump_manager: Duration Between slots : 720 minutes / Filtration Duration : 156 (minutes)
2023-06-04 08:00:00.172012 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-04 08:00:00.180975 DEBUG pool_pump_manager: set state: input_datetime.pool_stop_slot1, {'state': '10:36:00'} from pool_pump_manager
2023-06-04 08:00:00.215231 INFO pool_pump_manager: Slot1 Filtration times - Start : 08:00:00 / End : 10:36:00
2023-06-04 08:00:00.218972 DEBUG pool_pump_manager: Checking timer with handle bbb91a516cbc40438898026fec67013a for pool_pump_manager
2023-06-04 08:00:00.222213 DEBUG pool_pump_manager: Canceling timer with handle bbb91a516cbc40438898026fec67013a for pool_pump_manager
2023-06-04 08:00:00.229968 INFO pool_pump_manager: Cancel existing timer for slot1 with handler bbb91a516cbc40438898026fec67013a
2023-06-04 08:00:00.234107 DEBUG pool_pump_manager: Registering run_at at 2023-06-04 10:36:00+02:00 for pool_pump_manager
2023-06-04 08:00:00.247873 INFO pool_pump_manager: Create new timer for slot1 with handler 31274b71c5744bafa348e842e9f9e726
2023-06-04 08:11:08.651555 INFO pool_pump_manager: Initialized
2023-06-04 08:11:08.736317 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-04 08:11:08.746865 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-04 08:11:08.759226 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-04 08:11:08.774162 INFO pool_pump_manager: INIT - Pool is in mode Standard
2023-06-04 08:11:08.782455 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-04 08:11:08.790514 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-04 08:11:08.810681 DEBUG pool_pump_manager: Registering run_every starting 2023-06-05 08:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-04 08:11:08.837737 INFO pool_pump_manager: Generate a daily task at 08:00:00 for slot1 start
2023-06-04 08:11:08.843417 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-04 08:11:08.851959 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 20:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-04 08:11:08.866644 INFO pool_pump_manager: Generate a daily task at 20:00:00 for slot2 start
2023-06-04 08:11:08.871351 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-04 08:11:08.876191 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-04 08:11:08.880984 DEBUG pool_pump_manager: Registering run_at at 2023-06-04 10:36:00+02:00 for pool_pump_manager
2023-06-04 08:11:08.890228 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-04 08:11:08.910017 INFO pool_pump_manager: INIT - Based on slot1 end time in input_datetime.pool_stop_slot1, we create a task with handler a5691c6645b4425085d896a5c8d2f34c at 10:36:00
2023-06-04 08:11:08.917185 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-04 08:11:08.924304 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-04 08:11:08.931765 DEBUG pool_pump_manager: Registering run_at at 2023-06-04 06:30:00+02:00 for pool_pump_manager
2023-06-04 08:11:08.953752 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-04 08:11:08.971856 INFO pool_pump_manager: INIT - Based on slot2 end time in input_datetime.pool_stop_slot2, we create a task with handler 15f07948927e469099abd12cd1f05c79 at 06:30:00
2023-06-04 08:11:08.982311 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot1, {'duration': 1, 'slot': 1} from pool_pump_manager
2023-06-04 08:11:08.993539 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot2, {'duration': 1, 'slot': 2} from pool_pump_manager
2023-06-04 08:11:09.004817 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_mode, {'duration': 1} from pool_pump_manager
2023-06-04 08:11:09.019202 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_boost, {} from pool_pump_manager
2023-06-04 08:11:09.031991 DEBUG pool_pump_manager: Calling listen_event for pool_pump_manager
2023-06-04 08:11:09.060973 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 10:36:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=1 message=Slot1 Automation
2023-06-04 08:11:09.076387 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 20:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=2
2023-06-04 08:11:09.094807 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-05 06:30:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=2 message=Slot2 Automation
2023-06-04 08:11:09.112005 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-05 08:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=1
2023-06-04 09:26:50.827422 INFO pool_pump_manager: Initialized
2023-06-04 09:26:50.846192 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-04 09:26:50.915894 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-04 09:26:50.925501 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-04 09:26:50.933942 INFO pool_pump_manager: INIT - Pool is in mode Standard
2023-06-04 09:26:50.941031 DEBUG pool_pump_manager: get state: input_select.pool_mode, {} from pool_pump_manager
2023-06-04 09:26:50.945837 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-04 09:26:50.959935 DEBUG pool_pump_manager: Registering run_every starting 2023-06-05 08:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-04 09:26:50.972102 INFO pool_pump_manager: Generate a daily task at 08:00:00 for slot1 start
2023-06-04 09:26:50.977171 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-04 09:26:50.988134 DEBUG pool_pump_manager: Registering run_every starting 2023-06-04 20:00:00+02:00 in 86400s intervals for pool_pump_manager
2023-06-04 09:26:51.001465 INFO pool_pump_manager: Generate a daily task at 20:00:00 for slot2 start
2023-06-04 09:26:51.007126 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-04 09:26:51.012055 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-04 09:26:51.017596 DEBUG pool_pump_manager: Registering run_at at 2023-06-04 10:36:00+02:00 for pool_pump_manager
2023-06-04 09:26:51.028144 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-04 09:26:51.040270 INFO pool_pump_manager: INIT - Based on slot1 end time in input_datetime.pool_stop_slot1, we create a task with handler b4627f90d1f7480fbe94e364074a7b3f at 10:36:00
2023-06-04 09:26:51.046045 DEBUG pool_pump_manager: Checking timer with handle for pool_pump_manager
2023-06-04 09:26:51.053479 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-04 09:26:51.058560 DEBUG pool_pump_manager: Registering run_at at 2023-06-04 06:30:00+02:00 for pool_pump_manager
2023-06-04 09:26:51.069978 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-04 09:26:51.082807 INFO pool_pump_manager: INIT - Based on slot2 end time in input_datetime.pool_stop_slot2, we create a task with handler 04fb923bd018439395092b81995b54d8 at 06:30:00
2023-06-04 09:26:51.089981 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot1, {'duration': 1, 'slot': 1} from pool_pump_manager
2023-06-04 09:26:51.096408 DEBUG pool_pump_manager: Calling listen_state for input_datetime.pool_start_slot2, {'duration': 1, 'slot': 2} from pool_pump_manager
2023-06-04 09:26:51.105848 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_mode, {'duration': 1} from pool_pump_manager
2023-06-04 09:26:51.113129 DEBUG pool_pump_manager: Calling listen_state for input_select.pool_boost, {} from pool_pump_manager
2023-06-04 09:26:51.116787 DEBUG pool_pump_manager: Calling listen_event for pool_pump_manager
2023-06-04 09:26:51.128025 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 10:36:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=1 message=Slot1 Automation
2023-06-04 09:26:51.136242 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-04 20:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=2
2023-06-04 09:26:51.144175 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-05 06:30:00 / repeat : False / interval : None / callback : callback_stop_filtration / kwargs : slot=2 message=Slot2 Automation
2023-06-04 09:26:51.152585 DEBUG pool_pump_manager: Existing Handlers => Date : 2023-06-05 08:00:00 / repeat : True / interval : 1 day, 0:00:00 / callback : callback_slot_start / kwargs : interval=86400 slot=1
2023-06-04 10:18:06.256940 INFO pool_pump_manager: Change in boost trigger detected : 1H (Old: Aucun)
2023-06-04 10:18:06.280305 DEBUG pool_pump_manager: call_service: timer/start, {'entity_id': 'timer.pool_boost', 'duration': '01:00:00'}
2023-06-04 10:18:06.304335 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-04 10:18:06.316962 INFO pool_pump_manager: Starting Pump - Boost 1H
2023-06-04 10:18:06.328212 DEBUG pool_pump_manager: call_service: homeassistant/turn_on, {'entity_id': 'switch.pool_switch'}
2023-06-04 10:18:16.686499 INFO pool_pump_manager: Change in boost trigger detected : 4H (Old: 1H)
2023-06-04 10:18:16.689240 DEBUG pool_pump_manager: call_service: timer/start, {'entity_id': 'timer.pool_boost', 'duration': '04:00:00'}
2023-06-04 10:18:16.696904 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-04 10:18:16.728549 INFO pool_pump_manager: Starting Pump - Boost 4H
2023-06-04 10:18:16.736349 DEBUG pool_pump_manager: call_service: homeassistant/turn_on, {'entity_id': 'switch.pool_switch'}
2023-06-04 10:28:50.019004 INFO pool_pump_manager: Change in boost trigger detected : 1H (Old: 4H)
2023-06-04 10:28:50.032785 DEBUG pool_pump_manager: call_service: timer/start, {'entity_id': 'timer.pool_boost', 'duration': '01:00:00'}
2023-06-04 10:28:50.043395 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-04 10:28:50.053313 INFO pool_pump_manager: Boost 1H - Pump is already On !
2023-06-04 10:29:21.900798 INFO pool_pump_manager: Change in boost trigger detected : Aucun (Old: 1H)
2023-06-04 10:29:21.904390 DEBUG pool_pump_manager: call_service: timer/cancel, {'entity_id': 'timer.pool_boost'}
2023-06-04 10:29:21.915477 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-04 10:29:21.922853 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-04 10:29:21.957810 INFO pool_pump_manager: As boost change from mode 1H to Aucun during normal filtration time, pump stopping is canceled
2023-06-04 10:30:32.711970 INFO pool_pump_manager: Change in boost trigger detected : 1H (Old: Aucun)
2023-06-04 10:30:32.716983 DEBUG pool_pump_manager: call_service: timer/start, {'entity_id': 'timer.pool_boost', 'duration': '01:00:00'}
2023-06-04 10:30:32.723824 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-04 10:30:32.734570 INFO pool_pump_manager: Boost 1H - Pump is already On !
2023-06-04 10:33:26.395501 INFO pool_pump_manager: Change in boost trigger detected : Aucun (Old: 1H)
2023-06-04 10:33:26.408109 DEBUG pool_pump_manager: call_service: timer/cancel, {'entity_id': 'timer.pool_boost'}
2023-06-04 10:33:26.415719 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-04 10:33:26.421441 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-04 10:33:26.438987 INFO pool_pump_manager: As boost change from mode 1H to Aucun during normal filtration time, pump stopping is canceled
2023-06-04 10:33:51.211535 INFO pool_pump_manager: Change in boost trigger detected : 1H (Old: Aucun)
2023-06-04 10:33:51.215903 DEBUG pool_pump_manager: call_service: timer/start, {'entity_id': 'timer.pool_boost', 'duration': '01:00:00'}
2023-06-04 10:33:51.225008 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-04 10:33:51.235432 INFO pool_pump_manager: Starting Pump - Boost 1H
2023-06-04 10:33:51.247084 DEBUG pool_pump_manager: call_service: homeassistant/turn_on, {'entity_id': 'switch.pool_switch'}
2023-06-04 10:36:00.021965 DEBUG pool_pump_manager: get state: timer.pool_boost, {} from pool_pump_manager
2023-06-04 10:36:00.026979 DEBUG pool_pump_manager: get state: input_select.pool_boost, {} from pool_pump_manager
2023-06-04 10:36:00.036975 INFO pool_pump_manager: Boost is in progress (1H). Pump stopping is canceled.
2023-06-04 10:41:09.288878 INFO pool_pump_manager: Change in boost trigger detected : Aucun (Old: 1H)
2023-06-04 10:41:09.293189 DEBUG pool_pump_manager: call_service: timer/cancel, {'entity_id': 'timer.pool_boost'}
2023-06-04 10:41:09.302979 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot1, {} from pool_pump_manager
2023-06-04 10:41:09.309191 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot1, {} from pool_pump_manager
2023-06-04 10:41:09.316052 DEBUG pool_pump_manager: get state: input_datetime.pool_start_slot2, {} from pool_pump_manager
2023-06-04 10:41:09.321782 DEBUG pool_pump_manager: get state: input_datetime.pool_stop_slot2, {} from pool_pump_manager
2023-06-04 10:41:09.336118 DEBUG pool_pump_manager: get state: timer.pool_boost, {} from pool_pump_manager
2023-06-04 10:41:09.342944 DEBUG pool_pump_manager: get state: input_select.pool_boost, {} from pool_pump_manager
2023-06-04 10:41:09.351196 INFO pool_pump_manager: Boost is in progress (Aucun). Pump stopping is canceled.
2023-06-04 10:41:09.358369 INFO pool_pump_manager: Boost mode change from 1H to Aucun. Stopping filtration
2023-06-04 10:42:01.580592 INFO pool_pump_manager: Change in boost trigger detected : 4H (Old: Aucun)
2023-06-04 10:42:01.584082 DEBUG pool_pump_manager: call_service: timer/start, {'entity_id': 'timer.pool_boost', 'duration': '04:00:00'}
2023-06-04 10:42:01.592307 DEBUG pool_pump_manager: get state: switch.pool_switch, {} from pool_pump_manager
2023-06-04 10:42:01.601780 INFO pool_pump_manager: Starting Pump - Boost 4H
2023-06-04 10:42:01.611485 DEBUG pool_pump_manager: call_service: homeassistant/turn_on, {'entity_id': 'switch.pool_switch'}
import hassapi as hass
import math
from datetime import datetime, timedelta, time
import humanize
"""
Describe here
"""
class pool_pump_manager(hass.Hass):
# Initialize Class
# ----------------
def initialize(self):
self.log("Initialized")
# Verify app configuration conformity
if (self._check_configuration() != True):
self.log("Error in configuration. Stopping app waiting configuration correction")
self.stop_app(self.name)
raise RuntimeError("Invalid configuration. Please look critical events in logs")
self.log("INIT - Pool is in mode %s", self.get_state(self.args['mode_sensor_id']))
# Depending of mode in progress
if self.get_state(self.args['mode_sensor_id']).lower() == "Standard".lower():
# Create task for slots
self.slot1_start_handler = self._generate_tasks(1, self.get_state(self.args['times'][0]['start_time_id']))
self.slot2_start_handler = self._generate_tasks(2, self.get_state(self.args['times'][1]['start_time_id']))
# Create end task SLOT1 if not exist - for security in case app is reload
self.slot1_end_handler = ""
if self.timer_running(self.slot1_end_handler) == False:
self.slot1_end_handler = self.run_at(self.callback_stop_filtration, self.get_state(self.args['times'][0]['stop_time_id']), slot=1, message="Slot1 Automation")
self.log("INIT - Based on slot1 end time in %s, we create a task with handler %s at %s", self.args['times'][0]['stop_time_id'], self.slot1_end_handler, self.get_state(self.args['times'][0]['stop_time_id']), level = "INFO")
# Create end task SLOT2 if not exist - for security in case app is reload
self.slot2_end_handler = ""
if self.timer_running(self.slot2_end_handler) == False:
self.slot2_end_handler = self.run_at(self.callback_stop_filtration, self.get_state(self.args['times'][1]['stop_time_id']), slot=2, message="Slot2 Automation")
self.log("INIT - Based on slot2 end time in %s, we create a task with handler %s at %s", self.args['times'][1]['stop_time_id'], self.slot2_end_handler, self.get_state(self.args['times'][1]['stop_time_id']), level = "INFO")
# Listen change on slot times
self.listen_state(self.callback_change_start_slots, self.args['times'][0]['start_time_id'], duration=1, slot=1)
self.listen_state(self.callback_change_start_slots, self.args['times'][1]['start_time_id'], duration=1, slot=2)
elif self.get_state(self.args['mode_sensor_id']).lower() == "Active".lower():
# Create the start task for active winter filtration
self.run_daily(self.callback_start_filtration, self.args['winter'][0]['start_time'], message="Active Winter")
# Create the end task for active winter filtration
self.run_daily(self.callback_stop_filtration, (datetime.strptime(self.args['winter'][0]['start_time'], "%H:%M:%S") + timedelta(minutes=self.args['winter'][0]['duration_minutes'])).time(), message="Active Winter")
# Listen change in mode sensor
self.listen_state(self.callback_change_mode, self.args['mode_sensor_id'], duration=1)
# Listen change in boost selector and timer
self.listen_state(self.callback_boost_trigger, self.args['boost_selector_sensor_id'])
self.listen_event(self.callback_boost_timer_finished, entity_id = self.args['boost_timer_sensor_id'], event = "timer.finished")
# List all existing handler for this app
self._list_all_handler()
# Check if all app configuration is good. In case of error, we stopping app
# -------------------------------------------------------------------------
def _check_configuration(self) -> bool:
if self.entity_exists(self.args['pump_sensor_id']) == False:
self.log("Entity defined in 'pump_sensor_id' configuration don't exist. Please update your configuration !", level = "CRITICAL")
return False
if self.entity_exists(self.args['pool_filtration_duration_sensor_id']) == False:
self.log("Entity defined in 'pool_filtration_duration_sensor_id' configuration don't exist. Please update your configuration !", level = "CRITICAL")
return False
if self.entity_exists(self.args['mode_sensor_id']) == False:
self.log("Entity defined in 'mode_sensor_id' configuration don't exist. Please update your configuration !", level = "CRITICAL")
return False
if self.entity_exists(self.args['times'][0]['start_time_id']) == False:
self.log("Entity defined in 'times.slot1.start_time_id' configuration don't exist. Please update your configuration !", level = "CRITICAL")
return False
if self.entity_exists(self.args['times'][1]['start_time_id']) == False:
self.log("Entity defined in 'times.slot2.start_time_id' configuration don't exist. Please update your configuration !", level = "CRITICAL")
return False
if not math.isclose(self.args['times'][0]['duration_percent'] + self.args['times'][1]['duration_percent'], 1, rel_tol=0, abs_tol=0):
self.log("Sum of all duration_percent in times configuration is not equal to 1. Please update your configuration !", level = "CRITICAL")
return False
if datetime.strptime(self.get_state(self.args['times'][0]['start_time_id']), "%H:%M:%S") >= datetime.strptime(self.get_state(self.args['times'][1]['start_time_id']), "%H:%M:%S"):
self.log("Slot1 start time is before or equal to slot2 start time. Please update your configuration !", level = "CRITICAL")
return False
if self.entity_exists(self.args['pool_filtration_duration_storage']) == False:
self.log("Entity defined in 'pool_filtration_duration_storage' configuration don't exist. Please update your configuration !", level = "CRITICAL")
return False
if 'pool_filtration_duration_min' in self.args and 'pool_filtration_duration_max' in self.args and self.args['pool_filtration_duration_min'] > self.args['pool_filtration_duration_max']:
self.log("pool_filtration_duration_min (%i) cannot be higher than pool_filtration_duration_max (%i)", self.args['pool_filtration_duration_min'], self.args['pool_filtration_duration_max'], level = "CRITICAL")
return False
return True
# Return Filtration Duration
# --------------------------
def _get_filtration_duration(self) -> int:
filtration_duration = int(float(self.get_state(self.args['pool_filtration_duration_sensor_id'])))
if 'pool_filtration_duration_min' in self.args and filtration_duration < self.args['pool_filtration_duration_min']:
filtration_duration = self.args['pool_filtration_duration_min']
if 'pool_filtration_duration_max' in self.args and filtration_duration > self.args['pool_filtration_duration_max']:
filtration_duration = self.args['pool_filtration_duration_max']
self.set_value(self.args['pool_filtration_duration_storage'], filtration_duration)
self.log("Based on configuration, filtration duration is %i minutes (iopool recommandation is %i minutes)", filtration_duration, int(float(self.get_state(self.args['pool_filtration_duration_sensor_id']))), level = "INFO")
return filtration_duration
# Callback to restart app and force a new initialize when mode change
# If mode is Standard or Active
# With this, we trigger new tasks by cleaning all old tasks
# -------------------------------------------------------------------
def callback_change_mode(self, entity, attribute, old, new, **kwargs: dict) -> None:
self.log("New mode detected : %s (Old: %s)", new, old, level = "INFO")
self.restart_app(self.name)
# Generate scheduled task
# -----------------------
def _generate_tasks(self, slot: int, time: str) -> dict:
if slot == 1:
slot_start_handler = self.run_daily(self.callback_slot_start, time, slot=slot)
elif slot == 2:
slot_start_handler = self.run_daily(self.callback_slot_start, time, slot=slot)
self.log("Generate a daily task at %s for slot%i start", time, slot, level = "INFO")
return slot_start_handler
# Callback when one slot start
# ----------------------------
def callback_slot_start(self, **kwargs: dict) -> None:
if kwargs['slot'] == 1:
# Start filtration
self.callback_start_filtration(message="Pump starting for slot {}".format(kwargs['slot']))
# Calculate time delta between slot1 and slot2
timedelta_minutes = int((datetime.strptime(self.get_state(self.args['times'][1]['start_time_id']), "%H:%M:%S") - datetime.strptime(self.get_state(self.args['times'][0]['start_time_id']), "%H:%M:%S")).total_seconds() / 60)
# Calculate filtration duration based on configuration percent and iopool filtration time recommandation
filtration_duration = self._get_filtration_duration() * float(self.args['times'][0]['duration_percent'])
self.log("Duration Between slots : %s minutes / Filtration Duration : %s (minutes)", int(timedelta_minutes), int(filtration_duration), level = "DEBUG")
# If time between slot1 and slot 2 is superior than filtration time
if int(timedelta_minutes) > int(filtration_duration):
start_time = datetime.strptime(self.get_state(self.args['times'][0]['start_time_id']), "%H:%M:%S")
end_time = datetime.strftime(start_time + timedelta(minutes=filtration_duration), "%H:%M:%S")
# Setting end time in a HA input_datetime for slot1
self.set_state(self.args['times'][0]['stop_time_id'], state=end_time)
self.log("Slot1 Filtration times - Start : %s / End : %s", start_time.time(), end_time, level = "INFO")
# If an existing timer run for self.slot1_end_handler handler, we cancel it
if self.timer_running(self.slot1_end_handler) == True:
self.cancel_timer(self.slot1_end_handler)
self.log("Cancel existing timer for slot1 with handler %s", self.slot1_end_handler, level = "INFO")
# We create an new timer based on stored input_datetime - end of slot1
self.slot1_end_handler = self.run_at(self.callback_stop_filtration, end_time, slot=1, message="Slot1 Automation")
self.log("Create new timer for slot1 with handler %s", self.slot1_end_handler, level = "INFO")
else:
self.log("Duration between slot1 and slot2 start time (%s minutes) is less than time need for filtration (%s minutes). We will not stop filtration for slot1", timedelta_minutes, filtration_duration, level="WARNING")
elif kwargs['slot'] == 2:
# Retrieves the time (in minutes) the pump was already running today
elapsed_filtration_minutes = int(float(self.get_state(self.args['pump_stats_sensor_id'])) * 60)
# Calculate the remaining time of filtration
remaining_filtration_minutes = self._get_filtration_duration() - elapsed_filtration_minutes
self.log("Slot2 - Elapsed time of filtration : %s minutes / Remaining time : %s minutes", elapsed_filtration_minutes, remaining_filtration_minutes, level = "INFO")
start_time = datetime.strptime(self.get_state(self.args['times'][1]['start_time_id']), "%H:%M:%S")
end_time = datetime.strftime(start_time + timedelta(minutes=remaining_filtration_minutes), "%H:%M:%S")
# Setting end time in a HA input_datetime for slot2
self.set_state(self.args['times'][1]['stop_time_id'], state=end_time)
self.log("Slot2 Filtration times - Start : %s / End : %s", start_time.time(), end_time, level = "INFO")
# If an existing timer run for self.slot2_end_handler handler, we cancel it
if self.timer_running(self.slot2_end_handler) == True:
self.cancel_timer(self.slot2_end_handler)
self.log("Cancel existing timer for slot2 with handler %s", self.slot2_end_handler, level = "INFO")
# If remaining time is superior than 0
if remaining_filtration_minutes > 0:
# Start filtration
self.callback_start_filtration(message="Pump starting for slot {}".format(kwargs['slot']))
# We create an new timer based on stored input_datetime - end of slot1
self.slot2_end_handler = self.run_at(self.callback_stop_filtration, end_time, slot=2, message="Slot2 Automation")
self.log("Create new timer for slot2 with handler %s", self.slot2_end_handler, level = "INFO")
else:
self.log("There is no more filtration time left to do", level = "INFO")
# Callback when start time change on slot1 or slot2
# ---------------------------------------------
def callback_change_start_slots(self, entity, attribute, old, new, **kwargs: dict) -> None:
self.log("Change detected in %s time - old value %s / new value : %s", entity, old, new, level = "INFO")
# Generate new task for a specific slot
slot_handler = self._generate_tasks(kwargs['slot'], self.get_state(entity))
self.log("Generate a new task with handler %s for slot%i - at %s", slot_handler, kwargs['slot'], new, level = "INFO")
if kwargs['slot'] == 1:
# Cancel previous handler
self.cancel_timer(self.slot1_start_handler)
# Store new handler
self.slot1_start_handler = slot_handler
elif kwargs['slot'] == 2:
# Cancel previous handler
self.cancel_timer(self.slot2_start_handler)
# Store new handler
self.slot2_start_handler = slot_handler
self.log("New handler %s stored for slot%i", slot_handler, kwargs['slot'], level = "DEBUG")
# Callback who start filtration
# -----------------------------
def callback_start_filtration(self, **kwargs: dict) -> None:
if self.get_state(self.args['pump_sensor_id']).lower() == 'off':
self.log("Starting Pump - %s", kwargs['message'], level = "INFO")
self.turn_on(self.args['pump_sensor_id'])
else:
self.log("%s - Pump is already On !", kwargs['message'], level = "INFO")
# Callback who stop filtration
# ----------------------------
def callback_stop_filtration(self, **kwargs: dict) -> None:
if self._boost_in_progress() == False:
if self.get_state(self.args['pump_sensor_id']).lower() == 'on':
self.log("Stopping Pump - %s", kwargs['message'], level = "INFO")
self.turn_off(self.args['pump_sensor_id'])
else:
self.log("Pump is already Off !", level = "INFO")
else:
self.log("Boost is in progress (%s). Pump stopping is canceled.", self.get_state(self.args['boost_selector_sensor_id']), level = "INFO")
# If slot is in method arguments and equal to slot2, we send a notification
if 'slot' in kwargs and kwargs['slot'] == 2:
self._end_notification()
# Callback triggerred when boost time change is detected
# ------------------------------------------------------
def callback_boost_trigger(self, entity, attribute, old, new, **kwargs: dict) -> None:
self.log("Change in boost trigger detected : %s (Old: %s)", new, old, level = "INFO")
if new != "Aucun":
boost_duration_hour = int(''.join(filter(str.isdigit, new)))
boost_duration_timer = (datetime(1900, 1, 1) + timedelta(hours=boost_duration_hour)).strftime('%H:%M:%S')
self.call_service("timer/start", entity_id=self.args['boost_timer_sensor_id'], duration=boost_duration_timer)
self.callback_start_filtration(message="Boost {}".format(new))
elif new == "Aucun":
self.call_service("timer/cancel", entity_id=self.args['boost_timer_sensor_id'])
if self._is_during_slot() is False:
self.callback_stop_filtration(message="Stopping boost {}".format(old))
self.log("Boost mode change from %s to %s. Stopping filtration", old, new, level = "INFO")
else:
self.log("As boost change from mode %s to %s during normal filtration time, pump stopping is canceled", old, new, level = "INFO")
# Triggered when boost time finish to stop pump if we are not in normal filtration periods
# ----------------------------------------------------------------------------------------
def callback_boost_timer_finished(self, event, data, **kwargs: dict) -> None:
self.log("Boost Timer finish (%s) with data: %s", event, data, level = "INFO")
if self._is_during_slot() is False:
self.log("Boost timer finished at %s - Stopping filtration", data['finished_at'], level = "INFO")
self._send_notification(
message="Fin du boost {}. Arrêt de la pompe.".format(self.get_state(self.args['boost_selector_sensor_id'])),
tag="pool_boost")
else:
self.log("As boost %s end during normal filtration time, pump stopping is canceled", self.get_state(self.args['boost_selector_sensor_id']), level = "INFO")
self._send_notification(
message="Fin du boost {}. La pompe n'est pas arrêté car c'est la période de filtration normale.".format(self.get_state(self.args['boost_selector_sensor_id'])),
tag="pool_boost")
self.select_option(entity_id=self.args['boost_selector_sensor_id'], option="Aucun")
# Return boolean depending if now time is between start and stop time of each slots
# ---------------------------------------------------------------------------------
def _is_during_slot(self) -> bool:
if self.now_is_between(self.get_state(self.args['times'][0]['start_time_id']), self.get_state(self.args['times'][0]['stop_time_id'])) or self.now_is_between(self.get_state(self.args['times'][1]['start_time_id']), self.get_state(self.args['times'][1]['stop_time_id'])):
return True
else:
return False
# Detect if boost is in progress
# ------------------------------
def _boost_in_progress(self) -> bool:
if self.get_state(self.args['boost_timer_sensor_id']) == "active":
return True
else:
return False
# Send notification via Home Assistant
# ------------------------------------
def _send_notification(self, **kwargs) -> None:
self.fire_event("NOTIFIER",
action = "send_to_marc",
title = "💦 Temps de filtration piscine",
message = kwargs['message'],
tag = kwargs['tag'])
# Send End Filtration notification
# --------------------------------
def _end_notification(self, **kwargs) -> None:
filtration_duration = self._get_filtration_duration() # Duration in minutes
filtration_done = float(self.get_state(self.args['pump_stats_sensor_id'])) * 60 # Duration in minutes
filtration_percent = (100 / filtration_duration) * filtration_done
messages = []
messages.append(
"La piscine a était filtrée durant {} sur {} soit {}%".format(
timedelta(minutes=filtration_done),
timedelta(minutes=filtration_duration),
str(round(filtration_percent))
)
)
if self._boost_in_progress() is True:
boost_type = self.get_state(self.args['boost_selector_sensor_id'])
boost_end_date = datetime.strptime(self.get_state(self.args['boost_timer_sensor_id'], attribute="finishes_at"), "%Y-%m-%dT%H:%M:%S%z")
now = datetime.now().astimezone()
humanize.i18n.activate("fr_FR")
remaining_boost = humanize.precisedelta(boost_end_date.astimezone() - now, minimum_unit="minutes")
messages.append(
"Un boost de {} est en cours et il reste {} de filtration (Fin : {})".format(
boost_type,
remaining_boost,
boost_end_date.astimezone().strftime("%d-%m-%Y %H:%M")
)
)
self._send_notification(message='. '.join(map(str, messages)), tag="pool_end_filtration")
# List existing Handlers
# ----------------------
def _list_all_handler(self) -> None:
all_handlers = self.get_scheduler_entries()['pool_pump_manager']
for handler in all_handlers:
self.log("Existing Handlers => Date : %s / repeat : %s / interval : %s / callback : %s / kwargs : %s",
all_handlers[handler]['timestamp'],
all_handlers[handler]['repeat'],
all_handlers[handler]['interval'],
all_handlers[handler]['callback'],
all_handlers[handler]['kwargs'],
level="DEBUG")
Merci!