Add A6 family code for DS2438 1-Wire sensor (#112844)

* Add A6 family code for DS2438

* Add tests

* Fix switch

* Apply code review suggestion

* Add comments
This commit is contained in:
definitio 2024-03-12 10:06:02 +03:00 committed by GitHub
parent 734a614eb8
commit 6f19744469
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 721 additions and 0 deletions

View file

@ -28,6 +28,7 @@ DEVICE_SUPPORT = {
"3B": (),
"42": (),
"7E": ("EDS0066", "EDS0068"),
"A6": (),
"EF": ("HB_HUB", "HB_MOISTURE_METER", "HobbyBoards_EF"),
}

View file

@ -383,6 +383,9 @@ def get_entities(
elif "7E" in family:
device_sub_type = "EDS"
family = device_type
elif "A6" in family:
# A6 is a secondary family code for DS2438
family = "26"
if family not in get_sensor_types(device_sub_type):
continue

View file

@ -181,6 +181,9 @@ def get_entities(onewire_hub: OneWireHub) -> list[OneWireSwitch]:
if "EF" in family:
device_sub_type = "HobbyBoard"
family = device_type
elif "A6" in family:
# A6 is a secondary family code for DS2438
family = "26"
if family not in get_sensor_types(device_sub_type):
continue

View file

@ -224,6 +224,29 @@ MOCK_OWPROXY_DEVICES = {
{ATTR_INJECT_READS: b" 29.123"},
],
},
"A6.111111111111": {
ATTR_INJECT_READS: [
b"DS2438", # read device type
],
Platform.SENSOR: [
{ATTR_INJECT_READS: b" 25.123"},
{ATTR_INJECT_READS: b" 72.7563"},
{ATTR_INJECT_READS: b" 73.7563"},
{ATTR_INJECT_READS: b" 74.7563"},
{ATTR_INJECT_READS: b" 75.7563"},
{
ATTR_INJECT_READS: ProtocolError,
},
{ATTR_INJECT_READS: b" 969.265"},
{ATTR_INJECT_READS: b" 65.8839"},
{ATTR_INJECT_READS: b" 2.97"},
{ATTR_INJECT_READS: b" 4.74"},
{ATTR_INJECT_READS: b" 0.12"},
],
Platform.SWITCH: [
{ATTR_INJECT_READS: b" 1"},
],
},
"EF.111111111111": {
ATTR_INJECT_READS: [
b"HobbyBoards_EF", # read type

View file

@ -1235,6 +1235,46 @@
list([
])
# ---
# name: test_binary_sensors[A6.111111111111]
list([
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': None,
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'onewire',
'A6.111111111111',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': 'Maxim Integrated',
'model': 'DS2438',
'name': 'A6.111111111111',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
}),
])
# ---
# name: test_binary_sensors[A6.111111111111].1
list([
])
# ---
# name: test_binary_sensors[A6.111111111111].2
list([
])
# ---
# name: test_binary_sensors[EF.111111111111]
list([
DeviceRegistryEntrySnapshot({

View file

@ -2347,6 +2347,574 @@
}),
])
# ---
# name: test_sensors[A6.111111111111]
list([
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': None,
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'onewire',
'A6.111111111111',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': 'Maxim Integrated',
'model': 'DS2438',
'name': 'A6.111111111111',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
}),
])
# ---
# name: test_sensors[A6.111111111111].1
list([
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.a6_111111111111_temperature',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
'original_icon': None,
'original_name': 'Temperature',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '/A6.111111111111/temperature',
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}),
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': <RegistryEntryDisabler.INTEGRATION: 'integration'>,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.a6_111111111111_humidity',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.HUMIDITY: 'humidity'>,
'original_icon': None,
'original_name': 'Humidity',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '/A6.111111111111/humidity',
'unit_of_measurement': '%',
}),
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': <RegistryEntryDisabler.INTEGRATION: 'integration'>,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.a6_111111111111_hih3600_humidity',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.HUMIDITY: 'humidity'>,
'original_icon': None,
'original_name': 'HIH3600 humidity',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'humidity_hih3600',
'unique_id': '/A6.111111111111/HIH3600/humidity',
'unit_of_measurement': '%',
}),
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': <RegistryEntryDisabler.INTEGRATION: 'integration'>,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.a6_111111111111_hih4000_humidity',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.HUMIDITY: 'humidity'>,
'original_icon': None,
'original_name': 'HIH4000 humidity',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'humidity_hih4000',
'unique_id': '/A6.111111111111/HIH4000/humidity',
'unit_of_measurement': '%',
}),
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': <RegistryEntryDisabler.INTEGRATION: 'integration'>,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.a6_111111111111_hih5030_humidity',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.HUMIDITY: 'humidity'>,
'original_icon': None,
'original_name': 'HIH5030 humidity',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'humidity_hih5030',
'unique_id': '/A6.111111111111/HIH5030/humidity',
'unit_of_measurement': '%',
}),
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': <RegistryEntryDisabler.INTEGRATION: 'integration'>,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.a6_111111111111_htm1735_humidity',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.HUMIDITY: 'humidity'>,
'original_icon': None,
'original_name': 'HTM1735 humidity',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'humidity_htm1735',
'unique_id': '/A6.111111111111/HTM1735/humidity',
'unit_of_measurement': '%',
}),
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': <RegistryEntryDisabler.INTEGRATION: 'integration'>,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.a6_111111111111_pressure',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.PRESSURE: 'pressure'>,
'original_icon': None,
'original_name': 'Pressure',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '/A6.111111111111/B1-R1-A/pressure',
'unit_of_measurement': <UnitOfPressure.MBAR: 'mbar'>,
}),
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': <RegistryEntryDisabler.INTEGRATION: 'integration'>,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.a6_111111111111_illuminance',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ILLUMINANCE: 'illuminance'>,
'original_icon': None,
'original_name': 'Illuminance',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '/A6.111111111111/S3-R1-A/illuminance',
'unit_of_measurement': 'lx',
}),
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': <RegistryEntryDisabler.INTEGRATION: 'integration'>,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.a6_111111111111_vad_voltage',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.VOLTAGE: 'voltage'>,
'original_icon': None,
'original_name': 'VAD voltage',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'voltage_vad',
'unique_id': '/A6.111111111111/VAD',
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': <RegistryEntryDisabler.INTEGRATION: 'integration'>,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.a6_111111111111_vdd_voltage',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.VOLTAGE: 'voltage'>,
'original_icon': None,
'original_name': 'VDD voltage',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'voltage_vdd',
'unique_id': '/A6.111111111111/VDD',
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': <RegistryEntryDisabler.INTEGRATION: 'integration'>,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.a6_111111111111_vis_voltage_difference',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.VOLTAGE: 'voltage'>,
'original_icon': None,
'original_name': 'VIS voltage difference',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'voltage_vis',
'unique_id': '/A6.111111111111/vis',
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
])
# ---
# name: test_sensors[A6.111111111111].2
list([
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'temperature',
'device_file': '/A6.111111111111/temperature',
'friendly_name': 'A6.111111111111 Temperature',
'raw_value': 25.123,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}),
'context': <ANY>,
'entity_id': 'sensor.a6_111111111111_temperature',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '25.1',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'humidity',
'device_file': '/A6.111111111111/humidity',
'friendly_name': 'A6.111111111111 Humidity',
'raw_value': 72.7563,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.a6_111111111111_humidity',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '72.8',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'humidity',
'device_file': '/A6.111111111111/HIH3600/humidity',
'friendly_name': 'A6.111111111111 HIH3600 humidity',
'raw_value': 73.7563,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.a6_111111111111_hih3600_humidity',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '73.8',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'humidity',
'device_file': '/A6.111111111111/HIH4000/humidity',
'friendly_name': 'A6.111111111111 HIH4000 humidity',
'raw_value': 74.7563,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.a6_111111111111_hih4000_humidity',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '74.8',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'humidity',
'device_file': '/A6.111111111111/HIH5030/humidity',
'friendly_name': 'A6.111111111111 HIH5030 humidity',
'raw_value': 75.7563,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.a6_111111111111_hih5030_humidity',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '75.8',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'humidity',
'device_file': '/A6.111111111111/HTM1735/humidity',
'friendly_name': 'A6.111111111111 HTM1735 humidity',
'raw_value': None,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.a6_111111111111_htm1735_humidity',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'pressure',
'device_file': '/A6.111111111111/B1-R1-A/pressure',
'friendly_name': 'A6.111111111111 Pressure',
'raw_value': 969.265,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfPressure.MBAR: 'mbar'>,
}),
'context': <ANY>,
'entity_id': 'sensor.a6_111111111111_pressure',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '969.3',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'illuminance',
'device_file': '/A6.111111111111/S3-R1-A/illuminance',
'friendly_name': 'A6.111111111111 Illuminance',
'raw_value': 65.8839,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': 'lx',
}),
'context': <ANY>,
'entity_id': 'sensor.a6_111111111111_illuminance',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '65.9',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'voltage',
'device_file': '/A6.111111111111/VAD',
'friendly_name': 'A6.111111111111 VAD voltage',
'raw_value': 2.97,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
'context': <ANY>,
'entity_id': 'sensor.a6_111111111111_vad_voltage',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '3.0',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'voltage',
'device_file': '/A6.111111111111/VDD',
'friendly_name': 'A6.111111111111 VDD voltage',
'raw_value': 4.74,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
'context': <ANY>,
'entity_id': 'sensor.a6_111111111111_vdd_voltage',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '4.7',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'voltage',
'device_file': '/A6.111111111111/vis',
'friendly_name': 'A6.111111111111 VIS voltage difference',
'raw_value': 0.12,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
'context': <ANY>,
'entity_id': 'sensor.a6_111111111111_vis_voltage_difference',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '0.1',
}),
])
# ---
# name: test_sensors[EF.111111111111]
list([
DeviceRegistryEntrySnapshot({

View file

@ -1751,6 +1751,89 @@
list([
])
# ---
# name: test_switches[A6.111111111111]
list([
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': None,
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'onewire',
'A6.111111111111',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': 'Maxim Integrated',
'model': 'DS2438',
'name': 'A6.111111111111',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
}),
])
# ---
# name: test_switches[A6.111111111111].1
list([
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': <RegistryEntryDisabler.INTEGRATION: 'integration'>,
'domain': 'switch',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'switch.a6_111111111111_current_a_d_control',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Current A/D control',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'iad',
'unique_id': '/A6.111111111111/IAD',
'unit_of_measurement': None,
}),
])
# ---
# name: test_switches[A6.111111111111].2
list([
StateSnapshot({
'attributes': ReadOnlyDict({
'device_file': '/A6.111111111111/IAD',
'friendly_name': 'A6.111111111111 Current A/D control',
'raw_value': 1.0,
}),
'context': <ANY>,
'entity_id': 'switch.a6_111111111111_current_a_d_control',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'on',
}),
])
# ---
# name: test_switches[EF.111111111111]
list([
DeviceRegistryEntrySnapshot({