72 lines
1.5 KiB
Go
72 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/joho/godotenv"
|
|
"gopkg.in/yaml.v2"
|
|
)
|
|
|
|
type Config struct {
|
|
BaseUrl string `yaml:"base_url"`
|
|
MqttUrl string `yaml:"mqtt_url"`
|
|
MqttDevices []MqttDevice `yaml:"mqtt_devices"`
|
|
DatasourceDir string `yaml:"datasource_dir"`
|
|
ServeFromFS bool `yaml:"serve_from_fs"`
|
|
}
|
|
|
|
type MqttDevice struct {
|
|
Name string `yaml:"name"`
|
|
Topic string `yaml:"topic"`
|
|
Type string `yaml:"type"`
|
|
Tag string `yaml:"tag"`
|
|
}
|
|
|
|
func main() {
|
|
|
|
err := godotenv.Load()
|
|
if err != nil {
|
|
log.Println("No .env file found, all config coming from system env")
|
|
}
|
|
//
|
|
//dashboardHost := os.Getenv("SENSOR_DASHBOARD_WEB_BASE_URL")
|
|
//mqttServer := os.Getenv("SENSOR_DASHBOARD_MQTT_SERVER")
|
|
//mqttTopicsJson := os.Getenv("SENSOR_DASHBOARD_MQTT_TOPICS")
|
|
//datasourceDir := os.Getenv("SENSOR_DASHBOARD_DATASOURCE_DIR")
|
|
|
|
configPath := os.Getenv("SENSOR_DASHBOARD_CONFIG_PATH")
|
|
if configPath == "" {
|
|
configPath = "./config.yaml"
|
|
}
|
|
f, err := os.Open(configPath)
|
|
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer f.Close()
|
|
|
|
var config Config
|
|
decoder := yaml.NewDecoder(f)
|
|
err = decoder.Decode(&config)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
queries := InitDB(config.DatasourceDir)
|
|
client, _ := InitMqtt(config.MqttUrl, config.MqttDevices, *queries)
|
|
|
|
handler, err := Api(*queries, config)
|
|
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
log.Println("Starting server on " + config.BaseUrl)
|
|
log.Fatal(http.ListenAndServe(config.BaseUrl, handler))
|
|
|
|
client.Disconnect(250)
|
|
|
|
}
|