Changeset - d2da7d83904c
[Not reviewed]
default
0 1 0
Dennis Fink - 5 years ago 2020-02-10 22:41:20
dennis.fink@c3l.lu
Use try clause around setting values
1 file changed with 24 insertions and 6 deletions:
0 comments (0 inline, 0 general)
mqtt2prometheus.py
Show inline comments
 
@@ -58,97 +58,115 @@ TOPIC_TO_HANDLER = {
 
    "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)
 

	
 
    for topic, handler in TOPIC_TO_HANDLER:
 
        client.message_callback_add(topic, handler)
 

	
 
    for topic in ["availability/#", "space/status", "space/member_count", "sensors/#"]:
 
        client.subscribe(topic)
 

	
 

	
 
def handle_people_now_present(client, userdata, msg):
 
    people_now_present.set(json.loads(msg.payload))
 

	
 

	
 
def handle_space_status(client, userdata, msg):
 
    state = json.loads(msg.payload)
 
    space_state.set(int(state["open"]))
 
    space_lastchange.set(state["lastchange"])
 

	
 

	
 
def handle_member_count(client, userdata, msg):
 
    count = json.loads(msg.payload)
 
    member_count.labels(count["name"]).set(count["value"])
 

	
 

	
 
def handle_availability(client, userdata, msg):
 
    t = msg.topic.split("/")
 
    if len(t) == 2:
 
        c = t[-1]
 
    else:
 
        c = "_".join(t[1:])
 
    v = 1 if msg.payload == b"online" else 0
 
    availability.labels(c).set(v)
 

	
 

	
 
def handle_temperature(client, userdata, msg):
 
    t = msg.topic.split("/")
 
    location = "-".join(t[2:])
 
    temperature.labels(location).set(float(msg.payload))
 
    try:
 
        temperature.labels(location).set(float(msg.payload))
 
    except:
 
        pass
 

	
 

	
 
def handle_humidity(client, userdata, msg):
 
    t = msg.topic.split("/")
 
    location = "-".join(t[2:])
 
    humidity.labels(location).set(float(msg.payload))
 
    try:
 
        humidity.labels(location).set(float(msg.payload))
 
    except:
 
        pass
 

	
 

	
 
def handle_barometer(client, userdata, msg):
 
    t = msg.topic.split("/")
 
    location = "-".join(t[2:])
 
    barometer.labels(location).set(float(msg.payload))
 
    try:
 
        barometer.labels(location).set(float(msg.payload))
 
    except:
 
        pass
 

	
 

	
 
def handle_power_consumption(client, userdata, msg):
 
    t = msg.topic.split("/")
 
    location = "-".join(t[2:])
 
    power_consumption.labels(location).set(float(msg.payload))
 
    try:
 
        power_consumption.labels(location).set(float(msg.payload))
 
    except:
 
        pass
 

	
 

	
 
def handle_co2_emission(client, userdata, msg):
 
    t = msg.topic.split("/")
 
    location = "-".join(t[2:])
 
    co2_emission.labels(location).set(float(msg.payload))
 
    try:
 
        co2_emission.labels(location).set(float(msg.payload))
 
    except:
 
        pass
 

	
 

	
 
def handle_energy_consumption(client, userdata, msg):
 
    t = msg.topic.split("/")
 
    location = "-".join(t[2:])
 
    energy_consumption.labels(location).set(float(msg.payload))
 
    try:
 
        energy_consumption.labels(location).set(float(msg.payload))
 
    except:
 
        pass
 

	
 

	
 
def main():
 

	
 
    client = mqtt.Client("mqtt2prometheus")
 
    client.on_connect = on_connect
 
    client.username_pw_set(CONFIG["mqtt"]["username"], CONFIG["mqtt"]["password"])
 
    client.will_set("availability/mqtt2prometheus", "offline", 2, True)
 

	
 
    client.connect(CONFIG["mqtt"]["host"])
 
    client.loop_start()
 
    start_http_server(CONFIG["prometheus"]["port"])
 
    while True:
 
        time.sleep(1)
 

	
 

	
 
if __name__ == "__main__":
 
    main()
0 comments (0 inline, 0 general)