diff --git a/package-lock.json b/package-lock.json index a6c8aad..b39e4d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,7 +46,7 @@ "mui-tel-input": "^7.0.0", "notistack": "^3.0.1", "openweathermap-ts": "^1.2.10", - "protobuf-ts": "git+https://gitlab+deploy-token-50627:hv8mB4WkyvtjBpJKU1rN@gitlab.com/brandx/protobuf-ts.git#sendgrid_whitelabel", + "protobuf-ts": "git+https://gitlab+deploy-token-50627:hv8mB4WkyvtjBpJKU1rN@gitlab.com/brandx/protobuf-ts.git#plenum_ambient_component", "query-string": "^9.2.1", "react": "^18.3.1", "react-beautiful-dnd": "^13.1.1", @@ -11752,7 +11752,7 @@ }, "node_modules/protobuf-ts": { "version": "1.0.0", - "resolved": "git+https://gitlab+deploy-token-50627:hv8mB4WkyvtjBpJKU1rN@gitlab.com/brandx/protobuf-ts.git#9c0f668d4a56b8216dd71a44c3110a818aaf3541", + "resolved": "git+https://gitlab+deploy-token-50627:hv8mB4WkyvtjBpJKU1rN@gitlab.com/brandx/protobuf-ts.git#1a3b63d5a2f4c9165642d994c842abecc3f3bffc", "dependencies": { "protobufjs": "^6.8.8" } diff --git a/package.json b/package.json index 1fb2505..a1891d0 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "mui-tel-input": "^7.0.0", "notistack": "^3.0.1", "openweathermap-ts": "^1.2.10", - "protobuf-ts": "git+https://gitlab+deploy-token-50627:hv8mB4WkyvtjBpJKU1rN@gitlab.com/brandx/protobuf-ts.git#sendgrid_whitelabel", + "protobuf-ts": "git+https://gitlab+deploy-token-50627:hv8mB4WkyvtjBpJKU1rN@gitlab.com/brandx/protobuf-ts.git#plenum_ambient_component", "query-string": "^9.2.1", "react": "^18.3.1", "react-beautiful-dnd": "^13.1.1", diff --git a/src/pbHelpers/ComponentType.tsx b/src/pbHelpers/ComponentType.tsx index 047c852..e526858 100644 --- a/src/pbHelpers/ComponentType.tsx +++ b/src/pbHelpers/ComponentType.tsx @@ -39,7 +39,10 @@ import { Voltage, VPD, Weight, - CapacitorCable + CapacitorCable, + Plenum, + AmbientOnewire, + AmbientI2C } from "pbHelpers/ComponentTypes"; //import { multilineGrainCableData } from "pbHelpers/ComponentTypes/GrainCable"; //import { multilineCapCableData } from "./ComponentTypes/CapacitorCable"; @@ -96,7 +99,11 @@ const COMPONENT_TYPE_MAP = new Map([ [quack.ComponentType.COMPONENT_TYPE_SEN5X, Sen5x], [quack.ComponentType.COMPONENT_TYPE_VIBRATION_CHAIN, VibrationCable], [quack.ComponentType.COMPONENT_TYPE_DRAGER_GAS_DONGLE, dragerGasDongle], - [quack.ComponentType.COMPONENT_TYPE_AIRFLOW, Airflow] + [quack.ComponentType.COMPONENT_TYPE_AIRFLOW, Airflow], + [quack.ComponentType.COMPONENT_TYPE_PLENUM, Plenum], + [quack.ComponentType.COMPONENT_TYPE_AMBIENT_ONEWIRE, AmbientOnewire], + [quack.ComponentType.COMPONENT_TYPE_AMBIENT_I2C, AmbientI2C], + ]); export interface Subtype { diff --git a/src/pbHelpers/ComponentTypes/AmbientI2C.ts b/src/pbHelpers/ComponentTypes/AmbientI2C.ts new file mode 100644 index 0000000..7a2cbf9 --- /dev/null +++ b/src/pbHelpers/ComponentTypes/AmbientI2C.ts @@ -0,0 +1,79 @@ +import TemperatureHumidityDarkIcon from "assets/components/temperatureHumidityDark.png"; +import TemperatureHumidityLightIcon from "assets/components/temperatureHumidityLight.png"; +import { convertedUnitMeasurement } from "models/UnitMeasurement"; +import { + AreaChartData, + ComponentTypeExtension, + GraphFilters, + LineChartData, + simpleAreaChartData, + simpleLineChartData, + simpleMeasurements, + simpleSummaries, + Summary, + unitMeasurementSummaries +} from "pbHelpers/ComponentType"; +import { describeMeasurement } from "pbHelpers/MeasurementDescriber"; +import { pond } from "protobuf-ts/pond"; +import { quack } from "protobuf-ts/quack"; + +export function AmbientI2C(subtype: number = 0): ComponentTypeExtension { + let temperature = describeMeasurement( + quack.MeasurementType.MEASUREMENT_TYPE_TEMPERATURE, + quack.ComponentType.COMPONENT_TYPE_AMBIENT_I2C, + subtype + ); + let humidity = describeMeasurement( + quack.MeasurementType.MEASUREMENT_TYPE_PERCENT, + quack.ComponentType.COMPONENT_TYPE_AMBIENT_I2C, + subtype + ); + return { + type: quack.ComponentType.COMPONENT_TYPE_AMBIENT_I2C, + subtypes: [], + friendlyName: "Ambient I2C", + description: "Measures temperature and humidity", + isController: false, + isSource: true, + isCalibratable: true, + addressTypes: [quack.AddressType.ADDRESS_TYPE_I2C], + interactionResultTypes: [], + states: [], + measurements: simpleMeasurements(temperature, humidity), + measurementSummary: async function(measurement: quack.Measurement): Promise> { + return simpleSummaries(measurement, temperature, humidity); + }, + unitMeasurementSummary: ( + measurements: convertedUnitMeasurement + ): Summary[] => { + return unitMeasurementSummaries( + measurements, + quack.ComponentType.COMPONENT_TYPE_AMBIENT_I2C, + subtype + ); + }, + areaChartData: ( + measurement: pond.UnitMeasurementsForComponent, + smoothingAverages?: number, + filters?: GraphFilters + ): AreaChartData => { + return simpleAreaChartData(measurement, smoothingAverages, filters); + }, + lineChartData: ( + measurement: pond.UnitMeasurementsForComponent, + smoothingAverages?: number, + filters?: GraphFilters + ): LineChartData => { + return simpleLineChartData( + quack.ComponentType.COMPONENT_TYPE_AMBIENT_I2C, + measurement, + smoothingAverages, + filters + ); + }, + minMeasurementPeriodMs: 1000, + icon: (theme?: "light" | "dark"): string | undefined => { + return theme === "light" ? TemperatureHumidityDarkIcon : TemperatureHumidityLightIcon; + } + }; +} diff --git a/src/pbHelpers/ComponentTypes/AmbientOnewire.ts b/src/pbHelpers/ComponentTypes/AmbientOnewire.ts new file mode 100644 index 0000000..4fd394a --- /dev/null +++ b/src/pbHelpers/ComponentTypes/AmbientOnewire.ts @@ -0,0 +1,79 @@ +import TemperatureHumidityDarkIcon from "assets/components/temperatureHumidityDark.png"; +import TemperatureHumidityLightIcon from "assets/components/temperatureHumidityLight.png"; +import { convertedUnitMeasurement } from "models/UnitMeasurement"; +import { + AreaChartData, + ComponentTypeExtension, + GraphFilters, + LineChartData, + simpleAreaChartData, + simpleLineChartData, + simpleMeasurements, + simpleSummaries, + Summary, + unitMeasurementSummaries +} from "pbHelpers/ComponentType"; +import { describeMeasurement } from "pbHelpers/MeasurementDescriber"; +import { pond } from "protobuf-ts/pond"; +import { quack } from "protobuf-ts/quack"; + +export function AmbientOnewire(subtype: number = 0): ComponentTypeExtension { + let temperature = describeMeasurement( + quack.MeasurementType.MEASUREMENT_TYPE_TEMPERATURE, + quack.ComponentType.COMPONENT_TYPE_AMBIENT_ONEWIRE, + subtype + ); + let humidity = describeMeasurement( + quack.MeasurementType.MEASUREMENT_TYPE_PERCENT, + quack.ComponentType.COMPONENT_TYPE_AMBIENT_ONEWIRE, + subtype + ); + return { + type: quack.ComponentType.COMPONENT_TYPE_AMBIENT_ONEWIRE, + subtypes: [], + friendlyName: "Onewire Ambient", + description: "Measures temperature and humidity", + isController: false, + isSource: true, + isCalibratable: true, + addressTypes: [quack.AddressType.ADDRESS_TYPE_CONFIGURABLE_PIN_ARRAY], + interactionResultTypes: [], + states: [], + measurements: simpleMeasurements(temperature, humidity), + measurementSummary: async function(measurement: quack.Measurement): Promise> { + return simpleSummaries(measurement, temperature, humidity); + }, + unitMeasurementSummary: ( + measurements: convertedUnitMeasurement + ): Summary[] => { + return unitMeasurementSummaries( + measurements, + quack.ComponentType.COMPONENT_TYPE_AMBIENT_ONEWIRE, + subtype + ); + }, + areaChartData: ( + measurement: pond.UnitMeasurementsForComponent, + smoothingAverages?: number, + filters?: GraphFilters + ): AreaChartData => { + return simpleAreaChartData(measurement, smoothingAverages, filters); + }, + lineChartData: ( + measurement: pond.UnitMeasurementsForComponent, + smoothingAverages?: number, + filters?: GraphFilters + ): LineChartData => { + return simpleLineChartData( + quack.ComponentType.COMPONENT_TYPE_AMBIENT_ONEWIRE, + measurement, + smoothingAverages, + filters + ); + }, + minMeasurementPeriodMs: 1000, + icon: (theme?: "light" | "dark"): string | undefined => { + return theme === "light" ? TemperatureHumidityDarkIcon : TemperatureHumidityLightIcon; + } + }; +} diff --git a/src/pbHelpers/ComponentTypes/Plenum.ts b/src/pbHelpers/ComponentTypes/Plenum.ts new file mode 100644 index 0000000..687d6fd --- /dev/null +++ b/src/pbHelpers/ComponentTypes/Plenum.ts @@ -0,0 +1,84 @@ +import TemperatureHumidityDarkIcon from "assets/components/temperatureHumidityDark.png"; +import TemperatureHumidityLightIcon from "assets/components/temperatureHumidityLight.png"; +import { convertedUnitMeasurement } from "models/UnitMeasurement"; +import { + AreaChartData, + ComponentTypeExtension, + GraphFilters, + LineChartData, + simpleAreaChartData, + simpleLineChartData, + simpleMeasurements, + simpleSummaries, + Summary, + unitMeasurementSummaries +} from "pbHelpers/ComponentType"; +import { describeMeasurement } from "pbHelpers/MeasurementDescriber"; +import { pond } from "protobuf-ts/pond"; +import { quack } from "protobuf-ts/quack"; + +export function Plenum(subtype: number = 0): ComponentTypeExtension { + let temperature = describeMeasurement( + quack.MeasurementType.MEASUREMENT_TYPE_TEMPERATURE, + quack.ComponentType.COMPONENT_TYPE_PLENUM, + subtype + ); + let humidity = describeMeasurement( + quack.MeasurementType.MEASUREMENT_TYPE_PERCENT, + quack.ComponentType.COMPONENT_TYPE_PLENUM, + subtype + ); + let pressure = describeMeasurement( + quack.MeasurementType.MEASUREMENT_TYPE_PRESSURE, + quack.ComponentType.COMPONENT_TYPE_PLENUM, + subtype + ); + return { + type: quack.ComponentType.COMPONENT_TYPE_PLENUM, + subtypes: [], + friendlyName: "Plenum", + description: "Measures temperature, humidity and pressure", + isController: false, + isSource: true, + isCalibratable: true, + addressTypes: [quack.AddressType.ADDRESS_TYPE_CONFIGURABLE_PIN_ARRAY], + interactionResultTypes: [], + states: [], + measurements: simpleMeasurements(temperature, humidity, pressure), + measurementSummary: async function(measurement: quack.Measurement): Promise> { + return simpleSummaries(measurement, temperature, humidity, pressure); + }, + unitMeasurementSummary: ( + measurements: convertedUnitMeasurement + ): Summary[] => { + return unitMeasurementSummaries( + measurements, + quack.ComponentType.COMPONENT_TYPE_PLENUM, + subtype + ); + }, + areaChartData: ( + measurement: pond.UnitMeasurementsForComponent, + smoothingAverages?: number, + filters?: GraphFilters + ): AreaChartData => { + return simpleAreaChartData(measurement, smoothingAverages, filters); + }, + lineChartData: ( + measurement: pond.UnitMeasurementsForComponent, + smoothingAverages?: number, + filters?: GraphFilters + ): LineChartData => { + return simpleLineChartData( + quack.ComponentType.COMPONENT_TYPE_PLENUM, + measurement, + smoothingAverages, + filters + ); + }, + minMeasurementPeriodMs: 1000, + icon: (theme?: "light" | "dark"): string | undefined => { + return theme === "light" ? TemperatureHumidityDarkIcon : TemperatureHumidityLightIcon; + } + }; +} diff --git a/src/pbHelpers/ComponentTypes/index.ts b/src/pbHelpers/ComponentTypes/index.ts index 349bbbe..ba5912d 100644 --- a/src/pbHelpers/ComponentTypes/index.ts +++ b/src/pbHelpers/ComponentTypes/index.ts @@ -29,3 +29,6 @@ export * from "./Voltage"; export * from "./VPD"; export * from "./Weight"; export * from "./CapacitorCable"; +export * from "./Plenum"; +export * from "./AmbientOnewire"; +export * from "./AmbientI2C"; diff --git a/src/pbHelpers/DeviceAvailability.ts b/src/pbHelpers/DeviceAvailability.ts index 972c2e2..a7d747e 100644 --- a/src/pbHelpers/DeviceAvailability.ts +++ b/src/pbHelpers/DeviceAvailability.ts @@ -64,7 +64,8 @@ const DefaultAvailability: DeviceAvailabilityMap = new Map { + console.log(response) let rUsers: User[] = []; or(response.data, { users: [] }).users.forEach((user: any) => { rUsers.push(User.any(user));