| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- package main
- import (
- "flag"
- "log"
- "os"
- "os/signal"
- "syscall"
- "github.com/brutella/hc"
- "github.com/brutella/hc/accessory"
- "github.com/bwdezend/astoria-hc/internal/core"
- "github.com/bwdezend/astoria-hc/internal/telemetry"
- )
- var acc accessory.Thermostat
- var deviceName = flag.String("name", "Astoria Boiler Thermostat", "Device name")
- var dbPath = flag.String("db", "./db", "Database path")
- var enableMetics = flag.Bool("metrics", true, "Enable prometheus metrics")
- var prometheusPort = flag.Int("promPort", 2112, "Port to reigster /metrics handler on")
- var temperatureMinimim = flag.Float64("minTemp", 10.0, "Minimum temperature value")
- var temperatureMaximum = flag.Float64("maxTemp", 130.0, "Maximum temperature value")
- var temperatureStepSize = flag.Float64("stepTemp", 0.1, "Temperature setting step size")
- var homekitPin = flag.String("pin", "00102003", "Homekit Pairing PIN")
- var gpio = flag.Bool("gpio", true, "load gpio code")
- func init() {
- flag.Parse()
- info := accessory.Info{
- Name: *deviceName,
- }
- acc = *accessory.NewThermostat(info, 10.0, *temperatureMinimim, *temperatureMaximum, *temperatureStepSize)
- }
- func check(e error) {
- if e != nil {
- panic(e)
- }
- }
- var p = 3.0
- func main() {
- c := make(chan os.Signal)
- signal.Notify(c, os.Interrupt, syscall.SIGTERM)
- go func() {
- <-c
- os.Exit(0)
- }()
- config := hc.Config{Pin: *homekitPin}
- t, err := hc.NewIPTransport(config, acc.Accessory)
- check(err)
- hc.OnTermination(func() {
- t.Stop()
- })
- if *enableMetics {
- go telemetry.PrometheusMetrics(*prometheusPort)
- }
- // Recover previously set temperature on program start
- core.SetTargetTemp(acc, core.RecoverTemp())
- // Picks up the current temperature every second from *path/current_temp
- go core.GetCurrentTemp(acc)
- // Run the PID loop itself
- go core.TemperatureProportional(acc, *gpio)
- // Enable the "boiler isn't heating" error handling
- go core.TemperatureErrorDetection(acc)
- // Runs the REST-y interface for adjusting the setpoint and causing the program to exit.
- //go telemetry.SetpointHandler()
- // If the -gpio flag is set to true load the Raspberry Pi gpio handling code.
- if *gpio {
- log.Println("rpi-gpio enabled - enabling power button on pin 26")
- go core.PowerButton(acc)
- }
- // Enable the homekit code to change the setpoint
- acc.Thermostat.TargetTemperature.OnValueRemoteUpdate(func(temp float64) {
- core.SetTargetTemp(acc, temp)
- })
- t.Start()
- }
|