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