From 053c8ae04f28f58f9b1d525a40479b11e868d136 Mon Sep 17 00:00:00 2001
From: Jonas Leder <jonas@jonasled.de>
Date: Mon, 24 Mar 2025 17:42:31 +0100
Subject: [PATCH] save smoke detector battery to database

---
 database/tables/smokeDetector.go | 1 +
 docs/docs.go                     | 3 +++
 docs/swagger.json                | 3 +++
 docs/swagger.yaml                | 2 ++
 mqttclient/mqttmessage.go        | 5 +++--
 5 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/database/tables/smokeDetector.go b/database/tables/smokeDetector.go
index 0174a22..e0b0460 100644
--- a/database/tables/smokeDetector.go
+++ b/database/tables/smokeDetector.go
@@ -10,4 +10,5 @@ type SmokeDetector struct {
 	UpdatedAt  time.Time
 	ZigBeeName string `gorm:"unique"`
 	Name       string
+	Battery    int
 }
diff --git a/docs/docs.go b/docs/docs.go
index fed0925..4951e03 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -291,6 +291,9 @@ const docTemplate = `{
         "tables.SmokeDetector": {
             "type": "object",
             "properties": {
+                "battery": {
+                    "type": "integer"
+                },
                 "createdAt": {
                     "type": "string"
                 },
diff --git a/docs/swagger.json b/docs/swagger.json
index c0be2be..e2c0f7e 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -282,6 +282,9 @@
         "tables.SmokeDetector": {
             "type": "object",
             "properties": {
+                "battery": {
+                    "type": "integer"
+                },
                 "createdAt": {
                     "type": "string"
                 },
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index b0208cf..737a3c8 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -1,6 +1,8 @@
 definitions:
   tables.SmokeDetector:
     properties:
+      battery:
+        type: integer
       createdAt:
         type: string
       id:
diff --git a/mqttclient/mqttmessage.go b/mqttclient/mqttmessage.go
index 2cc4b83..1c13209 100644
--- a/mqttclient/mqttmessage.go
+++ b/mqttclient/mqttmessage.go
@@ -35,15 +35,16 @@ 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, "ZigBeeName = ?", deviceName)
+	tx := database.Db.First(&smokeDetector, tables.SmokeDetector{ZigBeeName: deviceName})
 	if tx.RowsAffected == 0 {
 		log.Log.Info("Found new smoke detector: ", deviceName)
 		smokeDetector = tables.SmokeDetector{
 			ZigBeeName: deviceName,
 			Name:       deviceName,
 		}
-		database.Db.Save(&smokeDetector)
 	}
+	smokeDetector.Battery = mqttMessage.Battery
+	database.Db.Save(&smokeDetector)
 
 	if mqttMessage.Smoke {
 		log.Log.Infof("Sensor %s reported smoke", smokeDetector.Name)
-- 
GitLab