diff --git a/alarm/alarm.go b/alarm/alarm.go new file mode 100644 index 0000000000000000000000000000000000000000..c5c8fa6d3de8ed7fe50945288164469ad654d048 --- /dev/null +++ b/alarm/alarm.go @@ -0,0 +1,28 @@ +package alarm + +import ( + "slices" + + "jonasled.dev/firehouse-smokedetection/backend/database/tables" + "jonasled.dev/firehouse-smokedetection/backend/types" + plugininterface "jonasled.dev/firehouse-smokedetection/plugin-interface" + "jonasled.dev/jonasled/go-libs/log" +) + +func Alarm(mqttMessage types.Z2MSmoke, smokeDetector tables.SmokeDetector) { + log.Log.Infof("Sensor %s reported smoke", smokeDetector.Name) + if smokeDetector.AlarmPlugin == "" { + return + } + if !slices.Contains(GetAllPlugins(), smokeDetector.AlarmPlugin) { + log.Log.Errorf("Plugin %s for smoke sensor %s not found, can't forward alarm", smokeDetector.AlarmPlugin, smokeDetector.Name) + return + } + Plugins[smokeDetector.AlarmPlugin].Alarm(plugininterface.AlarmSmokeSensor{ + Smoke: mqttMessage.Smoke, + Test: mqttMessage.Test, + Name: smokeDetector.Name, + ZigBeeName: smokeDetector.ZigBeeName, + Tamper: mqttMessage.Tamper, + }, smokeDetector.AlarmPluginConfigId) +} diff --git a/mqttclient/mqttmessage.go b/mqttclient/mqttmessage.go index 496920bfcb64507adb50eda917177ad9d8b09350..75e7721bb3935aaedae945aaec934bba5f79efc3 100644 --- a/mqttclient/mqttmessage.go +++ b/mqttclient/mqttmessage.go @@ -5,6 +5,7 @@ import ( "strings" mqtt "github.com/eclipse/paho.mqtt.golang" + "jonasled.dev/firehouse-smokedetection/backend/alarm" "jonasled.dev/firehouse-smokedetection/backend/cache" "jonasled.dev/firehouse-smokedetection/backend/database" "jonasled.dev/firehouse-smokedetection/backend/database/tables" @@ -35,8 +36,8 @@ var messagePubHandlerZ2M mqtt.MessageHandler = func(client mqtt.Client, msg mqtt var smokeDetector tables.SmokeDetector topicSplit := strings.Split(msg.Topic(), "/") deviceName := topicSplit[len(topicSplit)-1] - tx := database.Db.First(&smokeDetector, tables.SmokeDetector{ZigBeeName: deviceName}) - if tx.RowsAffected == 0 { + database.Db.First(&smokeDetector, tables.SmokeDetector{ZigBeeName: deviceName}) + if smokeDetector.ID == 0 { log.Log.Info("Found new smoke detector: ", deviceName) smokeDetector = tables.SmokeDetector{ ZigBeeName: deviceName, @@ -47,7 +48,7 @@ var messagePubHandlerZ2M mqtt.MessageHandler = func(client mqtt.Client, msg mqtt database.Db.Save(&smokeDetector) if mqttMessage.Smoke { - log.Log.Infof("Sensor %s reported smoke", smokeDetector.Name) + alarm.Alarm(mqttMessage, smokeDetector) } }