Add support for min mode in Netatmo public sensor (#118613)

pull/121313/head
Mariusz Kubisz 2024-07-05 16:25:05 +02:00 committed by GitHub
parent 324755b8f5
commit bf8cef3337
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 607 additions and 1 deletions

View File

@ -197,7 +197,7 @@ class NetatmoOptionsFlowHandler(OptionsFlow):
vol.Required(
CONF_PUBLIC_MODE,
default=orig_options.get(CONF_PUBLIC_MODE, "avg"),
): vol.In(["avg", "max"]),
): vol.In(["avg", "max", "min"]),
vol.Required(
CONF_SHOW_ON_MAP,
default=orig_options.get(CONF_SHOW_ON_MAP, False),

View File

@ -776,6 +776,8 @@ class NetatmoPublicSensor(NetatmoBaseEntity, SensorEntity):
self._attr_native_value = round(sum(values) / len(values), 1)
elif self._mode == "max":
self._attr_native_value = max(values)
elif self._mode == "min":
self._attr_native_value = min(values)
self._attr_available = self.native_value is not None
self.async_write_ha_state()

View File

@ -69,6 +69,15 @@ def mock_config_entry_fixture(hass: HomeAssistant) -> MockConfigEntry:
"area_name": "Home max",
"mode": "max",
},
"Home min": {
"lat_ne": 32.2345678,
"lon_ne": -117.1234567,
"lat_sw": 32.1234567,
"lon_sw": -117.2345678,
"show_on_map": True,
"area_name": "Home min",
"mode": "min",
},
}
},
)

View File

@ -630,6 +630,15 @@
'mode': 'max',
'show_on_map': True,
}),
'Home min': dict({
'area_name': 'Home min',
'lat_ne': '**REDACTED**',
'lat_sw': '**REDACTED**',
'lon_ne': '**REDACTED**',
'lon_sw': '**REDACTED**',
'mode': 'min',
'show_on_map': True,
}),
}),
}),
'pref_disable_new_entities': False,

View File

@ -1177,3 +1177,33 @@
'via_device_id': None,
})
# ---
# name: test_devices[netatmo-Home min]
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': 'https://weathermap.netatmo.com/',
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'netatmo',
'Home min',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': 'Netatmo',
'model': 'Public Weather station',
'name': 'Home min',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
})
# ---

View File

@ -2663,6 +2663,556 @@
'state': '15',
})
# ---
# name: test_entity[sensor.home_min_atmospheric_pressure-entry]
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.home_min_atmospheric_pressure',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 1,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfPressure.HPA: 'hPa'>,
}),
}),
'original_device_class': <SensorDeviceClass.ATMOSPHERIC_PRESSURE: 'atmospheric_pressure'>,
'original_icon': None,
'original_name': 'Atmospheric pressure',
'platform': 'netatmo',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'Home-min-pressure',
'unit_of_measurement': <UnitOfPressure.HPA: 'hPa'>,
})
# ---
# name: test_entity[sensor.home_min_atmospheric_pressure-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by Netatmo',
'device_class': 'atmospheric_pressure',
'friendly_name': 'Home min Atmospheric pressure',
'latitude': 32.17901225,
'longitude': -117.17901225,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfPressure.HPA: 'hPa'>,
}),
'context': <ANY>,
'entity_id': 'sensor.home_min_atmospheric_pressure',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '1005.4',
})
# ---
# name: test_entity[sensor.home_min_gust_angle-entry]
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.home_min_gust_angle',
'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': 'Gust angle',
'platform': 'netatmo',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'gust_angle',
'unique_id': 'Home-min-gustangle_value',
'unit_of_measurement': '°',
})
# ---
# name: test_entity[sensor.home_min_gust_angle-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by Netatmo',
'friendly_name': 'Home min Gust angle',
'latitude': 32.17901225,
'longitude': -117.17901225,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '°',
}),
'context': <ANY>,
'entity_id': 'sensor.home_min_gust_angle',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '217',
})
# ---
# name: test_entity[sensor.home_min_gust_strength-entry]
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.home_min_gust_strength',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.WIND_SPEED: 'wind_speed'>,
'original_icon': None,
'original_name': 'Gust strength',
'platform': 'netatmo',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'gust_strength',
'unique_id': 'Home-min-guststrength',
'unit_of_measurement': <UnitOfSpeed.KILOMETERS_PER_HOUR: 'km/h'>,
})
# ---
# name: test_entity[sensor.home_min_gust_strength-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by Netatmo',
'device_class': 'wind_speed',
'friendly_name': 'Home min Gust strength',
'latitude': 32.17901225,
'longitude': -117.17901225,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfSpeed.KILOMETERS_PER_HOUR: 'km/h'>,
}),
'context': <ANY>,
'entity_id': 'sensor.home_min_gust_strength',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '31',
})
# ---
# name: test_entity[sensor.home_min_humidity-entry]
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.home_min_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': 'netatmo',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'Home-min-humidity',
'unit_of_measurement': '%',
})
# ---
# name: test_entity[sensor.home_min_humidity-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by Netatmo',
'device_class': 'humidity',
'friendly_name': 'Home min Humidity',
'latitude': 32.17901225,
'longitude': -117.17901225,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.home_min_humidity',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '56',
})
# ---
# name: test_entity[sensor.home_min_none-entry]
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.home_min_none',
'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': None,
'platform': 'netatmo',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'Home-min-windangle_value',
'unit_of_measurement': '°',
})
# ---
# name: test_entity[sensor.home_min_none-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by Netatmo',
'friendly_name': 'Home min None',
'latitude': 32.17901225,
'longitude': -117.17901225,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '°',
}),
'context': <ANY>,
'entity_id': 'sensor.home_min_none',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '17',
})
# ---
# name: test_entity[sensor.home_min_precipitation-entry]
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.home_min_precipitation',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.PRECIPITATION: 'precipitation'>,
'original_icon': None,
'original_name': 'Precipitation',
'platform': 'netatmo',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'Home-min-rain',
'unit_of_measurement': <UnitOfPrecipitationDepth.MILLIMETERS: 'mm'>,
})
# ---
# name: test_entity[sensor.home_min_precipitation-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by Netatmo',
'device_class': 'precipitation',
'friendly_name': 'Home min Precipitation',
'latitude': 32.17901225,
'longitude': -117.17901225,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfPrecipitationDepth.MILLIMETERS: 'mm'>,
}),
'context': <ANY>,
'entity_id': 'sensor.home_min_precipitation',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0',
})
# ---
# name: test_entity[sensor.home_min_precipitation_last_hour-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.TOTAL: 'total'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.home_min_precipitation_last_hour',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 1,
}),
}),
'original_device_class': <SensorDeviceClass.PRECIPITATION: 'precipitation'>,
'original_icon': None,
'original_name': 'Precipitation last hour',
'platform': 'netatmo',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'sum_rain_1',
'unique_id': 'Home-min-sum_rain_1',
'unit_of_measurement': <UnitOfPrecipitationDepth.MILLIMETERS: 'mm'>,
})
# ---
# name: test_entity[sensor.home_min_precipitation_last_hour-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by Netatmo',
'device_class': 'precipitation',
'friendly_name': 'Home min Precipitation last hour',
'latitude': 32.17901225,
'longitude': -117.17901225,
'state_class': <SensorStateClass.TOTAL: 'total'>,
'unit_of_measurement': <UnitOfPrecipitationDepth.MILLIMETERS: 'mm'>,
}),
'context': <ANY>,
'entity_id': 'sensor.home_min_precipitation_last_hour',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0',
})
# ---
# name: test_entity[sensor.home_min_precipitation_today-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.home_min_precipitation_today',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.PRECIPITATION: 'precipitation'>,
'original_icon': None,
'original_name': 'Precipitation today',
'platform': 'netatmo',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'sum_rain_24',
'unique_id': 'Home-min-sum_rain_24',
'unit_of_measurement': <UnitOfPrecipitationDepth.MILLIMETERS: 'mm'>,
})
# ---
# name: test_entity[sensor.home_min_precipitation_today-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by Netatmo',
'device_class': 'precipitation',
'friendly_name': 'Home min Precipitation today',
'latitude': 32.17901225,
'longitude': -117.17901225,
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfPrecipitationDepth.MILLIMETERS: 'mm'>,
}),
'context': <ANY>,
'entity_id': 'sensor.home_min_precipitation_today',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '9.999',
})
# ---
# name: test_entity[sensor.home_min_temperature-entry]
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.home_min_temperature',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 1,
}),
}),
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
'original_icon': None,
'original_name': 'Temperature',
'platform': 'netatmo',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'Home-min-temperature',
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
})
# ---
# name: test_entity[sensor.home_min_temperature-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by Netatmo',
'device_class': 'temperature',
'friendly_name': 'Home min Temperature',
'latitude': 32.17901225,
'longitude': -117.17901225,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}),
'context': <ANY>,
'entity_id': 'sensor.home_min_temperature',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '19.8',
})
# ---
# name: test_entity[sensor.home_min_wind_speed-entry]
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.home_min_wind_speed',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.WIND_SPEED: 'wind_speed'>,
'original_icon': None,
'original_name': 'Wind speed',
'platform': 'netatmo',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'Home-min-windstrength',
'unit_of_measurement': <UnitOfSpeed.KILOMETERS_PER_HOUR: 'km/h'>,
})
# ---
# name: test_entity[sensor.home_min_wind_speed-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by Netatmo',
'device_class': 'wind_speed',
'friendly_name': 'Home min Wind speed',
'latitude': 32.17901225,
'longitude': -117.17901225,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfSpeed.KILOMETERS_PER_HOUR: 'km/h'>,
}),
'context': <ANY>,
'entity_id': 'sensor.home_min_wind_speed',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '15',
})
# ---
# name: test_entity[sensor.hot_water_none-entry]
EntityRegistryEntrySnapshot({
'aliases': set({

View File

@ -81,6 +81,12 @@ async def test_public_weather_sensor(
assert hass.states.get(f"{prefix}humidity").state == "76"
assert hass.states.get(f"{prefix}atmospheric_pressure").state == "1014.4"
prefix = "sensor.home_min_"
assert hass.states.get(f"{prefix}temperature").state == "19.8"
assert hass.states.get(f"{prefix}humidity").state == "56"
assert hass.states.get(f"{prefix}atmospheric_pressure").state == "1005.4"
prefix = "sensor.home_avg_"
assert hass.states.get(f"{prefix}temperature").state == "22.7"