diff --git a/go.mod b/go.mod
index 0e85b6e3ad6e5115a321f8f1fb0fda3f149bf9a5..ecf52239e313738e3ad735c51ad67eeef0cd7400 100644
--- a/go.mod
+++ b/go.mod
@@ -1,3 +1,14 @@
module jonasled.dev/firehouse-smokedetection/plugins/gotify
go 1.23.4
+
+require (
+ gorm.io/gorm v1.25.12
+ jonasled.dev/firehouse-smokedetection/plugin-interface v0.0.2
+)
+
+require (
+ github.com/jinzhu/inflection v1.0.0 // indirect
+ github.com/jinzhu/now v1.1.5 // indirect
+ golang.org/x/text v0.14.0 // indirect
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000000000000000000000000000000000000..6f7b5f1997abebebe69a2dce1e79f10a4826284f
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,10 @@
+github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
+github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
+github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
+golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
+golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
+gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
+gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
+jonasled.dev/firehouse-smokedetection/plugin-interface v0.0.2 h1:niJPRYkwj73qVb7Tz3xW3qQwd4WDNQW7tSo+xmoOEJE=
+jonasled.dev/firehouse-smokedetection/plugin-interface v0.0.2/go.mod h1:NzMtk6LMykQSPijoPTM/7+lWgpeizioNrC9gHhWU75U=
diff --git a/main.go b/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..10e909142818cf207be745bbd0befe5511fbfd92
--- /dev/null
+++ b/main.go
@@ -0,0 +1,45 @@
+package main
+
+import (
+ "errors"
+ "time"
+
+ "gorm.io/gorm"
+ plugininterface "jonasled.dev/firehouse-smokedetection/plugin-interface"
+)
+
+type GotifyPluginConfig struct {
+ ID uint `gorm:"primaryKey"`
+ CreatedAt time.Time
+ UpdatedAt time.Time
+ Name string
+ GotifyUrl string
+ MessageTemplate string
+}
+
+type GotifyPlugin struct {
+ Metadata plugininterface.PluginMetadata
+ db *gorm.DB
+}
+
+func (g *GotifyPlugin) Setup(db *gorm.DB) error {
+ g.db = db
+ return db.AutoMigrate(&GotifyPluginConfig{})
+}
+
+func (g *GotifyPlugin) Alarm(smokeSensor string, target uint) error {
+ var pluginConfig GotifyPluginConfig
+ tx := g.db.Where(GotifyPluginConfig{ID: target}).First(&pluginConfig)
+ if tx.RowsAffected == 0 {
+ return errors.New("No matching target found")
+ }
+
+ return nil
+}
+
+var Plugin = GotifyPlugin{
+ Metadata: plugininterface.PluginMetadata{
+ Name: "Gotify",
+ Version: "0.0.1",
+ },
+}