X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=prometheus%2Fburrow-prometheus.c;h=0e760e737728bdf714d14903461499cb0918a53d;hb=228f98a7bea12a3cc18aab18f50951d3256bc5fe;hp=579d5307161df47265b8fc310f93ad6705e01396;hpb=548d62f3460bfd0cb300b2b8ce9128fc76d0ca64;p=home-hw.git diff --git a/prometheus/burrow-prometheus.c b/prometheus/burrow-prometheus.c index 579d530..0e760e7 100644 --- a/prometheus/burrow-prometheus.c +++ b/prometheus/burrow-prometheus.c @@ -1,7 +1,7 @@ /* * A gateway between MQTT and Prometheus * - * (c) 2018 Martin Mares + * (c) 2018--2019 Martin Mares */ #include @@ -74,16 +74,16 @@ static const struct attr attr_table[] = { .topic = "burrow/temp/garage" }, { - .metric = "temp_machinarium", - .help = "Temperature in the Machinarium [degC]", + .metric = "temp_kitchen", + .help = "Temperature in the kitchen [degC]", .type = "gauge", - .topic = "burrow/temp/machinarium" + .topic = "burrow/temp/kitchen" }, { - .metric = "rh_garage", - .help = "Relative humidity in the garage [%]", + .metric = "rh_ursarium", + .help = "Relative humidity in the Ursarium [%]", .type = "gauge", - .topic = "burrow/temp/garage-rh" + .topic = "burrow/temp/ursarium-rh" }, { .metric = "temp_catarium_clock", @@ -98,16 +98,118 @@ static const struct attr attr_table[] = { .topic = "burrow/pressure/clock" }, { - .metric = "loft_fan", - .help = "Fan velocity in the loft (0-3)", + .metric = "air_inside_intake", + .help = "Temperature of air intake from inside [degC]", .type = "gauge", - .topic = "burrow/loft/fan" + .topic = "burrow/air/inside-intake", }, { - .metric = "loft_circulation", - .help = "Circulation pump in the loft (0-1)", + .metric = "air_inside_exhaust", + .help = "Temperature of air exhaust to inside [degC]", .type = "gauge", - .topic = "burrow/loft/circulation" + .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", }, }; @@ -270,6 +372,11 @@ static void http_answer(struct fastbuf *fb) 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)); @@ -281,17 +388,15 @@ static void http_answer(struct fastbuf *fb) 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'); + } } } @@ -336,7 +441,7 @@ static int use_debug; 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"),