fix: cli temperature read
changes: - fix: read temperature values without daemon Add subcommand to read temperature values without starting the daemon - fix: implement measured value types Replace measured value types with constants - fix: add sensor pipelines Add functions which returns a channel with measured values - fix: filter measured values from a channel Add functions to filter measured values by sensor id or measured value types.
This commit is contained in:
@ -115,7 +115,7 @@ func (postgres *Postgres) InsertDevices(ctx context.Context, devices ...*types.D
|
||||
|
||||
// InsertMeasuredValues into the database
|
||||
func (postgres *Postgres) InsertMeasuredValues(ctx context.Context, measuredValues ...*types.MeasuredValue) error {
|
||||
splittedMeasuredValues := make(map[string][]*types.MeasuredValue, 0)
|
||||
splittedMeasuredValues := make(map[types.MeasuredValueType][]*types.MeasuredValue, 0)
|
||||
|
||||
for _, measuredValue := range measuredValues {
|
||||
if _, ok := splittedMeasuredValues[measuredValue.ValueType]; !ok {
|
||||
@ -164,11 +164,11 @@ func (postgres *Postgres) InsertMeasuredValues(ctx context.Context, measuredValu
|
||||
var queryFile string
|
||||
|
||||
switch measuredValueType {
|
||||
case "humidity":
|
||||
case types.Humidity:
|
||||
queryFile = "insertHumidity.sql"
|
||||
case "pressure":
|
||||
case types.Pressure:
|
||||
queryFile = "insertPressure.sql"
|
||||
case "temperature":
|
||||
case types.Temperature:
|
||||
queryFile = "insertTemperature.sql"
|
||||
default:
|
||||
tx.Rollback()
|
||||
@ -361,7 +361,7 @@ func (postgres *Postgres) SelectHumidity(ctx context.Context, id string) (*types
|
||||
}
|
||||
|
||||
for _, measuredValue := range measuredValues {
|
||||
measuredValue.ValueType = "humidity"
|
||||
measuredValue.ValueType = types.Humidity
|
||||
}
|
||||
|
||||
return measuredValues[0], nil
|
||||
@ -391,7 +391,7 @@ func (postgres *Postgres) SelectHumidities(ctx context.Context) ([]*types.Measur
|
||||
}
|
||||
|
||||
for _, measuredValue := range measuredValues {
|
||||
measuredValue.ValueType = "humidity"
|
||||
measuredValue.ValueType = types.Humidity
|
||||
}
|
||||
|
||||
return measuredValues, nil
|
||||
@ -462,7 +462,7 @@ func (postgres *Postgres) SelectPressure(ctx context.Context, id string) (*types
|
||||
}
|
||||
|
||||
for _, measuredValue := range measuredValues {
|
||||
measuredValue.ValueType = "pressure"
|
||||
measuredValue.ValueType = types.Pressure
|
||||
}
|
||||
|
||||
return measuredValues[0], nil
|
||||
@ -492,7 +492,7 @@ func (postgres *Postgres) SelectPressures(ctx context.Context) ([]*types.Measure
|
||||
}
|
||||
|
||||
for _, measuredValue := range measuredValues {
|
||||
measuredValue.ValueType = "pressure"
|
||||
measuredValue.ValueType = types.Pressure
|
||||
}
|
||||
|
||||
return measuredValues, nil
|
||||
@ -622,7 +622,7 @@ func (postgres *Postgres) SelectTemperature(ctx context.Context, id string) (*ty
|
||||
}
|
||||
|
||||
for _, measuredValue := range measuredValues {
|
||||
measuredValue.ValueType = "temperatures"
|
||||
measuredValue.ValueType = types.Temperature
|
||||
}
|
||||
|
||||
return measuredValues[0], nil
|
||||
@ -652,7 +652,7 @@ func (postgres *Postgres) SelectTemperatures(ctx context.Context) ([]*types.Meas
|
||||
}
|
||||
|
||||
for _, measuredValue := range measuredValues {
|
||||
measuredValue.ValueType = "temperatures"
|
||||
measuredValue.ValueType = types.Temperature
|
||||
}
|
||||
|
||||
return measuredValues, nil
|
||||
|
@ -114,7 +114,7 @@ func (sqlite *SQLite) InsertDevices(ctx context.Context, devices ...*types.Devic
|
||||
|
||||
// InsertMeasuredValues into the database
|
||||
func (sqlite *SQLite) InsertMeasuredValues(ctx context.Context, measuredValues ...*types.MeasuredValue) error {
|
||||
splittedMeasuredValues := make(map[string][]*types.MeasuredValue, 0)
|
||||
splittedMeasuredValues := make(map[types.MeasuredValueType][]*types.MeasuredValue, 0)
|
||||
|
||||
for _, measuredValue := range measuredValues {
|
||||
if _, ok := splittedMeasuredValues[measuredValue.ValueType]; !ok {
|
||||
@ -163,11 +163,11 @@ func (sqlite *SQLite) InsertMeasuredValues(ctx context.Context, measuredValues .
|
||||
var queryFile string
|
||||
|
||||
switch measuredValueType {
|
||||
case "humidity":
|
||||
case types.Humidity:
|
||||
queryFile = "insertHumidity.sql"
|
||||
case "pressure":
|
||||
case types.Pressure:
|
||||
queryFile = "insertPressure.sql"
|
||||
case "temperature":
|
||||
case types.Temperature:
|
||||
queryFile = "insertTemperature.sql"
|
||||
default:
|
||||
tx.Rollback()
|
||||
@ -360,7 +360,7 @@ func (sqlite *SQLite) SelectHumidity(ctx context.Context, id string) (*types.Mea
|
||||
}
|
||||
|
||||
for _, measuredValue := range measuredValues {
|
||||
measuredValue.ValueType = "humidity"
|
||||
measuredValue.ValueType = types.Humidity
|
||||
}
|
||||
|
||||
return measuredValues[0], nil
|
||||
@ -390,7 +390,7 @@ func (sqlite *SQLite) SelectHumidities(ctx context.Context) ([]*types.MeasuredVa
|
||||
}
|
||||
|
||||
for _, measuredValue := range measuredValues {
|
||||
measuredValue.ValueType = "humidity"
|
||||
measuredValue.ValueType = types.Humidity
|
||||
}
|
||||
|
||||
return measuredValues, nil
|
||||
@ -461,7 +461,7 @@ func (sqlite *SQLite) SelectPressure(ctx context.Context, id string) (*types.Mea
|
||||
}
|
||||
|
||||
for _, measuredValue := range measuredValues {
|
||||
measuredValue.ValueType = "pressure"
|
||||
measuredValue.ValueType = types.Pressure
|
||||
}
|
||||
|
||||
return measuredValues[0], nil
|
||||
@ -491,7 +491,7 @@ func (sqlite *SQLite) SelectPressures(ctx context.Context) ([]*types.MeasuredVal
|
||||
}
|
||||
|
||||
for _, measuredValue := range measuredValues {
|
||||
measuredValue.ValueType = "pressure"
|
||||
measuredValue.ValueType = types.Pressure
|
||||
}
|
||||
|
||||
return measuredValues, nil
|
||||
@ -621,7 +621,7 @@ func (sqlite *SQLite) SelectTemperature(ctx context.Context, id string) (*types.
|
||||
}
|
||||
|
||||
for _, measuredValue := range measuredValues {
|
||||
measuredValue.ValueType = "temperatures"
|
||||
measuredValue.ValueType = types.Temperature
|
||||
}
|
||||
|
||||
return measuredValues[0], nil
|
||||
@ -651,7 +651,7 @@ func (sqlite *SQLite) SelectTemperatures(ctx context.Context) ([]*types.Measured
|
||||
}
|
||||
|
||||
for _, measuredValue := range measuredValues {
|
||||
measuredValue.ValueType = "temperatures"
|
||||
measuredValue.ValueType = types.Temperature
|
||||
}
|
||||
|
||||
return measuredValues, nil
|
||||
|
@ -98,8 +98,28 @@ func (repo *Repository) GetSensor(sensorID string) (*types.Sensor, error) {
|
||||
|
||||
// GetSensors returns all sensors. If no sensors has been found, the function
|
||||
// returns nil.
|
||||
func (repo *Repository) GetSensors() ([]*types.Sensor, error) {
|
||||
return repo.database.SelectSensors(context.Background())
|
||||
func (repo *Repository) GetSensors(models ...string) ([]*types.Sensor, error) {
|
||||
sensors, err := repo.database.SelectSensors(context.Background())
|
||||
switch {
|
||||
case err != nil:
|
||||
return nil, err
|
||||
case len(models) > 0:
|
||||
cachedSensors := make([]*types.Sensor, 0)
|
||||
LOOP:
|
||||
for i := range sensors {
|
||||
for j := range models {
|
||||
if strings.ToLower(sensors[i].Model) == strings.ToLower(models[j]) {
|
||||
cachedSensors = append(cachedSensors, sensors[i])
|
||||
continue LOOP
|
||||
}
|
||||
}
|
||||
}
|
||||
return cachedSensors, nil
|
||||
case len(models) <= 0:
|
||||
fallthrough
|
||||
default:
|
||||
return sensors, err
|
||||
}
|
||||
}
|
||||
|
||||
// GetSensorsByDeviceID returns all sensors by a device id. If no sensor has
|
||||
|
@ -188,6 +188,26 @@ func testBackend(t *testing.T, repo *repository.Repository) {
|
||||
require.NoError(err)
|
||||
require.Len(sensors, len(expectedSensors))
|
||||
|
||||
sensors, err = repo.GetSensors("BME280")
|
||||
require.NoError(err)
|
||||
require.Len(sensors, 1)
|
||||
require.JSONEq(jsonEncoder(expectedSensors[2]), jsonEncoder(sensors[0]))
|
||||
|
||||
sensors, err = repo.GetSensors("DS18B20")
|
||||
require.NoError(err)
|
||||
require.Len(sensors, 1)
|
||||
require.JSONEq(jsonEncoder(expectedSensors[1]), jsonEncoder(sensors[0]))
|
||||
|
||||
sensors, err = repo.GetSensors("DHT11")
|
||||
require.NoError(err)
|
||||
require.Len(sensors, 1)
|
||||
require.JSONEq(jsonEncoder(expectedSensors[0]), jsonEncoder(sensors[0]))
|
||||
|
||||
sensors, err = repo.GetSensors("DHT11", "DS18B20")
|
||||
require.NoError(err)
|
||||
require.Len(sensors, 2)
|
||||
require.ElementsMatch(expectedSensors[0:2], sensors)
|
||||
|
||||
// Test: GetSensor
|
||||
sensor, err := repo.GetSensor(expectedSensors[0].ID)
|
||||
require.NoError(err)
|
||||
@ -278,7 +298,7 @@ func testBackend(t *testing.T, repo *repository.Repository) {
|
||||
{
|
||||
ID: "2e5a297a-3da0-46ae-89d2-0fcab0f1d5f7",
|
||||
Value: 32,
|
||||
ValueType: "humidity",
|
||||
ValueType: types.Humidity,
|
||||
Date: *timeNow(require),
|
||||
SensorID: "8c74397f-8e60-4c9d-960d-3197747cef9a",
|
||||
CreationDate: *timeNow(require),
|
||||
@ -287,7 +307,7 @@ func testBackend(t *testing.T, repo *repository.Repository) {
|
||||
{
|
||||
ID: "d69f1b62-0c6c-4058-b42c-4a2821bd220c",
|
||||
Value: 38,
|
||||
ValueType: "pressure",
|
||||
ValueType: types.Pressure,
|
||||
Date: *timeNow(require),
|
||||
SensorID: "8c74397f-8e60-4c9d-960d-3197747cef9a",
|
||||
CreationDate: *timeNow(require),
|
||||
@ -296,7 +316,7 @@ func testBackend(t *testing.T, repo *repository.Repository) {
|
||||
{
|
||||
ID: "ea945ae0-412b-4561-a191-1f8f1f909fa4",
|
||||
Value: 35.4,
|
||||
ValueType: "temperature",
|
||||
ValueType: types.Temperature,
|
||||
Date: *timeNow(require),
|
||||
SensorID: "8c74397f-8e60-4c9d-960d-3197747cef9a",
|
||||
CreationDate: *timeNow(require),
|
||||
|
Reference in New Issue
Block a user