fix(cmd/temperature/read): use measured values instaed own type
This commit is contained in:
		
							
								
								
									
										170
									
								
								pkg/cli/cli.go
									
									
									
									
									
								
							
							
						
						
									
										170
									
								
								pkg/cli/cli.go
									
									
									
									
									
								
							| @@ -4,20 +4,19 @@ import ( | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"text/tabwriter" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/go-flucky/flucky/pkg/config" | ||||
| 	"github.com/go-flucky/flucky/pkg/types" | ||||
| ) | ||||
|  | ||||
| // GetSensorsByTemperatures returns commulated list of sensors by temperature values | ||||
| func GetSensorsByHumidities(humidities []*types.Humidity, cnf *config.Configuration) []*types.Sensor { | ||||
| // GetSensorsByMeasuredValues returns commulated list of sensors by measured values | ||||
| func GetSensorsByMeasuredValues(measuredValues []types.MeasuredValue, cnf *config.Configuration) []*types.Sensor { | ||||
| 	sensors := []*types.Sensor{} | ||||
| 	for _, humidity := range humidities { | ||||
| 	for _, measuredValue := range measuredValues { | ||||
| 		duplicated := false | ||||
| 		foundSensor := &types.Sensor{} | ||||
| 		for _, cnfSensor := range cnf.Sensors { | ||||
| 			if humidity.SensorID == cnfSensor.SensorID { | ||||
| 			if measuredValue.GetSensorID() == cnfSensor.SensorID { | ||||
| 				foundSensor = cnfSensor | ||||
|  | ||||
| 				// compare if id has already been added to list | ||||
| @@ -36,147 +35,12 @@ func GetSensorsByHumidities(humidities []*types.Humidity, cnf *config.Configurat | ||||
| 			sensors = append(sensors, foundSensor) | ||||
| 			continue | ||||
| 		} else { | ||||
| 			sensors = append(sensors, &types.Sensor{SensorID: humidity.SensorID}) | ||||
| 			sensors = append(sensors, &types.Sensor{SensorID: measuredValue.GetSensorID()}) | ||||
| 		} | ||||
| 	} | ||||
| 	return sensors | ||||
| } | ||||
|  | ||||
| // GetSensorsByTemperatures returns commulated list of sensors by temperature values | ||||
| func GetSensorsByTemperatures(temperatures []*types.Temperature, cnf *config.Configuration) []*types.Sensor { | ||||
| 	sensors := []*types.Sensor{} | ||||
| 	for _, temperature := range temperatures { | ||||
| 		duplicated := false | ||||
| 		foundSensor := &types.Sensor{} | ||||
| 		for _, cnfSensor := range cnf.Sensors { | ||||
| 			if temperature.SensorID == cnfSensor.SensorID { | ||||
| 				foundSensor = cnfSensor | ||||
|  | ||||
| 				// compare if id has already been added to list | ||||
| 				for _, sensor := range sensors { | ||||
| 					if cnfSensor.SensorID == sensor.SensorID { | ||||
| 						duplicated = true | ||||
| 						break | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if duplicated { | ||||
| 			continue | ||||
| 		} | ||||
| 		if foundSensor != nil { | ||||
| 			sensors = append(sensors, foundSensor) | ||||
| 			continue | ||||
| 		} else { | ||||
| 			sensors = append(sensors, &types.Sensor{SensorID: temperature.SensorID}) | ||||
| 		} | ||||
| 	} | ||||
| 	return sensors | ||||
| } | ||||
|  | ||||
| // GetTemperaturesBetweenTimeRange returns a list of temperatures between a given time range | ||||
| func GetTemperaturesBetweenTimeRange(from time.Time, till *time.Time, temperatures []*types.Temperature) ([]*types.Temperature, error) { | ||||
|  | ||||
| 	if till != nil && from.After(*till) { | ||||
| 		fFormat := from.Format("2006-01-02 15:04:05") | ||||
| 		tFormat := till.Format("2006-01-02 15:04:05") | ||||
| 		return nil, fmt.Errorf("%v is after %v", fFormat, tFormat) | ||||
| 	} | ||||
|  | ||||
| 	cachedTemperatures := []*types.Temperature{} | ||||
| 	for _, temperature := range temperatures { | ||||
|  | ||||
| 		if temperature.TemperatureFromDate.After(from) && till == nil { | ||||
| 			cachedTemperatures = append(cachedTemperatures, temperature) | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		if temperature.TemperatureFromDate.After(from) && temperature.TemperatureTillDate.Before(*till) { | ||||
| 			cachedTemperatures = append(cachedTemperatures, temperature) | ||||
| 		} | ||||
| 	} | ||||
| 	return cachedTemperatures, nil | ||||
| } | ||||
|  | ||||
| // GetTemperaturesBySensors returns a list of temperatures given by the sensor id. | ||||
| // If the sensor name, wire-id or id can not found in configured sensors, it would be skiped! | ||||
| func GetTemperaturesBySensors(sensorNamesOrIDs []string, temperatures []*types.Temperature, cnf *config.Configuration) []*types.Temperature { | ||||
| 	cachedSensors := []*types.Sensor{} | ||||
| 	cachedTemperatures := []*types.Temperature{} | ||||
|  | ||||
| 	// match sensor name, wire-id or sensor id with configured sensors | ||||
| 	// and append the matched sensor to the list | ||||
| 	for _, sensor := range sensorNamesOrIDs { | ||||
| 		for _, cs := range cnf.Sensors { | ||||
| 			if cs.SensorID == sensor { | ||||
| 				cachedSensors = append(cachedSensors, cs) | ||||
| 			} | ||||
| 			if cs.WireID != nil && *cs.WireID == sensor { | ||||
| 				cachedSensors = append(cachedSensors, cs) | ||||
| 			} | ||||
| 			if cs.SensorName == sensor { | ||||
| 				cachedSensors = append(cachedSensors, cs) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// march all temperatures which matched with the sensor id | ||||
| 	for _, temperature := range temperatures { | ||||
| 		for _, cachedSensor := range cachedSensors { | ||||
| 			if temperature.SensorID == cachedSensor.SensorID { | ||||
| 				cachedTemperatures = append(cachedTemperatures, temperature) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return cachedTemperatures | ||||
| } | ||||
|  | ||||
| // PrintHumidities displays a list of humidities | ||||
| func PrintHumidities(humidities []*types.Humidity, cnf *config.Configuration, w io.Writer) { | ||||
|  | ||||
| 	sensors := GetSensorsByHumidities(humidities, cnf) | ||||
|  | ||||
| 	// 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() | ||||
| } | ||||
|  | ||||
| // PrintRGBLEDs displays a list with all configured RGBLEDs | ||||
| func PrintRGBLEDs(cnf *config.Configuration, w io.Writer) { | ||||
|  | ||||
| @@ -216,15 +80,15 @@ func PrintSensors(cnf *config.Configuration, w io.Writer) error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // PrintTemperatures displays a list of temperatures | ||||
| func PrintTemperatures(temperatures []*types.Temperature, cnf *config.Configuration, w io.Writer) { | ||||
| // PrintMeasuredValues displays a list of measured values | ||||
| func PrintMeasuredValues(measuredValues []types.MeasuredValue, cnf *config.Configuration, w io.Writer) { | ||||
|  | ||||
| 	sensors := GetSensorsByTemperatures(temperatures, cnf) | ||||
| 	sensors := GetSensorsByMeasuredValues(measuredValues, cnf) | ||||
|  | ||||
| 	// sort temperature values for every sensor | ||||
| 	orderedTemperatures := make(map[string][]*types.Temperature) | ||||
| 	for _, temperature := range temperatures { | ||||
| 		orderedTemperatures[temperature.SensorID] = append(orderedTemperatures[temperature.SensorID], temperature) | ||||
| 	// sort measured values for every sensor | ||||
| 	orderedMeasuredValues := make(map[string][]types.MeasuredValue) | ||||
| 	for _, measuredValue := range measuredValues { | ||||
| 		orderedMeasuredValues[measuredValue.GetSensorID()] = append(orderedMeasuredValues[measuredValue.GetSensorID()], measuredValue) | ||||
| 	} | ||||
|  | ||||
| 	// declare tabwriter | ||||
| @@ -240,17 +104,17 @@ func PrintTemperatures(temperatures []*types.Temperature, cnf *config.Configurat | ||||
|  | ||||
| 	// find sensor with maximum temperature values | ||||
| 	maxLength := 0 | ||||
| 	for _, orderedTemperature := range orderedTemperatures { | ||||
| 		if len(orderedTemperature) > maxLength { | ||||
| 			maxLength = len(orderedTemperature) | ||||
| 	for _, orderedMeasuredValue := range orderedMeasuredValues { | ||||
| 		if len(orderedMeasuredValue) > maxLength { | ||||
| 			maxLength = len(orderedMeasuredValue) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// body | ||||
| 	for i := 0; i < maxLength; i++ { | ||||
| 		for _, sensor := range sensors { | ||||
| 			if len(orderedTemperatures[sensor.SensorID]) > i { | ||||
| 				fmt.Fprintf(tw, "%3.3f\t", orderedTemperatures[sensor.SensorID][i].TemperatureValue) | ||||
| 			if len(orderedMeasuredValues[sensor.SensorID]) > i { | ||||
| 				fmt.Fprintf(tw, "%3.3f\t", orderedMeasuredValues[sensor.SensorID][i].GetValue()) | ||||
| 			} else { | ||||
| 				fmt.Fprint(tw, "\t") | ||||
| 			} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user