feat: select optional sensors to read humidity or temperature
This commit is contained in:
parent
91d20b6e95
commit
82e82952ed
@ -1,6 +1,7 @@
|
|||||||
package temperature
|
package temperature
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
@ -15,6 +16,7 @@ var follow, push bool
|
|||||||
var readTemperatureCmd = &cobra.Command{
|
var readTemperatureCmd = &cobra.Command{
|
||||||
Use: "read",
|
Use: "read",
|
||||||
Short: "read temperature from sensor",
|
Short: "read temperature from sensor",
|
||||||
|
Example: fmt.Sprintf("flucky temperature read\nflucky temperature read outdoor"),
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
|
||||||
// read configuration
|
// read configuration
|
||||||
@ -24,7 +26,7 @@ var readTemperatureCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
// fetch all temperature sensors
|
// fetch all temperature sensors
|
||||||
temperatureSensors, err := fc.GetTemperatureSensors()
|
temperatureSensors, err := fc.GetTemperatureSensors(args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln(err)
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,63 @@ import (
|
|||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/types"
|
"git.cryptic.systems/fh-trier/go-flucky/pkg/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func PrintHumidities(humidities []*types.Humidity, cnf *config.FluckyConfig, w io.Writer) {
|
||||||
|
// determine all humidity sensors based on the humidiy values
|
||||||
|
sensors := []*types.Sensor{}
|
||||||
|
for _, humidity := range humidities {
|
||||||
|
// Search for the sensor that has acquired the measured value
|
||||||
|
for _, sensor := range cnf.Sensors {
|
||||||
|
if sensor.SensorID == humidity.SensorID {
|
||||||
|
sensors = append(sensors, sensor)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// If it was not found, pass only the sensor with the UUID on
|
||||||
|
sensor := &types.Sensor{
|
||||||
|
SensorID: humidity.SensorID,
|
||||||
|
}
|
||||||
|
sensors = append(sensors, sensor)
|
||||||
|
}
|
||||||
|
|
||||||
|
// sort temperature values for every sensor
|
||||||
|
orderedHumidities := make(map[string][]*types.Humidity)
|
||||||
|
for _, humidity := range humidities {
|
||||||
|
orderedHumidities[humidity.SensorID] = append(orderedHumidities[humidity.SensorID], humidity)
|
||||||
|
}
|
||||||
|
|
||||||
|
// declare tabwriter
|
||||||
|
tw := tabwriter.NewWriter(w, 0, 0, 3, ' ', 0)
|
||||||
|
|
||||||
|
// headlines
|
||||||
|
for i, sensor := range sensors {
|
||||||
|
fmt.Fprintf(tw, "%v\t", sensor.Name())
|
||||||
|
if i == len(sensors)-1 {
|
||||||
|
fmt.Fprintf(tw, "\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// find sensor with maximum temperature values
|
||||||
|
maxLength := 0
|
||||||
|
for _, orderedHumidity := range orderedHumidities {
|
||||||
|
if len(orderedHumidity) > maxLength {
|
||||||
|
maxLength = len(orderedHumidity)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// body
|
||||||
|
for i := 0; i < maxLength; i++ {
|
||||||
|
for _, sensor := range sensors {
|
||||||
|
if len(orderedHumidities[sensor.SensorID]) > i {
|
||||||
|
fmt.Fprintf(tw, "%3.3f\t", orderedHumidities[sensor.SensorID][i].HumidityValue)
|
||||||
|
} else {
|
||||||
|
fmt.Fprint(tw, "\t")
|
||||||
|
}
|
||||||
|
fmt.Fprint(tw, "\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tw.Flush()
|
||||||
|
}
|
||||||
|
|
||||||
func PrintTemperatures(temperatures []*types.Temperature, cnf *config.FluckyConfig, w io.Writer) {
|
func PrintTemperatures(temperatures []*types.Temperature, cnf *config.FluckyConfig, w io.Writer) {
|
||||||
|
|
||||||
sensors := []*types.Sensor{}
|
sensors := []*types.Sensor{}
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/sensor"
|
"git.cryptic.systems/fh-trier/go-flucky/pkg/sensor"
|
||||||
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/types"
|
"git.cryptic.systems/fh-trier/go-flucky/pkg/types"
|
||||||
"github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
// FluckyConfig dasd
|
// FluckyConfig dasd
|
||||||
@ -205,9 +205,26 @@ func (fc *FluckyConfig) EnableSensor(nameOrUUID string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fc *FluckyConfig) GetHumiditySensors() []sensor.HumiditySensor {
|
func (fc *FluckyConfig) GetHumiditySensors(namesOrUUIDs []string) []sensor.HumiditySensor {
|
||||||
hs := []sensor.HumiditySensor{}
|
hs := []sensor.HumiditySensor{}
|
||||||
for _, s := range fc.Sensors {
|
for _, s := range fc.Sensors {
|
||||||
|
// select only named sensors
|
||||||
|
if len(namesOrUUIDs) > 0 {
|
||||||
|
found := false
|
||||||
|
for _, nameOrUUID := range namesOrUUIDs {
|
||||||
|
if nameOrUUID == s.SensorID || nameOrUUID == s.SensorName {
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !found {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// skip disabled sensors
|
||||||
|
if !s.SensorEnabled {
|
||||||
|
continue
|
||||||
|
}
|
||||||
switch s.SensorModel {
|
switch s.SensorModel {
|
||||||
case types.DHT11:
|
case types.DHT11:
|
||||||
hs = append(hs, &sensor.DHT11Sensor{
|
hs = append(hs, &sensor.DHT11Sensor{
|
||||||
@ -222,15 +239,26 @@ func (fc *FluckyConfig) GetHumiditySensors() []sensor.HumiditySensor {
|
|||||||
return hs
|
return hs
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fc *FluckyConfig) GetTemperatureSensors() ([]sensor.TemperatureSensor, error) {
|
func (fc *FluckyConfig) GetTemperatureSensors(namesOrUUIDs []string) ([]sensor.TemperatureSensor, error) {
|
||||||
ts := []sensor.TemperatureSensor{}
|
ts := []sensor.TemperatureSensor{}
|
||||||
|
|
||||||
for _, s := range fc.Sensors {
|
for _, s := range fc.Sensors {
|
||||||
|
// select only named sensors
|
||||||
|
if len(namesOrUUIDs) > 0 {
|
||||||
|
found := false
|
||||||
|
for _, nameOrUUID := range namesOrUUIDs {
|
||||||
|
if nameOrUUID == s.SensorID || nameOrUUID == s.SensorName {
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !found {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
// skip disabled sensors
|
// skip disabled sensors
|
||||||
if !s.SensorEnabled {
|
if !s.SensorEnabled {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
switch s.SensorModel {
|
switch s.SensorModel {
|
||||||
case types.DHT11:
|
case types.DHT11:
|
||||||
ts = append(ts, &sensor.DHT11Sensor{
|
ts = append(ts, &sensor.DHT11Sensor{
|
||||||
|
Loading…
Reference in New Issue
Block a user