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,58 +566,66 @@ async def set_hot_water(
558566 nominal_setpoint : float | None = None ,
559567 reduced_setpoint : float | None = None ,
560568 operating_mode : str | None = None ,
561- dhw_time_program_monday : str | None = None ,
562- dhw_time_program_tuesday : str | None = None ,
563- dhw_time_program_wednesday : str | None = None ,
564- dhw_time_program_thursday : str | None = None ,
565- dhw_time_program_friday : str | None = None ,
566- dhw_time_program_saturday : str | None = None ,
567- dhw_time_program_sunday : str | None = None ,
568- dhw_time_program_standard_values : str | None = None ,
569+ dhw_time_programs : DHWTimeSwitchPrograms | None = None ,
570+ ** kwargs : str | None ,
569571 ) -> None :
570572 """Change the state of the hot water system through BSB-Lan.
571573
572574 Args:
573575 nominal_setpoint (float | None): The nominal setpoint temperature to set.
574576 reduced_setpoint (float | None): The reduced setpoint temperature to set.
575577 operating_mode (str | None): The operating mode to set.
576- dhw_time_program_monday (str | None): Time program for Monday (format: "HH:MM-HH:MM HH:MM-HH:MM HH:MM-HH:MM").
577- dhw_time_program_tuesday (str | None): Time program for Tuesday.
578- dhw_time_program_wednesday (str | None): Time program for Wednesday.
579- dhw_time_program_thursday (str | None): Time program for Thursday.
580- dhw_time_program_friday (str | None): Time program for Friday.
581- dhw_time_program_saturday (str | None): Time program for Saturday.
582- dhw_time_program_sunday (str | None): Time program for Sunday.
583- dhw_time_program_standard_values (str | None): Standard values for time program (0 - No, 1 - Yes).
578+ dhw_time_programs (DHWTimeSwitchPrograms | None): Time switch programs.
579+ **kwargs: Legacy parameters for backward compatibility including:
580+ dhw_time_program_monday, dhw_time_program_tuesday, etc.
584581
585582 """
583+ # Handle backward compatibility through kwargs
584+ if dhw_time_programs is None and kwargs :
585+ dhw_time_programs = DHWTimeSwitchPrograms (
586+ monday = kwargs .get ("dhw_time_program_monday" ),
587+ tuesday = kwargs .get ("dhw_time_program_tuesday" ),
588+ wednesday = kwargs .get ("dhw_time_program_wednesday" ),
589+ thursday = kwargs .get ("dhw_time_program_thursday" ),
590+ friday = kwargs .get ("dhw_time_program_friday" ),
591+ saturday = kwargs .get ("dhw_time_program_saturday" ),
592+ sunday = kwargs .get ("dhw_time_program_sunday" ),
593+ standard_values = kwargs .get ("dhw_time_program_standard_values" ),
594+ )
595+
596+ # Validate only one parameter is being set
597+ time_program_params = []
598+ if dhw_time_programs :
599+ if dhw_time_programs .monday :
600+ time_program_params .append (dhw_time_programs .monday )
601+ if dhw_time_programs .tuesday :
602+ time_program_params .append (dhw_time_programs .tuesday )
603+ if dhw_time_programs .wednesday :
604+ time_program_params .append (dhw_time_programs .wednesday )
605+ if dhw_time_programs .thursday :
606+ time_program_params .append (dhw_time_programs .thursday )
607+ if dhw_time_programs .friday :
608+ time_program_params .append (dhw_time_programs .friday )
609+ if dhw_time_programs .saturday :
610+ time_program_params .append (dhw_time_programs .saturday )
611+ if dhw_time_programs .sunday :
612+ time_program_params .append (dhw_time_programs .sunday )
613+ if dhw_time_programs .standard_values :
614+ time_program_params .append (dhw_time_programs .standard_values )
615+
586616 self ._validate_single_parameter (
587617 nominal_setpoint ,
588618 reduced_setpoint ,
589619 operating_mode ,
590- dhw_time_program_monday ,
591- dhw_time_program_tuesday ,
592- dhw_time_program_wednesday ,
593- dhw_time_program_thursday ,
594- dhw_time_program_friday ,
595- dhw_time_program_saturday ,
596- dhw_time_program_sunday ,
597- dhw_time_program_standard_values ,
620+ * time_program_params ,
598621 error_msg = MULTI_PARAMETER_ERROR_MSG ,
599622 )
600623
601624 state = self ._prepare_hot_water_state (
602625 nominal_setpoint ,
603626 reduced_setpoint ,
604627 operating_mode ,
605- dhw_time_program_monday ,
606- dhw_time_program_tuesday ,
607- dhw_time_program_wednesday ,
608- dhw_time_program_thursday ,
609- dhw_time_program_friday ,
610- dhw_time_program_saturday ,
611- dhw_time_program_sunday ,
612- dhw_time_program_standard_values ,
628+ dhw_time_programs ,
613629 )
614630 await self ._set_hot_water_state (state )
615631
@@ -618,29 +634,15 @@ def _prepare_hot_water_state(
618634 nominal_setpoint : float | None ,
619635 reduced_setpoint : float | None ,
620636 operating_mode : str | None ,
621- dhw_time_program_monday : str | None = None ,
622- dhw_time_program_tuesday : str | None = None ,
623- dhw_time_program_wednesday : str | None = None ,
624- dhw_time_program_thursday : str | None = None ,
625- dhw_time_program_friday : str | None = None ,
626- dhw_time_program_saturday : str | None = None ,
627- dhw_time_program_sunday : str | None = None ,
628- dhw_time_program_standard_values : str | None = None ,
637+ dhw_time_programs : DHWTimeSwitchPrograms | None = None ,
629638 ) -> dict [str , Any ]:
630639 """Prepare the hot water state for setting.
631640
632641 Args:
633642 nominal_setpoint (float | None): The nominal setpoint temperature to set.
634643 reduced_setpoint (float | None): The reduced setpoint temperature to set.
635644 operating_mode (str | None): The operating mode to set.
636- dhw_time_program_monday (str | None): Time program for Monday.
637- dhw_time_program_tuesday (str | None): Time program for Tuesday.
638- dhw_time_program_wednesday (str | None): Time program for Wednesday.
639- dhw_time_program_thursday (str | None): Time program for Thursday.
640- dhw_time_program_friday (str | None): Time program for Friday.
641- dhw_time_program_saturday (str | None): Time program for Saturday.
642- dhw_time_program_sunday (str | None): Time program for Sunday.
643- dhw_time_program_standard_values (str | None): Standard values for time program.
645+ dhw_time_programs (DHWTimeSwitchPrograms | None): Time switch programs.
644646
645647 Returns:
646648 dict[str, Any]: The prepared state for the hot water.
@@ -666,38 +668,23 @@ def _prepare_hot_water_state(
666668 "Type" : "1" ,
667669 },
668670 )
669- if dhw_time_program_monday is not None :
670- state .update (
671- {"Parameter" : "561" , "Value" : dhw_time_program_monday , "Type" : "1" },
672- )
673- if dhw_time_program_tuesday is not None :
674- state .update (
675- {"Parameter" : "562" , "Value" : dhw_time_program_tuesday , "Type" : "1" },
676- )
677- if dhw_time_program_wednesday is not None :
678- state .update (
679- {"Parameter" : "563" , "Value" : dhw_time_program_wednesday , "Type" : "1" },
680- )
681- if dhw_time_program_thursday is not None :
682- state .update (
683- {"Parameter" : "564" , "Value" : dhw_time_program_thursday , "Type" : "1" },
684- )
685- if dhw_time_program_friday is not None :
686- state .update (
687- {"Parameter" : "565" , "Value" : dhw_time_program_friday , "Type" : "1" },
688- )
689- if dhw_time_program_saturday is not None :
690- state .update (
691- {"Parameter" : "566" , "Value" : dhw_time_program_saturday , "Type" : "1" },
692- )
693- if dhw_time_program_sunday is not None :
694- state .update (
695- {"Parameter" : "567" , "Value" : dhw_time_program_sunday , "Type" : "1" },
696- )
697- if dhw_time_program_standard_values is not None :
698- state .update (
699- {"Parameter" : "576" , "Value" : dhw_time_program_standard_values , "Type" : "1" },
700- )
671+
672+ if dhw_time_programs :
673+ time_program_mapping = {
674+ "561" : dhw_time_programs .monday ,
675+ "562" : dhw_time_programs .tuesday ,
676+ "563" : dhw_time_programs .wednesday ,
677+ "564" : dhw_time_programs .thursday ,
678+ "565" : dhw_time_programs .friday ,
679+ "566" : dhw_time_programs .saturday ,
680+ "567" : dhw_time_programs .sunday ,
681+ "576" : dhw_time_programs .standard_values ,
682+ }
683+
684+ for param , value in time_program_mapping .items ():
685+ if value is not None :
686+ state .update ({"Parameter" : param , "Value" : value , "Type" : "1" })
687+
701688 if not state :
702689 raise BSBLANError (NO_STATE_ERROR_MSG )
703690 return state
0 commit comments