fix(pkg/sensor): read values
This commit is contained in:
parent
3dae3e38be
commit
1d8c86df67
@ -1,10 +1,13 @@
|
|||||||
package temperature
|
package temperature
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"github.com/go-flucky/flucky/pkg/types/typeswitch"
|
||||||
|
|
||||||
"github.com/go-flucky/flucky/pkg/rgbled"
|
"github.com/go-flucky/flucky/pkg/rgbled"
|
||||||
|
|
||||||
"github.com/go-flucky/flucky/pkg/cli"
|
"github.com/go-flucky/flucky/pkg/cli"
|
||||||
@ -40,14 +43,17 @@ var readTemperatureCmd = &cobra.Command{
|
|||||||
sensors = cnf.GetTemperatureSensorsByName(args)
|
sensors = cnf.GetTemperatureSensorsByName(args)
|
||||||
}
|
}
|
||||||
|
|
||||||
measuredValues, err := sensor.Read(sensors)
|
ctx := context.Background()
|
||||||
|
measuredValues, err := sensor.Read(ctx, sensors)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rgbled.Error(rgbLEDs)
|
rgbled.Error(rgbLEDs)
|
||||||
log.Fatalln(err)
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
temperatures := typeswitch.TemperatureValues(measuredValues)
|
||||||
|
|
||||||
// print temperatures on stdout
|
// print temperatures on stdout
|
||||||
cli.PrintMeasuredValues(measuredValues, cnf, os.Stdout)
|
cli.PrintMeasuredValues(temperatures, cnf, os.Stdout)
|
||||||
|
|
||||||
if logs {
|
if logs {
|
||||||
logfile := logfile.New(cnf.Device.Logfile)
|
logfile := logfile.New(cnf.Device.Logfile)
|
||||||
|
@ -27,6 +27,10 @@ func (s *DS18B20) GetSensorModel() types.SensorModel {
|
|||||||
// Read measured values
|
// Read measured values
|
||||||
func (s *DS18B20) Read() ([]types.MeasuredValue, error) {
|
func (s *DS18B20) Read() ([]types.MeasuredValue, error) {
|
||||||
|
|
||||||
|
if s.WireID == nil {
|
||||||
|
return nil, fmt.Errorf("WireID is not specified for sensor %v", s.Name())
|
||||||
|
}
|
||||||
|
|
||||||
data, err := ioutil.ReadFile(filepath.Join("/sys/bus/w1/devices", *s.WireID, "/w1_slave"))
|
data, err := ioutil.ReadFile(filepath.Join("/sys/bus/w1/devices", *s.WireID, "/w1_slave"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Can not read data from sensor %v", s.SensorName)
|
return nil, fmt.Errorf("Can not read data from sensor %v", s.SensorName)
|
||||||
|
@ -5,38 +5,30 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/go-flucky/flucky/pkg/internal/collect"
|
|
||||||
"github.com/go-flucky/flucky/pkg/internal/prittyprint"
|
|
||||||
"github.com/go-flucky/flucky/pkg/types"
|
"github.com/go-flucky/flucky/pkg/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Read measured values from sensors
|
// Read measured values from sensors
|
||||||
func Read(sensors []Sensor) ([]types.MeasuredValue, error) {
|
func Read(ctx context.Context, sensors []Sensor) ([]types.MeasuredValue, error) {
|
||||||
measuredValueChannel := make(chan types.MeasuredValue, 0)
|
|
||||||
errorChannel := make(chan error, 0)
|
|
||||||
|
|
||||||
wg := new(sync.WaitGroup)
|
// TODO: Execute Read with go function
|
||||||
wg.Add(len(sensors))
|
cachesMeasuredValues := make([]types.MeasuredValue, 0)
|
||||||
|
|
||||||
for _, sensor := range sensors {
|
for _, sensor := range sensors {
|
||||||
go sensor.ReadChannel(measuredValueChannel, errorChannel, wg)
|
measuredValues, err := sensor.Read()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cachesMeasuredValues = append(cachesMeasuredValues, measuredValues...)
|
||||||
}
|
}
|
||||||
|
|
||||||
wg.Wait()
|
return cachesMeasuredValues, nil
|
||||||
|
|
||||||
errors := collect.Errors(errorChannel)
|
|
||||||
if len(errors) > 0 {
|
|
||||||
return nil, prittyprint.FormatErrors(errors)
|
|
||||||
}
|
|
||||||
|
|
||||||
measuredValues := collect.MeasuredValues(measuredValueChannel)
|
|
||||||
|
|
||||||
return measuredValues, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadChannel reads the measured values from sensors and writes them to a
|
// ReadChannel reads the measured values from sensors and writes them to a
|
||||||
// channel.
|
// channel.
|
||||||
func ReadChannel(ctx context.Context, sensors []Sensor, measuredValueChannel chan<- types.MeasuredValue, errorChannel chan<- error, wg *sync.WaitGroup) {
|
func ReadChannel(ctx context.Context, sensors []Sensor, measuredValueChannel chan<- types.MeasuredValue, errorChannel chan<- error, wg *sync.WaitGroup) {
|
||||||
|
// TODO: Execute ReadCallel with go function if wg is available
|
||||||
for _, sensor := range sensors {
|
for _, sensor := range sensors {
|
||||||
sensor.ReadChannel(measuredValueChannel, errorChannel, wg)
|
sensor.ReadChannel(measuredValueChannel, errorChannel, wg)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user