Air Quality Monitor
Portable C application for collecting, storing, and analyzing air quality sensor readings
Loading...
Searching...
No Matches
fetch_data.c
1#include "core/aqm_db.h"
2#include <stdio.h>
3#include <sqlite3.h>
4
5void fetch_data(void) {
6 sqlite3 *db = NULL;
7 if (aqm_db_open(&db) != 0)
8 return;
9
10 sqlite3_stmt *res = NULL;
11 const char *sql =
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;";
15
16 if (sqlite3_prepare_v2(db, sql, -1, &res, NULL) != SQLITE_OK) {
17 fprintf(stderr, "Query failed: %s\n", sqlite3_errmsg(db));
18 aqm_db_close(db);
19 return;
20 }
21
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");
25
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);
38
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);
41 }
42
43 sqlite3_finalize(res);
44 aqm_db_close(db);
45}