feat: device state checker
This commit is contained in:
+17
-2
@@ -16,6 +16,7 @@ import (
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
|
||||
"git.piskot.si/SeminarM2/lambdaiot-core/internal/config"
|
||||
"git.piskot.si/SeminarM2/lambdaiot-core/internal/devicecheck"
|
||||
"git.piskot.si/SeminarM2/lambdaiot-core/internal/handler"
|
||||
"git.piskot.si/SeminarM2/lambdaiot-core/internal/middleware"
|
||||
mqttclient "git.piskot.si/SeminarM2/lambdaiot-core/internal/mqtt"
|
||||
@@ -54,6 +55,8 @@ func main() {
|
||||
|
||||
// connect to MQTT broker (best-effort)
|
||||
var mq *mqttclient.Client
|
||||
var checker *devicecheck.Checker
|
||||
var checkCancel context.CancelFunc
|
||||
// initialize sqlite for state messages
|
||||
var stateDB *storage.DB
|
||||
{
|
||||
@@ -77,17 +80,26 @@ func main() {
|
||||
mq = mqc
|
||||
mqttclient.SetDefault(mqc)
|
||||
|
||||
// start device state checker when MQTT is available
|
||||
checkCtx, checkCancel = context.WithCancel(context.Background())
|
||||
checker = devicecheck.New(sqlDB, mq, cfg.MQTT.Topic, 0, 0)
|
||||
checker.Start(checkCtx)
|
||||
|
||||
// subscribe to the configured topic and log incoming messages
|
||||
if cfg.MQTT.Topic != "" {
|
||||
if err := mq.Subscribe(cfg.MQTT.Topic, func(t string, p []byte) {
|
||||
handlerFn := func(t string, p []byte) {
|
||||
log.Printf("mqtt recv on %s: %s", t, string(p))
|
||||
if checker != nil {
|
||||
checker.HandleMessage(p)
|
||||
}
|
||||
// if topic starts with state: -> store in sqlite
|
||||
if strings.HasPrefix(t, "state:") {
|
||||
if storage.Default != nil {
|
||||
_ = storage.Default.InsertMessage(string(p), time.Now())
|
||||
}
|
||||
}
|
||||
}); err != nil {
|
||||
}
|
||||
if err := mq.Subscribe(cfg.MQTT.Topic, handlerFn); err != nil {
|
||||
log.Printf("warning: mqtt subscribe failed: %v", err)
|
||||
}
|
||||
}
|
||||
@@ -173,6 +185,9 @@ func main() {
|
||||
if mq != nil {
|
||||
mq.Close()
|
||||
}
|
||||
if checkCancel != nil {
|
||||
checkCancel()
|
||||
}
|
||||
if stateDB != nil {
|
||||
stateDB.Close()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user