Add BME280 statistics

This commit is contained in:
Pim van Pelt
2018-04-04 15:01:20 +02:00
parent 9a71d580c0
commit e41fb6900d

View File

@ -10,8 +10,8 @@ static struct mgos_bme280 *s_bme280;
static struct mgos_bme280_data s_bme280_data; static struct mgos_bme280_data s_bme280_data;
static void bme280_prometheus_metrics(struct mg_connection *nc, void *user_data) { static void bme280_prometheus_metrics(struct mg_connection *nc, void *user_data) {
bool bme280; bool bme280;
struct mgos_bme280_stats stats;
if (!s_bme280) return; if (!s_bme280) return;
bme280=mgos_bme280_is_bme280(s_bme280); bme280=mgos_bme280_is_bme280(s_bme280);
@ -30,16 +30,38 @@ static void bme280_prometheus_metrics(struct mg_connection *nc, void *user_data)
"{sensor=\"0\",type=\"BM%s280\"} %f", bme280?"E":"P", s_bme280_data.humid); "{sensor=\"0\",type=\"BM%s280\"} %f", bme280?"E":"P", s_bme280_data.humid);
} }
if (mgos_bme280_getStats(s_bme280, &stats)) {
mgos_prometheus_metrics_printf(nc, COUNTER,
"sensor_read_total", "Total reads from sensor",
"{sensor=\"0\",type=\"BM%s280\"} %u", bme280?"E":"P", stats.read);
mgos_prometheus_metrics_printf(nc, COUNTER,
"sensor_read_success_total", "Total successful reads from sensor",
"{sensor=\"0\",type=\"BM%s280\"} %u", bme280?"E":"P", stats.read_success);
mgos_prometheus_metrics_printf(nc, COUNTER,
"sensor_read_success_cached_total", "Total successful cached reads from sensor",
"{sensor=\"0\",type=\"BM%s280\"} %u", bme280?"E":"P", stats.read_success_cached);
uint32_t errors = stats.read - stats.read_success - stats.read_success_cached;
mgos_prometheus_metrics_printf(nc, COUNTER,
"sensor_read_error_total", "Total unsuccessful reads from sensor",
"{sensor=\"0\",type=\"BM%s280\"} %u", bme280?"E":"P", errors);
mgos_prometheus_metrics_printf(nc, COUNTER,
"sensor_read_success_usecs_total", "Total microseconds spent in reads from sensor",
"{sensor=\"0\",type=\"BM%s280\"} %f", bme280?"E":"P", stats.read_success_usecs);
}
(void) user_data; (void) user_data;
} }
static void bme280_timer_cb(void *user_data) { static void bme280_timer_cb(void *user_data) {
double start; struct mgos_bme280_stats stats_before, stats_after;
uint32_t usecs=0; uint32_t usecs=0;
start=mgos_uptime(); mgos_bme280_getStats(s_bme280, &stats_before);
mgos_bme280_read(s_bme280, &s_bme280_data); mgos_bme280_read(s_bme280, &s_bme280_data);
usecs=1000000*(mgos_uptime()-start); mgos_bme280_getStats(s_bme280, &stats_after);
usecs=stats_after.read_success_usecs - stats_before.read_success_usecs;
if (mgos_bme280_is_bme280(s_bme280)) { if (mgos_bme280_is_bme280(s_bme280)) {
LOG(LL_INFO, ("BME280 sensor=0 humidity=%.2f%% temperature=%.2fC pressure=%.1fHPa usecs=%u", s_bme280_data.humid, s_bme280_data.temp, s_bme280_data.press, usecs)); LOG(LL_INFO, ("BME280 sensor=0 humidity=%.2f%% temperature=%.2fC pressure=%.1fHPa usecs=%u", s_bme280_data.humid, s_bme280_data.temp, s_bme280_data.press, usecs));