1#include "core/aqm_db.h"
7 if (aqm_db_open(&db) != 0)
10 sqlite3_stmt *res = NULL;
12 "SELECT r.id, r.sensor_id, s.name, r.model, r.measured_at, r.pm25, r.pm10, r.co, r.no2, r.o3, r.so2 "
13 "FROM readings r JOIN sensors s ON s.id = r.sensor_id "
14 "ORDER BY r.measured_at DESC LIMIT 200;";
16 if (sqlite3_prepare_v2(db, sql, -1, &res, NULL) != SQLITE_OK) {
17 fprintf(stderr,
"Query failed: %s\n", sqlite3_errmsg(db));
22 printf(
"\n--- Recent readings (newest first, max 200) ---\n");
23 printf(
"%-6s %-4s %-16s %-12s %-19s %8s %8s %8s %8s %8s %8s\n",
"id",
"sid",
"sensor",
"model",
"measured_at",
"pm25",
24 "pm10",
"co",
"no2",
"o3",
"so2");
26 while (sqlite3_step(res) == SQLITE_ROW) {
27 int id = sqlite3_column_int(res, 0);
28 int sid = sqlite3_column_int(res, 1);
29 const char *sname = (
const char *)sqlite3_column_text(res, 2);
30 const char *model = (
const char *)sqlite3_column_text(res, 3);
31 const char *ts = (
const char *)sqlite3_column_text(res, 4);
32 double pm25 = sqlite3_column_double(res, 5);
33 double pm10 = sqlite3_column_double(res, 6);
34 double co = sqlite3_column_double(res, 7);
35 double no2 = sqlite3_column_double(res, 8);
36 double o3 = sqlite3_column_double(res, 9);
37 double so2 = sqlite3_column_double(res, 10);
39 printf(
"%-6d %-4d %-16s %-12s %-19s %8.2f %8.2f %8.2f %8.4f %8.4f %8.4f\n",
id, sid, sname ? sname :
"",
40 model ? model :
"", ts ? ts :
"", pm25, pm10, co, no2, o3, so2);
43 sqlite3_finalize(res);