3434 BSBLANInvalidParameterError ,
3535 BSBLANVersionError ,
3636)
37- from .models import Device , HotWaterState , Info , Sensor , State , StaticState
37+ from .models import (
38+ Device ,
39+ DHWTimeSwitchPrograms ,
40+ HotWaterState ,
41+ Info ,
42+ Sensor ,
43+ State ,
44+ StaticState ,
45+ )
3846from .utility import APIValidator
3947
4048if TYPE_CHECKING :
@@ -558,25 +566,50 @@ async def set_hot_water(
558566 nominal_setpoint : float | None = None ,
559567 reduced_setpoint : float | None = None ,
560568 operating_mode : str | None = None ,
569+ dhw_time_programs : DHWTimeSwitchPrograms | None = None ,
561570 ) -> None :
562571 """Change the state of the hot water system through BSB-Lan.
563572
564573 Args:
565574 nominal_setpoint (float | None): The nominal setpoint temperature to set.
566575 reduced_setpoint (float | None): The reduced setpoint temperature to set.
576+ operating_mode (str | None): The operating mode to set.
577+ dhw_time_programs (DHWTimeSwitchPrograms | None): Time switch programs.
567578
568579 """
580+ # Validate only one parameter is being set
581+ time_program_params = []
582+ if dhw_time_programs :
583+ if dhw_time_programs .monday :
584+ time_program_params .append (dhw_time_programs .monday )
585+ if dhw_time_programs .tuesday :
586+ time_program_params .append (dhw_time_programs .tuesday )
587+ if dhw_time_programs .wednesday :
588+ time_program_params .append (dhw_time_programs .wednesday )
589+ if dhw_time_programs .thursday :
590+ time_program_params .append (dhw_time_programs .thursday )
591+ if dhw_time_programs .friday :
592+ time_program_params .append (dhw_time_programs .friday )
593+ if dhw_time_programs .saturday :
594+ time_program_params .append (dhw_time_programs .saturday )
595+ if dhw_time_programs .sunday :
596+ time_program_params .append (dhw_time_programs .sunday )
597+ if dhw_time_programs .standard_values :
598+ time_program_params .append (dhw_time_programs .standard_values )
599+
569600 self ._validate_single_parameter (
570601 nominal_setpoint ,
571602 reduced_setpoint ,
572603 operating_mode ,
604+ * time_program_params ,
573605 error_msg = MULTI_PARAMETER_ERROR_MSG ,
574606 )
575607
576608 state = self ._prepare_hot_water_state (
577609 nominal_setpoint ,
578610 reduced_setpoint ,
579611 operating_mode ,
612+ dhw_time_programs ,
580613 )
581614 await self ._set_hot_water_state (state )
582615
@@ -585,12 +618,15 @@ def _prepare_hot_water_state(
585618 nominal_setpoint : float | None ,
586619 reduced_setpoint : float | None ,
587620 operating_mode : str | None ,
621+ dhw_time_programs : DHWTimeSwitchPrograms | None = None ,
588622 ) -> dict [str , Any ]:
589623 """Prepare the hot water state for setting.
590624
591625 Args:
592626 nominal_setpoint (float | None): The nominal setpoint temperature to set.
593627 reduced_setpoint (float | None): The reduced setpoint temperature to set.
628+ operating_mode (str | None): The operating mode to set.
629+ dhw_time_programs (DHWTimeSwitchPrograms | None): Time switch programs.
594630
595631 Returns:
596632 dict[str, Any]: The prepared state for the hot water.
@@ -616,6 +652,23 @@ def _prepare_hot_water_state(
616652 "Type" : "1" ,
617653 },
618654 )
655+
656+ if dhw_time_programs :
657+ time_program_mapping = {
658+ "561" : dhw_time_programs .monday ,
659+ "562" : dhw_time_programs .tuesday ,
660+ "563" : dhw_time_programs .wednesday ,
661+ "564" : dhw_time_programs .thursday ,
662+ "565" : dhw_time_programs .friday ,
663+ "566" : dhw_time_programs .saturday ,
664+ "567" : dhw_time_programs .sunday ,
665+ "576" : dhw_time_programs .standard_values ,
666+ }
667+
668+ for param , value in time_program_mapping .items ():
669+ if value is not None :
670+ state .update ({"Parameter" : param , "Value" : value , "Type" : "1" })
671+
619672 if not state :
620673 raise BSBLANError (NO_STATE_ERROR_MSG )
621674 return state
0 commit comments