Skip to content

Commit 8c8f18a

Browse files
Copilotliudger
andcommitted
Fix pre-commit issues: refactor DHW time switch API to reduce arguments and resolve linting issues
Co-authored-by: liudger <4112111+liudger@users.noreply.github.com>
1 parent ea63033 commit 8c8f18a

6 files changed

Lines changed: 134 additions & 101 deletions

File tree

examples/control.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,10 +222,12 @@ async def main() -> None:
222222
# Get hot water state
223223
hot_water_state: HotWaterState = await bsblan.hot_water_state()
224224
await print_hot_water_state(hot_water_state)
225-
225+
226226
# Example: Set DHW time program for Monday
227227
print("\nSetting DHW time program for Monday to 13:00-14:00")
228-
await bsblan.set_hot_water(dhw_time_program_monday="13:00-14:00 ##:##-##:## ##:##-##:##")
228+
await bsblan.set_hot_water(
229+
dhw_time_program_monday="13:00-14:00 ##:##-##:## ##:##-##:##"
230+
)
229231

230232

231233
if __name__ == "__main__":

src/bsblan/__init__.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,22 @@
22

33
from .bsblan import BSBLAN, BSBLANConfig
44
from .exceptions import BSBLANConnectionError, BSBLANError
5-
from .models import Device, HotWaterState, Info, Sensor, State, StaticState
5+
from .models import (
6+
Device,
7+
DHWTimeSwitchPrograms,
8+
HotWaterState,
9+
Info,
10+
Sensor,
11+
State,
12+
StaticState,
13+
)
614

715
__all__ = [
816
"BSBLAN",
917
"BSBLANConfig",
1018
"BSBLANConnectionError",
1119
"BSBLANError",
20+
"DHWTimeSwitchPrograms",
1221
"Info",
1322
"State",
1423
"Device",

src/bsblan/bsblan.py

Lines changed: 68 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,15 @@
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+
)
3846
from .utility import APIValidator
3947

4048
if 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

src/bsblan/models.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,20 @@
1414
from bsblan.constants import TEMPERATURE_UNITS
1515

1616

17+
@dataclass
18+
class DHWTimeSwitchPrograms:
19+
"""Dataclass for DHW time switch programs."""
20+
21+
monday: str | None = None
22+
tuesday: str | None = None
23+
wednesday: str | None = None
24+
thursday: str | None = None
25+
friday: str | None = None
26+
saturday: str | None = None
27+
sunday: str | None = None
28+
standard_values: str | None = None
29+
30+
1731
class DataType(IntEnum):
1832
"""Enumeration of BSB-LAN data types."""
1933

@@ -163,7 +177,7 @@ class Sensor(DataClassJSONMixin):
163177

164178

165179
@dataclass
166-
class HotWaterState(DataClassJSONMixin):
180+
class HotWaterState(DataClassJSONMixin): # pylint: disable=too-many-instance-attributes
167181
"""Object holds info about object for hot water climate."""
168182

169183
operating_mode: EntityInfo | None = None

0 commit comments

Comments
 (0)