From 5ffbe50b1e1c246db8b5d81a1a81dc9a5f101d64 Mon Sep 17 00:00:00 2001 From: Franziska Kunsmann Date: Tue, 23 Jan 2024 09:30:13 +0100 Subject: [PATCH] add bundle:telegraf_airgradient --- .../files/airgradient_telegraf | 54 +++++++++++++++++++ bundles/telegraf_airgradient/items.py | 3 ++ bundles/telegraf_airgradient/metadata.py | 19 +++++++ nodes/htz-cloud/influxdb.py | 4 ++ 4 files changed, 80 insertions(+) create mode 100644 bundles/telegraf_airgradient/files/airgradient_telegraf create mode 100644 bundles/telegraf_airgradient/items.py create mode 100644 bundles/telegraf_airgradient/metadata.py diff --git a/bundles/telegraf_airgradient/files/airgradient_telegraf b/bundles/telegraf_airgradient/files/airgradient_telegraf new file mode 100644 index 0000000..3ada3e8 --- /dev/null +++ b/bundles/telegraf_airgradient/files/airgradient_telegraf @@ -0,0 +1,54 @@ +#!/usr/bin/python3 + +from logging import basicConfig, getLogger +from sys import argv + +from requests import get + +basicConfig(level="INFO") +L = getLogger(__name__) + + +def out(keys, values): + print( + "airgradient,{} {}".format( + ",".join([f"{k}={v}" for k, v in keys.items()]), + ",".join([f"{k}={v}" for k, v in values.items()]), + ), + flush=True, + ) + + +try: + r = get( + f"https://api.airgradient.com/public/api/v1/locations/measures/current?token={argv[2]}" + ) + L.debug(r.status_code) + L.info(r.text) + r.raise_for_status() + for location in r.json(): + L.debug(location) + out( + { + "place": argv[1], + "location": location["locationName"], + }, + { + k: location[k] + for k in ( + "atmp", + "noxIndex", + "pm003Count", + "pm01", + "pm02", + "pm10", + "rco2", + "rhum", + "tvoc", + "tvocIndex", + "wifi", + ) + }, + ) +except Exception: + L.exception("fail!") diff --git a/bundles/telegraf_airgradient/items.py b/bundles/telegraf_airgradient/items.py new file mode 100644 index 0000000..702d22f --- /dev/null +++ b/bundles/telegraf_airgradient/items.py @@ -0,0 +1,3 @@ +files['/usr/local/bin/airgradient_telegraf'] = { + 'mode': '0755', +} diff --git a/bundles/telegraf_airgradient/metadata.py b/bundles/telegraf_airgradient/metadata.py new file mode 100644 index 0000000..f64fb28 --- /dev/null +++ b/bundles/telegraf_airgradient/metadata.py @@ -0,0 +1,19 @@ +@metadata_reactor.provides( + 'telegraf/input_plugins/exec', +) +def telegraf(metadata): + result = {} + for location, api_key in metadata.get('telegraf_airgradient', {}).items(): + result[f'airgradient_{location}'] = { + 'commands': [f'/usr/local/bin/airgradient_telegraf {location} {api_key}'], + 'data_format': 'influx', + 'timeout': '10s', + } + + return { + 'telegraf': { + 'input_plugins': { + 'exec': result, + }, + }, + } diff --git a/nodes/htz-cloud/influxdb.py b/nodes/htz-cloud/influxdb.py index 59f729e..b609857 100644 --- a/nodes/htz-cloud/influxdb.py +++ b/nodes/htz-cloud/influxdb.py @@ -3,6 +3,7 @@ nodes['htz-cloud.influxdb'] = { 'bundles': { 'grafana', 'influxdb2', + 'telegraf_airgradient', 'telegraf-monitors-mikrotik', 'zfs', }, @@ -66,6 +67,9 @@ nodes['htz-cloud.influxdb'] = { }, }, }, + 'telegraf_airgradient': { + 'Home': vault.decrypt('encrypt$gAAAAABlr3KvHLSHLFwVr5hvJ1j676Flm5fVLumqpBcffjYWXjPjSovDXCyEcVqhxfsX-GNut2dXsenFQoFShaAugLV_zVQYaLnNQipbZqI0cXfsMht1iZPyOxlSzy3YoZ3voSaeiLll'), + }, 'telegraf': { 'input_plugins': { 'builtin': {