75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"os"
|
|
)
|
|
|
|
var db *sql.DB
|
|
|
|
// 初始化数据库
|
|
func initDB() {
|
|
var err error
|
|
if err := os.MkdirAll("data", 0755); err != nil {
|
|
logger.Fatalf("创建数据目录失败: %v", err)
|
|
}
|
|
|
|
db, err = sql.Open("sqlite", "data/sensor.db")
|
|
if err != nil {
|
|
logger.Fatalf("打开数据库错误: %v", err)
|
|
}
|
|
|
|
// 创建数据表
|
|
createTableSQL := `CREATE TABLE IF NOT EXISTS sensor_data (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
timestamp DATETIME NOT NULL,
|
|
wind_speed INTEGER,
|
|
wind_force INTEGER,
|
|
wind_direction8 INTEGER,
|
|
wind_direction360 INTEGER,
|
|
humidity INTEGER,
|
|
temperature INTEGER,
|
|
noise INTEGER,
|
|
pm25 INTEGER,
|
|
pm10 INTEGER,
|
|
atm_pressure INTEGER,
|
|
lux20wh INTEGER,
|
|
lux20wl INTEGER,
|
|
light20w INTEGER,
|
|
optical_rain INTEGER,
|
|
compass_angle INTEGER,
|
|
solar_radiation INTEGER
|
|
);`
|
|
|
|
_, err = db.Exec(createTableSQL)
|
|
if err != nil {
|
|
logger.Fatalf("创建表错误: %v", err)
|
|
}
|
|
}
|
|
|
|
// 保存传感器数据到数据库
|
|
func saveSensorData(data SensorData) {
|
|
stmt, err := db.Prepare(`INSERT INTO sensor_data (
|
|
timestamp, wind_speed, wind_force, wind_direction8, wind_direction360,
|
|
humidity, temperature, noise, pm25, pm10, atm_pressure,
|
|
lux20wh, lux20wl, light20w, optical_rain, compass_angle, solar_radiation
|
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
|
|
if err != nil {
|
|
logger.Printf("准备SQL语句错误: %v", err)
|
|
return
|
|
}
|
|
defer stmt.Close()
|
|
|
|
_, err = stmt.Exec(
|
|
data.Timestamp, data.WindSpeed, data.WindForce, data.WindDirection8, data.WindDirection360,
|
|
data.Humidity, data.Temperature, data.Noise, data.PM25, data.PM10, data.AtmPressure,
|
|
data.Lux20WH, data.Lux20WL, data.Light20W, data.OpticalRain, data.CompassAngle, data.SolarRadiation,
|
|
)
|
|
|
|
if err != nil {
|
|
logger.Printf("保存数据错误: %v", err)
|
|
return
|
|
}
|
|
}
|