import {Alerts} from "./component/Alerts" import {CO2Sensor} from "./component/CO2Sensor" import {Daytime} from "./component/Daytime" import {Ebbflow} from "./component/Ebbflow" import {Humidity} from "./component/Humidity" import {Light} from "./component/Light" import {PHMeter} from "./component/PHMeter" import {Exaust} from "./component/relay/Exaust" import {IntervalIrrigation} from "./component/relay/IntervalIrrigation" import {Relay} from "./component/relay/Relay" import {ThresholdRelay} from "./component/relay/ThresholdRelay" import {Reservoir} from "./component/Reservoir" import {Temperature} from "./component/Temperature" export type Component = Ebbflow | Daytime | Light | Temperature | Humidity | Reservoir | IntervalIrrigation | Relay | Alerts | CO2Sensor | Exaust | PHMeter export type ComponentConstructor = typeof Ebbflow | typeof Daytime | typeof Light | typeof Temperature | typeof Humidity | typeof Reservoir | typeof IntervalIrrigation | typeof Relay | typeof ThresholdRelay | typeof Alerts | typeof CO2Sensor | typeof Exaust | typeof PHMeter // export enum ComponentKey { // alerts = "alerts", // ebbflow = "ebbflow", // daytime = "daytime", // light = "light", // temprature = "temperature", // humidity = "humidity", // reservoir = "reservoir", // phMeter = "phMeter", // humidifier = "humidifier", // dehumidifier = "dehumidifier", // lighting = "lighting", // irrigation = "irrigation", // reservoirFill = "reservoirFill", // reservoirDrain = "reservoirDrain", // ebbflowFlood = "ebbflowFlood", // ebbflowDrain = "ebbflowDrain", // airConditioner = "airConditioner", // heater = "heater", // solutionChiller = "solutionChiller", // solutionHeater = "solutionHeater", // co2Emitter = "co2Emitter", // co2Sensor = "co2", // exaust = "exaust", // } // export interface RoomComponents // { // alerts?: Alerts; // ebbflow?: Ebbflow; // daytime?: Daytime; // light?: Light; // temperature?: Temperature; // humidity?: Humidity; // reservoir?: Reservoir; // humidifier?: ThresholdRelay; // dehumidifier?: ThresholdRelay; // lighting?: Relay; // lightingA?: Relay; // lightingB?: Relay; // irrigation?: IntervalIrrigation; // reservoirFill?: Relay; // reservoirDrain?: Relay; // ebbflowFlood?: Relay; // ebbflowDrain?: Relay; // airConditioner?: ThresholdRelay; // heater?: Relay; // solutionChiller?: Relay; // solutionHeater?: Relay; // co2Emitter?: ThresholdRelay; // co2Sensor?: CO2Sensor; // exaust?: Exaust; // phMeter?: PHMeter; // } const componentNameMap = { alerts: "alerts", ebbflow: "ebbflow", daytime: "daytime", light: "light", temperature: "temperature", humidity: "humidity", netuno: "reservoir", reservoir: "reservoir", "humidifier-relay": "humidifier", "dehumidifier-relay": "dehumidifier", "light-relay": "lighting", "light-a": "lightingA", "light-b": "lightingB", "interval-irrigation": "irrigation", "reservoir-fill-relay": "reservoirFill", "reservoir-drain-relay": "reservoirDrain", "ebbflow-flood-relay": "ebbflowFlood", "ebbflow-drain-relay": "ebbflowDrain", "air-conditioner-relay": "airConditioner", "heater-relay": "heater", "solution-chiller-relay": "solutionChiller", "solution-heater-relay": "solutionHeater", "co2-emitter-relay": "co2Emitter", "co2-sensor": "co2Sensor", "exaust-relay": "exaust", "ph-meter": "phMeter", } export const componentMap = { alerts: Alerts, ebbflow: Ebbflow, daytime: Daytime, light: Light, temperature: Temperature, humidity: Humidity, reservoir: Reservoir, lighting: Relay, lightingA: Relay, humidifier: ThresholdRelay, dehumidifier: ThresholdRelay, lightingB: Relay, irrigation: IntervalIrrigation, reservoirFill: Relay, reservoirDrain: Relay, ebbflowFlood: Relay, ebbflowDrain: Relay, airConditioner: ThresholdRelay, heater: Relay, solutionChiller: Relay, solutionHeater: Relay, co2Emitter: ThresholdRelay, co2Sensor: CO2Sensor, exaust: Exaust, phMeter: PHMeter, } type ComponentSpec = { name: string; class: ComponentConstructor; } export function resolveComponent(name: string): null | ComponentSpec { const componentName = componentNameMap[name] if (!componentName) return null const componentClass = componentMap[componentName] if (!componentClass) throw new Error("Fix 'componentClassMap'") return { name: componentName, class: componentClass } } export { Alerts, Relay, Light, Ebbflow, Temperature, Humidity, IntervalIrrigation, Reservoir, Daytime, Exaust, PHMeter, ThresholdRelay, CO2Sensor as CarbonDioxide }