| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | package mainimport (	"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.Thermostatvar 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.0func 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()}
 |