PKGBUILD/pkg/daemon/daemon.go

64 lines
1.8 KiB
Go
Raw Normal View History

package daemon
import (
"fmt"
"log"
"os"
"os/signal"
"syscall"
"time"
"github.com/volker-raschek/flucky/pkg/config"
"github.com/volker-raschek/flucky/pkg/logfile"
"github.com/volker-raschek/flucky/pkg/sensor"
"github.com/volker-raschek/flucky/pkg/types"
)
// Start the daemon
func Start(cnf *config.Configuration) error {
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt, os.Kill, syscall.SIGTERM)
errorChannel := make(chan error, 0)
//humidityChannel := make(chan *types.Humidity, 0)
temperatureChannel := make(chan *types.Temperature, 0)
// go sensor.ReadHumiditiesContinuously(cnf.GetHumiditySensors(config.ENABLED), humidityChannel, errorChannel)
go sensor.ReadTemperaturesContinuously(cnf.GetTemperatureSensors(config.ENABLED), temperatureChannel, errorChannel)
temperatures := make([]*types.Temperature, 0)
ticker := time.Tick(time.Second * 60)
for {
select {
case <-ticker:
log.Printf("Write measured values into logfile")
log.Printf("%v new measured temperature values", len(temperatures))
err := logfile.WriteTemperatures(temperatures, cnf.Device.TemperatureLogfile, true)
if err != nil {
return fmt.Errorf("Can not save temperatures: %v", err)
}
temperatures = make([]*types.Temperature, 0)
case temperature, more := <-temperatureChannel:
if more {
temperatures = append(temperatures, temperature)
} else {
log.Printf("Temperature Channel closed. Write remaining values into the logfile")
err := logfile.WriteTemperatures(temperatures, cnf.Device.TemperatureLogfile, true)
if err != nil {
return fmt.Errorf("Can not save temperatures: %v", err)
}
}
case killSignal := <-interrupt:
//close(humidityChannel)
close(temperatureChannel)
return fmt.Errorf("Daemon was interruped by system signal %v", killSignal)
}
}
}