From ad6beac5352c66033a270b68bf67ea6ca75ac036 Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Thu, 25 Aug 2022 11:55:33 +0200 Subject: [PATCH] Add `hw_version` to MQTT device info (#77210) * Add hw_version * Add abbreviation for hw_version * Update tests * Update discovery tests --- homeassistant/components/mqtt/abbreviations.py | 1 + homeassistant/components/mqtt/mixins.py | 6 ++++++ tests/components/mqtt/test_common.py | 4 ++++ tests/components/mqtt/test_device_trigger.py | 4 ++++ tests/components/mqtt/test_discovery.py | 5 +++++ tests/components/mqtt/test_tag.py | 4 ++++ 6 files changed, 24 insertions(+) diff --git a/homeassistant/components/mqtt/abbreviations.py b/homeassistant/components/mqtt/abbreviations.py index 32b67874a45..6f2eeeeedd0 100644 --- a/homeassistant/components/mqtt/abbreviations.py +++ b/homeassistant/components/mqtt/abbreviations.py @@ -263,6 +263,7 @@ DEVICE_ABBREVIATIONS = { "name": "name", "mf": "manufacturer", "mdl": "model", + "hw": "hw_version", "sw": "sw_version", "sa": "suggested_area", } diff --git a/homeassistant/components/mqtt/mixins.py b/homeassistant/components/mqtt/mixins.py index 4b7ae92c6f4..bb035198611 100644 --- a/homeassistant/components/mqtt/mixins.py +++ b/homeassistant/components/mqtt/mixins.py @@ -13,6 +13,7 @@ import voluptuous as vol from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( ATTR_CONFIGURATION_URL, + ATTR_HW_VERSION, ATTR_MANUFACTURER, ATTR_MODEL, ATTR_NAME, @@ -107,6 +108,7 @@ CONF_JSON_ATTRS_TEMPLATE = "json_attributes_template" CONF_IDENTIFIERS = "identifiers" CONF_CONNECTIONS = "connections" CONF_MANUFACTURER = "manufacturer" +CONF_HW_VERSION = "hw_version" CONF_SW_VERSION = "sw_version" CONF_VIA_DEVICE = "via_device" CONF_DEPRECATED_VIA_HUB = "via_hub" @@ -199,6 +201,7 @@ MQTT_ENTITY_DEVICE_INFO_SCHEMA = vol.All( vol.Optional(CONF_MANUFACTURER): cv.string, vol.Optional(CONF_MODEL): cv.string, vol.Optional(CONF_NAME): cv.string, + vol.Optional(CONF_HW_VERSION): cv.string, vol.Optional(CONF_SW_VERSION): cv.string, vol.Optional(CONF_VIA_DEVICE): cv.string, vol.Optional(CONF_SUGGESTED_AREA): cv.string, @@ -880,6 +883,9 @@ def device_info_from_config(config) -> DeviceInfo | None: if CONF_NAME in config: info[ATTR_NAME] = config[CONF_NAME] + if CONF_HW_VERSION in config: + info[ATTR_HW_VERSION] = config[CONF_HW_VERSION] + if CONF_SW_VERSION in config: info[ATTR_SW_VERSION] = config[CONF_SW_VERSION] diff --git a/tests/components/mqtt/test_common.py b/tests/components/mqtt/test_common.py index fe1f4003f0b..ac8ef98531e 100644 --- a/tests/components/mqtt/test_common.py +++ b/tests/components/mqtt/test_common.py @@ -29,6 +29,7 @@ DEFAULT_CONFIG_DEVICE_INFO_ID = { "manufacturer": "Whatever", "name": "Beer", "model": "Glass", + "hw_version": "rev1", "sw_version": "0.1-beta", "suggested_area": "default_area", "configuration_url": "http://example.com", @@ -39,6 +40,7 @@ DEFAULT_CONFIG_DEVICE_INFO_MAC = { "manufacturer": "Whatever", "name": "Beer", "model": "Glass", + "hw_version": "rev1", "sw_version": "0.1-beta", "suggested_area": "default_area", "configuration_url": "http://example.com", @@ -958,6 +960,7 @@ async def help_test_entity_device_info_with_identifier( assert device.manufacturer == "Whatever" assert device.name == "Beer" assert device.model == "Glass" + assert device.hw_version == "rev1" assert device.sw_version == "0.1-beta" assert device.suggested_area == "default_area" assert device.configuration_url == "http://example.com" @@ -990,6 +993,7 @@ async def help_test_entity_device_info_with_connection( assert device.manufacturer == "Whatever" assert device.name == "Beer" assert device.model == "Glass" + assert device.hw_version == "rev1" assert device.sw_version == "0.1-beta" assert device.suggested_area == "default_area" assert device.configuration_url == "http://example.com" diff --git a/tests/components/mqtt/test_device_trigger.py b/tests/components/mqtt/test_device_trigger.py index 37a59ef6b53..b49276b8f85 100644 --- a/tests/components/mqtt/test_device_trigger.py +++ b/tests/components/mqtt/test_device_trigger.py @@ -947,6 +947,7 @@ async def test_entity_device_info_with_connection(hass, mqtt_mock_entry_no_yaml_ "manufacturer": "Whatever", "name": "Beer", "model": "Glass", + "hw_version": "rev1", "sw_version": "0.1-beta", }, } @@ -962,6 +963,7 @@ async def test_entity_device_info_with_connection(hass, mqtt_mock_entry_no_yaml_ assert device.manufacturer == "Whatever" assert device.name == "Beer" assert device.model == "Glass" + assert device.hw_version == "rev1" assert device.sw_version == "0.1-beta" @@ -981,6 +983,7 @@ async def test_entity_device_info_with_identifier(hass, mqtt_mock_entry_no_yaml_ "manufacturer": "Whatever", "name": "Beer", "model": "Glass", + "hw_version": "rev1", "sw_version": "0.1-beta", }, } @@ -994,6 +997,7 @@ async def test_entity_device_info_with_identifier(hass, mqtt_mock_entry_no_yaml_ assert device.manufacturer == "Whatever" assert device.name == "Beer" assert device.model == "Glass" + assert device.hw_version == "rev1" assert device.sw_version == "0.1-beta" diff --git a/tests/components/mqtt/test_discovery.py b/tests/components/mqtt/test_discovery.py index 2bc330f8495..29ca1f11743 100644 --- a/tests/components/mqtt/test_discovery.py +++ b/tests/components/mqtt/test_discovery.py @@ -947,6 +947,7 @@ async def test_discovery_expansion(hass, mqtt_mock_entry_no_yaml_config, caplog) ' "ids":["5706DF"],' ' "name":"DiscoveryExpansionTest1 Device",' ' "mdl":"Generic",' + ' "hw":"rev1",' ' "sw":"1.2.3.4",' ' "mf":"None",' ' "sa":"default_area"' @@ -999,6 +1000,7 @@ async def test_discovery_expansion_2(hass, mqtt_mock_entry_no_yaml_config, caplo ' "ids":["5706DF"],' ' "name":"DiscoveryExpansionTest1 Device",' ' "mdl":"Generic",' + ' "hw":"rev1",' ' "sw":"1.2.3.4",' ' "mf":"None",' ' "sa":"default_area"' @@ -1037,6 +1039,7 @@ async def test_discovery_expansion_3(hass, mqtt_mock_entry_no_yaml_config, caplo ' "ids":["5706DF"],' ' "name":"DiscoveryExpansionTest1 Device",' ' "mdl":"Generic",' + ' "hw":"rev1",' ' "sw":"1.2.3.4",' ' "mf":"None",' ' "sa":"default_area"' @@ -1076,6 +1079,7 @@ async def test_discovery_expansion_without_encoding_and_value_template_1( ' "ids":["5706DF"],' ' "name":"DiscoveryExpansionTest1 Device",' ' "mdl":"Generic",' + ' "hw":"rev1",' ' "sw":"1.2.3.4",' ' "mf":"None",' ' "sa":"default_area"' @@ -1124,6 +1128,7 @@ async def test_discovery_expansion_without_encoding_and_value_template_2( ' "ids":["5706DF"],' ' "name":"DiscoveryExpansionTest1 Device",' ' "mdl":"Generic",' + ' "hw":"rev1",' ' "sw":"1.2.3.4",' ' "mf":"None",' ' "sa":"default_area"' diff --git a/tests/components/mqtt/test_tag.py b/tests/components/mqtt/test_tag.py index 507c6d99bed..ed33ed0dcdf 100644 --- a/tests/components/mqtt/test_tag.py +++ b/tests/components/mqtt/test_tag.py @@ -437,6 +437,7 @@ async def test_entity_device_info_with_connection(hass, mqtt_mock_entry_no_yaml_ "manufacturer": "Whatever", "name": "Beer", "model": "Glass", + "hw_version": "rev1", "sw_version": "0.1-beta", }, } @@ -452,6 +453,7 @@ async def test_entity_device_info_with_connection(hass, mqtt_mock_entry_no_yaml_ assert device.manufacturer == "Whatever" assert device.name == "Beer" assert device.model == "Glass" + assert device.hw_version == "rev1" assert device.sw_version == "0.1-beta" @@ -468,6 +470,7 @@ async def test_entity_device_info_with_identifier(hass, mqtt_mock_entry_no_yaml_ "manufacturer": "Whatever", "name": "Beer", "model": "Glass", + "hw_version": "rev1", "sw_version": "0.1-beta", }, } @@ -481,6 +484,7 @@ async def test_entity_device_info_with_identifier(hass, mqtt_mock_entry_no_yaml_ assert device.manufacturer == "Whatever" assert device.name == "Beer" assert device.model == "Glass" + assert device.hw_version == "rev1" assert device.sw_version == "0.1-beta"