|
|
@@ -28,11 +28,12 @@ type MQTTConfig struct {
|
|
|
}
|
|
|
|
|
|
type BLEConfig struct {
|
|
|
- ID int `json:"id"`
|
|
|
- DeviceName string `json:"device_name"`
|
|
|
- ServiceUUID string `json:"service_uuid"`
|
|
|
- CharUUID string `json:"char_uuid"`
|
|
|
- Enabled bool `json:"enabled"`
|
|
|
+ ID int `json:"id"`
|
|
|
+ DeviceName string `json:"device_name"`
|
|
|
+ ServiceUUID string `json:"service_uuid"`
|
|
|
+ ModeCharUUID string `json:"mode_char_uuid"`
|
|
|
+ ConfigCharUUID string `json:"config_char_uuid"`
|
|
|
+ Enabled bool `json:"enabled"`
|
|
|
}
|
|
|
|
|
|
func New(dbPath string) (*DB, error) {
|
|
|
@@ -90,7 +91,8 @@ func (d *DB) init() error {
|
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
device_name TEXT NOT NULL,
|
|
|
service_uuid TEXT NOT NULL,
|
|
|
- char_uuid TEXT NOT NULL,
|
|
|
+ mode_char_uuid TEXT NOT NULL DEFAULT '',
|
|
|
+ config_char_uuid TEXT NOT NULL DEFAULT '',
|
|
|
enabled BOOLEAN DEFAULT 1
|
|
|
);
|
|
|
`
|
|
|
@@ -99,7 +101,7 @@ func (d *DB) init() error {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- for _, col := range []string{"service_uuid", "char_uuid"} {
|
|
|
+ for _, col := range []string{"service_uuid", "mode_char_uuid", "config_char_uuid"} {
|
|
|
alterQuery := fmt.Sprintf("ALTER TABLE ble_config ADD COLUMN %s TEXT NOT NULL DEFAULT ''", col)
|
|
|
d.conn.ExecContext(context.Background(), alterQuery)
|
|
|
}
|
|
|
@@ -184,11 +186,11 @@ func (d *DB) Close() error {
|
|
|
}
|
|
|
|
|
|
func (d *DB) GetBLEConfig() (*BLEConfig, error) {
|
|
|
- query := "SELECT id, device_name, service_uuid, char_uuid, enabled FROM ble_config WHERE enabled = 1 LIMIT 1"
|
|
|
+ query := "SELECT id, device_name, service_uuid, mode_char_uuid, config_char_uuid, enabled FROM ble_config WHERE enabled = 1 LIMIT 1"
|
|
|
row := d.conn.QueryRowContext(context.Background(), query)
|
|
|
|
|
|
var cfg BLEConfig
|
|
|
- err := row.Scan(&cfg.ID, &cfg.DeviceName, &cfg.ServiceUUID, &cfg.CharUUID, &cfg.Enabled)
|
|
|
+ err := row.Scan(&cfg.ID, &cfg.DeviceName, &cfg.ServiceUUID, &cfg.ModeCharUUID, &cfg.ConfigCharUUID, &cfg.Enabled)
|
|
|
if err == sql.ErrNoRows {
|
|
|
logger.Debug("未找到启用的 BLE 配置")
|
|
|
return nil, nil
|
|
|
@@ -203,15 +205,15 @@ func (d *DB) GetBLEConfig() (*BLEConfig, error) {
|
|
|
|
|
|
func (d *DB) SaveBLEConfig(cfg *BLEConfig) error {
|
|
|
if cfg.ID == 0 {
|
|
|
- query := "INSERT INTO ble_config (device_name, service_uuid, char_uuid, enabled) VALUES (?, ?, ?, ?)"
|
|
|
- _, err := d.conn.ExecContext(context.Background(), query, cfg.DeviceName, cfg.ServiceUUID, cfg.CharUUID, cfg.Enabled)
|
|
|
+ query := "INSERT INTO ble_config (device_name, service_uuid, mode_char_uuid, config_char_uuid, enabled) VALUES (?, ?, ?, ?, ?)"
|
|
|
+ _, err := d.conn.ExecContext(context.Background(), query, cfg.DeviceName, cfg.ServiceUUID, cfg.ModeCharUUID, cfg.ConfigCharUUID, cfg.Enabled)
|
|
|
if err != nil {
|
|
|
logger.Error("插入 BLE 配置失败: %v", err)
|
|
|
}
|
|
|
return err
|
|
|
}
|
|
|
- query := "UPDATE ble_config SET device_name = ?, service_uuid = ?, char_uuid = ?, enabled = ? WHERE id = ?"
|
|
|
- _, err := d.conn.ExecContext(context.Background(), query, cfg.DeviceName, cfg.ServiceUUID, cfg.CharUUID, cfg.Enabled, cfg.ID)
|
|
|
+ query := "UPDATE ble_config SET device_name = ?, service_uuid = ?, mode_char_uuid = ?, config_char_uuid = ?, enabled = ? WHERE id = ?"
|
|
|
+ _, err := d.conn.ExecContext(context.Background(), query, cfg.DeviceName, cfg.ServiceUUID, cfg.ModeCharUUID, cfg.ConfigCharUUID, cfg.Enabled, cfg.ID)
|
|
|
if err != nil {
|
|
|
logger.Error("更新 BLE 配置失败: id=%d, %v", cfg.ID, err)
|
|
|
}
|
|
|
@@ -230,7 +232,7 @@ func (d *DB) DeleteBLEConfig(id int) error {
|
|
|
}
|
|
|
|
|
|
func (d *DB) ListBLEConfigs() ([]BLEConfig, error) {
|
|
|
- query := "SELECT id, device_name, service_uuid, char_uuid, enabled FROM ble_config ORDER BY id"
|
|
|
+ query := "SELECT id, device_name, service_uuid, mode_char_uuid, config_char_uuid, enabled FROM ble_config ORDER BY id"
|
|
|
rows, err := d.conn.QueryContext(context.Background(), query)
|
|
|
if err != nil {
|
|
|
logger.Error("查询 BLE 配置列表失败: %v", err)
|
|
|
@@ -241,7 +243,7 @@ func (d *DB) ListBLEConfigs() ([]BLEConfig, error) {
|
|
|
var configs []BLEConfig
|
|
|
for rows.Next() {
|
|
|
var cfg BLEConfig
|
|
|
- if err := rows.Scan(&cfg.ID, &cfg.DeviceName, &cfg.ServiceUUID, &cfg.CharUUID, &cfg.Enabled); err != nil {
|
|
|
+ if err := rows.Scan(&cfg.ID, &cfg.DeviceName, &cfg.ServiceUUID, &cfg.ModeCharUUID, &cfg.ConfigCharUUID, &cfg.Enabled); err != nil {
|
|
|
logger.Warn("扫描 BLE 配置行失败: %v", err)
|
|
|
continue
|
|
|
}
|