WIP
This commit is contained in:
1
pkg/logs/logs.go
Normal file
1
pkg/logs/logs.go
Normal file
@ -0,0 +1 @@
|
||||
package logs
|
44
pkg/logs/temperature.go
Normal file
44
pkg/logs/temperature.go
Normal file
@ -0,0 +1,44 @@
|
||||
package logs
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
stypes "git.cryptic.systems/fh-trier/go-flucky-server/pkg/types"
|
||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/types"
|
||||
)
|
||||
|
||||
// Temperature write a given array of temperatures to a logfile
|
||||
func Temperature(temperatures []*stypes.Temperature, config *types.Config) error {
|
||||
|
||||
logPath := filepath.Dir(config.TemperatureLogfile)
|
||||
|
||||
// create log dir if not exist
|
||||
if _, err := os.Stat(logPath); os.IsNotExist(err) {
|
||||
err := os.MkdirAll(logPath, os.ModePerm)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Can not create directory: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
f, err := os.OpenFile(config.TemperatureLogfile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
w := bufio.NewWriter(f)
|
||||
|
||||
for _, temperature := range temperatures {
|
||||
fmt.Fprintf(w, "%v\t%v\t%v\t%v\n", temperature.TemperatureID, temperature.TemperatureValue, temperature.TemperatureDate, temperature.SensorID)
|
||||
}
|
||||
|
||||
err = w.Flush()
|
||||
if err != nil {
|
||||
return fmt.Errorf("Can not flush writer: %v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
@ -88,14 +88,14 @@ func Disable(remoteName string, configDir string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func List(w io.Writer, configDir string) error {
|
||||
func Print(w io.Writer, configDir string) error {
|
||||
|
||||
configuration, err := config.Read(configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tw := tabwriter.NewWriter(w, 0, 0, 5, ' ', 0)
|
||||
tw := tabwriter.NewWriter(w, 0, 0, 3, ' ', 0)
|
||||
|
||||
fmt.Fprint(tw, "name\taddress\tenabled\tregistered\n")
|
||||
|
||||
|
@ -1,14 +1,194 @@
|
||||
package sensor
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"text/tabwriter"
|
||||
"time"
|
||||
|
||||
"github.com/satori/go.uuid"
|
||||
|
||||
stypes "git.cryptic.systems/fh-trier/go-flucky-server/pkg/types"
|
||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/types"
|
||||
)
|
||||
|
||||
// Exists returns a boolean if the sensor exists
|
||||
func Exists(wirePath, sensorID string) bool {
|
||||
// Add ...
|
||||
func Add(sensorName, sensorLocation, sensorType, wireID, gpioNumber *string, wirePath, configDir string, enabled bool) error {
|
||||
|
||||
// read cnf file
|
||||
cnf, err := config.Read(configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
s := &types.Sensor{
|
||||
Enabled: enabled,
|
||||
RemoteSensor: &stypes.Sensor{
|
||||
SensorID: uuid.NewV4().String(),
|
||||
SensorName: sensorName,
|
||||
SensorLocation: sensorLocation,
|
||||
GPIONumber: gpioNumber,
|
||||
SensorType: sensorType,
|
||||
DeviceID: cnf.DeviceID,
|
||||
CreationDate: time.Now(),
|
||||
},
|
||||
}
|
||||
|
||||
// If the new sensor is a wire sensor
|
||||
if wireID != nil {
|
||||
|
||||
// check if sensor exists
|
||||
if !exists(wirePath, *wireID) {
|
||||
return fmt.Errorf("Can not find sensor: %v", filepath.Join(wirePath, *wireID))
|
||||
}
|
||||
|
||||
// check if sensor is redundant
|
||||
if isWireIDRedundant(*wireID, cnf.Sensors) {
|
||||
return fmt.Errorf("Sensor %v already exists", *wireID)
|
||||
}
|
||||
|
||||
s.RemoteSensor.WireID = wireID
|
||||
}
|
||||
|
||||
// check if sensor is redundant
|
||||
if isSensorNameRedundant(*sensorName, cnf.Sensors) {
|
||||
return fmt.Errorf("Sensor %v already exists", *sensorName)
|
||||
}
|
||||
|
||||
// append sensor to list
|
||||
cnf.Sensors = append(cnf.Sensors, s)
|
||||
|
||||
// write cnf file
|
||||
if err := config.Write(cnf, configDir); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Enable a remote link
|
||||
func Enable(sensorName string, configDir string) error {
|
||||
|
||||
cnf, err := config.Read(configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// search after duplicate remote_names
|
||||
var found bool
|
||||
for _, sensor := range cnf.Sensors {
|
||||
if *sensor.RemoteSensor.SensorName == sensorName ||
|
||||
sensor.RemoteSensor.SensorID == sensorName {
|
||||
sensor.Enabled = true
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if !found {
|
||||
return fmt.Errorf("Can not find sensor %v", sensorName)
|
||||
}
|
||||
|
||||
if err := config.Write(cnf, configDir); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Disable a remote link
|
||||
func Disable(sensorName string, configDir string) error {
|
||||
|
||||
cnf, err := config.Read(configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// search after duplicate remote_names
|
||||
var found bool
|
||||
for _, sensor := range cnf.Sensors {
|
||||
if *sensor.RemoteSensor.SensorName == sensorName ||
|
||||
sensor.RemoteSensor.SensorID == sensorName {
|
||||
sensor.Enabled = false
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if !found {
|
||||
return fmt.Errorf("Can not find sensor %v", sensorName)
|
||||
}
|
||||
|
||||
if err := config.Write(cnf, configDir); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Print a list with the given writer w over all temperature sensors
|
||||
func Print(w io.Writer, configDir string, quiet bool) error {
|
||||
|
||||
// read cnf file
|
||||
cnf, err := config.Read(configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// declar tabwriter
|
||||
tw := tabwriter.NewWriter(w, 0, 0, 3, ' ', 0)
|
||||
|
||||
// headline
|
||||
if !quiet {
|
||||
fmt.Fprint(tw, "id\tname\tlocation\ttype\twire-id\tgpio\tenabled\n")
|
||||
}
|
||||
|
||||
for _, sensor := range cnf.Sensors {
|
||||
if quiet {
|
||||
fmt.Fprintf(tw, "%v\n", sensor.RemoteSensor.SensorID)
|
||||
} else {
|
||||
fmt.Fprintf(tw, "%v\t%v\t%v\t%v\t%v\t%v\t%v\n", sensor.RemoteSensor.SensorID, *sensor.RemoteSensor.SensorName, *sensor.RemoteSensor.SensorLocation, *sensor.RemoteSensor.SensorType, *sensor.RemoteSensor.WireID, *sensor.RemoteSensor.GPIONumber, sensor.Enabled)
|
||||
}
|
||||
}
|
||||
|
||||
tw.Flush()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Remove a sensor
|
||||
func Remove(sensorName, configDir string) error {
|
||||
|
||||
cnf, err := config.Read(configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var j int
|
||||
for _, sensor := range cnf.Sensors {
|
||||
if *sensor.RemoteSensor.SensorName == sensorName ||
|
||||
sensor.RemoteSensor.SensorID == sensorName {
|
||||
cnf.Sensors = append(cnf.Sensors[:j], cnf.Sensors[j+1:]...)
|
||||
|
||||
if j > 0 {
|
||||
j = j - 1
|
||||
}
|
||||
continue
|
||||
}
|
||||
j++
|
||||
}
|
||||
|
||||
if err := config.Write(cnf, configDir); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func exists(wirePath, sensorID string) bool {
|
||||
sensorPath := filepath.Join(wirePath, sensorID)
|
||||
if _, err := os.Stat(sensorPath); os.IsNotExist(err) {
|
||||
return false
|
||||
@ -16,10 +196,21 @@ func Exists(wirePath, sensorID string) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// IsRedundant returns a boolean if the sensorID is in the array
|
||||
func IsRedundant(sensorID string, sensors []*types.WireSensor) bool {
|
||||
// isWireIDRedundant returns a boolean if the sensor id redundant
|
||||
func isWireIDRedundant(wireID string, sensors []*types.Sensor) bool {
|
||||
for _, sensor := range sensors {
|
||||
if sensor.ID == sensorID {
|
||||
if *sensor.RemoteSensor.WireID == wireID {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// isSensorNameRedundant returns a boolean if the sensor name redundant
|
||||
func isSensorNameRedundant(sensorName string, sensors []*types.Sensor) bool {
|
||||
for _, sensor := range sensors {
|
||||
if *sensor.RemoteSensor.SensorName == sensorName {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
@ -1,109 +0,0 @@
|
||||
package temperature
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"path/filepath"
|
||||
"text/tabwriter"
|
||||
|
||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/sensor"
|
||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/types"
|
||||
)
|
||||
|
||||
// AddDS18B20 a new temperature sensor from type ds18b20
|
||||
func AddDS18B20(sensorID, sensorName, configDir, wirePath string) error {
|
||||
|
||||
// read cnf file
|
||||
cnf, err := config.Read(configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// check if sensor exists
|
||||
if !sensor.Exists(wirePath, sensorID) {
|
||||
return fmt.Errorf("Can not find sensor: %v", filepath.Join(wirePath, sensorID))
|
||||
}
|
||||
|
||||
// check if sensor is redundant
|
||||
if sensor.IsRedundant(sensorID, cnf.TemperatureSensors) {
|
||||
return fmt.Errorf("Sensor %v already exists as temperature sensor", sensorID)
|
||||
}
|
||||
|
||||
temperatureSensor := &types.WireSensor{
|
||||
ID: sensorID,
|
||||
Name: sensorName,
|
||||
Typ: types.SENSOR_DS18B20,
|
||||
WirePath: wirePath,
|
||||
}
|
||||
|
||||
// append sensor to list
|
||||
cnf.TemperatureSensors = append(cnf.TemperatureSensors, temperatureSensor)
|
||||
|
||||
// write cnf file
|
||||
if err := config.Write(cnf, configDir); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Print a list with the given writer w over all temperature sensors
|
||||
func Print(w io.Writer, configDir string, quiet bool) error {
|
||||
|
||||
// read cnf file
|
||||
cnf, err := config.Read(configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// declar tabwriter
|
||||
tw := tabwriter.NewWriter(w, 0, 0, 5, ' ', 0)
|
||||
|
||||
// headline
|
||||
if !quiet {
|
||||
fmt.Fprint(tw, "id\tname\ttype\tpath\n")
|
||||
}
|
||||
|
||||
for _, sensor := range cnf.TemperatureSensors {
|
||||
if quiet {
|
||||
fmt.Fprintf(tw, "%v\n", sensor.ID)
|
||||
} else {
|
||||
fmt.Fprintf(tw, "%v\t%v\t%v\t%v\n", sensor.ID, sensor.Name, sensor.Typ, sensor.WirePath)
|
||||
}
|
||||
}
|
||||
|
||||
tw.Flush()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Remove a temperature sensor over the given sensor id
|
||||
func Remove(sensorID, configDir string) error {
|
||||
|
||||
// read cnf file
|
||||
cnf, err := config.Read(configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// remove matching sensor ids
|
||||
var j int
|
||||
for _, sensor := range cnf.TemperatureSensors {
|
||||
if sensor.ID == sensorID {
|
||||
cnf.TemperatureSensors = append(cnf.TemperatureSensors[:j], cnf.TemperatureSensors[j+1:]...)
|
||||
if j > 0 {
|
||||
j = j - 1
|
||||
}
|
||||
continue
|
||||
}
|
||||
j++
|
||||
}
|
||||
|
||||
// write cnf file
|
||||
if err := config.Write(cnf, configDir); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
@ -3,15 +3,13 @@ package temperature
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"text/tabwriter"
|
||||
"time"
|
||||
|
||||
stypes "git.cryptic.systems/fh-trier/go-flucky-server/pkg/types"
|
||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/httpcall"
|
||||
|
||||
stypes "git.cryptic.systems/fh-trier/go-flucky-server/pkg/types"
|
||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/logs"
|
||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/types"
|
||||
|
||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
||||
@ -20,21 +18,9 @@ import (
|
||||
"github.com/yryz/ds18b20"
|
||||
)
|
||||
|
||||
// Get ...
|
||||
func Get(w io.Writer, sensorName string, configDir string) error {
|
||||
var temperatureLog = "temperature.log"
|
||||
|
||||
temperature, err := getTemperature(sensorName, configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Fprintf(w, "%3.3f\n", temperature.TemperatureValue)
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
// Logs ...
|
||||
func Logs(w io.Writer, configDir string) error {
|
||||
func Get(argSensorNames []string, writeLogfiles, push bool, configDir string, w io.Writer) error {
|
||||
|
||||
// get cnf
|
||||
cnf, err := config.Read(configDir)
|
||||
@ -42,109 +28,221 @@ func Logs(w io.Writer, configDir string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// declar tabwriter
|
||||
tw := tabwriter.NewWriter(w, 0, 0, 5, ' ', 0)
|
||||
|
||||
var sensorNames []string
|
||||
|
||||
// headlines
|
||||
for _, sensor := range cnf.TemperatureSensors {
|
||||
if sensor.Name != "" {
|
||||
fmt.Fprintf(tw, "%v\t", sensor.Name)
|
||||
} else {
|
||||
fmt.Fprintf(tw, "%v\t", sensor.ID)
|
||||
if len(argSensorNames) > 1 {
|
||||
for _, argSensorName := range argSensorNames {
|
||||
if len(argSensorNames) > 1 {
|
||||
fmt.Fprintf(tw, "%v\t", argSensorName)
|
||||
}
|
||||
sensorNames = append(sensorNames, argSensorName)
|
||||
}
|
||||
fmt.Fprint(tw, "\n")
|
||||
} else {
|
||||
numOfSensors := len(cnf.TemperatureSensors)
|
||||
|
||||
}
|
||||
fmt.Fprint(tw, "\n")
|
||||
|
||||
// body
|
||||
ticker := time.NewTicker(1 * time.Second)
|
||||
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case _, more := <-ticker.C:
|
||||
if !more {
|
||||
return
|
||||
}
|
||||
|
||||
for _, sensor := range cnf.TemperatureSensors {
|
||||
temperature, err := ds18b20.Temperature(sensor.ID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
fmt.Fprintf(tw, "%3.3f°\t", temperature)
|
||||
}
|
||||
|
||||
fmt.Fprint(tw, "\n")
|
||||
|
||||
tw.Flush()
|
||||
|
||||
for _, temperatureSensor := range cnf.TemperatureSensors {
|
||||
switch {
|
||||
case temperatureSensor.Name != "" && numOfSensors <= 1:
|
||||
sensorNames = append(sensorNames, temperatureSensor.Name)
|
||||
case temperatureSensor.Name == "" && numOfSensors <= 1:
|
||||
sensorNames = append(sensorNames, temperatureSensor.ID)
|
||||
case temperatureSensor.Name != "" && numOfSensors > 1:
|
||||
fmt.Fprintf(tw, "%v\t", temperatureSensor.Name)
|
||||
sensorNames = append(sensorNames, temperatureSensor.Name)
|
||||
break
|
||||
case temperatureSensor.Name == "" && numOfSensors > 1:
|
||||
sensorNames = append(sensorNames, temperatureSensor.ID)
|
||||
fmt.Fprintf(tw, "%v\t", temperatureSensor.ID)
|
||||
break
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
signalChannel := make(chan os.Signal)
|
||||
signal.Notify(signalChannel, syscall.SIGINT, syscall.SIGTERM)
|
||||
if numOfSensors > 1 {
|
||||
fmt.Fprint(tw, "\n")
|
||||
}
|
||||
}
|
||||
|
||||
sig := <-signalChannel
|
||||
log.Printf("Got signal %s, initiating shutdown\n", sig)
|
||||
ticker.Stop()
|
||||
temperatures, err := getTemperatures(sensorNames, configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, temperature := range temperatures {
|
||||
fmt.Fprintf(tw, "%v\t", temperature.TemperatureValue)
|
||||
}
|
||||
|
||||
fmt.Fprint(tw, "\n")
|
||||
|
||||
tw.Flush()
|
||||
|
||||
if writeLogfiles {
|
||||
if err := logs.Temperature(temperatures, cnf); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if push {
|
||||
if err := httpcall.SendTemperatures(temperatures, configDir); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func GetFollow(sensorNames []string, writeLogfiles, push bool, configDir string, w io.Writer) error {
|
||||
|
||||
// // get cnf
|
||||
// cnf, err := config.Read(configDir)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
|
||||
// var temperatures []*stypes.Temperature
|
||||
|
||||
// // tabwriter
|
||||
// tw := tabwriter.NewWriter(w, 0, 0, 5, ' ', 0)
|
||||
|
||||
// // headlines
|
||||
// var sensorNames []string
|
||||
// cnt := len(cnf.TemperatureSensors)
|
||||
// for _, sensor := range cnf.TemperatureSensors {
|
||||
|
||||
// switch {
|
||||
// case sensor.Name == "" && cnt == 1:
|
||||
// sensorNames = append(sensorNames, sensor.ID)
|
||||
// break
|
||||
|
||||
// case sensor.Name != "" && cnt == 1:
|
||||
// sensorNames = append(sensorNames, sensor.Name)
|
||||
// break
|
||||
|
||||
// case sensor.Name == "" && cnt > 1:
|
||||
// sensorNames = append(sensorNames, sensor.ID)
|
||||
// fmt.Fprintf(tw, "%v\t", sensor.ID)
|
||||
// break
|
||||
|
||||
// case sensor.Name != "" && cnt > 1:
|
||||
// sensorNames = append(sensorNames, sensor.Name)
|
||||
// fmt.Fprintf(tw, "%v\t", sensor.Name)
|
||||
// break
|
||||
|
||||
// }
|
||||
// }
|
||||
|
||||
// if cnt > 1 {
|
||||
// fmt.Fprint(tw, "\n")
|
||||
// }
|
||||
|
||||
// // body
|
||||
// ticker := time.NewTicker(1 * time.Second)
|
||||
|
||||
// go func() {
|
||||
// for {
|
||||
// select {
|
||||
// case _, more := <-ticker.C:
|
||||
// if !more {
|
||||
// return
|
||||
// }
|
||||
|
||||
// // get temperatures from sensors and write them into writer
|
||||
// temperatures, err = getTemperatures(sensorNames, configDir)
|
||||
// for _, temperature := range temperatures {
|
||||
// fmt.Fprintf(tw, "%v\t", temperature.TemperatureValue)
|
||||
// }
|
||||
|
||||
// fmt.Fprint(tw, "\n")
|
||||
|
||||
// // flush writer
|
||||
// tw.Flush()
|
||||
|
||||
// }
|
||||
// }
|
||||
// }()
|
||||
|
||||
// signalChannel := make(chan os.Signal)
|
||||
// signal.Notify(signalChannel, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
// sig := <-signalChannel
|
||||
// fmt.Printf("Got signal %s, initiating shutdown\n", sig)
|
||||
// ticker.Stop()
|
||||
|
||||
// // write logfiles
|
||||
// if writeLogfiles {
|
||||
// if err := logs.Temperature(temperatures, cnf); err != nil {
|
||||
// return err
|
||||
// }
|
||||
// }
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Push ...
|
||||
func Push(sensorName, configDir string) error {
|
||||
|
||||
var temperatures []*stypes.Temperature
|
||||
// var temperatures []*stypes.Temperature
|
||||
|
||||
temperature, err := getTemperature(sensorName, configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// temperature, err := getTemperature(sensorName, configDir)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
|
||||
temperatures = append(temperatures, &temperature)
|
||||
// temperatures = append(temperatures, &temperature)
|
||||
|
||||
if err := httpcall.SendTemperatures(temperatures, configDir); err != nil {
|
||||
return err
|
||||
}
|
||||
// if err := httpcall.SendTemperatures(temperatures, configDir); err != nil {
|
||||
// return err
|
||||
// }
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func getTemperature(sensorName, configDir string) (stypes.Temperature, error) {
|
||||
func getTemperatures(sensorNames []string, configDir string) ([]*stypes.Temperature, error) {
|
||||
|
||||
temperatures := []*stypes.Temperature{}
|
||||
|
||||
// read cnf
|
||||
cnf, err := config.Read(configDir)
|
||||
if err != nil {
|
||||
return stypes.Temperature{}, err
|
||||
return []*stypes.Temperature{}, err
|
||||
}
|
||||
|
||||
var foundSensor types.WireSensor
|
||||
// search after sensor
|
||||
var foundSensors []*types.WireSensor
|
||||
var sensorFound bool
|
||||
for _, sensor := range cnf.TemperatureSensors {
|
||||
if sensor.ID == sensorName || sensor.Name == sensorName {
|
||||
foundSensor = *sensor
|
||||
sensorFound = true
|
||||
break
|
||||
for _, configSensor := range cnf.TemperatureSensors {
|
||||
for _, sensorName := range sensorNames {
|
||||
if configSensor.ID == sensorName || configSensor.Name == sensorName {
|
||||
foundSensors = append(foundSensors, configSensor)
|
||||
sensorFound = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if !sensorFound {
|
||||
return stypes.Temperature{}, fmt.Errorf("Sensor not found sensor %v in config", sensorName)
|
||||
return []*stypes.Temperature{}, fmt.Errorf("Sensor not found any sensor in the list")
|
||||
}
|
||||
|
||||
t, err := ds18b20.Temperature(foundSensor.ID)
|
||||
if err != nil {
|
||||
return stypes.Temperature{}, fmt.Errorf("Can not read temperature from sensor %v: %v", foundSensor.ID, err)
|
||||
for _, foundSensor := range foundSensors {
|
||||
t, err := ds18b20.Temperature(foundSensor.ID)
|
||||
if err != nil {
|
||||
return []*stypes.Temperature{}, fmt.Errorf("Can not read temperature from sensor %v: %v", foundSensor.ID, err)
|
||||
}
|
||||
|
||||
temperature := &stypes.Temperature{
|
||||
TemperatureID: uuid.NewV4().String(),
|
||||
TemperatureValue: t,
|
||||
SensorID: foundSensor.ID,
|
||||
TemperatureDate: time.Now(),
|
||||
DeviceID: cnf.DeviceID,
|
||||
}
|
||||
|
||||
temperatures = append(temperatures, temperature)
|
||||
}
|
||||
|
||||
temperature := stypes.Temperature{
|
||||
TemperatureID: uuid.NewV4().String(),
|
||||
TemperatureValue: t,
|
||||
SensorID: foundSensor.ID,
|
||||
TemperatureDate: time.Now(),
|
||||
DeviceID: cnf.DeviceID,
|
||||
}
|
||||
|
||||
return temperature, nil
|
||||
return temperatures, nil
|
||||
}
|
||||
|
@ -5,12 +5,18 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
stypes "git.cryptic.systems/fh-trier/go-flucky-server/pkg/types"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
DeviceID string `json:"device_id"`
|
||||
Remotes []*Remote `json:"remotes"`
|
||||
TemperatureSensors []*WireSensor `json:"temperature_sensors"`
|
||||
DeviceID string `json:"device_id"`
|
||||
DeviceName string `json:"device_name"`
|
||||
DeviceLocation string `json:"device_location"`
|
||||
TemperatureLogfile string `json:"temperature_logfile"`
|
||||
HumidityLogfile string `json:"humiditiy_logfile"`
|
||||
Remotes []*Remote `json:"remotes"`
|
||||
Sensors []*Sensor `json:"sensors"`
|
||||
}
|
||||
|
||||
func (c *Config) ToJSON() (string, error) {
|
||||
@ -43,23 +49,15 @@ func (c *Config) JSONDecoder(r io.Reader) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Remote ...
|
||||
type Remote struct {
|
||||
Name string `json:"remote_name"`
|
||||
Address string `json:"remote_address"`
|
||||
Registered bool `json:"remote_registered"`
|
||||
Enabled bool `json:"remote_enabled"`
|
||||
}
|
||||
|
||||
type WireSensor struct {
|
||||
ID string `json:"sensor_id"`
|
||||
Name string `json:"sensor_name"`
|
||||
Typ SensorType `json:"sensor_typ"`
|
||||
GPIO int `json:"gpio_number"`
|
||||
WirePath string `json:"wire_path"`
|
||||
type Sensor struct {
|
||||
RemoteSensor *stypes.Sensor `json:"sensor"`
|
||||
Enabled bool `json:"sensor_enabled"`
|
||||
}
|
||||
|
||||
type SensorType string
|
||||
|
||||
const (
|
||||
SENSOR_DS18B20 SensorType = "DS18B20"
|
||||
SENSOR_DHT11 = "DHT11"
|
||||
)
|
||||
|
Reference in New Issue
Block a user