Skip to content

Commit 3f36eec

Browse files
committed
2 parents dc3e1a9 + 3095f1c commit 3f36eec

File tree

5 files changed

+367
-4
lines changed

5 files changed

+367
-4
lines changed

custom_components/daikin_onecta/device.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,15 @@ def device_info(self):
4646
for management_point in management_points:
4747
management_point_type = management_point["managementPointType"]
4848
if management_point_type in supported_management_point_types:
49-
mac_add = management_point["macAddress"]["value"]
50-
model = management_point["modelInfo"]["value"]
51-
sw_vers = management_point["firmwareVersion"]["value"]
49+
mp = management_point.get("macAddress")
50+
if mp is not None:
51+
mac_add = mp["value"]
52+
mi = management_point.get("modelInfo")
53+
if mi is not None:
54+
model = mi["value"]
55+
fw = management_point.get("firmwareVersion")
56+
if fw is not None:
57+
sw_vers = fw["value"]
5258

5359
return {
5460
"identifiers": {

custom_components/daikin_onecta/manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@
88
"iot_class": "cloud_polling",
99
"issue_tracker": "https://github.com/jwillemsen/daikin_onecta/issues",
1010
"requirements": [],
11-
"version": "4.1.13"
11+
"version": "4.1.14"
1212
}

tests/fixtures/homehub.json

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
[
2+
{
3+
"_id": "6a84eb95-60ea-4c21-8376-a10b3886437f",
4+
"id": "6a84eb95-60ea-4c21-8376-a10b3886437f",
5+
"type": "homehub",
6+
"deviceModel": "homehub",
7+
"isCloudConnectionUp": {
8+
"settable": false,
9+
"value": true
10+
},
11+
"managementPoints": [
12+
{
13+
"embeddedId": "gateway",
14+
"managementPointType": "gateway",
15+
"managementPointCategory": "secondary",
16+
"softwareVersion": {
17+
"settable": false,
18+
"value": "2.3.0"
19+
}
20+
}
21+
],
22+
"embeddedId": "cb4d0c17-4913-4a60-96a7-b7024c88a124",
23+
"timestamp": "2024-07-14T05:02:10.478Z"
24+
}
25+
]

tests/snapshots/test_init.ambr

+319
Original file line numberDiff line numberDiff line change
@@ -66009,6 +66009,325 @@
6600966009
'state': 'heat_pump',
6601066010
})
6601166011
# ---
66012+
# name: test_homehub[sensor.homehub_gateway_software_version-entry]
66013+
EntityRegistryEntrySnapshot({
66014+
'aliases': set({
66015+
}),
66016+
'area_id': None,
66017+
'capabilities': None,
66018+
'config_entry_id': <ANY>,
66019+
'device_class': None,
66020+
'device_id': <ANY>,
66021+
'disabled_by': None,
66022+
'domain': 'sensor',
66023+
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
66024+
'entity_id': 'sensor.homehub_gateway_software_version',
66025+
'has_entity_name': True,
66026+
'hidden_by': None,
66027+
'icon': None,
66028+
'id': <ANY>,
66029+
'name': None,
66030+
'options': dict({
66031+
}),
66032+
'original_device_class': None,
66033+
'original_icon': 'mdi:information-outline',
66034+
'original_name': 'Gateway Software Version',
66035+
'platform': 'daikin_onecta',
66036+
'supported_features': 0,
66037+
'translation_key': 'gateway_softwareversion',
66038+
'unique_id': '6a84eb95-60ea-4c21-8376-a10b3886437f_gateway_None_softwareVersion',
66039+
'unit_of_measurement': None,
66040+
})
66041+
# ---
66042+
# name: test_homehub[sensor.homehub_gateway_software_version-state]
66043+
StateSnapshot({
66044+
'attributes': ReadOnlyDict({
66045+
'friendly_name': 'homehub Gateway Software Version',
66046+
'icon': 'mdi:information-outline',
66047+
}),
66048+
'context': <ANY>,
66049+
'entity_id': 'sensor.homehub_gateway_software_version',
66050+
'last_changed': <ANY>,
66051+
'last_updated': <ANY>,
66052+
'state': '2.3.0',
66053+
})
66054+
# ---
66055+
# name: test_homehub[sensor.homehub_ratelimit_day-entry]
66056+
EntityRegistryEntrySnapshot({
66057+
'aliases': set({
66058+
}),
66059+
'area_id': None,
66060+
'capabilities': dict({
66061+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
66062+
}),
66063+
'config_entry_id': <ANY>,
66064+
'device_class': None,
66065+
'device_id': <ANY>,
66066+
'disabled_by': None,
66067+
'domain': 'sensor',
66068+
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
66069+
'entity_id': 'sensor.homehub_ratelimit_day',
66070+
'has_entity_name': True,
66071+
'hidden_by': None,
66072+
'icon': None,
66073+
'id': <ANY>,
66074+
'name': None,
66075+
'options': dict({
66076+
}),
66077+
'original_device_class': None,
66078+
'original_icon': 'mdi:information-outline',
66079+
'original_name': 'RateLimit day',
66080+
'platform': 'daikin_onecta',
66081+
'supported_features': 0,
66082+
'translation_key': None,
66083+
'unique_id': '6a84eb95-60ea-4c21-8376-a10b3886437f_limitsensor_day',
66084+
'unit_of_measurement': None,
66085+
})
66086+
# ---
66087+
# name: test_homehub[sensor.homehub_ratelimit_day-state]
66088+
StateSnapshot({
66089+
'attributes': ReadOnlyDict({
66090+
'friendly_name': 'homehub RateLimit day',
66091+
'icon': 'mdi:information-outline',
66092+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
66093+
}),
66094+
'context': <ANY>,
66095+
'entity_id': 'sensor.homehub_ratelimit_day',
66096+
'last_changed': <ANY>,
66097+
'last_updated': <ANY>,
66098+
'state': '0',
66099+
})
66100+
# ---
66101+
# name: test_homehub[sensor.homehub_ratelimit_minute-entry]
66102+
EntityRegistryEntrySnapshot({
66103+
'aliases': set({
66104+
}),
66105+
'area_id': None,
66106+
'capabilities': dict({
66107+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
66108+
}),
66109+
'config_entry_id': <ANY>,
66110+
'device_class': None,
66111+
'device_id': <ANY>,
66112+
'disabled_by': None,
66113+
'domain': 'sensor',
66114+
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
66115+
'entity_id': 'sensor.homehub_ratelimit_minute',
66116+
'has_entity_name': True,
66117+
'hidden_by': None,
66118+
'icon': None,
66119+
'id': <ANY>,
66120+
'name': None,
66121+
'options': dict({
66122+
}),
66123+
'original_device_class': None,
66124+
'original_icon': 'mdi:information-outline',
66125+
'original_name': 'RateLimit minute',
66126+
'platform': 'daikin_onecta',
66127+
'supported_features': 0,
66128+
'translation_key': None,
66129+
'unique_id': '6a84eb95-60ea-4c21-8376-a10b3886437f_limitsensor_minute',
66130+
'unit_of_measurement': None,
66131+
})
66132+
# ---
66133+
# name: test_homehub[sensor.homehub_ratelimit_minute-state]
66134+
StateSnapshot({
66135+
'attributes': ReadOnlyDict({
66136+
'friendly_name': 'homehub RateLimit minute',
66137+
'icon': 'mdi:information-outline',
66138+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
66139+
}),
66140+
'context': <ANY>,
66141+
'entity_id': 'sensor.homehub_ratelimit_minute',
66142+
'last_changed': <ANY>,
66143+
'last_updated': <ANY>,
66144+
'state': '0',
66145+
})
66146+
# ---
66147+
# name: test_homehub[sensor.homehub_ratelimit_ratelimit_reset-entry]
66148+
EntityRegistryEntrySnapshot({
66149+
'aliases': set({
66150+
}),
66151+
'area_id': None,
66152+
'capabilities': dict({
66153+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
66154+
}),
66155+
'config_entry_id': <ANY>,
66156+
'device_class': None,
66157+
'device_id': <ANY>,
66158+
'disabled_by': None,
66159+
'domain': 'sensor',
66160+
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
66161+
'entity_id': 'sensor.homehub_ratelimit_ratelimit_reset',
66162+
'has_entity_name': True,
66163+
'hidden_by': None,
66164+
'icon': None,
66165+
'id': <ANY>,
66166+
'name': None,
66167+
'options': dict({
66168+
}),
66169+
'original_device_class': None,
66170+
'original_icon': 'mdi:information-outline',
66171+
'original_name': 'RateLimit ratelimit_reset',
66172+
'platform': 'daikin_onecta',
66173+
'supported_features': 0,
66174+
'translation_key': None,
66175+
'unique_id': '6a84eb95-60ea-4c21-8376-a10b3886437f_limitsensor_ratelimit_reset',
66176+
'unit_of_measurement': None,
66177+
})
66178+
# ---
66179+
# name: test_homehub[sensor.homehub_ratelimit_ratelimit_reset-state]
66180+
StateSnapshot({
66181+
'attributes': ReadOnlyDict({
66182+
'friendly_name': 'homehub RateLimit ratelimit_reset',
66183+
'icon': 'mdi:information-outline',
66184+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
66185+
}),
66186+
'context': <ANY>,
66187+
'entity_id': 'sensor.homehub_ratelimit_ratelimit_reset',
66188+
'last_changed': <ANY>,
66189+
'last_updated': <ANY>,
66190+
'state': '0',
66191+
})
66192+
# ---
66193+
# name: test_homehub[sensor.homehub_ratelimit_remaining_day-entry]
66194+
EntityRegistryEntrySnapshot({
66195+
'aliases': set({
66196+
}),
66197+
'area_id': None,
66198+
'capabilities': dict({
66199+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
66200+
}),
66201+
'config_entry_id': <ANY>,
66202+
'device_class': None,
66203+
'device_id': <ANY>,
66204+
'disabled_by': None,
66205+
'domain': 'sensor',
66206+
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
66207+
'entity_id': 'sensor.homehub_ratelimit_remaining_day',
66208+
'has_entity_name': True,
66209+
'hidden_by': None,
66210+
'icon': None,
66211+
'id': <ANY>,
66212+
'name': None,
66213+
'options': dict({
66214+
}),
66215+
'original_device_class': None,
66216+
'original_icon': 'mdi:information-outline',
66217+
'original_name': 'RateLimit remaining_day',
66218+
'platform': 'daikin_onecta',
66219+
'supported_features': 0,
66220+
'translation_key': None,
66221+
'unique_id': '6a84eb95-60ea-4c21-8376-a10b3886437f_limitsensor_remaining_day',
66222+
'unit_of_measurement': None,
66223+
})
66224+
# ---
66225+
# name: test_homehub[sensor.homehub_ratelimit_remaining_day-state]
66226+
StateSnapshot({
66227+
'attributes': ReadOnlyDict({
66228+
'friendly_name': 'homehub RateLimit remaining_day',
66229+
'icon': 'mdi:information-outline',
66230+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
66231+
}),
66232+
'context': <ANY>,
66233+
'entity_id': 'sensor.homehub_ratelimit_remaining_day',
66234+
'last_changed': <ANY>,
66235+
'last_updated': <ANY>,
66236+
'state': '0',
66237+
})
66238+
# ---
66239+
# name: test_homehub[sensor.homehub_ratelimit_remaining_minutes-entry]
66240+
EntityRegistryEntrySnapshot({
66241+
'aliases': set({
66242+
}),
66243+
'area_id': None,
66244+
'capabilities': dict({
66245+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
66246+
}),
66247+
'config_entry_id': <ANY>,
66248+
'device_class': None,
66249+
'device_id': <ANY>,
66250+
'disabled_by': None,
66251+
'domain': 'sensor',
66252+
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
66253+
'entity_id': 'sensor.homehub_ratelimit_remaining_minutes',
66254+
'has_entity_name': True,
66255+
'hidden_by': None,
66256+
'icon': None,
66257+
'id': <ANY>,
66258+
'name': None,
66259+
'options': dict({
66260+
}),
66261+
'original_device_class': None,
66262+
'original_icon': 'mdi:information-outline',
66263+
'original_name': 'RateLimit remaining_minutes',
66264+
'platform': 'daikin_onecta',
66265+
'supported_features': 0,
66266+
'translation_key': None,
66267+
'unique_id': '6a84eb95-60ea-4c21-8376-a10b3886437f_limitsensor_remaining_minutes',
66268+
'unit_of_measurement': None,
66269+
})
66270+
# ---
66271+
# name: test_homehub[sensor.homehub_ratelimit_remaining_minutes-state]
66272+
StateSnapshot({
66273+
'attributes': ReadOnlyDict({
66274+
'friendly_name': 'homehub RateLimit remaining_minutes',
66275+
'icon': 'mdi:information-outline',
66276+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
66277+
}),
66278+
'context': <ANY>,
66279+
'entity_id': 'sensor.homehub_ratelimit_remaining_minutes',
66280+
'last_changed': <ANY>,
66281+
'last_updated': <ANY>,
66282+
'state': '0',
66283+
})
66284+
# ---
66285+
# name: test_homehub[sensor.homehub_ratelimit_retry_after-entry]
66286+
EntityRegistryEntrySnapshot({
66287+
'aliases': set({
66288+
}),
66289+
'area_id': None,
66290+
'capabilities': dict({
66291+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
66292+
}),
66293+
'config_entry_id': <ANY>,
66294+
'device_class': None,
66295+
'device_id': <ANY>,
66296+
'disabled_by': None,
66297+
'domain': 'sensor',
66298+
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
66299+
'entity_id': 'sensor.homehub_ratelimit_retry_after',
66300+
'has_entity_name': True,
66301+
'hidden_by': None,
66302+
'icon': None,
66303+
'id': <ANY>,
66304+
'name': None,
66305+
'options': dict({
66306+
}),
66307+
'original_device_class': None,
66308+
'original_icon': 'mdi:information-outline',
66309+
'original_name': 'RateLimit retry_after',
66310+
'platform': 'daikin_onecta',
66311+
'supported_features': 0,
66312+
'translation_key': None,
66313+
'unique_id': '6a84eb95-60ea-4c21-8376-a10b3886437f_limitsensor_retry_after',
66314+
'unit_of_measurement': None,
66315+
})
66316+
# ---
66317+
# name: test_homehub[sensor.homehub_ratelimit_retry_after-state]
66318+
StateSnapshot({
66319+
'attributes': ReadOnlyDict({
66320+
'friendly_name': 'homehub RateLimit retry_after',
66321+
'icon': 'mdi:information-outline',
66322+
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
66323+
}),
66324+
'context': <ANY>,
66325+
'entity_id': 'sensor.homehub_ratelimit_retry_after',
66326+
'last_changed': <ANY>,
66327+
'last_updated': <ANY>,
66328+
'state': '0',
66329+
})
66330+
# ---
6601266331
# name: test_mc80z[binary_sensor.air_purifier_climatecontrol_is_holiday_mode_active-entry]
6601366332
EntityRegistryEntrySnapshot({
6601466333
'aliases': set({

tests/test_init.py

+13
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,19 @@
5555
from custom_components.daikin_onecta.diagnostics import async_get_device_diagnostics
5656

5757

58+
async def test_homehub(
59+
hass: HomeAssistant,
60+
config_entry: MockConfigEntry,
61+
onecta_auth: AsyncMock,
62+
snapshot: SnapshotAssertion,
63+
entity_registry: er.EntityRegistry,
64+
) -> None:
65+
"""Test entities."""
66+
await snapshot_platform_entities(hass, config_entry, Platform.SENSOR, entity_registry, snapshot, "homehub")
67+
68+
assert hass.states.get("sensor.homehub_ratelimit_minute").state == "0"
69+
70+
5871
async def test_offlinedevice(
5972
hass: HomeAssistant,
6073
config_entry: MockConfigEntry,

0 commit comments

Comments
 (0)