diff --git a/mqtt2prometheus.py b/mqtt2prometheus.py --- a/mqtt2prometheus.py +++ b/mqtt2prometheus.py @@ -51,33 +51,28 @@ energy_consumption = Gauge( ) +TOPIC_TO_HANDLER = { + "availability/#": handle_availability, + "space/status": handle_space_status, + "space/member_count": handle_member_count, + "sensors/people_now_present": handle_people_now_present, + "sensors/temperature/#": handle_temperature, + "sensors/humidity/#": handle_humidity, + "sensors/barometer/#": handle_barometer, + "sensors/power_consumption/#": handle_power_consumption, + "sensors/co2_emission/#": handle_co2_emission, + "sensors/energy_consumption/#": handle_energy_consumption, +} + + def on_connect(client, userdata, flags, rc): client.publish("availability/mqtt2prometheus", "online", 2, True) - client.message_callback_add("sensors/people_now_present", handle_people_now_present) - client.message_callback_add("space/status", handle_space_status) - client.message_callback_add("space/member_count", handle_member_count) - client.message_callback_add("availability/#", handle_availability) - client.message_callback_add("sensors/temperature/#", handle_temperature) - client.message_callback_add("sensors/humidity/#", handle_humidity) - client.message_callback_add("sensors/barometer/#", handle_barometer) - client.message_callback_add("sensors/power_consumption/#", handle_power_consumption) - client.message_callback_add("sensors/co2_emission/#", handle_co2_emission) - client.message_callback_add( - "sensors/energy_consumption/#", handle_energy_consumption - ) + for topic, handler in TOPIC_TO_HANDLER: + client.message_callback_add(topic, handler) - client.subscribe("sensors/people_now_present") - client.subscribe("space/status") - client.subscribe("space/member_count") - client.subscribe("availability/+") - client.subscribe("availability/shutdown/+") - client.subscribe("sensors/temperature/#") - client.subscribe("sensors/humidity/#") - client.subscribe("sensors/barometer/#") - client.subscribe("sensors/power_consumption/#") - client.subscribe("sensors/co2_emission/#") - client.subscribe("sensors/energy_consumption/#") + for topic in ["availability/#", "space/status", "space/member_count", "sensors/#"]: + client.subscribe(topic) def handle_people_now_present(client, userdata, msg):