fix: new implementation
changes:
- Remove cli
Some cli commands are not complete tested and are deprecated.
- Daemon
- Old version has a very bad implementation of how to verify, if the
device or the sensors are in the database insert. The current
implementation can be improved but this one is betten then the old
one.
- Remove complete the cache store implementation. Use a normal array
and query the length and capacity to determine how the array cache
must be cleaned.
- Type
Remove unused types and functions
This commit is contained in:
@@ -1,46 +1,40 @@
|
||||
package sensor
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"sync"
|
||||
|
||||
"github.com/volker-raschek/flucky/pkg/types"
|
||||
)
|
||||
|
||||
func Read(sensors []Sensor, measuredValueType types.MeasuredValueType) ([]*types.MeasuredValue, error) {
|
||||
var (
|
||||
ErrSensorModelNotMatched = errors.New("Sensor model not matched")
|
||||
)
|
||||
|
||||
type result struct {
|
||||
measuredValues []*types.MeasuredValue
|
||||
err error
|
||||
// New returns a new sensor
|
||||
func New(sensor *types.Sensor) (Sensor, error) {
|
||||
switch sensor.Model {
|
||||
case "BME280":
|
||||
return &BME280{
|
||||
Sensor: sensor,
|
||||
mutex: new(sync.Mutex),
|
||||
}, nil
|
||||
case "DHT11":
|
||||
return &DHT11{
|
||||
Sensor: sensor,
|
||||
mutex: new(sync.Mutex),
|
||||
}, nil
|
||||
case "DHT22":
|
||||
return &DHT22{
|
||||
Sensor: sensor,
|
||||
mutex: new(sync.Mutex),
|
||||
}, nil
|
||||
case "DS18B20":
|
||||
return &DS18B20{
|
||||
Sensor: sensor,
|
||||
mutex: new(sync.Mutex),
|
||||
}, nil
|
||||
default:
|
||||
return nil, ErrSensorModelNotMatched
|
||||
}
|
||||
|
||||
resultChannel := make(chan *result, len(sensors))
|
||||
|
||||
// producers
|
||||
// read measured values
|
||||
for _, s := range sensors {
|
||||
go func(s Sensor) {
|
||||
measuredValues, err := s.Read()
|
||||
resultChannel <- &result{
|
||||
measuredValues: measuredValues,
|
||||
err: err,
|
||||
}
|
||||
}(s)
|
||||
}
|
||||
|
||||
// consumer
|
||||
measuredValues := make([]*types.MeasuredValue, 0)
|
||||
counter := len(sensors)
|
||||
for {
|
||||
if counter == 0 {
|
||||
break
|
||||
}
|
||||
select {
|
||||
case result := <-resultChannel:
|
||||
counter--
|
||||
if result.err != nil {
|
||||
return nil, result.err
|
||||
}
|
||||
measuredValues = append(measuredValues, result.measuredValues...)
|
||||
}
|
||||
}
|
||||
|
||||
return types.SelectMeasuredValues(measuredValueType, measuredValues), nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user