Markus Pesch
fb8d4dd5eb
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
94 lines
2.1 KiB
Go
94 lines
2.1 KiB
Go
package sensor
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
|
|
"github.com/d2r2/go-bsbmp"
|
|
"github.com/d2r2/go-i2c"
|
|
"github.com/d2r2/go-logger"
|
|
uuid "github.com/satori/go.uuid"
|
|
|
|
"github.com/volker-raschek/flucky/pkg/internal/format"
|
|
"github.com/volker-raschek/flucky/pkg/types"
|
|
)
|
|
|
|
// BME280 is a sensor to measure humidity and temperature.
|
|
type BME280 struct {
|
|
*types.Sensor
|
|
mutex *sync.Mutex
|
|
}
|
|
|
|
// Read measured values
|
|
func (bme280 *BME280) Read() ([]*types.MeasuredValue, error) {
|
|
|
|
// Lock multiple access
|
|
bme280.mutex.Lock()
|
|
defer bme280.mutex.Unlock()
|
|
|
|
// Create new connection to i2c-bus on 1 line with address 0x76.
|
|
// Use i2cdetect utility to find device address over the i2c-bus
|
|
i2c, err := i2c.NewI2C(*bme280.I2CAddress, *bme280.I2CBus)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer i2c.Close()
|
|
|
|
// Reduce loglevel
|
|
for _, pkg := range []string{"bsbmp", "i2c"} {
|
|
err = logger.ChangePackageLogLevel(pkg, logger.InfoLevel)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Failed to change package log level: %v", err)
|
|
}
|
|
}
|
|
|
|
sensor, err := bsbmp.NewBMP(bsbmp.BME280, i2c)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
temperatureValue, err := sensor.ReadTemperatureC(bsbmp.ACCURACY_STANDARD)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
pressureValue, err := sensor.ReadPressurePa(bsbmp.ACCURACY_STANDARD)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
_, humidityValue, err := sensor.ReadHumidityRH(bsbmp.ACCURACY_STANDARD)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
measuredValues := []*types.MeasuredValue{
|
|
{
|
|
ID: uuid.NewV4().String(),
|
|
Value: float64(humidityValue),
|
|
ValueType: "humidity",
|
|
FromDate: format.FormatedTime(),
|
|
TillDate: format.FormatedTime(),
|
|
SensorID: bme280.ID,
|
|
},
|
|
{
|
|
ID: uuid.NewV4().String(),
|
|
Value: float64(pressureValue),
|
|
ValueType: "pressure",
|
|
FromDate: format.FormatedTime(),
|
|
TillDate: format.FormatedTime(),
|
|
SensorID: bme280.ID,
|
|
},
|
|
{
|
|
ID: uuid.NewV4().String(),
|
|
Value: float64(temperatureValue),
|
|
ValueType: "temperature",
|
|
FromDate: format.FormatedTime(),
|
|
TillDate: format.FormatedTime(),
|
|
SensorID: bme280.ID,
|
|
},
|
|
}
|
|
|
|
return measuredValues, nil
|
|
}
|