diff --git a/exporter.py b/exporter.py index 91452f9..da41f32 100755 --- a/exporter.py +++ b/exporter.py @@ -7,7 +7,7 @@ from homematicip.home import Home, EventType from homematicip.device import WallMountedThermostatPro, TemperatureHumiditySensorWithoutDisplay, \ TemperatureHumiditySensorOutdoor, TemperatureHumiditySensorDisplay, ShutterContact, HeatingThermostat, \ - PlugableSwitchMeasuring + PlugableSwitchMeasuring, WindowState logging.basicConfig(level=logging.INFO, format='%(asctime)-15s %(message)s', datefmt="%Y-%m-%d %H:%M:%S") @@ -137,6 +137,12 @@ def __init_metrics(self): labelnames=labelnames, namespace=namespace ) + self.metric_contact_open = prometheus_client.Gauge( + name='contact_open', + documentation='Shutter contact open (1 for open 0 for closed)', + labelnames=labelnames, + namespace=namespace + ) self.metric_device_event = prometheus_client.Counter( name='device_event', documentation='events triggered by a device', @@ -193,6 +199,19 @@ def __collect_heating_metrics(self, room, device): device.automaticValveAdaptionNeeded, device.temperatureOffset, device.valvePosition) ) + def __collect_shutter_metrics(self, room, device): + logging.info( + "found device: room: {}, label: {}, device_type: {}, firmware_version: {}, last_status_update: {}, permanently_reachable: {}" + .format(room, device.label, device.deviceType.lower(), device.firmwareVersion, device.lastStatusUpdate, + device.permanentlyReachable) + ) + + shutter_open = 0 + if device.windowState != WindowState.CLOSED: + shutter_open = 1 + + self.metric_contact_open.labels(room=room, device_label=device.label).set(shutter_open) + def __collect_device_info_metrics(self,room, device): logging.info( "found device: room: {}, label: {}, device_type: {}, firmware_version: {}, last_status_update: {}, permanently_reachable: {}" @@ -269,6 +288,8 @@ def collect(self): elif isinstance(d, PlugableSwitchMeasuring): logging.info("Device of type PlugableSwitchMeasuring") self.__collect_power_metrics(g.label, d) + elif isinstance(d, ShutterContact): + self.__collect_shutter_metrics(g.label, d) except Exception as e: logging.warning( @@ -276,7 +297,7 @@ def collect(self): ) finally: logging.info('waiting {}s before next collection cycle'.format(self.__collect_interval_seconds)) - time.sleep(self.__collect_interval_seconds) + time.sleep(int(self.__collect_interval_seconds)) if __name__ == '__main__': diff --git a/requirements.txt b/requirements.txt index 8fd4e84..c9fa7dd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -homematicip ~= 0.11.0 -prometheus_client >= 0.8.0 +homematicip ~= 0.13.0 +prometheus_client >= 0.9.0