@@ -198,10 +198,14 @@ def _device_data_adam(self, device: DeviceData, data: DeviceData) -> None:
198198 ):
199199 data ["binary_sensors" ]["heating_state" ] = self ._heating_valves () != 0
200200
201- # Show the allowed regulation modes for Adam
202- if device ["dev_class" ] == "gateway" and self ._reg_allowed_modes :
203- data ["regulation_modes" ] = self ._reg_allowed_modes
204- self ._count += 1
201+ # Show the allowed regulation modes and gateway_modes
202+ if device ["dev_class" ] == "gateway" :
203+ if self ._reg_allowed_modes :
204+ data ["regulation_modes" ] = self ._reg_allowed_modes
205+ self ._count += 1
206+ if self ._gw_allowed_modes :
207+ data ["gateway_modes" ] = self ._gw_allowed_modes
208+ self ._count += 1
205209
206210 # Control_state, only for Adam master thermostats
207211 if device ["dev_class" ] in ZONE_THERMOSTATS :
@@ -862,6 +866,29 @@ async def set_switch_state(
862866
863867 await self ._request (uri , method = "put" , data = data )
864868
869+ async def set_gateway_mode (self , mode : str ) -> None :
870+ """Set the gateway mode."""
871+ if mode not in self ._gw_allowed_modes :
872+ raise PlugwiseError ("Plugwise: invalid gateway mode." )
873+
874+ time_1 = dt .datetime .now (dt .UTC )
875+ away_time = time_1 .isoformat (timespec = "milliseconds" ) + "Z"
876+ time_2 = str (dt .date .today () - dt .timedelta (1 ))
877+ vacation_time = time_2 + "T23:00:00.000Z"
878+ end_time = "2037-04-21T08:00:53.000Z"
879+ valid = ""
880+ if mode == "away" :
881+ valid = (
882+ f"<valid_from>{ away_time } </valid_from><valid_to>{ end_time } </valid_to>"
883+ )
884+ if mode == "vacation" :
885+ valid = f"<valid_from>{ vacation_time } </valid_from><valid_to>{ end_time } </valid_to>"
886+
887+ uri = f"{ APPLIANCES } ;type=gateway/gateway_mode_control"
888+ data = f"<gateway_mode_control_functionality><mode>{ mode } </mode>{ valid } </gateway_mode_control_functionality>"
889+
890+ await self ._request (uri , method = "put" , data = data )
891+
865892 async def set_regulation_mode (self , mode : str ) -> None :
866893 """Set the heating regulation mode."""
867894 if mode not in self ._reg_allowed_modes :
0 commit comments