/*
* A gateway between MQTT and Prometheus
*
- * (c) 2018 Martin Mares <mj@ucw.cz>
+ * (c) 2018--2019 Martin Mares <mj@ucw.cz>
*/
#include <ucw/lib.h>
.type = "gauge",
.topic = "burrow/pressure/clock"
},
+ {
+ .metric = "air_inside_intake",
+ .help = "Temperature of air intake from inside [degC]",
+ .type = "gauge",
+ .topic = "burrow/air/inside-intake",
+ },
+ {
+ .metric = "air_inside_exhaust",
+ .help = "Temperature of air exhaust to inside [degC]",
+ .type = "gauge",
+ .topic = "burrow/air/inside-exhaust",
+ },
+ {
+ .metric = "air_outside_intake",
+ .help = "Temperature of air intake from outside [degC]",
+ .type = "gauge",
+ .topic = "burrow/air/outside-intake",
+ },
+ {
+ .metric = "air_outside_exhaust",
+ .help = "Temperature of air exhaust to outside [degC]",
+ .type = "gauge",
+ .topic = "burrow/air/outside-exhaust",
+ },
+ {
+ .metric = "air_mixed",
+ .help = "Temperature of mixed air [degC]",
+ .type = "gauge",
+ .topic = "burrow/air/mixed",
+ },
+ {
+ .metric = "air_inside_intake_avg",
+ .help = "Average temperature of air intake from inside [degC]",
+ .type = "gauge",
+ .topic = "burrow/avg/air/inside-intake",
+ },
+ {
+ .metric = "air_outside_intake_avg",
+ .help = "Average temperature of air intake from outside [degC]",
+ .type = "gauge",
+ .topic = "burrow/avg/air/outside-intake",
+ },
+ {
+ .metric = "air_bypass",
+ .help = "Heat exchanger bypass (0-1)",
+ .type = "gauge",
+ .topic = "burrow/air/bypass"
+ },
+ {
+ .metric = "air_fan_pwm",
+ .help = "Heat exchanger fan PWM (0-255)",
+ .type = "gauge",
+ .topic = "burrow/air/exchanger-fan"
+ },
+ {
+ // Common heading for all voltages
+ .metric = "pm_voltage",
+ .help = "Voltage between phases and neutral [V]",
+ .type = "gauge",
+ },
+ {
+ .metric = "pm_voltage{phase=\"L1N\"}",
+ .topic = "burrow/power/voltage/l1n",
+ },
+ {
+ .metric = "pm_voltage{phase=\"L2N\"}",
+ .topic = "burrow/power/voltage/l2n",
+ },
+ {
+ .metric = "pm_voltage{phase=\"L3N\"}",
+ .topic = "burrow/power/voltage/l3n",
+ },
+ {
+ // Common heading for all currents
+ .metric = "pm_current",
+ .help = "Current through phases [A]",
+ .type = "gauge",
+ },
+ {
+ .metric = "pm_current{phase=\"L1\"}",
+ .topic = "burrow/power/current/l1",
+ },
+ {
+ .metric = "pm_current{phase=\"L2\"}",
+ .topic = "burrow/power/current/l2",
+ },
+ {
+ .metric = "pm_current{phase=\"L3\"}",
+ .topic = "burrow/power/current/l3",
+ },
+ {
+ .metric = "pm_power",
+ .help = "Total power [W]",
+ .type = "gauge",
+ .topic = "burrow/power/power",
+ },
+ {
+ .metric = "pm_energy",
+ .help = "Total energy [kWh]",
+ .type = "gauge",
+ .topic = "burrow/power/energy",
+ },
+ {
+ .metric = "pm_reactive_power",
+ .help = "Total reactive power [VAr]",
+ .type = "gauge",
+ .topic = "burrow/power/reactive/power",
+ },
+ {
+ .metric = "pm_reactive_energy",
+ .help = "Total reactive energy [kVArh]",
+ .type = "gauge",
+ .topic = "burrow/power/reactive/energy",
+ },
};
static char *attr_values[ARRAY_SIZE(attr_table)];
snprintf(val, sizeof(val), "%s", attr_values[i] ? : "");
pthread_mutex_unlock(&attr_mutex);
+ if (a->help)
+ bprintf(fb, "# HELP %s %s\n", a->metric, a->help);
+ if (a->type)
+ bprintf(fb, "# TYPE %s %s\n", a->metric, a->type);
+
if (!val[0])
continue;
int fields = str_wordsplit(val, w, ARRAY_SIZE(w));
continue;
}
- if (a->help)
- bprintf(fb, "# HELP %s %s\n", a->metric, a->help);
- if (a->type)
- bprintf(fb, "# TYPE %s %s\n", a->metric, a->type);
- bprintf(fb, "%s %s", a->metric, val);
+ if (a->topic) {
+ bprintf(fb, "%s %s", a->metric, val);
#if 0
- // Prometheus does not like our timestamps -- why?
- if (fields >= 2)
- bprintf(fb, " %s", w[1]);
+ // Prometheus does not like our timestamps -- why?
+ if (fields >= 2)
+ bprintf(fb, " %s", w[1]);
#endif
- bputc(fb, '\n');
+ bputc(fb, '\n');
+ }
}
}
static struct opt_section options = {
OPT_ITEMS {
- OPT_HELP("A daemon for controlling the solid state relay module via MQTT"),
+ OPT_HELP("A daemon for transferring MQTT data to Prometheus"),
OPT_HELP(""),
OPT_HELP("Options:"),
OPT_BOOL('d', "debug", use_debug, 0, "\tLog debugging messages"),