diff --git a/homeassistant/components/prometheus/__init__.py b/homeassistant/components/prometheus/__init__.py index 9053a872134..de0de8ae162 100644 --- a/homeassistant/components/prometheus/__init__.py +++ b/homeassistant/components/prometheus/__init__.py @@ -103,6 +103,16 @@ class PrometheusMetrics: full_metric_name, documentation, labels) return self._metrics[metric] + @staticmethod + def state_as_number(state): + """Return a state casted to a float.""" + try: + value = state_helper.state_as_number(state) + except ValueError: + _LOGGER.warning("Could not convert %s to float", state) + value = 0 + return value + @staticmethod def _labels(state): return { @@ -130,7 +140,7 @@ class PrometheusMetrics: self.prometheus_client.Gauge, 'State of the binary sensor (0/1)', ) - value = state_helper.state_as_number(state) + value = self.state_as_number(state) metric.labels(**self._labels(state)).set(value) def _handle_input_boolean(self, state): @@ -139,7 +149,7 @@ class PrometheusMetrics: self.prometheus_client.Gauge, 'State of the input boolean (0/1)', ) - value = state_helper.state_as_number(state) + value = self.state_as_number(state) metric.labels(**self._labels(state)).set(value) def _handle_device_tracker(self, state): @@ -148,7 +158,7 @@ class PrometheusMetrics: self.prometheus_client.Gauge, 'State of the device tracker (0/1)', ) - value = state_helper.state_as_number(state) + value = self.state_as_number(state) metric.labels(**self._labels(state)).set(value) def _handle_person(self, state): @@ -157,7 +167,7 @@ class PrometheusMetrics: self.prometheus_client.Gauge, 'State of the person (0/1)', ) - value = state_helper.state_as_number(state) + value = self.state_as_number(state) metric.labels(**self._labels(state)).set(value) def _handle_light(self, state): @@ -171,7 +181,7 @@ class PrometheusMetrics: if 'brightness' in state.attributes: value = state.attributes['brightness'] / 255.0 else: - value = state_helper.state_as_number(state) + value = self.state_as_number(state) value = value * 100 metric.labels(**self._labels(state)).set(value) except ValueError: @@ -183,7 +193,7 @@ class PrometheusMetrics: self.prometheus_client.Gauge, 'State of the lock (0/1)', ) - value = state_helper.state_as_number(state) + value = self.state_as_number(state) metric.labels(**self._labels(state)).set(value) def _handle_climate(self, state): @@ -209,7 +219,7 @@ class PrometheusMetrics: 'climate_state', self.prometheus_client.Gauge, 'State of the thermostat (0/1)') try: - value = state_helper.state_as_number(state) + value = self.state_as_number(state) metric.labels(**self._labels(state)).set(value) except ValueError: pass @@ -232,7 +242,7 @@ class PrometheusMetrics: state.entity_id) try: - value = state_helper.state_as_number(state) + value = self.state_as_number(state) if unit == TEMP_FAHRENHEIT: value = fahrenheit_to_celsius(value) _metric.labels(**self._labels(state)).set(value) @@ -249,7 +259,7 @@ class PrometheusMetrics: ) try: - value = state_helper.state_as_number(state) + value = self.state_as_number(state) metric.labels(**self._labels(state)).set(value) except ValueError: pass