🚀 Add Service calls for custom capabilities
This commit is contained in:
		
							parent
							
								
									08e8f2645d
								
							
						
					
					
						commit
						252d3855ca
					
				|  | @ -60,6 +60,8 @@ class SoundbarDevice: | ||||||
|     async def update(self): |     async def update(self): | ||||||
|         await self.device.status.refresh() |         await self.device.status.refresh() | ||||||
| 
 | 
 | ||||||
|  |         await self._update_media() | ||||||
|  | 
 | ||||||
|         if self.__enable_soundmode: |         if self.__enable_soundmode: | ||||||
|             await self._update_soundmode() |             await self._update_soundmode() | ||||||
|         if self.__enable_advanced_audio: |         if self.__enable_advanced_audio: | ||||||
|  |  | ||||||
|  | @ -8,6 +8,9 @@ from homeassistant.components.media_player import ( | ||||||
| from homeassistant.components.media_player.const import MediaPlayerEntityFeature | from homeassistant.components.media_player.const import MediaPlayerEntityFeature | ||||||
| from homeassistant.helpers.aiohttp_client import async_get_clientsession | from homeassistant.helpers.aiohttp_client import async_get_clientsession | ||||||
| from homeassistant.helpers.entity import DeviceInfo, generate_entity_id | from homeassistant.helpers.entity import DeviceInfo, generate_entity_id | ||||||
|  | from homeassistant.helpers import config_validation as cv, entity_platform, selector | ||||||
|  | import voluptuous as vol | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| from .api_extension.SoundbarDevice import SoundbarDevice | from .api_extension.SoundbarDevice import SoundbarDevice | ||||||
| from .const import ( | from .const import ( | ||||||
|  | @ -40,9 +43,47 @@ SUPPORT_SMARTTHINGS_SOUNDBAR = ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def addServices(): | ||||||
|  |     platform = entity_platform.async_get_current_platform() | ||||||
|  | 
 | ||||||
|  |     platform.async_register_entity_service( | ||||||
|  |         "select_soundmode", | ||||||
|  |         cv.make_entity_service_schema({vol.Required("sound_mode"): str}), | ||||||
|  |         SmartThingsSoundbarMediaPlayer.async_select_sound_mode.__name__, | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     platform.async_register_entity_service( | ||||||
|  |         "set_woofer_level", | ||||||
|  |         cv.make_entity_service_schema( | ||||||
|  |             {vol.Required("level"): vol.All(int, vol.Range(min=-12, max=6))} | ||||||
|  |         ), | ||||||
|  |         SmartThingsSoundbarMediaPlayer.async_set_woofer_level.__name__, | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     platform.async_register_entity_service( | ||||||
|  |         "set_night_mode", | ||||||
|  |         cv.make_entity_service_schema({vol.Required("enabled"): bool}), | ||||||
|  |         SmartThingsSoundbarMediaPlayer.async_set_night_mode.__name__, | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     platform.async_register_entity_service( | ||||||
|  |         "set_bass_enhancer", | ||||||
|  |         cv.make_entity_service_schema({vol.Required("enabled"): bool}), | ||||||
|  |         SmartThingsSoundbarMediaPlayer.async_set_bass_mode.__name__, | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     platform.async_register_entity_service( | ||||||
|  |         "set_voice_enhancer", | ||||||
|  |         cv.make_entity_service_schema({vol.Required("enabled"): bool}), | ||||||
|  |         SmartThingsSoundbarMediaPlayer.async_set_voice_mode.__name__, | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| async def async_setup_entry(hass, config_entry, async_add_entities): | async def async_setup_entry(hass, config_entry, async_add_entities): | ||||||
|     domain_data = hass.data[DOMAIN] |     domain_data = hass.data[DOMAIN] | ||||||
| 
 | 
 | ||||||
|  |     addServices() | ||||||
|  | 
 | ||||||
|     entities = [] |     entities = [] | ||||||
|     for key in domain_data.devices: |     for key in domain_data.devices: | ||||||
|         device_config: DeviceConfig = domain_data.devices[key] |         device_config: DeviceConfig = domain_data.devices[key] | ||||||
|  | @ -188,6 +229,20 @@ class SmartThingsSoundbarMediaPlayer(MediaPlayerEntity): | ||||||
|     async def async_media_stop(self): |     async def async_media_stop(self): | ||||||
|         await self.device.media_stop() |         await self.device.media_stop() | ||||||
| 
 | 
 | ||||||
|  |     # ---------- SERVICE_UTILITY ------------ | ||||||
|  | 
 | ||||||
|  |     async def async_set_woofer_level(self, level: int): | ||||||
|  |         await self.device.set_woofer(level) | ||||||
|  | 
 | ||||||
|  |     async def async_set_bass_mode(self, enabled: bool): | ||||||
|  |         await self.device.set_bass_mode(enabled) | ||||||
|  | 
 | ||||||
|  |     async def async_set_voice_mode(self, enabled: bool): | ||||||
|  |         await self.device.set_voice_amplifier(enabled) | ||||||
|  | 
 | ||||||
|  |     async def async_set_night_mode(self, enabled: bool): | ||||||
|  |         await self.device.set_night_mode(enabled) | ||||||
|  | 
 | ||||||
|     # This property can be uncommented for some extra_attributes |     # This property can be uncommented for some extra_attributes | ||||||
|     # Still enabling this can cause side-effects. |     # Still enabling this can cause side-effects. | ||||||
|     # @property |     # @property | ||||||
|  |  | ||||||
|  | @ -0,0 +1,88 @@ | ||||||
|  | 
 | ||||||
|  | select_soundmode: | ||||||
|  |   name: Select Soundmode | ||||||
|  |   description: Some Soundbars support different "sound modes". If supported you can select them here. | ||||||
|  |   target: | ||||||
|  |     device: | ||||||
|  |       integration: samsung_soundbar | ||||||
|  |   fields: | ||||||
|  |     sound_mode: | ||||||
|  |       name: Sound Mode | ||||||
|  |       description: Select the Soundmode you are interested in. | ||||||
|  |       required: true | ||||||
|  |       example: "adaptive sound" | ||||||
|  |       # The default field value | ||||||
|  |       default: "standard" | ||||||
|  |       # Selector (https://www.home-assistant.io/docs/blueprint/selectors/) to control | ||||||
|  |       # the input UI for this field | ||||||
|  |       selector: | ||||||
|  |         select: | ||||||
|  |           translation_key: "soundmode" | ||||||
|  |           options: | ||||||
|  |             - "standard" | ||||||
|  |             - "surround" | ||||||
|  |             - "game" | ||||||
|  |             - "adaptive sound" | ||||||
|  | 
 | ||||||
|  | set_woofer_level: | ||||||
|  |   name: Set Woofer level | ||||||
|  |   description: Set the subwoofer level of your soundbar | ||||||
|  |   target: | ||||||
|  |     device: | ||||||
|  |       integration: samsung_soundbar | ||||||
|  |   fields: | ||||||
|  |     level: | ||||||
|  |       name: Volume level | ||||||
|  |       required: true | ||||||
|  |       example: 3 | ||||||
|  |       default: 0 | ||||||
|  |       selector: | ||||||
|  |         number: | ||||||
|  |           min: -12 | ||||||
|  |           max: 6 | ||||||
|  |           step: 1 | ||||||
|  | 
 | ||||||
|  | set_night_mode: | ||||||
|  |   name: Set NightMode | ||||||
|  |   description: Activates / deactivates the Nightmode | ||||||
|  |   target: | ||||||
|  |     device: | ||||||
|  |       integration: samsung_soundbar | ||||||
|  |   fields: | ||||||
|  |     enabled: | ||||||
|  |       name: Enabled / Disabled | ||||||
|  |       required: true | ||||||
|  |       example: true | ||||||
|  |       default: false | ||||||
|  |       selector: | ||||||
|  |         boolean: | ||||||
|  | 
 | ||||||
|  | set_bass_enhancer: | ||||||
|  |   name: Set bass enhancement | ||||||
|  |   description: Activates / deactivates the bass enhancement | ||||||
|  |   target: | ||||||
|  |     device: | ||||||
|  |       integration: samsung_soundbar | ||||||
|  |   fields: | ||||||
|  |     enabled: | ||||||
|  |       name: Enabled / Disabled | ||||||
|  |       required: true | ||||||
|  |       example: true | ||||||
|  |       default: false | ||||||
|  |       selector: | ||||||
|  |         boolean: | ||||||
|  | 
 | ||||||
|  | set_voice_enhancer: | ||||||
|  |   name: Set voice enhancement | ||||||
|  |   description: Activates / deactivates the voice enhancement | ||||||
|  |   target: | ||||||
|  |     device: | ||||||
|  |       integration: samsung_soundbar | ||||||
|  |   fields: | ||||||
|  |     enabled: | ||||||
|  |       name: Enabled / Disabled | ||||||
|  |       required: true | ||||||
|  |       example: true | ||||||
|  |       default: false | ||||||
|  |       selector: | ||||||
|  |         boolean: | ||||||
|  | @ -33,5 +33,15 @@ | ||||||
|                 "title": "Device Settings" |                 "title": "Device Settings" | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     }, | ||||||
|  |     "selector": { | ||||||
|  |         "soundmode": { | ||||||
|  |         "options": { | ||||||
|  |             "standard": "Standard", | ||||||
|  |             "surround": "Surround", | ||||||
|  |             "game": "Gaming", | ||||||
|  |             "adaptive sound": "Adaptive Sound" | ||||||
|  |         } | ||||||
|  |         } | ||||||
|  |   } | ||||||
| } | } | ||||||
		Loading…
	
		Reference in New Issue