1 """Provides a select platform for Home Connect."""
6 from homeconnect.api
import HomeConnectError
14 HomeConnectConfigEntry,
15 bsh_key_to_translation_key,
16 get_dict_from_home_connect_error,
18 from .api
import HomeConnectDevice
20 APPLIANCES_WITH_PROGRAMS,
26 from .entity
import HomeConnectEntity
28 _LOGGER = logging.getLogger(__name__)
30 TRANSLATION_KEYS_PROGRAMS_MAP = {
33 "ConsumerProducts.CleaningRobot.Program.Cleaning.CleanAll",
34 "ConsumerProducts.CleaningRobot.Program.Cleaning.CleanMap",
35 "ConsumerProducts.CleaningRobot.Program.Basic.GoHome",
36 "ConsumerProducts.CoffeeMaker.Program.Beverage.Ristretto",
37 "ConsumerProducts.CoffeeMaker.Program.Beverage.Espresso",
38 "ConsumerProducts.CoffeeMaker.Program.Beverage.EspressoDoppio",
39 "ConsumerProducts.CoffeeMaker.Program.Beverage.Coffee",
40 "ConsumerProducts.CoffeeMaker.Program.Beverage.XLCoffee",
41 "ConsumerProducts.CoffeeMaker.Program.Beverage.CaffeGrande",
42 "ConsumerProducts.CoffeeMaker.Program.Beverage.EspressoMacchiato",
43 "ConsumerProducts.CoffeeMaker.Program.Beverage.Cappuccino",
44 "ConsumerProducts.CoffeeMaker.Program.Beverage.LatteMacchiato",
45 "ConsumerProducts.CoffeeMaker.Program.Beverage.CaffeLatte",
46 "ConsumerProducts.CoffeeMaker.Program.Beverage.MilkFroth",
47 "ConsumerProducts.CoffeeMaker.Program.Beverage.WarmMilk",
48 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.KleinerBrauner",
49 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.GrosserBrauner",
50 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.Verlaengerter",
51 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.VerlaengerterBraun",
52 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.WienerMelange",
53 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.FlatWhite",
54 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.Cortado",
55 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.CafeCortado",
56 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.CafeConLeche",
57 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.CafeAuLait",
58 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.Doppio",
59 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.Kaapi",
60 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.KoffieVerkeerd",
61 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.Galao",
62 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.Garoto",
63 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.Americano",
64 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.RedEye",
65 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.BlackEye",
66 "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.DeadEye",
67 "ConsumerProducts.CoffeeMaker.Program.Beverage.HotWater",
68 "Dishcare.Dishwasher.Program.PreRinse",
69 "Dishcare.Dishwasher.Program.Auto1",
70 "Dishcare.Dishwasher.Program.Auto2",
71 "Dishcare.Dishwasher.Program.Auto3",
72 "Dishcare.Dishwasher.Program.Eco50",
73 "Dishcare.Dishwasher.Program.Quick45",
74 "Dishcare.Dishwasher.Program.Intensiv70",
75 "Dishcare.Dishwasher.Program.Normal65",
76 "Dishcare.Dishwasher.Program.Glas40",
77 "Dishcare.Dishwasher.Program.GlassCare",
78 "Dishcare.Dishwasher.Program.NightWash",
79 "Dishcare.Dishwasher.Program.Quick65",
80 "Dishcare.Dishwasher.Program.Normal45",
81 "Dishcare.Dishwasher.Program.Intensiv45",
82 "Dishcare.Dishwasher.Program.AutoHalfLoad",
83 "Dishcare.Dishwasher.Program.IntensivPower",
84 "Dishcare.Dishwasher.Program.MagicDaily",
85 "Dishcare.Dishwasher.Program.Super60",
86 "Dishcare.Dishwasher.Program.Kurz60",
87 "Dishcare.Dishwasher.Program.ExpressSparkle65",
88 "Dishcare.Dishwasher.Program.MachineCare",
89 "Dishcare.Dishwasher.Program.SteamFresh",
90 "Dishcare.Dishwasher.Program.MaximumCleaning",
91 "Dishcare.Dishwasher.Program.MixedLoad",
92 "LaundryCare.Dryer.Program.Cotton",
93 "LaundryCare.Dryer.Program.Synthetic",
94 "LaundryCare.Dryer.Program.Mix",
95 "LaundryCare.Dryer.Program.Blankets",
96 "LaundryCare.Dryer.Program.BusinessShirts",
97 "LaundryCare.Dryer.Program.DownFeathers",
98 "LaundryCare.Dryer.Program.Hygiene",
99 "LaundryCare.Dryer.Program.Jeans",
100 "LaundryCare.Dryer.Program.Outdoor",
101 "LaundryCare.Dryer.Program.SyntheticRefresh",
102 "LaundryCare.Dryer.Program.Towels",
103 "LaundryCare.Dryer.Program.Delicates",
104 "LaundryCare.Dryer.Program.Super40",
105 "LaundryCare.Dryer.Program.Shirts15",
106 "LaundryCare.Dryer.Program.Pillow",
107 "LaundryCare.Dryer.Program.AntiShrink",
108 "LaundryCare.Dryer.Program.MyTime.MyDryingTime",
109 "LaundryCare.Dryer.Program.TimeCold",
110 "LaundryCare.Dryer.Program.TimeWarm",
111 "LaundryCare.Dryer.Program.InBasket",
112 "LaundryCare.Dryer.Program.TimeColdFix.TimeCold20",
113 "LaundryCare.Dryer.Program.TimeColdFix.TimeCold30",
114 "LaundryCare.Dryer.Program.TimeColdFix.TimeCold60",
115 "LaundryCare.Dryer.Program.TimeWarmFix.TimeWarm30",
116 "LaundryCare.Dryer.Program.TimeWarmFix.TimeWarm40",
117 "LaundryCare.Dryer.Program.TimeWarmFix.TimeWarm60",
118 "LaundryCare.Dryer.Program.Dessous",
119 "Cooking.Common.Program.Hood.Automatic",
120 "Cooking.Common.Program.Hood.Venting",
121 "Cooking.Common.Program.Hood.DelayedShutOff",
122 "Cooking.Oven.Program.HeatingMode.PreHeating",
123 "Cooking.Oven.Program.HeatingMode.HotAir",
124 "Cooking.Oven.Program.HeatingMode.HotAirEco",
125 "Cooking.Oven.Program.HeatingMode.HotAirGrilling",
126 "Cooking.Oven.Program.HeatingMode.TopBottomHeating",
127 "Cooking.Oven.Program.HeatingMode.TopBottomHeatingEco",
128 "Cooking.Oven.Program.HeatingMode.BottomHeating",
129 "Cooking.Oven.Program.HeatingMode.PizzaSetting",
130 "Cooking.Oven.Program.HeatingMode.SlowCook",
131 "Cooking.Oven.Program.HeatingMode.IntensiveHeat",
132 "Cooking.Oven.Program.HeatingMode.KeepWarm",
133 "Cooking.Oven.Program.HeatingMode.PreheatOvenware",
134 "Cooking.Oven.Program.HeatingMode.FrozenHeatupSpecial",
135 "Cooking.Oven.Program.HeatingMode.Desiccation",
136 "Cooking.Oven.Program.HeatingMode.Defrost",
137 "Cooking.Oven.Program.HeatingMode.Proof",
138 "Cooking.Oven.Program.HeatingMode.HotAir30Steam",
139 "Cooking.Oven.Program.HeatingMode.HotAir60Steam",
140 "Cooking.Oven.Program.HeatingMode.HotAir80Steam",
141 "Cooking.Oven.Program.HeatingMode.HotAir100Steam",
142 "Cooking.Oven.Program.HeatingMode.SabbathProgramme",
143 "Cooking.Oven.Program.Microwave.90Watt",
144 "Cooking.Oven.Program.Microwave.180Watt",
145 "Cooking.Oven.Program.Microwave.360Watt",
146 "Cooking.Oven.Program.Microwave.600Watt",
147 "Cooking.Oven.Program.Microwave.900Watt",
148 "Cooking.Oven.Program.Microwave.1000Watt",
149 "Cooking.Oven.Program.Microwave.Max",
150 "Cooking.Oven.Program.HeatingMode.WarmingDrawer",
151 "LaundryCare.Washer.Program.Cotton",
152 "LaundryCare.Washer.Program.Cotton.CottonEco",
153 "LaundryCare.Washer.Program.Cotton.Eco4060",
154 "LaundryCare.Washer.Program.Cotton.Colour",
155 "LaundryCare.Washer.Program.EasyCare",
156 "LaundryCare.Washer.Program.Mix",
157 "LaundryCare.Washer.Program.Mix.NightWash",
158 "LaundryCare.Washer.Program.DelicatesSilk",
159 "LaundryCare.Washer.Program.Wool",
160 "LaundryCare.Washer.Program.Sensitive",
161 "LaundryCare.Washer.Program.Auto30",
162 "LaundryCare.Washer.Program.Auto40",
163 "LaundryCare.Washer.Program.Auto60",
164 "LaundryCare.Washer.Program.Chiffon",
165 "LaundryCare.Washer.Program.Curtains",
166 "LaundryCare.Washer.Program.DarkWash",
167 "LaundryCare.Washer.Program.Dessous",
168 "LaundryCare.Washer.Program.Monsoon",
169 "LaundryCare.Washer.Program.Outdoor",
170 "LaundryCare.Washer.Program.PlushToy",
171 "LaundryCare.Washer.Program.ShirtsBlouses",
172 "LaundryCare.Washer.Program.SportFitness",
173 "LaundryCare.Washer.Program.Towels",
174 "LaundryCare.Washer.Program.WaterProof",
175 "LaundryCare.Washer.Program.PowerSpeed59",
176 "LaundryCare.Washer.Program.Super153045.Super15",
177 "LaundryCare.Washer.Program.Super153045.Super1530",
178 "LaundryCare.Washer.Program.DownDuvet.Duvet",
179 "LaundryCare.Washer.Program.Rinse.RinseSpinDrain",
180 "LaundryCare.Washer.Program.DrumClean",
181 "LaundryCare.WasherDryer.Program.Cotton",
182 "LaundryCare.WasherDryer.Program.Cotton.Eco4060",
183 "LaundryCare.WasherDryer.Program.Mix",
184 "LaundryCare.WasherDryer.Program.EasyCare",
185 "LaundryCare.WasherDryer.Program.WashAndDry60",
186 "LaundryCare.WasherDryer.Program.WashAndDry90",
190 PROGRAMS_TRANSLATION_KEYS_MAP = {
191 value: key
for key, value
in TRANSLATION_KEYS_PROGRAMS_MAP.items()
194 PROGRAM_SELECT_ENTITY_DESCRIPTIONS = (
196 key=BSH_ACTIVE_PROGRAM,
197 translation_key=
"active_program",
200 key=BSH_SELECTED_PROGRAM,
201 translation_key=
"selected_program",
208 entry: HomeConnectConfigEntry,
209 async_add_entities: AddEntitiesCallback,
211 """Set up the Home Connect select entities."""
213 def get_entities() -> list[HomeConnectProgramSelectEntity]:
214 """Get a list of entities."""
215 entities: list[HomeConnectProgramSelectEntity] = []
216 programs_not_found = set()
217 for device
in entry.runtime_data.devices:
218 if device.appliance.type
in APPLIANCES_WITH_PROGRAMS:
219 with contextlib.suppress(HomeConnectError):
220 programs = device.appliance.get_programs_available()
222 for program
in programs:
223 if program
not in PROGRAMS_TRANSLATION_KEYS_MAP:
224 programs.remove(program)
225 if program
not in programs_not_found:
227 'The program "%s" is not part of the official Home Connect API specification',
230 programs_not_found.add(program)
233 for desc
in PROGRAM_SELECT_ENTITY_DESCRIPTIONS
241 """Select class for Home Connect programs."""
245 device: HomeConnectDevice,
247 desc: SelectEntityDescription,
249 """Initialize the entity."""
255 PROGRAMS_TRANSLATION_KEYS_MAP[program]
for program
in programs
260 """Update the program selection status."""
261 program = self.
devicedevice.appliance.status.get(self.
bsh_keybsh_key, {}).
get(ATTR_VALUE)
263 program_translation_key =
None
265 program_translation_key := PROGRAMS_TRANSLATION_KEYS_MAP.get(program)
268 'The program "%s" is not part of the official Home Connect API specification',
275 """Select new program."""
276 bsh_key = TRANSLATION_KEYS_PROGRAMS_MAP[option]
278 "Starting program: %s" if self.
start_on_selectstart_on_select
else "Selecting program: %s",
282 target = self.
devicedevice.appliance.start_program
284 target = self.
devicedevice.appliance.select_program
286 await self.
hasshass.async_add_executor_job(target, bsh_key)
287 except HomeConnectError
as err:
289 translation_key =
"start_program"
291 translation_key =
"select_program"
293 translation_domain=DOMAIN,
294 translation_key=translation_key,
295 translation_placeholders={
None async_entity_update(self)
None __init__(self, HomeConnectDevice device, list[str] programs, SelectEntityDescription desc)
None async_select_option(self, str option)
list[BaseAprilaireSensor] get_entities(type[BaseAprilaireSensor] entity_class, AprilaireCoordinator coordinator, str unique_id, tuple[AprilaireSensorDescription,...] descriptions)
web.Response get(self, web.Request request, str config_key)
None async_setup_entry(HomeAssistant hass, HomeConnectConfigEntry entry, AddEntitiesCallback async_add_entities)
dict[str, Any] get_dict_from_home_connect_error(api.HomeConnectError err)
str bsh_key_to_translation_key(str bsh_key)