changed the speed to be m/s in metric rather than km/h and ft/m in imperial and added the measurement type for speed/velocity to the airflow component

This commit is contained in:
csawatzky 2025-07-25 09:45:32 -06:00
parent 38ae04f40c
commit 8a53f9689a
5 changed files with 46 additions and 12 deletions

View file

@ -256,5 +256,15 @@ function unitConversion(
});
}
}
if (type === quack.MeasurementType.MEASUREMENT_TYPE_SPEED) {
if (user.settings.distanceUnit === pond.DistanceUnit.DISTANCE_UNIT_FEET) {
newVals.forEach((val, i) => {
val.values.forEach((v, j) => {
//convert m/s to ft/m by multiplying by 196.9
newVals[i].values[j] = v * 196.9
});
});
}
}
return newVals;
}

View file

@ -146,7 +146,7 @@ export interface ComponentTypeExtension {
interactionResultTypes: Array<quack.InteractionResultType>;
states: Array<string>;
measurements: Array<ComponentMeasurement>;
measurementSummary: Function; //Deprecated: this summary used the old measurement structure
measurementSummary?: Function; //Deprecated: this summary used the old measurement structure
unitMeasurementSummary: (
measurements: convertedUnitMeasurement,
excludedNodes?: number[]
@ -382,7 +382,8 @@ export async function getMeasurementSummary(
measurement: quack.IMeasurement,
filters: GraphFilters
): Promise<Array<Summary>> {
return extension(type, subtype).measurementSummary(measurement, filters);
let sumFunc = extension(type, subtype).measurementSummary
return sumFunc ? sumFunc(measurement, filters) : [];
}
const validNodes = (nodeVals: number[], filters?: GraphFilters) => {

View file

@ -1,14 +1,15 @@
import {
ComponentTypeExtension,
Summary,
simpleMeasurements,
simpleSummaries,
// simpleMeasurements,
// simpleSummaries,
unitMeasurementSummaries,
AreaChartData,
GraphFilters,
simpleAreaChartData,
LineChartData,
simpleLineChartData
simpleLineChartData,
ComponentMeasurement
} from "pbHelpers/ComponentType";
import PressureDarkIcon from "assets/components/pressureDark.png";
import PressureLightIcon from "assets/components/pressureLight.png";
@ -18,11 +19,32 @@ import { convertedUnitMeasurement } from "models/UnitMeasurement";
import { pond } from "protobuf-ts/pond";
export function Airflow(subtype: number = 0): ComponentTypeExtension {
let airflow = describeMeasurement(
let cfm = describeMeasurement(
quack.MeasurementType.MEASUREMENT_TYPE_CFM,
quack.ComponentType.COMPONENT_TYPE_AIRFLOW,
subtype
);
let velocity = describeMeasurement(
quack.MeasurementType.MEASUREMENT_TYPE_CFM,
quack.ComponentType.COMPONENT_TYPE_AIRFLOW,
subtype
);
let measurementTypes = [
{
measurementType: quack.MeasurementType.MEASUREMENT_TYPE_PPM,
label: cfm.label(),
colour: cfm.colour(),
graphType: cfm.graph()
} as ComponentMeasurement,
{
measurementType: quack.MeasurementType.MEASUREMENT_TYPE_VOLTAGE,
label: velocity.label(),
colour: velocity.colour(),
graphType: velocity.graph()
} as ComponentMeasurement
];
return {
type: quack.ComponentType.COMPONENT_TYPE_AIRFLOW,
subtypes: [
@ -47,10 +69,10 @@ export function Airflow(subtype: number = 0): ComponentTypeExtension {
addressTypes: [quack.AddressType.ADDRESS_TYPE_I2C],
interactionResultTypes: [],
states: [],
measurements: simpleMeasurements(airflow),
measurementSummary: async function(measurement: quack.Measurement): Promise<Array<Summary>> {
return simpleSummaries(measurement, airflow);
},
measurements: measurementTypes,
// measurementSummary: async function(measurement: quack.Measurement): Promise<Array<Summary>> {
// return simpleSummaries(measurement, airflow);
// },
unitMeasurementSummary: (
measurements: convertedUnitMeasurement,
excludedNodes?: number[]

View file

@ -450,8 +450,9 @@ export class MeasurementDescriber {
this.details.max = 100000;
break;
case quack.MeasurementType.MEASUREMENT_TYPE_SPEED:
let speedUnit = getDistanceUnit()
this.details.label = "Speed";
this.details.unit = "km/h";
this.details.unit = speedUnit === pond.DistanceUnit.DISTANCE_UNIT_METERS ? "m/s" : "ft/m";
this.details.colour = green["500"];
this.details.path = "edgeTriggered.rises";
this.details.max = 500;