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)
 	}
 
 }