Support unique_id

Support is a bit fragile since we don't really have a serial number to
base on. However we have a reasonnable default (source prometheus +
expression) and a way for user to specify id easily if they to change
the prometheus query.
This commit is contained in:
Grégoire Seux
2021-08-29 10:53:33 +02:00
parent 4fbe9c5660
commit f40cf1bfec

View File

@@ -22,6 +22,7 @@ from prometheus_client import Summary
CONF_PROMETHEUS_URL = 'prometheus_url' CONF_PROMETHEUS_URL = 'prometheus_url'
CONF_PROMETHEUS_QUERY = 'prometheus_query' CONF_PROMETHEUS_QUERY = 'prometheus_query'
CONF_STATE_CLASS = 'state_class' CONF_STATE_CLASS = 'state_class'
CONF_UNIQUE_ID = 'unique_id'
SCAN_INTERVAL = timedelta(seconds=600) SCAN_INTERVAL = timedelta(seconds=600)
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@@ -33,6 +34,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_NAME): cv.string, vol.Required(CONF_NAME): cv.string,
vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string, vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string,
vol.Optional(CONF_STATE_CLASS): STATE_CLASSES_SCHEMA, vol.Optional(CONF_STATE_CLASS): STATE_CLASSES_SCHEMA,
vol.Optional(CONF_UNIQUE_ID): cv.string,
}) })
def setup_platform(hass, config, add_entities, discovery_info=None): def setup_platform(hass, config, add_entities, discovery_info=None):
@@ -43,6 +45,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
'name': str(config.get(CONF_NAME)), 'name': str(config.get(CONF_NAME)),
'unit': str(config.get(CONF_UNIT_OF_MEASUREMENT)), 'unit': str(config.get(CONF_UNIT_OF_MEASUREMENT)),
'state_class': str(config.get(CONF_STATE_CLASS)), 'state_class': str(config.get(CONF_STATE_CLASS)),
'unique_id': str(config.get(CONF_UNIQUE_ID)),
} }
add_entities([PrometheusQuery(prom_data)], True) add_entities([PrometheusQuery(prom_data)], True)
@@ -57,6 +60,9 @@ class PrometheusQuery(Entity):
self._state = None self._state = None
self._unit_of_measurement = prom_data["unit"] self._unit_of_measurement = prom_data["unit"]
self._state_class = prom_data["state_class"] self._state_class = prom_data["state_class"]
self._attr_unique_id = f"${prom_data['url']}$${prom_data['query']}"
if prom_data["unique_id"] is not None:
self._attr_unique_id = prom_data["unique_id"]
@property @property
def name(self): def name(self):