Skip to content

Commit f8d899d

Browse files
committed
clear codes
1 parent 561dbe5 commit f8d899d

File tree

8 files changed

+3
-305
lines changed

8 files changed

+3
-305
lines changed

custom_components/xiaomi_miot/__init__.py

Lines changed: 1 addition & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,12 +1335,8 @@ def turn_off(self, **kwargs):
13351335

13361336
def _update_sub_entities(self, properties, services=None, domain=None, option=None, **kwargs):
13371337
actions = kwargs.get('actions', [])
1338-
from .sensor import MiotSensorSubEntity
1339-
from .binary_sensor import MiotBinarySensorSubEntity
1340-
from .switch import MiotSwitchSubEntity
13411338
from .light import MiotLightSubEntity
1342-
from .fan import (MiotFanSubEntity, MiotModesSubEntity)
1343-
from .cover import MiotCoverSubEntity
1339+
from .fan import MiotFanSubEntity
13441340
if isinstance(services, MiotService):
13451341
sls = [services]
13461342
elif services == '*':
@@ -1351,17 +1347,8 @@ def _update_sub_entities(self, properties, services=None, domain=None, option=No
13511347
sls = [properties.service]
13521348
else:
13531349
sls = [self._miot_service]
1354-
add_sensors = self._add_entities.get('sensor')
1355-
add_binary_sensors = self._add_entities.get('binary_sensor')
1356-
add_switches = self._add_entities.get('switch')
13571350
add_lights = self._add_entities.get('light')
13581351
add_fans = self._add_entities.get('fan')
1359-
add_covers = self._add_entities.get('cover')
1360-
add_numbers = self._add_entities.get('number')
1361-
add_selects = self._add_entities.get('select')
1362-
add_buttons = self._add_entities.get('button')
1363-
add_texts = self._add_entities.get('text')
1364-
add_device_trackers = self._add_entities.get('device_tracker')
13651352
exclude_services = self._state_attrs.get('exclude_miot_services') or []
13661353
for s in sls:
13671354
if s.name in exclude_services:
@@ -1390,88 +1377,6 @@ def _update_sub_entities(self, properties, services=None, domain=None, option=No
13901377
if new and fnm in self._subs:
13911378
self._check_same_sub_entity(fnm, domain, add=1)
13921379
self.logger.debug('%s: Added sub entity %s: %s', self.name_model, domain, fnm)
1393-
continue
1394-
pls = []
1395-
if isinstance(properties, MiotProperty):
1396-
pls = [properties]
1397-
if properties:
1398-
pls.extend(s.get_properties(*cv.ensure_list(properties)))
1399-
if actions:
1400-
pls.extend(s.get_actions(*cv.ensure_list(actions)))
1401-
for p in pls:
1402-
fnm = p.unique_name
1403-
opt = {
1404-
'unique_id': f'{self.unique_did}-{fnm}',
1405-
**(option or {}),
1406-
}
1407-
tms = self._check_same_sub_entity(fnm, domain)
1408-
new = True
1409-
if fnm in self._subs:
1410-
new = False
1411-
self._subs[fnm].update_from_parent()
1412-
self._check_same_sub_entity(fnm, domain, add=1)
1413-
elif tms > 0:
1414-
if tms <= 1:
1415-
self.logger.info('%s: Device sub entity %s: %s already exists.', self.name_model, domain, fnm)
1416-
elif isinstance(p, MiotAction):
1417-
"""migrate to converter"""
1418-
elif add_buttons and domain == 'button' and (p.value_list or p.is_bool):
1419-
from .button import MiotButtonSubEntity
1420-
nls = []
1421-
f = fnm
1422-
for pv in p.value_list:
1423-
vk = pv.get('value')
1424-
f = f'{fnm}-{vk}'
1425-
if f in self._subs:
1426-
new = False
1427-
continue
1428-
self._subs[f] = MiotButtonSubEntity(self, p, vk, option=opt)
1429-
nls.append(self._subs[f])
1430-
if p.is_bool:
1431-
self._subs[f] = MiotButtonSubEntity(self, p, True, option=opt)
1432-
nls.append(self._subs[f])
1433-
if nls:
1434-
add_buttons(nls, update_before_add=True)
1435-
new = True
1436-
fnm = f
1437-
elif p.full_name not in self._state_attrs and not p.writeable and not kwargs.get('whatever'):
1438-
continue
1439-
elif add_switches and domain == 'switch' and (p.format in ['bool', 'uint8']) and p.writeable:
1440-
self._subs[fnm] = MiotSwitchSubEntity(self, p, option=opt)
1441-
add_switches([self._subs[fnm]], update_before_add=True)
1442-
elif add_binary_sensors and domain == 'binary_sensor' and (p.is_bool or p.is_integer):
1443-
self._subs[fnm] = MiotBinarySensorSubEntity(self, p, option=opt)
1444-
add_binary_sensors([self._subs[fnm]], update_before_add=True)
1445-
elif add_sensors and domain == 'sensor':
1446-
if p.full_name == self._state_attrs.get('state_property'):
1447-
continue
1448-
self._subs[fnm] = MiotSensorSubEntity(self, p, option=opt)
1449-
add_sensors([self._subs[fnm]], update_before_add=True)
1450-
elif add_fans and domain == 'fan':
1451-
self._subs[fnm] = MiotModesSubEntity(self, p, option=opt)
1452-
add_fans([self._subs[fnm]], update_before_add=True)
1453-
elif add_covers and domain == 'cover':
1454-
self._subs[fnm] = MiotCoverSubEntity(self, p, option=opt)
1455-
add_covers([self._subs[fnm]], update_before_add=True)
1456-
elif add_numbers and domain in ['number', 'number_select'] and p.value_range:
1457-
from .number import MiotNumberSubEntity
1458-
self._subs[fnm] = MiotNumberSubEntity(self, p, option=opt)
1459-
add_numbers([self._subs[fnm]], update_before_add=True)
1460-
elif add_selects and domain in ['select', 'number_select'] and (p.value_list or p.value_range):
1461-
from .select import MiotSelectSubEntity
1462-
self._subs[fnm] = MiotSelectSubEntity(self, p, option=opt)
1463-
add_selects([self._subs[fnm]], update_before_add=True)
1464-
elif add_texts and domain == 'text' and p.writeable:
1465-
from .text import MiotTextSubEntity
1466-
self._subs[fnm] = MiotTextSubEntity(self, p, option=opt)
1467-
add_texts([self._subs[fnm]], update_before_add=True)
1468-
elif add_device_trackers and domain == 'scanner' and (p.is_bool or p.is_integer):
1469-
from .device_tracker import MiotScannerSubEntity
1470-
self._subs[fnm] = MiotScannerSubEntity(self, p, option=opt)
1471-
add_device_trackers([self._subs[fnm]], update_before_add=True)
1472-
if new and fnm in self._subs:
1473-
self._check_same_sub_entity(fnm, domain, add=1)
1474-
self.logger.debug('%s: Added sub entity %s: %s', self.name_model, domain, fnm)
14751380

14761381
async def async_get_device_data(self, key, did=None, throw=False, **kwargs):
14771382
if did is None:

custom_components/xiaomi_miot/binary_sensor.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -355,9 +355,3 @@ async def async_update(self):
355355
adt[self._prop_state.full_name] = self._state
356356
if adt:
357357
await self.async_update_attrs(adt)
358-
359-
360-
class MiotBinarySensorSubEntity(MiotPropertySubEntity, ToggleSubEntity, BaseEntity):
361-
def __init__(self, parent, miot_property: MiotProperty, option=None):
362-
ToggleSubEntity.__init__(self, parent, miot_property.full_name, option)
363-
super().__init__(parent, miot_property, option, domain=ENTITY_DOMAIN)

custom_components/xiaomi_miot/core/device_customizes.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1020,6 +1020,7 @@
10201020
'exclude_miot_services': 'battery',
10211021
},
10221022
'midr.rv_mirror.*': {
1023+
'binary_sensor_properties': 'driving_status',
10231024
'miio_cloud_props': 'Status,Position',
10241025
'miio_cloud_props_template': 'midr_rv_mirror_cloud_props',
10251026
},
@@ -1599,7 +1600,7 @@
15991600
'number_properties': 'target_temperature,boost_value',
16001601
},
16011602
'xiaomi.wifispeaker.*': {
1602-
'switch_properties': 'sleep_mode,no_disturb',
1603+
'switch_properties': 'on,sleep_mode,no_disturb',
16031604
'button_actions': 'wake_up,play_music,tv_switchon,stop_alarm',
16041605
'text_actions': 'play_text,execute_text_directive',
16051606
},

custom_components/xiaomi_miot/cover.py

Lines changed: 0 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -246,99 +246,3 @@ def stop_cover(self, **kwargs):
246246
val = self._prop_motor_control.list_first('Pause', 'Stop')
247247
val = self.custom_config_integer('stop_cover_value', val)
248248
return self.set_property(self._prop_motor_control, val)
249-
250-
251-
class MiotCoverSubEntity(MiotPropertySubEntity, CoverEntity):
252-
def __init__(self, parent, miot_property: MiotProperty, option=None):
253-
super().__init__(parent, miot_property, option, domain=ENTITY_DOMAIN)
254-
self._prop_status = self._option.get('status_property')
255-
if self._prop_status:
256-
self._option['keys'] = [*(self._option.get('keys') or []), self._prop_status.full_name]
257-
self._prop_target_position = self._miot_service.get_property('target_position')
258-
self._value_open = self._miot_property.list_first('Open', 'Up', 'All-up', 'Rise')
259-
self._value_close = self._miot_property.list_first('Close', 'Down', 'All-down')
260-
self._value_stop = self._miot_property.list_first('Pause', 'Stop')
261-
if self._value_open is not None:
262-
self._supported_features |= CoverEntityFeature.OPEN
263-
if self._value_close is not None:
264-
self._supported_features |= CoverEntityFeature.CLOSE
265-
if self._value_stop is not None:
266-
self._supported_features |= CoverEntityFeature.STOP
267-
if self._prop_target_position:
268-
self._supported_features |= CoverEntityFeature.SET_POSITION
269-
if self._miot_property.value_range:
270-
self._supported_features |= CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE
271-
self._supported_features |= CoverEntityFeature.SET_POSITION
272-
273-
@property
274-
def current_cover_position(self):
275-
"""Return current position of cover.
276-
None is unknown, 0 is closed, 100 is fully open.
277-
"""
278-
if self._miot_property.value_range:
279-
val = round(self._miot_property.from_dict(self._state_attrs) or -1, 2)
280-
top = self._miot_property.range_max()
281-
return round(val / top * 100)
282-
283-
prop = self._miot_service.get_property('current_position')
284-
if self.custom_config_bool('target2current_position'):
285-
prop = self._miot_service.get_property('target_position') or prop
286-
if prop:
287-
return round(prop.from_dict(self._state_attrs) or -1)
288-
return None
289-
290-
def set_cover_position(self, **kwargs):
291-
"""Move the cover to a specific position."""
292-
pos = round(kwargs.get(ATTR_POSITION) or 0)
293-
if self._prop_target_position:
294-
return self.set_parent_property(pos, self._prop_target_position)
295-
if self._miot_property.value_range:
296-
stp = self._miot_property.range_step()
297-
top = self._miot_property.range_max()
298-
pos = round(top * (pos / 100) / stp) * stp
299-
return self.set_parent_property(pos)
300-
raise NotImplementedError()
301-
302-
@property
303-
def is_closed(self):
304-
"""Return if the cover is closed or not."""
305-
if self._prop_status:
306-
val = self._prop_status.from_dict(self._state_attrs)
307-
vls = self._prop_status.list_search('Closed', 'Down')
308-
if vls and val is not None:
309-
return val in vls
310-
pos = self.current_cover_position
311-
if pos is not None and pos >= 0:
312-
return pos <= 0
313-
return None
314-
315-
def open_cover(self, **kwargs):
316-
"""Open the cover."""
317-
val = None
318-
if self._miot_property.value_list:
319-
val = self._value_open
320-
elif self._miot_property.value_range:
321-
val = self._miot_property.range_max()
322-
if val is not None:
323-
return self.set_parent_property(val)
324-
raise NotImplementedError()
325-
326-
def close_cover(self, **kwargs):
327-
"""Close cover."""
328-
val = None
329-
if self._miot_property.value_list:
330-
val = self._value_close
331-
elif self._miot_property.value_range:
332-
val = self._miot_property.range_min()
333-
if val is not None:
334-
return self.set_parent_property(val)
335-
raise NotImplementedError()
336-
337-
def stop_cover(self, **kwargs):
338-
"""Stop the cover."""
339-
val = None
340-
if self._miot_property.value_list:
341-
val = self._value_stop
342-
if val is not None:
343-
return self.set_parent_property(val)
344-
raise NotImplementedError()

custom_components/xiaomi_miot/device_tracker.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,6 @@ async def async_update(self):
119119
self._attr_location_name = prop.from_dict(self._state_attrs)
120120
await self.transform_coord()
121121

122-
for p in self._miot_service.get_properties('driving_status'):
123-
self._update_sub_entities(p, None, 'binary_sensor')
124-
125122
async def transform_coord(self, default=None):
126123
if not (self._attr_latitude or self._attr_longitude):
127124
return

custom_components/xiaomi_miot/media_player.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,6 @@ def __init__(self, config: dict, miot_service: MiotService):
339339
self._message_router = miot_service.spec.get_service('message_router')
340340
self.xiaoai_cloud = None
341341
self.xiaoai_device = None
342-
if self._intelligent_speaker:
343-
self._state_attrs[ATTR_ATTRIBUTION] = 'Support TTS through service'
344342
self._supported_features |= MediaPlayerEntityFeature.PLAY_MEDIA
345343

346344
@property
@@ -360,7 +358,6 @@ async def async_update(self):
360358
await super().async_update()
361359
if not self._available:
362360
return
363-
self._update_sub_entities('on', domain='switch')
364361

365362
if self._prop_state and not self._prop_state.readable:
366363
if self.is_volume_muted is False:

custom_components/xiaomi_miot/sensor.py

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -338,45 +338,6 @@ def update(self, data=None):
338338
self._extra_attrs['updated_time'] = now
339339

340340

341-
class MiotSensorSubEntity(MiotPropertySubEntity, BaseSensorSubEntity):
342-
def __init__(self, parent, miot_property: MiotProperty, option=None):
343-
super().__init__(parent, miot_property, option, domain=ENTITY_DOMAIN)
344-
self._attr_state_class = miot_property.state_class
345-
346-
self._prop_battery = None
347-
for s in self._miot_service.spec.get_services('battery', self._miot_service.name):
348-
p = s.get_property('battery_level')
349-
if p:
350-
self._prop_battery = p
351-
if self._prop_battery:
352-
self._option['keys'] = [*(self._option.get('keys') or []), self._prop_battery.full_name]
353-
354-
async def async_added_to_hass(self):
355-
await BaseSensorSubEntity.async_added_to_hass(self)
356-
357-
def update(self, data=None):
358-
super().update(data)
359-
if not self._available:
360-
return
361-
self.update_with_properties()
362-
self._miot_property.description_to_dict(self._state_attrs)
363-
364-
@property
365-
def native_value(self):
366-
if not self._attr_native_unit_of_measurement:
367-
key = f'{self._miot_property.full_name}_desc'
368-
if key in self._state_attrs:
369-
return f'{self._state_attrs[key]}'.lower()
370-
val = self._miot_property.from_dict(self._state_attrs)
371-
if val is not None:
372-
svd = self.custom_config_number('value_ratio') or 0
373-
if svd:
374-
val = round(float(val) * svd, 3)
375-
elif self.device_class in [SensorDeviceClass.HUMIDITY, SensorDeviceClass.TEMPERATURE]:
376-
val = round(float(val), 3)
377-
return val
378-
379-
380341
class MihomeMessageSensor(MiCoordinatorEntity, BaseEntity, RestoreEntity):
381342
_filter_homes = None
382343
_exclude_types = None

custom_components/xiaomi_miot/switch.py

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -121,67 +121,6 @@ def update(self, data=None):
121121
super().update(data)
122122

123123

124-
class MiotSwitchSubEntity(MiotPropertySubEntity, SwitchSubEntity):
125-
def __init__(self, parent, miot_property: MiotProperty, option=None):
126-
super().__init__(parent, miot_property, option, domain=ENTITY_DOMAIN)
127-
self._name = self.format_name_by_property(miot_property)
128-
self._prop_power = self._miot_service.get_property('on', 'power')
129-
if self._prop_power:
130-
self._option['keys'] = [*(self._option.get('keys') or []), self._prop_power.full_name]
131-
self._option['icon'] = self._prop_power.entity_icon or self._option.get('icon')
132-
self._on_descriptions = ['On', 'Open', 'Enable', 'Enabled', 'Yes', '开', '打开']
133-
if des := self.custom_config_list('descriptions_for_on'):
134-
self._on_descriptions = des
135-
136-
@property
137-
def is_on(self):
138-
val = self._miot_property.from_dict(self._state_attrs)
139-
if self._miot_property.value_list:
140-
if val is not None:
141-
self._state = val in self._miot_property.list_search(*self._on_descriptions)
142-
elif self._miot_property.value_range:
143-
if self._miot_property.range_min() == 0 and self._miot_property.range_max() == 1:
144-
self._state = val == self._miot_property.range_max()
145-
elif self._miot_property.format in ['bool']:
146-
self._state = val
147-
148-
if self._miot_service.name in ['air_conditioner']:
149-
if self._prop_power:
150-
self._state = self._state and self._prop_power.from_dict(self._state_attrs)
151-
152-
if self._reverse_state and self._state is not None:
153-
return not self._state
154-
return self._state
155-
156-
def turn_on(self, **kwargs):
157-
val = True
158-
if self._miot_property.value_range:
159-
val = self._miot_property.range_max()
160-
if self._miot_property.value_list:
161-
ret = self._miot_property.list_first(*self._on_descriptions)
162-
val = 1 if ret is None else ret
163-
elif self._miot_property.value_range:
164-
val = self._miot_property.range_max()
165-
if self._reverse_state:
166-
val = not val
167-
return self.set_parent_property(val)
168-
169-
def turn_off(self, **kwargs):
170-
val = False
171-
if self._miot_property.value_range:
172-
val = self._miot_property.range_min()
173-
if self._miot_property.value_list:
174-
if not (des := self.custom_config_list('descriptions_for_off')):
175-
des = ['Off', 'Close', 'Closed', '关', '关闭']
176-
ret = self._miot_property.list_first(*des)
177-
val = 0 if ret is None else ret
178-
elif self._miot_property.value_range:
179-
val = self._miot_property.range_min()
180-
if self._reverse_state:
181-
val = not val
182-
return self.set_parent_property(val)
183-
184-
185124
class MiotSwitchActionSubEntity(MiotPropertySubEntity, SwitchSubEntity):
186125
def __init__(self, parent, miot_property: MiotProperty, miot_action: MiotAction, option=None):
187126
SwitchSubEntity.__init__(self, parent, miot_action.full_name, option)

0 commit comments

Comments
 (0)