From 5c861087b7408803fbc92b96db6f28ab2a89199f Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Thu, 6 Oct 2022 08:15:33 +0800 Subject: [PATCH 01/45] initial pull request --- .../ELECTRICAL/entity_types/ABSTRACT.yaml | 9 ++++ .../ELECTRICAL/entity_types/UPS.yaml | 13 ++++++ .../resources/HVAC/entity_types/ABSTRACT.yaml | 30 +++++++------ .../yaml/resources/HVAC/entity_types/AHU.yaml | 2 +- .../resources/HVAC/entity_types/CDWS.yaml | 2 +- .../yaml/resources/HVAC/entity_types/CH.yaml | 2 +- .../yaml/resources/HVAC/entity_types/CMP.yaml | 2 + .../yaml/resources/HVAC/entity_types/CT.yaml | 2 +- .../yaml/resources/HVAC/entity_types/FAN.yaml | 2 - .../yaml/resources/HVAC/entity_types/FCU.yaml | 19 ++++++++- .../yaml/resources/HVAC/entity_types/HWS.yaml | 10 ++++- .../yaml/resources/HVAC/entity_types/MAU.yaml | 9 +--- .../resources/HVAC/entity_types/SENSOR.yaml | 7 ++++ .../METERS/entity_types/ABSTRACT.yaml | 2 + .../resources/METERS/entity_types/EM.yaml | 2 +- .../resources/METERS/entity_types/HM.yaml | 2 +- .../SAFETY/entity_types/ABSTRACT.yaml | 25 ++++++++++- .../resources/SAFETY/entity_types/FACP.yaml | 21 +++++++++- .../resources/SAFETY/entity_types/FD.yaml | 3 ++ .../resources/SAFETY/entity_types/FSS.yaml | 15 ++++++- .../SAFETY/entity_types/GENERALTYPES.yaml | 7 +++- .../resources/SAFETY/entity_types/HDS.yaml | 24 +++++++++++ .../resources/SAFETY/entity_types/WTR.yaml | 27 ++++++++++++ .../yaml/resources/entity_types/global.yaml | 2 +- .../resources/fields/telemetry_fields.yaml | 42 ++++++++++++++++--- 25 files changed, 238 insertions(+), 43 deletions(-) create mode 100644 ontology/yaml/resources/SAFETY/entity_types/HDS.yaml create mode 100644 ontology/yaml/resources/SAFETY/entity_types/WTR.yaml diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml index 19f3a4674..dbbfca09d 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml @@ -182,3 +182,12 @@ SRC2: - source2_phase3_phase1_over_voltage_status - source2_over_voltage_status - source2_lost_power_alarm + +ALM: + description: "Tag for basic alarms." + is_abstract: true + opt_uses: + - lost_power_alarm + - low_battery_alarm + uses: + - failed_alarm \ No newline at end of file diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml index ed087720d..fda53dc9d 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml @@ -66,3 +66,16 @@ UPS_IOBM_PPWM_UPSBM: - IOBM - PPWM - UPSBM + +UPS_SS_ALM: + description: "UPS unit with alarm." + is_canonical: true + implements: + - UPS + - SS + - ALM + uses: + - run_mode + opt_uses: + - load_bypass_mode + diff --git a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml index 7b98f1a56..94e2f79f3 100644 --- a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml @@ -37,8 +37,6 @@ SD: - supply_air_damper_percentage_command implements: - CONTROL - - RDM: id: "10008693406630412288" @@ -783,7 +781,6 @@ RTC: uses: - return_air_temperature_sensor - return_air_temperature_setpoint - # Rename to OTM OA: @@ -1399,7 +1396,7 @@ FDPM: - filter_differential_pressure_sensor implements: - MONITORING - + FDPSM: id: "5397007388203024384" description: "Filter pressure status monitoring." @@ -3845,7 +3842,7 @@ CHDXVSC: - compressor_lost_power_alarm - compressor_speed_frequency_sensor - compressor_failed_alarm - + CDWFRM: id: "632877381119377408" description: "Condenser water flowrate monitoring." @@ -5256,7 +5253,6 @@ SFMSC: opt_uses: - schedule_run_command - MIPVCM: id: "10283962739713900544" description: "Motor phase-level input current and voltage monitoring." @@ -5285,7 +5281,7 @@ MIPWM: opt_uses: - motor_powerfactor_sensor - input_motor_frequency_sensor - + MSM: id: "2084609862272024576" description: "Motor speed monitoring for fan." @@ -5298,7 +5294,6 @@ MSM: - low_discharge_fan_speed_status opt_uses: - discharge_fan_failed_alarm - INVOPWM: id: "10056530958531690496" @@ -5410,7 +5405,7 @@ EFHLC: - high_exhaust_fan_speed_status implements: - OPERATIONAL - + SWCM: id: "620728877144080384" description: "Solenoid water valve control and monitoring." @@ -5508,8 +5503,6 @@ CO2M6X: implements: - MONITORING - - MIPCVM: id: "13492227718401490944" description: "Motor phase-level input current and voltage monitoring." @@ -5623,4 +5616,17 @@ RFVSC2X: - return_fan_run_status_2 - return_fan_speed_percentage_command_2 implements: - - OPERATIONAL \ No newline at end of file + - OPERATIONAL + +ALM: + description: "Tag for basic alarms." + is_abstract: true + opt_uses: + - low_discharge_air_flowrate_alarm + - lost_power_alarm + - water_leak_detection_alarm + - low_battery_alarm + uses: + - failed_alarm + implements: + - MONITORING diff --git a/ontology/yaml/resources/HVAC/entity_types/AHU.yaml b/ontology/yaml/resources/HVAC/entity_types/AHU.yaml index aafaa3f5d..c6d089bda 100644 --- a/ontology/yaml/resources/HVAC/entity_types/AHU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/AHU.yaml @@ -3632,7 +3632,7 @@ AHU_DFSS_DXZC_ECONZ_EFSS2X_HT2ZC_CO2C: - EFSS2X - HT2ZC - CO2C - + AHU_SFSS_SFVSC_CHWRC_OAFC_SSPC_RAVOCC_RACO2C_ESFM_SAIDC: id: "6697703255582965760" description: "AHU with CO2, VOC based outside air control, static pressure based VFD speed control,return air temperature based Chilled water valve modulation." diff --git a/ontology/yaml/resources/HVAC/entity_types/CDWS.yaml b/ontology/yaml/resources/HVAC/entity_types/CDWS.yaml index e2a64191e..0a9a2e95b 100644 --- a/ontology/yaml/resources/HVAC/entity_types/CDWS.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/CDWS.yaml @@ -112,7 +112,7 @@ CDWS_CLPM_SWTC_WDPM_WFRC: - SWTC - WDPM - WFRC - + CDWS_CLPM_WDT_WFRM: id: "11680091818338287616" description: "Condensing water system with delta-T, flowrate, and thermal power monitoring." diff --git a/ontology/yaml/resources/HVAC/entity_types/CH.yaml b/ontology/yaml/resources/HVAC/entity_types/CH.yaml index 635ad2240..e6197c5ee 100644 --- a/ontology/yaml/resources/HVAC/entity_types/CH.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/CH.yaml @@ -522,7 +522,7 @@ CH_SS_RMM_SCHWTC_CHDXSC_CCM_CHWSWISOVPM_CWSWISOVPM_IGM_REFPM_REFSM_MIPVCM_MIPWM_ - CWDT - INVOPWM - INVIPCM - + CH_SS_CHDXVSC_CHWFRSM_CHDXSC_CHWISOVM: id: "6335726435533062144" description: "Water cooled chiller with VFD, supply ,return water temperature,flow and isolation valve monitoring." diff --git a/ontology/yaml/resources/HVAC/entity_types/CMP.yaml b/ontology/yaml/resources/HVAC/entity_types/CMP.yaml index 0cca2f5ee..ca669b1b8 100644 --- a/ontology/yaml/resources/HVAC/entity_types/CMP.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/CMP.yaml @@ -23,6 +23,8 @@ CMP_SS: implements: - CMP - SS + opt_uses: + - zone_control_cooling_command CMP_SS_WDPM: id: "4395946031578087424" diff --git a/ontology/yaml/resources/HVAC/entity_types/CT.yaml b/ontology/yaml/resources/HVAC/entity_types/CT.yaml index 984c4a614..98fbb2b27 100644 --- a/ontology/yaml/resources/HVAC/entity_types/CT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/CT.yaml @@ -142,7 +142,7 @@ CT_SS_VSC_RWISOVM_SWISOVM_SWTM: - RWISOVM - SWISOVM - SWTM - + CT_SS_RWISOVM_SWISOVM_SWTM: id: "9420973655258562560" description: "Cooling tower with supply and return isolation valves and supply & return temp monitoring." diff --git a/ontology/yaml/resources/HVAC/entity_types/FAN.yaml b/ontology/yaml/resources/HVAC/entity_types/FAN.yaml index b348327f8..9dff81ab4 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FAN.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FAN.yaml @@ -61,8 +61,6 @@ FAN_SS_ZTM: - FAN - SS - ZTM - - FAN_SS_CSP: id: "17863112993764540416" diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index de7d585c6..5f6382e85 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -29,7 +29,6 @@ FCU_DFSS_CSP_CHWDC: - CSP - CHWDC - FCU_DFSS_CSP_CHWZC: id: "7358088630922903552" description: "Typical chilled water FCU with cooling-only (zone control)." @@ -1605,4 +1604,20 @@ FCU_DFSS_DFVSC_FDPM_CHWDC_SRC_DFRMM: - FDPM - CHWDC - SRC - - DFRMM \ No newline at end of file + - DFRMM + +FCU_RHDHS_DTM_DFSS_STM_DTC_SHM_SFVSC_ALM_SS_SRC: + description: "FCU with temperature control, humidity monitor with electrical parameter monitoring." + is_canonical: true + implements: + - FCU + - RHDHS + - DTM + - DFSS + - STM + - DTC + - SHM + - SFVSC + - ALM + - SS + - SRC \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/HWS.yaml b/ontology/yaml/resources/HVAC/entity_types/HWS.yaml index 865591a39..48fbd0237 100644 --- a/ontology/yaml/resources/HVAC/entity_types/HWS.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/HWS.yaml @@ -344,4 +344,12 @@ HWS_SS: description: "Simple hot water system with status only" implements: - HWS - - SS \ No newline at end of file + - SS + +HWS_TH: + description: "Simple trace heater water system with status and trip alarm" + implements: + - HWS + - SS + uses: + - lost_power_alarm diff --git a/ontology/yaml/resources/HVAC/entity_types/MAU.yaml b/ontology/yaml/resources/HVAC/entity_types/MAU.yaml index f3310dd5d..63908d90b 100644 --- a/ontology/yaml/resources/HVAC/entity_types/MAU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/MAU.yaml @@ -632,7 +632,7 @@ MAU_SFSS2X_SFVSC2X_CHWSC_HWSC_FDPM_SSPC_STC_VOADM2X: - SSPC - STC - VOADM2X - + MAU_SFSS_SFVSC_SPSS_STM_SHM_SFC_FDPSM: id: "10515066889732882432" description: "MAU with VFD, spray pump, filter, supply air temperature and humidity monitoring." @@ -780,8 +780,6 @@ MAU_US_SBO_1000_1: - DEPRECATED uses: - humidification_run_command - - #New canonical# MAU_FDPM_SSPC_STC_SHM_SFVSC3X_SFSS3X: @@ -819,8 +817,3 @@ MAU_DFMSC_DFVSC_FDPM_DTM: - DFVSC - FDPM - DTM - - - - - diff --git a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml index 48ec18b14..5981949ad 100644 --- a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml @@ -234,4 +234,11 @@ SENSOR_ZA_CO2M_PMM_HCHO: - PMM uses: - zone_air_formaldehyde_concentration_sensor + +SENSOR_WDPM: + description: "Sensor with differential pressure monitor" + is_canonical: true + implements: + - /SENSOR + - WDPM \ No newline at end of file diff --git a/ontology/yaml/resources/METERS/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/METERS/entity_types/ABSTRACT.yaml index 3af2ad3b6..ffea8e72c 100644 --- a/ontology/yaml/resources/METERS/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/METERS/entity_types/ABSTRACT.yaml @@ -22,6 +22,8 @@ PWM: opt_uses: - apparent_power_sensor - reactive_power_sensor + - apparentpower_sensor + - reactivepower_sensor - powerfactor_sensor - line_frequency_sensor - apparent_energy_accumulator diff --git a/ontology/yaml/resources/METERS/entity_types/EM.yaml b/ontology/yaml/resources/METERS/entity_types/EM.yaml index 01607ec4b..d65bcf05f 100644 --- a/ontology/yaml/resources/METERS/entity_types/EM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/EM.yaml @@ -87,7 +87,7 @@ EM_PWM_AVCM_PLPM_PVCM: - AVCM - PLPM - PVCM - + EM_PWM_PWMRDM: id: "8930081295875178496" description: "Energy metering from Grid Electricity and Diesel Generator with power monitoring." diff --git a/ontology/yaml/resources/METERS/entity_types/HM.yaml b/ontology/yaml/resources/METERS/entity_types/HM.yaml index 7c031a988..c6bff2334 100644 --- a/ontology/yaml/resources/METERS/entity_types/HM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/HM.yaml @@ -51,7 +51,7 @@ HM_CHW_WAC: is_canonical: true uses: - water_volume_accumulator - + #New type for CH ZRH EURD HM_HW: id: "3199325536836911104" diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index 7f12cd975..8788a2367 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -79,6 +79,9 @@ FA2X: uses: - fire_alarm_1 - fire_alarm_2 + opt_uses: + - primary_fire_alarm + - secondary_fire_alarm WLS: id: "944988050314756096" @@ -86,10 +89,28 @@ WLS: is_abstract: true uses: - water_leak_cable_distance_sensor - + LM: id: "15773300929664647168" description: "Tank level monitoring." is_abstract: true uses: - - level_status \ No newline at end of file + - level_status + +HDS: + description: "Standard Hydrogen sensor." + is_abstract: true + implements: + - EQUIPMENT + +WCR: + description: "Water conditioner" + is_abstract: true + uses: + - run_status + +WSR: + description: "Water softener" + is_abstract: true + uses: + - run_status \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index ab4c3e264..2c2174e03 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -44,4 +44,23 @@ FACP_PAS: - fire_alarm - supervisor_alarm - water_flowrate_status - - air_pressure_status \ No newline at end of file + - air_pressure_status + +FACP_LOC: + description: "Fire alarm panel with location alarm." + is_canonical: true + implements: + - FACP + uses: + - fire_alarm + - supervisor_alarm + +FACP_FA2X_GS: + description: "Fire alarm panel with 2-level alarm and gas suppression." + is_canonical: true + implements: + - FACP + - FA2X + uses: + - supervisor_alarm + - gas_release_status \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/FD.yaml b/ontology/yaml/resources/SAFETY/entity_types/FD.yaml index 94f3f12aa..232eb4be5 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FD.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FD.yaml @@ -31,4 +31,7 @@ FD_SD: uses: - damper_percentage_sensor - damper_percentage_command + opt_uses: + - run_command + - run_status \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index 910e26f71..221d3d9e7 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -22,4 +22,17 @@ FSS_STD: implements: - FSS uses: - - fire_alarm \ No newline at end of file + - fire_alarm + +FSS_ASD: + description: "Basic aspirating type, fire suppression." + is_canonical: true + implements: + - FSS + - ASD + uses: + - primary_smoke_alarm + - secondary_smoke_alarm + - fire_alarm + opt_uses: + - supervisor_alarm \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml index 1b0c0a37f..83294cdf9 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml @@ -96,4 +96,9 @@ SSS: is_abstract: true implements: - /SENSOR - \ No newline at end of file + +ASD: + description: "Aspirating type, smoke detector" + is_abstract: true + implements: + - EQUIPMENT diff --git a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml new file mode 100644 index 000000000..5dce667e5 --- /dev/null +++ b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml @@ -0,0 +1,24 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +### CANONICAL TYPES + +HDS_STD: + description: "Hydrogen sensor." + implements: + - HDS + is_canonical: true + uses: + - particle_concentration_sensor + - particle_concentration_alarm \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/WTR.yaml b/ontology/yaml/resources/SAFETY/entity_types/WTR.yaml new file mode 100644 index 000000000..d92f81946 --- /dev/null +++ b/ontology/yaml/resources/SAFETY/entity_types/WTR.yaml @@ -0,0 +1,27 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +### CANONICAL TYPES + +WSR_STD: + description: "Standard water softener." + is_canonical: true + implements: + - WSR + uses: + - run_status + opt_uses: + - lost_power_alarm + - water_flowrate_status + - run_mode \ No newline at end of file diff --git a/ontology/yaml/resources/entity_types/global.yaml b/ontology/yaml/resources/entity_types/global.yaml index 6612bf112..162694c49 100644 --- a/ontology/yaml/resources/entity_types/global.yaml +++ b/ontology/yaml/resources/entity_types/global.yaml @@ -53,7 +53,7 @@ INCOMPLETE: id: "4665780478685478912" description: "A known incomplete type." is_abstract: true - + ##Global namespace for tanks## TK: id: "3656366132224327680" diff --git a/ontology/yaml/resources/fields/telemetry_fields.yaml b/ontology/yaml/resources/fields/telemetry_fields.yaml index a162d6e48..be7976310 100644 --- a/ontology/yaml/resources/fields/telemetry_fields.yaml +++ b/ontology/yaml/resources/fields/telemetry_fields.yaml @@ -778,7 +778,7 @@ literals: - power_status: - PRESENT - ABSENT - + # New alarms using alarm as a point type, and existing alarms moved here # TODO (tsodorff): change these to ALARM/NORMAL after determining how this can be done safely to existing translations. - fabric_protection_alarm: @@ -838,7 +838,7 @@ literals: - compressor_failed_alarm: - ACTIVE - INACTIVE - + # New fields for lighting and fire systems. - motion_status: - PRESENT @@ -876,6 +876,21 @@ literals: - fire_alarm: - ACTIVE - INACTIVE +- primary_fire_alarm: # better than using fire_alarm_1 (which will lead to fire_alarm_1_23) + - ACTIVE + - INACTIVE +- secondary_fire_alarm: + - ACTIVE + - INACTIVE +- primary_smoke_alarm: # for aspirating type smoke detectors + - ACTIVE + - INACTIVE +- secondary_smoke_alarm: # for aspirating type smoke detectors + - ACTIVE + - INACTIVE +- particle_concentration_alarm: + - ACTIVE + - INACTIVE - supply_water_volume_accumulator - valve_command: @@ -884,6 +899,23 @@ literals: - valve_status: - OPEN - CLOSED +- zone_control_cooling_command: + - COOLING + - OFF +- low_battery_alarm: + - ACTIVE + - INACTIVE +- load_bypass_mode: + - OFF + - BYPASS +- gas_release_status: + - OPEN + - CLOSED +# apparent_power_sensor (and reactive_power_sensor) has error on units and can't be resolved +# but using these has no errors +- apparentpower_sensor +- reactivepower_sensor + - emergency_release_status: - ACTIVE - INACTIVE @@ -1575,8 +1607,6 @@ literals: - ON - OFF - - # telemetry fields for exhaust fan# - speed_mode: @@ -1589,7 +1619,6 @@ literals: - ON - OFF - ##Fields for generator## - oil_temperature_sensor - oil_pressure_sensor @@ -1600,7 +1629,7 @@ literals: #Telemetry addition for MAU# - + #Telemetry fields for APU(MAU)# - dc_voltage_sensor - ac_voltage_sensor @@ -1638,6 +1667,7 @@ literals: - supply_fan_speed_mode: - BYPASS - VFD + - supply_fan_voltage_sensor - humidifier_run_time_accumulator - heater_run_time_accumulator From e7586b758bd21964ccd9d44c1fce6c49f41c67a7 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Thu, 6 Oct 2022 08:55:59 +0800 Subject: [PATCH 02/45] additional items --- .../resources/SAFETY/entity_types/ABSTRACT.yaml | 17 ++++++++++++++++- .../resources/SAFETY/entity_types/FACP.yaml | 12 +++++------- .../yaml/resources/SAFETY/entity_types/FSS.yaml | 11 +++-------- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index 8788a2367..40bca36de 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -108,9 +108,24 @@ WCR: is_abstract: true uses: - run_status + implements: + - EQUIPMENT WSR: description: "Water softener" is_abstract: true uses: - - run_status \ No newline at end of file + - run_status + implements: + - EQUIPMENT + +ALM: + description: "Tag for basic alarms" + is_abstract: true + opt_uses: + - fire_alarm + - supervisor_alarm + - primary_smoke_alarm + - secondary_smoke_alarm + implements: + - EQUIPMENT \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index 2c2174e03..864b28530 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -46,21 +46,19 @@ FACP_PAS: - water_flowrate_status - air_pressure_status -FACP_LOC: - description: "Fire alarm panel with location alarm." +FACP_ALM: + description: "Fire alarm panel with alarm." is_canonical: true implements: - FACP - uses: - - fire_alarm - - supervisor_alarm + - ALM -FACP_FA2X_GS: +FACP_FA2X_ALM_GS: description: "Fire alarm panel with 2-level alarm and gas suppression." is_canonical: true implements: - FACP - FA2X + - ALM uses: - - supervisor_alarm - gas_release_status \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index 221d3d9e7..05e370e36 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -24,15 +24,10 @@ FSS_STD: uses: - fire_alarm -FSS_ASD: - description: "Basic aspirating type, fire suppression." +FSS_ASD_ALM: + description: "Basic aspirating type, fire suppression with alarms." is_canonical: true implements: - FSS - ASD - uses: - - primary_smoke_alarm - - secondary_smoke_alarm - - fire_alarm - opt_uses: - - supervisor_alarm \ No newline at end of file + - ALM \ No newline at end of file From 9d98f73bcfd2f296faf5e10c46abae0b1b793cfc Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Thu, 6 Oct 2022 09:34:54 +0800 Subject: [PATCH 03/45] additional items --- .../yaml/resources/SAFETY/entity_types/ABSTRACT.yaml | 2 ++ .../yaml/resources/SAFETY/entity_types/FACP.yaml | 5 ++--- ontology/yaml/resources/SAFETY/entity_types/HS.yaml | 5 ++--- ontology/yaml/resources/SAFETY/entity_types/WTR.yaml | 12 ++++++++++++ 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index 40bca36de..0d1337838 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -127,5 +127,7 @@ ALM: - supervisor_alarm - primary_smoke_alarm - secondary_smoke_alarm + - emergency_alarm + - lost_power_alarm implements: - EQUIPMENT \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index 864b28530..cbf0e4941 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -34,15 +34,14 @@ FACP_FA2X: opt_uses: - panel_alarm -FACP_PAS: +FACP_ALM_PAS: id: "10168360087169531904" description: "Fire alarm panel with Pre-action suppression." is_canonical: true implements: - FACP + - ALM uses: - - fire_alarm - - supervisor_alarm - water_flowrate_status - air_pressure_status diff --git a/ontology/yaml/resources/SAFETY/entity_types/HS.yaml b/ontology/yaml/resources/SAFETY/entity_types/HS.yaml index 03f4e5f75..89296d90b 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/HS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/HS.yaml @@ -23,11 +23,10 @@ HS_STD: uses: - run_status -HS_AL: +HS_ALM: id: "6601509182292099072" description: "Horn strobe with alarm." is_canonical: true implements: - HS - uses: - - emergency_alarm \ No newline at end of file + - ALM \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/WTR.yaml b/ontology/yaml/resources/SAFETY/entity_types/WTR.yaml index d92f81946..7519afce2 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/WTR.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/WTR.yaml @@ -24,4 +24,16 @@ WSR_STD: opt_uses: - lost_power_alarm - water_flowrate_status + - run_mode + +WSR_ALM: + description: "Standard water softener with alarms." + is_canonical: true + implements: + - WSR + - ALM + uses: + - run_status + opt_uses: + - water_flowrate_status - run_mode \ No newline at end of file From f533bbe4de48d4b0ad6b674657c62a0a4e6c0ac6 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Thu, 6 Oct 2022 11:15:56 +0800 Subject: [PATCH 04/45] additional items --- .../ELECTRICAL/entity_types/UPS.yaml | 2 +- .../resources/HVAC/entity_types/ABSTRACT.yaml | 1 - .../yaml/resources/HVAC/entity_types/EHT.yaml | 33 +++++++++++++++++++ .../HVAC/entity_types/GENERALTYPES.yaml | 6 ++++ .../yaml/resources/HVAC/entity_types/HWS.yaml | 8 ----- 5 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 ontology/yaml/resources/HVAC/entity_types/EHT.yaml diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml index fda53dc9d..63401ab30 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml @@ -68,7 +68,7 @@ UPS_IOBM_PPWM_UPSBM: - UPSBM UPS_SS_ALM: - description: "UPS unit with alarm." + description: "UPS unit with load bypass mode and alarms." is_canonical: true implements: - UPS diff --git a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml index 94e2f79f3..46eec5be8 100644 --- a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml @@ -5626,7 +5626,6 @@ ALM: - lost_power_alarm - water_leak_detection_alarm - low_battery_alarm - uses: - failed_alarm implements: - MONITORING diff --git a/ontology/yaml/resources/HVAC/entity_types/EHT.yaml b/ontology/yaml/resources/HVAC/entity_types/EHT.yaml new file mode 100644 index 000000000..ec9883c6c --- /dev/null +++ b/ontology/yaml/resources/HVAC/entity_types/EHT.yaml @@ -0,0 +1,33 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +######################## +### Canonical Types ### +######################## + + +EHT_SS: + description: "Basic heat tracer with start/stop" + is_canonical: true + implements: + - EHT + - SS + +EHT_SS_ALM: + description: "Basic Heat tracer with start/stop, control/status and trip alarm" + is_canonical: true + implements: + - EHT + - SS + - ALM \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml index b029b62e8..bdd3608ad 100644 --- a/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml @@ -378,4 +378,10 @@ CRREF: description: "Tag for coldroom refigeration." is_abstract: true implements: + - EQUIPMENT + +EHT: + description: "Tag for heat tracer." + is_abstract: true + implements: - EQUIPMENT \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/HWS.yaml b/ontology/yaml/resources/HVAC/entity_types/HWS.yaml index 48fbd0237..be596df25 100644 --- a/ontology/yaml/resources/HVAC/entity_types/HWS.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/HWS.yaml @@ -345,11 +345,3 @@ HWS_SS: implements: - HWS - SS - -HWS_TH: - description: "Simple trace heater water system with status and trip alarm" - implements: - - HWS - - SS - uses: - - lost_power_alarm From 63beea36c81b0440fdd6a0b611616bae375a97bd Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Wed, 18 Jan 2023 15:49:22 +0800 Subject: [PATCH 05/45] updated fixes --- README.md | 2 +- ontology/docs/learning/practice/demo.yaml | 22 + .../practice/demo_bad_connection.yaml | 22 + .../learning/practice/demo_bad_field.yaml | 21 + .../learning/practice/demo_bad_indent.yaml | 21 + .../learning/practice/demo_bad_state.yaml | 21 + .../practice/demo_missing_building.yaml | 17 + .../learning/practice/demo_missing_keys.yaml | 21 + .../learning/practice/demo_missing_type.yaml | 22 + .../learning/practice/demo_missing_value.yaml | 21 + .../docs/learning/practice/demo_test.yaml | 27 + .../ELECTRICAL/entity_types/ABSTRACT.yaml | 14 +- .../ELECTRICAL/entity_types/BATT.yaml | 2 +- .../ELECTRICAL/entity_types/GENERALTYPES.yaml | 5 - .../ELECTRICAL/entity_types/PANEL.yaml | 2 +- .../ELECTRICAL/entity_types/UPS.yaml | 12 +- .../resources/HVAC/entity_types/ABSTRACT.yaml | 92 +- .../yaml/resources/HVAC/entity_types/AHU.yaml | 1018 ++++++++--------- .../yaml/resources/HVAC/entity_types/BLR.yaml | 72 +- .../resources/HVAC/entity_types/CDWS.yaml | 4 +- .../yaml/resources/HVAC/entity_types/CH.yaml | 16 +- .../resources/HVAC/entity_types/CHWS.yaml | 20 +- .../yaml/resources/HVAC/entity_types/CMP.yaml | 2 - .../yaml/resources/HVAC/entity_types/CT.yaml | 26 +- .../yaml/resources/HVAC/entity_types/CU.yaml | 11 +- .../yaml/resources/HVAC/entity_types/DFR.yaml | 12 +- .../yaml/resources/HVAC/entity_types/DH.yaml | 4 +- .../yaml/resources/HVAC/entity_types/DMP.yaml | 17 +- .../yaml/resources/HVAC/entity_types/EHT.yaml | 8 - .../yaml/resources/HVAC/entity_types/FAN.yaml | 113 +- .../yaml/resources/HVAC/entity_types/FCU.yaml | 286 +++-- .../yaml/resources/HVAC/entity_types/FRZ.yaml | 4 - .../HVAC/entity_types/GENERALTYPES.yaml | 2 +- .../yaml/resources/HVAC/entity_types/HUM.yaml | 18 +- .../yaml/resources/HVAC/entity_types/HWS.yaml | 26 +- .../yaml/resources/HVAC/entity_types/HX.yaml | 2 +- .../yaml/resources/HVAC/entity_types/MAU.yaml | 263 +++-- .../yaml/resources/HVAC/entity_types/PMP.yaml | 12 +- .../yaml/resources/HVAC/entity_types/SDC.yaml | 2 + .../resources/HVAC/entity_types/SENSOR.yaml | 18 +- .../resources/HVAC/entity_types/TANK.yaml | 12 +- .../yaml/resources/HVAC/entity_types/VAV.yaml | 102 +- .../yaml/resources/HVAC/entity_types/VLV.yaml | 13 +- .../resources/LIGHTING/entity_types/LGRP.yaml | 8 +- .../METERS/entity_types/ABSTRACT.yaml | 2 - .../resources/METERS/entity_types/EM.yaml | 20 +- .../resources/METERS/entity_types/HM.yaml | 1 - .../resources/METERS/entity_types/WM.yaml | 6 +- .../PLUMBING/entity_types/ABSTRACT.yaml | 23 +- .../PLUMBING/entity_types/GENERALTYPES.yaml | 1 + .../resources/PLUMBING/entity_types/RO.yaml | 1 + .../entity_types/WSR.yaml} | 4 +- .../SAFETY/entity_types/ABSTRACT.yaml | 38 +- .../resources/SAFETY/entity_types/FACP.yaml | 20 +- .../resources/SAFETY/entity_types/FD.yaml | 4 - .../resources/SAFETY/entity_types/FSS.yaml | 8 +- .../SAFETY/entity_types/GENERALTYPES.yaml | 7 + .../resources/SAFETY/entity_types/HDS.yaml | 44 +- .../resources/SAFETY/entity_types/HS.yaml | 5 +- .../resources/SAFETY/entity_types/RDT.yaml | 2 +- .../resources/fields/telemetry_fields.yaml | 104 +- ontology/yaml/resources/states/states.yaml | 2 +- .../yaml/resources/subfields/subfields.yaml | 6 +- ontology/yaml/resources/units/units.yaml | 6 + tools/abel/README.md | 4 +- tools/abel/model/arg_parser.py | 2 + tools/abel/model/model_builder.py | 2 +- tools/scoring/score/dimensions/dimension.py | 2 +- tools/scoring/tests/complete_output_test.py | 8 +- tools/scoring/tests/parse_config_test.py | 18 +- .../tests/entity_instance_test.py | 318 +++-- ...anslation_invalid_value_range_format.yaml} | 21 +- ...translation_invalid_value_range_order.yaml | 26 + .../fake_instances/BAD/translation_keys.yaml | 1 - ...g.yaml => translation_multiple_units.yaml} | 19 +- .../BAD/translation_no_cloud_device_id.yaml | 1 - .../translation_opt_field_marked_missing.yaml | 34 + .../BAD/translation_units_format.yaml | 1 - ...translation_value_range_with_no_units.yaml | 22 + .../fake_instances/GOOD/links_increment.yaml | 95 +- ...translation_missing_fields_on_gateway.yaml | 18 + .../GOOD/translation_multi_states.yaml | 2 +- ...translation_req_field_marked_missing.yaml} | 15 +- .../GOOD/translation_units_and_states.yaml | 41 +- .../GOOD/translation_value_range.yaml | 38 + .../instance_validator/tests/handler_test.py | 21 +- .../tests/instance_parser_test.py | 8 +- .../validate/entity_instance.py | 377 ++++-- .../validate/field_translation.py | 16 +- .../validate/generate_universe.py | 14 +- .../instance_validator/validate/handler.py | 71 +- .../validate/instance_parser.py | 9 +- .../instance_validator/validate/subscriber.py | 10 +- .../instance_validator/validate/telemetry.py | 22 +- .../validate/telemetry_validator.py | 2 +- .../universe_helper/config_universe.py | 3 + .../validate/universe_helper/types.py | 23 + 97 files changed, 2345 insertions(+), 1658 deletions(-) rename ontology/yaml/resources/{SAFETY/entity_types/WTR.yaml => PLUMBING/entity_types/WSR.yaml} (94%) rename tools/validators/instance_validator/tests/fake_instances/BAD/{translation_udmi_present_value.yaml => translation_invalid_value_range_format.yaml} (65%) create mode 100644 tools/validators/instance_validator/tests/fake_instances/BAD/translation_invalid_value_range_order.yaml rename tools/validators/instance_validator/tests/fake_instances/BAD/{passthrough_translation_with_required_field_missing.yaml => translation_multiple_units.yaml} (71%) create mode 100644 tools/validators/instance_validator/tests/fake_instances/BAD/translation_opt_field_marked_missing.yaml create mode 100644 tools/validators/instance_validator/tests/fake_instances/BAD/translation_value_range_with_no_units.yaml create mode 100644 tools/validators/instance_validator/tests/fake_instances/GOOD/translation_missing_fields_on_gateway.yaml rename tools/validators/instance_validator/tests/fake_instances/GOOD/{translation_udmi_present_value.yaml => translation_req_field_marked_missing.yaml} (65%) create mode 100644 tools/validators/instance_validator/tests/fake_instances/GOOD/translation_value_range.yaml diff --git a/README.md b/README.md index 190db35d9..3be98ea65 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ Please see the [contribution section](CONTRIBUTING.md) ## License ``` -Copyright 2022 Google LLC +Copyright 2023 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/ontology/docs/learning/practice/demo.yaml b/ontology/docs/learning/practice/demo.yaml index e69de29bb..9cea4d966 100644 --- a/ontology/docs/learning/practice/demo.yaml +++ b/ontology/docs/learning/practice/demo.yaml @@ -0,0 +1,22 @@ +# Good file! +abc-123-ff6: + type: FACILITIES/BUILDING + code: US-SVL-MP2 + +def-234-fss: + type: HVAC/FAN_SS + code: EF-1 + cloud_device_id: 1234567 + connections: + abc-123-ff6: CONTAINS + translation: + run_command: + present_value: "points.fan_ss.present_value" + states: + ON: "true" + OFF: "false" + run_status: + present_value: "points.fan_sts.present_value" + states: + OFF: "false" + ON: "true" diff --git a/ontology/docs/learning/practice/demo_bad_connection.yaml b/ontology/docs/learning/practice/demo_bad_connection.yaml index e69de29bb..32d93f24b 100644 --- a/ontology/docs/learning/practice/demo_bad_connection.yaml +++ b/ontology/docs/learning/practice/demo_bad_connection.yaml @@ -0,0 +1,22 @@ +abc-123-ff6: + code: US-SVL-MP2 + type: FACILITIES/BUILDING + id: CDM/123 + +def-234-ffs: + type: HVAC/FAN_SS + code: EF-1 + cloud_device_id: 1234567 + connections: + efg-hij-klm: FEEDS # Guid to a device not defined yet + translation: + run_command: + present_value: "points.fan_ss.present_value" + states: + ON: "true" + OFF: "false" + run_status: + present_value: "points.fan_sts.present_value" + states: + OFF: "false" + ON: "true" diff --git a/ontology/docs/learning/practice/demo_bad_field.yaml b/ontology/docs/learning/practice/demo_bad_field.yaml index e69de29bb..277371ea1 100644 --- a/ontology/docs/learning/practice/demo_bad_field.yaml +++ b/ontology/docs/learning/practice/demo_bad_field.yaml @@ -0,0 +1,21 @@ +abc-123-ff6: + type: FACILITIES/BUILDING + code: US-SVL-MP2 + +def-234-fss: + type: HVAC/FAN_SS + code: EF-1 + cloud_device_id: 1234567 + connections: + abc-123-ff6: CONTAINS + translation: + banana_sensor: # Not a valid field name. + present_value: "points.fan_ss.present_value" + states: + ON: "true" + OFF: "false" + run_status: + present_value: "points.fan_sts.present_value" + states: + OFF: "false" + ON: "true" diff --git a/ontology/docs/learning/practice/demo_bad_indent.yaml b/ontology/docs/learning/practice/demo_bad_indent.yaml index e69de29bb..5c134f853 100644 --- a/ontology/docs/learning/practice/demo_bad_indent.yaml +++ b/ontology/docs/learning/practice/demo_bad_indent.yaml @@ -0,0 +1,21 @@ +abc-123-ff6: + type: FACILITIES/BUILDING + code: US-SVL-MP2 + +def-234-fss: + type: HVAC/FAN_SS + code: EF-1 + cloud_device_id: 1234567 # Bad indent. + connections: + abc-123-ff6: CONTAINS + translation: + run_command: + present_value: "points.fan_ss.present_value" + states: + ON: "true" + OFF: "false" + run_status: + present_value: "points.fan_sts.present_value" + states: + OFF: "false" + ON: "true" diff --git a/ontology/docs/learning/practice/demo_bad_state.yaml b/ontology/docs/learning/practice/demo_bad_state.yaml index e69de29bb..6ed9dc358 100644 --- a/ontology/docs/learning/practice/demo_bad_state.yaml +++ b/ontology/docs/learning/practice/demo_bad_state.yaml @@ -0,0 +1,21 @@ +abc-123-ff6: + type: FACILITIES/BUILDING + code: US-SVL-MP2 + +def-234-fss: + type: HVAC/FAN_SS + code: EF-1 + cloud_device_id: 1234567 + connections: + abc-123-ff6: CONTAINS + translation: + run_command: + present_value: "points.fan_ss.present_value" + states: + BANANA: "true" # An invalid state. + OFF: "false" + run_status: + present_value: "points.fan_sts.present_value" + states: + OFF: "false" + ON: "true" diff --git a/ontology/docs/learning/practice/demo_missing_building.yaml b/ontology/docs/learning/practice/demo_missing_building.yaml index e69de29bb..7ff316fc8 100644 --- a/ontology/docs/learning/practice/demo_missing_building.yaml +++ b/ontology/docs/learning/practice/demo_missing_building.yaml @@ -0,0 +1,17 @@ +# Building not defined in this file. + +def-234-fss: + type: HVAC/FAN_SS + code: EF-1 + cloud_device_id: 1234567 + translation: + run_command: + present_value: "points.fan_ss.present_value" + states: + ON: "true" + OFF: "false" + run_status: + present_value: "points.fan_sts.present_value" + states: + OFF: "false" + ON: "true" diff --git a/ontology/docs/learning/practice/demo_missing_keys.yaml b/ontology/docs/learning/practice/demo_missing_keys.yaml index e69de29bb..1a16b9e0c 100644 --- a/ontology/docs/learning/practice/demo_missing_keys.yaml +++ b/ontology/docs/learning/practice/demo_missing_keys.yaml @@ -0,0 +1,21 @@ +abc-123-ff6: + type: FACILITIES/BUILDING + code: US-SVL-MP2 + +# Missing cloud_device_id and type keys (commented out below) +def-234-fss: + # type: HVAC/FAN_SS + code: EF-1 + # cloud_device_id: 1234567 + translation: + run_command: + present_value: "points.fan_ss.present_value" + states: + ON: "true" + OFF: "false" + run_status: + present_value: "points.fan_sts.present_value" + states: + OFF: "false" + ON: "true" + diff --git a/ontology/docs/learning/practice/demo_missing_type.yaml b/ontology/docs/learning/practice/demo_missing_type.yaml index e69de29bb..2569f477a 100644 --- a/ontology/docs/learning/practice/demo_missing_type.yaml +++ b/ontology/docs/learning/practice/demo_missing_type.yaml @@ -0,0 +1,22 @@ +abc-123-ff6: + type: FACILITIES/BUILDING + code: US-SVL-MP2 + +# Missing type definition. +def-234-fss: + # type: HVAC/FAN_SS + code: EF-1 + cloud_device_id: 1234567 + connections: + abc-123-ff6: CONTAINS + translation: + run_command: + present_value: "points.fan_ss.present_value" + states: + ON: "true" + OFF: "false" + run_status: + present_value: "points.fan_sts.present_value" + states: + OFF: "false" + ON: "true" diff --git a/ontology/docs/learning/practice/demo_missing_value.yaml b/ontology/docs/learning/practice/demo_missing_value.yaml index e69de29bb..fd9b4a5d7 100644 --- a/ontology/docs/learning/practice/demo_missing_value.yaml +++ b/ontology/docs/learning/practice/demo_missing_value.yaml @@ -0,0 +1,21 @@ +abc-123-ff6: + type: FACILITIES/BUILDING + code: US-SVL-MP2 + +def-234-fss: + type: HVAC/FAN_SS + code: EF-1 + cloud_device_id: 1234567 + connections: + abc-123-ff6: CONTAINS + translation: + run_command: + present_value: # should have something here + states: + ON: "true" + OFF: "false" + run_status: + present_value: "points.fan_sts.present_value" + states: + OFF: "false" + ON: "true" diff --git a/ontology/docs/learning/practice/demo_test.yaml b/ontology/docs/learning/practice/demo_test.yaml index e69de29bb..250331542 100644 --- a/ontology/docs/learning/practice/demo_test.yaml +++ b/ontology/docs/learning/practice/demo_test.yaml @@ -0,0 +1,27 @@ +abc-123-ff6: + type: FACILITIES/BUILDING + code: US-SVL-MP2 + +def-234-fss: + type: HVAC/FAN_SS + code: EF-1 + cloud_device_id: 1234567 + connections: + abc-123-ff6: CONTAINS + translation: + run_command: + present_value: "points.fan_ss.present_value" + states: + ON: "true" + OFF: "false" + run_status: + present_value: "points.fan_sts.present_value" + states: + OFF: "false" + ON: "true" + supply_fan_speed_frequency_sensor: + present_value: "points.spd_freq.present-value" + units: + key: "points.spd_freq.units" + values: + hertz: "hertz" diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml index dbbfca09d..72ffa3a83 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml @@ -121,7 +121,7 @@ BATM: - battery_charge_percentage_sensor opt_uses: - low_battery_charge_alarm - - inverter_failed_alarm + - failed_inverter_alarm - line_frequency_sensor BTEPM: @@ -138,7 +138,7 @@ UPSBM: description: "UPS battery monitoring points" is_abstract: true opt_uses: - - exhaust_fan_failed_alarm + - failed_exhaust_fan_alarm - battery_percentage_sensor - rectifier_mode - inverter_status @@ -183,11 +183,9 @@ SRC2: - source2_over_voltage_status - source2_lost_power_alarm -ALM: - description: "Tag for basic alarms." +BBM: + description: "For UPS with Load Bypass and Battery mode." is_abstract: true - opt_uses: - - lost_power_alarm - - low_battery_alarm uses: - - failed_alarm \ No newline at end of file + - load_bypass_mode + - battery_mode \ No newline at end of file diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/BATT.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/BATT.yaml index 30f5f359d..1d205d0e8 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/BATT.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/BATT.yaml @@ -29,4 +29,4 @@ BATT_STD: - min_battery_voltage_sensor - battery_charge_status - battery_charge_percentage_sensor - - battery_failed_alarm \ No newline at end of file + - failed_battery_alarm diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/GENERALTYPES.yaml index d8c7cce8b..f3751af29 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/GENERALTYPES.yaml @@ -42,15 +42,10 @@ GEN: ATS: id: "17117625418434740224" description: "Tag for automatic transfer switch (ATS) units." - is_abstract: true implements: - EQUIPMENT - - - - CB: id: "10844111137507639296" description: "Tag for all circuit breakers." diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/PANEL.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/PANEL.yaml index 1e49e1b92..a52db608a 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/PANEL.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/PANEL.yaml @@ -20,4 +20,4 @@ SWITCHBOARD: - PANEL opt_uses: - circuitbreaker_status - - circuitbreaker_failed_alarm \ No newline at end of file + - failed_circuitbreaker_alarm diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml index 63401ab30..136683449 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml @@ -67,15 +67,13 @@ UPS_IOBM_PPWM_UPSBM: - PPWM - UPSBM -UPS_SS_ALM: - description: "UPS unit with load bypass mode and alarms." +UPS_SS_BBM: + description: "UPS unit with load bypass and battery mode and alarm." is_canonical: true implements: - UPS - - SS - - ALM + - SS + - BBM uses: - - run_mode - opt_uses: - - load_bypass_mode + - low_battery_alarm diff --git a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml index 46eec5be8..f0e372c97 100644 --- a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml @@ -37,6 +37,8 @@ SD: - supply_air_damper_percentage_command implements: - CONTROL + + RDM: id: "10008693406630412288" @@ -84,6 +86,7 @@ SRC: OADM: id: "13985513714598543360" description: "Outside air damper monitoring." + is_abstract: true uses: - outside_air_damper_command @@ -279,6 +282,17 @@ BPC: implements: - OPERATIONAL +BPC2X: + id: "4764990512371335168" + description: "Building pressure control for two pressure sensors (stand-alone fan)." + is_abstract: true + uses: + - building_air_static_pressure_sensor_1 + - building_air_static_pressure_sensor_2 + - building_air_static_pressure_setpoint + implements: + - OPERATIONAL + EDPM: id: "18075318737925308416" description: "Exhaust air damper percentage monitoring." @@ -416,7 +430,7 @@ SFVSC: - supply_fan_run_time_accumulator - supply_fan_energy_accumulator - supply_fan_lost_power_alarm - - supply_fan_failed_alarm + - failed_supply_fan_alarm - control_mode uses: - supply_fan_run_command @@ -435,7 +449,7 @@ DFVSC: - discharge_fan_speed_frequency_sensor - discharge_fan_speed_percentage_sensor - discharge_fan_lost_power_alarm - - discharge_fan_failed_alarm + - failed_discharge_fan_alarm - discharge_fan_voltage_sensor - discharge_fan_torque_sensor - discharge_fan_run_time_accumulator @@ -594,7 +608,7 @@ DFSS: - discharge_fan_power_sensor - discharge_air_static_pressure_sensor - discharge_fan_lost_power_alarm - - discharge_fan_failed_alarm + - failed_discharge_fan_alarm - schedule_run_command - discharge_fan_run_time_accumulator - overload_discharge_fan_alarm @@ -722,7 +736,7 @@ SFSS: - supply_fan_power_capacity - supply_fan_current_sensor - supply_fan_power_sensor - - supply_fan_failed_alarm + - failed_supply_fan_alarm - supply_fan_run_time_accumulator - supply_fan_run_mode uses: @@ -741,6 +755,7 @@ RHM: RTM: id: "2924673029776605184" description: "Return air temperature monitoring" + is_abstract: true implements: - MONITORING opt_uses: @@ -781,6 +796,7 @@ RTC: uses: - return_air_temperature_sensor - return_air_temperature_setpoint + # Rename to OTM OA: @@ -1095,7 +1111,7 @@ RHC: description: "Return air relative humidity control." is_abstract: true opt_uses: - - humidifier_failed_alarm + - failed_humidifier_alarm - high_return_air_relative_humidity_alarm - low_return_air_relative_humidity_alarm - humidifier_run_time_accumulator @@ -1735,6 +1751,7 @@ DX2ZC2X: DXSC: id: "2530229830381731840" description: "Compressor run control on supply air side (STC)." + is_abstract: true opt_uses: - leaving_cooling_coil_temperature_sensor - cooling_thermal_power_capacity @@ -1926,13 +1943,14 @@ DX5SC: DXRC: id: "5628706374012633088" description: "Compressor run control on return air side (RC)." + is_abstract: true opt_uses: - discharge_air_temperature_sensor - leaving_cooling_coil_temperature_sensor - cooling_thermal_power_capacity - cooling_percentage_command - compressor_speed_percentage_command - - compressor_failed_alarm + - failed_compressor_alarm - overload_compressor_alarm - compressor_run_time_accumulator - high_return_air_temperature_alarm @@ -1948,6 +1966,7 @@ DXRC: DXDC: id: "5988994344202272768" description: "Compressor run control on discharge air side (DTC)." + is_abstract: true opt_uses: - leaving_cooling_coil_temperature_sensor - cooling_thermal_power_capacity @@ -2237,6 +2256,7 @@ PHWSC: is_abstract: true opt_uses: - leaving_air_preheating_coil_temperature_sensor + - heating_request_count uses: - preheating_water_valve_percentage_command - supply_air_temperature_setpoint @@ -2552,6 +2572,8 @@ ECON: - supply_air_temperature_sensor - outside_air_flowrate_sensor - outside_air_flowrate_setpoint + - outside_air_relative_humidity_sensor + - outside_air_damper_percentage_sensor - return_air_damper_percentage_command uses: - outside_air_temperature_sensor @@ -2754,6 +2776,15 @@ SFM: implements: - MONITORING +DFM: + id: "15288213991675920384" + description: "Discharge air flow monitoring." + is_abstract: true + uses: + - discharge_air_flowrate_sensor + implements: + - MONITORING + SFC: id: "11177141114933084160" description: "Supply air flow control." @@ -3761,6 +3792,11 @@ WDPM: uses: - differential_pressure_sensor +SPM: + description: "Static pressure monitoring." + is_abstract: true + uses: + - static_pressure_sensor CHWDPM: id: "17350239197918658560" @@ -3841,7 +3877,7 @@ CHDXVSC: - compressor_voltage_sensor - compressor_lost_power_alarm - compressor_speed_frequency_sensor - - compressor_failed_alarm + - failed_compressor_alarm CDWFRM: id: "632877381119377408" @@ -3910,7 +3946,7 @@ CHWVM: opt_uses: - cooling_thermal_power_capacity - chilled_water_flowrate_sensor - - chilled_water_valve_failed_alarm + - failed_chilled_water_valve_alarm uses: - chilled_water_valve_percentage_sensor - chilled_water_valve_percentage_command @@ -4039,7 +4075,7 @@ DRPM: opt_uses: - water_low_level_status - water_high_level_status - - drain_pump_failed_alarm + - failed_drain_pump_alarm - input_motor_power_status uses: - drain_pump_run_status @@ -4640,6 +4676,7 @@ RHDHS: CO2DFVSC: id: "4574242837138243584" description: "Carbon dioxide levels controlled by a variable speed discharge fan." + is_abstract: true uses: - zone_air_co2_concentration_sensor - zone_air_co2_concentration_setpoint @@ -4650,6 +4687,7 @@ CO2DFVSC: CO2EFVSC: id: "8098956058392788992" description: "Carbon dioxide levels controlled by a variable speed exhaust fan." + is_abstract: true opt_uses: - exhaust_fan_speed_percentage_sensor uses: @@ -4662,6 +4700,7 @@ CO2EFVSC: RACO2C: id: "15503353232859594752" description: "Returned air carbon dioxide levels controls." + is_abstract: true uses: - return_air_co2_concentration_sensor - return_air_co2_concentration_setpoint @@ -5167,6 +5206,16 @@ DAIDC2X: implements: - MONITORING +DAIDC: + id: "16510378340553588736" + description: "Discharge air isolation damper control and monitoring." + is_abstract: true + uses: + - discharge_air_isolation_damper_status + - discharge_air_isolation_damper_command + implements: + - MONITORING + RAIDC4X: id: "3091164378989330432" description: "Return air isolation damper control and monitoring, where there are four separate, equal sets of dampers that operate in conjunction." @@ -5253,6 +5302,7 @@ SFMSC: opt_uses: - schedule_run_command + MIPVCM: id: "10283962739713900544" description: "Motor phase-level input current and voltage monitoring." @@ -5293,7 +5343,8 @@ MSM: - high_discharge_fan_speed_status - low_discharge_fan_speed_status opt_uses: - - discharge_fan_failed_alarm + - failed_discharge_fan_alarm + INVOPWM: id: "10056530958531690496" @@ -5414,6 +5465,13 @@ SWCM: - valve_command - valve_status +MWCM: + description: "Motorized water valve control and monitoring." + is_abstract: true + uses: + - motorized_valve_run_command + - motorized_valve_run_status + SCRSS: id: "3343154851889545216" description: "Scurbber start stop monitoring." @@ -5618,14 +5676,8 @@ RFVSC2X: implements: - OPERATIONAL -ALM: - description: "Tag for basic alarms." - is_abstract: true - opt_uses: - - low_discharge_air_flowrate_alarm - - lost_power_alarm - - water_leak_detection_alarm - - low_battery_alarm - - failed_alarm +MFSD: + description: "Motorized fire smoke damper" + is_canonical: true implements: - - MONITORING + - EQUIPMENT \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/AHU.yaml b/ontology/yaml/resources/HVAC/entity_types/AHU.yaml index c6d089bda..c9f8188e1 100644 --- a/ontology/yaml/resources/HVAC/entity_types/AHU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/AHU.yaml @@ -1294,6 +1294,41 @@ AHU_BSPC_DXSC_ECON_SFSS_SFVSC_SSPC: - SFVSC - SSPC +AHU_BPC_DXSC_ECON_PHWSC_RAIDC_RFSS_RFVSC_SAIDC_SFSS_SFVSC_SSPC: + id: "13988362549226110976" + description: "Multi-zone AHU with return fan VFD, RF and SF iso dampers, and PHW." + is_canonical: true + implements: + - AHU + - BPC + - DXSC + - ECON + - PHWSC + - RAIDC + - RFSS + - RFVSC + - SAIDC + - SFSS + - SFVSC + - SSPC + +AHU_BPC2X_DXSC_ECON_PHWSC_RFSS_RFVSC_SFSS_SFVSC_SSPC: + id: "3503982616707596288" + description: "Multi-zone AHU with return fan VFD and multiple pressure sensors" + is_canonical: true + implements: + - AHU + - BPC2X + - DXSC + - ECON + - PHWSC + - RFSS + - RFVSC + - SFSS + - SFVSC + - SSPC + + AHU_CHWSC_ECONM2X_MOAFC_SFSS_SFVSC_SSPC: id: "6323808828999598080" description: "Multi-zone AHU." @@ -1606,6 +1641,22 @@ AHU_BSPC_DX4SC_ECONM_EFSS_EFVSC_SFSS2X_SFVSC_SSPC: - SFVSC - SSPC +AHU_BSPC_DX2SC_ECONM_EFSS_EFVSC_SFSS_SFVSC_SSPC_SARC: + id: "14158373435159347200" + description: "Multi-zone AHU with supply air reset control." + is_canonical: true + implements: + - AHU + - BSPC + - DX2SC + - ECONM + - EFSS + - EFVSC + - SFSS + - SFVSC + - SSPC + - SARC + AHU_BSPC_DXSC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC: id: "18348419834078822400" description: "Multi-zone AHU." @@ -2262,12 +2313,6 @@ AHU_BSPC_CHWSC_ECON_EFSS_EFVSC_HWSC_PHWSC_SFSS_SFVSC_SSPC: - SFVSC - SSPC -AHU_UNDEFINED: - id: "8989855146007592960" - description: "An AHU with no telemetry data. Note this is non-canonical, as it is typically expected that telemetry will normally be available." - implements: - - AHU - AHU_BSPC_DX4SC_ECON_EFSS_EFVSC_MOAFC_SFSS_SFVSC_SSPC_STC: id: "16383179138871066624" description: "Multi-zone AHU with minimum ventilation control." @@ -2814,7 +2859,7 @@ AHU_DFVSC_ZTC_RTM_DTM_HPZTC_CWDT_CO2C_OAFC_AHAC: - CO2C - OAFC - AHAC - + AHU_SS_SSPC_CHWVM_HWVM_STM_FDPM_OA: id: "3524112475588919296" description: "AHU for preconditioning supply air" @@ -2841,7 +2886,7 @@ AHU_SS_SSPC_CHWVM_HWVM_STM_OA: - HWVM - STM - OA - + AHU_SFVSC_SSPC_STC_CHWSC_ECON_FDPM: id: "12760995311325806592" description: "AHU with supply fan speed control, supply temperature control and filter monitoring." @@ -2866,7 +2911,7 @@ AHU_SFVSC_SSPC_STC_CHWSC_ECON: - STC - CHWSC - ECON - + AHU_DFFC_ZTC_CHWZTC_HWZTC_ECONZ_DTM_RTM_CO2C_FDPM_AHAC: id: "3177335304281391104" description: "Single zone AHU with zone temperature and CO2 control, and filter monitoring." @@ -2883,7 +2928,7 @@ AHU_DFFC_ZTC_CHWZTC_HWZTC_ECONZ_DTM_RTM_CO2C_FDPM_AHAC: - FDPM - ECONZ - AHAC - + AHU_DFFC_ZTC_CHWZTC_HWZTC_ECONZ_DTM_RTM_CO2C_AHAC: id: "16758502930570543104" description: "Single zone AHU with zone temperature and CO2 control." @@ -2899,7 +2944,7 @@ AHU_DFFC_ZTC_CHWZTC_HWZTC_ECONZ_DTM_RTM_CO2C_AHAC: - CO2C - ECONZ - AHAC - + AHU_RTC_RHC_FDPM_REFM_WLDS: description: "AHU with return temperature and humidity control, filter monitoring, and refrigerant and water leak monitoring. " id: "3987983237208080384" @@ -3121,6 +3166,9 @@ AHU_BSPC_DX4SC_ECONM_EDPM_EFSS_EFVSC_SFSS_SFVSC_SSPC_STC_SSPCSCM_STCSCM: - AHU_BSPC_DX4SC_ECONM_EDPM_EFSS_EFVSC_SFSS_SFVSC_SSPC_STC - SSPCSCM - STCSCM + opt_uses: + - supervisor_run_command + - run_command AHU_BSPC_DX3SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC_STC_REFSM2X_REFPM2X: id: "2888577162548346880" @@ -3148,6 +3196,9 @@ AHU_BSPC_DX3SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC_STC_REFSM2X_REFPM2X_SSPCSCM_STCSC - AHU_BSPC_DX3SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC_STC_REFSM2X_REFPM2X - SSPCSCM - STCSCM + opt_uses: + - supervisor_run_command + - run_command AHU_BSPC_CHWSC_ECON_EFSS_EFVSC_HWSC_SFSS_SFVSC_SHC_SSPC: id: "7811011555264299008" @@ -3264,6 +3315,23 @@ AHU_BSPC_DXSC_ECON_EFSS_EFVSC_HWSC_SARC_SFSS_SFVSC_SSPC: - SFVSC - SSPC +AHU_BPC_DXSC_ECON_RFSS_RFVSC_HWSC_SARC_SFSS_SFVSC_SSPC: + id: "10277396456272822272" + description: "Multi-zone AHU with DX cooling and heating water valve and return air control." + is_canonical: true + implements: + - AHU + - BPC + - DXSC + - ECON + - RFSS + - RFVSC + - HWSC + - SARC + - SFSS + - SFVSC + - SSPC + AHU_BSPC_BYPSSPC_DX2SC_ECON_EFSS_HTSC_SFSS: id: "15280600285970432" description: "Multi-zone AHU with bypass static pressure control, two-stage DX cooling and single-stage heating." @@ -3286,6 +3354,10 @@ AHU_BSPC_DX4SC_ECON_EFSS_EFVSC_SARC_SFSS_SFVSC_SSPC_SSPCSCM_STCSCM: - AHU_BSPC_DX4SC_ECON_EFSS_EFVSC_SARC_SFSS_SFVSC_SSPC - SSPCSCM - STCSCM + opt_uses: + - supervisor_run_command + - run_command + AHU_BSPC_DX2SC_ECON_EFSS_SFSS_SFVSC_SSPC_SSPCSCM_STCSCM: id: "9692108824621613056" @@ -3295,6 +3367,10 @@ AHU_BSPC_DX2SC_ECON_EFSS_SFSS_SFVSC_SSPC_SSPCSCM_STCSCM: - AHU_BSPC_DX2SC_ECON_EFSS_SFSS_SFVSC_SSPC - SSPCSCM - STCSCM + opt_uses: + - supervisor_run_command + - run_command + AHU_BSPC_DXSC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC_SARC_SSPCSCM_STCSCM: id: "7170093033294135296" @@ -3304,6 +3380,10 @@ AHU_BSPC_DXSC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC_SARC_SSPCSCM_STCSCM: - AHU_BSPC_DXSC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC_SARC - SSPCSCM - STCSCM + opt_uses: + - supervisor_run_command + - run_command + AHU_BSPC_DXSC_ECON_SFSS_SFVSC_SSPC_SSPCSCM_STCSCM: id: "15294586761070510080" @@ -3313,6 +3393,10 @@ AHU_BSPC_DXSC_ECON_SFSS_SFVSC_SSPC_SSPCSCM_STCSCM: - AHU_BSPC_DXSC_ECON_SFSS_SFVSC_SSPC - SSPCSCM - STCSCM + opt_uses: + - supervisor_run_command + - run_command + AHU_BSPC_DX2SC_ECON_EFSS_EFVSC_FDPM_SFSS3X_SFVSC3X_SSPC: id: "18264569977832996864" @@ -3736,154 +3820,276 @@ AHU_CHWSC_ECON_FDPM_EDRPC_RFSS_RFVSC_SFSS_SFVSC_SSPC: - SFSS - SFVSC - SSPC - -################################### -### Existing Non-standard Types ### -################################### - -# TODO: Remove pressure points from AHU_US_MTV_1250_16 -# TODO: Remove zone air co2 setpoint from AHU_US_MTV_1300_2 -# TODO: Every AHU must have outside_air_temperature_sensor, so almost every AHU is currently incomplete. -# See b/148117417 for details - -AHU_US_LVK_7633_1: # This building isnt found in the BMS anymore... Where is it? - id: "5764350924508102656" - description: "Non-standard type for 7633" + +AHU_SFSS_SFVSC_CHWSC_OAFC_SSPC_RAVOCC_RACO2C_ESFM_SAIDC: + id: "1522398780664578048" + description: "AHU with CO2, VOC based outside air control, static pressure based VFD speed control,supply temperature based Chilled water valve modulation." + is_canonical: true implements: - - REMAP_REQUIRED - uses: - - building_air_static_pressure_sensor - - building_air_static_pressure_setpoint - - compressor_run_command_1 - - compressor_run_command_2 - - compressor_run_command_3 - - compressor_run_command_4 - - compressor_speed_percentage_command - - economizer_mode - - exhaust_air_damper_percentage_command - - exhaust_fan_run_command - - exhaust_fan_run_status - - exhaust_fan_speed_frequency_sensor - - exhaust_fan_speed_percentage_command - - mixed_air_temperature_sensor - - outside_air_damper_percentage_command - - outside_air_flowrate_sensor - - outside_air_flowrate_setpoint - - return_air_temperature_sensor - - supply_air_static_pressure_sensor - - supply_air_static_pressure_setpoint - - supply_air_temperature_sensor - - supply_air_temperature_setpoint - - supply_fan_run_command - - supply_fan_run_status - - supply_fan_speed_frequency_sensor - - supply_fan_speed_percentage_command - - supply_air_flowrate_sensor + - AHU + - SFSS + - SFVSC + - CHWSC + - OAFC + - SSPC + - RAVOCC + - RACO2C + - ESFM + - SAIDC -AHU_US_LVK_7633_2: # This building isnt found in the BMS anymore... Where is it? - id: "6039492714242768896" - description: "Non-standard type for 7633" +AHU_DFSS_DX2ZC_ECONZ_CO2C_DSP_RCKTM2X_HTZC_CC2XM_RTM_DTM: + id: "2060882401344618496" + description: "AHU with dual compressor refrigeration circuits (with monitoring), heating, and zone-level temperature and ventilation control." + is_canonical: true implements: - - REMAP_REQUIRED - uses: - - compressor_run_command - - economizer_mode - - outside_air_damper_percentage_command - - return_air_temperature_sensor - - supply_air_temperature_sensor - - supply_fan_run_command - - supply_fan_run_status - - zone_air_cooling_temperature_setpoint - - zone_air_temperature_sensor + - AHU + - DFSS + - DX2ZC + - ECONZ + - CO2C + - DSP + - RCKTM2X + - HTZC + - CC2XM + - RTM + - DTM + opt_uses: + - condensing_fan_current_sensor -AHU_US_MTV_1015_2: - id: "15369403029782528000" - description: "Non-standard type for 1015 ACs" +AHU_SFSS_SFMSC_SFVSC_FDPM_CHWSC_RTM_RACO2C_SSPC_VOADM2X_SAIDC_RAIDC2X: + id: "5588410372366270464" + description: "AHUs with chilled water temperature monitoring, compressor monitoring with zone temperature and humidity monitoring with 2 dampers monitoring and control ." + is_canonical: true implements: - - AHU_BSPC_DX4SC_ECON_EFSS_SFSS_SFVSC_SSPC - - INCOMPLETE - uses: - - zone_air_temperature_sensor - - zone_air_cooling_temperature_setpoint - - zone_air_heating_temperature_setpoint + - AHU + - SFSS + - SFMSC + - SFVSC + - FDPM + - CHWSC + - RTM + - RACO2C + - SSPC + - VOADM2X + - SAIDC + - RAIDC2X -AHU_US_MTV_1201_2: - id: "2255976446042308608" - description: "Non-standard type for 1201 ACs" +AHU_SFSS_SFMSC_SFVSC_FDPM_CHWSC_RTM_RACO2C_VOADM2X_SAIDC: + id: "8880541699974103040" + description: "AHUs with chilled water temperature monitoring and compressor monitoring with zone temperature and humidity monitoring ." + is_canonical: true implements: - - AHU_BSPC_DX4SC_ECON_EFSS_SFSS_SFVSC_SSPC - - INCOMPLETE - uses: - - supply_air_damper_command - - supply_air_damper_status + - AHU + - SFSS + - SFMSC + - SFVSC + - FDPM + - CHWSC + - RTM + - RACO2C + - VOADM2X + - SAIDC -AHU_US_MTV_1210_10: - id: "833331545002475520" - description: "Non-standard type for 1210" +AHU_SFSS_SFMSC_SFVSC_FDPM_CHWSC_RTM_RACO2C_SSPC_VOADM2X_SAIDC3X: + id: "10573895159865409536" + description: "AHUs with chilled water temperature monitoring and compressor monitoring with zone temperature and humidity monitoring ." + is_canonical: true implements: - - AHU_BSPC_DX3SC_ECON_EFSS_EFVSC_HTSC_SFSS_SFVSC_SSPC - - INCOMPLETE - uses: - - zone_air_temperature_sensor - - zone_air_cooling_temperature_setpoint - - zone_air_heating_temperature_setpoint + - AHU + - SFSS + - SFMSC + - SFVSC + - FDPM + - CHWSC + - RTM + - RACO2C + - SSPC + - VOADM2X + - SAIDC3X -AHU_US_MTV_1210_2: - id: "3512973323287920640" - description: "Non-standard type for 1210" +AHU_SFSS_SFMSC_SFVSC_FDPM_CHWSC_RTM_RACO2C_SSPC2X_VOADM2X_SAIDC2X_RAIDC4X_SSPC: + id: "1938242874382483456" + description: "AHUs with chilled water temperature monitoring and compressor monitoring with zone temperature and humidity monitoring ." + is_canonical: true implements: - - AHU_DX2SC_ECON_HT2SC_SFSS_SFVSC_SSPC - - INCOMPLETE - uses: - - zone_air_temperature_sensor - - zone_air_cooling_temperature_setpoint - - zone_air_heating_temperature_setpoint + - AHU + - SFSS + - SFMSC + - SFVSC + - FDPM + - CHWSC + - RTM + - RACO2C + - SSPC2X + - VOADM2X + - SAIDC2X + - RAIDC4X + - SSPC -AHU_US_MTV_1210_5: # Appears changed in the controller. - id: "10056703581857251328" - description: "Non-standard type for 1210" +AHU_SFSS_SFMSC_SFVSC_FDPM_CHWSC_RTM_RACO2C_SSPC_VOADM2X_SAIDC2X_RAIDC2X: + id: "17761640165148721152" + description: "AHUs with chilled water temperature monitoring and compressor monitoring with zone temperature and humidity monitoring ." + is_canonical: true implements: - - REMAP_REQUIRED - uses: - - compressor_run_command - - economizer_mode - - heater_run_command - - mixed_air_temperature_sensor - - outside_air_damper_percentage_command + - AHU + - SFSS + - SFMSC + - SFVSC + - FDPM + - CHWSC + - RTM + - RACO2C + - SSPC + - VOADM2X + - SAIDC2X + - RAIDC2X + +AHU_SFSS_SFMSC_SFVSC_FDPM_CHWSC_RTM_RACO2C_SSPC2X_VOADM2X_SAIDC2X_RAIDC3X_SSPC: + id: "14811782409221046272" + description: "AHUs with chilled water temperature monitoring and compressor monitoring with zone temperature and humidity monitoring ." + is_canonical: true + implements: + - AHU + - SFSS + - SFMSC + - SFVSC + - FDPM + - CHWSC + - RTM + - RACO2C + - SSPC2X + - VOADM2X + - SAIDC2X + - RAIDC3X + - SSPC + +AHU_SFSS_SFMSC_SFVSC_FDPM_CHWSC_RTM_RACO2C_SSPC2X_VOADM2X_SAIDC2X_RAIDC2X_SSPC: + id: "18103913736828878848" + description: "AHUs with chilled water temperature monitoring and compressor monitoring with zone temperature and humidity monitoring ." + is_canonical: true + implements: + - AHU + - SFSS + - SFMSC + - SFVSC + - FDPM + - CHWSC + - RTM + - RACO2C + - SSPC2X + - VOADM2X + - SAIDC2X + - RAIDC2X + - SSPC + + +################################### +### Existing Non-standard Types ### +################################### + +# TODO: Every AHU must have outside_air_temperature_sensor, so almost every AHU is currently incomplete. +# See b/148117417 for details + +AHU_UNDEFINED: + id: "8989855146007592960" + description: "An AHU with no telemetry data. Note this is non-canonical, as it is typically expected that telemetry will normally be available." + implements: + - AHU + +AHU_NON_CANONICAL_TYPE_1: + id: "2046404032230064128" + description: "Datapoint from for Ahu's on Landlords side." + implements: + - AHU + - LANDLORD + uses: + - run_command + - supply_air_temperature_setpoint + - master_alarm + - run_status + - supply_air_temperature_sensor + +AHU_NON_CANONICAL_TYPE_2: + id: "17417189560445566976" + description: "Ahu with variable speed supply and exhaust air fans, air cooler, hair heater, and hru." + implements: + - AHU + - VOADM + - SFVSC + - SSPC + - SFSS + - STC + - HHRU + - HWSC + - CHWSC + - EFVSC + - ESPC + - EDPM + - EFSS + - RTM + - ZHM + +AHU_NON_CANONICAL_TYPE_3: + id: "9238652637140746240" + description: "Ahu with variable speed supply and exhaust air fans, air cooler, hair heater, and hru.-Incomplete" + implements: + - AHU + - INCOMPLETE + - VOADM + - SFVSC + - SSPC + - SFSS + - STC + - PHRU + - HWSC + - CHWSC + - EFVSC + - ESPC + - EDPM + - EFSS + - RTM + - ZHM + +AHU_NON_CANONICAL_TYPE_4: + id: "6039492714242768896" + description: "Non-standard type 4" + implements: + - REMAP_REQUIRED + uses: + - compressor_run_command + - economizer_mode + - outside_air_damper_percentage_command - return_air_temperature_sensor - - supply_air_static_pressure_setpoint - supply_air_temperature_sensor - - supply_air_temperature_setpoint - supply_fan_run_command - supply_fan_run_status - - supply_air_flowrate_sensor - zone_air_cooling_temperature_setpoint - - zone_air_heating_temperature_setpoint + - zone_air_temperature_sensor -AHU_US_MTV_1210_7: - id: "12736345360142696448" - description: "Non-standard type for 1210" +AHU_NON_CANONICAL_TYPE_5: + id: "15369403029782528000" + description: "Non-standard type 5" implements: - - AHU_DX2SC_ECON_EFSS_HT2SC_SFSS_SFVSC_SSPC + - AHU_BSPC_DX4SC_ECON_EFSS_SFSS_SFVSC_SSPC - INCOMPLETE uses: + - zone_air_temperature_sensor - zone_air_cooling_temperature_setpoint - zone_air_heating_temperature_setpoint - - zone_air_temperature_sensor -AHU_US_MTV_1210_9: - id: "12957021741883850752" - description: "Non-standard type for 1210" +AHU_NON_CANONICAL_TYPE_6: + id: "2255976446042308608" + description: "Non-standard type 6" implements: - - AHU_BYPSSPC_DX2SC_ECON_HT2SC_SFSS + - AHU_BSPC_DX4SC_ECON_EFSS_SFSS_SFVSC_SSPC - INCOMPLETE uses: - - zone_air_heating_temperature_setpoint - - zone_air_cooling_temperature_setpoint + - supply_air_damper_command + - supply_air_damper_status -AHU_US_MTV_1220_4: +AHU_NON_CANONICAL_TYPE_7: id: "2699440271849947136" - description: "Non-standard type for 1220" + description: "Non-standard type 7" implements: - AHU_DXSC_ECON_EFSS_HTSC_SFSS_SFVSC_SSPC - INCOMPLETE @@ -3892,9 +4098,9 @@ AHU_US_MTV_1220_4: - zone_air_heating_temperature_setpoint - zone_air_cooling_temperature_setpoint -AHU_US_MTV_1230_10: +AHU_NON_CANONICAL_TYPE_8: id: "328295068039380992" - description: "Non-standard type for 1230 ACs" + description: "Non-standard type 8" implements: - AHU_BYPSSPC_ECON_EFSS_HP2SC_SFSS - INCOMPLETE @@ -3903,25 +4109,25 @@ AHU_US_MTV_1230_10: - zone_air_heating_temperature_setpoint - zone_air_temperature_sensor -AHU_US_MTV_1230_2: +AHU_NON_CANONICAL_TYPE_9: id: "5329542454234316800" - description: "Non-standard type for 1230" + description: "Non-standard type 9" implements: - AHU_DFSS_DSP_DXDC_ECOND_EFSS_HTDC - INCOMPLETE uses: - discharge_air_flowrate_sensor -AHU_US_MTV_1230_6: +AHU_NON_CANONICAL_TYPE_10: id: "9551667104894156800" - description: "Non-standard type for 1230 ACs" + description: "Non-standard type 10" implements: - - AHU_US_MTV_1250_15 + - AHU_NON_CANONICAL_TYPE_13 - DEPRECATED -AHU_US_MTV_1250_12: +AHU_NON_CANONICAL_TYPE_11: id: "14240055054475198464" - description: "Non-standard type for 1250 ACs" + description: "Non-standard type 11" implements: - AHU_DX2SC_ECON_EFSS_EFVSC_HTSC_SFSS_SFVSC_SSPC - INCOMPLETE @@ -3930,25 +4136,25 @@ AHU_US_MTV_1250_12: - zone_air_heating_temperature_setpoint - zone_air_cooling_temperature_setpoint -AHU_US_MTV_1250_13: +AHU_NON_CANONICAL_TYPE_12: id: "3724149924565090304" - description: "Non-standard type for 1250 ACs" + description: "Non-standard type 12" implements: - - AHU_US_MTV_1250_15 # Deprecated + - AHU_NON_CANONICAL_TYPE_13 # Deprecated - DEPRECATED -AHU_US_MTV_1250_15: +AHU_NON_CANONICAL_TYPE_13: id: "5394985386319544320" - description: "Non-standard type for 1250" + description: "Non-standard type 13" implements: - AHU_BSPC_DX2SC_ECON_EFSS_EFVSC_HTSC_SFSS_SFVSC_SSPC - INCOMPLETE uses: - zone_air_temperature_sensor -AHU_US_MTV_1250_16: +AHU_NON_CANONICAL_TYPE_14: id: "12407090006135406592" - description: "Non-standard type for 1250 ACs" + description: "Non-standard type 14" implements: - AHU_CO2C_DFSS_DFVSC_DSP_DX2DC_ECOND_EFSS_EFVSC_HTDC - REMAP_REQUIRED @@ -3956,72 +4162,54 @@ AHU_US_MTV_1250_16: - supply_air_static_pressure_setpoint # Remove - supply_air_static_pressure_sensor # Remove -AHU_US_MTV_1250_8: - id: "8335835942992478208" - description: "Non-standard type for 1250" - implements: - - AHU_DFSS_DSP_DX2DC_ECOND_EFSS_HT2DC - - INCOMPLETE - uses: - - discharge_air_heating_percentage_command # What is this? - -AHU_US_MTV_1295_1: - id: "787310386310283264" - description: "Non-standard type for 1295" - implements: - - AHU_DX2SC_ECON_SFSS_SFVSC_SSPC - - INCOMPLETE - uses: - - building_air_static_pressure_sensor - -AHU_US_MTV_1300_10: +AHU_NON_CANONICAL_TYPE_15: id: "10010682423165059072" - description: "Non-standard type for 1300" + description: "Non-standard type 15" implements: - AHU_BYPSSPC_DXSC_ECON_HP2SC_SFSS - INCOMPLETE uses: - zone_air_co2_concentration_setpoint -AHU_US_MTV_1300_2: +AHU_NON_CANONICAL_TYPE_16: id: "9055919302162513920" - description: "Non-standard type for 1300" + description: "Non-standard type 16" implements: - AHU_BYPSSPC_ECON_HP2SC_HT2SC_SFSS - INCOMPLETE uses: - zone_air_co2_concentration_setpoint # Remove -AHU_US_MTV_1667_1: +AHU_NON_CANONICAL_TYPE_17: id: "5989460537132449792" - description: "Non-standard type for 1667 ACs" + description: "Non-standard type 17" implements: - AHU_BSPC_DX4SC_ECON_EFSS_SFSS_SSPC - INCOMPLETE uses: - zone_air_temperature_sensor -AHU_US_MTV_1708_5: +AHU_NON_CANONICAL_TYPE_18: id: "8308673607739899904" - description: "Non-standard type for 1708" + description: "Non-standard type 18" implements: - AHU_BSPC_CHWSC_ECON_EFSS_EFVSC_HWSC_PHWSC_SFSS_SFVSC_SSPC - INCOMPLETE uses: - supply_air_damper_percentage_command -AHU_US_MTV_1708_7: +AHU_NON_CANONICAL_TYPE_19: id: "7137737704623570944" - description: "Non-standard type for 1708" + description: "Non-standard type 19" implements: - AHU_BSPC_CHWSC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC - INCOMPLETE uses: - supply_air_damper_percentage_command -AHU_US_MTV_1950_2: +AHU_NON_CANONICAL_TYPE_20: id: "16685509652137377792" - description: "Non-standard type for 1950 ACs" + description: "Non-standard type 20" implements: - AHU_BSPC_DX4SC_ECONM_EFSS_EFVSC_SFSS2X_SFVSC_SSPC - INCOMPLETE @@ -4029,9 +4217,9 @@ AHU_US_MTV_1950_2: - supply_air_damper_command - supply_air_damper_status -AHU_US_MTV_2000_2: +AHU_NON_CANONICAL_TYPE_21: id: "14973015893829746688" - description: "Non-standard type for 2000" + description: "Non-standard type 21" implements: - AHU_CHWSC_ECON_HWSC_SFSS_SFVSC_SSPC - INCOMPLETE @@ -4039,18 +4227,18 @@ AHU_US_MTV_2000_2: - zone_air_relative_humidity_sensor_1 - zone_air_relative_humidity_sensor_2 -AHU_US_MTV_2000_3: +AHU_NON_CANONICAL_TYPE_22: id: "4380549570254340096" - description: "Non-standard type for 2000" + description: "Non-standard type 22" implements: - AHU_CHWSC_ECON_SFC_SFSS_SFVSC_SSPC - INCOMPLETE uses: - outside_air_damper_command -AHU_US_MTV_2011_10: +AHU_NON_CANONICAL_TYPE_23: id: "14410065940408434688" - description: "Non-standard type for 2011" + description: "Non-standard type 23" implements: - AHU_BSPC_CHWSC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC - INCOMPLETE @@ -4061,45 +4249,45 @@ AHU_US_MTV_2011_10: - exhaust_air_flowrate_sensor - supply_air_damper_percentage_command -AHU_US_MTV_2015_3: +AHU_NON_CANONICAL_TYPE_24: id: "17459073256882438144" - description: "Non-standard type for 2015 ACs" + description: "Non-standard type 24" implements: - AHU_BSPC_DXSC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC - INCOMPLETE uses: - compressor_speed_percentage_command -AHU_US_MTV_2081_12: +AHU_NON_CANONICAL_TYPE_25: id: "6930712859252883456" - description: "Non-standard type for 2081" + description: "Non-standard type 25" implements: - AHU_BSPC_CHWSC_ECON_EFSS_HWSC_SFSS_SSPC - INCOMPLETE uses: - zone_air_cooling_temperature_setpoint -AHU_US_MTV_2081_2: +AHU_NON_CANONICAL_TYPE_26: id: "14866055402679697408" - description: "Non-standard type for 2081" + description: "Non-standard type 26" implements: - AHU_CHWZC_DFSS_DSP_ECONZ - INCOMPLETE uses: - exhaust_air_damper_percentage_command -AHU_US_MTV_2081_5: +AHU_NON_CANONICAL_TYPE_27: id: "5030193816502534144" - description: "Non-standard type for 2081" + description: "Non-standard type 27" implements: - AHU_BSPC_CHWSC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC - INCOMPLETE uses: - zone_air_temperature_sensor -AHU_US_MTV_2081_6: +AHU_NON_CANONICAL_TYPE_28: id: "16154084896107659264" - description: "Non-standard type for 2081 ACs" + description: "Non-standard type 28" implements: - AHU_BSPC_DX4SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC - INCOMPLETE @@ -4107,19 +4295,9 @@ AHU_US_MTV_2081_6: - zone_air_temperature_sensor - zone_air_cooling_temperature_setpoint -AHU_US_MTV_2171_3: - id: "11391598658907537408" - description: "Non-standard type for 2171" - implements: - - AHU_BYPSSPC2X_DX2SC_ECON_HT2SC_SFSS - - INCOMPLETE - uses: - - supply_air_static_pressure_sensor_1 - - supply_air_static_pressure_sensor_2 - -AHU_US_MTV_2637_1: +AHU_NON_CANONICAL_TYPE_29: id: "12044391906457681920" - description: "Non-standard type for 2637" + description: "Non-standard type 29" implements: - AHU_DFSS_DSP_DX2ZC_ECONZ_HTZC - INCOMPLETE @@ -4128,9 +4306,9 @@ AHU_US_MTV_2637_1: - supply_fan_run_status - supply_air_temperature_sensor -AHU_US_MTV_2637_5: +AHU_NON_CANONICAL_TYPE_30: id: "2768102573981302784" - description: "Non-standard type for 2637 ACs" + description: "Non-standard type 30" implements: - AHU_DSP_DFSS_DXZC_ECONMD - INCOMPLETE @@ -4138,18 +4316,9 @@ AHU_US_MTV_2637_5: - outside_air_temperature_sensor - ventilation_outside_air_damper_percentage_command -AHU_US_MTV_2644_1: - id: "5881374146075557888" - description: "Non-standard type for 2644" - implements: - - AHU_DFSS_DSP_DX2ZC_ECONZ_HT2ZC - - INCOMPLETE - uses: - - outside_air_damper_command - -AHU_US_MTV_2644_2: +AHU_NON_CANONICAL_TYPE_31: id: "10267880183134420992" - description: "Non-standard type for 2644 ACs" + description: "Non-standard type 31" implements: - AHU_BYPSSPC_DX2SDC_ECON_HT2SDC_SFSS - INCOMPLETE @@ -4157,18 +4326,9 @@ AHU_US_MTV_2644_2: - zone_air_temperature_sensor - outside_air_damper_command -AHU_US_MTV_41_2: - id: "14050903870125637632" - description: "Non-standard type for B41 ACs" - implements: - - AHU_BSPC_DX4SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC - - INCOMPLETE - uses: - - exhaust_air_damper_command - -AHU_US_MTV_45_3: +AHU_NON_CANONICAL_TYPE_32: id: "10225166355418578944" - description: "Non-standard type for B45 ACs" + description: "Non-standard type 32" implements: - AHU_BSPC_DXSC_ECON_EFSS_EFVSC_FDPM_SFSS3X_SFVSC2X_SSPC - INCOMPLETE @@ -4178,9 +4338,9 @@ AHU_US_MTV_45_3: - condensing_fan_speed_percentage_command_2 - compressor_speed_percentage_command_2 -AHU_US_MTV_946_3: +AHU_NON_CANONICAL_TYPE_33: id: "5740372774929563648" - description: "Non-standard type for 946 ACs" + description: "Non-standard type 33" implements: - AHU_BSPC_DX4SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC - INCOMPLETE @@ -4188,9 +4348,9 @@ AHU_US_MTV_946_3: - supply_air_damper_percentage_command - return_air_damper_percentage_command -AHU_US_MTV_E475_1: +AHU_NON_CANONICAL_TYPE_34: id: "17940888048266903552" - description: "Non-standard type for E475" + description: "Non-standard type 34" implements: - AHU_BSPC_CHWSC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC - INCOMPLETE @@ -4198,9 +4358,9 @@ AHU_US_MTV_E475_1: - min_outside_air_damper_status - min_outside_air_damper_command -AHU_US_MTV_E475_2: # Is actually a MAU +AHU_NON_CANONICAL_TYPE_35: id: "2448505330112397312" - description: "Non-standard type for E475" + description: "Non-standard type 35" implements: - REMAP_REQUIRED uses: @@ -4216,9 +4376,9 @@ AHU_US_MTV_E475_2: # Is actually a MAU - supply_fan_run_command - supply_fan_run_status -AHU_US_MTV_FRC1_5: # Supply --> Discharge +AHU_NON_CANONICAL_TYPE_36: id: "4480596332288933888" - description: "Non-standard type for FRC1 ACs" + description: "Non-standard type 36" implements: - AHU_DFSS_DSP_DX2ZC_ECONZ - INCOMPLETE @@ -4226,52 +4386,52 @@ AHU_US_MTV_FRC1_5: # Supply --> Discharge - zone_air_temperature_sensor_1 - zone_air_temperature_sensor_2 -AHU_US_MTV_PR55_2: # Why does it only have 2 points? +AHU_NON_CANONICAL_TYPE_37: id: "14037393071243526144" - description: "Non-standard type for PR55 ACs" + description: "Non-standard type 37" implements: - REMAP_REQUIRED uses: - supply_fan_current_sensor_1 - supply_fan_current_sensor_2 -AHU_US_MTV_QD5_1: # This has only one point. +AHU_NON_CANONICAL_TYPE_38: id: "11745060860911943680" - description: "Non-standard type for QD5 ACs" + description: "Non-standard type 38" implements: - REMAP_REQUIRED uses: - supply_fan_run_status -AHU_US_MTV_QD7_2: # This device has only one point? +AHU_NON_CANONICAL_TYPE_39: id: "7759375190689054720" - description: "Non-standard type for QD7 ACs" + description: "Non-standard type 39" implements: - REMAP_REQUIRED uses: - outside_air_damper_percentage_command -AHU_US_MTV_SB10_5: +AHU_NON_CANONICAL_TYPE_40: id: "14623986922708533248" - description: "Non-standard type for SB10 ACs" + description: "Non-standard type 40" implements: - AHU_CO2M_DFSS_DSP_ECONZ_HP2ZC - INCOMPLETE uses: - discharge_air_damper_command -AHU_US_MTV_SB10_6: +AHU_NON_CANONICAL_TYPE_41: id: "11381395191001776128" - description: "Non-standard type for SB10 ACs" + description: "Non-standard type 41" implements: - AHU_CO2M_DFSS_DSP_DX2ZC_ECONZ - INCOMPLETE uses: - discharge_air_damper_command -AHU_US_MTV_SB30_2: +AHU_NON_CANONICAL_TYPE_42: id: "10236214248254472192" - description: "Non-standard type for SB30 ACs" + description: "Non-standard type 42" implements: - AHU_BSPC_DX2SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC - INCOMPLETE @@ -4280,9 +4440,9 @@ AHU_US_MTV_SB30_2: - return_air_damper_command - supply_air_damper_status -AHU_US_MTV_SB30_3: +AHU_NON_CANONICAL_TYPE_43: id: "5984816200016723968" - description: "Non-standard type for SB30 ACs" + description: "Non-standard type 43" implements: - AHU_BSPC_DX4SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC - INCOMPLETE @@ -4291,27 +4451,18 @@ AHU_US_MTV_SB30_3: - return_air_damper_status - supply_air_damper_status -AHU_US_MTV_SB50_3: +AHU_NON_CANONICAL_TYPE_44: id: "11758430922305699840" - description: "Non-standard type for SB50 ACs" + description: "Non-standard type 44" implements: - AHU_BSPC_CO2C_DX2SC_ECON_EFSS_SFSS_SFVSC_SSPC - INCOMPLETE uses: - zone_air_temperature_sensor -AHU_US_MTV_SB55_1: - id: "18018434404350689280" - description: "Non-standard type for SB55" - implements: - - AHU_BSPC_DXSC_ECON_SFSS_SFVSC_SSPC - - INCOMPLETE - uses: - - exhaust_air_damper_percentage_command - -AHU_US_MTV_SB65_4: +AHU_NON_CANONICAL_TYPE_45: id: "17518675583200919552" - description: "Non-standard type for SP65 ACs" + description: "Non-standard type 45" implements: - AHU_BSPC_DX4SC_ECON_EFSS_EFVSC_SARC_SFSS_SFVSC_SSPC - INCOMPLETE @@ -4319,162 +4470,144 @@ AHU_US_MTV_SB65_4: - exhaust_air_damper_command - outside_air_damper_percentage_sensor -AHU_US_MTV_SL1001_5: +AHU_NON_CANONICAL_TYPE_46: id: "5858697818264305664" - description: "Non-standard type for SL1001 ACs" + description: "Non-standard type 46" implements: - AHU_BSPC_DX2SC_ECON_EFSS_EFVSC_HWSC_SFSS_SFVSC_SSPC - INCOMPLETE uses: - exhaust_air_damper_command -AHU_US_MTV_SP40_2: +AHU_NON_CANONICAL_TYPE_47: id: "12057931704958976" - description: "Non-standard type for SP40 ACs" + description: "Non-standard type 47" implements: - AHU_DFSS_DSP_DXZC_ECONZ_HTZC - INCOMPLETE uses: - discharge_air_damper_command -AHU_US_PAO_MIR1_3: +AHU_NON_CANONICAL_TYPE_48: id: "2083713760295387136" - description: "Non-standard type for MIR1 ACs" + description: "Non-standard type 48" implements: - AHU_CSP_DFSS_DXZC_ECONZ - INCOMPLETE uses: - discharge_air_damper_percentage_command -AHU_US_PAO_MIR3_3: +AHU_NON_CANONICAL_TYPE_49: id: "284525709160873984" - description: "Non-standard type for MIR3 ACs" + description: "Non-standard type 49" implements: - AHU_BSPC_DX4SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC - INCOMPLETE uses: - supply_air_damper_command -AHU_US_PAO_MIR3_4: +AHU_NON_CANONICAL_TYPE_50: id: "16865231424767131648" - description: "Non-standard type for MIr3 ACs" + description: "Non-standard type 50" implements: - AHU_DFSS_DXZC_ECOND_ZHM - INCOMPLETE uses: - discharge_air_damper_command - -AHU_US_SBO_900_2: +AHU_NON_CANONICAL_TYPE_51: id: "3457311646643388416" - description: "Non-standard type for SBO-900" + description: "Non-standard type 51" implements: - AHU_CHWSC_ECONM2X_MOAFC_SFSS_SFVSC_SSPC - INCOMPLETE uses: - return_air_flowrate_sensor -AHU_US_SBO_901_2: # This is actually a MAU - id: "10024685803256414208" - description: "Non-standard type for SBO-901" - implements: - - REMAP_REQUIRED - uses: - - filter_differential_pressure_sensor - - heater_run_command_1 - - heater_run_command_2 - - outside_air_damper_percentage_command - - supply_air_damper_percentage_command - - supply_air_flowrate_sensor - - supply_air_flowrate_setpoint - - supply_air_temperature_sensor - - supply_fan_run_status - - zone_air_temperature_sensor - -AHU_US_SBO_901_4: +AHU_NON_CANONICAL_TYPE_52: id: "2364062837099200512" - description: "Non-standard type for SBO-901" + description: "Non-standard type 52" implements: - AHU_CHWSC_ECON_FDPM_SFSS_SFVSC_SSPC - INCOMPLETE uses: - outside_air_damper_command -AHU_US_SBO_901_7: +AHU_NON_CANONICAL_TYPE_53: id: "5412999784829026304" - description: "Non-standard type for SBO-901" + description: "Non-standard type 53" implements: - AHU_CHWSC_ECON_EFSS_EFVSC_FDPM_RFC_SFSS_SFVSC_SSPC - INCOMPLETE uses: - outside_air_damper_command -AHU_US_SVL_BORD1212_1: +AHU_NON_CANONICAL_TYPE_54: id: "3811811787624415232" - description: "Non-standard type for BORD1212 ACs" + description: "Non-standard type 54" implements: - AHU_BSPC_DX5SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC - INCOMPLETE uses: - run_command -AHU_US_SVL_BRG1_1: +AHU_NON_CANONICAL_TYPE_55: id: "15346814662901497856" - description: "Non-standard type for BRG1" + description: "Non-standard type 55" implements: - AHU_DX4ZC_ECON_EFSS_HT3ZC_SFSS_SFVSC_ZHC - INCOMPLETE uses: - zone_air_dehumidification_relative_humidity_setpoint -AHU_US_SVL_BRG1_4: +AHU_NON_CANONICAL_TYPE_56: id: "6487108295956889600" - description: "Non-standard type for BRG1 ACs" + description: "Non-standard type 56" implements: - AHU_DFSS_DFVSC_DX4ZC_ECONZ_HT3ZC_ZHM - INCOMPLETE uses: - zone_air_dehumidification_relative_humidity_setpoint -AHU_US_SVL_CSPN222_3: +AHU_NON_CANONICAL_TYPE_57: id: "2682534181061263360" - description: "Non-standard type for CSPN222 ACs" + description: "Non-standard type 57" implements: - AHU_BSPC_DX2SC_ECON_EFSS_SFSS_SFVSC_SSPC - INCOMPLETE uses: - run_command -AHU_US_SVL_CSPN222_4: +AHU_NON_CANONICAL_TYPE_58: id: "11860870221642334208" - description: "Non-standard type for CSPN222 ACs" + description: "Non-standard type 58" implements: - AHU_BSPC_DX2SC_ECON_EFSS_SFSS_SFVSC_SSPC - INCOMPLETE uses: - run_command -AHU_US_SVL_CSPN222_5: +AHU_NON_CANONICAL_TYPE_59: id: "14157706031601287168" - description: "Non-standard type for CSPN222" + description: "Non-standard type 59" implements: - AHU_BSPC_DX3SC_ECONM_EFSS4X_EFVSC4X_SFSS2X_SFVSC2X_SSPC - INCOMPLETE uses: - run_command -AHU_US_SVL_CSPN222_6: +AHU_NON_CANONICAL_TYPE_60: id: "10603240025699123200" - description: "Non-standard type for CSPN222 ACs" + description: "Non-standard type 60" implements: - AHU_BSPC_DX2SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC - INCOMPLETE uses: - run_command -AHU_US_SVL_JAVA111_1: +AHU_NON_CANONICAL_TYPE_61: id: "5679679733076328448" - description: "Non-standard type for JAVA111 ACs" + description: "Non-standard type 61" implements: - AHU_BSPC_DX4SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC - INCOMPLETE @@ -4483,18 +4616,18 @@ AHU_US_SVL_JAVA111_1: - supply_air_damper_status - supply_air_damper_command -AHU_US_SVL_JAVA111_2: +AHU_NON_CANONICAL_TYPE_62: id: "18127629103128379392" - description: "Non-standard type for JAVA111 ACs" + description: "Non-standard type 62" implements: - AHU_BSPC_DX4SC_ECON_EFSS_SFSS_SFVSC_SSPC - INCOMPLETE uses: - run_command -AHU_US_SVL_MAT1_5: +AHU_NON_CANONICAL_TYPE_63: id: "1242860043930435584" - description: "Non-standard type for MAT1 ACs" + description: "Non-standard type 63" implements: - AHU_BSPC_DXSC_ECONM_EFSS_SFSS_SFVSC_SSPC_STC - INCOMPLETE @@ -4502,9 +4635,9 @@ AHU_US_SVL_MAT1_5: - supply_air_damper_status - supply_air_damper_command -AHU_US_SVL_MP1_2: +AHU_NON_CANONICAL_TYPE_64: id: "6869755934608982016" - description: "Non-standard type for MP1" + description: "Non-standard type 64" implements: - AHU_BSPC_CHWSC_ECON_EFSS_EFSS4X_EFVSC_EFVSC4X_FDPM_HWSC_MOAFC_SFSS2X_SFVSC2X_SSPC - INCOMPLETE @@ -4512,9 +4645,9 @@ AHU_US_SVL_MP1_2: - heating_water_valve_status - chilled_water_valve_command -AHU_US_SVL_MP2_1: # Actually a FCU. +AHU_NON_CANONICAL_TYPE_65: id: "136874491690090496" - description: "Non-standard type for MP2" + description: "Non-standard type 65" implements: - REMAP_REQUIRED uses: @@ -4531,9 +4664,9 @@ AHU_US_SVL_MP2_1: # Actually a FCU. - zone_air_heating_temperature_setpoint - zone_air_temperature_sensor -AHU_US_SVL_MP3_3: +AHU_NON_CANONICAL_TYPE_66: id: "2906588262522945536" - description: "Non-standard type for MP3" + description: "Non-standard type 66" implements: - AHU_BPC_CHWSC_ECONM_EFSS4X_EFVSC4X_FDPM_HWSC_MOAFC_SFSS2X_SFVSC2X_SSPC - INCOMPLETE @@ -4541,9 +4674,9 @@ AHU_US_SVL_MP3_3: - heating_water_valve_status - chilled_water_valve_command -AHU_US_SVL_MP4_3: +AHU_NON_CANONICAL_TYPE_67: id: "12134463899005091840" - description: "Non-standard type for MP4" + description: "Non-standard type 67" implements: - AHU_BSPC_CHWSC_ECON_EFSS4X_EFVSC4X_FDPM_HWSC_SFSS2X_SFVSC2X_SSPC - INCOMPLETE @@ -4552,9 +4685,9 @@ AHU_US_SVL_MP4_3: - heating_water_valve_command - ventilation_outside_air_damper_percentage_command -AHU_US_SVL_MP7_3: +AHU_NON_CANONICAL_TYPE_68: id: "11413887958625812480" - description: "Non-standard type for MP7 ACs" + description: "Non-standard type 68" implements: - AHU_BSPC_DX4SC_ECONM_EFSS_EFVSC_SFSS_SFVSC_SSPC - INCOMPLETE @@ -4562,9 +4695,9 @@ AHU_US_SVL_MP7_3: - ventilation_outside_air_damper_percentage_command - exhaust_air_damper_percentage_sensor -AHU_US_SVL_MP7_5: # Appears changed in the controller +AHU_NON_CANONICAL_TYPE_69: id: "5059308884406042624" - description: "Non-standard type for MP7" + description: "Non-standard type 69" implements: - REMAP_REQUIRED uses: @@ -4595,9 +4728,9 @@ AHU_US_SVL_MP7_5: # Appears changed in the controller - zone_air_temperature_sensor - zone_air_temperature_setpoint -AHU_US_SVL_TC4_1: +AHU_NON_CANONICAL_TYPE_70: id: "14578018540574474240" - description: "Non-standard type for TC4 ACUs" + description: "Non-standard type 70" implements: - AHU_BSPC_ECON_EFSS_SARC_SFSS_SFVSC_SSPC - INCOMPLETE @@ -4605,18 +4738,9 @@ AHU_US_SVL_TC4_1: - supply_fan_speed_frequency_command - ventilation_outside_air_flowrate_setpoint -AHU_US_SVL_TC5_1: - id: "17775574276007526400" - description: "Non-standard type for TC5" - implements: - - AHU_CO2M_DFSS_DSP_DX2ZC_ECONZ_HT2ZC - - INCOMPLETE - uses: - - ventilation_outside_air_damper_percentage_command - -AHU_US_SVL_MAT2_4: +AHU_NON_CANONICAL_TYPE_71: id: "12627959901923049472" - description: "Non-standard type for MAT2 ACs" + description: "Non-standard type 71" implements: - AHU uses: @@ -4658,65 +4782,6 @@ AHU_STDSPC_SSPC_EFFC_EFVSC_FDPM3X_HTWHLSTC_RHM_ETM: - exhaust_air_isolation_damper_command - exhaust_air_isolation_damper_status -#Entity types for CH_ZRH_EURD -#Ahu's on Landlord's side - -AHU_NON_CANONICAL_TYPE_1: - id: "2046404032230064128" - description: "Datapoint from for Ahu's on Landlords side." - implements: - - AHU - - LANDLORD - uses: - - run_command - - supply_air_temperature_setpoint - - master_alarm - - run_status - - supply_air_temperature_sensor - - -#Ahu's on Google's side -AHU_NON_CANONICAL_TYPE_2: - id: "17417189560445566976" - description: "Ahu with variable speed supply and exhaust air fans, air cooler, hair heater, and hru." - implements: - - AHU - - VOADM - - SFVSC - - SSPC - - SFSS - - STC - - HHRU - - HWSC - - CHWSC - - EFVSC - - ESPC - - EDPM - - EFSS - - RTM - - ZHM - -AHU_NON_CANONICAL_TYPE_3: - id: "9238652637140746240" - description: "Ahu with variable speed supply and exhaust air fans, air cooler, hair heater, and hru.-Incomplete" - implements: - - AHU - - INCOMPLETE - - VOADM - - SFVSC - - SSPC - - SFSS - - STC - - PHRU - - HWSC - - CHWSC - - EFVSC - - ESPC - - EDPM - - EFSS - - RTM - - ZHM - AHU_BSPC_DX4SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC_RHHC_NONCANONICAL_1: id: "1786972064633061376" description: "Non-Standard AHU with humidification and heating water coils on return duct." @@ -4728,156 +4793,3 @@ AHU_BSPC_DX4SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC_RHHC_NONCANONICAL_1: - heating_water_valve_percentage_command - min_zone_air_relative_humidity_sensor - min_zone_air_relative_humidity_setpoint - - -AHU_DFSS_DX2ZC_ECONZ_CO2C_DSP_RCKTM2X_HTZC_CC2XM_RTM_DTM: - id: "2060882401344618496" - description: "AHU with dual compressor refrigeration circuits (with monitoring), heating, and zone-level temperature and ventilation control." - is_canonical: true - implements: - - AHU - - DFSS - - DX2ZC - - ECONZ - - CO2C - - DSP - - RCKTM2X - - HTZC - - CC2XM - - RTM - - DTM - opt_uses: - - condensing_fan_current_sensor - -#AHU Unit# -AHU_SFSS_SFMSC_SFVSC_FDPM_CHWSC_RTM_RACO2C_SSPC_VOADM2X_SAIDC_RAIDC2X: - id: "5588410372366270464" - description: "AHUs with chilled water temperature monitoring, compressor monitoring with zone temperature and humidity monitoring with 2 dampers monitoring and control ." - is_canonical: true - implements: - - AHU - - SFSS - - SFMSC - - SFVSC - - FDPM - - CHWSC - - RTM - - RACO2C - - SSPC - - VOADM2X - - SAIDC - - RAIDC2X - - -AHU_SFSS_SFMSC_SFVSC_FDPM_CHWSC_RTM_RACO2C_VOADM2X_SAIDC: - id: "8880541699974103040" - description: "AHUs with chilled water temperature monitoring and compressor monitoring with zone temperature and humidity monitoring ." - is_canonical: true - implements: - - AHU - - SFSS - - SFMSC - - SFVSC - - FDPM - - CHWSC - - RTM - - RACO2C - - VOADM2X - - SAIDC - - -AHU_SFSS_SFMSC_SFVSC_FDPM_CHWSC_RTM_RACO2C_SSPC_VOADM2X_SAIDC3X: - id: "10573895159865409536" - description: "AHUs with chilled water temperature monitoring and compressor monitoring with zone temperature and humidity monitoring ." - is_canonical: true - implements: - - AHU - - SFSS - - SFMSC - - SFVSC - - FDPM - - CHWSC - - RTM - - RACO2C - - SSPC - - VOADM2X - - SAIDC3X - -AHU_SFSS_SFMSC_SFVSC_FDPM_CHWSC_RTM_RACO2C_SSPC2X_VOADM2X_SAIDC2X_RAIDC4X_SSPC: - id: "1938242874382483456" - description: "AHUs with chilled water temperature monitoring and compressor monitoring with zone temperature and humidity monitoring ." - is_canonical: true - implements: - - AHU - - SFSS - - SFMSC - - SFVSC - - FDPM - - CHWSC - - RTM - - RACO2C - - SSPC2X - - VOADM2X - - SAIDC2X - - RAIDC4X - - SSPC - - -AHU_SFSS_SFMSC_SFVSC_FDPM_CHWSC_RTM_RACO2C_SSPC_VOADM2X_SAIDC2X_RAIDC2X: - id: "17761640165148721152" - description: "AHUs with chilled water temperature monitoring and compressor monitoring with zone temperature and humidity monitoring ." - is_canonical: true - implements: - - AHU - - SFSS - - SFMSC - - SFVSC - - FDPM - - CHWSC - - RTM - - RACO2C - - SSPC - - VOADM2X - - SAIDC2X - - RAIDC2X - - -AHU_SFSS_SFMSC_SFVSC_FDPM_CHWSC_RTM_RACO2C_SSPC2X_VOADM2X_SAIDC2X_RAIDC3X_SSPC: - id: "14811782409221046272" - description: "AHUs with chilled water temperature monitoring and compressor monitoring with zone temperature and humidity monitoring ." - is_canonical: true - implements: - - AHU - - SFSS - - SFMSC - - SFVSC - - FDPM - - CHWSC - - RTM - - RACO2C - - SSPC2X - - VOADM2X - - SAIDC2X - - RAIDC3X - - SSPC - - - -AHU_SFSS_SFMSC_SFVSC_FDPM_CHWSC_RTM_RACO2C_SSPC2X_VOADM2X_SAIDC2X_RAIDC2X_SSPC: - id: "18103913736828878848" - description: "AHUs with chilled water temperature monitoring and compressor monitoring with zone temperature and humidity monitoring ." - is_canonical: true - implements: - - AHU - - SFSS - - SFMSC - - SFVSC - - FDPM - - CHWSC - - RTM - - RACO2C - - SSPC2X - - VOADM2X - - SAIDC2X - - RAIDC2X - - SSPC \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/BLR.yaml b/ontology/yaml/resources/HVAC/entity_types/BLR.yaml index 222208180..88d44ed76 100644 --- a/ontology/yaml/resources/HVAC/entity_types/BLR.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/BLR.yaml @@ -65,6 +65,17 @@ BLR_SS_SWTC_SWISOVM: - SWTC - SWISOVM +BLR_CPC_SS_SWTC_SWISOVM: + id: "5665710437845434368" + description: "Simple boiler with supply control, supply isolation, and circulation pump." + is_canonical: true + implements: + - BLR + - CPC + - SS + - SWTC + - SWISOVM + BLR_SS_SWTC_HT2SWC: id: "6774450266713358336" description: "Two-stage boiler with supply control and supply isolation." @@ -227,7 +238,7 @@ BLR_SS_SWTC_CPC_RWISOVPM: - SWTC - CPC - RWISOVPM - + BLR_SS_SWTM_SWISOVM: id: "2087411417899597824" description: "Simple boiler with supply water temperature monitoring and supply water isolation valve ." @@ -239,7 +250,7 @@ BLR_SS_SWTM_SWISOVM: - SWISOVM opt_uses: - condensing_water_flowrate_status - + BLR_SS_SWTC_CPC_HT2SWC: id: "13237352126989991936" description: "Two-stage boiler with circulation pump." @@ -251,65 +262,62 @@ BLR_SS_SWTC_CPC_HT2SWC: - CPC - HT2SWC +BLR_SS_SWTC_WDPC: + id: "17823041292490244096" + description: "Boiler with supply water temperature and pressure control" + is_canonical: true + implements: + - BLR + - SS + - SWTC + - WDPC + ################################### ### Existing Non-standard Types ### ################################### -BLR_US_MTV_1201_1: - id: "3859257913386205184" - description: "Non-standard type for 1201 BLRs" - implements: - - BLR_SS_SWTC_SWISOVM - - INCOMPLETE - uses: - - heating_stage_run_count - -BLR_US_MTV_45_1: +BLR_SS_SWTC_NONCANONICAL_1: id: "10031511571441647616" - description: "Non-standard type for B45 BLR" + description: "Non-standard type." implements: - BLR_SS_SWTC - INCOMPLETE uses: - bypass_valve_percentage_command -BLR_US_MTV_QD4_1: +BLR_SS_SWTC_NONCANONICAL_2: id: "9468332919601758208" - description: "Non-standard type for QD4 BLRs" + description: "Non-standard type." implements: - BLR_SS_SWTC - INCOMPLETE uses: - heating_stage_run_count -BLR_US_SBO_1000_1: +BLR_SS_SWTC_SWISOVM_NONCANONICAL_1: + id: "3859257913386205184" + description: "Non-standard type." + implements: + - BLR_SS_SWTC_SWISOVM + - INCOMPLETE + uses: + - heating_stage_run_count + +BLR_SS_SWTC_SWISOVM_NONCANONICAL_2: id: "5763154655857082368" - description: "Non-standard type for SBO-1000 BLRs" + description: "Non-standard type." implements: - BLR_SS_SWTC_SWISOVM - INCOMPLETE uses: - heating_percentage_command -BLR_US_SVL_BORD1212_1: +BLR_SS_SWTC_HTSWC_RWISOVPM_NONCANONICAL_1: id: "16471430340162879488" - description: "Non-standard type for BORD1212 BLRs" + description: "Non-standard type." implements: - BLR_SS_SWTC_HTSWC_RWISOVPM - INCOMPLETE uses: - flue_gas_temperature_sensor - -################## -# WIP -################## -BLR_SS_SWTC_WDPC: - id: "17823041292490244096" - description: "Boiler with supply water temperature and pressure control" - is_canonical: true - implements: - - BLR - - SS - - SWTC - - WDPC \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/CDWS.yaml b/ontology/yaml/resources/HVAC/entity_types/CDWS.yaml index 0a9a2e95b..ef6a3c395 100644 --- a/ontology/yaml/resources/HVAC/entity_types/CDWS.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/CDWS.yaml @@ -148,9 +148,9 @@ CDWS_BYPVPM_CLPM_SWTC_WDPC_WFRM: ### Existing Non-standard Types ### ################################### -CDWS_US_MTV_2081_1: +CDWS_NONCANONICAL_1: id: "2724350807288840192" - description: "Non-standard 2081 CDWS" + description: "Non-standard CDWS" implements: - CDWS uses: diff --git a/ontology/yaml/resources/HVAC/entity_types/CH.yaml b/ontology/yaml/resources/HVAC/entity_types/CH.yaml index e6197c5ee..30165b752 100644 --- a/ontology/yaml/resources/HVAC/entity_types/CH.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/CH.yaml @@ -557,25 +557,25 @@ CH_SS_SCHWTC_CDWFRM_CHWSWISOVM_CWSISOVM_CHWDPM_CHWFRM_CWDT_REFPM_IGM_DXSWC: ### Existing Non-standard Types ### ################################### -CH_US_MTV_41_1: +CH_SS_SWTC_DX4SWC_SWISOVPM_NONCANONICAL_1: id: "16032487706168655872" - description: "Non-standard type for B41 CHs" + description: "Non-standard type." implements: - CH_SS_SWTC_DX4SWC_SWISOVPM - INCOMPLETE -CH_US_SBO_900_1: +CH_SS_SWTC_NONCANONICAL_1: id: "17436484890001408000" - description: "Non-standard type for SBO-900 CHs" + description: "Non-standard type." implements: - CH_SS_SWTC - INCOMPLETE uses: - cooling_percentage_sensor -CH_US_SBO_901_1: +CH_SS_SCHWTC_CWDT_NONCANONICAL_1: id: "11353247693330710528" - description: "Non-standard type for SBO-901 CHs" + description: "Non-standard type." implements: - CH_SS_SCHWTC_CWDT - INCOMPLETE @@ -584,7 +584,7 @@ CH_US_SBO_901_1: CH_SS_CHWDT_CWDT_CWDPM_CHWDPM_REFM: id: "15066838320539500544" - description: "Non-standard type for SYD ODI chillers" + description: "Non-standard type." is_canonical: false implements: - CH @@ -597,7 +597,7 @@ CH_SS_CHWDT_CWDT_CWDPM_CHWDPM_REFM: CH_SS_CHWDT2X_CWDT_CWDPM_CHWDPM_REFM: id: "2835061732601233408" - description: "Non-standard type for SYD ODI chillers" + description: "Non-standard type." is_canonical: false implements: - CH diff --git a/ontology/yaml/resources/HVAC/entity_types/CHWS.yaml b/ontology/yaml/resources/HVAC/entity_types/CHWS.yaml index 11824408d..7aa40bd4a 100644 --- a/ontology/yaml/resources/HVAC/entity_types/CHWS.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/CHWS.yaml @@ -240,7 +240,7 @@ CHWS_CLPM_WFRM_WDPC_WDT: implements: - CHWS - CLPM - - WFRM + - WFRM - WDPC - WDT @@ -291,9 +291,9 @@ CHWS_WDT_CWDT_CICHVISOVM3X: ### Existing Non-standard Types ### ################################### -CHWS_US_MTV_E475_1: +CHWS_SWTC_WDPC_BYPVPM_NONCANONICAL_1: id: "6339615408160505856" - description: "Non-standard type for E475" + description: "Non-standard type." implements: - CHWS_SWTC_WDPC_BYPVPM - INCOMPLETE @@ -305,9 +305,9 @@ CHWS_US_MTV_E475_1: - west_flowrate_sensor - east_flowrate_sensor -CHWS_US_SVL_MP4_1: #NEEDS FIXING, NOT SURE WHERE CHILLED POINTS CAME FROM... +CHWS_SWTC_WDPC2X_BYPVPM_WFRM_NONCANONICAL_1: id: "10652779621600198656" - description: "Non-standard type for MP4" + description: "Non-standard type." implements: - CHWS_SWTC_WDPC2X_BYPVPM_WFRM - INCOMPLETE @@ -316,9 +316,9 @@ CHWS_US_SVL_MP4_1: #NEEDS FIXING, NOT SURE WHERE CHILLED POINTS CAME FROM... - chilled_supply_water_temperature_setpoint - chilled_return_water_temperature_sensor -CHWS_US_MTV_1667_1: +CHWS_SWTC_WDPC_WFRM_PSWTC_PWVPM_MINFC_CLPM_NONCANONICAL_1: id: "3683617527918755840" - description: "Non-standard type for 1667" + description: "Non-standard type." implements: - CHWS_SWTC_WDPC_WFRM_PSWTC_PWVPM_MINFC_CLPM - DEPRECATED @@ -327,12 +327,12 @@ CHWS_US_MTV_1667_1: - process_water_flowrate_setpoint - process_cooling_thermal_power_sensor -CHWS_US_SVL_TC6_1: +CHWS_SWTC_WDPC_BYPVPM_WFRM_NONCANONICAL_1: id: "16982940741590319104" - description: "Non-standard type for TC6" + description: "Non-standard type." implements: - CHWS_SWTC_WDPC_BYPVPM_WFRM - INCOMPLETE uses: - production_differential_pressure_sensor - - supply_water_flowrate_sensor # Need to rename to flowrate_sensor \ No newline at end of file + - water_flowrate_sensor # Need to rename to flowrate_sensor \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/CMP.yaml b/ontology/yaml/resources/HVAC/entity_types/CMP.yaml index ca669b1b8..0cca2f5ee 100644 --- a/ontology/yaml/resources/HVAC/entity_types/CMP.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/CMP.yaml @@ -23,8 +23,6 @@ CMP_SS: implements: - CMP - SS - opt_uses: - - zone_control_cooling_command CMP_SS_WDPM: id: "4395946031578087424" diff --git a/ontology/yaml/resources/HVAC/entity_types/CT.yaml b/ontology/yaml/resources/HVAC/entity_types/CT.yaml index 98fbb2b27..ec3a1a0d5 100644 --- a/ontology/yaml/resources/HVAC/entity_types/CT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/CT.yaml @@ -16,6 +16,14 @@ ### Canonical Types ### ######################## +CT_SS: + id: "14895648758141288448" + description: "cooling tower with run command and status. " + is_canonical: true + implements: + - CT + - SS + CT_SS_SWTC: id: "6342104702485790720" description: "Simple supply temp controlling cooling tower." @@ -172,18 +180,18 @@ CT_SS_VSC_SPSS_SWTC_RWISOVM: ### Existing Non-standard Types ### ################################### -CT_US_SBO_901_1: +CT_SS_SWTC_NONCANONICAL_1: id: "6975748855526588416" - description: "Non-standard type for SBO-901" + description: "Non-standard type." implements: - CT_SS_SWTC - INCOMPLETE uses: - fan_speed_mode -CT_US_SVL_MP3_1: +CT_SS_VSC_SWTC_NONCANONICAL_1: id: "605248852936622080" - description: "Non-standard type for MP3" + description: "Non-standard type." implements: - CT_SS_VSC_SWTC - INCOMPLETE @@ -217,12 +225,4 @@ CT_SS_CWDT_OA_VSFC_CSWIVS_CRWIVS_CSWTC: - control_mode - run_mode - lost_power_alarm - - -CT_SS: - id: "14895648758141288448" - description: "cooling tower with run command and status. " - is_canonical: true - implements: - - CT - - SS \ No newline at end of file + diff --git a/ontology/yaml/resources/HVAC/entity_types/CU.yaml b/ontology/yaml/resources/HVAC/entity_types/CU.yaml index e568725a0..40122fbd8 100644 --- a/ontology/yaml/resources/HVAC/entity_types/CU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/CU.yaml @@ -12,6 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +######################## +### Canonical Types ### +######################## CU_SFSS_SFVSC_CHWSC_HTSC_SSPC_SARC_MTM: id: "14304102706304778240" @@ -27,9 +30,13 @@ CU_SFSS_SFVSC_CHWSC_HTSC_SSPC_SARC_MTM: - SARC - MTM -CU_US_NYC_9TH_16TH_1: +################################### +### Existing Non-standard Types ### +################################### + +CU_NONCANONICAL_1: id: "14637369078730194944" - description: "Type to describe ['US-NYC-9TH:CU:AHU-16-1-todd']" + description: "Non-standard type." is_canonical: false implements: - CU diff --git a/ontology/yaml/resources/HVAC/entity_types/DFR.yaml b/ontology/yaml/resources/HVAC/entity_types/DFR.yaml index fdf5f8172..85a74f42e 100644 --- a/ontology/yaml/resources/HVAC/entity_types/DFR.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/DFR.yaml @@ -64,9 +64,9 @@ DFR_SFSS_SFVSC_BYPSSPC_HTSC: ### Existing Non-standard Types ### ################################### -DFR_US_MTV_1098_1: # Instances: 1 +DFR_SFSS_BYPSSPC_HT2SC_RTM_NONCANONICAL_1: id: "13937821298232131584" - description: "Non-standard type for 1098" + description: "Non-standard type." implements: - DFR_SFSS_BYPSSPC_HT2SC_RTM - DEPRECATED @@ -74,9 +74,9 @@ DFR_US_MTV_1098_1: # Instances: 1 - heating_percentage_command_1 - heating_percentage_command_2 -DH_US_MTV_1965_1: # Instances: 3 actually a DF +DFR_SFSS_BYPSSPC_HT2SC_RTM_NONCANONICAL_2: id: "7551154076667346944" - description: "Non-standard type for 1965" + description: "Non-standard type." implements: - DFR_SFSS_BYPSSPC_HT2SC_RTM - DEPRECATED @@ -84,9 +84,9 @@ DH_US_MTV_1965_1: # Instances: 3 actually a DF - heating_percentage_command_1 - heating_percentage_command_2 -DH_US_MTV_1965_2: # Instances: 2 actually a DF +DFR_SFSS_BYPSSPC_HT2SC_RTM_NONCANONICAL_3: id: "16053950173142843392" - description: "Non-standard type for 1965" + description: "Non-standard type." implements: - DFR_SFSS_BYPSSPC_HT3SC_RTM - DEPRECATED diff --git a/ontology/yaml/resources/HVAC/entity_types/DH.yaml b/ontology/yaml/resources/HVAC/entity_types/DH.yaml index cd8f5da30..08ef1b7d2 100644 --- a/ontology/yaml/resources/HVAC/entity_types/DH.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/DH.yaml @@ -57,9 +57,9 @@ DH_SS_HTSC: ### Need to Remap These ### ############################ -DFR_US_PAO_HV4_2: +DFR_NONCANONICAL_1: id: "8271659648302448640" - description: "Non-standard type for HV4" + description: "Non-standard type." uses: - discharge_air_relative_humidity_sensor - discharge_air_temperature_sensor diff --git a/ontology/yaml/resources/HVAC/entity_types/DMP.yaml b/ontology/yaml/resources/HVAC/entity_types/DMP.yaml index e66af4252..ea84fe645 100644 --- a/ontology/yaml/resources/HVAC/entity_types/DMP.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/DMP.yaml @@ -83,14 +83,23 @@ DMP_EDBPC_ZTM: - EDBPC - ZTM +DMP_MFSD: + description: "Motorized fire smoke damper." + is_canonical: true + implements: + - DMP + - MFSD + uses: + - motorized_damper_run_command + - motorized_damper_run_status ################################### ### Existing Non-standard Types ### ################################### -DMP_US_MTV_900_1: +DMP_NONCANONICAL_1: id: "715815742225776640" - description: "Non-standard type for SBO-900" + description: "Non-standard type." implements: - DMP uses: @@ -100,9 +109,9 @@ DMP_US_MTV_900_1: - supply_air_damper_percentage_command_2 - west_building_air_static_pressure_sensor -DMP_US_SBO_901_1: +DMP_BPC_NONCANONICAL_1: id: "12983550758438830080" - description: "Non-standard type for SBO-901" + description: "Non-standard type." implements: - DMP - BPC diff --git a/ontology/yaml/resources/HVAC/entity_types/EHT.yaml b/ontology/yaml/resources/HVAC/entity_types/EHT.yaml index ec9883c6c..5e3818fe0 100644 --- a/ontology/yaml/resources/HVAC/entity_types/EHT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/EHT.yaml @@ -23,11 +23,3 @@ EHT_SS: implements: - EHT - SS - -EHT_SS_ALM: - description: "Basic Heat tracer with start/stop, control/status and trip alarm" - is_canonical: true - implements: - - EHT - - SS - - ALM \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/FAN.yaml b/ontology/yaml/resources/HVAC/entity_types/FAN.yaml index 9dff81ab4..78a725786 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FAN.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FAN.yaml @@ -27,8 +27,7 @@ FAN_SS: - SS opt_uses: - air_pressure_sensor - -### FAN SPEED CONTROL ### + - lost_power_alarm FAN_SS_VSC: id: "11689733435802255360" @@ -50,9 +49,6 @@ FAN_SS_RMM: - SS - RMM - -### ZONE TEMPERATURE CONTROL ### - FAN_SS_ZTM: id: "12256131457688272896" description: "Fan with zone temperature monitoring." @@ -160,8 +156,6 @@ FAN_ZTM_ZHM: - FAN - ZTM - ZHM - -### INTERLOCKED FANS ### FAN_SS_DRI: id: "3032759420833497088" @@ -203,9 +197,6 @@ FAN_SS_STM: - SS - STM - -### BUILDING STATIC PRESSURE CONTROL ### - FAN_SS_VSC_BSPC: id: "1881711484040380416" description: "Variable-speed fan for controlling space static pressure." @@ -317,7 +308,7 @@ FAN_SS_VSC_WDPC_STM_FDPSM4X: - WDPC - STM - FDPSM4X - + FAN_SS_VSC_EPC_ZSPM: id: "1890595537992810496" description: "Fan with exhaust static pressure control." @@ -359,7 +350,7 @@ FAN_SS_EFVSC: - FAN - SS - EFVSC - + FAN_SS_FDPM: id: "5483178313495085056" description: "Exhaust fan with filter monitoring." @@ -385,7 +376,7 @@ FAN_SS_DPM_ZHM_ZTM: - low_differential_pressure_alarm - lost_power_alarm - control_status - + FAN_SS_VSC_SSPM_OAFM_FDPM: id: "12715959315052101632" description: "Outside air fan with variable speed control, supply side pressure monitoring, outside air flow monitoring and filter monitoring." @@ -397,7 +388,7 @@ FAN_SS_VSC_SSPM_OAFM_FDPM: - SSPM - OAFM - FDPM - + FAN_SS_VSC_SSPM_OAFM: id: "9467175133857710080" description: "Outside air fan with variable speed control, supply side pressure monitoring, and outside air flow monitoring." @@ -408,7 +399,7 @@ FAN_SS_VSC_SSPM_OAFM: - VSC - SSPM - OAFM - + FAN_SS_VSC_ZTM_EFM: id: "15053327521657389056" description: "General exhaust fan with variable speed control, zone temperature monitoring, and exhaust air flow monitoring." @@ -419,7 +410,7 @@ FAN_SS_VSC_ZTM_EFM: - VSC - ZTM - EFM - + FAN_SS_VSFC: id: "6340656645672009728" description: "Fan with frequency command control" @@ -455,7 +446,7 @@ FAN_SS_VSC_EPC_EHHRC: - VSC - EPC - EHHRC - + FAN_SS_VSC_EHHRC: id: "17074194709137588224" description: "Fan with exhaust and heat recovery coils." @@ -465,7 +456,7 @@ FAN_SS_VSC_EHHRC: - SS - VSC - EHHRC - + FAN_SS_DWI2X: id: "4175885376348487680" description: "Dishwasher-interlocked fan." @@ -496,7 +487,7 @@ FAN_SS_VSC_SCRSS: - SS - VSC - SCRSS - + ################################### ### Existing Non-standard Types ### ################################### @@ -513,46 +504,46 @@ FAN_SS_EATC: - heating_water_valve_percentage_command - return_air_relative_humidity_sensor -FAN_US_MTV_1950_1: +FAN_SS_NONCANONICAL_1: id: "1697530092248367104" - description: "Non-standard type for 1950" + description: "Non-standard type." implements: - FAN_SS uses: - dryer_run_status_1 - dryer_run_status_2 -FAN_US_MTV_2081_1: +FAN_SS_VSC_NONCANONICAL_1: id: "4273589079104290816" - description: "Non-standard type for 2081" + description: "Non-standard type." implements: - FAN_SS_VSC uses: - exhaust_air_damper_command_1 - exhaust_air_damper_command_2 -FAN_US_MTV_FRC1_2: +FAN_SS_NONCANONICAL_2: id: "8479792801393934336" - description: "Non-standard type for FRC1 EFs" + description: "Non-standard type." implements: - FAN_SS - INCOMPLETE uses: - dryer_run_status -FAN_US_PAO_HV5_1: +FAN_SS_VSC_BSPC_NONCANONICAL_1: id: "2182792952097538048" - description: "Non-standard type for HV5" + description: "Non-standard type." implements: - FAN_SS_VSC_BSPC uses: # Should model as a separate device, not on this fan. - - exhaust_air_damper_percentage_command + - exhaust_air_damper_percentage_command - exhaust_air_static_pressure_sensor - exhaust_air_static_pressure_setpoint -FAN_US_PAO_HV5_3: +FAN_SS_VSC_BSPC_NONCANONICAL_2: id: "7722220493763248128" - description: "Non-standard type for HV5" + description: "Non-standard type." implements: - FAN_SS_VSC_BSPC uses: # Should model as a separate device, not on this fan. @@ -562,9 +553,9 @@ FAN_US_PAO_HV5_3: - exhaust_air_static_pressure_sensor - exhaust_air_static_pressure_setpoint -FAN_US_PAO_HV5_8: +FAN_SS_VSC_NONCANONICAL_2: id: "16945592530618023936" - description: "Non-standard type for HV5 EFs" + description: "Non-standard type." implements: - FAN_SS_VSC uses: # Should model as a separate device, not on this fan. @@ -572,33 +563,33 @@ FAN_US_PAO_HV5_8: - exhaust_air_static_pressure_sensor - exhaust_air_static_pressure_setpoint -FAN_US_SVL_BRG1_1: +FAN_SS_NONCANONICAL_3: id: "17292369701925552128" - description: "Non-standard type for BRG1" + description: "Non-standard type." implements: - FAN_SS uses: - zone_occupancy_status -FAN_US_SVL_BRG1_2: +FAN_SS_NONCANONICAL_4: id: "15710480332811665408" - description: "Non-standard type for BRG1" + description: "Non-standard type." implements: - FAN_SS uses: - exhaust_air_damper_command - exhaust_air_damper_status -FAN_US_SVL_MP1_3: +FAN_SS_VSC_FDPM_DRSM5X_NONCANONICAL_1: id: "10022275673768329216" - description: "Non-standard type for MP1" + description: "Non-standard type." implements: - FAN_SS_VSC_FDPM_DRSM5X - INCOMPLETE -FAN_US_SVL_MP3_1: +FAN_SS_VSC_NONCANONICAL_3: id: "7518274280950333440" - description: "Non-standard type for MP3" + description: "Non-standard type." implements: - FAN_SS_VSC - INCOMPLETE @@ -606,9 +597,9 @@ FAN_US_SVL_MP3_1: - differential_pressure_sensor - discharge_air_temperature_sensor -FAN_US_SVL_MP3_3: +FAN_SS_NONCANONICAL_5: id: "2681408281154420736" - description: "Non-standard type for MP3" + description: "Non-standard type." implements: - FAN_SS - DEPRECATED @@ -620,34 +611,44 @@ FAN_US_SVL_MP3_3: - dryer_run_status_5 - filter_differential_pressure_sensor -FAN_US_SVL_MP4_3: +FAN_SS_NONCANONICAL_6: + id: "2629158389090877440" + description: "Non-canonical fan which uses differential airflow measured in a space to provide pressure balancing." + is_canonical: false + implements: + - FAN_SS + uses: + - exhaust_air_differential_flowrate_sensor + - exhaust_air_differential_flowrate_setpoint + +FAN_SS_VSC_BSPC_NONCANONICAL_3: id: "16746149917432479744" - description: "Non-standard type for MP4" + description: "Non-standard type." implements: - FAN_SS_VSC_BSPC uses: - exhaust_air_damper_percentage_command_1 - exhaust_air_damper_percentage_command_2 -FAN_US_SVL_MP4_4: +FAN_SS_VSC_NONCANONICAL_4: id: "9950218079730401280" - description: "Hash:b0ca60c549d1ba9493310cb1e832003a645a704cb4e659e28312336fc8048222; Entities: US-SVL-MP4:FAN:KEF-1 SF" + description: "Non-standard type." implements: - FAN_SS_VSC uses: - discharge_air_temperature_sensor - exhaust_air_static_pressure_sensor -FAN_US_SVL_MP5_3: +FAN_SS_DRSM8X_NONCANONICAL_1: id: "17570308649241280512" - description: "Hash:baa9cc8812ae9b36bd430ca2574f7a3a5a003479d6623ff75573535ea8a3a467; Entities: US-SVL-MP5:FAN:EF 1-6" + description: "Non-standard type" implements: - FAN_SS_DRSM8X - DEPRECATED -FAN_US_SVL_MP5_4: +FAN_SS_VSC_NONCANONICAL_5: id: "8806303774378295296" - description: "Non-standard type for MP5" + description: "Non-standard type." implements: - FAN_SS_VSC - INCOMPLETE @@ -655,16 +656,16 @@ FAN_US_SVL_MP5_4: - dishwasher_run_status_1 - dishwasher_run_status_2 -FAN_US_SVL_MP5_5: +FAN_SS_ZTM_NONCANONICAL_1: id: "425104867841802240" - description: "Non-standard type for MP5" + description: "Non-standard type." implements: - FAN_SS_ZTM - INCOMPLETE -FAN_US_SVL_MP7_2: +FAN_SS_VSC_NONCANONICAL_6: id: "2357149107983745024" - description: "Non-standard type for MP7" + description: "Non-standard type." implements: - FAN_SS_VSC uses: @@ -725,7 +726,7 @@ FAN_SS_VSC_EPC_EHHRC_EHHRC3X: - heat_recovery_water_isolation_valve_command_2 - heat_recovery_water_isolation_valve_command_3 -FAN_SS_FDPM_VSC_SRC: +FAN_SS_FDPM_VSC_SRC: id: "4892604229937528832" description: "Fan with power, voltage, current, differential pressure and run durating monitoring ." is_canonical: true @@ -736,7 +737,7 @@ FAN_SS_FDPM_VSC_SRC: - VSC - SRC -FAN_SS_MSM: +FAN_SS_MSM: id: "278666411696455680" description: "Basic fan with speed monitoring (used in jet-fans for ventilation purpose)" implements: diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index 5f6382e85..ebe49ea5f 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -88,8 +88,8 @@ FCU_DFSS2X_CHWRC_DAIDC2X_RAIDC2X: is_canonical: true opt_uses: - failed_alarm - - drain_pump_failed_alarm_1 - - drain_pump_failed_alarm_2 + - failed_drain_pump_alarm_1 + - failed_drain_pump_alarm_2 implements: - FCU - DFSS2X @@ -239,6 +239,18 @@ FCU_DFSS_DSP_HTZC_DXZC: - HTZC - DXZC +FCU_DFSS_DSP_HTZC_DXZC_DFSMC: + id: "12727354653562372096" + description: "DX fan coil with reheat (zone temp control)." + is_canonical: true + implements: + - FCU + - DFSS + - DSP + - HTZC + - DXZC + - DFSMC + FCU_DFSS_DSP_HTZC_HPZC: id: "10456565174553804800" description: "Heat pump fan coil with reheat (zone temp control)." @@ -432,7 +444,7 @@ FCU_DFSS_DFVSC_RTC_RHC_RHDHC_DXRC: - RHC - RHDHC - DXRC - + FCU_DFSS_DFVSC_CHWRC_RHDHC: id: "14452659921356849152" description: "Variable speed DX fan coil with chilled water return temp control and humidification/dehumidification." @@ -456,7 +468,7 @@ FCU_DFSS_DTM_CHWRC: - DFSS - DTM - CHWRC - + FCU_DFSS_DFHLC_DSP_DXZC: id: "12762408183767498752" description: "Mult-speed DX fan coil with zone temp control." @@ -491,6 +503,18 @@ FCU_DFSS_DFMSC_DSP_DXZC: - DSP - DXZC +FCU_DFSS_DFMSC_DSP_DXZC_DAIDC: + id: "14889082474700210176" + description: "Multi-speed DX fan coil with zone temp control, and discharge air isolation damper control." + is_canonical: true + implements: + - FCU + - DFSS + - DFMSC + - DSP + - DXZC + - DAIDC + FCU_DFSS_DFMSC_DSP_HPZC: id: "12185947431464075264" description: "Multi-speed heat pump fan coil with zone temp control." @@ -524,6 +548,29 @@ FCU_DFSS_DFMSC_CSP_DXZC: - CSP - DXZC +FCU_DFSS_DFMSC_CSP_DXZC_DAIDC: + id: "10745770817519353856" + description: "DX fan coil with multi-speed control (zone control) and discharge isolation damper control." + is_canonical: true + implements: + - FCU + - DFSS + - DFMSC + - CSP + - DXZC + - DAIDC + +FCU_DFSS_CSP_DXZC_DAIDC: + id: "8639775041770225664" + description: "DX fan coil with discharge isolation damper control." + is_canonical: true + implements: + - FCU + - DFSS + - CSP + - DXZC + - DAIDC + FCU_DFSS_DFMSC_RTC_DXRC: id: "14852078410867408896" description: "DX fan coil with multi-speed control (return temp)." @@ -824,7 +871,7 @@ FCU_DFSS_DFRMM_DXRC_RHC_HTRC_REFPM: - REFPM opt_uses: - filter_alarm - + FCU_SS_ZTM: id: "11594563007836848128" description: "FCU with zone temperature monitoring and start/stop control." @@ -852,7 +899,7 @@ FCU_HPZTC_CO2C: - FCU - HPZTC - CO2C - + FCU_DFVSMC_CHWBRC: id: "15348700325343133696" description: "Chilled water FCU with chilled water percentage mode, discharge fan mode and return air temp control." @@ -1053,7 +1100,7 @@ FCU_DFSS_CHWDC_DFVSC_ZTC: - filter_alarm - discharge_air_linearvelocity_sensor - schedule_run_command - + FCU_CHWRC_DFSS_RHDHC: id: "4146805492817068032" description: "FCU with chilled water coil and return air relative humidity control." @@ -1083,7 +1130,7 @@ FCU_DFSS_DFVSC_DPBHCC: - DFSS - DFVSC - DPBHCC - + FCU_DFSS_DFMSC_CHWZC_DSP: id: "536976877433126912" description: "Multi-speed CHW fan coil with zone temp control." @@ -1130,9 +1177,9 @@ FCU_DFSS_DXRC_RHDHC_AL: opt_uses: - filter_alarm - master_alarm - - heat_exchange_failed_alarm - - water_leak_alarm - + - failed_heat_exchange_alarm + - water_leak_alarm + FCU_DFVSC_CHWRC_FDPSM2X: id: "521860791574462464" description: "FCU with VFD ,return air temperature based Chilled water valve modulation, pre filter and fine filter status,return air humidity monitoring" @@ -1144,8 +1191,49 @@ FCU_DFVSC_CHWRC_FDPSM2X: - FDPSM2X opt_uses: - isolation_damper_status - - + +FCU_CHWDC_DFSS_DXDC_DFVSC_REFPM_ZHC_DFRMM_CHWDT: + id: "14561832629901983744" + description: "CRAC with chilled water temperature monitoring and compressor monitoring with zone temperature and humidity monitoring." + is_canonical: true + implements: + - FCU + - CHWDC + - DFSS + - DXDC + - DFVSC + - REFPM + - ZHC + - DFRMM + - CHWDT + +FCU_DFSS_DX2DC_DFVSC_REFPM2X_ZHC_DFRMM: + id: "14115976266792304640" + description: "CRAC with dual compressor with temperature monitoring and compressor monitoring with humidity monitoring." + is_canonical: true + implements: + - FCU + - DFSS + - DX2DC + - DFVSC + - REFPM2X + - ZHC + - DFRMM + +FCU_DFSS_DFVSC_FDPM_CHWDC_SRC_DFRMM: + id: "11307981899126800384" + description: "FCU with temperature control, humidity monitor with electrical parameter monitoring." + is_canonical: true + implements: + - FCU + - DFSS + - DFVSC + - FDPM + - CHWDC + - SRC + - DFRMM + + ################################### ### Existing Non-standard Types ### ################################### @@ -1161,9 +1249,9 @@ FCU_DFS_CH_RTC_RRHM_HMDHMM: - dehumidification_run_status - return_air_relative_humidity_sensor -FCU_US_MTV_43_5: +FCU_DFSS_DTC_CHWDC_NONCANONICAL_1: id: "14036267171336683520" - description: "Non-standard type for B43" + description: "Non-standard type." implements: - FCU_DFSS_DTC_CHWDC - INCOMPLETE @@ -1171,18 +1259,18 @@ FCU_US_MTV_43_5: - discharge_air_cooling_temperature_setpoint - discharge_air_heating_temperature_setpoint -FCU_US_MTV_43_6: +FCU_DFSS_ZTC_ZHDHC_DXZTC_NONCANONICAL_1: id: "15441390255076278272" - description: "Non-standard type for B43 CRACs" + description: "Non-standard type." implements: - FCU_DFSS_ZTC_ZHDHC_DXZTC - INCOMPLETE uses: - economizer_mode -FCU_US_MTV_41_1: +FCU_DFSS_DSP_HWZC_CHWZC_NONCANONICAL_1: id: "10490667627200905216" - description: "Non-standard type for B41" + description: "Non-standard type." implements: - FCU_DFSS_DSP_HWZC_CHWZC - INCOMPLETE @@ -1192,26 +1280,26 @@ FCU_US_MTV_41_1: - discharge_air_temperature_sensor_3 - discharge_air_temperature_sensor_4 -FCU_US_SVL_MP7_3: # DO NOT DEPRECATE +FCU_DFSS_CSP_DXZC_NONCANONICAL_1: id: "7320115897346031616" - description: "Non-standard type for MP7 FCs" + description: "Non-standard type." implements: - FCU_DFSS_CSP_DXZC - INCOMPLETE uses: - discharge_air_damper_command -FCU_US_SVL_MP7_6: +FCU_DFSS_CSP_DXZC_NONCANONICAL_2: id: "11218139704509595648" - description: "Non-standard type for MP7 FCs" + description: "Non-standard type." implements: - FCU_DFSS_CSP_DXZC uses: - discharge_air_damper_command -FCU_US_MTV_GWC1_1: +FCU_DFSS_DSP_HTZC_DXZC_NONCANONICAL_1: id: "9779098886076366848" - description: "Non-standard type for GWC1" + description: "Non-standard type." implements: - FCU_DFSS_DSP_HTZC_DXZC - INCOMPLETE @@ -1220,27 +1308,27 @@ FCU_US_MTV_GWC1_1: - zone_air_temperature_sensor_2 - zone_air_temperature_sensor_3 -FCU_US_PAO_HV1_1: +FCU_DFSS_DFVSC_RTC_RHC_RHDHC_DXRC_NONCANONICAL_1: id: "1151468637429694464" - description: "Non-standard type for HV1 CRACs" + description: "Non-standard type." implements: - FCU_DFSS_DFVSC_RTC_RHC_RHDHC_DXRC - INCOMPLETE uses: - humidification_percentage_command -FCU_US_SVL_MP5_7: +FCU_DFSS_DFVSC_DSP_HWDC_CHWDC_NONCANONICAL_1: id: "10076318869296775168" - description: "Non-standard type for MP5 FCs" + description: "Non-standard type." implements: - FCU_DFSS_DFVSC_DSP_HWDC_CHWDC uses: - heating_water_valve_status - chilled_water_valve_command -FCU_US_SVL_MP3_3: +FCU_DFSS_DFVSC_DSP_HWDC_CHWDC_NONCANONICAL_2: id: "1573522772821278720" - description: "Non-standard type for MP3" + description: "Non-standard type." implements: - FCU_DFSS_DFVSC_DSP_HWDC_CHWDC - INCOMPLETE @@ -1248,9 +1336,9 @@ FCU_US_SVL_MP3_3: - zone_air_co2_concentration_sensor - zone_air_co2_concentration_setpoint -FCU_US_SVL_MP4_6: +FCU_DFSS_DFVSC_DSP_HWDC_CHWDC_NONCANONICAL_3: id: "3194818638674657280" - description: "Non-standard type for MP4 FCs" + description: "Non-standard type." implements: - FCU_DFSS_DFVSC_DSP_HWDC_CHWDC - INCOMPLETE @@ -1259,18 +1347,18 @@ FCU_US_SVL_MP4_6: - zone_air_co2_concentration_setpoint - mixed_air_temperature_sensor -FCU_US_MTV_1250_1: +FCU_DF2XSS_RTC_DXRC_NONCANONICAL_1: id: "3089142377105850368" - description: "Non-standard type for 1250" + description: "Non-standard type." implements: - FCU_DF2XSS_RTC_DXRC - INCOMPLETE uses: - discharge_fan_run_command -FCU_US_MTV_2011_1: +FCU_DF2XSS_RTC_DXRC_NONCANONICAL_2: id: "8717516011412127744" - description: "Non-standard type for 2011" + description: "Non-standard type." implements: - FCU_DFSS_RTC_DXRC - INCOMPLETE @@ -1278,9 +1366,9 @@ FCU_US_MTV_2011_1: - discharge_air_temperature_setpoint - zone_air_relative_humidity_sensor -FCU_UK_LON_6PS_1: +FCU_DFSS_DFVSC_ZTC_CHWZTC_HWZTC_NONCANONICAL_1: id: "15721651370949869568" - description: "Non-standard type for 6PS" + description: "Non-standard type." implements: - FCU_DFSS_DFVSC_ZTC_CHWZTC_HWZTC uses: @@ -1291,9 +1379,9 @@ FCU_UK_LON_6PS_1: - master_alarm - run_mode -FCU_UK_LON_6PS_2: +FCU_DFSS_DFVSC_ZTC_CHWZTC_HWZTC_NONCANONICAL_2: id: "14172413099134418944" - description: "Non-standard type for 6PS" + description: "Non-standard type." implements: - FCU_DFSS_DFVSC_ZTC_CHWZTC_HWZTC uses: @@ -1306,9 +1394,9 @@ FCU_UK_LON_6PS_2: - exercise_mode -FCU_UK_LON_6PS_3: +FCU_NONCANONICAL_1: id: "3805126756927537152" - description: "Non-standard type for 6PS" + description: "Non-standard type." implements: - FCU uses: @@ -1334,45 +1422,45 @@ FCU_UK_LON_6PS_3: - zone_occupancy_status_2 - zone_occupancy_status_3 -FCU_US_MTV_1667_1: +FCU_DFSS_CSP_ZHC_DXZC_NONCANONICAL_1: id: "10200326188723863552" - description: "Non-standard type for 1667 CRACs" + description: "Non-standard type." implements: - FCU_DFSS_CSP_ZHC_DXZC - INCOMPLETE uses: - zone_air_relative_humidity_setpoint -FCU_US_MTV_1950_2: +FCU_DFSS_CSP_DXZC_NONCANONICAL_3: id: "1557918503799881728" - description: "Non-standard type for 1950 WSHPs" + description: "Non-standard type." implements: - FCU_DFSS_CSP_DXZC - INCOMPLETE uses: - condensing_water_isolation_valve_command -FCU_US_MTV_2171_2: +FCU_DF2XSS_DSP_DXZC_NONCANONICAL_1: id: "14021700841291907072" - description: "Non-standard type for 2171 FCs" + description: "Non-standard type." implements: - FCU_DF2XSS_DSP_DXZC - INCOMPLETE uses: - discharge_fan_run_status -FCU_US_MTV_PR55_1: +FCU_DFSS_CSP_DXZC_NONCANONICAL_4: id: "10794801339536769024" - description: "Non-standard type for PR55 WSHPs" + description: "Non-standard type." implements: - FCU_DFSS_CSP_DXZC - INCOMPLETE uses: - chilled_water_valve_command -FCU_US_MTV_946_2: # Weird dehumidification unit. Complete one-off. +FCU_NONCANONICAL_2: # Weird dehumidification unit. Complete one-off. id: "6100660745119203328" - description: "Non-standard type for 946 FCs" + description: "Non-standard type." implements: - FCU uses: @@ -1392,18 +1480,18 @@ FCU_US_MTV_946_2: # Weird dehumidification unit. Complete one-off. - zone_air_heating_temperature_setpoint - zone_air_temperature_sensor -FCU_US_MTV_1600_2: +FCU_DFSS_RTC_CHWRC_RHC_NONCANONICAL_1: id: "14099950884817469440" - description: "Non-standard type for 1600 CRACs" + description: "Non-standard type." implements: - FCU_DFSS_RTC_CHWRC_RHC - INCOMPLETE uses: - compressor_run_command -FCU_US_MTV_1950_3: +FCU_DFSS_DSPRTC_DXDSPRTC_NONCANONICAL_1: id: "10065218199902748672" - description: "Non-standard type for 1950 CRACs" + description: "Non-standard type." implements: - FCU_DFSS_DSPRTC_DXDSPRTC - INCOMPLETE @@ -1444,7 +1532,7 @@ FCU_CHWZTC2X_HT2XZTC2X_DFVSC2X: - CHWZTC2X - HT2XZTC2X - DFVSC2X - + FCU_RTM_DXZTC_SRC: id: "12582289487440117760" description: "FCU with SS, supply and return temp sensors, zone control and sensor, schedule run, filter change and general fail alarm" @@ -1457,8 +1545,17 @@ FCU_RTM_DXZTC_SRC: uses: - filter_alarm - lost_power_alarm - -#Additional types for CH ZRH EURD + +FCU_DXZTC: + description: "FCU with SS, discharge temp sensors, zone control and sensor, filter change" + is_canonical: true + implements: + - FCU + - DXZTC + uses: + - panel_controller_status + - filter_alarm + FCU_NON_CANONICAL_TYPE_1: id: "17300095970133934080" description: "Typical chilled water FCU with cooling-only (discharge control) for MDF rooms, @@ -1493,7 +1590,7 @@ FCU_NON_CANONICAL_TYPE_2: - water_leak_alarm - condensate_water_pump_alarm - master_alarm - - supply_fan_failed_alarm + - failed_supply_fan_alarm - return_air_temperature_sensor - return_air_temperature_setpoint @@ -1512,7 +1609,7 @@ FCU_NON_CANONICAL_TYPE_3: - chilled_supply_water_temperature_sensor - chilled_return_water_temperature_sensor - master_alarm - - supply_fan_failed_alarm + - failed_supply_fan_alarm - condensate_water_pump_alarm - return_air_temperature_sensor - return_air_temperature_setpoint @@ -1555,69 +1652,24 @@ FCU_RTC_RHDHS_DTM_DFSS: - compressor_run_status_1 - compressor_run_status_2 opt_uses: - - discharge_fan_failed_alarm + - failed_discharge_fan_alarm - low_discharge_air_flowrate_alarm - master_alarm - water_leak_alarm - fire_alarm - schedule_run_command - -#PAC Unit # -FCU_CHWDC_DFSS_DXDC_DFVSC_REFPM_ZHC_DFRMM_CHWDT: - id: "14561832629901983744" - description: "CRAC with chilled water temperature monitoring and compressor monitoring with zone temperature and humidity monitoring." - is_canonical: true - implements: - - FCU - - CHWDC - - DFSS - - DXDC - - DFVSC - - REFPM - - ZHC - - DFRMM - - CHWDT -#PAC Unit # -FCU_DFSS_DX2DC_DFVSC_REFPM2X_ZHC_DFRMM: - id: "14115976266792304640" - description: "CRAC with dual compressor with temperature monitoring and compressor monitoring with humidity monitoring." - is_canonical: true - implements: - - FCU - - DFSS - - DX2DC - - DFVSC - - REFPM2X - - ZHC - - DFRMM - -#CSU canonical# -FCU_DFSS_DFVSC_FDPM_CHWDC_SRC_DFRMM: - id: "11307981899126800384" - description: "FCU with temperature control, humidity monitor with electrical parameter monitoring." - is_canonical: true - implements: - - FCU - - DFSS - - DFVSC - - FDPM - - CHWDC - - SRC - - DFRMM - -FCU_RHDHS_DTM_DFSS_STM_DTC_SHM_SFVSC_ALM_SS_SRC: - description: "FCU with temperature control, humidity monitor with electrical parameter monitoring." +FCU_RHDHS_DXSC_SHM_RTC: + description: "FCU with temperature control, humidity monitor with electrical parameter monitoring and water leak alarm." is_canonical: true implements: - FCU - RHDHS - - DTM - - DFSS - - STM - - DTC + - DXSC - SHM - - SFVSC - - ALM - - SS - - SRC \ No newline at end of file + - RTC + uses: + - water_leak_detection_alarm + - supply_fan_run_status + - low_discharge_air_flowrate_alarm + - failed_alarm diff --git a/ontology/yaml/resources/HVAC/entity_types/FRZ.yaml b/ontology/yaml/resources/HVAC/entity_types/FRZ.yaml index d5832d375..902941f84 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FRZ.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FRZ.yaml @@ -16,9 +16,6 @@ ### Canonical Types ### ######################## -### FREEZER ### - - FRZ_DXZTC_DFSS: id: "12904507967029641216" description: "Freezer with discharge fan run duration monitoring with compressor run control ." @@ -41,4 +38,3 @@ FRZ_DFSS_DEFSS_DEFSTC_DXZTC: opt_uses: - run_time_accumulator - master_alarm - \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml index bdd3608ad..c1f9b35aa 100644 --- a/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml @@ -372,7 +372,7 @@ GTWS: - thermal_power_capacity - differential_pressure_specification - flowrate_requirement - + CRREF: id: "4809287636831174656" description: "Tag for coldroom refigeration." diff --git a/ontology/yaml/resources/HVAC/entity_types/HUM.yaml b/ontology/yaml/resources/HVAC/entity_types/HUM.yaml index d02622aca..c859ff989 100644 --- a/ontology/yaml/resources/HVAC/entity_types/HUM.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/HUM.yaml @@ -12,11 +12,18 @@ # See the License for the specific language governing permissions and # limitations under the License. -### TODO: Create standard versions when we have more examples +######################## +### Canonical Types ### +######################## -HUM_US_MTV_946_1: + +################################### +### Existing Non-standard Types ### +################################### + +HUM_NONCANONICAL_1: id: "3434529765715869696" - description: "946 Humidifiers" + description: "Non-standard type." implements: - HUM uses: @@ -24,10 +31,9 @@ HUM_US_MTV_946_1: - humidification_percentage_command - humidification_percentage_sensor - -HUM_US_SVL_BRG1_1: +HUM_NONCANONICAL_2: id: "5330809091629514752" - description: "BRG1 Humidifiers" + description: "Non-standard type." implements: - HUM uses: diff --git a/ontology/yaml/resources/HVAC/entity_types/HWS.yaml b/ontology/yaml/resources/HVAC/entity_types/HWS.yaml index be596df25..a375c742c 100644 --- a/ontology/yaml/resources/HVAC/entity_types/HWS.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/HWS.yaml @@ -16,6 +16,14 @@ ### Canonical Types ### ######################## +HWS_SS: + id: "8438977830259261440" + description: "Simple hot water system with status only" + is_canonical: true + implements: + - HWS + - SS + HWS_SWTC: id: "17871319748554260480" description: "Simple heating water system with supply temp control." @@ -177,6 +185,9 @@ HWS_SWTC_WDPC_SWTCSCM_WDPCSCM: - HWS_SWTC_WDPC - SWTCSCM - WDPCSCM + opt_uses: + - supervisor_run_command + - run_command HWS_SS_ALS: id: "10375881911795974144" @@ -306,9 +317,9 @@ HWS_SS_HWTTC_PWDPM2X: ### Existing Non-standard Types ### ################################### -HWS_US_SVL_MAT2_1: +HWS_SWTC_WDPC2X_NONCANONICAL_1: id: "8016273883495661568" - description: "Non-standard type for MAT2" + description: "Non-standard type." implements: - HWS_SWTC_WDPC2X - DEPRECATED @@ -316,9 +327,9 @@ HWS_US_SVL_MAT2_1: - return_water_temperature_sensor_1 - return_water_temperature_sensor_2 -HWS_US_MTV_2000_2: +HWS_RWTC_MXVPM_NONCANONICAL_1: id: "17278858903043440640" - description: "Non-standard type for 2000" + description: "Non-standard type." implements: - HWS_RWTC_MXVPM - DEPRECATED @@ -326,7 +337,6 @@ HWS_US_MTV_2000_2: - mixing_valve_percentage_command - heat_exchange_supply_water_isolation_valve_command -# Non Standard Types for CH ZRH EURD HWS_SWTC_CPC: id: "8626163087818358784" description: "Simple hot water system with circulation pump" @@ -339,9 +349,3 @@ HWS_SWTC_CPC: - circulation_pump_speed_percentage_setpoint - failed_alarm -HWS_SS: - id: "8438977830259261440" - description: "Simple hot water system with status only" - implements: - - HWS - - SS diff --git a/ontology/yaml/resources/HVAC/entity_types/HX.yaml b/ontology/yaml/resources/HVAC/entity_types/HX.yaml index ff82684e7..c31579fea 100644 --- a/ontology/yaml/resources/HVAC/entity_types/HX.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/HX.yaml @@ -111,7 +111,7 @@ HX_VSC_SSPC_SFM_STM_RTM_OA_FDPM2X: - RTM - OA - FDPM2X - + HX_VSC_SSPC_SFM_STM_RTM_OA: id: "13515911198863785984" description: "Air to air fan forced heat exchanger with airflow and temperature." diff --git a/ontology/yaml/resources/HVAC/entity_types/MAU.yaml b/ontology/yaml/resources/HVAC/entity_types/MAU.yaml index 63908d90b..3db3236ae 100644 --- a/ontology/yaml/resources/HVAC/entity_types/MAU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/MAU.yaml @@ -374,6 +374,7 @@ MAU_DFSS_DFVSC_HTDC_CO2C: MAU_DFSS_DFVSC_HTDC_OFC_CO2C: id: "4468522595104325632" + is_canonical: true description: "Exhaust fan with start/stop, status, and flowrate control." implements: - HTDC @@ -383,65 +384,6 @@ MAU_DFSS_DFVSC_HTDC_OFC_CO2C: - MAU - OFC -############################ -### Remap These Types ### -############################ - -MAU_US_MTV_1225_1: # Needs remapping -- actually an AHU. - id: "4444233283735126016" - description: "Non-standard type for 1225 ACs" - implements: - - REMAP_REQUIRED # Actually an AHU. - uses: - - building_air_static_pressure_setpoint - - compressor_run_command_1 - - compressor_run_command_2 - - compressor_run_command_3 - - compressor_run_command_4 - - economizer_mode - - exhaust_fan_run_status - - return_air_temperature_sensor - - supply_air_static_pressure_sensor - - supply_fan_run_command - - supply_fan_run_status - - supply_air_flowrate_sensor - -MAU_US_MTV_900_1: # Looks removed from the controller (no graphics left). - id: "14298672218375192576" - description: "Non-standard type for 900" - implements: - - REMAP_REQUIRED - uses: - - exhaust_fan_run_status - -MAU_US_MTV_QD7_2: # Changed in the BMS - id: "17838431156744224768" - description: "Non-standard type for QD7" - implements: - - REMAP_REQUIRED # Changed in the BMS - uses: - - supply_fan_run_status - -MAU_US_PAO_HV3_2: # Actually an AHU. - id: "13847115986987122688" - description: "Non-standard type for HV3" - implements: - - REMAP_REQUIRED # Actually an AHU. - uses: - - building_air_static_pressure_sensor - - building_air_static_pressure_setpoint - - compressor_run_command - - compressor_speed_percentage_command - - economizer_mode - - heating_water_valve_percentage_command - - outside_air_damper_percentage_command - - return_air_temperature_sensor - - supply_air_static_pressure_setpoint - - supply_air_temperature_sensor - - supply_air_temperature_setpoint - - supply_fan_run_status - - supply_fan_speed_percentage_command - MAU_SFSS_SFVSC_CHWSDC_HTSDC_BPC: id: "12347953872747102208" description: "Heating and cooling make-up air unit with dual supply control." @@ -518,7 +460,7 @@ MAU_SFSS_SFVSC_SFC_DXSC_HTSC_ZTM_ZSPM: - HTSC - ZTM - ZSPM - + MAU_DFSS_DSP_FDPM_HT2ZC_OAFC: id: "12146816912143155200" description: "Single zone with two-stage heating, and supply flow control." @@ -659,29 +601,132 @@ MAU_SFVSC_CHWSC_SSPC_FDPSM2X: - SSPC - FDPSM2X opt_uses: - - supply_air_isolation_damper_status + - supply_air_isolation_damper_status + +MAU_FDPM_SSPC_STC_SHM_SFVSC3X_SFSS3X: + id: "2586761220723834880" + description: "Air purifier unit (MAU) with 3 fan with differential pressure, static pressure, temperature, humidity and electrical parameter monitoring. " + is_canonical: true + implements: + - MAU + - FDPM + - SSPC + - STC + - SHM + - SFVSC3X + - SFSS3X + +MAU_SFSS_FDPM_SSPM_STM_SHM: + id: "6696295880699412480" + description: "makeup Air Unit with run command, status, dufferential pressure, static T,RH, monitoring and control" + is_canonical: true + implements: + - MAU + - SFSS + - FDPM + - SSPM + - STM + - SHM + +MAU_DFMSC_DFVSC_FDPM_DTM: + id: "9745232828429238272" + description: "Makeup Air Unit with discharge air monitoring along with fan speed control" + is_canonical: true + implements: + - MAU + - DFMSC + - DFVSC + - FDPM + - DTM + +MAU_DFSS_DFVSC_HWDDC_DX2DDC_ZTM_DFM: + id: "11852530425945653248" + description: "Makeup air unit with discharge air flowrate monitoring and dual setpoint control." + is_canonical: true + implements: + - MAU + - DFSS + - DFVSC + - HWDDC + - DX2DDC + - ZTM + - DFM + +############################ +### Remap These Types ### +############################ + +MAU_NONCANONICAL_1: + id: "4444233283735126016" + description: "Non-standard type." + implements: + - REMAP_REQUIRED # Actually an AHU. + uses: + - building_air_static_pressure_setpoint + - compressor_run_command_1 + - compressor_run_command_2 + - compressor_run_command_3 + - compressor_run_command_4 + - economizer_mode + - exhaust_fan_run_status + - return_air_temperature_sensor + - supply_air_static_pressure_sensor + - supply_fan_run_command + - supply_fan_run_status + - supply_air_flowrate_sensor + +MAU_NONCANONICAL_2: + id: "14298672218375192576" + description: "Non-standard type." + implements: + - REMAP_REQUIRED + uses: + - exhaust_fan_run_status + +MAU_NONCANONICAL_3: + id: "17838431156744224768" + description: "Non-standard type." + implements: + - REMAP_REQUIRED + uses: + - supply_fan_run_status + +MAU_NONCANONICAL_4: + id: "13847115986987122688" + description: "Non-standard type." + implements: + - REMAP_REQUIRED # Actually an AHU. + uses: + - building_air_static_pressure_sensor + - building_air_static_pressure_setpoint + - compressor_run_command + - compressor_speed_percentage_command + - economizer_mode + - heating_water_valve_percentage_command + - outside_air_damper_percentage_command + - return_air_temperature_sensor + - supply_air_static_pressure_setpoint + - supply_air_temperature_sensor + - supply_air_temperature_setpoint + - supply_fan_run_status + - supply_fan_speed_percentage_command + ################################### ### Existing Non-standard Types ### ################################### -### Types requiring remapping: -### - MAU_US_MTV_1225_1 (actually an AHU) -### - MAU_US_MTV_900_1 (appears changed in the controller) -### - MAU_US_MTV_QD7_2 (appears changed in the controller) -### - MAU_US_PAO_HV3_2 (actually an AHU) - -MAU_US_MTV_1201_1: +MAU_DFSS_DFVSC_BPC_DXDC_HTDC_DSP_NONCANONICAL_1: id: "6867662464469696512" - description: "Non-standard type for 1201" + description: "Non-standard type." implements: - MAU_DFSS_DFVSC_BPC_DXDC_HTDC_DSP - INCOMPLETE uses: - outside_air_damper_percentage_command -MAU_US_MTV_2000_1: +MAU_DFSS_DFVSC_DSP_CHWZC_HWZC_NONCANONICAL_1: id: "201209116054519808" - description: "Non-standard type for 2000" + description: "Non-standard type." implements: - MAU_DFSS_DFVSC_DSP_CHWZC_HWZC - DEPRECATED @@ -689,63 +734,63 @@ MAU_US_MTV_2000_1: - discharge_air_flowrate_sensor - discharge_air_static_pressure_sensor -MAU_US_MTV_2015_1: +MAU_SFSS_SFVSC_HWSC_DX2SC_HT4SC_SSPC_NONCANONICAL_1: id: "1786546553633112064" - description: "Non-standard type for 2015" + description: "Non-standard type." implements: - MAU_SFSS_SFVSC_HWSC_DX2SC_HT4SC_SSPC - INCOMPLETE uses: - zone_air_temperature_sensor -MAU_US_MTV_2644_2: +MAU_SFSS_SFVSC_DXSC_SSPC_HTSC_NONCANONICAL_1: id: "15104746182930333696" - description: "Non-standard type for 2644" + description: "Non-standard type." implements: - MAU_SFSS_SFVSC_DXSC_SSPC_HTSC - INCOMPLETE uses: - outside_air_damper_percentage_command -MAU_US_MTV_2644_3: +MAU_SFSS_SFVSC_DXSC_HTSC_NONCANONICAL_2: id: "5656194164707033088" - description: "Non-standard type for 2644" + description: "Non-standard type." implements: - MAU_SFSS_SFVSC_DXSC_HTSC - INCOMPLETE uses: - outside_air_damper_percentage_command -MAU_US_MTV_43_2: +MAU_SFSS_CHWSC_HT4SC_NONCANONICAL_1: id: "1507253007991963648" - description: "Non-standard type for B43" + description: "Non-standard type." implements: - MAU_SFSS_CHWSC_HT4SC - INCOMPLETE uses: - zone_air_temperature_sensor -MAU_US_MTV_CL4_1: +MAU_DFSS_DFVSC_DSP_HTSC_NONCANONICAL_1: id: "16140644465969725440" - description: "Non-standard type for CL4" + description: "Non-standard type." implements: - MAU_DFSS_DFVSC_DSP_HTSC - INCOMPLETE uses: - spray_pump_run_command -MAU_US_MTV_PR55_1: +MAU_SFSS_SFVSC_HTSC_BPC_NONCANONICAL_1: id: "6795604870431768576" - description: "Non-standard type for PR55" + description: "Non-standard type." implements: - MAU_SFSS_SFVSC_HTSC_BPC - INCOMPLETE uses: - evaporative_cooler_run_command -MAU_US_MTV_QD7_3: +MAU_SFSS_SFVSC_SSPC_HT2SC_DX2SC_NONCANONICAL_1: id: "8853749900140085248" - description: "Non-standard type for QD7" + description: "Non-standard type." implements: - MAU_SFSS_SFVSC_SSPC_HT2SC_DX2SC - INCOMPLETE @@ -753,9 +798,9 @@ MAU_US_MTV_QD7_3: - zone_air_temperature_sensor - zone_air_temperature_setpoint # Has static control -MAU_US_MTV_SB65_1: +MAU_SFSS_SFVSC_HTSC_DX2SC_SSPC_NONCANONICAL_1: id: "12506169197937557504" - description: "Non-standard type for SB65" + description: "Non-standard type." implements: - MAU_SFSS_SFVSC_HTSC_DX2SC_SSPC - INCOMPLETE @@ -763,57 +808,21 @@ MAU_US_MTV_SB65_1: - zone_air_temperature_sensor - heating_request_count -MAU_US_PAO_MIR1_1: +MAU_SFSS_SFVSC_HTSC_BPC_SHM_NONCANONICAL_1: id: "11307085797150162944" - description: "Non-standard type for MIR1" + description: "Non-standard type." implements: - MAU_SFSS_SFVSC_HTSC_BPC_SHM - DEPRECATED uses: - evaporative_cooler_run_command -MAU_US_SBO_1000_1: +MAU_SFSS_SFVSC_HTSC_BPC_SHM_NONCANONICAL_2: id: "6703281078070673408" - description: "Non-standard type for SBO-1000" + description: "Non-standard type." implements: - MAU_SFSS_SFVSC_HTSC_BPC_SHM - DEPRECATED uses: - humidification_run_command -#New canonical# -MAU_FDPM_SSPC_STC_SHM_SFVSC3X_SFSS3X: - id: "2586761220723834880" - description: "Air purifier unit (MAU) with 3 fan with differential pressure, static pressure, temperature, humidity and electrical parameter monitoring. " - implements: - - MAU - - FDPM - - SSPC - - STC - - SHM - - SFVSC3X - - SFSS3X - - -#Canonical for Air washers# -MAU_SFSS_FDPM_SSPM_STM_SHM: - id: "6696295880699412480" - description: "makeup Air Unit with run command, status, dufferential pressure, static T,RH, monitoring and control" - implements: - - MAU - - SFSS - - FDPM - - SSPM - - STM - - SHM - - -MAU_DFMSC_DFVSC_FDPM_DTM: - id: "9745232828429238272" - description: "Makeup Air Unit with discharge air monitoring along with fan speed control" - implements: - - MAU - - DFMSC - - DFVSC - - FDPM - - DTM diff --git a/ontology/yaml/resources/HVAC/entity_types/PMP.yaml b/ontology/yaml/resources/HVAC/entity_types/PMP.yaml index ce8a12bbc..032203746 100644 --- a/ontology/yaml/resources/HVAC/entity_types/PMP.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/PMP.yaml @@ -91,7 +91,7 @@ PMP_SS_CHWISOVPM_VSFC: - lost_power_alarm - low_differential_pressure_alarm - chilled_water_differential_pressure_setpoint - + PMP_SS_VSC_WDPC_WFRC: id: "14706550350349860864" description: "Pump with variable speed control, differential pressure control and flow control." @@ -102,7 +102,7 @@ PMP_SS_VSC_WDPC_WFRC: - VSC - WDPC - WFRC - + PMP_SS_VSC_SWTC: id: "6293826246421774336" description: "Pump with variable speed control and supply water temperature control" @@ -112,7 +112,7 @@ PMP_SS_VSC_SWTC: - SS - VSC - SWTC - + PMP_SS_CWCS_VSFC: id: "15564028682526785536" description: "PMP device with condensing water valve and pump frequency control" @@ -139,12 +139,12 @@ PMP_SS_RMM: - failed_alarm - low_pressure_status - high_pressure_status - + ################################### ### Existing Non-standard Types ### ################################### -PMP_S_VFCF: +PMP_SS_VSC_NONCANONICAL_1: id: "9598937308795502592" description: "Non-standard variable speed pump." implements: @@ -153,7 +153,7 @@ PMP_S_VFCF: uses: - speed_frequency_command -PMP_S_VSCF_ISV: +PMP_SS_VSC_NONCANONICAL_2: id: "8905453334924623872" description: "One-off pump that performs chilled water blending." implements: diff --git a/ontology/yaml/resources/HVAC/entity_types/SDC.yaml b/ontology/yaml/resources/HVAC/entity_types/SDC.yaml index ab33fd6ab..d04e0c1ba 100644 --- a/ontology/yaml/resources/HVAC/entity_types/SDC.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/SDC.yaml @@ -22,6 +22,8 @@ SDC_EXT: is_canonical: true implements: - SDC + opt_uses: + - shade_extent_percentage_sensor uses: - shade_extent_percentage_command diff --git a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml index 5981949ad..9f65fdd3f 100644 --- a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml @@ -203,9 +203,9 @@ SENSOR_AQT: - outside_air_no_concentration_sensor - outside_air_h2s_concentration_sensor - outside_air_ozone_concentration_sensor - - outside_air_pm2pt5_density_sensor + - outside_air_pm2pt5_density_sensor - outside_air_pm10pt0_density_sensor - + SENSOR_COC: id: "7894253381579964416" description: "Carbon monoxide monitoring and control" @@ -213,7 +213,7 @@ SENSOR_COC: implements: - /SENSOR - COC - + SENSOR_PCM: id: "5133546810001850368" description: "Particulate matter monitoring" @@ -221,7 +221,7 @@ SENSOR_PCM: implements: - /SENSOR - PCM - + SENSOR_ZA_CO2M_PMM_HCHO: id: "8268052150651715584" description: "Sensor with zone temperature, humidity, CO2, HCHO and particulate matter monitoring" @@ -233,7 +233,7 @@ SENSOR_ZA_CO2M_PMM_HCHO: - CO2M - PMM uses: - - zone_air_formaldehyde_concentration_sensor + - zone_air_formaldehyde_concentration_sensor SENSOR_WDPM: description: "Sensor with differential pressure monitor" @@ -241,4 +241,10 @@ SENSOR_WDPM: implements: - /SENSOR - WDPM - \ No newline at end of file + +SENSOR_SPM: + description: "Sensor with static pressure monitor" + is_canonical: true + implements: + - /SENSOR + - SPM \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/TANK.yaml b/ontology/yaml/resources/HVAC/entity_types/TANK.yaml index 085739e7c..a73193a72 100644 --- a/ontology/yaml/resources/HVAC/entity_types/TANK.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/TANK.yaml @@ -23,23 +23,23 @@ TK_SWTC_PHWTC: description: "Tank with water temperature monitoring" is_canonical: true implements: - - /TK # Inherits from global namespace + - /TK # Inherits from global namespace - SWTC - PHWTC - -TK_LM_PLPM: + +TK_LM_PLPM: id: "10267650385204215808" description: "Tank with level and pipeline pressure monitoring " is_canonical: true implements: - - /TK # Inherits from global namespace + - /TK # Inherits from global namespace - LM - PLPM -TK_LM: +TK_LM: id: "12505939400007352320" description: "Tank with level monitoring " is_canonical: true implements: - - /TK # Inherits from global namespace + - /TK # Inherits from global namespace - LM \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/VAV.yaml b/ontology/yaml/resources/HVAC/entity_types/VAV.yaml index a59fea2bb..e2a80f88b 100644 --- a/ontology/yaml/resources/HVAC/entity_types/VAV.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/VAV.yaml @@ -444,7 +444,7 @@ VAV_RD_DSPRTC: - VAV - RD - DSPRTC - + VAV_RD_DSPRTC_ZSPC: id: "6507566908814917632" description: "Return control VAV with return cooling control and zone pressure control." @@ -455,53 +455,6 @@ VAV_RD_DSPRTC_ZSPC: - DSPRTC - ZSPC -################################### -### Existing Non-standard Types ### -################################### - -VAV_US_MTV_1250_1: - id: "17018776024562794496" - description: "Non-standard type for 1250" - implements: - - VAV_SD_DSP_HWDC - - INCOMPLETE - uses: - - heating_percentage_command - -VAV_US_MTV_2017_2: - id: "1012842211399696384" - description: "Non-standard type for 2017" - implements: - - VAV_SD_DSP_HTDC - - INCOMPLETE - uses: - - heating_percentage_command - -VAV_US_MTV_43_1: - id: "16125937398436593664" - description: "Non-standard type for B43" - implements: - - VAV_SD_CSP - uses: - - discharge_air_temperature_setpoint # Needs to be removed from this device. Then deprecate. - -VAV_US_PAO_MIR3_2: - id: "1877251864878120960" - description: "Non-standard type for MIR3" - implements: - - VAV_SD_CSP - uses: - - supply_air_isolation_damper_command - -DMP_US_MTV_1708_2: # Is Actually a VAV - id: "1373130181589336064" - description: "Non-standard type for 1700 CDs" - implements: - - VAV - - SD - - DDSP - - INCOMPLETE - VAV_SD_ZTC_AHAC: id: "11563037810445254656" description: "Single duct VAV with zone set-point control and after hours push button activation." @@ -520,8 +473,7 @@ VAV_ZTC_DTM: - VAV - ZTC - DTM - -#Additional Types for CH_ZRH_EURD + VAV_SD_CO2C: id: "1276288495949709312" description: "CO2 control VAV, regardless of room temperature for single duct supply air VAV's" @@ -551,7 +503,6 @@ VAV_SD_CO2C_HLSAFS_SRC: - HLSAFS - SRC -# Additional type for FR-PAR-50A VAV_HWZTC_CHWZTC_DTM: id: "3139001930890608640" description: "A zone VAV with heating and cooling control, but no flow control; part of DOAS system where air volume is not measured or controlled locally, but instead controlled by the upstream equipment." @@ -560,4 +511,51 @@ VAV_HWZTC_CHWZTC_DTM: - VAV - HWZTC - CHWZTC - - DTM \ No newline at end of file + - DTM + +################################### +### Existing Non-standard Types ### +################################### + +VAV_SD_DSP_HWDC_NONCANONICAL_1: + id: "17018776024562794496" + description: "Non-standard type." + implements: + - VAV_SD_DSP_HWDC + - INCOMPLETE + uses: + - heating_percentage_command + +VAV_SD_DSP_HTDC_NONCANONICAL_1: + id: "1012842211399696384" + description: "Non-standard type." + implements: + - VAV_SD_DSP_HTDC + - INCOMPLETE + uses: + - heating_percentage_command + +VAV_SD_CSP_NONCANONICAL_1: + id: "16125937398436593664" + description: "Non-standard type." + implements: + - VAV_SD_CSP + uses: + - discharge_air_temperature_setpoint # Needs to be removed from this device. Then deprecate. + +VAV_SD_CSP_NONCANONICAL_2: + id: "1877251864878120960" + description: "Non-standard type." + implements: + - VAV_SD_CSP + uses: + - supply_air_isolation_damper_command + +VAV_SD_DDSP_NONCANONICAL_1: + id: "1373130181589336064" + description: "Non-standard type." + implements: + - VAV + - SD + - DDSP + - INCOMPLETE diff --git a/ontology/yaml/resources/HVAC/entity_types/VLV.yaml b/ontology/yaml/resources/HVAC/entity_types/VLV.yaml index b35a3fa4b..fbd4cf5b9 100644 --- a/ontology/yaml/resources/HVAC/entity_types/VLV.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/VLV.yaml @@ -41,7 +41,7 @@ VLV_CHWPVM: implements: - VLV - CHWPVM - + VLV_HWPVM: id: "12747484512443695104" description: "Heating water pressure control valve." @@ -49,7 +49,7 @@ VLV_HWPVM: implements: - VLV - HWPVM - + VLV_CDWPVM: id: "8149309292898418688" description: "Condensing water pressure control valve." @@ -64,4 +64,11 @@ VLV_SWCM: is_canonical: true implements: - VLV - - SWCM \ No newline at end of file + - SWCM + +VLV_MWCM: + description: "Motorized water valve control and monitoring." + is_canonical: true + implements: + - VLV + - MWCM \ No newline at end of file diff --git a/ontology/yaml/resources/LIGHTING/entity_types/LGRP.yaml b/ontology/yaml/resources/LIGHTING/entity_types/LGRP.yaml index 11647e9ea..45b4a47e8 100644 --- a/ontology/yaml/resources/LIGHTING/entity_types/LGRP.yaml +++ b/ontology/yaml/resources/LIGHTING/entity_types/LGRP.yaml @@ -235,9 +235,9 @@ LGRP_OS_LSC_ENM: - LSC - ENM opt_uses: - - total_lamp_failed_counter - - total_wireless_device_failed_counter - - total_communication_failed_counter + - total_failed_lamp_counter + - total_failed_wireless_device_counter + - total_failed_communication_counter #Noncanonical types LGRP_DC_MS_IM: @@ -248,4 +248,4 @@ LGRP_DC_MS_IM: - LGRP - DC - MS - - IM \ No newline at end of file + - IM diff --git a/ontology/yaml/resources/METERS/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/METERS/entity_types/ABSTRACT.yaml index ffea8e72c..3af2ad3b6 100644 --- a/ontology/yaml/resources/METERS/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/METERS/entity_types/ABSTRACT.yaml @@ -22,8 +22,6 @@ PWM: opt_uses: - apparent_power_sensor - reactive_power_sensor - - apparentpower_sensor - - reactivepower_sensor - powerfactor_sensor - line_frequency_sensor - apparent_energy_accumulator diff --git a/ontology/yaml/resources/METERS/entity_types/EM.yaml b/ontology/yaml/resources/METERS/entity_types/EM.yaml index d65bcf05f..301efa453 100644 --- a/ontology/yaml/resources/METERS/entity_types/EM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/EM.yaml @@ -27,14 +27,14 @@ EM_PLPM: implements: - EM - PLPM - + EM_PWMRDM: id: "5027712218758643712" description: "Energy metering from Grid Electricity and Diesel Generator." is_canonical: true implements: - EM - - PWMRDM + - PWMRDM EM_PWM_PVCM: id: "9147692239198093312" @@ -95,7 +95,7 @@ EM_PWM_PWMRDM: implements: - EM - PWM - - PWMRDM + - PWMRDM ############################# ### Non-Canonical Devices ### @@ -108,34 +108,34 @@ EM_ION: - EM_PWM_AVCM_PLPM_PVCM - DEPRECATED -EM_US_MTV_1200_1: +EM_PWM_NONCANONICAL_1: id: "2029916855371563008" - description: "Entities: US-MTV-1200:power-meter-MAIN_Meter, US-MTV-E475:power-meter-MAIN_Meter, US-MTV-GWC4:power-meter-MAIN_Meter, US-MTV-LMK5:power-meter-MAIN_Meter, US-MTV-SB75:power-meter-MAIN_Meter, US-PAO-1010:power-meter-MAIN_Meter, US-PAO-1129:power-meter-MAIN_Meter, US-SVL-CRSM1265:power-meter-MAIN_Meter, US-SVL-MP2:power-meter-MAIN_Meter, US-SVL-MP4:power-meter-MAIN_Meter, US-SVL-MP5:power-meter-MAIN_Meter" + description: "Non-standard type." implements: - EM_PWM uses: - average_line_current_sensor - average_inter_line_voltage_sensor -EM_US_MTV_PR55_1: +EM_PWM_PLPM_PVCM_NONCANONICAL_1: id: "4660019037755932672" - description: "Non-standard type for US-MTV-PT55 Main meter." + description: "Non-standard type." implements: - EM_PWM_PLPM_PVCM uses: - average_line_neutral_voltage_sensor - average_inter_line_voltage_sensor -EM_US_SVL_TC1_1: +EM_PWM_NONCANONICAL_2: id: "3723270315262869504" - description: "Non-standard type for TC Main meters." + description: "Non-standard type." implements: - EM_PWM uses: - average_line_current_sensor - average_inter_line_voltage_sensor -EM_NONCANONICAL_1: +EM_PWM_PLPM_PVCM_NONCANONICAL_2: id: "15021802324265795584" description: "SE PM5100 Meter" uses: diff --git a/ontology/yaml/resources/METERS/entity_types/HM.yaml b/ontology/yaml/resources/METERS/entity_types/HM.yaml index c6bff2334..17f35a1b2 100644 --- a/ontology/yaml/resources/METERS/entity_types/HM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/HM.yaml @@ -52,7 +52,6 @@ HM_CHW_WAC: uses: - water_volume_accumulator -#New type for CH ZRH EURD HM_HW: id: "3199325536836911104" description: "Heating load heat meter." diff --git a/ontology/yaml/resources/METERS/entity_types/WM.yaml b/ontology/yaml/resources/METERS/entity_types/WM.yaml index 0e4281595..3cd3408e9 100644 --- a/ontology/yaml/resources/METERS/entity_types/WM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/WM.yaml @@ -22,17 +22,15 @@ WM_STANDARD: - water_volume_accumulator opt_uses: - failed_alarm - - flowrate_sensor WM_WF: id: "5379261270530719744" - description: "Water supply flow rate meter with counter." + description: "Water flow rate meter with counter." implements: - WM is_canonical: true uses: - - supply_water_flowrate_sensor + - water_flowrate_sensor opt_uses: - - supply_water_volume_accumulator - water_linearvelocity_sensor - water_volume_accumulator diff --git a/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml index a6da2f7d4..bcf23a9b8 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml @@ -34,4 +34,25 @@ LVLM: - level_status opt_uses: - percentage_sensor - \ No newline at end of file + +WCR: + description: "Water conditioner" + is_abstract: true + uses: + - run_status + implements: + - EQUIPMENT + +WSR: + description: "Water softener" + is_abstract: true + uses: + - run_status + implements: + - EQUIPMENT + +AL: + description: "Tag for those with alarms" + is_abstract: true + implements: + - EQUIPMENT \ No newline at end of file diff --git a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml index 7448a4d2a..2387567b5 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml @@ -35,6 +35,7 @@ PMP: - EQUIPMENT RO: + id: "8115668635134984192" description: "Reverse osmosis is a water purification process that uses a semi-permeable membrane (synthetic lining) to filter out unwanted molecules and large particles such as contaminants and sediments like chlorine, salt, and dirt from drinking water." is_abstract: true implements: diff --git a/ontology/yaml/resources/PLUMBING/entity_types/RO.yaml b/ontology/yaml/resources/PLUMBING/entity_types/RO.yaml index 4d3a017cb..ace306a79 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/RO.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/RO.yaml @@ -19,6 +19,7 @@ RO_STD: + id: "6134084799091965952" description: "Standard RO water system." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/WTR.yaml b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml similarity index 94% rename from ontology/yaml/resources/SAFETY/entity_types/WTR.yaml rename to ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml index 7519afce2..e50775e8e 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/WTR.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml @@ -26,12 +26,12 @@ WSR_STD: - water_flowrate_status - run_mode -WSR_ALM: +WSR_AL: description: "Standard water softener with alarms." is_canonical: true implements: - WSR - - ALM + - AL uses: - run_status opt_uses: diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index b6a634dbe..d060ee4d9 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -95,40 +95,10 @@ LM: description: "Tank level monitoring." is_abstract: true uses: - - level_status + - level_status -HDS: - description: "Standard Hydrogen sensor." +AL: + description: "Tag for those with alarms" is_abstract: true implements: - - EQUIPMENT - -WCR: - description: "Water conditioner" - is_abstract: true - uses: - - run_status - implements: - - EQUIPMENT - -WSR: - description: "Water softener" - is_abstract: true - uses: - - run_status - implements: - - EQUIPMENT - -ALM: - description: "Tag for basic alarms" - is_abstract: true - opt_uses: - - fire_alarm - - supervisor_alarm - - primary_smoke_alarm - - secondary_smoke_alarm - - emergency_alarm - - lost_power_alarm - implements: - - EQUIPMENT - + - EQUIPMENT \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index cbf0e4941..9c84fc7d7 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -34,30 +34,38 @@ FACP_FA2X: opt_uses: - panel_alarm -FACP_ALM_PAS: +FACP_AL_PAS: id: "10168360087169531904" description: "Fire alarm panel with Pre-action suppression." is_canonical: true implements: - FACP - - ALM + - AL uses: + - fire_alarm + - supervisor_alarm - water_flowrate_status - air_pressure_status -FACP_ALM: +FACP_AL: description: "Fire alarm panel with alarm." is_canonical: true implements: - FACP - - ALM + - AL + uses: + - fire_alarm + - supervisor_alarm -FACP_FA2X_ALM_GS: +FACP_FA2X_AL_GS: description: "Fire alarm panel with 2-level alarm and gas suppression." is_canonical: true implements: - FACP - FA2X - - ALM + - AL uses: + - primary_fire_alarm + - secondary_fire_alarm + - supervisor_alarm - gas_release_status \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/FD.yaml b/ontology/yaml/resources/SAFETY/entity_types/FD.yaml index 232eb4be5..3bf770587 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FD.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FD.yaml @@ -31,7 +31,3 @@ FD_SD: uses: - damper_percentage_sensor - damper_percentage_command - opt_uses: - - run_command - - run_status - \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index 05e370e36..b762cc673 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -24,10 +24,14 @@ FSS_STD: uses: - fire_alarm -FSS_ASD_ALM: +FSS_ASD_AL: description: "Basic aspirating type, fire suppression with alarms." is_canonical: true implements: - FSS - ASD - - ALM \ No newline at end of file + uses: + - primary_smoke_alarm + - secondary_smoke_alarm + - fire_alarm + - supervisor_alarm \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml index 0b2387f56..0812b8750 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml @@ -77,6 +77,7 @@ LDS: - EQUIPMENT RDT: + id: "15357456835946741760" description: "Rodent Repellent System" is_abstract: true implements: @@ -108,3 +109,9 @@ ASD: is_abstract: true implements: - EQUIPMENT + +HDS: + description: "Hydrogen sensor." + is_abstract: true + implements: + - EQUIPMENT diff --git a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml index 5dce667e5..afc427301 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml @@ -1,24 +1,22 @@ -# Copyright 2022 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the License); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an AS IS BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -### CANONICAL TYPES - -HDS_STD: - description: "Hydrogen sensor." - implements: - - HDS - is_canonical: true - uses: - - particle_concentration_sensor +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +HDS_STD: + description: "Standard Hydrogen sensor." + implements: + - HDS + is_canonical: true + uses: + - particle_concentration_sensor - particle_concentration_alarm \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/HS.yaml b/ontology/yaml/resources/SAFETY/entity_types/HS.yaml index 89296d90b..03f4e5f75 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/HS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/HS.yaml @@ -23,10 +23,11 @@ HS_STD: uses: - run_status -HS_ALM: +HS_AL: id: "6601509182292099072" description: "Horn strobe with alarm." is_canonical: true implements: - HS - - ALM \ No newline at end of file + uses: + - emergency_alarm \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/RDT.yaml b/ontology/yaml/resources/SAFETY/entity_types/RDT.yaml index 5523f547d..3ff0c67b2 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/RDT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/RDT.yaml @@ -15,10 +15,10 @@ ### ABSTRACT TYPES RDT_STD: + id: "3828241789878272000" description: "Standard Rodent Repellent." is_canonical: true implements: - RDT uses: - transducer_failed_alarm - diff --git a/ontology/yaml/resources/fields/telemetry_fields.yaml b/ontology/yaml/resources/fields/telemetry_fields.yaml index b3385fdb0..b0d3c4ea8 100644 --- a/ontology/yaml/resources/fields/telemetry_fields.yaml +++ b/ontology/yaml/resources/fields/telemetry_fields.yaml @@ -422,8 +422,6 @@ literals: ## Added on 2019/02/21 - return_air_cooling_temperature_setpoint - return_air_heating_temperature_setpoint - -## Added on 2019/02/25 for US-MTV-45 - condensing_fan_speed_percentage_command ## Added on 2019/02/27 @@ -442,6 +440,8 @@ literals: - east_exhaust_air_damper_percentage_command - exhaust_air_flowrate_sensor - exhaust_air_flowrate_setpoint +- exhaust_air_differential_flowrate_sensor +- exhaust_air_differential_flowrate_setpoint - fan_speed_mode: - OFF - LOW @@ -582,7 +582,6 @@ literals: # Added on 2019/09/12 for Enlighted: generic light level sensor - illuminance_sensor -# Added on 2019/09/26 for US-NYC-9TH - condensing_water_bypass_valve_percentage_command - condensing_water_valve_percentage_command @@ -614,7 +613,7 @@ literals: - water_volume_accumulator - gas_temperature_sensor -# Added 12/17/2019 for UK-LON-S2 FCU +# Added 12/17/2019 - cooling_water_valve_percentage_command - cooling_water_valve_percentage_sensor - cooling_water_flowrate_sensor @@ -703,7 +702,7 @@ literals: - drain_pump_run_status: - ON - OFF -- drain_pump_failed_alarm: +- failed_drain_pump_alarm: - ACTIVE - INACTIVE - water_low_level_status: @@ -716,9 +715,8 @@ literals: - ON - OFF -# Added 10/5/20 for TW-NTC-TPKD # Additional functionality for alarms and status points. -# For alarms, they will end in `alarm` and be two-state. +# For alarms, they will end in `alarm` and be two-state. # Status fields must be distinguished from alarms in that status is an objective qualitative state (flowing/not) whereas alarms are judgmental interpretations of such statuses to draww a conclusion about function (alarm/normal) - average_supply_air_temperature_sensor @@ -732,7 +730,7 @@ literals: - high_limit_supply_air_cooling_flowrate_setpoint - high_limit_supply_air_heating_flowrate_setpoint - low_limit_supply_air_ventilation_flowrate_setpoint -- low_limit_supply_air_flowrate_setpoint +- low_limit_supply_air_flowrate_setpoint - high_limit_supply_air_flowrate_setpoint # used when the device doesn't necessarily provide a cooling max flow - schedule_run_command: - ON @@ -746,7 +744,6 @@ literals: - ON - OFF -# added for ETIQA - water_leak_cable_distance_sensor - discharge_air_linearvelocity_setpoint @@ -793,7 +790,7 @@ literals: - master_alarm: - ACTIVE - INACTIVE -- supply_fan_failed_alarm: +- failed_supply_fan_alarm: - ACTIVE - INACTIVE - smoke_alarm: @@ -829,13 +826,13 @@ literals: - refrigerant_low_pressure_status: - ACTIVE - INACTIVE -- humidifier_failed_alarm: +- failed_humidifier_alarm: - ACTIVE - INACTIVE -- heat_exchange_failed_alarm: +- failed_heat_exchange_alarm: - ACTIVE - INACTIVE -- compressor_failed_alarm: +- failed_compressor_alarm: - ACTIVE - INACTIVE @@ -852,7 +849,7 @@ literals: - max_battery_voltage_sensor - min_battery_temperature_sensor - min_battery_voltage_sensor -- battery_failed_alarm: +- failed_battery_alarm: - ACTIVE - INACTIVE - brightness_percentage_command @@ -907,14 +904,29 @@ literals: - INACTIVE - load_bypass_mode: - OFF - - BYPASS + - ON +- battery_mode: + - OFF + - ON - gas_release_status: - OPEN - CLOSED -# apparent_power_sensor (and reactive_power_sensor) has error on units and can't be resolved -# but using these has no errors -- apparentpower_sensor -- reactivepower_sensor +- panel_controller_status: + - NORMAL + - UNKNOWN +- static_pressure_sensor +- motorized_valve_run_command: + - CLOSED + - OPEN +- motorized_valve_run_status: + - CLOSED + - OPEN +- motorized_damper_run_command: + - CLOSED + - OPEN +- motorized_damper_run_status: + - CLOSED + - OPEN - emergency_release_status: - ACTIVE @@ -935,7 +947,7 @@ literals: - ACTIVE - INACTIVE - frequency_sensor -- discharge_fan_failed_alarm: +- failed_discharge_fan_alarm: - ACTIVE - INACTIVE - discharge_air_linearvelocity_sensor @@ -964,7 +976,7 @@ literals: - MANUAL - source1_lost_power_alarm: - ACTIVE - - INACTIVE + - INACTIVE - source2_lost_power_alarm: - ACTIVE - INACTIVE @@ -1000,19 +1012,14 @@ literals: - POSITIONB - POSITIONC - -# Added for UK-LON-S2 - - zone_air_voc_percentage_setpoint - zone_air_voc_percentage_sensor -# Added for US-NYC-9TH - zone_air_unoccupied_heating_temperature_setpoint - zone_air_occupied_heating_temperature_setpoint - mixed_air_relative_humidity_sensor - mixed_air_dewpoint_temperature_sensor -# Added for TW - supply_air_isolation_damper_closed_status - supply_air_isolation_damper_open_status - control_status: @@ -1035,7 +1042,7 @@ literals: - low_return_air_relative_humidity_alarm: - ACTIVE - INACTIVE -- chilled_water_valve_failed_alarm: +- failed_chilled_water_valve_alarm: - ACTIVE - INACTIVE - discharge_fan_speed_frequency_command @@ -1055,7 +1062,6 @@ literals: - ON - OFF -# Added for ETIQA - return_air_co2_concentration_sensor - return_air_co2_concentration_setpoint @@ -1063,6 +1069,9 @@ literals: - supervisor_control_mode: - ENABLED - DISABLED +- supervisor_run_command: + - ON + - OFF - supervisor_supply_air_static_pressure_setpoint - supervisor_supply_air_temperature_setpoint - program_supply_air_static_pressure_setpoint @@ -1072,7 +1081,6 @@ literals: - program_supply_water_temperature_setpoint - program_differential_pressure_setpoint -#Additional fields for CH ZRH EURD - radiant panels - condensate_water_alarm: - ACTIVE - INACTIVE @@ -1107,7 +1115,6 @@ literals: - heating_supply_water_isolation_valve_percentage_sensor - heating_return_water_isolation_valve_percentage_sensor -#Additional fields for CH ZRH EURD - FCU's - maintenance_alarm: - ACTIVE - INACTIVE @@ -1115,7 +1122,6 @@ literals: - ACTIVE - INACTIVE -#Additional fields for CH ZRH EURD - Lighting - average_illuminance_sensor - illuminance_setpoint - scene_dimmer_percentage_command @@ -1131,7 +1137,7 @@ literals: - dimmer_mode: - FADING - RAMPING -- dimmer_failed_alarm: +- failed_dimmer_alarm: - ACTIVE - INACTIVE - power_command: @@ -1156,7 +1162,6 @@ literals: - BYPASS - STANDBY -#Additional fields for CH ZRH EURD HVAC - bypass_air_damper_percentage_sensor - circulation_pump_speed_percentage_command - circulation_pump_speed_percentage_setpoint @@ -1169,7 +1174,7 @@ literals: - exhaust_air_static_pressure_status: - PRESENT - ABSENT -- exhaust_fan_failed_alarm: +- failed_exhaust_fan_alarm: - ACTIVE - INACTIVE - return_air_damper_percentage_sensor @@ -1199,7 +1204,7 @@ literals: - circuitbreaker_status: - ON - OFF -- circuitbreaker_failed_alarm: +- failed_circuitbreaker_alarm: - ACTIVE - INACTIVE @@ -1335,8 +1340,8 @@ literals: - ACTIVE - INACTIVE -# added for WM_WFR -- water_flowrate_sensor +# added for WM_WFR +- water_flowrate_sensor # added for FAN_ST - air_pressure_sensor @@ -1413,8 +1418,8 @@ literals: - load_percentage_sensor - bypass_status: - BYPASS - - INACTIVE -- inverter_failed_alarm: + - INACTIVE +- failed_inverter_alarm: - ACTIVE - INACTIVE @@ -1460,7 +1465,7 @@ literals: - transducer_failed_alarm: - ACTIVE - INACTIVE - + # Buffer tanks with temperature sensors - chilled_water_temperature_sensor - heating_water_temperature_sensor @@ -1623,7 +1628,7 @@ literals: - OFF - low_discharge_fan_speed_status: - ON - - OFF + - OFF ##Fields for generator## - oil_temperature_sensor @@ -1636,13 +1641,13 @@ literals: #Telemetry addition for MAU# -#Telemetry fields for APU(MAU)# +#Telemetry fields for APU(MAU)# - dc_voltage_sensor - ac_voltage_sensor - supply_fan_run_mode: - AUTO - - MANUAL -- supply_fan_run_time_accumulator + - MANUAL +- supply_fan_run_time_accumulator - exhaust_fan_run_mode: - AUTO - MANUAL @@ -1699,12 +1704,15 @@ literals: - supply_fan_energy_accumulator - compressor_run_time_accumulator -- total_lamp_failed_counter -- total_wireless_device_failed_counter -- total_communication_failed_counter +- total_failed_lamp_counter +- total_failed_wireless_device_counter +- total_failed_communication_counter ## New fields for seismic detector - seismic_alarm ## New fields for RO water system -- water_totaldissolvedsolids_concentration_sensor \ No newline at end of file +- water_totaldissolvedsolids_concentration_sensor + +## New field for SDC +- shade_extent_percentage_sensor diff --git a/ontology/yaml/resources/states/states.yaml b/ontology/yaml/resources/states/states.yaml index 5b05bd839..f348725d0 100644 --- a/ontology/yaml/resources/states/states.yaml +++ b/ontology/yaml/resources/states/states.yaml @@ -70,6 +70,7 @@ NOSOURCE: "An operation mode having no source as priority" POSITIONA: "Automatic Transfer switch position 0" POSITIONB: "Automatic Transfer switch position 1" POSITIONC: "Automatic Transfer switch position 2" + #FOR UPS BATTERY: "Operation mode or input power is via Battery" SYNCHRONOUS: "Mode of operation of inverter where inverter operation is in line with the bypass voltage and frequency" @@ -77,4 +78,3 @@ ASYNCHRONOUS: "Mode of operation of inverter where either the bypass supply fail SOFTSTART: "Mode of operation of rectifier where the input power supply is gradually turned on to avoid overloading" NORMAL: "Function, state or flow which is an ideal or expected condition." REVERSED: "Function, state or flow which is opposed to the expected or normal condition." - diff --git a/ontology/yaml/resources/subfields/subfields.yaml b/ontology/yaml/resources/subfields/subfields.yaml index 5a46670b6..74b198917 100644 --- a/ontology/yaml/resources/subfields/subfields.yaml +++ b/ontology/yaml/resources/subfields/subfields.yaml @@ -113,6 +113,7 @@ descriptor: exhaust: "Process or component used in the removal of air from a conditioned system to the outside atmosphere." panel: "An interface to control a device." fabric: "Textile material." + failed: "Indicates that a point is not operating as intended or is incapable of operating." fire: "a potential to cause physical damage through burning" floor: "Lower surface of a room or zone." flue: "Chimney for conveying exhaust gas." @@ -158,6 +159,7 @@ descriptor: mixed: "Process or component used to mix multiple streams of air." mixing: "Process of mixing substance." model: "Particular design version of an asset (e.g. model_label)." + motorized: "Process or component driven by a motor" neutral: "Line in the electrical cirucit which carries current back to the source. Distinct from ground." next: "Something that occurs directly in time after the present or most recent one." no: "Nitrogen monoxide, a colorless gas. It is a toxic air pollutant." @@ -170,6 +172,7 @@ descriptor: output: "The output of a control loop (e.g. PID Loop Output)" overload: "An electrical load that exceeds available electrical power " over: "Refering to exceeding the required or expected" + override: "An action that interrupts, cancels, or changes the current action or status." ozone: "Highly reactive gaseous compound comprised of three oxygen atoms." particle: "A very fine clump of solid matter." outside: "Process or measurement of local atmospheric conditions." @@ -248,7 +251,6 @@ descriptor: yaxis: "Horizontal axis of a three-dimensional Cartesian coordinate system (ordinate)." zaxis: "Vertical axis of a three-dimensional Cartesian coordinate system (applicate)." zone: "Region of building which is conditioned." - measurement: acceleration: "The rate of change of velocity per unit of time." angle: "The figure formed by two rays, sharing a common endpoint." @@ -330,14 +332,12 @@ measurement_descriptor: end: "Indicates a final part of something, especially a period of time." extent: "Distance travelled." fade: "Descending change of a value (e.g. lighting fade)." - failed: "Indicates that a point is not operating as intended or is incapable of operating." lost: "Indicates that a point has lost some quality or quantity inadvertently." match: "A function that matches something against others." motion: "Detectable movement of a thing." index: "An integer which indicates the location of a particular data point in a list or numbered set (e.g. index 1 of ['a','b','c'] would return 'b', assuming the indexing starts at 0)." offset: "The amount or distance by which something is out of line" open: "Indicates full open (for two-position actuators). This is the default sense if unspecified" - override: "An action that interrupts, cancels, or changes the current action or status." position: "A particular way in which something is placed or arranged, such as a door in the open position." probability: "The extent to which something is probable; the likelihood of something happening or being the case." reactive: "Power that is returned to the source (not consumed by the load)." diff --git a/ontology/yaml/resources/units/units.yaml b/ontology/yaml/resources/units/units.yaml index 448139f49..4e7137667 100644 --- a/ontology/yaml/resources/units/units.yaml +++ b/ontology/yaml/resources/units/units.yaml @@ -146,6 +146,12 @@ energy: kilovolt_ampere_hours: multiplier: 3600000 offset: 0 + kilovolt_ampere_apparent_hours: + multiplier: 3600000 + offset: 0 + kilovolt_ampere_reactive_hours: + multiplier: 3600000 + offset: 0 ton_hours: multiplier: 12660670.23144 offset: 0 diff --git a/tools/abel/README.md b/tools/abel/README.md index d3cbf1515..940998b45 100644 --- a/tools/abel/README.md +++ b/tools/abel/README.md @@ -111,7 +111,7 @@ More info can be found in [gcloud docs on authorizing with the gcloud CLI](https ``` @echo off - FOR /F "delims=" %i IN ('gcloud auth application-default print-access-t`oken') DO set token=%i + FOR /F "delims=" %i IN ('gcloud auth application-default print-access-token') DO set token=%i SET header=Authorization: Bearer SET auth_token="%header%%token%" @@ -205,7 +205,7 @@ python3 abel.py -s The process for using a building config to generate an ABEL spreadsheet is as follows: -1. Create a blank spreadsheet for ABEL to write to from [ABEL Spreadsheet template](https://docs.google.com/spreadsheets/d/1tcLjFnHiXUT-xh5C1hRKiUVaUH_CzgSI8zFQ_B8q7vs/copy#gid=980240783) +1. Create a blank spreadsheet for ABEL to write to from [ABEL Spreadsheet template](https://docs.google.com/spreadsheets/d/1b6IRimNS1dAtPjkNN-fk4TirnLzOiDyyUmOKP_MhMM0/copy?usp=sharing) 2. Share your spreadsheet with your GCP service account and project id as an editor. Refer to Google Sheets documentation on [how to share a google sheet](https://support.google.com/docs/answer/9331169?hl=en#6.1). 3. In `digitalbuildings/tools/abel` run ABEL with the command: ``` diff --git a/tools/abel/model/arg_parser.py b/tools/abel/model/arg_parser.py index f9f59e692..e1e8b0008 100644 --- a/tools/abel/model/arg_parser.py +++ b/tools/abel/model/arg_parser.py @@ -14,6 +14,7 @@ """Command line argument parser for ABEL.""" import argparse +import os from model.constants import DEFAULT_TOKEN_PATH from validate.constants import DEFAULT_TIMEOUT @@ -90,6 +91,7 @@ def ParseArgs() -> argparse.ArgumentParser: '--output-dir', dest='output_dir', required=False, + default=os.getcwd(), help='Path to a directory for output files to be written to', metavar='output-directory') diff --git a/tools/abel/model/model_builder.py b/tools/abel/model/model_builder.py index 0fcf06ec7..c09c0d1ae 100644 --- a/tools/abel/model/model_builder.py +++ b/tools/abel/model/model_builder.py @@ -274,7 +274,7 @@ def _DimensionalValueToEntityField(self, reporting_entity_guid: str, entity_field.units = Units( raw_unit_path=field.unit_field_name, - standard_to_raw_unit_map=field.unit_mappings) + standard_to_raw_unit_map=field.unit_mapping) self.fields.append(entity_field) diff --git a/tools/scoring/score/dimensions/dimension.py b/tools/scoring/score/dimensions/dimension.py index 0f5bc9b53..b73ec1642 100644 --- a/tools/scoring/score/dimensions/dimension.py +++ b/tools/scoring/score/dimensions/dimension.py @@ -371,7 +371,7 @@ def _isolate_mappings(translations, *, field = translation[1] if type(field).__name__ == mapping_type: if mapping_type == MappingTypes.STATE: attribute = 'states' - if mapping_type == MappingTypes.UNIT: attribute = 'unit_mappings' + if mapping_type == MappingTypes.UNIT: attribute = 'unit_mapping' for item in getattr(field, attribute).items(): mappings.add((field.raw_field_name, item)) return mappings diff --git a/tools/scoring/tests/complete_output_test.py b/tools/scoring/tests/complete_output_test.py index 1d192d742..40abaab7d 100644 --- a/tools/scoring/tests/complete_output_test.py +++ b/tools/scoring/tests/complete_output_test.py @@ -19,8 +19,10 @@ class CompleteOutputTest(absltest.TestCase): - def setUp(self): - super().setUp() + + @classmethod + def setUpClass(cls): + super().setUpClass() ontolgy = '../../ontology/yaml/resources' proposed = 'tests/samples/proposed/real_world_proposed.yaml' solution = 'tests/samples/solution/real_world_solution.yaml' @@ -29,7 +31,7 @@ def setUp(self): scorer = parse_config.ParseConfig(ontology=ontolgy, proposed=proposed, solution=solution) - self.output = scorer.execute() + cls.output = scorer.execute() def testEntityConnectionIdentification(self): score = self.output['EntityConnectionIdentification'] diff --git a/tools/scoring/tests/parse_config_test.py b/tools/scoring/tests/parse_config_test.py index 75adc8b6d..052257fe6 100644 --- a/tools/scoring/tests/parse_config_test.py +++ b/tools/scoring/tests/parse_config_test.py @@ -32,14 +32,16 @@ class ParseConfigTest(absltest.TestCase): - def setUp(self): - super().setUp() - self.ontology = '../../ontology/yaml/resources' - self.solution = 'tests/samples/solution/building_config_example.yaml' - self.proposed = 'tests/samples/proposed/building_config_example.yaml' - self.parse = parse_config.ParseConfig(ontology=self.ontology, - solution=self.solution, - proposed=self.proposed) + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.ontology = '../../ontology/yaml/resources' + cls.solution = 'tests/samples/solution/building_config_example.yaml' + cls.proposed = 'tests/samples/proposed/building_config_example.yaml' + cls.parse = parse_config.ParseConfig(ontology=cls.ontology, + solution=cls.solution, + proposed=cls.proposed) def testInitialize(self): self.assertEqual(self.parse.args['ontology'], self.ontology) diff --git a/tools/validators/instance_validator/tests/entity_instance_test.py b/tools/validators/instance_validator/tests/entity_instance_test.py index cafe8a755..13c9a1cab 100644 --- a/tools/validators/instance_validator/tests/entity_instance_test.py +++ b/tools/validators/instance_validator/tests/entity_instance_test.py @@ -34,7 +34,6 @@ from validate import instance_parser from validate import link - _TESTCASE_PATH = test_constants.TEST_INSTANCES _INIT_CFG = instance_parser.ConfigMode.INITIALIZE @@ -97,12 +96,10 @@ def testCombinedChecksInstanceAndGraph(self, mock_entity, mock_gv, mock_iv): validator = entity_instance.CombinationValidator(self.config_universe, _UPDATE_CFG, {}) - self.assertTrue(validator.Validate(mock_entity())) - # to ensure that we called the mock with is_udmi= False - # i.e. we didn't call it with is_udmi= True - mock_iv.assert_called_once() - mock_iv.assert_called_once_with(mock_entity.return_value, False) - mock_gv.assert_called_once_with(mock_entity.return_value) + self.assertTrue(validator.Validate(mock_entity)) + # Add False to mock assertion for is_udmi argument + mock_iv.assert_called_once_with(mock_entity, False) + mock_gv.assert_called_once_with(mock_entity) def testInstance_ValidEtagOnUpdate_Success(self): valid_instance = entity_instance.EntityInstance( @@ -135,8 +132,7 @@ def testInstance_ValidType_Success(self): self.assertTrue(self.update_validator.Validate(instance)) - def testInstance_InvalidNamespace_Fails( - self): + def testInstance_InvalidNamespace_Fails(self): instance = entity_instance.EntityInstance( _UPDATE, guid='ENTITY-GUID', @@ -164,7 +160,8 @@ def testInstance_InvalidEntityTypeFormat_RaisesTypeError(self): else: self.fail(f'{TypeError} was not raised') - def testInstance_RequiresEntityTypeToExist_Fails(self): + def testInstance_RequiresEntityTypeToExistUpdate_Fails(self): + """ Test that the entity type exists. """ instance = entity_instance.EntityInstance( _UPDATE, guid='ENTITY-GUID', @@ -182,9 +179,7 @@ def testInstance_InvalidEntityNamespace_Fails(self): entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) self.assertFalse(self.init_validator.Validate(instance)) @@ -194,9 +189,7 @@ def testInstance_InvalidUseOfAbstractType_Fails(self): entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) self.assertFalse(self.init_validator.Validate(instance)) @@ -206,9 +199,7 @@ def testInstance_InvalidEntityType_Fails(self): entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) self.assertFalse(self.init_validator.Validate(instance)) @@ -218,9 +209,7 @@ def testInstance_ValidMultipleTranslationWithFields_Success(self): entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) self.assertTrue(self.init_validator.Validate(instance)) @@ -232,23 +221,19 @@ def testInstance_InvalidTranslationRequiredFieldMissing_Fails(self): entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) self.assertFalse(self.init_validator.Validate(instance)) def testInstance_InvalidPassthroughTranslationFieldMissing_Fails(self): parsed, default_operation = _Helper([ path.join(_TESTCASE_PATH, 'BAD', - 'passthrough_translation_with_required_field_missing.yaml') + 'translation_opt_field_marked_missing.yaml') ]) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) self.assertFalse(self.init_validator.Validate(instance)) @@ -270,17 +255,43 @@ def testInstance_ValidTranslation_Success(self): entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) self.assertTrue(self.init_validator.Validate(instance)) self.assertEqual(instance.cloud_device_id, 'foobar') - def testInstance_ValidTranslationWithExplicitlyMissingField_Success(self): + def testInstance_ValidTranslationWithExplicitlyMissingReqField_Success(self): + """ Test that a MISSING required field is allowed. """ + parsed, default_operation = _Helper([ + path.join(_TESTCASE_PATH, 'GOOD', + 'translation_req_field_marked_missing.yaml') + ]) + entity_guid, entity = next(iter(parsed.items())) + + instance = entity_instance.EntityInstance.FromYaml( + entity_guid, entity, default_operation=default_operation) + + self.assertTrue(self.init_validator.Validate(instance)) + + def testInstance_ValidateMissingFieldOnGatewayEntity_Success(self): + """ Test that the MISSING fields on a gateway type are allowed. """ parsed, default_operation = _Helper([ path.join(_TESTCASE_PATH, 'GOOD', - 'translation_field_marked_missing.yaml') + 'translation_missing_fields_on_gateway.yaml') + ]) + entity_guid, entity = next(iter(parsed.items())) + + instance = entity_instance.EntityInstance.FromYaml( + entity_guid, entity, default_operation=default_operation) + + self.assertTrue(self.init_validator.Validate(instance)) + + def testInstance_ValidTranslationWithExplicityMissingOptField_Fails(self): + """ Test that a MISSING optional field is not allowed. """ + parsed, default_operation = _Helper([]) + parsed, default_operation = _Helper([ + path.join(_TESTCASE_PATH, 'BAD', + 'translation_opt_field_marked_missing.yaml') ]) entity_guid, entity = next(iter(parsed.items())) @@ -289,7 +300,7 @@ def testInstance_ValidTranslationWithExplicitlyMissingField_Success(self): entity, default_operation=default_operation) - self.assertTrue(self.init_validator.Validate(instance)) + self.assertFalse(self.init_validator.Validate(instance)) def testInstance_ValidMultipleTranslationsWithIdenticalTypes_Success(self): parsed, default_operation = _Helper( @@ -316,9 +327,7 @@ def testInstance_InvalidTranslationExtraField_Fails(self): entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) self.assertFalse(self.init_validator.Validate(instance)) @@ -328,9 +337,7 @@ def testInstance_ValidTranslationUnits_Success(self): entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) self.assertTrue(self.init_validator.Validate(instance)) @@ -341,21 +348,82 @@ def testInstance_ValidTranslationUnitsAndStates_Success(self): entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) + + self.assertTrue(self.init_validator.Validate(instance)) + + def testInstance_MultipleUnitMappings_Fails(self): + parsed, default_operation = _Helper( + [path.join(_TESTCASE_PATH, 'BAD', 'translation_multiple_units.yaml')]) + entity_guid, entity = next(iter(parsed.items())) + + with self.assertRaises( + ValueError, + msg='There should be exactly 1 unit mapping in the translation for ' + + 'field "zone_air_temperature_sensor".'): + entity_instance.EntityInstance.FromYaml( + entity_guid, entity, default_operation=default_operation) + + def testInstance_ValidValueRange_Success(self): + parsed, default_operation = _Helper( + [path.join(_TESTCASE_PATH, 'GOOD', 'translation_value_range.yaml')]) + entity_guid, entity = next(iter(parsed.items())) + + instance = entity_instance.EntityInstance.FromYaml( + entity_guid, entity, default_operation=default_operation) self.assertTrue(self.init_validator.Validate(instance)) + def testInstance_ValueRangeWithNoUnits_Fails(self): + parsed, default_operation = _Helper([ + path.join(_TESTCASE_PATH, 'BAD', + 'translation_value_range_with_no_units.yaml') + ]) + entity_guid, entity = next(iter(parsed.items())) + + with self.assertRaises( + ValueError, + msg='A value range cannot be provided without units in the translation ' + + 'for field "zone_air_temperature_sensor".'): + entity_instance.EntityInstance.FromYaml( + entity_guid, entity, default_operation=default_operation) + + def testInstance_InvalidValueRangeFormat_Fails(self): + parsed, default_operation = _Helper([ + path.join(_TESTCASE_PATH, 'BAD', + 'translation_invalid_value_range_format.yaml') + ]) + entity_guid, entity = next(iter(parsed.items())) + + with self.assertRaises( + ValueError, + msg='Value range in the translation for field ' + + '"zone_air_temperature_sensor" should be formatted: ,.'): + entity_instance.EntityInstance.FromYaml( + entity_guid, entity, default_operation=default_operation) + + def testInstance_InvalidValueRangeOrder_Fails(self): + parsed, default_operation = _Helper([ + path.join(_TESTCASE_PATH, 'BAD', + 'translation_invalid_value_range_order.yaml') + ]) + entity_guid, entity = next(iter(parsed.items())) + + with self.assertRaises( + ValueError, + msg='Value range in the translation for field ' + + '"zone_air_temperature_sensor" should have a min value that is less ' + + 'than the max value.'): + entity_instance.EntityInstance.FromYaml( + entity_guid, entity, default_operation=default_operation) + def testInstance_InvalidTranslationStates_Fails(self): parsed, default_operation = _Helper( [path.join(_TESTCASE_PATH, 'BAD', 'translation_states.yaml')]) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) self.assertFalse(self.init_validator.Validate(instance)) @@ -365,9 +433,7 @@ def testInstance_ValidTranslationStates_Success(self): entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) self.assertTrue(self.init_validator.Validate(instance)) @@ -379,9 +445,7 @@ def testInstance_InvalidTranslationStatesDuplicate_Fails(self): entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) self.assertFalse(self.init_validator.Validate(instance)) @@ -392,9 +456,7 @@ def testInstance_InvalidLinkFields_Fails(self): entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity_parsed, - default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) @@ -411,9 +473,7 @@ def testInstance_InvalidLinkEntityName_Fails(self): for entity_guid, entity_parsed in parsed.items(): try: entity = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity_parsed, - default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation) entity_instances[entity.guid] = entity print(entity.guid) except ValueError: @@ -432,9 +492,7 @@ def testInstance_InvalidLinkFieldWrong_Fails(self): entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity_parsed, - default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( self.config_universe, _UPDATE, entity_instances) @@ -450,9 +508,7 @@ def testInstance_InvalidLinkFieldMissing_Fails(self): entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity_parsed, - default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) @@ -468,9 +524,7 @@ def testInstance_ValidLinkEntityName_Success(self): entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity_parsed, - default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) @@ -486,9 +540,7 @@ def testInstance_ValidGoodLinkWithIncrementEntityName_Success(self): entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity_parsed, - default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) @@ -503,9 +555,7 @@ def testInstance_ValidLinkToPassthroughEntity_Success(self): entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity_parsed, - default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) @@ -520,9 +570,7 @@ def testInstance_ValidGoodGuidFormat_Success(self): entity_instances = {} for entity_guid, entity in parsed.items(): instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) entity_instances[instance.guid] = instance combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) @@ -580,9 +628,7 @@ def testInstance_ValidConnection_Success(self): 'universe does not have a valid connections universe') instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) self.assertTrue(self.init_validator.Validate(instance)) self.assertCountEqual(expected_connections, instance.connections) @@ -593,9 +639,7 @@ def testInstance_InvalidConnectionType_Fails(self): entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation) self.assertFalse(self.init_validator.Validate(instance)) @@ -697,19 +741,21 @@ def testInstance_MultipleUnitsNotAllowed_Fails(self): guid='VAV-123-GUID', code='VAV-123', etag='1234', + namespace='GATEWAYS', + type_name='PASSTHROUGH', translation={ 'foo_bar': field_translation.DimensionalValue( std_field_name='foo/bar', unit_field_name='foo/unit', raw_field_name='foo/raw', - unit_mappings={'standard_unit_1': 'raw_unit_1'}), + unit_mapping={'standard_unit_1': 'raw_unit_1'}), 'foo_baz': field_translation.DimensionalValue( std_field_name='foo/baz', unit_field_name='bar/unit', raw_field_name='bar/raw', - unit_mappings={'standard_unit_1': 'raw_unit_2'}), + unit_mapping={'standard_unit_1': 'raw_unit_2'}), }) self.assertFalse(self.update_validator.Validate(entity)) @@ -727,7 +773,7 @@ def testDimensionalTranslationMissingUnitMapping_ReturnsValueError(self): std_field_name='foo/bar', unit_field_name='foo/unit', raw_field_name='foo/raw', - unit_mappings={}), + unit_mapping={}), }) except ValueError as e: self.assertEqual(type(e), ValueError) @@ -740,13 +786,15 @@ def testInstance_InvalidDimensionalTranslationField_Fails(self): guid='VAV-123-GUID', code='VAV-123', etag='1234', + namespace='GATEWAYS', + type_name='PASSTHROUGH', translation={ 'UNDEFINED_UNIT': field_translation.DimensionalValue( std_field_name='foo/bar', unit_field_name='foo/unit', raw_field_name='foo/raw', - unit_mappings={'foo': 'bar'}) + unit_mapping={'foo': 'bar'}) }) self.assertFalse(self.update_validator.Validate(entity)) @@ -757,13 +805,15 @@ def testInstance_InvalidDimensionalTranslationFieldUnit_Fails(self): guid='VAV-123-GUID', code='VAV-123', etag='1234', + namespace='GATEWAYS', + type_name='PASSTHROUGH', translation={ 'return_water_temperature_sensor': field_translation.DimensionalValue( std_field_name='foo/bar', unit_field_name='foo/unit', raw_field_name='foo/raw', - unit_mappings={'INVALID_SENSOR_UNIT': 'degF'}) + unit_mapping={'INVALID_SENSOR_UNIT': 'degF'}) }) self.assertFalse(self.update_validator.Validate(entity)) @@ -774,13 +824,15 @@ def testInstance_ValidDimensionalTranslationField_Success(self): guid='VAV-123-GUID', code='VAV-123', etag='1234', + namespace='GATEWAYS', + type_name='PASSTHROUGH', translation={ 'return_water_temperature_sensor': field_translation.DimensionalValue( std_field_name='foo/bar', unit_field_name='foo/unit', raw_field_name='foo/raw', - unit_mappings={'degrees_fahrenheit': 'degF'}) + unit_mapping={'degrees_fahrenheit': 'degF'}) }) self.assertTrue(self.update_validator.Validate(entity)) @@ -792,6 +844,8 @@ def testInstance_MultiStateTranslationMissingStates_RaisesValueError(self): guid='VAV-123-GUID', code='VAV-123', etag='1234', + namespace='GATEWAYS', + type_name='PASSTHROUGH', translation={ 'foo_bar': field_translation.MultiStateValue( @@ -810,6 +864,8 @@ def testInstance_MultiStateTranslationUndefinedField_Fails(self): guid='VAV-123-GUID', code='VAV-123', etag='1234', + namespace='GATEWAYS', + type_name='PASSTHROUGH', translation={ 'UNDEFINED_STATE': field_translation.MultiStateValue( @@ -826,6 +882,8 @@ def testInstance_InvalidMultiStateTranslationFieldState_Fails(self): guid='VAV-123-GUID', code='VAV-123', etag='1234', + namespace='GATEWAYS', + type_name='PASSTHROUGH', translation={ 'exhaust_air_damper_command': field_translation.MultiStateValue( @@ -842,6 +900,8 @@ def testInstance_ValidMultiStateTranslationField_Success(self): guid='VAV-123-GUID', code='VAV-123', etag='1234', + namespace='GATEWAYS', + type_name='PASSTHROUGH', translation={ 'exhaust_air_damper_command': field_translation.MultiStateValue( @@ -861,13 +921,15 @@ def testInstance_DimensionalValueNoUnitsExpected_Success(self): guid='VAV-123-GUID', code='VAV-123', etag='1234', + namespace='GATEWAYS', + type_name='PASSTHROUGH', translation={ 'line_powerfactor_sensor': field_translation.DimensionalValue( std_field_name='foo/bar', unit_field_name='foo/unit', raw_field_name='foo/raw', - unit_mappings={'no_units': 'no_units'}), + unit_mapping={'no_units': 'no_units'}), }) self.assertTrue(self.update_validator.Validate(entity)) @@ -878,39 +940,38 @@ def testInstance_DimensionalValueUnitsExpected_Fails(self): guid='VAV-123-GUID', code='VAV-123', etag='1234', + namespace='GATEWAYS', + type_name='PASSTHROUGH', translation={ 'zone_air_cooling_temperature_setpoint': field_translation.DimensionalValue( std_field_name='foo/bar', unit_field_name='foo/unit', raw_field_name='foo/raw', - unit_mappings={'no_units': 'no_units'}), + unit_mapping={'no_units': 'no_units'}), }) self.assertFalse(self.update_validator.Validate(entity)) def testValidate_EmptyCode_Fails(self): - entity = entity_instance.EntityInstance(_ADD, guid='VAV-123-GUID', code='') + entity = entity_instance.EntityInstance(_ADD, guid='VAV-123-GUID', + code='VAV-123') self.assertFalse(self.init_validator.Validate(entity)) def testValidate_EmptyGuid_Fails(self): - entity = entity_instance.EntityInstance( - _ADD, guid='', code='VAV-123') + entity = entity_instance.EntityInstance(_ADD, guid='', code='VAV-123') self.assertFalse(self.init_validator.Validate(entity)) def testFromYaml_EntityBlockMissingCodeAndGuid_RaisesValueError(self): entity_guid = 'VAV-123-GUID' - entity_yaml = { - } + entity_yaml = {} with self.assertRaises( ValueError, msg='Entity block must contain either "code" or "guid".'): entity_instance.EntityInstance.FromYaml( - entity_guid, - entity_yaml, - default_operation=_EXPORT) + entity_guid, entity_yaml, default_operation=_EXPORT) def testFromYaml_EntityBlockContainsCodeAndGuid_RaisesValueError(self): entity_guid = 'VAV-123-GUID' @@ -919,9 +980,7 @@ def testFromYaml_EntityBlockContainsCodeAndGuid_RaisesValueError(self): with self.assertRaises( ValueError, msg='Entity block cannot contain both "code" and "guid".'): entity_instance.EntityInstance.FromYaml( - entity_guid, - entity_yaml, - default_operation=_EXPORT) + entity_guid, entity_yaml, default_operation=_EXPORT) def testFromYaml_KeyIsCode_Fails(self): # this test should now fail as entity_instance enforces entities keyed by @@ -942,9 +1001,7 @@ def testFromYaml_KeyIsGuid_Success(self): entity_yaml = {'code': entity_code} entity = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity_yaml, - default_operation=_EXPORT) + entity_guid, entity_yaml, default_operation=_EXPORT) self.assertEqual(entity.guid, entity_guid) self.assertEqual(entity.code, entity_code) @@ -979,9 +1036,7 @@ def testValidate_UpdateEntityTypeOnly_Success(self): entity_guid, entity_parsed = next(iter(parsed.items())) entity = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity_parsed, - default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation) self.assertTrue(self.update_validator.Validate(entity)) @@ -993,9 +1048,7 @@ def testValidate_UpdateEntityTypeAndTranslations_Success(self): entity_guid, entity_parsed = next(iter(parsed.items())) entity = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity_parsed, - default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation) self.assertTrue(self.update_validator.Validate(entity)) @@ -1042,11 +1095,22 @@ def testValidate_GoodUpdateOperationDefaultExport_Success(self): self.assertEqual(entity_instances['PHYSICAL-ENTITY-GUID'].operation, _EXPORT) - def testValidate_UdmiEntityPresentValue_Fails(self): - # the example used is a valid entity according to dbo; however, not udmi + def testValidate_UpdateCloudDeviceID_Fails(self): + instance = entity_instance.EntityInstance( + _UPDATE, + guid='ENTITY-GUID', + code='ENTITY-NAME', + namespace='FACILITIES', + type_name='BUILDING', + etag='a12345', + cloud_device_id='CLOUD-DEVICE-ID', + update_mask=['cloud_device_id']) + + self.assertFalse(self.update_validator.Validate(instance)) + + def testValidate_GoodStatesCaseSensitivity_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', - 'translation_udmi_present_value.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'states_case_sensitive.yaml')]) entity_instances = {} for entity_guid, entity_parsed in parsed.items(): @@ -1056,14 +1120,16 @@ def testValidate_UdmiEntityPresentValue_Fails(self): combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) - self.assertFalse(combination_validator.Validate( - entity_instances['SDC_EXT-17-GUID'], is_udmi= True)) + self.assertTrue( + combination_validator.Validate(entity_instances['FC2-1-1-GUID'])) - def testValidate_UdmiEntityPresentValue_Success(self): - parsed, default_operation = _Helper([ - path.join(_TESTCASE_PATH, 'GOOD', - 'translation_udmi_present_value.yaml') - ]) + def testValidate_BadStatesCaseSensitivity_Failure(self): + # The example states_case_insensitive.yaml is used in instance validator and + # this (entity instance) test. Case-insensitive is allowed to pass; + # however, case-sensitivity is enforced between concrete and ontology + # specifications + parsed, default_operation = _Helper( + [path.join(_TESTCASE_PATH, 'GOOD', 'states_case_insensitive.yaml')]) entity_instances = {} for entity_guid, entity_parsed in parsed.items(): @@ -1073,8 +1139,8 @@ def testValidate_UdmiEntityPresentValue_Success(self): combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) - self.assertTrue(combination_validator.Validate( - entity_instances['SDC_EXT-17-GUID'], is_udmi= True)) + self.assertFalse( + combination_validator.Validate(entity_instances['FC2-1-1-GUID'])) def testValidate_BuildingConfigEntityWithId_Success(self): parsed, default_operation = _Helper( @@ -1092,8 +1158,10 @@ def testValidate_BuildingConfigEntityWithId_Success(self): self.assertFalse(entity_instance.IsEntityIdPresent(entity_1)) self.assertTrue(self.init_validator.Validate(entity_2)) self.assertTrue(entity_instance.IsEntityIdPresent(entity_2)) - self.assertEqual(entity_2.entity_id, + self.assertEqual( + entity_2.entity_id, parsed['US-SEA-BLDG1-GUID'].get(instance_parser.ENTITY_ID_KEY)) + if __name__ == '__main__': absltest.main() diff --git a/tools/validators/instance_validator/tests/fake_instances/BAD/translation_udmi_present_value.yaml b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_invalid_value_range_format.yaml similarity index 65% rename from tools/validators/instance_validator/tests/fake_instances/BAD/translation_udmi_present_value.yaml rename to tools/validators/instance_validator/tests/fake_instances/BAD/translation_invalid_value_range_format.yaml index 75eab6bcb..91285ff7b 100644 --- a/tools/validators/instance_validator/tests/fake_instances/BAD/translation_udmi_present_value.yaml +++ b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_invalid_value_range_format.yaml @@ -12,20 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -# bad translation with present value not adhereing to udmi - -SDC_EXT-17-GUID: - type: HVAC/SDC_EXT - code: SDC_EXT-17 +US-SEA-BLDG1-GUID: + type: FACILITIES/BUILDING + code: US-SEA-BLDG1 cloud_device_id: "foobar" translation: - shade_extent_percentage_command: - present_value: "bad_prefix.brightness_percentage_sensor_66679452.bad_suffix" + zone_air_temperature_sensor: + present_value: "points.zone_air_temperature_sensor.present_value" + value_range: 25 units: - key: "points.shade_extent_percentage_command.units" + key: "points.zone_air_temperature_sensor.units" values: - percent: "%" - -US-SEA-BLDG3-GUID: - type: FACILITIES/BUILDING - code: US-SEA-BLDG3 + degrees_celsius: "degC" diff --git a/tools/validators/instance_validator/tests/fake_instances/BAD/translation_invalid_value_range_order.yaml b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_invalid_value_range_order.yaml new file mode 100644 index 000000000..03d2eeb96 --- /dev/null +++ b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_invalid_value_range_order.yaml @@ -0,0 +1,26 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +US-SEA-BLDG1-GUID: + type: FACILITIES/BUILDING + code: US-SEA-BLDG1 + cloud_device_id: "foobar" + translation: + zone_air_temperature_sensor: + present_value: "points.zone_air_temperature_sensor.present_value" + value_range: 25,15 + units: + key: "points.zone_air_temperature_sensor.units" + values: + degrees_celsius: "degC" diff --git a/tools/validators/instance_validator/tests/fake_instances/BAD/translation_keys.yaml b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_keys.yaml index 0f79da32d..adba3d28e 100644 --- a/tools/validators/instance_validator/tests/fake_instances/BAD/translation_keys.yaml +++ b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_keys.yaml @@ -27,5 +27,4 @@ US-SEA-BLDG1-GUID: key: "units" values: degrees_celsius: "degC" - degrees_fahrenheit: "degF" invalid_key: "invalid" diff --git a/tools/validators/instance_validator/tests/fake_instances/BAD/passthrough_translation_with_required_field_missing.yaml b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_multiple_units.yaml similarity index 71% rename from tools/validators/instance_validator/tests/fake_instances/BAD/passthrough_translation_with_required_field_missing.yaml rename to tools/validators/instance_validator/tests/fake_instances/BAD/translation_multiple_units.yaml index f719253c7..8898fb83d 100644 --- a/tools/validators/instance_validator/tests/fake_instances/BAD/passthrough_translation_with_required_field_missing.yaml +++ b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_multiple_units.yaml @@ -12,20 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Missing return_water_temperature_sensor - -CHWS_WDT-17-GUID: - type: HVAC/CHWS_WDT_GATEWAY - code: CHWS_WDT-17 +US-SEA-BLDG1-GUID: + type: FACILITIES/BUILDING + code: US-SEA-BLDG1 cloud_device_id: "foobar" translation: - supply_water_temperature_sensor: - present_value: "points.supply_water_temperature_sensor.present_value" + zone_air_temperature_sensor: + present_value: "temp_1" units: - key: "pointset.points.supply_water_temperature_sensor.units" + key: "units" values: degrees_celsius: "degC" - -US-SEA-BLDG1-GUID: - type: FACILITIES/BUILDING - code: US-SEA-BLDG1 + degrees_fahrenheit: "degF" diff --git a/tools/validators/instance_validator/tests/fake_instances/BAD/translation_no_cloud_device_id.yaml b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_no_cloud_device_id.yaml index 7fcac7ac7..a24c5af02 100644 --- a/tools/validators/instance_validator/tests/fake_instances/BAD/translation_no_cloud_device_id.yaml +++ b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_no_cloud_device_id.yaml @@ -26,4 +26,3 @@ US-SEA-BLDG1-GUID: key: "units" values: degrees_celsius: "degC" - degrees_fahrenheit: "degF" diff --git a/tools/validators/instance_validator/tests/fake_instances/BAD/translation_opt_field_marked_missing.yaml b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_opt_field_marked_missing.yaml new file mode 100644 index 000000000..851f71961 --- /dev/null +++ b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_opt_field_marked_missing.yaml @@ -0,0 +1,34 @@ +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FAN-1-GUID-FOR-OPT-FIELD-MARKED-MISSING: + type: HVAC/FAN_SS + code: FAN-1 + cloud_device_id: "foobar" + translation: + run_command: + present_value: "points.run_command.present_value" + states: + ON: "on" + OFF: "off" + run_status: + present_value: "points.run_status.present_value" + states: + ON: "on" + OFF: "off" + power_sensor: MISSING + +US-SEA-BLDG1-GUID: + type: FACILITIES/BUILDING + code: US-SEA-BLDG1 diff --git a/tools/validators/instance_validator/tests/fake_instances/BAD/translation_units_format.yaml b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_units_format.yaml index 1ca3b729b..0b26d7d73 100644 --- a/tools/validators/instance_validator/tests/fake_instances/BAD/translation_units_format.yaml +++ b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_units_format.yaml @@ -21,4 +21,3 @@ US-SEA-BLDG1-GUID: units: values: degrees_celsius: "degC" - degrees_fahrenheit: "degF" diff --git a/tools/validators/instance_validator/tests/fake_instances/BAD/translation_value_range_with_no_units.yaml b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_value_range_with_no_units.yaml new file mode 100644 index 000000000..0aea8f2aa --- /dev/null +++ b/tools/validators/instance_validator/tests/fake_instances/BAD/translation_value_range_with_no_units.yaml @@ -0,0 +1,22 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +US-SEA-BLDG1-GUID: + type: FACILITIES/BUILDING + code: US-SEA-BLDG1 + cloud_device_id: "foobar" + translation: + zone_air_temperature_sensor: + present_value: "points.zone_air_temperature_sensor.present_value" + value_range: 15,25 diff --git a/tools/validators/instance_validator/tests/fake_instances/GOOD/links_increment.yaml b/tools/validators/instance_validator/tests/fake_instances/GOOD/links_increment.yaml index 5c4f2689c..6ebc293d3 100644 --- a/tools/validators/instance_validator/tests/fake_instances/GOOD/links_increment.yaml +++ b/tools/validators/instance_validator/tests/fake_instances/GOOD/links_increment.yaml @@ -13,75 +13,64 @@ # limitations under the License. VIRTUAL-ENTITY-GUID: - type: HVAC/CHWS_WDT_WDPC2X - code: VIRTUAL-ENTITY + type: HVAC/FAN_SS_ABC + code: FAN-TEST links: PHYSICAL-ENTITY-GUID: - return_water_temperature_sensor: return_water_temperature_sensor_2 - supply_water_temperature_sensor: supply_water_temperature_sensor_2 - differential_pressure_sensor_1: differential_pressure_sensor_3 - differential_pressure_sensor_2: differential_pressure_sensor_4 - differential_pressure_setpoint: differential_pressure_setpoint + run_command: run_command_2 + run_status: run_status_2 + zone_air_temperature_sensor_1: zone_air_temperature_sensor_3 + zone_air_temperature_sensor_2: zone_air_temperature_sensor_4 PHYSICAL-ENTITY-GUID: type: GATEWAYS/PASSTHROUGH code: PHYSICAL-ENTITY cloud_device_id: "foobar" translation: - return_water_temperature_sensor_1: - present_value: "points.return_water_temperature_sensor_1.present_value" + run_command_1: + present_value: "points.ss1.present_value" + states: + ON: "on" + OFF: "off" + run_command_2: + present_value: "points.ss2.present_value" + states: + ON: "on" + OFF: "off" + run_status_1: + present_value: "points.sts1.present_value" + states: + ON: "on" + OFF: "off" + run_status_2: + present_value: "points.sts2.present_value" + states: + ON: "on" + OFF: "off" + zone_air_temperature_sensor_1: + present_value: "points.zone_air_temperature_sensor_1.present_value" units: - key: "points.return_water_temperature_sensor_1.units" + key: "points.zone_air_temperature_sensor_1.units" values: - degrees_celsius: "degC" - return_water_temperature_sensor_2: - present_value: "points.return_water_temperature_sensor_2.present_value" + degrees_fahrenheit: "degF" + zone_air_temperature_sensor_2: + present_value: "points.zone_air_temperature_sensor_2.present_value" units: - key: "points.return_water_temperature_sensor_2.units" + key: "points.zone_air_temperature_sensor_2.units" values: - degrees_celsius: "degC" - supply_water_temperature_sensor_1: - present_value: "points.supply_water_temperature_sensor_1.present_value" + degrees_fahrenheit: "degF" + zone_air_temperature_sensor_3: + present_value: "points.zone_air_temperature_sensor_3.present_value" units: - key: "points.supply_water_temperature_sensor_1.units" + key: "points.zone_air_temperature_sensor_3.units" values: - degrees_celsius: "degC" - supply_water_temperature_sensor_2: - present_value: "points.supply_water_temperature_sensor_2.present_value" + degrees_fahrenheit: "degF" + zone_air_temperature_sensor_4: + present_value: "points.zone_air_temperature_sensor_4.present_value" units: - key: "points.supply_water_temperature_sensor_2.units" + key: "points.zone_air_temperature_sensor_4.units" values: - degrees_celsius: "degC" - differential_pressure_sensor_1: - present_value: "points.differential_pressure_sensor_1.present_value" - units: - key: "points.differential_pressure_sensor_1.units" - values: - inches_of_water: "inWC" - differential_pressure_sensor_2: - present_value: "points.differential_pressure_sensor_2.present_value" - units: - key: "points.differential_pressure_sensor_2.units" - values: - inches_of_water: "inWC" - differential_pressure_sensor_3: - present_value: "points.differential_pressure_sensor_3.present_value" - units: - key: "points.differential_pressure_sensor_3.units" - values: - inches_of_water: "inWC" - differential_pressure_sensor_4: - present_value: "points.differential_pressure_sensor_4.present_value" - units: - key: "points.differential_pressure_sensor_4.units" - values: - inches_of_water: "inWC" - differential_pressure_setpoint: - present_value: "points.differential_pressure_setpoint.present_value" - units: - key: "points.differential_pressure_setpoint.units" - values: - inches_of_water: "inWC" + degrees_fahrenheit: "degF" US-SEA-BLDG1-GUID: type: FACILITIES/BUILDING diff --git a/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_missing_fields_on_gateway.yaml b/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_missing_fields_on_gateway.yaml new file mode 100644 index 000000000..e8a70ac28 --- /dev/null +++ b/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_missing_fields_on_gateway.yaml @@ -0,0 +1,18 @@ +bldg-guid: + type: FACILITIES/BUILDING + code: TEST-BLDG + +gateway-guid: + type: GATEWAYS/PASSTHROUGH + connections: + bldg-guid: CONTAINS + cloud_device_id: 12345 + translation: + discharge_fan_voltage_sensor: + present_value: points.doas_1_voltage_sensor.present_value + units: + key: pointset.points.doas_1_voltage_sensor.units + values: + volts: V + discharge_fan_run_status: MISSING + code: TEST-GATEWAY diff --git a/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_multi_states.yaml b/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_multi_states.yaml index 2ee9f8c31..58b55ebda 100644 --- a/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_multi_states.yaml +++ b/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_multi_states.yaml @@ -1,4 +1,4 @@ -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the License); # you may not use this file except in compliance with the License. diff --git a/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_udmi_present_value.yaml b/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_req_field_marked_missing.yaml similarity index 65% rename from tools/validators/instance_validator/tests/fake_instances/GOOD/translation_udmi_present_value.yaml rename to tools/validators/instance_validator/tests/fake_instances/GOOD/translation_req_field_marked_missing.yaml index e3ee16f37..7dbb82e5b 100644 --- a/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_udmi_present_value.yaml +++ b/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_req_field_marked_missing.yaml @@ -1,4 +1,4 @@ -# Copyright 2022 Google LLC +# Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the License); # you may not use this file except in compliance with the License. @@ -12,20 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -# good translation with present value adhereing to udmi - SDC_EXT-17-GUID: type: HVAC/SDC_EXT code: SDC_EXT-17 cloud_device_id: "foobar" translation: - shade_extent_percentage_command: - present_value: "points.brightness_percentage_sensor_66679452.present_value" - units: - key: "points.shade_extent_percentage_command.units" - values: - percent: "%" + shade_extent_percentage_command: MISSING -US-SEA-BLDG2-GUID: +US-SEA-BLDG1-GUID: type: FACILITIES/BUILDING - code: US-SEA-BLDG2 + code: US-SEA-BLDG1 diff --git a/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_units_and_states.yaml b/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_units_and_states.yaml index d5ab638ca..a16d099c9 100644 --- a/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_units_and_states.yaml +++ b/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_units_and_states.yaml @@ -12,26 +12,29 @@ # See the License for the specific language governing permissions and # limitations under the License. -CHWS_WDT-17-GUID: - type: HVAC/CHWS_WDT - code: CHWS_WDT-17 +# Building +US-SEA-BLDG1-GUID: + type: FACILITIES/BUILDING + code: US-SEA-BLDG1 + +FAN-17-GUID: + type: HVAC/FAN_SS_VSC + code: FAN-17 cloud_device_id: "foobar" translation: - return_water_temperature_sensor: - present_value: "points.return_water_temperature_sensor.present_value" - units: - key: "points.return_water_temperature_sensor.units" - values: - degrees_celsius: "degC" - degrees_fahrenheit: "degF" - supply_water_temperature_sensor: - present_value: "points.supply_water_temperature_sensor.present_value" + run_command: + present_value: "points.run_command.present_value" + states: + OFF: false + ON: true + run_status: + present_value: "points.run_status.present_value" + states: + OFF: 0 + ON: 1 + speed_percentage_command: + present_value: "points.supply_fan_speed_percentage_command.present_value" units: - key: "points.supply_water_temperature_sensor.units" + key: "points.supply_fan_speed_percentage_command.units" values: - degrees_celsius: "degC" - degrees_fahrenheit: "degF" - -US-SEA-BLDG1-GUID: - type: FACILITIES/BUILDING - code: US-SEA-BLDG1 + percent: "%" diff --git a/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_value_range.yaml b/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_value_range.yaml new file mode 100644 index 000000000..3c0575eda --- /dev/null +++ b/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_value_range.yaml @@ -0,0 +1,38 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Test entity with numeric points. + +CHWS_WDT-17-GUID: + type: HVAC/CHWS_WDT + code: CHWS_WDT-17 + cloud_device_id: "foobar" + translation: + return_water_temperature_sensor: + present_value: "points.return_water_temperature_sensor.present_value" + value_range: 0, 100 + units: + key: "points.return_water_temperature_sensor.units" + values: + degrees_celsius: "degC" + supply_water_temperature_sensor: + present_value: "points.supply_water_temperature_sensor.present_value" + units: + key: "points.supply_water_temperature_sensor.units" + values: + degrees_fahrenheit: "degF" + +US-SEA-BLDG1-GUID: + type: FACILITIES/BUILDING + code: US-SEA-BLDG1 diff --git a/tools/validators/instance_validator/tests/handler_test.py b/tools/validators/instance_validator/tests/handler_test.py index ff409c8c0..245498eaa 100644 --- a/tools/validators/instance_validator/tests/handler_test.py +++ b/tools/validators/instance_validator/tests/handler_test.py @@ -39,6 +39,7 @@ _UPDATE_CFG = instance_parser.ConfigMode.UPDATE _RunValidation = handler.RunValidation +_Deserialize = handler.Deserialize _RunEntityHelperValidation = handler.EntityHelper.Validate _CV = entity_instance.CombinationValidator @@ -87,18 +88,16 @@ def testValidateReportFileNotEmpty(self): self.assertGreater(report_size, 0) def testValidateOneBuildingExistFails(self): - with self.assertRaises(SyntaxError): - input_file = os.path.join(_TESTCASE_PATH, 'BAD', 'missing_building.yaml') - _RunValidation([input_file], use_simplified_universe=True) + """ Check that a config without a building is found to be invalid. """ + input_file = os.path.join(_TESTCASE_PATH, 'BAD', 'missing_building.yaml') + config_universe = generate_universe.BuildUniverse( + use_simplified_universe=True) + entities, config_mode = _Deserialize([input_file]) - def testValidateTranslationWithNoConfigID(self): - try: - input_file = os.path.join(_TESTCASE_PATH, 'GOOD', - 'translation_nobuilding.yaml') - with self.assertRaises(KeyError): - _RunValidation([input_file], use_simplified_universe=True) - except SyntaxError: - self.fail('ValidationHelper:Validate unexpectedly raised Exception') + helper = handler.EntityHelper(config_universe) + + with self.assertRaises(SyntaxError): + helper.Validate(entities, config_mode, is_udmi=True) def testValidateMultipleInputFilesSuccess(self): try: diff --git a/tools/validators/instance_validator/tests/instance_parser_test.py b/tools/validators/instance_validator/tests/instance_parser_test.py index cddb518f9..c04600ffc 100644 --- a/tools/validators/instance_validator/tests/instance_parser_test.py +++ b/tools/validators/instance_validator/tests/instance_parser_test.py @@ -271,6 +271,11 @@ def testEntityBlock_InvalidUpdateMaskAndOperation_Fails(self): [path.join(_TESTCASE_PATH, 'BAD', 'update_mask_operation.yaml')]) del parser + def testInstanceValidator_translationFieldStatesCaseInsensitive_Success(self): + parser = _ParserHelper( + [path.join(_TESTCASE_PATH, 'GOOD', 'states_case_insensitive.yaml')]) + self.assertLen(parser.GetEntities().keys(), 2) + def testEntityBlock_EntityWithId_Success(self): parser = _ParserHelper( [path.join(_TESTCASE_PATH, 'GOOD', 'bc_entity_with_id.yaml')]) @@ -282,7 +287,8 @@ def testEntityBlock_EntityWithId_Success(self): self.assertLen(parser.GetEntities().keys(), 2) self.assertIsNone(entity_1.get(instance_parser.ENTITY_ID_KEY)) - self.assertEqual(entity_2.get(instance_parser.ENTITY_ID_KEY), + self.assertEqual( + entity_2.get(instance_parser.ENTITY_ID_KEY), "deprecated-but-doesn't-break") if __name__ == '__main__': diff --git a/tools/validators/instance_validator/validate/entity_instance.py b/tools/validators/instance_validator/validate/entity_instance.py index 64c8d5208..6792c4d3d 100644 --- a/tools/validators/instance_validator/validate/entity_instance.py +++ b/tools/validators/instance_validator/validate/entity_instance.py @@ -29,6 +29,7 @@ from yamlformat.validator import findings_lib from yamlformat.validator import presubmit_validate_types_lib as pvt + _CONFIG_UPDATE = parse.ConfigMode.UPDATE _CONFIG_INIT = parse.ConfigMode.INITIALIZE _CONFIG_EXPORT = parse.ConfigMode.EXPORT @@ -118,14 +119,14 @@ def __init__(self, universe: pvt.ConfigUniverse, self.config_mode = config_mode self.entity_instances = entity_instances - def Validate(self, entity: EntityInstance, is_udmi: bool= False) -> bool: + def Validate(self, entity: EntityInstance, is_udmi: bool=False) -> bool: """Returns true if an entity follows all instance and graph rules. - Arguments - entity: EntityInstance object to be validated against the ontology for - content and connectivity. - is_udmi: flag to indicate process of validation under udmi specification; - bool default False. + Args: + entity: EntityInstance object to be validated against the ontology for + content and connectivity. + is_udmi: Indicate validation process under udmi specification; + bool default False. """ iv = InstanceValidator(self.universe, self.config_mode) @@ -166,12 +167,15 @@ def _ConnectionsAreValid(self, entity: EntityInstance) -> bool: for conn_inst in entity.connections: if conn_inst.source not in self.entity_instances: if self.config_mode in (_CONFIG_INIT, _CONFIG_UPDATE): - print(f'Orphan connection to: {conn_inst.source}') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is connected ' + f'to an entity that doesn\'t exist: {conn_inst.source}. Check ' + 'that this entity is defined.') is_valid = False continue if self.entity_instances[ conn_inst.source].operation == parse.EntityOperation.DELETE: - print(f'Connection to deleted entity: {conn_inst.source}') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is connected to ' + f'a deleted entity: {conn_inst.source}.') is_valid = False return is_valid @@ -185,12 +189,15 @@ def _LinksAreValid(self, entity: EntityInstance) -> bool: for link_inst in entity.links: if link_inst.source not in self.entity_instances.keys(): if self.config_mode == _CONFIG_INIT or _CONFIG_UPDATE: - print(f'Invalid link source entity GUID: {link_inst.source}') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) links to an ' + f'invalid source: {link_inst.source}. Check that this source ' + 'exists.') is_valid = False continue if self.entity_instances[ link_inst.source].operation == parse.EntityOperation.DELETE: - print(f'Link to deleted entity: {link_inst.source}') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) links to a ' + f'deleted entity: {link_inst.source}.') is_valid = False continue @@ -200,7 +207,10 @@ def _LinksAreValid(self, entity: EntityInstance) -> bool: for _, source_field in link_inst.field_map.items(): if not _FieldIsAllowed(self.universe, source_field, src_entity_type): - print(f'Invalid link source field: {source_field}') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines a ' + 'link field that is not valid in the ontology: ' + f'{source_field}. Confirm this field is defined in the ' + 'ontology.') is_valid = False continue @@ -228,6 +238,7 @@ def Validate(self, entity: EntityInstance) -> bool: def IsEntityIdPresent(entity: EntityInstance) -> bool: + """Returns true if the entity has an id; note: planned deprecation.""" return entity.entity_id is not None @@ -261,24 +272,31 @@ def _ValidateType(self, entity: EntityInstance) -> bool: return True if self.universe.GetEntityTypeNamespace(entity.namespace) is None: - print('Invalid namespace: ', entity.namespace) + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is defined with an ' + f'invalid namespace: {entity.namespace}. Confirm the namespace is ' + 'defined in the ontology.') return False entity_type = self.universe.GetEntityType(entity.namespace, entity.type_name) if entity_type is None: - print('Invalid entity type: ', entity.type_name) + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is defined with an ' + f'invalid entity type: {entity.type_name} in namespace ' + f'{entity.namespace}. Confirm the type is defined in the ontology, ' + 'and in the correct namespace.') return False elif entity_type.is_abstract: - print('Abstract types cannot be instantiated: ', entity.type_name) + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is defined with an ' + f'abstract entity type: {entity.type_name}. Abstract types cannot ' + 'be applied to individual entity instances. Define a non-abstract ' + 'type that uses this abstract type and apply that to this ' + 'instance.') return False return True - def _ValidateTranslation( - self, - entity: EntityInstance, - is_udmi: bool= False) -> bool: + def _ValidateTranslation(self, entity: EntityInstance, is_udmi: bool = False + ) -> bool: """Validate an entity's translation against the entity's type or ontology. If entity operation is ADD, this code ensures that all fields are in the @@ -286,7 +304,7 @@ def _ValidateTranslation( Args: entity: EntityInstance to validate - is_udmi: flag to validate under udmi; defaults to false + is_udmi: Flag to validate under udmi; defaults to false Returns: Returns boolean for validity of entity translation, defaults to True if @@ -307,9 +325,13 @@ def _ValidateTranslation( entity_type) if not qualified_field_name: if entity_type and not entity_type.allow_undefined_fields: - print(f'Field {as_written_field_name} is not defined on the type') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) translates ' + f'field "{as_written_field_name}" which is not defined on the ' + f'type "{entity.type_name}"') else: - print(f'Field {as_written_field_name} is undefined in the universe') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) translates ' + f'field "{as_written_field_name}" which does not exist in the ' + 'ontology.') is_valid = False else: found_fields[qualified_field_name] = ft @@ -320,32 +342,83 @@ def _ValidateTranslation( unmatched = set(type_fields.keys()).difference(set(found_fields.keys())) for unmatched_name in unmatched: if not type_fields[unmatched_name].optional: - print(f'Required field {unmatched_name} is missing from translation') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) missing field ' + f'"{unmatched_name}" which is required for assigned type ' + f'"{entity.type_name}"') is_valid = False + # Check that MISSING translation fields are handled properly. + # Check that translations are properly defined found_units = {} + type_fields = entity_type.GetAllFields() for qualified_field_name, ft in found_fields.items(): - if not self._FieldTranslationIsValid(qualified_field_name, ft): + if not self._FieldTranslationIsValid(qualified_field_name, ft, entity): is_valid = False + + # Check if the field is defined MISSING + if isinstance(ft, ft_lib.UndefinedField): + # If the type is allows undefined fields, we won't know if the field + # is required or not explicitly. Warn the user, but don't check + # for optionality. + if entity_type.allow_undefined_fields: + print(f'[WARNING]\tEntity {entity.guid} ({entity.code}) provides ' + f'MISSING translation for field {qualified_field_name} for a ' + f'type {entity.type_name}. This feature should ' + 'only be used when the gateway cannot physically send required ' + 'data and the virtual entity you are creating requires it. You ' + 'must provide justification for all MISSING translations and ' + 'that the applied virtual entity type is correct, otherwise ' + 'your building config will be rejected.') + else: + # If the field is MISSING and REQUIRED, warn the user. + if not type_fields[qualified_field_name].optional: + print(f'[WARNING]\tEntity {entity.guid} ({entity.code}) provides ' + f'MISSING translation for field {qualified_field_name} which ' + f'is required for type {entity.type_name}. This feature ' + 'should only be used when the device cannot physically send ' + 'required data and it truly is an instance of the assigned ' + 'type. You must provide justification for all MISSING ' + 'translations and that the applied type is correct, ' + 'otherwise your building config will be rejected.') + + # If its MISSING and OPTIONAL, raise error. They shouldn't do this. + # Optional fields are automatically interpreted as missing if not + # provided explicitly. + if type_fields[qualified_field_name].optional: + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) provides ' + f'MISSING translation for field {qualified_field_name}, ' + f'which is optional on type {entity.type_name}. The use of ' + 'MISSING fields is strictly reserved for required fields. ' + 'Adjust the translation and remove MISSING optional fields.') + is_valid = False + if isinstance(ft, ft_lib.DimensionalValue): if is_udmi and not _UDMI_PRESENT_VALUE_PATTERN.fullmatch( ft.raw_field_name): - print(f'present value {ft.raw_field_name} does not conform to udmi ', - 'regex pattern {_UDMI_PRESENT_VALUE_REGEX}') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) translates ' + f'field "{ft.raw_field_name}" with a present value pattern ' + 'that does not conform to UDMI pattern ' + f'"{_UDMI_PRESENT_VALUE_REGEX}".') is_valid = False - for std_unit, raw_unit in ft.unit_mappings.items(): + for std_unit, raw_unit in ft.unit_mapping.items(): if std_unit not in found_units: found_units[std_unit] = raw_unit continue if found_units[std_unit] != raw_unit: - print(f'found two mappings for {std_unit}') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' + f'multiple raw units ({raw_unit},{std_unit}) to the same ' + 'measurement type. Raw units are expected to be the same ' + 'across the device: e.g. "degrees_fahrenheit" should not ' + 'map to "deg_f" and "fahrenheit" on the same device ' + 'translation.') is_valid = False return is_valid def _FieldTranslationIsValid(self, qualified_field_name: str, - ft: ft_lib.FieldTranslation): + ft: ft_lib.FieldTranslation, + entity: EntityInstance): """Returns a boolean indicating whether or not the translation is valid. Method assumes field has already been checked for existence in the ontology. @@ -360,26 +433,27 @@ def _FieldTranslationIsValid(self, qualified_field_name: str, valid_units = self.universe.GetUnitsForMeasurement(qualified_field_name) if valid_units and set(valid_units).difference({'no_units'}): if not isinstance(ft, ft_lib.DimensionalValue): - print('Units must be provided for dimensional value ' - f'{qualified_field_name}') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines field ' + f'{qualified_field_name} but does not define valid units. ' + 'Add units.') return False - if not ft.unit_mappings: + if not ft.unit_mapping: print('At least one unit must be provided for dimensional value ' f'{qualified_field_name}') return False is_valid = True - for unit in ft.unit_mappings.keys(): - if unit not in valid_units: - print( - f'Field {qualified_field_name} has an undefined measurement unit:' - + f' {unit}') - is_valid = False + unit = list(ft.unit_mapping.keys())[0] + if unit not in valid_units: + print( + f'Field {qualified_field_name} has an undefined measurement unit:' + + f' {unit}') + is_valid = False return is_valid if isinstance( - ft, ft_lib.DimensionalValue) and set(ft.unit_mappings) != {'no_units'}: + ft, ft_lib.DimensionalValue) and set(ft.unit_mapping) != {'no_units'}: print(f'Units are provided for non-dimensional value ' f'{qualified_field_name}') return False @@ -387,25 +461,28 @@ def _FieldTranslationIsValid(self, qualified_field_name: str, valid_states = self.universe.GetStatesByField(qualified_field_name) if valid_states: if not isinstance(ft, ft_lib.MultiStateValue): - print('States not provided for multi-state value ' - f'{qualified_field_name}') - return False + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines field ' + f'{qualified_field_name} without states, which are expected on ' + 'the field. Define states.') if not ft.states: - print('At least one state must be provided for multi-state value ' - f'{qualified_field_name}') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' + f'field {qualified_field_name} without states, which are ' + 'expected for this field. Define states.') return False is_valid = True for state, value in ft.states.items(): if state not in valid_states: - print(f'Field {qualified_field_name} has an invalid state: {state}' - f' (expected {", ".join(valid_states)})') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' + f'field {qualified_field_name} with an invalid state: ' + f'{state}. Allowed states are ({str(valid_states)}).') is_valid = False raw_values = value if isinstance(value, list) else [value] for raw_value in raw_values: if ft.raw_values[raw_value] != state: - print(f'Field {qualified_field_name} has raw value {raw_value} ' + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' + f'field {qualified_field_name} has raw value {raw_value} ' f'mapped to more than one state: {state} and ' f'{ft.raw_values[raw_value]}') is_valid = False @@ -413,8 +490,9 @@ def _FieldTranslationIsValid(self, qualified_field_name: str, return is_valid if isinstance(ft, ft_lib.MultiStateValue): - print('Multiple states provided for a field that is not a multi-state' - f' {qualified_field_name}') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines field ' + f'{qualified_field_name} with states, but this field is not ' + 'multi-state.') return False return True @@ -439,8 +517,9 @@ def _ConnectionsAreValid(self, entity: EntityInstance) -> bool: for conn_inst in entity.connections: conn_universe = self.universe.connection_universe if conn_universe and not conn_universe.IsDefined(conn_inst.ctype): - print(f'Connection type: {conn_inst.ctype} ' - 'is undefined in the ontology') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' + f'connection {conn_inst.ctype}, which does not exist in the ' + 'ontology.') is_valid = False return is_valid @@ -464,8 +543,9 @@ def _LinksAreValid(self, entity: EntityInstance) -> bool: entity_type = self.universe.GetEntityType(entity.namespace, entity.type_name) if entity_type and entity_type.allow_undefined_fields and entity.links: - print('This entity is not allowed to be the target of links because it is' - ' an instance of a passthrough entity type.') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is not allowed to ' + 'be the target of links because it is defined as a passthrough ' + 'entity.') return False is_valid = True @@ -475,25 +555,31 @@ def _LinksAreValid(self, entity: EntityInstance) -> bool: qualified_tgt_field = _GetAllowedField(self.universe, target_field, entity_type) if not qualified_tgt_field: - print(f'Invalid link target field: {target_field} ' - f'for link: {link_inst}') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) links to ' + f'target field {target_field} that is invalid for ' + f'link: {link_inst}') is_valid = False continue qualified_src_field = _GetAllowedField(self.universe, source_field, None) if not qualified_src_field: - print(f'Invalid link source field: {source_field} ' - f'for link: {link_inst}') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) links to ' + f'source field {source_field} that is invalid for ' + f'link: {link_inst}') is_valid = False continue found_fields.add(qualified_tgt_field) - if not self._LinkUnitsMatch(qualified_src_field, qualified_tgt_field): + if not self._LinkUnitsMatch(qualified_src_field, + qualified_tgt_field, + entity): is_valid = False continue - if not self._LinkStatesMatch(qualified_src_field, qualified_tgt_field): + if not self._LinkStatesMatch(qualified_src_field, + qualified_tgt_field, + entity): is_valid = False continue @@ -505,27 +591,37 @@ def _LinksAreValid(self, entity: EntityInstance) -> bool: return is_valid - def _LinkUnitsMatch(self, source_field: str, target_field: str) -> bool: + def _LinkUnitsMatch(self, + source_field: str, + target_field: str, + entity: EntityInstance) -> bool: """Validates that units match between linked source and target fields.""" source_units = self.universe.GetUnitsForMeasurement(source_field) target_units = self.universe.GetUnitsForMeasurement(target_field) if source_units != target_units: - print(f'Unit mismatch in link from {source_field} to {target_field}') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) links target field ' + f'{target_field} to source field {source_field} but the units ' + 'do not match between the fields.') return False return True - def _LinkStatesMatch(self, source_field: str, target_field: str) -> bool: + def _LinkStatesMatch(self, + source_field: str, + target_field: str, + entity: EntityInstance) -> bool: """Validates that states match between linked source and target fields.""" source_states = self.universe.GetStatesByField(source_field) target_states = self.universe.GetStatesByField(target_field) if source_states != target_states: - print(f'State mismatch in link from {source_field} to {target_field}') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) links target field ' + f'{target_field} to source field {source_field} but the states do ' + 'not match between the fields.') return False return True - def Validate(self, entity: EntityInstance, is_udmi: bool= False) -> bool: + def Validate(self, entity: EntityInstance, is_udmi: bool = False) -> bool: """Uses the generated ontology universe to validate an entity. Args: @@ -537,46 +633,65 @@ def Validate(self, entity: EntityInstance, is_udmi: bool= False) -> bool: """ if IsEntityIdPresent(entity): - print('Warning: Entity id detected in block. Planned deprecation, ', - 'will result in validation error in a future releases. Please ', - 'review digitalbuildings/ontology/docs/building_config.md for ', - 'more info') + print(f'[WARNING]\tEntity {entity.guid} ({entity.code}) defines "id" but ' + 'this will be deprecated in future releases. Please review ' + 'https://github.com/google/digitalbuildings/' + 'ontology/docs/building_config.md for more ' + 'information.') is_valid = True if entity.update_mask is not None: if entity.operation != parse.EntityOperation.UPDATE: - print('Update mask is required for update operations') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) requires update ' + 'mask for update operations.') is_valid = False if entity.type_name is None: if parse.ENTITY_TYPE_KEY in entity.update_mask: - print('Update mask to clear Entity Type not allowed') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) must define a ' + 'clear Entity Type if performing an update.') is_valid = False + if parse.ENTITY_CLOUD_DEVICE_ID_KEY in entity.update_mask: + print('Update to Cloud Device ID not allowed') + is_valid = False if not entity.guid: - print('Entity GUID is required.') + print(f'[ERROR]\tEntity ({entity.code}) is missing a GUID. This must be ' + 'provided.') is_valid = False if not entity.code and entity.operation != parse.EntityOperation.DELETE: - print('Entity code is required.') + print(f'[ERROR]\tEntity {entity.guid} is missing a code. This must be ' + 'provided.') is_valid = False if (self.config_mode == _CONFIG_INIT and entity.operation != parse.EntityOperation.ADD): - print('only ADD operation is allowed in INITIALIZE mode') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines operation ' + f'{entity.operation} that is not valid. Only ADD operation is ' + 'allowed in INITIALIZE mode.') return False if entity.operation == parse.EntityOperation.DELETE: return is_valid if self.config_mode in (_CONFIG_EXPORT, _CONFIG_UPDATE) and not entity.etag: - print('etag is required on update or export') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is missing an ' + 'etag, which is required for EXPORT or UPDATE operations.') is_valid = False - if entity.namespace is None or entity.type_name is None: + if entity.namespace is None: if entity.operation == parse.EntityOperation.ADD: - print('Required field not specified: type') + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is missing a ' + 'namespace for its type.') is_valid = False + + if entity.type_name is None: + if entity.operation == parse.EntityOperation.ADD: + print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is missing a ' + 'type definition.') + is_valid = False + else: if not self._ValidateType(entity): is_valid = False @@ -609,15 +724,13 @@ def _ParseTypeString(type_str: syaml.YAML) -> Tuple[str, str]: type_parse = type_str.split('/') if len(type_parse) == 1: - print('Type improperly formatted, a namespace is missing: ', type_str) - raise TypeError( - f'Type improperly formatted, a namespace is missing: {type_str}\n' + - 'Proper formatting is: NAMESPACE/TYPE_NAME') + raise TypeError(f'Namespace is malformed for type: {type_str}. Proper ' + 'format is NAMESPACE/TYPE_NAME.' + ) if len(type_parse) > 2: - print('Type improperly formatted: ', type_str) - raise TypeError(f'Type improperly formatted: {type_str}\n' + - 'Proper formatting is: NAMESPACE/TYPE_NAME') + raise TypeError(f'Type is improperly formatted: {type_str}. Proper ' + 'formatting is: NAMESPACE/TYPE_NAME') return type_parse[0], type_parse[1] @@ -637,35 +750,28 @@ def _ParseTranslation( """ if isinstance(translation_body, str): - raise ValueError(translation_body + ' is not a valid translation') + raise ValueError(f'Translation body "{translation_body}" is not valid.') translation = {} - for std_field_name in translation_body: - ft = translation_body[std_field_name] + for std_field_name, ft in translation_body.items(): if isinstance(ft, str): if not ft: - raise ValueError( - 'Translation details were empty for standard field name: ' + - std_field_name) + raise ValueError(f'Translation details are empty for field: ' + f'{std_field_name}.' + ) elif ft == ft_lib.PresenceMode.MISSING.value: translation[std_field_name] = ft_lib.UndefinedField(std_field_name) continue # TODO(b/187757180): support UDMI-compliant shorthand - raise ValueError(ft + ' is not yet an allowed scalar') + raise ValueError(f'This is not an allowed scalar: {ft}.') raw_field_name = str(ft[parse.PRESENT_VALUE_KEY]) - ft_object = None - - if parse.UNITS_KEY in ft: - unit_field_name = ft[parse.UNITS_KEY][parse.UNIT_NAME_KEY] - unit_mappings = ft[parse.UNITS_KEY][parse.UNIT_VALUES_KEY] - ft_object = ft_lib.DimensionalValue(std_field_name, raw_field_name, - unit_field_name, unit_mappings) + ft_object = _ParseUnitsAndValueRange(ft, std_field_name, raw_field_name) if parse.STATES_KEY in ft: if ft_object: - raise ValueError( - 'states and units are not allowed in the same translation') + raise ValueError('States and units are not allowed in the ' + 'same field translation.') ft_object = ft_lib.MultiStateValue(std_field_name, raw_field_name, ft[parse.STATES_KEY]) @@ -677,6 +783,55 @@ def _ParseTranslation( return translation +def _ParseUnitsAndValueRange(ft: Dict[str, Any], std_field_name: str, + raw_field_name: str) -> ft_lib.DimensionalValue: + """Parses the value range and units (if any) from a field translation. + + see: + https://github.com/google/digitalbuildings/blob/master/ontology/docs/building_config.md#defining-translations + + Args: + ft: YAML body for the entity translation for a particular field + std_field_name: The standard field name to which the translation belongs + raw_field_name: The raw field name for the field + + Returns: + A DimensionalValue object + """ + + if parse.UNITS_KEY in ft: + unit_field_name = ft[parse.UNITS_KEY][parse.UNIT_NAME_KEY] + unit_mapping = ft[parse.UNITS_KEY][parse.UNIT_VALUES_KEY] + if len(unit_mapping) != 1: + raise ValueError( + 'There should be exactly 1 unit mapping in the translation for ' + + f'field "{std_field_name}".') + if parse.VALUE_RANGE_KEY in ft: + value_range = str(ft[parse.VALUE_RANGE_KEY]) + range_values = value_range.split(',') + if len(range_values) != 2: + raise ValueError( + f'Value range in the translation for field "{std_field_name}" ' + + 'should be formatted: ,.') + min_value = float(range_values[0].strip()) + max_value = float(range_values[1].strip()) + if min_value >= max_value: + raise ValueError( + f'Value range in the translation for field "{std_field_name}" ' + + 'should have a min value that is less than the max value.') + # pylint: disable=too-many-function-args + return ft_lib.DimensionalValue(std_field_name, raw_field_name, + unit_field_name, unit_mapping, + (min_value, max_value)) + return ft_lib.DimensionalValue(std_field_name, raw_field_name, + unit_field_name, unit_mapping) + elif parse.VALUE_RANGE_KEY in ft: + raise ValueError( + 'A value range cannot be provided without units in the translation ' + + f'for field "{std_field_name}".') + return None + + def _ParseConnections( connections_body: List[Tuple[str, Any]]) -> Set[connection.Connection]: """Parses YAML defining connections between one entity and another. @@ -778,12 +933,8 @@ def __init__(self, self.update_mask = update_mask @classmethod - def FromYaml( - cls, - entity_key: str, - entity_yaml: Dict[str, Any], - default_operation: parse.EntityOperation - ) -> EntityInstance: + def FromYaml(cls, entity_key: str, entity_yaml: Dict[str, Any], + default_operation: parse.EntityOperation) -> EntityInstance: """Class method to instantiate an Entity Instance from yaml. Args: @@ -808,9 +959,8 @@ def FromYaml( # validate that operation is UPDATE if update_mask is present if parse.EntityOperation.FromString(entity_yaml[ parse.ENTITY_OPERATION_KEY]) != parse.EntityOperation.UPDATE: - raise ValueError( - 'Only specify "UPDATE" operation when "update_mask" is present.' - ) + raise ValueError('Only specify UPDATE operation when ' + '"update_mask" is present.') update_mask = entity_yaml[parse.UPDATE_MASK_KEY] operation = parse.EntityOperation.UPDATE # case 2: update_mask implies update operation @@ -838,14 +988,16 @@ def FromYaml( elif parse.ENTITY_GUID_KEY in entity_yaml: # here we use the presence of ENTITY_GUID_KEY in the entity attributes as # as proxy that the block is keyed by code - raise ValueError('Entity block must be keyed by guid.') + raise ValueError('Entity block must be keyed by a guid. Please adjust.') else: - raise ValueError('Entity block must contain either "code" or "guid".') + raise ValueError('Keys "code" and "guid" missing from entity block. ' + 'Fix this by adding one of these keys to the entity ' + 'definition.') if operation in [parse.EntityOperation.ADD, parse.EntityOperation.UPDATE]: if not guid: - raise ValueError( - 'Entity block must contain "guid" for ADD/UPDATE operations.') + raise ValueError('Entity block must contain "guid" for ' + 'ADD/UPDATE operations.') namespace, type_name = None, None if parse.ENTITY_TYPE_KEY in entity_yaml: @@ -857,7 +1009,8 @@ def FromYaml( if update_mask: if parse.ENTITY_CLOUD_DEVICE_ID_KEY in entity_yaml[ parse.UPDATE_MASK_KEY] and parse.TRANSLATION_KEY not in entity_yaml: - raise ValueError('Update of cloud device id requires translations') + raise ValueError('Update of cloud device id requires translation.') + translation = None cloud_device_id = None if parse.TRANSLATION_KEY in entity_yaml: diff --git a/tools/validators/instance_validator/validate/field_translation.py b/tools/validators/instance_validator/validate/field_translation.py index fdeaa0475..c79a25f45 100644 --- a/tools/validators/instance_validator/validate/field_translation.py +++ b/tools/validators/instance_validator/validate/field_translation.py @@ -15,7 +15,7 @@ import enum -from typing import Dict, List, Union +from typing import Dict, List, Optional, Tuple, Union class PresenceMode(enum.Enum): @@ -124,21 +124,25 @@ class DimensionalValue(DefinedField): payload. unit_field_name: string. Fully qualified json path to the unit in the device payload. - unit_mappings: Dictionary from standard units to the text defining the unit + unit_mapping: Dictionary from standard units to the text defining the unit in the payload. + value_range: tuple. (Optional) The expected minimum and maximum values for + the field, expressed in the given unit. """ def __init__(self, std_field_name: str, raw_field_name: str, - unit_field_name: str, unit_mappings: Dict[str, str]): + unit_field_name: str, unit_mapping: Dict[str, str], + value_range: Optional[Tuple[float, float]] = None): super().__init__(std_field_name, raw_field_name) if not unit_field_name: raise ValueError('unit_field_name cannot be empty') - if not unit_mappings: - raise ValueError('unit_mappings cannot be empty') + if not unit_mapping: + raise ValueError('unit_mapping cannot be empty') # Note: I didn't go so far as to define a units object yet since the # structure of units is being worked on. It can be retrofitted later. self.unit_field_name = unit_field_name - self.unit_mappings = unit_mappings + self.unit_mapping = unit_mapping + self.value_range = value_range class NonDimensionalValue(DefinedField): diff --git a/tools/validators/instance_validator/validate/generate_universe.py b/tools/validators/instance_validator/validate/generate_universe.py index dcb00ecb6..ee3835993 100644 --- a/tools/validators/instance_validator/validate/generate_universe.py +++ b/tools/validators/instance_validator/validate/generate_universe.py @@ -46,8 +46,9 @@ def BuildUniverse( elif modified_types_filepath: modified_ontology_exists = path.exists(modified_types_filepath) if not modified_ontology_exists: - print(f'Specified filepath [{modified_types_filepath}] ' - 'modified ontology does not exist') + print(f'[ERROR]\tSpecified filepath [{modified_types_filepath}] does not ' + f'exist.' + ) return None modified_types_filepath = path.expanduser(modified_types_filepath) @@ -59,10 +60,12 @@ def BuildUniverse( interactive=False) yaml_files = external_file_lib.RecursiveDirWalk(modified_types_filepath) else: + if default_types_filepath is None: + raise TypeError('default_types_filepath cannot be None.') default_ontology_exists = path.exists(default_types_filepath) if not default_ontology_exists: - print(f'Specified filepath [{constants.ONTOLOGY_ROOT}] ' - 'for default ontology does not exist') + print(f'[ERROR]\tSpecified filepath [{constants.ONTOLOGY_ROOT}] for ' + 'default ontology does not exist.') return None # use default location for ontology files yaml_files = external_file_lib.RecursiveDirWalk(default_types_filepath) @@ -75,7 +78,8 @@ def BuildUniverse( universe.GetEntityTypeNamespaces()) if not namespace_validation.IsValid(): - print('Universe is not valid') + print('[ERROR]\tOntology is not valid. Ensure your current branch of the ' + 'ontology is correct and error-free.') return None return universe diff --git a/tools/validators/instance_validator/validate/handler.py b/tools/validators/instance_validator/validate/handler.py index be31af4f8..58d625f74 100644 --- a/tools/validators/instance_validator/validate/handler.py +++ b/tools/validators/instance_validator/validate/handler.py @@ -57,10 +57,10 @@ def Deserialize( ConfigMode: INITIALIZE or UPDATE """ - print('Validating syntax please wait ...') + print('[INFO]\tStarting syntax validation.') parser = instance_parser.InstanceParser() for yaml_file in yaml_files: - print(f'Opening file: {yaml_file}, please wait ...') + print(f'[INFO]\tOpening file: {yaml_file}.') parser.AddFile(yaml_file) parser.Finalize() @@ -73,8 +73,16 @@ def Deserialize( entity_key, entity_yaml, default_entity_operation) entities[entity.guid] = entity except ValueError as ex: - print(f'Invalid Entity {entity_key}: {ex}') - raise + print(f'[ERROR]\tInvalid Entity syntax found for this entity: ' + f'{entity_key} and this content: "{entity_yaml}" and with error' + f': "{ex}"') + raise ex + except KeyError as ex: + print(f'[ERROR]\tInvalid Entity syntax found for this entity: ' + f'{entity_key} and this content: "{entity_yaml}" and with error' + f': "{ex}"') + raise ex + return entities, parser.GetConfigMode() @@ -83,9 +91,9 @@ def _ValidateConfig( universe: pvt.ConfigUniverse, is_udmi) -> List[entity_instance.EntityInstance]: """Runs all config validation checks.""" - print('\nLoading config files...\n') + print(f'[INFO]\tLoading config files: {filenames}') entities, config_mode = Deserialize(filenames) - print('\nStarting config validation...\n') + print('[INFO]\tStarting config validation.') helper = EntityHelper(universe) return helper.Validate(entities, config_mode, is_udmi) @@ -101,7 +109,7 @@ def _ValidateTelemetry(subscription: str, service_account: str, def RunValidation(filenames: List[str], use_simplified_universe: bool = False, modified_types_filepath: str = None, - default_types_filepath: str = None, + default_types_filepath: str = constants.ONTOLOGY_ROOT, subscription: str = None, service_account: str = None, report_filename: str = None, @@ -123,34 +131,40 @@ def RunValidation(filenames: List[str], """ saved_stdout = sys.stdout report_file = None + + print('[INFO]\tStarting validation process.') if report_filename: # pylint: disable=consider-using-with report_file = open(report_filename, 'w', encoding='utf-8') sys.stdout = report_file try: - print('\nStarting validator...\n') - print('\nStarting universe generation...\n') + print('[INFO]\tLoading ontology.') universe = generate_universe.BuildUniverse( use_simplified_universe=use_simplified_universe, modified_types_filepath=modified_types_filepath, default_types_filepath=default_types_filepath) if not universe: - print('\nError generating universe') + print('[ERROR]\tUniverse did not load properly.') sys.exit(0) - print('\nStarting config validation...\n') + print('[INFO]\tOntology loaded.') + entities = _ValidateConfig(filenames, universe, is_udmi) if subscription: - print('\nStarting telemetry validation...\n') + print('[INFO]\tStarting telemetry validation.') _ValidateTelemetry(subscription, service_account, entities, timeout, is_udmi) else: - print('Subscription is needed for telemetry validation') - + print('[WARNING]\tTelemetry validation skipped, subscription ' + 'not found. Please provide a subscription and service account to ' + 'run telemetry validation. See here for more details: ' + 'https://google.github.io/digitalbuildings/tools/validators/' + 'instance_validator/#telemetry-validation') finally: sys.stdout = saved_stdout if report_file: + print('[INFO]\tReport generated.') report_file.close() - + print('[INFO]\tInstance validation completed.') class TelemetryHelper(object): """A validation helper to encapsulate telemetry validation. @@ -175,24 +189,24 @@ def Validate(self, entities: Dict[str, entity_instance.EntityInstance], is_udmi: true/false treat telemetry stream as UDMI; defaults to false """ - print('Connecting to pubsub subscription: ', self.subscription) + print(f'[INFO]\tConnecting to PubSub subscription {self.subscription}') sub = subscriber.Subscriber(self.subscription, self.service_account_file) validator = telemetry_validator.TelemetryValidator( entities, timeout, is_udmi, _TelemetryValidationCallback) validator.StartTimer() try: + print('[INFO]\tStaring to listen to subscription messages.') sub.Listen(validator.ValidateMessage) finally: + print('[INFO]\tStopping subscription listener.') validator.StopTimer() def _TelemetryValidationCallback( validator: telemetry_validator.TelemetryValidator) -> None: """Callback when the telemetry validator finishes. - This could be called due to a timeout or because telemetry messages were received and validated for every expected entity. - Args: validator: the telemetry validator that triggered the callback. """ @@ -252,30 +266,35 @@ def Validate( Raises: SyntaxError: If no building is found in the config """ - print('Validating entities ...') + print('[INFO]\tValidating entity instance definitions.') building_found = False valid_entities = {} validator = entity_instance.CombinationValidator(self.universe, config_mode, entities) alpha_interdep_helper = AlphaInterdependencyHelper() + is_valid = True for entity_guid, current_entity in entities.items(): if not alpha_interdep_helper.ValidateAndUpdateState( current_entity.operation): - raise ValueError('v1 Alpha: Building Config cannot have more than 2 ' - 'operations; one being EXPORT') + raise ValueError('(v1 Alpha): Building Config cannot have more ' + 'than 2 operations; one being EXPORT.') if (current_entity.operation is not instance_parser.EntityOperation.DELETE and current_entity.type_name.lower() == 'building'): building_found = True if not validator.Validate(current_entity, is_udmi): - print(entity_guid, 'is not a valid instance') + is_valid = False continue valid_entities[entity_guid] = current_entity if not building_found: - print('Config must contain a non-deleted entity with a building type') - raise SyntaxError('Building Config must contain an ' - 'entity with a building type') - print('All entities validated') + raise SyntaxError('Building entity not found. Configs must contain ' + 'a non-deleted entity of type FACILITIES/BUILDING.') + + # Final validity determination. + if is_valid: + print('[INFO]\tAll entities validated SUCCESSFULLY.') + else: + print('[ERROR]\tSome entities FAILED validation. See logs.') return valid_entities diff --git a/tools/validators/instance_validator/validate/instance_parser.py b/tools/validators/instance_validator/validate/instance_parser.py index d8d1e99f6..2ed41c9e1 100644 --- a/tools/validators/instance_validator/validate/instance_parser.py +++ b/tools/validators/instance_validator/validate/instance_parser.py @@ -103,7 +103,7 @@ def _MergeSchemas(first: Dict[syaml.ScalarValidator, syaml.Validator], #### Public Text parsing Constants #### -ENTITY_ID_KEY = 'id' # deprecated; kept for legacy reasons +ENTITY_ID_KEY = 'id' # deprecated; kept for legacy reasons ENTITY_GUID_KEY = 'guid' ENTITY_CODE_KEY = 'code' ENTITY_CLOUD_DEVICE_ID_KEY = 'cloud_device_id' @@ -116,6 +116,7 @@ def _MergeSchemas(first: Dict[syaml.ScalarValidator, syaml.Validator], METADATA_KEY = 'metadata' PRESENT_VALUE_KEY = 'present_value' POINTS = 'points' +VALUE_RANGE_KEY = 'value_range' UNITS_KEY = 'units' UNIT_NAME_KEY = 'key' UNIT_VALUES_KEY = 'values' @@ -159,13 +160,15 @@ def _MergeSchemas(first: Dict[syaml.ScalarValidator, syaml.Validator], syaml.Str(), syaml.Optional(STATES_KEY): syaml.MapPattern( - syaml.Regex(str('^[A-Z][A-Z_]+')), + syaml.Regex(str('^[a-zA-Z][a-zA-Z_]+')), syaml.Str() | syaml.Seq(syaml.Str())), syaml.Optional(UNITS_KEY): syaml.Map({ UNIT_NAME_KEY: syaml.Str(), UNIT_VALUES_KEY: syaml.MapPattern(syaml.Str(), syaml.Str()) }), + syaml.Optional(VALUE_RANGE_KEY): + syaml.Str(), })) _METADATA_SCHEMA = syaml.Map({ @@ -239,6 +242,8 @@ def _MergeSchemas(first: Dict[syaml.ScalarValidator, syaml.Validator], }) +# TODO(b/234492090): id depreciated and no longer used; remove from syntax and +# content validation - 05312022 class InstanceParser(): """One-shot state machine for parsing and syntax checking YAML config files. diff --git a/tools/validators/instance_validator/validate/subscriber.py b/tools/validators/instance_validator/validate/subscriber.py index 47acfa8d1..4555c6bf4 100644 --- a/tools/validators/instance_validator/validate/subscriber.py +++ b/tools/validators/instance_validator/validate/subscriber.py @@ -57,19 +57,19 @@ def Listen(self, callback): callback: a callback function to handle the message. """ if self.service_account_info_json_file: - with open(self.service_account_info_json_file, encoding="utf-8") as f: + with open(self.service_account_info_json_file, encoding='utf-8') as f: service_account_info = json.load(f) - audience = "https://pubsub.googleapis.com/google.pubsub.v1.Subscriber" + audience = 'https://pubsub.googleapis.com/google.pubsub.v1.Subscriber' credentials = auth.jwt.Credentials.from_service_account_info( service_account_info, audience=audience) else: - print("No service account. Using application default credentials") + print('[INFO]\tNo service account. Using application default credentials') # pylint: disable=unused-variable credentials, project_id = auth.default() sub_client = pubsub_v1.SubscriberClient(credentials=credentials) future = sub_client.subscribe(self.subscription_name, callback) - print("Listening to pubsub, please wait ...") + print('[INFO]\tListening to pub/sub topic. Please wait.') # KeyboardInterrupt does not always cause `result` to exit early, so we # give the thread a chance to handle that within a reasonable amount of # time by repeatedly calling `result` with a short timeout. @@ -81,6 +81,6 @@ def Listen(self, callback): except (futures.CancelledError, KeyboardInterrupt): future.cancel() except Exception as ex: # pylint: disable=broad-except - print(f"PubSub subscription failed with error: {ex}") + print(f'[ERROR]\tPub/sub subscription failed with error: {ex}') future.cancel() break diff --git a/tools/validators/instance_validator/validate/telemetry.py b/tools/validators/instance_validator/validate/telemetry.py index ab8a37ef0..0a2d5414b 100644 --- a/tools/validators/instance_validator/validate/telemetry.py +++ b/tools/validators/instance_validator/validate/telemetry.py @@ -99,28 +99,33 @@ def _parse_data(self, version, timestamp, points, is_partial = (None, None, None, None) try: if isinstance(message, int): - print(f'Received an invalid message (non Json payload)\n{message}') + print(f'[ERROR]\tReceived a non-JSON payload: {message}') return version, timestamp, points, is_partial json_object = json.loads(message) except json.JSONDecodeError: - print(f'The following Json payload is invalid:\n{message}') + print(f'[ERROR]\tReceived an invalid JSON payload: {message}') except AttributeError: - print(f'The following Json raised an attribute error:\n{message}') + print(f'[ERROR]\tReceived a JSON payload with an attribute ' + f'error: {message}') except ValueError: - print(f'The following Json raised an ValueError error:\n{message}') + print(f'[ERROR]\tReceived a JSON payload with a value error: ' + f'{message}') else: if isinstance(json_object, int): - print(f'Received an invalid Json payload containing: \n{json_object}') + print(f'[ERROR]\tReceived an invalid JSON payload containing: ' + f'{json_object}') return version, timestamp, points, is_partial # UDMI v1 sends as int and v1+ sends version as String if VERSION not in json_object.keys(): - print('Error: no version in ', json_object) + print(f'[ERROR]\tReceived a JSON payload with no version: ' + f'{json_object}') return version, timestamp, points, is_partial version = str(json_object[VERSION]) if TIMESTAMP not in json_object.keys(): - print('Error: no timestamp in ', json_object) + print(f'[ERROR]\tReceived a JSON payload with no timestamp: ' + f'{json_object}') return version, timestamp, points, is_partial timestamp = json_object[TIMESTAMP] @@ -128,7 +133,8 @@ def _parse_data(self, points = {} if POINTS not in json_object.keys(): - print('Error: no points in ', json_object) + print(f'[ERROR]\tReceived a JSON payload with no points: ' + f'{json_object}') return version, timestamp, points, is_partial json_points = json_object[POINTS] for point_name, value in json_points.items(): diff --git a/tools/validators/instance_validator/validate/telemetry_validator.py b/tools/validators/instance_validator/validate/telemetry_validator.py index 29e96b5f2..b22366308 100644 --- a/tools/validators/instance_validator/validate/telemetry_validator.py +++ b/tools/validators/instance_validator/validate/telemetry_validator.py @@ -143,7 +143,7 @@ def ValidateMessage(self, message): entity = self.entities_with_translation[entity_name] - print(f'Validating telemetry message for entity: {entity_name}') + print(f'[INFO]\tValidating telemetry message for entity {entity_name}') point_full_paths = { f'points.{key}.present_value': key for key in tele.points } diff --git a/tools/validators/instance_validator/validate/universe_helper/config_universe.py b/tools/validators/instance_validator/validate/universe_helper/config_universe.py index ffc5fab1d..af740c7b5 100644 --- a/tools/validators/instance_validator/validate/universe_helper/config_universe.py +++ b/tools/validators/instance_validator/validate/universe_helper/config_universe.py @@ -94,6 +94,9 @@ def create_simplified_universe() -> presubmit_validate_types_lib.ConfigUniverse: hvac_type_folder.AddFromConfig( config_filename='HVAC/entity_types/CHWS.yaml', documents=[types.HVAC_CHWS_TYPES_DOCUMENT]) + hvac_type_folder.AddFromConfig( + config_filename='HVAC/entity_types/FAN.yaml', + documents=[types.HVAC_FAN_TYPES_DOCUMENT]) hvac_type_folder.AddFromConfig( config_filename='HVAC/entity_types/GENERALTYPES.yaml', documents=[types.HVAC_GENERAL_TYPES_DOCUMENT]) diff --git a/tools/validators/instance_validator/validate/universe_helper/types.py b/tools/validators/instance_validator/validate/universe_helper/types.py index 678e5d509..d3760d282 100644 --- a/tools/validators/instance_validator/validate/universe_helper/types.py +++ b/tools/validators/instance_validator/validate/universe_helper/types.py @@ -163,3 +163,26 @@ 'implements': ['DMP', 'EDM'] }, } + + +HVAC_FAN_TYPES_DOCUMENT = { + 'FAN_SS': { + 'id': '4726112880724803584', + 'description': 'Basic fan with start/stop and status.', + 'is_canonical': True, + 'uses': ['run_command','run_status'], + 'opt_uses': ['power_sensor'] + }, + 'FAN_SS_ABC':{ + 'id': 'abxc', + 'description': 'Reffan', + 'is_canonical': True, + 'uses': [ + 'run_command', + 'run_status', + 'zone_air_temperature_sensor_1', + 'zone_air_temperature_sensor_2' + ] + }, + +} From 5e58c4d7914125b40a4f89b630c8f412de220713 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Thu, 19 Jan 2023 10:02:22 +0800 Subject: [PATCH 06/45] update minor fixes --- ontology/yaml/resources/SAFETY/entity_types/FSS.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index b762cc673..6129a0964 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -30,6 +30,7 @@ FSS_ASD_AL: implements: - FSS - ASD + - AL uses: - primary_smoke_alarm - secondary_smoke_alarm From 8cec6308a7c64f597ecb18355bf9c94ca9848ed6 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Thu, 2 Feb 2023 14:33:56 +0800 Subject: [PATCH 07/45] minor update and fixes --- .../resources/HVAC/entity_types/ABSTRACT.yaml | 2212 +++++++++++------ .../HVAC/entity_types/GENERALTYPES.yaml | 65 + .../METERS/entity_types/ABSTRACT.yaml | 12 +- .../resources/METERS/entity_types/EM.yaml | 19 + .../resources/METERS/entity_types/WM.yaml | 1 + .../SAFETY/entity_types/ABSTRACT.yaml | 2 +- .../SAFETY/entity_types/GENERALTYPES.yaml | 5 +- .../resources/SAFETY/entity_types/HDS.yaml | 15 +- tools/abel/README.md | 6 +- tools/abel/model/arg_parser.py | 2 +- tools/abel/model/constants.py | 9 +- tools/abel/model/export_helper.py | 2 + tools/abel/model/model_builder.py | 6 +- tools/abel/model/state.py | 30 +- tools/abel/tests/export_helper_test.py | 2 +- tools/abel/tests/model_builder_test.py | 8 +- .../abel/tests/spreadsheet_validator_test.py | 4 +- tools/abel/tests/state_test.py | 8 +- tools/abel/tests/test_constants.py | 6 +- tools/abel/validators/README.md | 10 +- .../abel/validators/spreadsheet_validator.py | 2 +- tools/scoring/score/constants.py | 3 + tools/scoring/score/parse_config.py | 4 +- tools/validators/instance_validator/README.md | 4 +- .../tests/entity_instance_test.py | 815 +++--- ...translation_missing_fields_on_gateway.yaml | 2 +- .../instance_validator/tests/handler_test.py | 12 +- .../tests/message_filters_test.py | 6 +- .../tests/subscriber_test.py | 40 + .../tests/telemetry_validator_report_test.py | 241 ++ .../tests/telemetry_validator_test.py | 298 ++- .../instance_validator/validate/constants.py | 31 + .../validate/entity_instance.py | 384 +-- .../validate/generate_universe.py | 28 +- .../instance_validator/validate/handler.py | 186 +- .../validate/instance_parser.py | 2 +- .../validate/message_filters.py | 22 +- .../instance_validator/validate/telemetry.py | 56 +- .../validate/telemetry_validation_report.py | 237 ++ .../validate/telemetry_validator.py | 203 +- .../validate/universe_helper/types.py | 11 +- 41 files changed, 3300 insertions(+), 1711 deletions(-) create mode 100644 tools/validators/instance_validator/tests/subscriber_test.py create mode 100644 tools/validators/instance_validator/tests/telemetry_validator_report_test.py create mode 100644 tools/validators/instance_validator/validate/telemetry_validation_report.py diff --git a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml index e39679c35..aae0a6581 100644 --- a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml @@ -24,20 +24,21 @@ SD: description: "Single duct VAV type, with basic airflow control." is_abstract: true opt_uses: + - cooling_thermal_power_capacity - run_command - - supply_air_ventilation_flowrate_requirement - supply_air_cooling_flowrate_capacity + - supply_air_damper_percentage_sensor - supply_air_heating_flowrate_capacity - - cooling_thermal_power_capacity - supply_air_temperature_sensor - - supply_air_damper_percentage_sensor + - supply_air_ventilation_flowrate_requirement + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: + - supply_air_damper_percentage_command - supply_air_flowrate_sensor - supply_air_flowrate_setpoint - - supply_air_damper_percentage_command implements: - CONTROL - RDM: @@ -48,20 +49,20 @@ RDM: - run_time_accumulator implements: - MONITORING - DD: id: "8927971333061476352" description: "Dual duct flow control (hot deck, cold deck)." is_abstract: true opt_uses: - - supply_air_ventilation_flowrate_requirement - - supply_air_cooling_flowrate_capacity - - supply_air_heating_flowrate_capacity - cooling_thermal_power_capacity - - heating_thermal_power_capacity - discharge_air_temperature_sensor + - heating_thermal_power_capacity - run_command + - supply_air_cooling_flowrate_capacity + - supply_air_heating_flowrate_capacity + - supply_air_ventilation_flowrate_requirement + - failed_discharge_air_temperature_alarm uses: - cooling_air_damper_percentage_command - cooling_air_flowrate_sensor @@ -80,7 +81,7 @@ SRC: uses: - schedule_run_command implements: - - CONTROL + - CONTROL # Not deprecated but probably not useful OADM: @@ -98,8 +99,8 @@ MOAFC: - economizer_mode uses: - ventilation_outside_air_damper_percentage_command - - ventilation_outside_air_flowrate_setpoint - ventilation_outside_air_flowrate_sensor + - ventilation_outside_air_flowrate_setpoint implements: - CONTROL @@ -110,10 +111,11 @@ OAFC: opt_uses: - economizer_mode - mixed_air_temperature_sensor + - failed_mixed_air_temperature_alarm uses: - - outside_air_flowrate_setpoint - - outside_air_flowrate_sensor - outside_air_damper_percentage_command + - outside_air_flowrate_sensor + - outside_air_flowrate_setpoint implements: - CONTROL @@ -123,6 +125,10 @@ ZTM: is_abstract: true opt_uses: - discharge_air_temperature_sensor + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - zone_air_temperature_sensor implements: @@ -144,12 +150,17 @@ CSP: implements: - OPERATIONAL opt_uses: - - zone_air_relative_humidity_sensor - discharge_air_temperature_sensor + - zone_air_relative_humidity_sensor - zone_occupancy_status + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - - zone_air_temperature_sensor - zone_air_cooling_temperature_setpoint + - zone_air_temperature_sensor + ZTC: id: "10742921982891786240" @@ -160,23 +171,27 @@ ZTC: opt_uses: - zone_air_deadband_temperature_setpoint - zone_air_relative_humidity_sensor + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - - zone_air_temperature_setpoint - zone_air_temperature_sensor + - zone_air_temperature_setpoint + DSARC: id: "9767289031682424832" description: "AHU dual supply air reset control." is_abstract: true opt_uses: - - supply_air_flowrate_sensor - heating_request_count + - supply_air_flowrate_sensor uses: + - cooling_request_count + - pressurization_request_count - supply_air_cooling_temperature_setpoint - supply_air_heating_temperature_setpoint - supply_air_static_pressure_setpoint - - cooling_request_count - - pressurization_request_count implements: - CONTROL @@ -188,9 +203,10 @@ DFMSS: - OPERATIONAL opt_uses: - discharge_air_flowrate_capacity - - discharge_fan_power_capacity - discharge_fan_current_sensor + - discharge_fan_power_capacity - discharge_fan_power_sensor + - discharge_fan_lost_power_alarm uses: - discharge_fan_run_command - discharge_fan_run_status_1 @@ -201,18 +217,21 @@ DX2RC: description: "Compressor run control on retun side (RC)." is_abstract: true opt_uses: + - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity - discharge_air_temperature_sensor - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - - compressor_speed_percentage_command + - failed_discharge_air_temperature_alarm + - high_return_air_temperature_alarm + - low_return_air_temperature_alarm uses: - - return_air_temperature_setpoint - - return_air_temperature_sensor - compressor_run_command_1 - compressor_run_command_2 - compressor_run_status_1 - compressor_run_status_2 + - return_air_temperature_sensor + - return_air_temperature_setpoint implements: - CONTROL @@ -233,10 +252,15 @@ DSP: opt_uses: - discharge_air_temperature_sensor - zone_air_relative_humidity_sensor + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - - zone_air_temperature_sensor - zone_air_cooling_temperature_setpoint - zone_air_heating_temperature_setpoint + - zone_air_temperature_sensor + DDSP: id: "15044396188704964608" @@ -246,11 +270,13 @@ DDSP: - OPERATIONAL opt_uses: - discharge_air_temperature_sensor + - failed_discharge_air_temperature_alarm uses: - - zone_air_temperature_sensor_1 - - zone_air_temperature_sensor_2 - zone_air_cooling_temperature_setpoint - zone_air_heating_temperature_setpoint + - zone_air_temperature_sensor_1 + - zone_air_temperature_sensor_2 + CO2C: id: "14886233640072642560" @@ -261,6 +287,9 @@ CO2C: uses: - zone_air_co2_concentration_sensor - zone_air_co2_concentration_setpoint + opt_uses: + - high_zone_air_co2_concentration_alarm + COC: id: "11679670705384849408" @@ -271,6 +300,9 @@ COC: uses: - zone_air_co_concentration_sensor - zone_air_co_concentration_setpoint + opt_uses: + - high_zone_air_co_concentration_alarm + BPC: id: "16869691043929391104" @@ -281,11 +313,20 @@ BPC: - building_air_static_pressure_setpoint implements: - OPERATIONAL + opt_uses: + - high_building_air_static_pressure_alarm + - low_building_air_static_pressure_alarm + BPC2X: id: "4764990512371335168" description: "Building pressure control for two pressure sensors (stand-alone fan)." is_abstract: true + opt_uses: + - high_building_air_static_pressure_alarm_1 + - high_building_air_static_pressure_alarm_2 + - low_building_air_static_pressure_alarm_1 + - low_building_air_static_pressure_alarm_2 uses: - building_air_static_pressure_sensor_1 - building_air_static_pressure_sensor_2 @@ -314,8 +355,10 @@ EDBPC: description: "Building static control with exhaust damper." is_abstract: true opt_uses: - - exhaust_air_differential_pressure_sensor - exhaust_air_damper_percentage_sensor + - exhaust_air_differential_pressure_sensor + - high_building_air_static_pressure_alarm + - low_building_air_static_pressure_alarm uses: - building_air_static_pressure_sensor - building_air_static_pressure_setpoint @@ -330,9 +373,9 @@ EDRPC: opt_uses: - exhaust_air_damper_percentage_sensor uses: + - exhaust_air_damper_percentage_command - return_air_static_pressure_sensor - return_air_static_pressure_setpoint - - exhaust_air_damper_percentage_command implements: - CONTROL @@ -341,9 +384,9 @@ EFFC: description: "Exhaust fan flow control." is_abstract: true uses: - - speed_percentage_command - - exhaust_air_flowrate_setpoint - exhaust_air_flowrate_sensor + - exhaust_air_flowrate_setpoint + - speed_percentage_command implements: - CONTROL @@ -354,6 +397,9 @@ BSPC: opt_uses: - exhaust_air_damper_percentage_command - exhaust_fan_run_status + - failed_exhaust_fan_alarm + - high_building_air_static_pressure_alarm + - low_building_air_static_pressure_alarm uses: - building_air_static_pressure_sensor - building_air_static_pressure_setpoint @@ -366,25 +412,26 @@ VSC: description: "Variable speed control generic." is_abstract: true opt_uses: + - control_mode - current_sensor - - speed_percentage_sensor - - speed_frequency_sensor - - power_sensor - - voltage_sensor + - energy_accumulator - motor_temperature_sensor - - lost_power_alarm - - master_alarm - - failed_alarm - - speed_mode + - power_sensor - run_mode - run_time_accumulator - - energy_accumulator + - speed_frequency_sensor + - speed_mode + - speed_percentage_sensor - torque_sensor - - control_mode + - voltage_sensor + - failed_alarm + - local_override_alarm + - lost_power_alarm + - master_alarm uses: - - speed_percentage_command - - run_status - run_command + - run_status + - speed_percentage_command implements: - OPERATIONAL @@ -393,12 +440,13 @@ EFVSC: description: "Variable speed control for exhaust fans." is_abstract: true opt_uses: - - exhaust_fan_speed_frequency_sensor - - exhaust_fan_speed_percentage_sensor - exhaust_fan_current_sensor - exhaust_fan_power_sensor - exhaust_fan_run_mode + - exhaust_fan_speed_frequency_sensor - exhaust_fan_speed_mode + - exhaust_fan_speed_percentage_sensor + - failed_exhaust_fan_alarm uses: - exhaust_fan_run_command - exhaust_fan_run_status @@ -419,19 +467,19 @@ SFVSC: description: "Variable speed control for supply fans." is_abstract: true opt_uses: - - supply_fan_speed_frequency_sensor - - supply_fan_speed_percentage_sensor + - control_mode - supply_fan_current_sensor + - supply_fan_energy_accumulator - supply_fan_power_sensor - - supply_fan_speed_mode - supply_fan_power_status - - supply_fan_voltage_sensor - - supply_fan_torque_sensor - supply_fan_run_time_accumulator - - supply_fan_energy_accumulator - - supply_fan_lost_power_alarm + - supply_fan_speed_frequency_sensor + - supply_fan_speed_mode + - supply_fan_speed_percentage_sensor + - supply_fan_torque_sensor + - supply_fan_voltage_sensor - failed_supply_fan_alarm - - control_mode + - supply_fan_lost_power_alarm uses: - supply_fan_run_command - supply_fan_run_status @@ -444,22 +492,22 @@ DFVSC: description: "Variable speed control for discharge fans." is_abstract: true opt_uses: + - control_mode - discharge_fan_current_sensor + - discharge_fan_energy_accumulator - discharge_fan_power_sensor + - discharge_fan_run_time_accumulator - discharge_fan_speed_frequency_sensor + - discharge_fan_speed_mode - discharge_fan_speed_percentage_sensor + - discharge_fan_torque_sensor + - discharge_fan_voltage_sensor - discharge_fan_lost_power_alarm - failed_discharge_fan_alarm - - discharge_fan_voltage_sensor - - discharge_fan_torque_sensor - - discharge_fan_run_time_accumulator - - discharge_fan_energy_accumulator - - discharge_fan_speed_mode - - control_mode uses: - - discharge_fan_speed_percentage_command - - discharge_fan_run_status - discharge_fan_run_command + - discharge_fan_run_status + - discharge_fan_speed_percentage_command implements: - OPERATIONAL @@ -469,22 +517,22 @@ DFVSC2X: is_abstract: true opt_uses: - discharge_fan_current_sensor_1 - - discharge_fan_power_sensor_1 - - discharge_fan_speed_frequency_sensor_1 - - discharge_fan_speed_percentage_sensor_1 - - discharge_fan_lost_power_alarm_1 - discharge_fan_current_sensor_2 + - discharge_fan_power_sensor_1 - discharge_fan_power_sensor_2 + - discharge_fan_speed_frequency_sensor_1 - discharge_fan_speed_frequency_sensor_2 + - discharge_fan_speed_percentage_sensor_1 - discharge_fan_speed_percentage_sensor_2 + - discharge_fan_lost_power_alarm_1 - discharge_fan_lost_power_alarm_2 uses: - - discharge_fan_speed_percentage_command_1 - - discharge_fan_run_status_1 - discharge_fan_run_command_1 - - discharge_fan_speed_percentage_command_2 - - discharge_fan_run_status_2 - discharge_fan_run_command_2 + - discharge_fan_run_status_1 + - discharge_fan_run_status_2 + - discharge_fan_speed_percentage_command_1 + - discharge_fan_speed_percentage_command_2 implements: - OPERATIONAL @@ -493,11 +541,12 @@ DFVSFC: description: "Variable speed control with frequency setting for discharge fans." is_abstract: true uses: - - discharge_fan_speed_frequency_command - - discharge_fan_run_status - discharge_fan_run_command + - discharge_fan_run_status + - discharge_fan_speed_frequency_command opt_uses: - discharge_fan_speed_frequency_sensor + - failed_discharge_fan_alarm implements: - OPERATIONAL @@ -511,9 +560,9 @@ DFMSC: - discharge_fan_speed_mode opt_uses: - discharge_fan_run_mode - - schedule_run_command - - + - schedule_run_command + - failed_discharge_fan_alarm + ZHM: id: "17192076649286336512" @@ -531,6 +580,7 @@ DTM: opt_uses: - discharge_air_relative_humidity_sensor - discharge_air_specificenthalpy_sensor + - failed_discharge_air_temperature_alarm uses: - discharge_air_temperature_sensor implements: @@ -544,25 +594,33 @@ SS: - /SS - OPERATIONAL opt_uses: - - power_capacity - - flowrate_capacity - - powerfactor_sensor + - control_mode - current_sensor + - flowrate_capacity + - power_capacity - power_sensor + - powerfactor_sensor - run_time_accumulator + - failed_alarm + - local_override_alarm + - lost_power_alarm + SSPC: id: "10526749200778002432" description: "Supply static pressure control via supply fan speed" is_abstract: true opt_uses: - - supply_fan_speed_frequency_sensor - - supply_fan_run_command - - supply_fan_run_status - pressurization_request_count - supply_air_damper_percentage_command - supply_air_flowrate_sensor + - supply_fan_run_command + - supply_fan_run_status + - supply_fan_speed_frequency_sensor - supply_fan_speed_percentage_command + - failed_supply_fan_alarm + - high_supply_air_static_pressure_alarm + - low_supply_air_static_pressure_alarm uses: - supply_air_static_pressure_sensor - supply_air_static_pressure_setpoint @@ -586,11 +644,12 @@ EFSS: implements: - OPERATIONAL opt_uses: - - exhaust_fan_current_sensor - - exhaust_fan_power_sensor - exhaust_air_flowrate_capacity + - exhaust_fan_current_sensor - exhaust_fan_power_capacity + - exhaust_fan_power_sensor - exhaust_fan_run_mode + - failed_exhaust_fan_alarm uses: - exhaust_fan_run_command - exhaust_fan_run_status @@ -603,14 +662,14 @@ DFSS: - OPERATIONAL opt_uses: - discharge_air_flowrate_capacity - - discharge_fan_power_capacity + - discharge_air_static_pressure_sensor - discharge_fan_current_sensor + - discharge_fan_power_capacity - discharge_fan_power_sensor - - discharge_air_static_pressure_sensor + - discharge_fan_run_time_accumulator + - schedule_run_command - discharge_fan_lost_power_alarm - failed_discharge_fan_alarm - - schedule_run_command - - discharge_fan_run_time_accumulator - overload_discharge_fan_alarm uses: - discharge_fan_run_command @@ -624,8 +683,8 @@ DFSS2X: - OPERATIONAL uses: - discharge_fan_run_command_1 - - discharge_fan_run_status_1 - discharge_fan_run_command_2 + - discharge_fan_run_status_1 - discharge_fan_run_status_2 HT2RC: @@ -634,13 +693,16 @@ HT2RC: is_abstract: true opt_uses: - discharge_air_temperature_sensor - - heating_thermal_power_capacity - heating_percentage_command + - heating_thermal_power_capacity + - failed_discharge_air_temperature_alarm + - high_return_air_temperature_alarm + - low_return_air_temperature_alarm uses: - heater_run_command_1 - heater_run_command_2 - - return_air_temperature_setpoint - return_air_temperature_sensor + - return_air_temperature_setpoint implements: - CONTROL @@ -649,14 +711,18 @@ HTZTC: description: "Gas or electric heater control on zone side (ZC)." is_abstract: true opt_uses: - - heating_thermal_power_capacity - discharge_air_temperature_sensor - - heating_percentage_command - heater_run_status + - heating_percentage_command + - heating_thermal_power_capacity + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - heater_run_command - - zone_air_temperature_setpoint - zone_air_temperature_sensor + - zone_air_temperature_setpoint implements: - CONTROL @@ -666,14 +732,18 @@ HT3ZTC: is_abstract: true opt_uses: - discharge_air_temperature_sensor - - heating_thermal_power_capacity - heating_percentage_command + - heating_thermal_power_capacity + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - heater_run_command_1 - heater_run_command_2 - heater_run_command_3 - - zone_air_temperature_setpoint - zone_air_temperature_sensor + - zone_air_temperature_setpoint implements: - CONTROL @@ -682,11 +752,16 @@ HSOUC: description: "Heating occupied/unoccupied setpoint control." is_abstract: true uses: - - zone_air_unoccupied_heating_temperature_setpoint - zone_air_occupied_heating_temperature_setpoint - zone_air_temperature_sensor + - zone_air_unoccupied_heating_temperature_setpoint implements: - CONTROL + opt_uses: + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm + HTZOUC: id: "11998259697091084288" @@ -694,11 +769,14 @@ HTZOUC: is_abstract: true opt_uses: - heater_run_status + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - heater_run_command - - zone_air_unoccupied_heating_temperature_setpoint - zone_air_occupied_heating_temperature_setpoint - zone_air_temperature_sensor + - zone_air_unoccupied_heating_temperature_setpoint implements: - CONTROL @@ -707,9 +785,9 @@ LCC: description: "Leaving coil temperature control." is_abstract: true uses: + - chilled_water_valve_percentage_command - leaving_cooling_coil_temperature_sensor - leaving_cooling_coil_temperature_setpoint - - chilled_water_valve_percentage_command implements: - CONTROL @@ -718,10 +796,10 @@ LCC2X: description: "Double valve leaving coil temperature control." is_abstract: true uses: - - leaving_cooling_coil_temperature_sensor - - leaving_cooling_coil_temperature_setpoint - chilled_water_valve_percentage_command_1 - chilled_water_valve_percentage_command_2 + - leaving_cooling_coil_temperature_sensor + - leaving_cooling_coil_temperature_setpoint implements: - CONTROL @@ -733,12 +811,13 @@ SFSS: - OPERATIONAL opt_uses: - supply_air_flowrate_capacity - - supply_fan_power_capacity - supply_fan_current_sensor + - supply_fan_power_capacity - supply_fan_power_sensor - - failed_supply_fan_alarm - - supply_fan_run_time_accumulator - supply_fan_run_mode + - supply_fan_run_time_accumulator + - failed_supply_fan_alarm + - supply_fan_lost_power_alarm uses: - supply_fan_run_command - supply_fan_run_status @@ -751,6 +830,10 @@ RHM: - MONITORING uses: - return_air_relative_humidity_sensor + opt_uses: + - high_return_air_relative_humidity_alarm + - low_return_air_relative_humidity_alarm + RTM: id: "2924673029776605184" @@ -761,6 +844,10 @@ RTM: opt_uses: - return_air_relative_humidity_sensor - return_air_specificenthalpy_sensor + - high_return_air_relative_humidity_alarm + - high_return_air_temperature_alarm + - low_return_air_relative_humidity_alarm + - low_return_air_temperature_alarm uses: - return_air_temperature_sensor @@ -771,19 +858,24 @@ DTC: implements: - OPERATIONAL uses: - - discharge_air_temperature_setpoint - discharge_air_temperature_sensor + - discharge_air_temperature_setpoint + opt_uses: + - failed_discharge_air_temperature_alarm + STC: id: "2204097089397325824" description: "Supply air temperature control" is_abstract: true opt_uses: - - heating_request_count - cooling_request_count + - heating_request_count + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - - supply_air_temperature_setpoint - supply_air_temperature_sensor + - supply_air_temperature_setpoint implements: - OPERATIONAL @@ -796,7 +888,9 @@ RTC: uses: - return_air_temperature_sensor - return_air_temperature_setpoint - + opt_uses: + - high_return_air_temperature_alarm + - low_return_air_temperature_alarm # Rename to OTM OA: @@ -804,16 +898,16 @@ OA: description: "Basic weather station (drybulb temp and humidity)." is_abstract: true opt_uses: - - outside_air_relative_humidity_sensor + - outside_air_co2_concentration_sensor - outside_air_dewpoint_temperature_sensor - - outside_air_wetbulb_temperature_sensor - - outside_air_specificenthalpy_sensor - outside_air_pressure_sensor - - wind_linearvelocity_sensor - - wind_direction_angle_sensor - outside_air_rain_level_sensor - - outside_air_co2_concentration_sensor + - outside_air_relative_humidity_sensor + - outside_air_specificenthalpy_sensor - outside_air_voc_concentration_sensor + - outside_air_wetbulb_temperature_sensor + - wind_direction_angle_sensor + - wind_linearvelocity_sensor uses: - outside_air_temperature_sensor implements: @@ -824,8 +918,13 @@ ZA: description: "Grouped type for zone air psychrometric conditions (RH and temp)" is_abstract: true uses: - - zone_air_temperature_sensor - zone_air_relative_humidity_sensor + - zone_air_temperature_sensor + opt_uses: + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm + WDT: id: "12148045066631380992" @@ -836,6 +935,10 @@ WDT: uses: - return_water_temperature_sensor - supply_water_temperature_sensor + opt_uses: + - high_supply_water_temperature_alarm + - low_supply_water_temperature_alarm + CHWDT: id: "6815783107824713728" @@ -852,13 +955,13 @@ CHWDPSC: description: "Chilled water valve controlling supply air dewpoint temperature." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - chilled_supply_water_temperature_sensor + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor uses: + - chilled_water_valve_percentage_command - supply_air_dewpoint_temperature_sensor - supply_air_dewpoint_temperature_setpoint - - chilled_water_valve_percentage_command implements: - CONTROL @@ -867,13 +970,13 @@ CHWDPSC2X: description: "Chilled water valves (2x) controlling supply air dewpoint temperature." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor uses: - - supply_air_dewpoint_temperature_sensor - - supply_air_dewpoint_temperature_setpoint - chilled_water_valve_percentage_command_1 - chilled_water_valve_percentage_command_2 + - supply_air_dewpoint_temperature_sensor + - supply_air_dewpoint_temperature_setpoint implements: - CONTROL @@ -899,9 +1002,12 @@ SWTC: - heating_request_count - return_water_temperature_sensor - run_command + - high_supply_water_temperature_alarm + - low_supply_water_temperature_alarm uses: - - supply_water_temperature_setpoint - supply_water_temperature_sensor + - supply_water_temperature_setpoint + RWTC: id: "4684780039613448192" @@ -910,11 +1016,14 @@ RWTC: implements: - OPERATIONAL opt_uses: - - supply_water_temperature_sensor - run_command + - supply_water_temperature_sensor + - high_supply_water_temperature_alarm + - low_supply_water_temperature_alarm uses: - - return_water_temperature_setpoint - return_water_temperature_sensor + - return_water_temperature_setpoint + PSWTC: id: "10474579573063286784" @@ -935,12 +1044,13 @@ SCHWTC: implements: - OPERATIONAL opt_uses: - - cooling_request_count - chilled_return_water_temperature_sensor - cooling_percentage_command + - cooling_request_count uses: - - chilled_supply_water_temperature_setpoint - chilled_supply_water_temperature_sensor + - chilled_supply_water_temperature_setpoint + WDPC: id: "7536359048203993088" @@ -950,6 +1060,8 @@ WDPC: - OPERATIONAL opt_uses: - pressurization_request_count + - high_differential_pressure_alarm + - low_differential_pressure_alarm uses: - differential_pressure_sensor - differential_pressure_setpoint @@ -989,8 +1101,10 @@ MINFC: - CONTROL uses: - bypass_valve_percentage_command - - min_flowrate_setpoint - flowrate_sensor + - min_flowrate_setpoint + opt_uses: + - low_flowrate_alarm # Rename to CPSS CPC: @@ -998,9 +1112,10 @@ CPC: description: "Circulation pump control" is_abstract: true uses: - - circulation_pump_run_status - circulation_pump_run_command - + - circulation_pump_run_status + opt_uses: + - failed_circulation_pump_alarm ### NET NEW TYPES ETM: @@ -1011,6 +1126,9 @@ ETM: - exhaust_air_temperature_sensor implements: - MONITORING + opt_uses: + - failed_exhaust_air_temperature_alarm + ED: id: "8438952541491822592" @@ -1020,9 +1138,9 @@ ED: - exhaust_air_damper_percentage_sensor - exhaust_air_static_pressure_sensor uses: - - exhaust_air_flowrate_setpoint - - exhaust_air_flowrate_sensor - exhaust_air_damper_percentage_command + - exhaust_air_flowrate_sensor + - exhaust_air_flowrate_setpoint implements: - CONTROL @@ -1031,9 +1149,9 @@ RD: description: "Return damper flow control." is_abstract: true uses: - - return_air_flowrate_setpoint - - return_air_flowrate_sensor - return_air_damper_percentage_command + - return_air_flowrate_sensor + - return_air_flowrate_setpoint implements: - CONTROL @@ -1042,8 +1160,9 @@ MTM: description: "Mixed air temperature monitoring." is_abstract: true opt_uses: - - mixed_air_relative_humidity_sensor - mixed_air_dewpoint_temperature_sensor + - mixed_air_relative_humidity_sensor + - failed_mixed_air_temperature_alarm uses: - mixed_air_temperature_sensor implements: @@ -1058,6 +1177,9 @@ MTC: - mixed_air_temperature_setpoint implements: - OPERATIONAL + opt_uses: + - failed_mixed_air_temperature_alarm + STM: id: "5556648779974705152" @@ -1067,14 +1189,20 @@ STM: - supply_air_temperature_sensor implements: - MONITORING + opt_uses: + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm + STDSPC: id: "14780020816829480960" description: "Supply temperature control dual setpoint." is_abstract: true opt_uses: - - heating_request_count - cooling_request_count + - heating_request_count + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - supply_air_cooling_temperature_setpoint - supply_air_heating_temperature_setpoint @@ -1089,10 +1217,15 @@ DSPRTC: opt_uses: - discharge_air_temperature_sensor - return_air_relative_humidity_sensor + - failed_discharge_air_temperature_alarm + - high_return_air_relative_humidity_alarm + - high_return_air_temperature_alarm + - low_return_air_relative_humidity_alarm + - low_return_air_temperature_alarm uses: - - return_air_temperature_sensor - return_air_cooling_temperature_setpoint - return_air_heating_temperature_setpoint + - return_air_temperature_sensor implements: - OPERATIONAL @@ -1111,10 +1244,10 @@ RHC: description: "Return air relative humidity control." is_abstract: true opt_uses: + - humidifier_run_time_accumulator - failed_humidifier_alarm - high_return_air_relative_humidity_alarm - low_return_air_relative_humidity_alarm - - humidifier_run_time_accumulator uses: - return_air_relative_humidity_sensor - return_air_relative_humidity_setpoint @@ -1128,11 +1261,14 @@ RHDHC: opt_uses: - economizer_mode - humidification_percentage_command + - failed_humidifier_alarm + - high_return_air_relative_humidity_alarm + - low_return_air_relative_humidity_alarm uses: - - return_air_relative_humidity_sensor - - return_air_relative_humidity_setpoint - dehumidification_run_command - humidification_run_command + - return_air_relative_humidity_sensor + - return_air_relative_humidity_setpoint implements: - CONTROL @@ -1142,11 +1278,12 @@ ZHDHC: is_abstract: true opt_uses: - humidification_percentage_command + - failed_humidifier_alarm uses: - - zone_air_relative_humidity_sensor - - zone_air_relative_humidity_setpoint - dehumidification_run_command - humidification_run_command + - zone_air_relative_humidity_sensor + - zone_air_relative_humidity_setpoint implements: - CONTROL @@ -1156,10 +1293,14 @@ RHHC: is_abstract: true opt_uses: - humidification_percentage_command + - failed_humidifier_alarm + - high_return_air_relative_humidity_alarm + - low_return_air_relative_humidity_alarm uses: - humidification_run_command - - return_air_relative_humidity_setpoint - return_air_relative_humidity_sensor + - return_air_relative_humidity_setpoint + SHC: id: "12474177807615787008" @@ -1167,6 +1308,7 @@ SHC: is_abstract: true opt_uses: - humidification_percentage_command + - failed_humidifier_alarm uses: - dehumidification_run_command - humidification_run_command @@ -1190,8 +1332,8 @@ REFC: description: "Refrigerant leak control." is_abstract: true uses: - - zone_air_refrigerant_concentration_setpoint - zone_air_refrigerant_concentration_sensor + - zone_air_refrigerant_concentration_setpoint implements: - OPERATIONAL @@ -1200,13 +1342,22 @@ CREFM: description: "Cold Room Refrigerator monitoring." is_abstract: true opt_uses: - - failed_alarm - - run_status - - compressor_run_status - - run_time_accumulator + - compressor_run_status + - run_status + - run_time_accumulator + - compressor_lost_power_alarm + - failed_alarm + - failed_compressor_alarm + - failed_zone_air_temperature_alarm + - frost_alarm + - high_zone_air_temperature_alarm + - local_override_alarm + - low_zone_air_temperature_alarm + - overload_compressor_alarm uses: - - zone_air_temperature_sensor - - defrost_temperature_sensor + - defrost_temperature_sensor + - zone_air_temperature_sensor + EPC: id: "11105083520895156224" @@ -1228,6 +1379,9 @@ CO2M: - zone_air_co2_concentration_sensor implements: - MONITORING + opt_uses: + - high_zone_air_co2_concentration_alarm + VOCM: id: "17085863826043174912" @@ -1243,8 +1397,8 @@ VOCC: description: "Volatile organic compound control." is_abstract: true uses: - - zone_air_voc_concentration_setpoint - zone_air_voc_concentration_sensor + - zone_air_voc_concentration_setpoint implements: - OPERATIONAL @@ -1253,18 +1407,19 @@ RAVOCC: description: "Volatile organic compound control for return air from zone." is_abstract: true uses: - - return_air_voc_concentration_setpoint - return_air_voc_concentration_sensor + - return_air_voc_concentration_setpoint implements: - OPERATIONAL - + + VOCPC: id: "668891884487180288" description: "Volatile organic compound percentage control." is_abstract: true uses: - - zone_air_voc_percentage_setpoint - zone_air_voc_percentage_sensor + - zone_air_voc_percentage_setpoint implements: - OPERATIONAL @@ -1283,11 +1438,12 @@ DFHLC: description: "Discharge fan three-speed (high/low/off) speed control." is_abstract: true opt_uses: - - discharge_fan_run_status - discharge_fan_run_command + - discharge_fan_run_status + - failed_discharge_fan_alarm uses: - - low_discharge_fan_speed_command - high_discharge_fan_speed_command + - low_discharge_fan_speed_command implements: - OPERATIONAL - REMAP_REQUIRED @@ -1297,12 +1453,13 @@ DFHMLC: description: "Discharge fan three-speed (high/medium/low/off) speed control." is_abstract: true opt_uses: - - discharge_fan_run_status - discharge_fan_run_command + - discharge_fan_run_status + - failed_discharge_fan_alarm uses: + - high_discharge_fan_speed_command - low_discharge_fan_speed_command - medium_discharge_fan_speed_command - - high_discharge_fan_speed_command implements: - OPERATIONAL - REMAP_REQUIRED @@ -1313,13 +1470,14 @@ ESPC: is_abstract: true opt_uses: - exhaust_fan_speed_percentage_sensor + - failed_exhaust_fan_alarm uses: - exhaust_air_damper_percentage_command + - exhaust_air_static_pressure_sensor + - exhaust_air_static_pressure_setpoint - exhaust_fan_run_command - exhaust_fan_run_status - exhaust_fan_speed_percentage_command - - exhaust_air_static_pressure_sensor - - exhaust_air_static_pressure_setpoint implements: - OPERATIONAL @@ -1331,6 +1489,10 @@ SSPM: - supply_air_static_pressure_sensor implements: - MONITORING + opt_uses: + - high_supply_air_static_pressure_alarm + - low_supply_air_static_pressure_alarm + ZSPC: id: "4403727275367858176" @@ -1338,9 +1500,11 @@ ZSPC: is_abstract: true opt_uses: - exhaust_air_damper_percentage_command + - high_zone_air_static_pressure_alarm + - low_zone_air_static_pressure_alarm uses: - - zone_air_static_pressure_setpoint - zone_air_static_pressure_sensor + - zone_air_static_pressure_setpoint implements: - OPERATIONAL @@ -1352,6 +1516,10 @@ ZSPM: - zone_air_static_pressure_sensor implements: - MONITORING + opt_uses: + - high_zone_air_static_pressure_alarm + - low_zone_air_static_pressure_alarm + RSPC: id: "9015413293795246080" @@ -1378,8 +1546,8 @@ PWDT: description: "Primary-side water delta-T monitoring." is_abstract: true uses: - - primary_supply_water_temperature_sensor - primary_return_water_temperature_sensor + - primary_supply_water_temperature_sensor CHPM: @@ -1387,11 +1555,15 @@ CHPM: description: "Chiller pressure monitoring." is_abstract: true uses: - - evaporator_pressure_sensor - condenser_pressure_sensor - differential_pressure_sensor # consider removing or renaming, may not be descriptive enough for WCC + - evaporator_pressure_sensor implements: - MONITORING + opt_uses: + - high_differential_pressure_alarm + - low_differential_pressure_alarm + ESFM: id: "12354224387560308736" @@ -1431,14 +1603,15 @@ CHWDC: description: "Chilled water valve monitoring on discharge side." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - chilled_water_valve_percentage_sensor - chilled_water_flowrate_sensor + - chilled_water_valve_percentage_sensor + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - failed_discharge_air_temperature_alarm uses: + - chilled_water_valve_percentage_command - discharge_air_temperature_sensor - discharge_air_temperature_setpoint - - chilled_water_valve_percentage_command implements: - CONTROL @@ -1447,16 +1620,18 @@ CHWSC: description: "Chilled water valve monitoring on supply side." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - chilled_supply_water_temperature_sensor - chilled_water_valve_percentage_sensor - cooling_request_count + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor - supply_air_relative_humidity_sensor + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: + - chilled_water_valve_percentage_command - supply_air_temperature_sensor - supply_air_temperature_setpoint - - chilled_water_valve_percentage_command implements: - CONTROL @@ -1465,14 +1640,16 @@ CHWSDC: description: "Chilled water valve monitoring on supply side." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - chilled_water_valve_percentage_sensor + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - - supply_air_temperature_sensor - - supply_air_heating_temperature_setpoint - - supply_air_cooling_temperature_setpoint - chilled_water_valve_percentage_command + - supply_air_cooling_temperature_setpoint + - supply_air_heating_temperature_setpoint + - supply_air_temperature_sensor implements: - CONTROL @@ -1481,16 +1658,18 @@ CHW2XSC: description: "Two chilled water valves." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - chilled_supply_water_temperature_sensor - chilled_water_valve_percentage_sensor - cooling_request_count + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - - supply_air_temperature_sensor - - supply_air_temperature_setpoint - chilled_water_valve_percentage_command_1 - chilled_water_valve_percentage_command_2 + - supply_air_temperature_sensor + - supply_air_temperature_setpoint implements: - CONTROL @@ -1499,16 +1678,21 @@ CHWRC: description: "Chilled water valve monitoring on return side." is_abstract: true opt_uses: + - chilled_water_flowrate_sensor + - chilled_water_valve_percentage_sensor + - cooling_thermal_power_capacity - discharge_air_temperature_sensor - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - return_air_relative_humidity_sensor - - chilled_water_valve_percentage_sensor - - chilled_water_flowrate_sensor + - failed_discharge_air_temperature_alarm + - high_return_air_relative_humidity_alarm + - high_return_air_temperature_alarm + - low_return_air_relative_humidity_alarm + - low_return_air_temperature_alarm uses: - - return_air_temperature_setpoint - - return_air_temperature_sensor - chilled_water_valve_percentage_command + - return_air_temperature_sensor + - return_air_temperature_setpoint implements: - CONTROL @@ -1517,17 +1701,21 @@ CHWZC: description: "Chilled water valve monitoring on zone side (DSP, CSP)." is_abstract: true opt_uses: - - discharge_air_temperature_sensor - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - chilled_water_valve_percentage_sensor - chilled_supply_water_isolation_valve_command - chilled_supply_water_isolation_valve_status - chilled_supply_water_temperature_sensor + - chilled_water_valve_percentage_sensor + - cooling_thermal_power_capacity + - discharge_air_temperature_sensor + - leaving_cooling_coil_temperature_sensor + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: + - chilled_water_valve_percentage_command - zone_air_cooling_temperature_setpoint - zone_air_temperature_sensor - - chilled_water_valve_percentage_command implements: - CONTROL @@ -1536,15 +1724,19 @@ CHWZTC: description: "Chilled water valve monitoring on zone side (ZTC)." is_abstract: true opt_uses: - - discharge_air_temperature_sensor - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - chilled_water_flowrate_sensor - chilled_water_valve_percentage_sensor + - cooling_thermal_power_capacity + - discharge_air_temperature_sensor + - leaving_cooling_coil_temperature_sensor + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - - zone_air_temperature_setpoint - - zone_air_temperature_sensor - chilled_water_valve_percentage_command + - zone_air_temperature_sensor + - zone_air_temperature_setpoint implements: - CONTROL @@ -1564,18 +1756,18 @@ CHWZTC2X: description: "Chilled water valve control on zone side (ZTC) for two separate zones. Chilled water valve controls to the worst zone." is_abstract: true opt_uses: + - chilled_water_flowrate_sensor + - chilled_water_valve_percentage_sensor + - cooling_thermal_power_capacity - discharge_air_temperature_sensor_1 - discharge_air_temperature_sensor_2 - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - chilled_water_flowrate_sensor - - chilled_water_valve_percentage_sensor uses: - - zone_air_temperature_setpoint_1 - - zone_air_temperature_setpoint_2 + - chilled_water_valve_percentage_command - zone_air_temperature_sensor_1 - zone_air_temperature_sensor_2 - - chilled_water_valve_percentage_command + - zone_air_temperature_setpoint_1 + - zone_air_temperature_setpoint_2 implements: - CONTROL @@ -1586,17 +1778,24 @@ DXZTC: description: "Compressor run control on zone side (ZTC)." is_abstract: true opt_uses: + - compressor_run_time_accumulator + - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity - discharge_air_temperature_sensor - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - - compressor_speed_percentage_command - - compressor_run_time_accumulator + - compressor_lost_power_alarm + - failed_compressor_alarm + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm + - overload_compressor_alarm uses: - - zone_air_temperature_setpoint - - zone_air_temperature_sensor - compressor_run_command - compressor_run_status + - zone_air_temperature_sensor + - zone_air_temperature_setpoint implements: - CONTROL @@ -1605,20 +1804,24 @@ DX2ZTC: description: "Compressor run control on zone side (ZTC)." is_abstract: true opt_uses: + - compressor_run_time_accumulator_1 + - compressor_run_time_accumulator_2 + - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity - discharge_air_temperature_sensor - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - - compressor_speed_percentage_command - - compressor_run_time_accumulator_1 - - compressor_run_time_accumulator_2 + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - - zone_air_temperature_setpoint - - zone_air_temperature_sensor - compressor_run_command_1 - compressor_run_command_2 - compressor_run_status_1 - compressor_run_status_2 + - zone_air_temperature_sensor + - zone_air_temperature_setpoint implements: - CONTROL @@ -1627,16 +1830,23 @@ DXZC: description: "Compressor run control on zone side (DSP, CSP)." is_abstract: true opt_uses: + - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity - discharge_air_temperature_sensor - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - - compressor_speed_percentage_command + - compressor_lost_power_alarm + - failed_compressor_alarm + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm + - overload_compressor_alarm uses: - - zone_air_cooling_temperature_setpoint - - zone_air_temperature_sensor - compressor_run_command - compressor_run_status + - zone_air_cooling_temperature_setpoint + - zone_air_temperature_sensor implements: - CONTROL @@ -1646,17 +1856,23 @@ DXDSPRTC: description: "Compressor run control with dual return temp control." is_abstract: true opt_uses: + - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity - discharge_air_temperature_sensor - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - - compressor_speed_percentage_command - uses: + - compressor_lost_power_alarm + - failed_compressor_alarm + - failed_discharge_air_temperature_alarm + - high_return_air_temperature_alarm + - low_return_air_temperature_alarm + - overload_compressor_alarm + uses: + - compressor_run_command + - compressor_run_status - return_air_cooling_temperature_setpoint - return_air_heating_temperature_setpoint - return_air_temperature_sensor - - compressor_run_command - - compressor_run_status implements: - CONTROL @@ -1666,18 +1882,22 @@ DX2ZC: description: "Two compressor run control on zone side (DSP, CSP)." is_abstract: true opt_uses: + - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity - discharge_air_temperature_sensor - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - - compressor_speed_percentage_command + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - - zone_air_cooling_temperature_setpoint - - zone_air_temperature_sensor - compressor_run_command_1 - compressor_run_command_2 - compressor_run_status_1 - compressor_run_status_2 + - zone_air_cooling_temperature_setpoint + - zone_air_temperature_sensor implements: - CONTROL @@ -1686,11 +1906,15 @@ DX3ZC: description: "Three compressor run control on zone side." is_abstract: true opt_uses: + - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity - discharge_air_temperature_sensor - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - - compressor_speed_percentage_command + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - compressor_run_command_1 - compressor_run_command_2 @@ -1698,8 +1922,8 @@ DX3ZC: - compressor_run_status_1 - compressor_run_status_2 - compressor_run_status_3 - - zone_air_temperature_sensor - zone_air_cooling_temperature_setpoint + - zone_air_temperature_sensor implements: - CONTROL @@ -1708,11 +1932,15 @@ DX4ZC: description: "Four compressor run control on zone side." is_abstract: true opt_uses: + - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity - discharge_air_temperature_sensor - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - - compressor_speed_percentage_command + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - compressor_run_command_1 - compressor_run_command_2 @@ -1722,8 +1950,8 @@ DX4ZC: - compressor_run_status_2 - compressor_run_status_3 - compressor_run_status_4 - - zone_air_temperature_sensor - zone_air_cooling_temperature_setpoint + - zone_air_temperature_sensor implements: - CONTROL @@ -1732,19 +1960,20 @@ DX2ZC2X: description: "Two compressor run control on zone side (DSP, CSP) with two zone temp sensors." is_abstract: true opt_uses: + - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity - discharge_air_temperature_sensor - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - - compressor_speed_percentage_command + - failed_discharge_air_temperature_alarm uses: - - zone_air_cooling_temperature_setpoint - - zone_air_temperature_sensor_1 - - zone_air_temperature_sensor_2 - compressor_run_command_1 - compressor_run_command_2 - compressor_run_status_1 - compressor_run_status_2 + - zone_air_cooling_temperature_setpoint + - zone_air_temperature_sensor_1 + - zone_air_temperature_sensor_2 implements: - CONTROL @@ -1753,14 +1982,19 @@ DXSC: description: "Compressor run control on supply air side (STC)." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command #Serves as a duty cycle for single-stage DX sections. - compressor_speed_percentage_command + - cooling_percentage_command #Serves as a duty cycle for single-stage DX sections. - cooling_request_count + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - compressor_lost_power_alarm + - failed_compressor_alarm + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm + - overload_compressor_alarm uses: - - compressor_run_status - compressor_run_command + - compressor_run_status - supply_air_temperature_sensor - supply_air_temperature_setpoint implements: @@ -1771,11 +2005,13 @@ DX2SC: description: "Two compressor run control on supply air side." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - compressor_speed_percentage_command + - cooling_percentage_command - cooling_request_count + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - compressor_run_command_1 - compressor_run_command_2 @@ -1791,11 +2027,13 @@ DX3SC: description: "Three compressor run control on supply air side." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - compressor_speed_percentage_command + - cooling_percentage_command - cooling_request_count + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - compressor_run_command_1 - compressor_run_command_2 @@ -1813,20 +2051,22 @@ DX4SC: description: "Four compressor run control on supply air side." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - compressor_speed_percentage_command + - cooling_percentage_command - cooling_request_count + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - - compressor_run_status_1 - - compressor_run_status_2 - - compressor_run_status_3 - - compressor_run_status_4 - compressor_run_command_1 - compressor_run_command_2 - compressor_run_command_3 - compressor_run_command_4 + - compressor_run_status_1 + - compressor_run_status_2 + - compressor_run_status_3 + - compressor_run_status_4 - supply_air_temperature_sensor - supply_air_temperature_setpoint implements: @@ -1838,18 +2078,20 @@ DX2SDC: description: "Two compressor run control on supply air side (dual temp setpoint)." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - compressor_run_command_1 - compressor_run_command_2 - compressor_run_status_1 - compressor_run_status_2 - - supply_air_temperature_sensor - - supply_air_heating_temperature_setpoint - supply_air_cooling_temperature_setpoint + - supply_air_heating_temperature_setpoint + - supply_air_temperature_sensor implements: - CONTROL @@ -1859,10 +2101,12 @@ DX4SWC: description: "Four compressor run control on supply water side." is_abstract: true opt_uses: - - cooling_thermal_power_capacity - - cooling_percentage_command - compressor_speed_percentage_command - compressor_speed_percentage_sensor + - cooling_percentage_command + - cooling_thermal_power_capacity + - high_supply_water_temperature_alarm + - low_supply_water_temperature_alarm uses: - compressor_run_command_1 - compressor_run_command_2 @@ -1882,10 +2126,12 @@ DX2SWC: description: "Two compressor run control on supply water side." is_abstract: true opt_uses: - - cooling_thermal_power_capacity - - cooling_percentage_command - compressor_speed_percentage_command - compressor_speed_percentage_sensor + - cooling_percentage_command + - cooling_thermal_power_capacity + - high_supply_water_temperature_alarm + - low_supply_water_temperature_alarm uses: - compressor_run_command_1 - compressor_run_command_2 @@ -1902,10 +2148,15 @@ DXSWC: description: "Compressor run control on supply water side." is_abstract: true opt_uses: - - cooling_thermal_power_capacity - - cooling_percentage_command - compressor_speed_percentage_command - compressor_speed_percentage_sensor + - cooling_percentage_command + - cooling_thermal_power_capacity + - compressor_lost_power_alarm + - failed_compressor_alarm + - high_supply_water_temperature_alarm + - low_supply_water_temperature_alarm + - overload_compressor_alarm uses: - compressor_run_command - compressor_run_status @@ -1919,11 +2170,13 @@ DX5SC: description: "Five compressor run control on supply side." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - compressor_speed_percentage_command + - cooling_percentage_command - cooling_request_count + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - compressor_run_command_1 - compressor_run_command_2 @@ -1945,21 +2198,23 @@ DXRC: description: "Compressor run control on return air side (RC)." is_abstract: true opt_uses: + - compressor_run_time_accumulator + - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity - discharge_air_temperature_sensor - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - - compressor_speed_percentage_command + - compressor_lost_power_alarm - failed_compressor_alarm - - overload_compressor_alarm - - compressor_run_time_accumulator + - failed_discharge_air_temperature_alarm - high_return_air_temperature_alarm - low_return_air_temperature_alarm + - overload_compressor_alarm uses: - - return_air_temperature_setpoint - - return_air_temperature_sensor - compressor_run_command - compressor_run_status + - return_air_temperature_sensor + - return_air_temperature_setpoint implements: - CONTROL @@ -1968,14 +2223,18 @@ DXDC: description: "Compressor run control on discharge air side (DTC)." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - - compressor_speed_percentage_command - compressor_run_time_accumulator + - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - compressor_lost_power_alarm + - failed_compressor_alarm + - failed_discharge_air_temperature_alarm + - overload_compressor_alarm uses: - - compressor_run_status - compressor_run_command + - compressor_run_status - discharge_air_temperature_sensor - discharge_air_temperature_setpoint implements: @@ -1986,19 +2245,20 @@ DX2DC: description: "Two compressor run control on discharge side (DTC)." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - - compressor_speed_percentage_command - compressor_run_time_accumulator_1 - - compressor_run_time_accumulator_2 + - compressor_run_time_accumulator_2 + - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - failed_discharge_air_temperature_alarm uses: - - discharge_air_temperature_sensor - - discharge_air_temperature_setpoint - compressor_run_command_1 - compressor_run_command_2 - compressor_run_status_1 - compressor_run_status_2 + - discharge_air_temperature_sensor + - discharge_air_temperature_setpoint implements: - CONTROL @@ -2007,19 +2267,20 @@ DX3DC: description: "Three compressor run control on discharge side (DTC)." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - failed_discharge_air_temperature_alarm uses: - - discharge_air_temperature_sensor - - discharge_air_temperature_setpoint - compressor_run_command_1 - compressor_run_command_2 - compressor_run_command_3 - compressor_run_status_1 - compressor_run_status_2 - compressor_run_status_3 + - discharge_air_temperature_sensor + - discharge_air_temperature_setpoint implements: - CONTROL @@ -2028,17 +2289,22 @@ HPSC: description: "Supply side heat pump control." is_abstract: true opt_uses: - - cooling_thermal_power_capacity - - heating_thermal_power_capacity - compressor_speed_percentage_command - cooling_request_count + - cooling_thermal_power_capacity - heating_request_count + - heating_thermal_power_capacity + - compressor_lost_power_alarm + - failed_compressor_alarm + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm + - overload_compressor_alarm uses: - - supply_air_temperature_sensor - - supply_air_temperature_setpoint - compressor_run_command - compressor_run_status - reversing_valve_command + - supply_air_temperature_sensor + - supply_air_temperature_setpoint implements: - CONTROL @@ -2047,19 +2313,21 @@ HP2SC: description: "Supply side heat pump control." is_abstract: true opt_uses: - - cooling_thermal_power_capacity - - heating_thermal_power_capacity - compressor_speed_percentage_command - cooling_request_count + - cooling_thermal_power_capacity - heating_request_count + - heating_thermal_power_capacity + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - - supply_air_temperature_sensor - - supply_air_temperature_setpoint - compressor_run_command_1 - compressor_run_command_2 - compressor_run_status_1 - compressor_run_status_2 - reversing_valve_command + - supply_air_temperature_sensor + - supply_air_temperature_setpoint implements: - CONTROL @@ -2068,14 +2336,18 @@ HPDC: description: "Discharge side heat pump control." is_abstract: true opt_uses: + - compressor_speed_percentage_command - cooling_thermal_power_capacity - heating_thermal_power_capacity - - compressor_speed_percentage_command + - compressor_lost_power_alarm + - failed_compressor_alarm + - failed_discharge_air_temperature_alarm + - overload_compressor_alarm uses: - - discharge_air_temperature_sensor - - discharge_air_temperature_setpoint - compressor_run_command - compressor_run_status + - discharge_air_temperature_sensor + - discharge_air_temperature_setpoint - reversing_valve_command implements: - CONTROL @@ -2085,16 +2357,23 @@ HPZTC: description: "Zone temp heat pump control (ZTC)." is_abstract: true opt_uses: - - discharge_air_temperature_sensor + - compressor_speed_percentage_command - cooling_thermal_power_capacity + - discharge_air_temperature_sensor - heating_thermal_power_capacity - - compressor_speed_percentage_command + - compressor_lost_power_alarm + - failed_compressor_alarm + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm + - overload_compressor_alarm uses: - - zone_air_temperature_setpoint - - zone_air_temperature_sensor - compressor_run_command - compressor_run_status - reversing_valve_command + - zone_air_temperature_sensor + - zone_air_temperature_setpoint implements: - CONTROL @@ -2103,17 +2382,24 @@ HPZC: description: "Zone temp heat pump control (CSP or DSP)." is_abstract: true opt_uses: - - discharge_air_temperature_sensor + - compressor_speed_percentage_command - cooling_thermal_power_capacity + - discharge_air_temperature_sensor - heating_thermal_power_capacity - - compressor_speed_percentage_command + - compressor_lost_power_alarm + - failed_compressor_alarm + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm + - overload_compressor_alarm uses: - - zone_air_cooling_temperature_setpoint - - zone_air_heating_temperature_setpoint - - zone_air_temperature_sensor - compressor_run_command - compressor_run_status - reversing_valve_command + - zone_air_cooling_temperature_setpoint + - zone_air_heating_temperature_setpoint + - zone_air_temperature_sensor implements: - CONTROL @@ -2122,19 +2408,23 @@ HP2ZC: description: "Zone temp heat pump control with two compressors." is_abstract: true opt_uses: - - discharge_air_temperature_sensor + - compressor_speed_percentage_command - cooling_thermal_power_capacity + - discharge_air_temperature_sensor - heating_thermal_power_capacity - - compressor_speed_percentage_command + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - - zone_air_cooling_temperature_setpoint - - zone_air_heating_temperature_setpoint - - zone_air_temperature_sensor - compressor_run_command_1 - compressor_run_command_2 - compressor_run_status_1 - compressor_run_status_2 - reversing_valve_command + - zone_air_cooling_temperature_setpoint + - zone_air_heating_temperature_setpoint + - zone_air_temperature_sensor implements: - CONTROL @@ -2143,14 +2433,16 @@ HWDC: description: "Heating water valve monitoring on discharge air side." is_abstract: true opt_uses: - - heating_water_valve_percentage_sensor - - heating_thermal_power_capacity - discharge_air_relative_humidity_sensor + - heating_thermal_power_capacity - heating_water_flowrate_sensor + - heating_water_valve_percentage_sensor + - failed_discharge_air_temperature_alarm + - failed_heating_water_valve_alarm uses: - - heating_water_valve_percentage_command - - discharge_air_temperature_setpoint - discharge_air_temperature_sensor + - discharge_air_temperature_setpoint + - heating_water_valve_percentage_command implements: - CONTROL @@ -2159,14 +2451,16 @@ HWRC: description: "Heating water valve monitoring on discharge air side." is_abstract: true opt_uses: - - heating_water_valve_percentage_sensor - - heating_thermal_power_capacity - discharge_air_relative_humidity_sensor + - heating_thermal_power_capacity - heating_water_flowrate_sensor + - heating_water_valve_percentage_sensor + - high_return_air_temperature_alarm + - low_return_air_temperature_alarm uses: - heating_water_valve_percentage_command - - return_air_temperature_setpoint - return_air_temperature_sensor + - return_air_temperature_setpoint implements: - CONTROL @@ -2175,14 +2469,16 @@ HWSC: description: "Heating water valve monitoring on supply air side." is_abstract: true opt_uses: - - heating_water_valve_percentage_sensor + - heating_request_count - heating_thermal_power_capacity + - heating_water_valve_percentage_sensor - leaving_heating_coil_temperature_sensor - - heating_request_count + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - heating_water_valve_percentage_command - - supply_air_temperature_setpoint - supply_air_temperature_sensor + - supply_air_temperature_setpoint implements: - CONTROL @@ -2191,14 +2487,16 @@ HW2SC: description: "Two heating water valves on supply air side." is_abstract: true opt_uses: + - heating_request_count - heating_thermal_power_capacity - leaving_heating_coil_temperature_sensor - - heating_request_count + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - heating_water_valve_percentage_command_1 - heating_water_valve_percentage_command_2 - - supply_air_temperature_setpoint - supply_air_temperature_sensor + - supply_air_temperature_setpoint implements: - CONTROL @@ -2208,10 +2506,14 @@ HWZC: is_abstract: true opt_uses: - discharge_air_temperature_sensor - - heating_water_valve_percentage_sensor - - heating_thermal_power_capacity - heating_supply_water_isolation_valve_command - heating_supply_water_isolation_valve_status + - heating_thermal_power_capacity + - heating_water_valve_percentage_sensor + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - heating_water_valve_percentage_command - zone_air_heating_temperature_setpoint @@ -2225,13 +2527,17 @@ HWZTC: is_abstract: true opt_uses: - discharge_air_temperature_sensor - - heating_water_valve_percentage_sensor - heating_thermal_power_capacity - heating_water_flowrate_sensor + - heating_water_valve_percentage_sensor + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - heating_water_valve_percentage_command - - zone_air_temperature_setpoint - zone_air_temperature_sensor + - zone_air_temperature_setpoint implements: - CONTROL @@ -2240,13 +2546,15 @@ HWSWC: description: "Heating water valve monitoring on supply water side." is_abstract: true opt_uses: - - heating_water_valve_percentage_sensor - heating_thermal_power_capacity + - heating_water_valve_percentage_sensor - return_water_temperature_sensor + - high_supply_water_temperature_alarm + - low_supply_water_temperature_alarm uses: - heating_water_valve_percentage_command - - supply_water_temperature_setpoint - supply_water_temperature_sensor + - supply_water_temperature_setpoint implements: - CONTROL @@ -2255,15 +2563,18 @@ PHWSC: description: "Preheating water valve monitoring on supply air side." is_abstract: true opt_uses: - - leaving_air_preheating_coil_temperature_sensor - heating_request_count + - leaving_air_preheating_coil_temperature_sensor + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - preheating_water_valve_percentage_command - - supply_air_temperature_setpoint - supply_air_temperature_sensor + - supply_air_temperature_setpoint implements: - CONTROL - + + HWPVM: id: "5829955484802613248" description: "Heating water pressure valve command and position monitoring (without regard to what controls it)." @@ -2274,20 +2585,21 @@ HWPVM: - heating_water_valve_percentage_sensor implements: - OPERATIONAL - + HTDC: id: "656732385395605504" description: "Gas or electric heater control on discharge side." is_abstract: true opt_uses: - - heating_thermal_power_capacity - - heating_percentage_command - heater_run_status + - heating_percentage_command + - heating_thermal_power_capacity + - failed_discharge_air_temperature_alarm uses: - - heater_run_command - - discharge_air_temperature_setpoint - discharge_air_temperature_sensor + - discharge_air_temperature_setpoint + - heater_run_command implements: - CONTROL @@ -2296,14 +2608,15 @@ HT2DC: description: "Two gas or electric heater control on discharge control." is_abstract: true opt_uses: - - heating_thermal_power_capacity - heating_percentage_command + - heating_thermal_power_capacity - leaving_heating_coil_temperature_sensor + - failed_discharge_air_temperature_alarm uses: - - heater_run_command_1 - - heater_run_command_2 - discharge_air_heating_temperature_setpoint - discharge_air_temperature_sensor + - heater_run_command_1 + - heater_run_command_2 implements: - CONTROL @@ -2313,14 +2626,16 @@ HTSC: description: "Gas or electric heater control on supply side." is_abstract: true opt_uses: - - heating_thermal_power_capacity - - heating_percentage_command - heater_run_status + - heating_percentage_command - heating_request_count + - heating_thermal_power_capacity + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - heater_run_command - - supply_air_temperature_setpoint - supply_air_temperature_sensor + - supply_air_temperature_setpoint implements: - CONTROL @@ -2330,13 +2645,15 @@ HTSDC: description: "Gas or electric heater control on supply side." is_abstract: true opt_uses: - - heating_thermal_power_capacity - heater_run_status - heating_percentage_command + - heating_thermal_power_capacity + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - heater_run_command - - supply_air_heating_temperature_setpoint - supply_air_cooling_temperature_setpoint + - supply_air_heating_temperature_setpoint - supply_air_temperature_sensor implements: - CONTROL @@ -2347,15 +2664,18 @@ HTRC: description: "Gas or electric heater control on return side (RC)." is_abstract: true opt_uses: - - heating_thermal_power_capacity - discharge_air_temperature_sensor - - heating_percentage_command - heater_run_status - heater_run_time_accumulator + - heating_percentage_command + - heating_thermal_power_capacity + - failed_discharge_air_temperature_alarm + - high_return_air_temperature_alarm + - low_return_air_temperature_alarm uses: - heater_run_command - - return_air_temperature_setpoint - return_air_temperature_sensor + - return_air_temperature_setpoint implements: - CONTROL @@ -2364,10 +2684,14 @@ HTZC: description: "Gas or electric heater control on zone side (ZC)." is_abstract: true opt_uses: - - heating_thermal_power_capacity - discharge_air_temperature_sensor - - heating_percentage_command - heater_run_status + - heating_percentage_command + - heating_thermal_power_capacity + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - heater_run_command - zone_air_heating_temperature_setpoint @@ -2381,8 +2705,12 @@ HT2ZC: is_abstract: true opt_uses: - discharge_air_temperature_sensor - - heating_thermal_power_capacity - heating_percentage_command + - heating_thermal_power_capacity + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - heater_run_command_1 - heater_run_command_2 @@ -2396,19 +2724,19 @@ HT2XZTC2X: description: "Two separate heating sections going to two different zones on the device, with independent heating control." is_abstract: true opt_uses: - - heating_percentage_command_1 - discharge_air_temperature_sensor_1 - - heating_percentage_command_2 - discharge_air_temperature_sensor_2 + - heating_percentage_command_1 + - heating_percentage_command_2 uses: - - zone_air_temperature_setpoint_1 - - zone_air_temperature_sensor_1 - heater_run_command_1 - - heater_run_status_1 - - zone_air_temperature_setpoint_2 - - zone_air_temperature_sensor_2 - heater_run_command_2 + - heater_run_status_1 - heater_run_status_2 + - zone_air_temperature_sensor_1 + - zone_air_temperature_sensor_2 + - zone_air_temperature_setpoint_1 + - zone_air_temperature_setpoint_2 implements: - CONTROL @@ -2419,6 +2747,10 @@ HT3ZC: opt_uses: - discharge_air_temperature_sensor - heating_thermal_power_capacity + - failed_discharge_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - heater_run_command_1 - heater_run_command_2 @@ -2435,8 +2767,10 @@ HTSWC: description: "Two gas or electric heater control on supply water side." is_abstract: true opt_uses: - - heating_thermal_power_capacity - heating_percentage_command + - heating_thermal_power_capacity + - high_supply_water_temperature_alarm + - low_supply_water_temperature_alarm uses: - heater_run_command - supply_water_temperature_sensor @@ -2450,8 +2784,10 @@ HT2SWC: description: "Two gas or electric heater control on supply water side." is_abstract: true opt_uses: - - heating_thermal_power_capacity - heating_percentage_command + - heating_thermal_power_capacity + - high_supply_water_temperature_alarm + - low_supply_water_temperature_alarm uses: - heater_run_command_1 - heater_run_command_2 @@ -2465,8 +2801,10 @@ HT4SWC: description: "Four gas or electric heater control on supply water side." is_abstract: true opt_uses: - - heating_thermal_power_capacity - heating_percentage_command + - heating_thermal_power_capacity + - high_supply_water_temperature_alarm + - low_supply_water_temperature_alarm uses: - heater_run_command_1 - heater_run_command_2 @@ -2483,9 +2821,11 @@ HT2SC: description: "Two gas or electric heater control on supply side." is_abstract: true opt_uses: - - heating_thermal_power_capacity - heating_percentage_command - heating_request_count + - heating_thermal_power_capacity + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - heater_run_command_1 - heater_run_command_2 @@ -2500,9 +2840,11 @@ HT3SC: description: "Three gas or electric heater control on supply side." is_abstract: true opt_uses: - - heating_thermal_power_capacity - heating_percentage_command - heating_request_count + - heating_thermal_power_capacity + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - heater_run_command_1 - heater_run_command_2 @@ -2518,9 +2860,11 @@ HT4SC: description: "Four gas or electric heater control on supply side." is_abstract: true opt_uses: - - heating_thermal_power_capacity - heating_percentage_command - heating_request_count + - heating_thermal_power_capacity + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - heater_run_command_1 - heater_run_command_2 @@ -2536,14 +2880,16 @@ HT2SDC: description: "Two gas or electric heater control on supply side (dual setpoint)." is_abstract: true opt_uses: - - heating_thermal_power_capacity - heating_percentage_command + - heating_thermal_power_capacity + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - heater_run_command_1 - heater_run_command_2 - - supply_air_temperature_sensor - - supply_air_heating_temperature_setpoint - supply_air_cooling_temperature_setpoint + - supply_air_heating_temperature_setpoint + - supply_air_temperature_sensor implements: - CONTROL @@ -2552,14 +2898,16 @@ HTVSC: description: "Variable gas to electric control on supply air side." is_abstract: true opt_uses: - - heating_thermal_power_capacity - heating_request_count + - heating_thermal_power_capacity + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - heater_run_command - heater_run_status - heating_percentage_command - - supply_air_temperature_setpoint - supply_air_temperature_sensor + - supply_air_temperature_setpoint implements: - CONTROL @@ -2569,19 +2917,24 @@ ECON: is_abstract: true opt_uses: - low_limit_outside_air_damper_percentage_command - - supply_air_temperature_sensor + - outside_air_damper_percentage_sensor - outside_air_flowrate_sensor - outside_air_flowrate_setpoint - outside_air_relative_humidity_sensor - - outside_air_damper_percentage_sensor - return_air_damper_percentage_command + - supply_air_temperature_sensor + - failed_mixed_air_temperature_alarm + - high_return_air_temperature_alarm + - high_supply_air_temperature_alarm + - low_return_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - - outside_air_temperature_sensor - economizer_mode - mixed_air_temperature_sensor - - supply_air_temperature_setpoint - outside_air_damper_percentage_command + - outside_air_temperature_sensor - return_air_temperature_sensor + - supply_air_temperature_setpoint implements: - CONTROL @@ -2591,19 +2944,23 @@ ECOND: description: "Economizer mode control - single zone" is_abstract: true opt_uses: - - return_air_temperature_sensor - - outside_air_flowrate_sensor - - outside_air_flowrate_setpoint + - low_limit_outside_air_damper_percentage_command - mixed_air_temperature_sensor - outside_air_damper_percentage_sensor - - low_limit_outside_air_damper_percentage_command + - outside_air_flowrate_sensor + - outside_air_flowrate_setpoint - return_air_damper_percentage_command + - return_air_temperature_sensor + - failed_discharge_air_temperature_alarm + - failed_mixed_air_temperature_alarm + - high_return_air_temperature_alarm + - low_return_air_temperature_alarm uses: - - outside_air_temperature_sensor - - economizer_mode - discharge_air_temperature_sensor - discharge_air_temperature_setpoint + - economizer_mode - outside_air_damper_percentage_command + - outside_air_temperature_sensor implements: - CONTROL @@ -2612,18 +2969,23 @@ ECONM: description: "Economizer mode control" is_abstract: true opt_uses: + - low_limit_outside_air_damper_percentage_command + - outside_air_damper_percentage_sensor - outside_air_flowrate_sensor - outside_air_flowrate_setpoint - - supply_air_temperature_sensor - - outside_air_damper_percentage_sensor - - low_limit_outside_air_damper_percentage_command - return_air_damper_percentage_command + - supply_air_temperature_sensor + - failed_mixed_air_temperature_alarm + - high_return_air_temperature_alarm + - high_supply_air_temperature_alarm + - low_return_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - - outside_air_temperature_sensor - economizer_mode - mixed_air_temperature_sensor - mixed_air_temperature_setpoint - outside_air_damper_percentage_command + - outside_air_temperature_sensor - return_air_temperature_sensor implements: - CONTROL @@ -2633,19 +2995,23 @@ ECONM2X: description: "Economizer mode control" is_abstract: true opt_uses: + - low_limit_outside_air_damper_percentage_command + - outside_air_damper_percentage_sensor - outside_air_flowrate_sensor - outside_air_flowrate_setpoint - - supply_air_temperature_sensor - - outside_air_damper_percentage_sensor - - low_limit_outside_air_damper_percentage_command - return_air_damper_percentage_command + - supply_air_temperature_sensor + - high_return_air_temperature_alarm + - high_supply_air_temperature_alarm + - low_return_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - - outside_air_temperature_sensor - economizer_mode - mixed_air_temperature_sensor_1 - mixed_air_temperature_sensor_2 - mixed_air_temperature_setpoint - outside_air_damper_percentage_command + - outside_air_temperature_sensor - return_air_temperature_sensor implements: - CONTROL @@ -2655,19 +3021,23 @@ ECONMD: description: "Economizer mode control - single zone" is_abstract: true opt_uses: - - low_limit_outside_air_damper_percentage_command - discharge_air_temperature_sensor + - low_limit_outside_air_damper_percentage_command + - outside_air_damper_percentage_sensor - outside_air_flowrate_sensor - outside_air_flowrate_setpoint - - return_air_temperature_sensor - - outside_air_damper_percentage_sensor - return_air_damper_percentage_command + - return_air_temperature_sensor + - failed_discharge_air_temperature_alarm + - failed_mixed_air_temperature_alarm + - high_return_air_temperature_alarm + - low_return_air_temperature_alarm uses: - - outside_air_temperature_sensor - economizer_mode - mixed_air_temperature_sensor - mixed_air_temperature_setpoint - outside_air_damper_percentage_command + - outside_air_temperature_sensor implements: - CONTROL @@ -2676,21 +3046,28 @@ ECONZ: description: "Economizer mode control - single room" is_abstract: true opt_uses: - - low_limit_outside_air_damper_percentage_command - discharge_air_temperature_sensor - - outside_air_flowrate_sensor - - outside_air_relative_humidity_sensor - - outside_air_flowrate_setpoint - - return_air_temperature_sensor + - low_limit_outside_air_damper_percentage_command - mixed_air_temperature_sensor - outside_air_damper_percentage_sensor + - outside_air_flowrate_sensor + - outside_air_flowrate_setpoint + - outside_air_relative_humidity_sensor - return_air_damper_percentage_command + - return_air_temperature_sensor + - failed_discharge_air_temperature_alarm + - failed_mixed_air_temperature_alarm + - failed_zone_air_temperature_alarm + - high_return_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_return_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - - outside_air_temperature_sensor - economizer_mode - - zone_air_temperature_sensor - - zone_air_cooling_temperature_setpoint - outside_air_damper_percentage_command + - outside_air_temperature_sensor + - zone_air_cooling_temperature_setpoint + - zone_air_temperature_sensor implements: - CONTROL VOADM: @@ -2699,12 +3076,13 @@ VOADM: is_abstract: true opt_uses: - economizer_mode + - low_limit_outside_air_damper_percentage_command - mixed_air_temperature_sensor - outside_air_damper_percentage_sensor - - low_limit_outside_air_damper_percentage_command + - failed_mixed_air_temperature_alarm uses: - - outside_air_temperature_sensor - outside_air_damper_percentage_command + - outside_air_temperature_sensor implements: - MONITORING @@ -2723,8 +3101,8 @@ OAFM: description: "Outside air flow monitoring" is_abstract: true opt_uses: - - outside_air_temperature_sensor - outside_air_damper_percentage_sensor + - outside_air_temperature_sensor uses: - outside_air_flowrate_sensor implements: @@ -2737,10 +3115,11 @@ OAFMC: opt_uses: - economizer_mode - mixed_air_temperature_sensor + - failed_mixed_air_temperature_alarm uses: - - ventilation_outside_air_flowrate_setpoint - - outside_air_flowrate_sensor - outside_air_damper_percentage_command + - outside_air_flowrate_sensor + - ventilation_outside_air_flowrate_setpoint implements: - CONTROL @@ -2751,8 +3130,8 @@ OAMC: opt_uses: - outside_air_flowrate_sensor uses: - - outside_air_damper_percentage_sensor - outside_air_damper_percentage_command + - outside_air_damper_percentage_sensor implements: - CONTROL @@ -2762,8 +3141,8 @@ OFC: description: "Outside air flow control monitoring (without a damper)." is_abstract: true uses: - - outside_air_flowrate_setpoint - outside_air_flowrate_sensor + - outside_air_flowrate_setpoint implements: - OPERATIONAL @@ -2784,14 +3163,17 @@ DFM: - discharge_air_flowrate_sensor implements: - MONITORING + opt_uses: + - low_discharge_air_flowrate_alarm + SFC: id: "11177141114933084160" description: "Supply air flow control." is_abstract: true uses: - - supply_air_flowrate_setpoint - supply_air_flowrate_sensor + - supply_air_flowrate_setpoint implements: - OPERATIONAL @@ -2800,8 +3182,8 @@ RFC: description: "Return air flow control." is_abstract: true uses: - - return_air_flowrate_setpoint - return_air_flowrate_sensor + - return_air_flowrate_setpoint implements: - OPERATIONAL @@ -2810,13 +3192,13 @@ SARC: description: "AHU supply air reset control." is_abstract: true opt_uses: - - supply_air_flowrate_sensor - heating_request_count + - supply_air_flowrate_sensor uses: - - supply_air_temperature_setpoint - - supply_air_static_pressure_setpoint - cooling_request_count - pressurization_request_count + - supply_air_static_pressure_setpoint + - supply_air_temperature_setpoint implements: - CONTROL @@ -2827,8 +3209,8 @@ RWISOVPC: opt_uses: - run_command uses: - - return_water_valve_percentage_sensor - return_water_valve_percentage_command + - return_water_valve_percentage_sensor implements: - OPERATIONAL @@ -2862,6 +3244,7 @@ CDWISOVPM: is_abstract: true opt_uses: - run_command + - local_override_isolation_valve_alarm uses: - condensing_water_isolation_valve_percentage_command - condensing_water_isolation_valve_percentage_sensor @@ -2974,16 +3357,22 @@ CHWBZC: - OPERATIONAL uses: - chilled_water_valve_command - - zone_air_temperature_sensor - zone_air_cooling_temperature_setpoint + - zone_air_temperature_sensor + opt_uses: + - failed_chilled_water_valve_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm + CHWBYPVPM: id: "7430146224960831488" description: "Chilled water bypass valve percentage monitoring." is_abstract: true uses: - - chilled_water_bypass_valve_percentage_sensor - chilled_water_bypass_valve_percentage_command + - chilled_water_bypass_valve_percentage_sensor implements: - MONITORING @@ -3004,6 +3393,9 @@ WFRM: - flowrate_sensor implements: - MONITORING + opt_uses: + - low_flowrate_alarm + WFRC: id: "10888910738781372416" @@ -3014,6 +3406,9 @@ WFRC: - flowrate_setpoint implements: - OPERATIONAL + opt_uses: + - low_flowrate_alarm + MWFRC: id: "6277224720353984512" @@ -3024,6 +3419,9 @@ MWFRC: - low_limit_flowrate_setpoint implements: - OPERATIONAL + opt_uses: + - low_flowrate_alarm + CHWFRM: id: "15500596757208760320" @@ -3095,12 +3493,12 @@ DDCO: description: "Flow control - dual duct, but only cooling." is_abstract: true uses: - - cooling_air_flowrate_setpoint_2 - - cooling_air_flowrate_setpoint_1 - - cooling_air_flowrate_sensor_2 - - cooling_air_flowrate_sensor_1 - - cooling_air_damper_percentage_command_2 - cooling_air_damper_percentage_command_1 + - cooling_air_damper_percentage_command_2 + - cooling_air_flowrate_sensor_1 + - cooling_air_flowrate_sensor_2 + - cooling_air_flowrate_setpoint_1 + - cooling_air_flowrate_setpoint_2 implements: - CONTROL @@ -3172,9 +3570,9 @@ CO2C2X: description: "Carbon dioxide control with dual zone sensors." is_abstract: true uses: - - zone_air_co2_concentration_setpoint - zone_air_co2_concentration_sensor_1 - zone_air_co2_concentration_sensor_2 + - zone_air_co2_concentration_setpoint implements: - OPERATIONAL @@ -3184,12 +3582,13 @@ DSP3X: is_abstract: true opt_uses: - discharge_air_temperature_sensor + - failed_discharge_air_temperature_alarm uses: + - zone_air_cooling_temperature_setpoint + - zone_air_heating_temperature_setpoint - zone_air_temperature_sensor_1 - zone_air_temperature_sensor_2 - zone_air_temperature_sensor_3 - - zone_air_cooling_temperature_setpoint - - zone_air_heating_temperature_setpoint implements: - OPERATIONAL @@ -3199,16 +3598,16 @@ EFSS2X: description: "Exhaust fan start-stop and feedback with two fans." is_abstract: true opt_uses: + - exhaust_air_flowrate_capacity - exhaust_fan_current_sensor_1 - - exhaust_fan_power_sensor_1 - exhaust_fan_current_sensor_2 - - exhaust_fan_power_sensor_2 - - exhaust_air_flowrate_capacity - exhaust_fan_power_capacity + - exhaust_fan_power_sensor_1 + - exhaust_fan_power_sensor_2 uses: - exhaust_fan_run_command_1 - - exhaust_fan_run_status_1 - exhaust_fan_run_command_2 + - exhaust_fan_run_status_1 - exhaust_fan_run_status_2 implements: - OPERATIONAL @@ -3218,20 +3617,20 @@ EFSS3X: description: "Exhaust fan start-stop and feedback with three fans." is_abstract: true opt_uses: + - exhaust_air_flowrate_capacity - exhaust_fan_current_sensor_1 - - exhaust_fan_power_sensor_1 - exhaust_fan_current_sensor_2 - - exhaust_fan_power_sensor_2 - exhaust_fan_current_sensor_3 - - exhaust_fan_power_sensor_3 - - exhaust_air_flowrate_capacity - exhaust_fan_power_capacity + - exhaust_fan_power_sensor_1 + - exhaust_fan_power_sensor_2 + - exhaust_fan_power_sensor_3 uses: - exhaust_fan_run_command_1 - - exhaust_fan_run_status_1 - exhaust_fan_run_command_2 - - exhaust_fan_run_status_2 - exhaust_fan_run_command_3 + - exhaust_fan_run_status_1 + - exhaust_fan_run_status_2 - exhaust_fan_run_status_3 implements: - OPERATIONAL @@ -3242,23 +3641,23 @@ EFSS4X: is_abstract: true opt_uses: - exhaust_air_flowrate_capacity - - exhaust_fan_power_capacity - exhaust_fan_current_sensor_1 - - exhaust_fan_power_sensor_1 - exhaust_fan_current_sensor_2 - - exhaust_fan_power_sensor_2 - exhaust_fan_current_sensor_3 - - exhaust_fan_power_sensor_3 - exhaust_fan_current_sensor_4 + - exhaust_fan_power_capacity + - exhaust_fan_power_sensor_1 + - exhaust_fan_power_sensor_2 + - exhaust_fan_power_sensor_3 - exhaust_fan_power_sensor_4 uses: - exhaust_fan_run_command_1 - - exhaust_fan_run_status_1 - exhaust_fan_run_command_2 - - exhaust_fan_run_status_2 - exhaust_fan_run_command_3 - - exhaust_fan_run_status_3 - exhaust_fan_run_command_4 + - exhaust_fan_run_status_1 + - exhaust_fan_run_status_2 + - exhaust_fan_run_status_3 - exhaust_fan_run_status_4 implements: - OPERATIONAL @@ -3270,11 +3669,12 @@ DF2XSS: opt_uses: - discharge_fan_current_sensor - discharge_fan_power_sensor + - discharge_fan_lost_power_alarm uses: - - discharge_fan_run_status_1 - - discharge_fan_run_status_2 - discharge_fan_run_command_1 - discharge_fan_run_command_2 + - discharge_fan_run_status_1 + - discharge_fan_run_status_2 implements: - OPERATIONAL @@ -3284,15 +3684,15 @@ SFSS2X: is_abstract: true opt_uses: - supply_air_flowrate_capacity - - supply_fan_power_capacity - supply_fan_current_sensor_1 - supply_fan_current_sensor_2 + - supply_fan_power_capacity - supply_fan_power_sensor_1 - supply_fan_power_sensor_2 uses: - supply_fan_run_command_1 - - supply_fan_run_status_1 - supply_fan_run_command_2 + - supply_fan_run_status_1 - supply_fan_run_status_2 implements: - OPERATIONAL @@ -3303,19 +3703,19 @@ SFSS3X: is_abstract: true opt_uses: - supply_air_flowrate_capacity - - supply_fan_power_capacity - supply_fan_current_sensor_1 - supply_fan_current_sensor_2 - supply_fan_current_sensor_3 + - supply_fan_power_capacity - supply_fan_power_sensor_1 - supply_fan_power_sensor_2 - supply_fan_power_sensor_3 uses: - supply_fan_run_command_1 - - supply_fan_run_status_1 - supply_fan_run_command_2 - - supply_fan_run_status_2 - supply_fan_run_command_3 + - supply_fan_run_status_1 + - supply_fan_run_status_2 - supply_fan_run_status_3 implements: - OPERATIONAL @@ -3326,23 +3726,23 @@ SFSS4X: is_abstract: true opt_uses: - supply_air_flowrate_capacity - - supply_fan_power_capacity - supply_fan_current_sensor_1 - supply_fan_current_sensor_2 - supply_fan_current_sensor_3 - supply_fan_current_sensor_4 + - supply_fan_power_capacity - supply_fan_power_sensor_1 - supply_fan_power_sensor_2 - supply_fan_power_sensor_3 - supply_fan_power_sensor_4 uses: - supply_fan_run_command_1 - - supply_fan_run_status_1 - supply_fan_run_command_2 - - supply_fan_run_status_2 - supply_fan_run_command_3 - - supply_fan_run_status_3 - supply_fan_run_command_4 + - supply_fan_run_status_1 + - supply_fan_run_status_2 + - supply_fan_run_status_3 - supply_fan_run_status_4 implements: - OPERATIONAL @@ -3352,20 +3752,20 @@ EFVSC2X: description: "Exhaust fan variable speed control with feedback and sensoring for two fans." is_abstract: true opt_uses: - - exhaust_fan_speed_frequency_sensor_1 - - exhaust_fan_speed_percentage_sensor_1 - exhaust_fan_current_sensor_1 + - exhaust_fan_current_sensor_2 - exhaust_fan_power_sensor_1 + - exhaust_fan_power_sensor_2 + - exhaust_fan_speed_frequency_sensor_1 - exhaust_fan_speed_frequency_sensor_2 + - exhaust_fan_speed_percentage_sensor_1 - exhaust_fan_speed_percentage_sensor_2 - - exhaust_fan_current_sensor_2 - - exhaust_fan_power_sensor_2 uses: - exhaust_fan_run_command_1 - - exhaust_fan_run_status_1 - - exhaust_fan_speed_percentage_command_1 - exhaust_fan_run_command_2 + - exhaust_fan_run_status_1 - exhaust_fan_run_status_2 + - exhaust_fan_speed_percentage_command_1 - exhaust_fan_speed_percentage_command_2 implements: - OPERATIONAL @@ -3375,27 +3775,27 @@ EFVSC3X: description: "Exhaust fan variable speed control with feedback and sensoring for three fans." is_abstract: true opt_uses: - - exhaust_fan_speed_frequency_sensor_1 - - exhaust_fan_speed_percentage_sensor_1 - exhaust_fan_current_sensor_1 - - exhaust_fan_power_sensor_1 - - exhaust_fan_speed_frequency_sensor_2 - - exhaust_fan_speed_percentage_sensor_2 - exhaust_fan_current_sensor_2 + - exhaust_fan_current_sensor_3 + - exhaust_fan_power_sensor_1 - exhaust_fan_power_sensor_2 + - exhaust_fan_power_sensor_3 + - exhaust_fan_speed_frequency_sensor_1 + - exhaust_fan_speed_frequency_sensor_2 - exhaust_fan_speed_frequency_sensor_3 + - exhaust_fan_speed_percentage_sensor_1 + - exhaust_fan_speed_percentage_sensor_2 - exhaust_fan_speed_percentage_sensor_3 - - exhaust_fan_current_sensor_3 - - exhaust_fan_power_sensor_3 uses: - exhaust_fan_run_command_1 - - exhaust_fan_run_status_1 - - exhaust_fan_speed_percentage_command_1 - exhaust_fan_run_command_2 - - exhaust_fan_run_status_2 - - exhaust_fan_speed_percentage_command_2 - exhaust_fan_run_command_3 + - exhaust_fan_run_status_1 + - exhaust_fan_run_status_2 - exhaust_fan_run_status_3 + - exhaust_fan_speed_percentage_command_1 + - exhaust_fan_speed_percentage_command_2 - exhaust_fan_speed_percentage_command_3 implements: - OPERATIONAL @@ -3405,34 +3805,34 @@ EFVSC4X: description: "Exhaust fan variable speed control with feedback and sensoring for four fans." is_abstract: true opt_uses: - - exhaust_fan_speed_frequency_sensor_1 - - exhaust_fan_speed_percentage_sensor_1 - exhaust_fan_current_sensor_1 - - exhaust_fan_power_sensor_1 - - exhaust_fan_speed_frequency_sensor_2 - - exhaust_fan_speed_percentage_sensor_2 - exhaust_fan_current_sensor_2 - - exhaust_fan_power_sensor_2 - - exhaust_fan_speed_frequency_sensor_3 - - exhaust_fan_speed_percentage_sensor_3 - exhaust_fan_current_sensor_3 + - exhaust_fan_current_sensor_4 + - exhaust_fan_power_sensor_1 + - exhaust_fan_power_sensor_2 - exhaust_fan_power_sensor_3 + - exhaust_fan_power_sensor_4 + - exhaust_fan_speed_frequency_sensor_1 + - exhaust_fan_speed_frequency_sensor_2 + - exhaust_fan_speed_frequency_sensor_3 - exhaust_fan_speed_frequency_sensor_4 + - exhaust_fan_speed_percentage_sensor_1 + - exhaust_fan_speed_percentage_sensor_2 + - exhaust_fan_speed_percentage_sensor_3 - exhaust_fan_speed_percentage_sensor_4 - - exhaust_fan_current_sensor_4 - - exhaust_fan_power_sensor_4 uses: - exhaust_fan_run_command_1 - - exhaust_fan_run_status_1 - - exhaust_fan_speed_percentage_command_1 - exhaust_fan_run_command_2 - - exhaust_fan_run_status_2 - - exhaust_fan_speed_percentage_command_2 - exhaust_fan_run_command_3 - - exhaust_fan_run_status_3 - - exhaust_fan_speed_percentage_command_3 - exhaust_fan_run_command_4 + - exhaust_fan_run_status_1 + - exhaust_fan_run_status_2 + - exhaust_fan_run_status_3 - exhaust_fan_run_status_4 + - exhaust_fan_speed_percentage_command_1 + - exhaust_fan_speed_percentage_command_2 + - exhaust_fan_speed_percentage_command_3 - exhaust_fan_speed_percentage_command_4 implements: - OPERATIONAL @@ -3442,20 +3842,20 @@ SFVSC2X: description: "Supply fan variable speed control with feedback and sensoring with two fans." is_abstract: true opt_uses: - - supply_fan_speed_frequency_sensor_1 - - supply_fan_speed_percentage_sensor_1 - supply_fan_current_sensor_1 + - supply_fan_current_sensor_2 - supply_fan_power_sensor_1 + - supply_fan_power_sensor_2 + - supply_fan_speed_frequency_sensor_1 - supply_fan_speed_frequency_sensor_2 + - supply_fan_speed_percentage_sensor_1 - supply_fan_speed_percentage_sensor_2 - - supply_fan_current_sensor_2 - - supply_fan_power_sensor_2 uses: - supply_fan_run_command_1 - - supply_fan_run_status_1 - - supply_fan_speed_percentage_command_1 - supply_fan_run_command_2 + - supply_fan_run_status_1 - supply_fan_run_status_2 + - supply_fan_speed_percentage_command_1 - supply_fan_speed_percentage_command_2 implements: - OPERATIONAL @@ -3465,39 +3865,39 @@ SFVSC3X: description: "Supply fan variable speed control with feedback and sensoring with three fans." is_abstract: true opt_uses: - - supply_fan_speed_frequency_sensor_1 - - supply_fan_speed_percentage_sensor_1 + - ac_voltage_sensor_1 + - ac_voltage_sensor_2 + - ac_voltage_sensor_3 + - dc_voltage_sensor_1 + - dc_voltage_sensor_2 + - dc_voltage_sensor_3 - supply_fan_current_sensor_1 - - supply_fan_power_sensor_1 - - supply_fan_speed_frequency_sensor_2 - - supply_fan_speed_percentage_sensor_2 - supply_fan_current_sensor_2 - - supply_fan_power_sensor_2 - - supply_fan_speed_frequency_sensor_3 - - supply_fan_speed_percentage_sensor_3 - supply_fan_current_sensor_3 + - supply_fan_power_sensor_1 + - supply_fan_power_sensor_2 - supply_fan_power_sensor_3 - - dc_voltage_sensor_1 - - dc_voltage_sensor_2 - - dc_voltage_sensor_3 - - ac_voltage_sensor_1 - - ac_voltage_sensor_2 - - ac_voltage_sensor_3 + - supply_fan_run_mode_1 + - supply_fan_run_mode_2 + - supply_fan_run_mode_3 - supply_fan_run_time_accumulator_1 - supply_fan_run_time_accumulator_2 - supply_fan_run_time_accumulator_3 - - supply_fan_run_mode_1 - - supply_fan_run_mode_2 - - supply_fan_run_mode_3 + - supply_fan_speed_frequency_sensor_1 + - supply_fan_speed_frequency_sensor_2 + - supply_fan_speed_frequency_sensor_3 + - supply_fan_speed_percentage_sensor_1 + - supply_fan_speed_percentage_sensor_2 + - supply_fan_speed_percentage_sensor_3 uses: - supply_fan_run_command_1 - - supply_fan_run_status_1 - - supply_fan_speed_percentage_command_1 - supply_fan_run_command_2 - - supply_fan_run_status_2 - - supply_fan_speed_percentage_command_2 - supply_fan_run_command_3 + - supply_fan_run_status_1 + - supply_fan_run_status_2 - supply_fan_run_status_3 + - supply_fan_speed_percentage_command_1 + - supply_fan_speed_percentage_command_2 - supply_fan_speed_percentage_command_3 implements: - OPERATIONAL @@ -3507,34 +3907,34 @@ SFVSC4X: description: "Supply fan variable speed control with feedback and sensoring with four fans." is_abstract: true opt_uses: - - supply_fan_speed_frequency_sensor_1 - - supply_fan_speed_percentage_sensor_1 - supply_fan_current_sensor_1 - - supply_fan_power_sensor_1 - - supply_fan_speed_frequency_sensor_2 - - supply_fan_speed_percentage_sensor_2 - supply_fan_current_sensor_2 - - supply_fan_power_sensor_2 - - supply_fan_speed_frequency_sensor_3 - - supply_fan_speed_percentage_sensor_3 - supply_fan_current_sensor_3 + - supply_fan_current_sensor_4 + - supply_fan_power_sensor_1 + - supply_fan_power_sensor_2 - supply_fan_power_sensor_3 + - supply_fan_power_sensor_4 + - supply_fan_speed_frequency_sensor_1 + - supply_fan_speed_frequency_sensor_2 + - supply_fan_speed_frequency_sensor_3 - supply_fan_speed_frequency_sensor_4 + - supply_fan_speed_percentage_sensor_1 + - supply_fan_speed_percentage_sensor_2 + - supply_fan_speed_percentage_sensor_3 - supply_fan_speed_percentage_sensor_4 - - supply_fan_current_sensor_4 - - supply_fan_power_sensor_4 uses: - supply_fan_run_command_1 - - supply_fan_run_status_1 - - supply_fan_speed_percentage_command_1 - supply_fan_run_command_2 - - supply_fan_run_status_2 - - supply_fan_speed_percentage_command_2 - supply_fan_run_command_3 - - supply_fan_run_status_3 - - supply_fan_speed_percentage_command_3 - supply_fan_run_command_4 + - supply_fan_run_status_1 + - supply_fan_run_status_2 + - supply_fan_run_status_3 - supply_fan_run_status_4 + - supply_fan_speed_percentage_command_1 + - supply_fan_speed_percentage_command_2 + - supply_fan_speed_percentage_command_3 - supply_fan_speed_percentage_command_4 implements: - OPERATIONAL @@ -3545,12 +3945,15 @@ BYPSSPC: is_abstract: true opt_uses: - supply_air_flowrate_sensor + - failed_supply_fan_alarm + - high_supply_air_static_pressure_alarm + - low_supply_air_static_pressure_alarm uses: + - bypass_air_damper_percentage_command - supply_air_static_pressure_sensor - supply_air_static_pressure_setpoint - supply_fan_run_command - supply_fan_run_status - - bypass_air_damper_percentage_command implements: - CONTROL @@ -3560,13 +3963,16 @@ BYPSSPC2X: # Consider virtual point for instances where dampers control to same is_abstract: true opt_uses: - supply_air_flowrate_sensor + - failed_supply_fan_alarm + - high_supply_air_static_pressure_alarm + - low_supply_air_static_pressure_alarm uses: + - bypass_air_damper_percentage_command_1 + - bypass_air_damper_percentage_command_2 - supply_air_static_pressure_sensor - supply_air_static_pressure_setpoint - supply_fan_run_command - supply_fan_run_status - - bypass_air_damper_percentage_command_1 - - bypass_air_damper_percentage_command_2 implements: - CONTROL @@ -3579,6 +3985,10 @@ SWISOVM: - supply_water_isolation_valve_status implements: - MONITORING + opt_uses: + - failed_isolation_valve_alarm + - local_override_isolation_valve_alarm + SWISOVPM: id: "3561694882537930752" @@ -3735,8 +4145,8 @@ CWRISOVPM: description: "Condensing water return isolation monitoring." is_abstract: true uses: - - condensing_return_water_isolation_valve_percentage_sensor - condensing_return_water_isolation_valve_percentage_command + - condensing_return_water_isolation_valve_percentage_sensor implements: - MONITORING @@ -3745,8 +4155,8 @@ CWRISOVM: description: "Condensing water return isolation monitoring." is_abstract: true uses: - - condensing_return_water_isolation_valve_status - condensing_return_water_isolation_valve_command + - condensing_return_water_isolation_valve_status implements: - MONITORING @@ -3756,8 +4166,8 @@ CWSISOVPM: description: "Condensing water supply isolation monitoring." is_abstract: true uses: - - condensing_supply_water_isolation_valve_percentage_sensor - condensing_supply_water_isolation_valve_percentage_command + - condensing_supply_water_isolation_valve_percentage_sensor implements: - MONITORING @@ -3766,8 +4176,8 @@ CWSISOVM: description: "Condensing water supply isolation monitoring." is_abstract: true uses: - - condensing_supply_water_isolation_valve_status - condensing_supply_water_isolation_valve_command + - condensing_supply_water_isolation_valve_status implements: - MONITORING @@ -3779,8 +4189,8 @@ CHWRISOVPM: description: "Chilled water return isolation monitoring." is_abstract: true uses: - - chilled_return_water_isolation_valve_percentage_sensor - chilled_return_water_isolation_valve_percentage_command + - chilled_return_water_isolation_valve_percentage_sensor implements: - MONITORING @@ -3791,6 +4201,9 @@ WDPM: is_abstract: true uses: - differential_pressure_sensor + opt_uses: + - high_differential_pressure_alarm + - low_differential_pressure_alarm SPM: description: "Static pressure monitoring." @@ -3812,11 +4225,13 @@ CHDX4SC: is_abstract: true opt_uses: - chilled_return_water_temperature_sensor - - cooling_percentage_command - compressor_speed_frequency_sensor - compressor_speed_percentage_command - compressor_speed_percentage_sensor + - cooling_percentage_command uses: + - chilled_supply_water_temperature_sensor + - chilled_supply_water_temperature_setpoint - compressor_run_command_1 - compressor_run_command_2 - compressor_run_command_3 @@ -3825,8 +4240,7 @@ CHDX4SC: - compressor_run_status_2 - compressor_run_status_3 - compressor_run_status_4 - - chilled_supply_water_temperature_sensor - - chilled_supply_water_temperature_setpoint + CHDX2SC: id: "11002415523139944448" @@ -3834,18 +4248,18 @@ CHDX2SC: is_abstract: true opt_uses: - chilled_return_water_temperature_sensor - - cooling_percentage_command - compressor_speed_frequency_sensor - compressor_speed_percentage_command - compressor_speed_percentage_sensor + - cooling_percentage_command - cooling_request_count uses: + - chilled_supply_water_temperature_sensor + - chilled_supply_water_temperature_setpoint - compressor_run_command_1 - compressor_run_command_2 - compressor_run_status_1 - compressor_run_status_2 - - chilled_supply_water_temperature_sensor - - chilled_supply_water_temperature_setpoint CHDXSC: @@ -3854,30 +4268,36 @@ CHDXSC: is_abstract: true opt_uses: - chilled_return_water_temperature_sensor - - cooling_percentage_command - compressor_speed_frequency_sensor - compressor_speed_percentage_command - compressor_speed_percentage_sensor + - cooling_percentage_command + - compressor_lost_power_alarm + - failed_compressor_alarm + - overload_compressor_alarm uses: - - compressor_run_command - - compressor_run_status - chilled_supply_water_temperature_sensor - chilled_supply_water_temperature_setpoint + - compressor_run_command + - compressor_run_status + CHDXVSC: id: "16068753997699219456" description: "Variable speed compressor control." is_abstract: true uses: - - compressor_speed_percentage_sensor - compressor_run_command - compressor_run_status + - compressor_speed_percentage_sensor opt_uses: - compressor_current_sensor + - compressor_speed_frequency_sensor - compressor_voltage_sensor - compressor_lost_power_alarm - - compressor_speed_frequency_sensor - failed_compressor_alarm + - overload_compressor_alarm + CDWFRM: id: "632877381119377408" @@ -3918,11 +4338,13 @@ SDBPC: is_abstract: true opt_uses: - supply_air_flowrate_sensor + - high_supply_air_static_pressure_alarm + - low_supply_air_static_pressure_alarm uses: - - supply_air_static_pressure_sensor - - supply_air_static_pressure_setpoint - supply_air_damper_percentage_command - supply_air_damper_percentage_sensor + - supply_air_static_pressure_sensor + - supply_air_static_pressure_setpoint implements: - MONITORING @@ -3934,8 +4356,8 @@ HWVM: - heating_thermal_power_capacity - heating_water_flowrate_sensor uses: - - heating_water_valve_percentage_sensor - heating_water_valve_percentage_command + - heating_water_valve_percentage_sensor implements: - OPERATIONAL @@ -3944,12 +4366,12 @@ CHWVM: description: "Chilled water valve command and position monitoring (without regard to what controls it)." is_abstract: true opt_uses: - - cooling_thermal_power_capacity - chilled_water_flowrate_sensor + - cooling_thermal_power_capacity - failed_chilled_water_valve_alarm uses: - - chilled_water_valve_percentage_sensor - chilled_water_valve_percentage_command + - chilled_water_valve_percentage_sensor implements: - OPERATIONAL @@ -3966,12 +4388,13 @@ DSPZDHC: is_abstract: true opt_uses: - humidification_percentage_command + - failed_humidifier_alarm uses: - - zone_air_relative_humidity_sensor - - zone_air_dehumidification_relative_humidity_setpoint - - zone_air_humidification_relative_humidity_setpoint - dehumidification_run_command - humidification_run_command + - zone_air_dehumidification_relative_humidity_setpoint + - zone_air_humidification_relative_humidity_setpoint + - zone_air_relative_humidity_sensor implements: - CONTROL @@ -3990,12 +4413,16 @@ DXDDC: description: "DX cooling dual setpoint control on discharge side" is_abstract: true opt_uses: - - cooling_percentage_command - compressor_run_status + - cooling_percentage_command + - compressor_lost_power_alarm + - failed_compressor_alarm + - failed_discharge_air_temperature_alarm + - overload_compressor_alarm uses: - compressor_run_command - - discharge_air_heating_temperature_setpoint - discharge_air_cooling_temperature_setpoint + - discharge_air_heating_temperature_setpoint - discharge_air_temperature_sensor implements: - CONTROL @@ -4005,13 +4432,14 @@ HTDDC: description: "gas or electric heating dual setpoint control on discharge side" is_abstract: true opt_uses: - - heating_percentage_command - heater_run_status + - heating_percentage_command + - failed_discharge_air_temperature_alarm uses: - - heater_run_command - - discharge_air_heating_temperature_setpoint - discharge_air_cooling_temperature_setpoint + - discharge_air_heating_temperature_setpoint - discharge_air_temperature_sensor + - heater_run_command implements: - CONTROL @@ -4026,8 +4454,8 @@ REFSM2X: - refrigerant_suction_temperature_sensor_2 uses: - refrigerant_condenser_saturation_temperature_sensor_1 - - refrigerant_evaporator_saturation_temperature_sensor_1 - refrigerant_condenser_saturation_temperature_sensor_2 + - refrigerant_evaporator_saturation_temperature_sensor_1 - refrigerant_evaporator_saturation_temperature_sensor_2 implements: - MONITORING @@ -4041,8 +4469,8 @@ REFPM: - refrigerant_high_pressure_status - refrigerant_low_pressure_status uses: - - refrigerant_evaporator_pressure_sensor - refrigerant_condenser_pressure_sensor + - refrigerant_evaporator_pressure_sensor implements: - MONITORING @@ -4051,10 +4479,10 @@ REFPM2X: description: "Refrigerant pressure monitoring for 2 circuits." is_abstract: true uses: - - refrigerant_evaporator_pressure_sensor_1 - refrigerant_condenser_pressure_sensor_1 - - refrigerant_evaporator_pressure_sensor_2 - refrigerant_condenser_pressure_sensor_2 + - refrigerant_evaporator_pressure_sensor_1 + - refrigerant_evaporator_pressure_sensor_2 implements: - MONITORING @@ -4073,10 +4501,10 @@ DRPM: description: "Drain pump monitoring." is_abstract: true opt_uses: - - water_low_level_status + - input_motor_power_status - water_high_level_status + - water_low_level_status - failed_drain_pump_alarm - - input_motor_power_status uses: - drain_pump_run_status implements: @@ -4095,13 +4523,14 @@ ECDDC: description: "Evaporative cooler control on discharge side." is_abstract: true opt_uses: - - evaporative_cooler_run_status - cooling_percentage_sensor + - evaporative_cooler_run_status + - failed_discharge_air_temperature_alarm uses: - - evaporative_cooler_run_command - - discharge_air_temperature_sensor - discharge_air_cooling_temperature_setpoint - discharge_air_heating_temperature_setpoint + - discharge_air_temperature_sensor + - evaporative_cooler_run_command implements: - CONTROL @@ -4110,11 +4539,16 @@ DXSDC: description: "Compressor run control on supply side, dual setpoints." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command #Serves as a duty cycle for single-stage DX sections. - - compressor_speed_percentage_command - compressor_run_status + - compressor_speed_percentage_command + - cooling_percentage_command #Serves as a duty cycle for single-stage DX sections. + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - compressor_lost_power_alarm + - failed_compressor_alarm + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm + - overload_compressor_alarm uses: - compressor_run_command - supply_air_cooling_temperature_setpoint @@ -4140,24 +4574,26 @@ DX6SC: description: "Six compressor run control on supply air side." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - compressor_speed_percentage_command + - cooling_percentage_command - cooling_request_count + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - - compressor_run_status_1 - - compressor_run_status_2 - - compressor_run_status_3 - - compressor_run_status_4 - - compressor_run_status_5 - - compressor_run_status_6 - compressor_run_command_1 - compressor_run_command_2 - compressor_run_command_3 - compressor_run_command_4 - compressor_run_command_5 - compressor_run_command_6 + - compressor_run_status_1 + - compressor_run_status_2 + - compressor_run_status_3 + - compressor_run_status_4 + - compressor_run_status_5 + - compressor_run_status_6 - supply_air_temperature_sensor - supply_air_temperature_setpoint implements: @@ -4168,19 +4604,21 @@ DX2DSPRTC: description: "Two-stage compressor run control with dual return temp control." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - compressor_speed_percentage_command + - cooling_percentage_command - cooling_stage_run_count + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - high_return_air_temperature_alarm + - low_return_air_temperature_alarm uses: - - return_air_cooling_temperature_setpoint - - return_air_heating_temperature_setpoint - - return_air_temperature_sensor - compressor_run_command_1 - - compressor_run_status_1 - compressor_run_command_2 + - compressor_run_status_1 - compressor_run_status_2 + - return_air_cooling_temperature_setpoint + - return_air_heating_temperature_setpoint + - return_air_temperature_sensor implements: - CONTROL @@ -4189,19 +4627,20 @@ DX4DC: description: "Compressor run control on discharge air side (DTC)." is_abstract: true opt_uses: - - leaving_cooling_coil_temperature_sensor - - cooling_thermal_power_capacity - - cooling_percentage_command - compressor_speed_percentage_command + - cooling_percentage_command + - cooling_thermal_power_capacity + - leaving_cooling_coil_temperature_sensor + - failed_discharge_air_temperature_alarm uses: - - compressor_run_status_1 - compressor_run_command_1 - - compressor_run_status_2 - compressor_run_command_2 - - compressor_run_status_3 - compressor_run_command_3 - - compressor_run_status_4 - compressor_run_command_4 + - compressor_run_status_1 + - compressor_run_status_2 + - compressor_run_status_3 + - compressor_run_status_4 - discharge_air_temperature_sensor - discharge_air_temperature_setpoint implements: @@ -4213,22 +4652,24 @@ DX6SWC: description: "Six compressor run control on supply water side." is_abstract: true opt_uses: - - cooling_thermal_power_capacity - - cooling_percentage_command - compressor_speed_percentage_command - compressor_speed_percentage_sensor + - cooling_percentage_command + - cooling_thermal_power_capacity + - high_supply_water_temperature_alarm + - low_supply_water_temperature_alarm uses: - compressor_run_command_1 - - compressor_run_status_1 - compressor_run_command_2 - - compressor_run_status_2 - compressor_run_command_3 - - compressor_run_status_3 - compressor_run_command_4 - - compressor_run_status_4 - compressor_run_command_5 - - compressor_run_status_5 - compressor_run_command_6 + - compressor_run_status_1 + - compressor_run_status_2 + - compressor_run_status_3 + - compressor_run_status_4 + - compressor_run_status_5 - compressor_run_status_6 - supply_water_temperature_sensor - supply_water_temperature_setpoint @@ -4264,36 +4705,42 @@ DRSM8X: - dryer_run_status_8 implements: - MONITORING - + + AHAC: id: "529218723387539456" description: "Tag to indicate an after hours activation method e.g. push button associated with this device." is_abstract: true - uses: + uses: - user_occupancy_override_status - zone_occupancy_status implements: - OPERATIONAL - + + DFFC: id: "10094864331922472960" description: "Discharge fan flow control" is_abstract: true uses: + - discharge_air_flowrate_sensor + - discharge_air_flowrate_setpoint - discharge_fan_run_command - discharge_fan_run_status - discharge_fan_speed_percentage_command - - discharge_air_flowrate_setpoint - - discharge_air_flowrate_sensor implements: - CONTROL + opt_uses: + - failed_discharge_fan_alarm + - low_discharge_air_flowrate_alarm + EFM: id: "1682140227994386432" description: "Exhaust air flow monitoring" is_abstract: true uses: - - exhaust_air_flowrate_sensor + - exhaust_air_flowrate_sensor implements: - OPERATIONAL @@ -4307,8 +4754,11 @@ SWTM: - cooling_request_count - heating_request_count - return_water_temperature_sensor + - high_supply_water_temperature_alarm + - low_supply_water_temperature_alarm uses: - - supply_water_temperature_sensor + - supply_water_temperature_sensor + CWDPM: id: "16174723828872642560" @@ -4324,9 +4774,10 @@ DICM: description: "Damper isolation control and monitoring. " is_abstract: true uses: - - supply_air_isolation_damper_closed_status - - supply_air_isolation_damper_open_status - - supply_air_isolation_damper_command + - supply_air_isolation_damper_closed_status + - supply_air_isolation_damper_command + - supply_air_isolation_damper_open_status + UV: id: "6143342686997839872" @@ -4345,12 +4796,13 @@ H3X: implements: - MONITORING uses: - - heater_run_status_1 - - heater_run_status_2 - - heater_run_status_3 - heater_run_command_1 - heater_run_command_2 - heater_run_command_3 + - heater_run_status_1 + - heater_run_status_2 + - heater_run_status_3 + CHWBRC: id: "9602107200818380800" @@ -4362,6 +4814,11 @@ CHWBRC: - chilled_water_valve_command - return_air_temperature_sensor - return_air_temperature_setpoint + opt_uses: + - failed_chilled_water_valve_alarm + - high_return_air_temperature_alarm + - low_return_air_temperature_alarm + CHWISOVPM: id: "10952342664099397632" @@ -4388,7 +4845,7 @@ DPM: description: "Damper percentage control." is_abstract: true implements: - - OPERATIONAL + - OPERATIONAL uses: - damper_percentage_command - damper_percentage_sensor @@ -4398,75 +4855,96 @@ DFVSMC: description: "Variable speed control mode for discharge fans." is_abstract: true uses: - - discharge_fan_speed_mode - - discharge_fan_run_status - discharge_fan_run_command + - discharge_fan_run_status + - discharge_fan_speed_mode implements: - OPERATIONAL + opt_uses: + - failed_discharge_fan_alarm + DFVDSC: id: "7493578150278856704" description: "Discharge fan control with toggled variable or discrete speed control. This allows the fan to run either VFD or discrete speed stages (LOW/MED/HIGH, etc.) and to switch between the mode." is_abstract: true uses: - - discharge_fan_speed_percentage_command - - discharge_fan_speed_mode - - discharge_fan_run_status - discharge_fan_run_command + - discharge_fan_run_status + - discharge_fan_speed_mode + - discharge_fan_speed_percentage_command implements: - OPERATIONAL + opt_uses: + - failed_discharge_fan_alarm + DFVDSFC: id: "15636086276564713472" description: "Discharge fan control with toggled variable or discrete speed (frequency) control. This allows the fan to run either VFD or discrete speed stages (LOW/MED/HIGH, etc.) and to switch between the mode." is_abstract: true uses: + - discharge_fan_run_command + - discharge_fan_run_status - discharge_fan_speed_frequency_command - discharge_fan_speed_mode - - discharge_fan_run_status - - discharge_fan_run_command implements: - OPERATIONAL + opt_uses: + - failed_discharge_fan_alarm + SSPCSCM: id: "6685507472607674368" description: "Supply air static pressure control for supervisor control (Machine learning)." is_abstract: true uses: + - program_supply_air_static_pressure_setpoint - supervisor_control_mode - supervisor_supply_air_static_pressure_setpoint - - program_supply_air_static_pressure_setpoint - supply_air_static_pressure_setpoint + opt_uses: + - supervisor_alarm + STCSCM: id: "6577421081550782464" description: "Supply air temperature control for supervisor control (Machine learning)." is_abstract: true uses: + - program_supply_air_temperature_setpoint - supervisor_control_mode - supervisor_supply_air_temperature_setpoint - - program_supply_air_temperature_setpoint - supply_air_temperature_setpoint + opt_uses: + - supervisor_alarm + SWTCSCM: id: "8591656014892236800" description: "Supply water temperature control for supervisor control (Machine learning)." is_abstract: true uses: + - program_supply_water_temperature_setpoint - supervisor_control_mode - supervisor_supply_water_temperature_setpoint - - program_supply_water_temperature_setpoint - supply_water_temperature_setpoint + opt_uses: + - supervisor_alarm + WDPCSCM: id: "11032607012927045632" description: "Water differential pressure control for supervisor control (Machine learning)." is_abstract: true uses: + - differential_pressure_setpoint + - program_differential_pressure_setpoint - supervisor_control_mode - supervisor_differential_pressure_setpoint - - program_differential_pressure_setpoint - - differential_pressure_setpoint + opt_uses: + - supervisor_alarm + CSWIVS: id: "359876340523991040" @@ -4483,6 +4961,11 @@ CSWIVS: - condensing_return_water_isolation_valve_command_6 - condensing_return_water_isolation_valve_command_7 - condensing_return_water_isolation_valve_status_1 + - condensing_return_water_isolation_valve_status_10 + - condensing_return_water_isolation_valve_status_11 + - condensing_return_water_isolation_valve_status_12 + - condensing_return_water_isolation_valve_status_13 + - condensing_return_water_isolation_valve_status_14 - condensing_return_water_isolation_valve_status_2 - condensing_return_water_isolation_valve_status_3 - condensing_return_water_isolation_valve_status_4 @@ -4491,11 +4974,7 @@ CSWIVS: - condensing_return_water_isolation_valve_status_7 - condensing_return_water_isolation_valve_status_8 - condensing_return_water_isolation_valve_status_9 - - condensing_return_water_isolation_valve_status_10 - - condensing_return_water_isolation_valve_status_11 - - condensing_return_water_isolation_valve_status_12 - - condensing_return_water_isolation_valve_status_13 - - condensing_return_water_isolation_valve_status_14 + CRWIVS: id: "10755028705425227776" @@ -4512,6 +4991,11 @@ CRWIVS: - condensing_supply_water_isolation_valve_command_6 - condensing_supply_water_isolation_valve_command_7 - condensing_supply_water_isolation_valve_status_1 + - condensing_supply_water_isolation_valve_status_10 + - condensing_supply_water_isolation_valve_status_11 + - condensing_supply_water_isolation_valve_status_12 + - condensing_supply_water_isolation_valve_status_13 + - condensing_supply_water_isolation_valve_status_14 - condensing_supply_water_isolation_valve_status_2 - condensing_supply_water_isolation_valve_status_3 - condensing_supply_water_isolation_valve_status_4 @@ -4520,11 +5004,7 @@ CRWIVS: - condensing_supply_water_isolation_valve_status_7 - condensing_supply_water_isolation_valve_status_8 - condensing_supply_water_isolation_valve_status_9 - - condensing_supply_water_isolation_valve_status_10 - - condensing_supply_water_isolation_valve_status_11 - - condensing_supply_water_isolation_valve_status_12 - - condensing_supply_water_isolation_valve_status_13 - - condensing_supply_water_isolation_valve_status_14 + CSWTC: id: "14772239573039710208" @@ -4533,8 +5013,9 @@ CSWTC: implements: - OPERATIONAL uses: - - condensing_supply_water_temperature_setpoint - condensing_supply_water_temperature_sensor + - condensing_supply_water_temperature_setpoint + HTWHLSTC: id: "5798430287411019776" @@ -4543,13 +5024,18 @@ HTWHLSTC: implements: - CONTROL opt_uses: - - heat_wheel_speed_percentage_sensor - exhaust_air_temperature_sensor + - heat_wheel_speed_percentage_sensor - return_air_temperature_sensor + - failed_exhaust_air_temperature_alarm + - high_return_air_temperature_alarm + - high_supply_air_temperature_alarm + - low_return_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - - heat_wheel_speed_percentage_command - heat_wheel_run_command - heat_wheel_run_status + - heat_wheel_speed_percentage_command - outside_air_temperature_sensor - supply_air_temperature_sensor - supply_air_temperature_setpoint @@ -4566,26 +5052,29 @@ CAM: DPHCC: id: "12422697573691686912" - description: "Two-pipe heating and cooling control. Has a single control - valve that is fed by two separate headers for heating and cooling water. - There is an isolation valve for each incoming system and a single control - valve. Valve and mode control to zone temperature (heating/cooling - setpoint configuration)." + description: "Two-pipe heating and cooling control. Has a single control valve + that is fed by two separate headers for heating and cooling water. There is an + isolation valve for each incoming system and a single control valve. Valve and + mode control to zone temperature (heating/cooling setpoint configuration)." is_abstract: true opt_uses: - chilled_return_water_isolation_valve_percentage_command + - chilled_supply_water_isolation_valve_percentage_command - heating_return_water_isolation_valve_percentage_command - heating_supply_water_isolation_valve_percentage_command - - chilled_supply_water_isolation_valve_percentage_command + - supply_water_valve_flowrate_sensor - zone_air_cooling_temperature_setpoint - zone_air_heating_temperature_setpoint - - condensate_water_alarm - zone_conditioning_mode - - supply_water_valve_flowrate_sensor + - condensate_water_alarm + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - supply_water_valve_percentage_command - - zone_air_temperature_sensor - water_riser_mode + - zone_air_temperature_sensor + HHCDM: id: "3582131505163403264" @@ -4594,12 +5083,12 @@ HHCDM: implements: - MONITORING uses: - - chilled_supply_water_isolation_valve_percentage_command - chilled_return_water_isolation_valve_percentage_command - - heating_supply_water_isolation_valve_percentage_command - - heating_return_water_isolation_valve_percentage_command - - heating_request_count + - chilled_supply_water_isolation_valve_percentage_command - cooling_request_count + - heating_request_count + - heating_return_water_isolation_valve_percentage_command + - heating_supply_water_isolation_valve_percentage_command opt_uses: - average_zone_air_temperature_sensor @@ -4611,32 +5100,46 @@ HHRU: implements: - MONITORING uses: + - return_air_temperature_sensor - supply_air_temperature_sensor - supply_air_temperature_setpoint - - return_air_temperature_sensor - supply_water_temperature_sensor - supply_water_valve_percentage_command - supply_water_valve_percentage_sensor opt_uses: - exhaust_air_temperature_sensor - outside_air_temperature_sensor + - failed_exhaust_air_temperature_alarm + - high_return_air_temperature_alarm + - high_supply_air_temperature_alarm + - high_supply_water_temperature_alarm + - low_return_air_temperature_alarm + - low_supply_air_temperature_alarm + - low_supply_water_temperature_alarm + PHRU: id: "5194420171762040832" - description: "heat recovery unit for ahu's with plate heat exchanger valve and bypass damper" + description: "heat recovery unit for ahu's with plate heat exchanger valve and bypass damper" is_abstract: true implements: - MONITORING uses: + - bypass_air_damper_percentage_command + - return_air_temperature_sensor - supply_air_temperature_sensor - supply_air_temperature_setpoint - - return_air_temperature_sensor - - bypass_air_damper_percentage_command opt_uses: - - exhaust_air_temperature_sensor - - outside_air_temperature_sensor - bypass_air_damper_command - bypass_air_damper_status + - exhaust_air_temperature_sensor + - outside_air_temperature_sensor + - failed_exhaust_air_temperature_alarm + - high_return_air_temperature_alarm + - high_supply_air_temperature_alarm + - low_return_air_temperature_alarm + - low_supply_air_temperature_alarm + CHWDT2X: id: "17588854111866978304" @@ -4646,8 +5149,8 @@ CHWDT2X: - MONITORING uses: - chilled_return_water_temperature_sensor_1 - - chilled_supply_water_temperature_sensor_1 - chilled_return_water_temperature_sensor_2 + - chilled_supply_water_temperature_sensor_1 - chilled_supply_water_temperature_sensor_2 HLSAFS: @@ -4666,23 +5169,31 @@ RHDHS: description: "Return humidification/dehumidification monitor." is_abstract: true uses: - - return_air_relative_humidity_sensor - - return_air_relative_humidity_setpoint - dehumidification_run_status - humidification_run_status + - return_air_relative_humidity_sensor + - return_air_relative_humidity_setpoint implements: - MONITORING + opt_uses: + - failed_humidifier_alarm + - high_return_air_relative_humidity_alarm + - low_return_air_relative_humidity_alarm + CO2DFVSC: id: "4574242837138243584" description: "Carbon dioxide levels controlled by a variable speed discharge fan." is_abstract: true uses: + - discharge_fan_speed_percentage_command - zone_air_co2_concentration_sensor - zone_air_co2_concentration_setpoint - - discharge_fan_speed_percentage_command implements: - CONTROL + opt_uses: + - high_zone_air_co2_concentration_alarm + CO2EFVSC: id: "8098956058392788992" @@ -4690,10 +5201,11 @@ CO2EFVSC: is_abstract: true opt_uses: - exhaust_fan_speed_percentage_sensor + - high_zone_air_co2_concentration_alarm uses: + - exhaust_fan_speed_percentage_command - zone_air_co2_concentration_sensor - zone_air_co2_concentration_setpoint - - exhaust_fan_speed_percentage_command implements: - CONTROL @@ -4704,21 +5216,23 @@ RACO2C: uses: - return_air_co2_concentration_sensor - return_air_co2_concentration_setpoint - + + DX2DDC: id: "6446737527519838208" description: "Two compressor run control with dual setpoint control on discharge side" is_abstract: true opt_uses: - - cooling_percentage_command - compressor_speed_percentage_command + - cooling_percentage_command + - failed_discharge_air_temperature_alarm uses: - compressor_run_command_1 - compressor_run_command_2 - compressor_run_status_1 - compressor_run_status_2 - - discharge_air_heating_temperature_setpoint - discharge_air_cooling_temperature_setpoint + - discharge_air_heating_temperature_setpoint - discharge_air_temperature_sensor implements: - CONTROL @@ -4738,16 +5252,20 @@ HPDDC: description: "Dual setpoint discharge side heat pump control." is_abstract: true opt_uses: - - cooling_thermal_power_capacity - - heating_thermal_power_capacity - compressor_speed_percentage_command - cooling_percentage_command + - cooling_thermal_power_capacity + - heating_thermal_power_capacity + - compressor_lost_power_alarm + - failed_compressor_alarm + - failed_discharge_air_temperature_alarm + - overload_compressor_alarm uses: - - discharge_air_temperature_sensor - - discharge_air_cooling_temperature_setpoint - - discharge_air_heating_temperature_setpoint - compressor_run_command - compressor_run_status + - discharge_air_cooling_temperature_setpoint + - discharge_air_heating_temperature_setpoint + - discharge_air_temperature_sensor - reversing_valve_command implements: - CONTROL @@ -4757,10 +5275,12 @@ EC2SC: description: "Evaporative cooler control on supply side." is_abstract: true opt_uses: - - evaporative_cooler_run_status_1 - - evaporative_cooler_run_status_2 - cooling_percentage_sensor - cooling_request_count + - evaporative_cooler_run_status_1 + - evaporative_cooler_run_status_2 + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: - evaporative_cooler_run_command_1 - evaporative_cooler_run_command_2 @@ -4774,17 +5294,19 @@ HWDDC: description: "Heating water valve with dual setpoint control on discharge side." is_abstract: true opt_uses: - - heating_water_valve_percentage_sensor - - heating_thermal_power_capacity - discharge_air_relative_humidity_sensor + - heating_thermal_power_capacity - heating_water_flowrate_sensor + - heating_water_valve_percentage_sensor + - failed_discharge_air_temperature_alarm uses: - - heating_water_valve_percentage_command - discharge_air_heating_temperature_setpoint - discharge_air_temperature_sensor + - heating_water_valve_percentage_command implements: - CONTROL - + + CFDPM: id: "13838358376871886848" description: "Carbon filter pressure monitoring, where specific filter type is required." @@ -4793,48 +5315,55 @@ CFDPM: - carbon_filter_differential_pressure_sensor implements: - MONITORING - + + VOADM2X: id: "13507343804260155392" description: "Variable outside air damper monitoring, where there are two separate, equal sets of dampers that operate in conjunction." is_abstract: true opt_uses: - economizer_mode + - low_limit_outside_air_damper_percentage_command - mixed_air_temperature_sensor - outside_air_damper_percentage_sensor_1 - outside_air_damper_percentage_sensor_2 - - low_limit_outside_air_damper_percentage_command - outside_air_flowrate_sensor_1 - outside_air_flowrate_sensor_2 + - failed_mixed_air_temperature_alarm uses: - - outside_air_temperature_sensor - outside_air_damper_percentage_command_1 - outside_air_damper_percentage_command_2 + - outside_air_temperature_sensor implements: - MONITORING - + + EHHRC: id: "3300321589723136" description: "Exhaust hydronic heat recovery coil with an isolation valve." is_abstract: true uses: - - heat_recovery_water_isolation_valve_command - - leaving_heat_recovery_coil_temperature_sensor - entering_heat_recovery_coil_temperature_sensor - exhaust_air_flowrate_sensor + - heat_recovery_water_isolation_valve_command + - leaving_heat_recovery_coil_temperature_sensor implements: - MONITORING - + + DPBHCC: id: "6697901167675965440" - description: "Two-pipe binary (open/closed) heating and cooling control. There is - an isolation valve for each incoming system. Valve and mode control to zone temperature - (heating/cooling setpoint configuration)." + description: "Two-pipe binary (open/closed) heating and cooling control. There + is an isolation valve for each incoming system. Valve and mode control to zone + temperature (heating/cooling setpoint configuration)." is_abstract: true opt_uses: - cooling_request_count - heating_request_count - zone_air_relative_humidity_sensor + - failed_zone_air_temperature_alarm + - high_zone_air_temperature_alarm + - low_zone_air_temperature_alarm uses: - chilled_supply_water_isolation_valve_command - chilled_supply_water_isolation_valve_status @@ -4845,7 +5374,8 @@ DPBHCC: - zone_air_temperature_sensor implements: - CONTROL - + + FTC: id: "18010943431630651392" description: "Floor temperature control, where the temperature sensors are embedded in the floor (as opposed to open to the air)." @@ -4855,29 +5385,32 @@ FTC: - zone_floor_temperature_setpoint implements: - OPERATIONAL - + + DPCHWHRWSC: id: "370343691220418560" description: "Two-pipe chilled water and heat recovery water control using the same coils." is_abstract: true opt_uses: - - leaving_coil_temperature_sensor - - chilled_supply_water_temperature_sensor + - chilled_return_water_isolation_valve_status - chilled_return_water_temperature_sensor - - heat_recovery_supply_water_temperature_sensor - - heat_recovery_return_water_temperature_sensor - - supply_water_valve_percentage_sensor + - chilled_supply_water_isolation_valve_status + - chilled_supply_water_temperature_sensor - heat_recovery_return_water_isolation_valve_status + - heat_recovery_return_water_temperature_sensor - heat_recovery_supply_water_isolation_valve_status - - chilled_return_water_isolation_valve_status - - chilled_supply_water_isolation_valve_status + - heat_recovery_supply_water_temperature_sensor + - leaving_coil_temperature_sensor + - supply_water_valve_percentage_sensor + - high_supply_air_temperature_alarm + - low_supply_air_temperature_alarm uses: + - chilled_supply_water_isolation_valve_command + - heat_recovery_run_command + - heat_recovery_supply_water_isolation_valve_command - supply_air_temperature_sensor - supply_air_temperature_setpoint - supply_water_valve_percentage_command - - heat_recovery_run_command - - heat_recovery_supply_water_isolation_valve_command - - chilled_supply_water_isolation_valve_command implements: - CONTROL @@ -4887,10 +5420,10 @@ CPVSC2X: is_abstract: true uses: - circulation_pump_run_command_1 - - circulation_pump_run_status_1 - - circulation_pump_speed_percentage_command_1 - circulation_pump_run_command_2 + - circulation_pump_run_status_1 - circulation_pump_run_status_2 + - circulation_pump_speed_percentage_command_1 - circulation_pump_speed_percentage_command_2 implements: - OPERATIONAL @@ -4900,8 +5433,8 @@ HWTTC: description: "Hot water tank temperature control." is_abstract: true uses: - - hot_water_tank_temperature_setpoint - hot_water_tank_temperature_sensor + - hot_water_tank_temperature_setpoint implements: - OPERATIONAL @@ -4910,11 +5443,11 @@ PHWTTC: description: "Preheating water tank temperature control." is_abstract: true uses: - - preheating_water_tank_temperature_setpoint - preheating_water_tank_temperature_sensor + - preheating_water_tank_temperature_setpoint implements: - OPERATIONAL - + RCKTM: id: "4150552628444528640" @@ -4939,24 +5472,24 @@ RCKTM2X: is_abstract: true uses: - refrigerant_discharge_pressure_sensor_1 - - refrigerant_discharge_temperature_sensor_1 - - refrigerant_liquid_pressure_sensor_1 - - refrigerant_liquid_saturation_temperature_sensor_1 - - refrigerant_liquid_temperature_sensor_1 - - refrigerant_subcooling_temperature_sensor_1 - - refrigerant_suction_pressure_sensor_1 - - refrigerant_suction_saturation_temperature_sensor_1 - - refrigerant_suction_superheat_temperature_sensor_1 - - refrigerant_suction_temperature_sensor_1 - refrigerant_discharge_pressure_sensor_2 + - refrigerant_discharge_temperature_sensor_1 - refrigerant_discharge_temperature_sensor_2 + - refrigerant_liquid_pressure_sensor_1 - refrigerant_liquid_pressure_sensor_2 + - refrigerant_liquid_saturation_temperature_sensor_1 - refrigerant_liquid_saturation_temperature_sensor_2 + - refrigerant_liquid_temperature_sensor_1 - refrigerant_liquid_temperature_sensor_2 + - refrigerant_subcooling_temperature_sensor_1 - refrigerant_subcooling_temperature_sensor_2 + - refrigerant_suction_pressure_sensor_1 - refrigerant_suction_pressure_sensor_2 + - refrigerant_suction_saturation_temperature_sensor_1 - refrigerant_suction_saturation_temperature_sensor_2 + - refrigerant_suction_superheat_temperature_sensor_1 - refrigerant_suction_superheat_temperature_sensor_2 + - refrigerant_suction_temperature_sensor_1 - refrigerant_suction_temperature_sensor_2 @@ -4965,27 +5498,29 @@ CCM: description: "Compressor current monitoring." is_abstract: true uses: - - compressor_run_command - compressor_current_sensor + - compressor_run_command + CC2XM: id: "15229407711775948800" description: "Compressor current monitoring for 2 compressors." is_abstract: true uses: - - compressor_run_command_1 - compressor_current_sensor_1 - - compressor_run_command_2 - compressor_current_sensor_2 + - compressor_run_command_1 + - compressor_run_command_2 + SSSPC: id: "12462508690710200320" description: "Supply static steam pressure control for steam/water heat exchanger" is_abstract: true uses: + - steam_valve_percentage_command - supply_steam_static_pressure_sensor - supply_steam_static_pressure_setpoint - - steam_valve_percentage_command implements: - CONTROL @@ -5006,8 +5541,9 @@ SCHWDT: implements: - MONITORING uses: - - secondary_chilled_supply_water_temperature_sensor - secondary_chilled_return_water_temperature_sensor + - secondary_chilled_supply_water_temperature_sensor + SHWDT: id: "11532515367658192896" @@ -5016,8 +5552,9 @@ SHWDT: implements: - MONITORING uses: - - secondary_heating_supply_water_temperature_sensor - secondary_heating_return_water_temperature_sensor + - secondary_heating_supply_water_temperature_sensor + PCHWDT: id: "18119029822687543296" @@ -5044,8 +5581,8 @@ TDTM: description: "water tank delta-T monitoring." is_abstract: true uses: + - entering_water_tank_temperature_sensor - leaving_water_tank_temperature_sensor - - entering_water_tank_temperature_sensor implements: - MONITORING @@ -5126,18 +5663,21 @@ HWRWISOVPM: - heating_return_water_isolation_valve_percentage_command - heating_return_water_isolation_valve_percentage_sensor implements: + - MONITORING - - MONITORING DEFSS: id: "8292821948602253312" description: "defrost run command and status (start/stop) " is_abstract: true uses: + - defrost_run_command - defrost_run_status - - defrost_run_command implements: - MONITORING + opt_uses: + - frost_alarm + DEFSTC: id: "13973831403553423360" @@ -5145,40 +5685,46 @@ DEFSTC: is_abstract: true uses: - defrost_temperature_sensor - - defrost_temperature_setpoint - + - defrost_temperature_setpoint + opt_uses: + - frost_alarm + + VOADC2X: id: "15455797155935027200" description: "Variable outside air damper control and monitoring, where there are two separate, equal sets of dampers that operate in conjunction." is_abstract: true uses: - - outside_air_damper_percentage_sensor_1 - - outside_air_damper_percentage_sensor_2 - outside_air_damper_percentage_command_1 - outside_air_damper_percentage_command_2 + - outside_air_damper_percentage_sensor_1 + - outside_air_damper_percentage_sensor_2 implements: - - OPERATIONAL - + - OPERATIONAL + + RAIDC: id: "8470714133883387904" description: "Return air isolation damper control and monitoring." is_abstract: true uses: - - return_air_isolation_damper_status - return_air_isolation_damper_command - + - return_air_isolation_damper_status + opt_uses: + - failed_return_air_isolation_damper_alarm + RAIDC3X: id: "6574698690760409088" description: "Return air isolation damper control and monitoring, where there are three separate, equal sets of dampers that operate in conjunction." is_abstract: true uses: - - return_air_isolation_damper_status_1 - - return_air_isolation_damper_status_2 - - return_air_isolation_damper_status_3 - return_air_isolation_damper_command_1 - return_air_isolation_damper_command_2 - - return_air_isolation_damper_command_3 + - return_air_isolation_damper_command_3 + - return_air_isolation_damper_status_1 + - return_air_isolation_damper_status_2 + - return_air_isolation_damper_status_3 implements: - MONITORING @@ -5187,10 +5733,10 @@ RAIDC2X: description: "Return air isolation damper control and monitoring, where there are two separate, equal sets of dampers that operate in conjunction." is_abstract: true uses: - - return_air_isolation_damper_status_1 - - return_air_isolation_damper_status_2 - return_air_isolation_damper_command_1 - - return_air_isolation_damper_command_2 + - return_air_isolation_damper_command_2 + - return_air_isolation_damper_status_1 + - return_air_isolation_damper_status_2 implements: - MONITORING @@ -5199,10 +5745,10 @@ DAIDC2X: description: "Discharge air isolation damper control and monitoring, where there are two separate, equal sets of dampers that operate in conjunction." is_abstract: true uses: - - discharge_air_isolation_damper_status_1 - - discharge_air_isolation_damper_status_2 - discharge_air_isolation_damper_command_1 - - discharge_air_isolation_damper_command_2 + - discharge_air_isolation_damper_command_2 + - discharge_air_isolation_damper_status_1 + - discharge_air_isolation_damper_status_2 implements: - MONITORING @@ -5211,24 +5757,27 @@ DAIDC: description: "Discharge air isolation damper control and monitoring." is_abstract: true uses: - - discharge_air_isolation_damper_status - discharge_air_isolation_damper_command + - discharge_air_isolation_damper_status implements: - MONITORING + opt_uses: + - failed_discharge_air_isolation_damper_alarm + RAIDC4X: id: "3091164378989330432" description: "Return air isolation damper control and monitoring, where there are four separate, equal sets of dampers that operate in conjunction." is_abstract: true uses: + - return_air_isolation_damper_command_1 + - return_air_isolation_damper_command_2 + - return_air_isolation_damper_command_3 + - return_air_isolation_damper_command_4 - return_air_isolation_damper_status_1 - return_air_isolation_damper_status_2 - return_air_isolation_damper_status_3 - return_air_isolation_damper_status_4 - - return_air_isolation_damper_command_1 - - return_air_isolation_damper_command_2 - - return_air_isolation_damper_command_3 - - return_air_isolation_damper_command_4 implements: - MONITORING @@ -5238,20 +5787,23 @@ SAIDC: description: "isolation damper status monitoring and control on the supply side." is_abstract: true uses: + - supply_air_isolation_damper_command - supply_air_isolation_damper_status - - supply_air_isolation_damper_command implements: - MONITORING + opt_uses: + - failed_supply_air_isolation_damper_alarm + SAIDC2X: id: "17694086170738163712" description: "isolation damper status monitoring and control on the supply side, where there are two separate, equal sets of dampers that operate in conjunction." is_abstract: true uses: + - supply_air_isolation_damper_command_1 + - supply_air_isolation_damper_command_2 - supply_air_isolation_damper_status_1 - supply_air_isolation_damper_status_2 - - supply_air_isolation_damper_command_1 - - supply_air_isolation_damper_command_2 implements: - MONITORING @@ -5260,33 +5812,35 @@ SAIDC3X: description: "isolation damper status monitoring and control on the supply side, where there are three separate, equal sets of dampers that operate in conjunction." is_abstract: true uses: + - supply_air_isolation_damper_command_1 + - supply_air_isolation_damper_command_2 + - supply_air_isolation_damper_command_3 - supply_air_isolation_damper_status_1 - supply_air_isolation_damper_status_2 - supply_air_isolation_damper_status_3 - - supply_air_isolation_damper_command_1 - - supply_air_isolation_damper_command_2 - - supply_air_isolation_damper_command_3 implements: - - MONITORING - + - MONITORING + + SSPC2X: id: "7115130646044868608" description: "Supply static pressure control via supply fan speed with 2 sensors" is_abstract: true opt_uses: - - supply_fan_speed_frequency_sensor - - supply_fan_run_command - - supply_fan_run_status + - average_supply_air_static_pressure_sensor - pressurization_request_count - supply_air_damper_percentage_command - supply_air_flowrate_sensor + - supply_fan_run_command + - supply_fan_run_status + - supply_fan_speed_frequency_sensor - supply_fan_speed_percentage_command - - average_supply_air_static_pressure_sensor + - failed_supply_fan_alarm uses: - supply_air_static_pressure_sensor_1 - - supply_air_static_pressure_sensor_2 + - supply_air_static_pressure_sensor_2 - supply_air_static_pressure_setpoint_1 - - supply_air_static_pressure_setpoint_2 + - supply_air_static_pressure_setpoint_2 implements: - OPERATIONAL @@ -5296,13 +5850,14 @@ SFMSC: is_abstract: true uses: - supply_fan_run_command + - supply_fan_run_mode - supply_fan_run_status - supply_fan_speed_mode - - supply_fan_run_mode - opt_uses: + opt_uses: - schedule_run_command + - failed_supply_fan_alarm + - MIPVCM: id: "10283962739713900544" description: "Motor phase-level input current and voltage monitoring." @@ -5310,15 +5865,16 @@ MIPVCM: implements: - MONITORING uses: - - input_phase1_phase3_line_motor_voltage_sensor - - input_phase1_phase2_line_motor_voltage_sensor - - input_phase2_phase3_line_motor_voltage_sensor - input_phase1_line_motor_current_sensor + - input_phase1_phase2_line_motor_voltage_sensor + - input_phase1_phase3_line_motor_voltage_sensor - input_phase2_line_motor_current_sensor + - input_phase2_phase3_line_motor_voltage_sensor - input_phase3_line_motor_current_sensor opt_uses: - - average_input_line_motor_current_sensor - average_input_inter_line_motor_voltage_sensor + - average_input_line_motor_current_sensor + MIPWM: id: "2094166817340653568" @@ -5329,8 +5885,9 @@ MIPWM: uses: - input_motor_power_sensor opt_uses: - - motor_powerfactor_sensor - input_motor_frequency_sensor + - motor_powerfactor_sensor + MSM: id: "2084609862272024576" @@ -5344,7 +5901,7 @@ MSM: - low_discharge_fan_speed_status opt_uses: - failed_discharge_fan_alarm - + INVOPWM: id: "10056530958531690496" @@ -5355,8 +5912,9 @@ INVOPWM: uses: - output_inverter_power_sensor opt_uses: - - output_inverter_voltage_sensor - input_inverter_frequency_sensor + - output_inverter_voltage_sensor + INVIPCM: id: "3240332922506444800" @@ -5382,22 +5940,22 @@ CWSWISOVPM: GTWFCISOVM: id: "5444844940104302592" description: "Geothermal water free-cooling isolation valve monitoring; exclusively using ground as heat sink for building load." - is_abstract: true + is_abstract: true uses: - - chilled_side_ground_supply_economizer_isolation_valve_status - - chilled_side_ground_return_economizer_isolation_valve_status - chilled_side_ground_return_economizer_isolation_valve_command + - chilled_side_ground_return_economizer_isolation_valve_status + - chilled_side_ground_supply_economizer_isolation_valve_status implements: - MONITORING GTWGRISOVM: id: "12463704959361220608" description: "Geothermal water ground-recharge isolation valve monitoring; rejecting ground heat to atmosphere via cooling towers." - is_abstract: true + is_abstract: true uses: - - heating_side_ground_supply_economizer_isolation_valve_status - - heating_side_ground_return_economizer_isolation_valve_status - heating_side_ground_return_economizer_isolation_valve_command + - heating_side_ground_return_economizer_isolation_valve_status + - heating_side_ground_supply_economizer_isolation_valve_status implements: - MONITORING @@ -5407,40 +5965,44 @@ GTWHEISOVM: is_abstract: true uses: - chilled_side_ground_return_water_isolation_valve_status - - chilled_side_ground_supply_water_isolation_valve_status - chilled_side_ground_supply_water_isolation_valve_command + - chilled_side_ground_supply_water_isolation_valve_status implements: - MONITORING GTWHRISOVM: id: "11317538854195429376" description: "Geothermal water heat-rejection isolation valve monitoring; rejecting building heat to ground." - is_abstract: true + is_abstract: true uses: - heating_side_ground_return_water_isolation_valve_status - - heating_side_ground_supply_water_isolation_valve_status - heating_side_ground_supply_water_isolation_valve_command + - heating_side_ground_supply_water_isolation_valve_status implements: - MONITORING - + + COCDSP: id: "3620605616042541056" description: "Dual setpoint CO concentration control." is_abstract: true uses: - - low_limit_zone_air_co_concentration_setpoint - high_limit_zone_air_co_concentration_setpoint + - low_limit_zone_air_co_concentration_setpoint - zone_air_co_concentration_sensor implements: - CONTROL + opt_uses: + - high_zone_air_co_concentration_alarm + NOCDSP: id: "10177846673493983232" description: "Dual setpoint NO concentration control." is_abstract: true uses: - - low_limit_zone_air_no_concentration_setpoint - high_limit_zone_air_no_concentration_setpoint + - low_limit_zone_air_no_concentration_setpoint - zone_air_no_concentration_sensor implements: - CONTROL @@ -5450,10 +6012,10 @@ EFHLC: description: "Two-speed exhaust fan (low/high)." is_abstract: true uses: - - low_exhaust_fan_speed_command - high_exhaust_fan_speed_command - - low_exhaust_fan_speed_status - high_exhaust_fan_speed_status + - low_exhaust_fan_speed_command + - low_exhaust_fan_speed_status implements: - OPERATIONAL @@ -5477,13 +6039,15 @@ SCRSS: description: "Scurbber start stop monitoring." is_abstract: true opt_uses: - - scrubber_run_mode - - filter_alarm + - bypass_air_damper_percentage_command + - bypass_air_damper_percentage_sensor - differential_pressure_sensor - differential_pressure_setpoint + - scrubber_run_mode + - filter_alarm - fire_alarm - - bypass_air_damper_percentage_command - - bypass_air_damper_percentage_sensor + - high_differential_pressure_alarm + - low_differential_pressure_alarm uses: - scrubber_run_command - scrubber_run_status @@ -5498,15 +6062,16 @@ PCM: uses: - particle_concentration_sensor implements: - - MONITORING + - MONITORING + PMM: id: "976724353938882560" description: "Zone air particulate matter monitoring." is_abstract: true uses: - - zone_air_pm2pt5_concentration_sensor - zone_air_pm10pt0_concentration_sensor + - zone_air_pm2pt5_concentration_sensor implements: - MONITORING @@ -5515,7 +6080,8 @@ PHWTC: description: "potable water temperature monitoring and control." is_abstract: true uses: - - potable_hot_water_temperature_sensor + - potable_hot_water_temperature_sensor + LM: id: "16338502682899644416" @@ -5524,8 +6090,9 @@ LM: uses: - level_status - percentage_sensor - -PLPM: + + +PLPM: id: "7702850397416718336" description: "Pipeline Fluid pressure monitoring" is_abstract: true @@ -5549,8 +6116,8 @@ CO2M6X: description: "Basic carbon dioxide monitoring for 6 Zones." is_abstract: true opt_uses: - - max_zone_air_co2_concentration_sensor - average_zone_air_co2_concentration_sensor + - max_zone_air_co2_concentration_sensor uses: - zone_air_co2_concentration_sensor_1 - zone_air_co2_concentration_sensor_2 @@ -5568,10 +6135,11 @@ MIPCVM: implements: - MONITORING uses: - - average_input_line_motor_current_sensor - average_input_inter_line_motor_voltage_sensor - - input_motor_power_sensor - + - average_input_line_motor_current_sensor + - input_motor_power_sensor + + EPM: id: "1350523123010633728" description: "Basic Electrical parameter monitoring." @@ -5579,11 +6147,11 @@ EPM: opt_uses: - power_status - uses: - - voltage_sensor + uses: - current_sensor - - power_sensor - energy_accumulator + - power_sensor + - voltage_sensor implements: - MONITORING @@ -5602,8 +6170,8 @@ RDC: description: "Return air damper percentage monitoring" is_abstract: true uses: - - return_air_damper_percentage_sensor - return_air_damper_percentage_command + - return_air_damper_percentage_sensor implements: - MONITORING @@ -5642,10 +6210,10 @@ RFVSC: description: "Variable speed control for a return fan." is_abstract: true opt_uses: - - return_fan_speed_frequency_sensor - - return_fan_speed_percentage_sensor - return_fan_current_sensor - return_fan_power_sensor + - return_fan_speed_frequency_sensor + - return_fan_speed_percentage_sensor uses: - return_fan_run_command - return_fan_run_status @@ -5655,23 +6223,23 @@ RFVSC: RFVSC2X: id: "6093235743096832000" - description: "Return fan variable speed control with feedback and sensoring for two fanss." + description: "Return fan variable speed control with feedback and sensoring for two fans." is_abstract: true opt_uses: - - return_fan_speed_frequency_sensor_1 - - return_fan_speed_percentage_sensor_1 - return_fan_current_sensor_1 + - return_fan_current_sensor_2 - return_fan_power_sensor_1 + - return_fan_power_sensor_2 + - return_fan_speed_frequency_sensor_1 - return_fan_speed_frequency_sensor_2 + - return_fan_speed_percentage_sensor_1 - return_fan_speed_percentage_sensor_2 - - return_fan_current_sensor_2 - - return_fan_power_sensor_2 uses: - return_fan_run_command_1 - - return_fan_run_status_1 - - return_fan_speed_percentage_command_1 - return_fan_run_command_2 + - return_fan_run_status_1 - return_fan_run_status_2 + - return_fan_speed_percentage_command_1 - return_fan_speed_percentage_command_2 implements: - OPERATIONAL @@ -5680,4 +6248,4 @@ MFSD: description: "Motorized fire smoke damper" is_canonical: true implements: - - EQUIPMENT + - EQUIPMENT \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml index c1f9b35aa..15f51ccf7 100644 --- a/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml @@ -28,12 +28,17 @@ VAV: - EQUIPMENT opt_uses: - zone_use_label # Needed until the zones can are joined to assets with connections. + - failed_communication_alarm FAN: id: "13300966571238227968" description: "Tag for stand-alone fans. This is distinct from integral fans (i.e. fans contained within another device, such as an AHU). They transfer air from one space to another, or to ambient. They are unidirectional." is_abstract: true + opt_uses: + - failed_communication_alarm + - failed_exhaust_air_temperature_alarm + - failed_smoke_detection_alarm implements: - EQUIPMENT @@ -47,6 +52,7 @@ FCU: - return_air_temperature_sensor - return_air_relative_humidity_sensor - discharge_air_temperature_sensor + - failed_communication_alarm implements: - EQUIPMENT @@ -63,12 +69,15 @@ AHU: - EQUIPMENT opt_uses: - outside_air_flowrate_requirement # Included at AHU because, regardless of avaiable data for OAD, it will have ventilation requirements. + - failed_communication_alarm HX: id: "9849494018533097472" description: "Tag for heat exchangers. Heat exchangers facilitate heat transfer between two media (water, air, refrigerant, etc.). " is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -77,6 +86,8 @@ PMP: description: "Tag for pumps. Pumps move liquid (water, glycol, liquid CO2, etc.) from one part of a system to another. " is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -84,6 +95,8 @@ FRZ: id: "3681135930174865408" description: "Tag for Freezers. " is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -93,6 +106,8 @@ MAU: for the exhaust of air from that space; this distinguishes it from a DOAS system, which supplies air and also exhausts it. " is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -101,6 +116,8 @@ UH: description: "Tag for unit heaters. These are stand-alone heaters, which can operate independently of an external device (they are not integral to an AHU, for instance). " is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -115,6 +132,8 @@ WEATHER: id: "11522044718426882048" description: "Tag for weather stations." is_abstract: true + opt_uses: + - failed_communication_alarm BLR: id: "3248932202947280896" @@ -128,6 +147,7 @@ BLR: - heating_thermal_power_capacity - efficiency_percentage_specification - flowrate_requirement # All boilers have it, so no need to associate to subtypes. If there are subtypes that could use it, should also be included there. + - failed_communication_alarm CH: id: "9950288448474578944" @@ -142,6 +162,7 @@ CH: - power_capacity - efficiency_percentage_specification - flowrate_requirement # All chillers have it, so no need to associate to subtypes. If there are subtypes that could use it, should also be included there. + - failed_communication_alarm CU: id: "9692416687877390336" @@ -151,6 +172,8 @@ CU: (therefore neither an AHU, which has control of outside air directly, nor a FCU which recirculates space air more or less exclusively)." is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -165,6 +188,7 @@ HWS: - differential_pressure_specification - flowrate_requirement - heating_request_count + - failed_communication_alarm CHWS: id: "5338602430047191040" @@ -175,6 +199,7 @@ CHWS: - differential_pressure_specification - flowrate_requirement - cooling_request_count + - failed_communication_alarm CDWS: id: "6383437543597146112" @@ -185,6 +210,7 @@ CDWS: opt_uses: - thermal_power_capacity - differential_pressure_specification + - failed_communication_alarm CT: id: "14561974466901966848" @@ -192,6 +218,8 @@ CT: evaporation of air. The tag applies to open- and closed-loop cooling towers. They are distinct from dry coolers, which utilize sensible cooling only. " is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -202,6 +230,7 @@ ZONE: is_abstract: true opt_uses: - zone_use_label + - failed_communication_alarm DC: # Proposed in v2.3 naming standard id: "7236632178472255488" @@ -212,11 +241,14 @@ DC: # Proposed in v2.3 naming standard - EQUIPMENT opt_uses: - cooling_percentage_command + - failed_communication_alarm SDC: id: "4852143301546999808" description: "Tag for automated window shades." is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -225,6 +257,8 @@ DMP: description: "Tag for general, stand-alone dampers. Dampers are devices which control the flow of air from one space to another (or to outside). " is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -232,6 +266,8 @@ DHWT: # Proposed in v2.3 naming standard id: "1614204703048990720" description: "Tag for general domestic hot water tanks." is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -240,6 +276,8 @@ DFR: # Proposed in v2.3 naming standard description: "Tag for duct furnaces. Duct furnaces provide heating air to spaces, usually through dual duct VAV systems (i.e. they serve the 'hot deck'). They provide heating only. " is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -247,6 +285,8 @@ DH: id: "1730418684058402816" description: "Tag for duct heater. Similar to a unit heater, but within a supply duct. " is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -254,6 +294,8 @@ HUM: id: "1122432734363385856" description: "Tag for humidifier. Provides humidification to air, as its primary function. " is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -261,6 +303,8 @@ VLV: id: "6847830573239500800" description: "Tag for valves. Valves are devices which control the flow of water. " is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -302,6 +346,8 @@ ADY: id: "378735163963604992" description: "Air dryer." is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -309,6 +355,8 @@ AION: id: "3358917450585341952" description: "Air ionizer." is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -316,6 +364,8 @@ CMP: id: "6125328288488357888" description: "Air compressor." is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -324,6 +374,8 @@ RP: id: "8076723933279158272" description: "Radiant panel, consisting of a coil/panel with no fan providing either heating or cooling via primarily radiant heat transfer." is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -331,6 +383,8 @@ CO: id: "12084927601638899712" description: "Tag for change over equipment which is providing either hot or chilled water for radiant panels in a zone " is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -338,6 +392,8 @@ DWST: id: "17610844344422498304" description: "Domestic water system " is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -345,6 +401,8 @@ LANDLORD: id: "16264268055838720000" description: "Equipment base on landlord's side" is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -354,6 +412,8 @@ DOAS: to a space or group of spaces, and are responsible for the exhaust of air from that space, but does not recirculate air; this distinguishes it from AHUs, which have the capability to recirculate the air as well." is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -361,6 +421,8 @@ TST: id: "17952396636474834944" description: "Tag for thermal storage tanks." is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT @@ -372,11 +434,14 @@ GTWS: - thermal_power_capacity - differential_pressure_specification - flowrate_requirement + - failed_communication_alarm CRREF: id: "4809287636831174656" description: "Tag for coldroom refigeration." is_abstract: true + opt_uses: + - failed_communication_alarm implements: - EQUIPMENT diff --git a/ontology/yaml/resources/METERS/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/METERS/entity_types/ABSTRACT.yaml index 3af2ad3b6..796aa989b 100644 --- a/ontology/yaml/resources/METERS/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/METERS/entity_types/ABSTRACT.yaml @@ -17,7 +17,7 @@ PWM: id: "17470344350578769920" - description: "Very basic power and enrgy monitoring only." + description: "Very basic power and energy monitoring only." is_abstract: true opt_uses: - apparent_power_sensor @@ -81,5 +81,13 @@ PWMRDM: - generator_energy_accumulator - electricalgrid_energy_accumulator - generator_run_time_accumulator - - electricalgrid_run_time_accumulator + - electricalgrid_run_time_accumulator + +VCM: + id: "9300590326156623872" + description: "Current and voltage monitoring" + is_abstract: true + uses: + - current_sensor + - voltage_sensor \ No newline at end of file diff --git a/ontology/yaml/resources/METERS/entity_types/EM.yaml b/ontology/yaml/resources/METERS/entity_types/EM.yaml index 301efa453..9206abd2a 100644 --- a/ontology/yaml/resources/METERS/entity_types/EM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/EM.yaml @@ -20,6 +20,15 @@ EM_PWM: - EM - PWM +EM_PWM_VCM: + id: "7427092881170497536" + description: "Power meter with basic power, current and voltage monitoring." + is_canonical: true + implements: + - EM + - PWM + - VCM + EM_PLPM: id: "13541767314302566400" description: "Power meter with basic Phase-level power monitoring." @@ -97,6 +106,16 @@ EM_PWM_PWMRDM: - PWM - PWMRDM +EM_PWM_AVCM_PWMRDM: + id: "13263757998242660352" + description: "Energy metering from Grid Electricity and Diesel Generator with power, current, voltage monitoring." + is_canonical: true + implements: + - EM + - PWM + - AVCM + - PWMRDM + ############################# ### Non-Canonical Devices ### ############################# diff --git a/ontology/yaml/resources/METERS/entity_types/WM.yaml b/ontology/yaml/resources/METERS/entity_types/WM.yaml index 3cd3408e9..1e7771ac0 100644 --- a/ontology/yaml/resources/METERS/entity_types/WM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/WM.yaml @@ -22,6 +22,7 @@ WM_STANDARD: - water_volume_accumulator opt_uses: - failed_alarm + - flowrate_sensor WM_WF: id: "5379261270530719744" diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index d060ee4d9..ee9716004 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -38,7 +38,7 @@ H2M: WLDS: id: "1407482223375941632" - description: "Basic watre leak monitoring." + description: "Basic water leak monitoring." is_abstract: true uses: - water_leak_detection_alarm diff --git a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml index 0812b8750..92b0b1a32 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml @@ -111,7 +111,8 @@ ASD: - EQUIPMENT HDS: - description: "Hydrogen sensor." + id: "4688904307729235968" + description: "Hydrogen Sensor." is_abstract: true implements: - - EQUIPMENT + - /SENSOR \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml index afc427301..d93be162f 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml @@ -12,6 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. +######################## +### Canonical Types ### +######################## + + HDS_STD: description: "Standard Hydrogen sensor." implements: @@ -19,4 +24,12 @@ HDS_STD: is_canonical: true uses: - particle_concentration_sensor - - particle_concentration_alarm \ No newline at end of file + - particle_concentration_alarm + +HDS_H2M: + id: "15173284240247750656" + description: "Zone air hydrogen level used for monitoring in battery rooms." + is_canonical: true + implements: + - HDS + - H2M diff --git a/tools/abel/README.md b/tools/abel/README.md index df8b63d26..709ba81ba 100644 --- a/tools/abel/README.md +++ b/tools/abel/README.md @@ -145,7 +145,7 @@ ABEL has a few pieces of core functionality, they are: ### Command-line arguments for ABEL: `-s` or `--spreadsheet_id` **required** id for a google sheets spreadsheet - * [ABEL Spreadsheet Template](https://docs.google.com/spreadsheets/d/1b6IRimNS1dAtPjkNN-fk4TirnLzOiDyyUmOKP_MhMM0/copy?usp=sharing) + * [ABEL Spreadsheet Template](https://docs.google.com/spreadsheets/d/1b6IRimNS1dAtPjkNN-fk4TirnLzOiDyyUmOKP_MhMM0/copy#gid=980240783) * A Google Sheets ID is found embedded into the spreadsheet's url. e.g. `https://docs/google/com/spreadsheets/d//edit#gid=123467` @@ -170,6 +170,8 @@ Validator](../validators/ontology_validator) will surface validation results from the modified ontology, and Building Configuration files will be validated against the modified ontology. +`-d` or `--output-dir` fully qualified or relative file path to a directory which ABEL can write validation logs to. ABEL must have write access to this directory or else an error will be raised. + ### The ABEL Spreadsheet The ABEL spreadsheet serves as a user-friendly interface for ABEL and is what allows a user to make changes to machine readable documents like [Building @@ -205,7 +207,7 @@ python3 abel.py -s The process for using a building config to generate an ABEL spreadsheet is as follows: -1. Create a blank spreadsheet for ABEL to write to from [ABEL Spreadsheet template](https://docs.google.com/spreadsheets/d/1b6IRimNS1dAtPjkNN-fk4TirnLzOiDyyUmOKP_MhMM0/copy?usp=sharing) +1. Create a blank spreadsheet for ABEL to write to from [ABEL Spreadsheet template](https://docs.google.com/spreadsheets/d/1tcLjFnHiXUT-xh5C1hRKiUVaUH_CzgSI8zFQ_B8q7vs/copy#gid=980240783) 2. Share your spreadsheet with your GCP service account and project id as an editor. Refer to Google Sheets documentation on [how to share a google sheet](https://support.google.com/docs/answer/9331169?hl=en#6.1). 3. In `digitalbuildings/tools/abel` run ABEL with the command: ``` diff --git a/tools/abel/model/arg_parser.py b/tools/abel/model/arg_parser.py index e1e8b0008..eb1b3551f 100644 --- a/tools/abel/model/arg_parser.py +++ b/tools/abel/model/arg_parser.py @@ -92,7 +92,7 @@ def ParseArgs() -> argparse.ArgumentParser: dest='output_dir', required=False, default=os.getcwd(), - help='Path to a directory for output files to be written to', + help='Absolute or relative path for output_directory', metavar='output-directory') return parser diff --git a/tools/abel/model/constants.py b/tools/abel/model/constants.py index b09ef4d99..6fcbbd352 100644 --- a/tools/abel/model/constants.py +++ b/tools/abel/model/constants.py @@ -92,6 +92,7 @@ BC_MISSING = 'MISSING' CONFIG_CLOUD_DEVICE_ID = 'cloud_device_id' CONFIG_CODE = 'code' +CONFIG_ETAG = 'etag' CONFIG_CONNECTIONS = 'connections' CONFIG_TRANSLATION = 'translation' CONFIG_TYPE = 'type' @@ -180,7 +181,7 @@ REQUIRED_ENTITY_HEADERS = [ENTITY_CODE, IS_REPORTING, NAMESPACE, TYPE_NAME] REQUIRED_FIELD_HEADERS = [ENTITY_CODE, STANDARD_FIELD_NAME, MISSING] REQUIRED_STATE_HEADERS = [ - ENTITY_CODE, REPORTING_ENTITY_FIELD_NAME, STANDARD_STATE, RAW_STATE + REPORTING_ENTITY_CODE, REPORTING_ENTITY_FIELD_NAME, STANDARD_STATE, RAW_STATE ] REQUIRED_CONNECTION_HEADERS = [ SOURCE_ENTITY_CODE, TARGET_ENTITY_CODE, CONNECTION_TYPE @@ -200,7 +201,8 @@ ENTITY_CODE, BC_GUID, REPORTING_ENTITY_CODE, REPORTING_ENTITY_GUID, REPORTING_ENTITY_FIELD_NAME, STANDARD_FIELD_NAME, MISSING, RAW_FIELD_NAME, RAW_UNIT_PATH, STANDARD_UNIT_VALUE, RAW_UNIT_VALUE ] ALL_STATE_HEADERS = [ - ENTITY_CODE, BC_GUID, REPORTING_ENTITY_FIELD_NAME, STANDARD_STATE, RAW_STATE + REPORTING_ENTITY_CODE, REPORTING_ENTITY_GUID, REPORTING_ENTITY_FIELD_NAME, + STANDARD_STATE, RAW_STATE ] ALL_CONNECTION_HEADERS = [ SOURCE_ENTITY_CODE, SOURCE_ENTITY_GUID, CONNECTION_TYPE, TARGET_ENTITY_CODE, @@ -223,7 +225,8 @@ ('reporting_entity_guid', REPORTING_ENTITY_GUID), ('reporting_entity_field_name', REPORTING_ENTITY_FIELD_NAME)] -STATE_ATTRIBUTE_LIST = [('entity_code', ENTITY_CODE), ('entity_guid', BC_GUID), +STATE_ATTRIBUTE_LIST = [('reporting_entity_code', REPORTING_ENTITY_CODE), + ('reporting_entity_guid', REPORTING_ENTITY_GUID), ('standard_field_name', REPORTING_ENTITY_FIELD_NAME), ('standard_state', STANDARD_STATE), ('raw_state', RAW_STATE)] diff --git a/tools/abel/model/export_helper.py b/tools/abel/model/export_helper.py index c75bb9a8a..3389eb26b 100644 --- a/tools/abel/model/export_helper.py +++ b/tools/abel/model/export_helper.py @@ -24,6 +24,7 @@ from model.constants import CONFIG_CLOUD_DEVICE_ID from model.constants import CONFIG_CODE from model.constants import CONFIG_CONNECTIONS +from model.constants import CONFIG_ETAG from model.constants import CONFIG_INITIALIZE from model.constants import CONFIG_LINKS from model.constants import CONFIG_METADATA @@ -165,6 +166,7 @@ def _GetReportingEntityBuildingConfigBlock( reporting_entity_yaml = { CONFIG_CLOUD_DEVICE_ID: str(entity.cloud_device_id), CONFIG_CODE: entity.code, + CONFIG_ETAG: entity.etag } reporting_entity_yaml.update(self._GetConnections(entity=entity)) if entity.translations: diff --git a/tools/abel/model/model_builder.py b/tools/abel/model/model_builder.py index c09c0d1ae..19490babd 100644 --- a/tools/abel/model/model_builder.py +++ b/tools/abel/model/model_builder.py @@ -140,7 +140,7 @@ def Build(self) -> None: entity.AddConnection(connection) for field in self.fields: for state in self.states: - if state.entity_guid == guid: + if state.reporting_entity_guid == guid: if state.standard_field_name == field.reporting_entity_field_name: field.AddState(state) elif state.standard_field_name == field.standard_field_name: @@ -198,7 +198,7 @@ def LoadStates(self, state_entries: List[Dict[str, str]]) -> None: """ for state_entry in state_entries: state_entry[BC_GUID] = self.guid_to_entity_map.GetEntityGuidByCode( - state_entry[ENTITY_CODE]) + state_entry[REPORTING_ENTITY_CODE]) self.states.append(State.FromDict(state_entry)) def LoadConnections(self, connection_entries: List[Dict[str, str]]) -> None: @@ -322,7 +322,7 @@ def _TranslateStatesToABEL(self, entity_guid: str, self.states.append( State( standard_field_name=field.std_field_name, - entity_guid=entity_guid, + reporting_entity_guid=entity_guid, standard_state=std_state_value, raw_state=raw_state_value)) diff --git a/tools/abel/model/state.py b/tools/abel/model/state.py index 533265938..714d5f897 100644 --- a/tools/abel/model/state.py +++ b/tools/abel/model/state.py @@ -15,10 +15,10 @@ from typing import Dict -from model.constants import BC_GUID -from model.constants import ENTITY_CODE from model.constants import RAW_STATE +from model.constants import REPORTING_ENTITY_CODE from model.constants import REPORTING_ENTITY_FIELD_NAME +from model.constants import REPORTING_ENTITY_GUID from model.constants import STANDARD_STATE from model.guid_to_entity_map import GuidToEntityMap @@ -27,43 +27,44 @@ class State(object): """Class for concrete model states. Attributes: - entity_guid: UUID4 id of the parent entity for a field. + reporting_entity_guid: UUID4 id of the parent reporting entity for a field. standard_field_name: Standardized field name for an EntityField standard_state: Standardized state name. raw_state: Raw state name coming from bacnet payload device. guid_to_entity_map: Global entity by guid mapping. """ - def __init__(self, entity_guid: str, standard_field_name: str, + def __init__(self, reporting_entity_guid: str, standard_field_name: str, standard_state: str, raw_state: str): """Init. Args: - entity_guid: UUID4 id of the parent entity for a field. + reporting_entity_guid: UUID4 id of the parent entity for a field. standard_field_name: Standardized field name for an EntityField standard_state: Standardized state name. raw_state: Raw state name coming from bacnet payload device. """ - self.entity_guid = entity_guid + self.reporting_entity_guid = reporting_entity_guid self.standard_field_name = standard_field_name self.standard_state = standard_state self.raw_state = raw_state self.guid_to_entity_map = GuidToEntityMap() def __str__(self): - entity_code = self.guid_to_entity_map.GetEntityByGuid(self.entity_guid).code - return f'State for {entity_code}: {self.standard_field_name}' + reporting_entity_code = self.guid_to_entity_map.GetEntityByGuid( + self.reporting_entity_guid).code + return f'State for {reporting_entity_code}: {self.standard_field_name}' # pylint: disable=line-too-long def __eq__(self, other: ...) -> bool: if not isinstance(other, State): raise TypeError('Other object must be a state instance.') - return self.entity_guid == other.entity_guid and self.standard_field_name == other.standard_field_name and self.standard_state == other.standard_state + return self.reporting_entity_guid == other.reporting_entity_guid and self.standard_field_name == other.standard_field_name and self.standard_state == other.standard_state @classmethod def FromDict(cls, states_dict: Dict[str, str]) ->...: new_state = cls( - entity_guid=states_dict[BC_GUID], + reporting_entity_guid=states_dict[REPORTING_ENTITY_GUID], standard_field_name=states_dict[REPORTING_ENTITY_FIELD_NAME], standard_state=states_dict[STANDARD_STATE], raw_state=states_dict[RAW_STATE]) @@ -72,10 +73,11 @@ def FromDict(cls, states_dict: Dict[str, str]) ->...: def GetSpreadsheetRowMapping(self) -> Dict[str, str]: """Returns a dictionary of State attributes by spreadsheet headers.""" return { - ENTITY_CODE: - self.guid_to_entity_map.GetEntityCodeByGuid(self.entity_guid), - BC_GUID: - self.entity_guid, + REPORTING_ENTITY_CODE: + self.guid_to_entity_map.GetEntityCodeByGuid( + self.reporting_entity_guid), + REPORTING_ENTITY_GUID: + self.reporting_entity_guid, REPORTING_ENTITY_FIELD_NAME: self.standard_field_name, STANDARD_STATE: diff --git a/tools/abel/tests/export_helper_test.py b/tools/abel/tests/export_helper_test.py index 394325e6d..52d74128b 100644 --- a/tools/abel/tests/export_helper_test.py +++ b/tools/abel/tests/export_helper_test.py @@ -136,7 +136,7 @@ def testExportBuildingConfiguration(self): ['code', 'connections', 'links', 'type'], list(exported_building_config.get('test_virtual_guid').keys())) self.assertEqual( - ['cloud_device_id', 'code', 'translation', 'type'], + ['cloud_device_id', 'code', 'etag', 'translation', 'type'], list(exported_building_config.get('test_reporting_guid').keys())) self.assertIsInstance( exported_building_config.get('test_reporting_guid').get( diff --git a/tools/abel/tests/model_builder_test.py b/tools/abel/tests/model_builder_test.py index eeee9bc96..0709010af 100644 --- a/tools/abel/tests/model_builder_test.py +++ b/tools/abel/tests/model_builder_test.py @@ -162,8 +162,8 @@ def testToModelDictionary(self): [ 'CHWS-1', 'test_reporting_guid', - # Etag = None - None, + # Etag = 1234567 + '1234567', # Is reporting = True True, '2541901344105616', @@ -208,8 +208,8 @@ def testToModelDictionary(self): None, 'supply_water_temperature_sensor', 'TRUE', None ]], 'States': [[ - 'Entity Code', 'Entity Guid', 'Reporting Entity Field', - 'DBO Standard State', 'Raw State' + 'Reporting Entity Code', 'Reporting Entity Guid', + 'Reporting Entity Field', 'DBO Standard State', 'Raw State' ], ['CHWS-1', 'test_reporting_guid', 'fire_alarm_5', 'ON', 'TRUE']], 'Connections': [[ 'Source Entity Code', 'Source Entity Guid', 'DBO Connection Type', diff --git a/tools/abel/tests/spreadsheet_validator_test.py b/tools/abel/tests/spreadsheet_validator_test.py index 78666fec5..bc4a94a3e 100644 --- a/tools/abel/tests/spreadsheet_validator_test.py +++ b/tools/abel/tests/spreadsheet_validator_test.py @@ -81,8 +81,8 @@ def testValidate(self): def testBadFieldNameDependencyLogsError(self): bad_test_state = { - ENTITY_CODE: TEST_REPORTING_ENTITY_CODE, - BC_GUID: TEST_REPORTING_GUID, + REPORTING_ENTITY_CODE: TEST_REPORTING_ENTITY_CODE, + REPORTING_ENTITY_GUID: TEST_REPORTING_GUID, REPORTING_ENTITY_FIELD_NAME: 'not a valid field name', STANDARD_STATE: 'ON', RAW_STATE: 'TRUE' diff --git a/tools/abel/tests/state_test.py b/tools/abel/tests/state_test.py index e3aab0076..98561bb0b 100644 --- a/tools/abel/tests/state_test.py +++ b/tools/abel/tests/state_test.py @@ -15,14 +15,15 @@ from absl.testing import absltest -from model.constants import BC_GUID from model.constants import RAW_STATE from model.constants import REPORTING_ENTITY_FIELD_NAME +from model.constants import REPORTING_ENTITY_GUID from model.constants import STANDARD_STATE from model.state import State + _TEST_STATE_DICT = { - BC_GUID: 'test_guid', + REPORTING_ENTITY_GUID: 'test_guid', REPORTING_ENTITY_FIELD_NAME: 'discharge_fan_run_command', STANDARD_STATE: 'ON', RAW_STATE: 'TRUE' @@ -34,7 +35,8 @@ class StatesTest(absltest.TestCase): def testFromDict(self): test_state = State.FromDict(_TEST_STATE_DICT) - self.assertEqual(test_state.entity_guid, _TEST_STATE_DICT[BC_GUID]) + self.assertEqual(test_state.reporting_entity_guid, + _TEST_STATE_DICT[REPORTING_ENTITY_GUID]) self.assertEqual(test_state.standard_field_name, _TEST_STATE_DICT[REPORTING_ENTITY_FIELD_NAME]) self.assertEqual(test_state.standard_state, diff --git a/tools/abel/tests/test_constants.py b/tools/abel/tests/test_constants.py index 6d390e194..44484a3a7 100644 --- a/tools/abel/tests/test_constants.py +++ b/tools/abel/tests/test_constants.py @@ -89,7 +89,7 @@ ENTITY_CODE: TEST_REPORTING_ENTITY_CODE, BC_GUID: TEST_REPORTING_GUID, NAMESPACE: TEST_NAMESPACE, - ETAG: None, + ETAG: TEST_ETAG, CLOUD_DEVICE_ID: TEST_CLOUD_DEVICE_ID, TYPE_NAME: TEST_TYPE_NAME, IS_REPORTING: 'TRUE', @@ -177,8 +177,8 @@ } TEST_STATE_DICT = { - ENTITY_CODE: TEST_REPORTING_ENTITY_CODE, - BC_GUID: TEST_REPORTING_GUID, + REPORTING_ENTITY_CODE: TEST_REPORTING_ENTITY_CODE, + REPORTING_ENTITY_GUID: TEST_REPORTING_GUID, REPORTING_ENTITY_FIELD_NAME: TEST_REPORTING_FIELD_NAME, STANDARD_STATE: 'ON', RAW_STATE: 'TRUE' diff --git a/tools/abel/validators/README.md b/tools/abel/validators/README.md index ae9b66b85..4ae1450c5 100644 --- a/tools/abel/validators/README.md +++ b/tools/abel/validators/README.md @@ -36,7 +36,7 @@ edit a user's spreadsheet. ## Google Sheets template -The [ABEL Spreadsheet Template](https://docs.google.com/spreadsheets/d/1b6IRimNS1dAtPjkNN-fk4TirnLzOiDyyUmOKP_MhMM0/copy?usp=sharing) has a strict format that must be adhered to. +The [ABEL Spreadsheet Template](https://docs.google.com/spreadsheets/d/1b6IRimNS1dAtPjkNN-fk4TirnLzOiDyyUmOKP_MhMM0/copy#gid=980240783) has a strict format that must be adhered to. Below is a definition of each table and column in the ABEL spreadsheet: - [Site](#site) @@ -156,15 +156,13 @@ device](../../../onotology/docs/building_config.md#reporting-physical-devices). The `States` tab defines values for [multi-state value](../../../ontology/docs/building_config.md#multi-state-values) fields defined in the `Entity Fields` tab. -`Entity Code` *string* **required** +`Reporting Entity Code` *string* **required** -If a field is linked to a [virtual entity](../../../ontology/docs/building_config.md#virtual-devices) and its telemetry data is reported -by some [reporting entity](../../../ontology/docs/building_config.md#reporting-physical-devices), then the `Entity Code` column must be the virtual entity code and the `reporting entity code` is the code of the -entity reporting the field's data. This may be a gateway or some other IoT connected entity. +The code or name of the entity reporting this state in its telemetry payload. This will the be the code of some [reporting entity](../../../ontology/docs/building_config.md#reporting-physical-devices). `Entity Guid` *string* -[UUID4](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_(random)) [identifier](../../../ontology/docs/building_config.md#identifiers) for an entity corresponding to the entity in the Entity Code column. +[UUID4](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_(random)) [identifier](../../../ontology/docs/building_config.md#identifiers) for an entity corresponding to the entity in the Reporting Entity Code column. `Reporting Entity Field` *string* **required** diff --git a/tools/abel/validators/spreadsheet_validator.py b/tools/abel/validators/spreadsheet_validator.py index 85689b103..ab8f6c42c 100644 --- a/tools/abel/validators/spreadsheet_validator.py +++ b/tools/abel/validators/spreadsheet_validator.py @@ -245,7 +245,7 @@ def _ValidateStatesAcrossSheets( fields = parsed_spreadsheet.get(ENTITY_FIELDS, []) for row_num, state in enumerate(states, _ROW_START_INDEX): reporting_field_name = state.get(REPORTING_ENTITY_FIELD_NAME) - entity_code = state.get(ENTITY_CODE) + entity_code = state.get(REPORTING_ENTITY_CODE) num_dependencies = 0 for field in fields: # If a state's entity code is the same as a field's entity code, then the field is not linked. Check that a state's reporting field name exists in the fields table as a standard field name. diff --git a/tools/scoring/score/constants.py b/tools/scoring/score/constants.py index 511469de9..7227e1cee 100644 --- a/tools/scoring/score/constants.py +++ b/tools/scoring/score/constants.py @@ -22,6 +22,9 @@ class FileTypes(str, Enum): """The file which is being compared against.""" SOLUTION = 'solution' + def __str__(self): + return self.value + class DimensionCategories(str, Enum): """Dimensions in this category receive `translations` diff --git a/tools/scoring/score/parse_config.py b/tools/scoring/score/parse_config.py index 8f27c32a1..b7cc6d250 100644 --- a/tools/scoring/score/parse_config.py +++ b/tools/scoring/score/parse_config.py @@ -181,8 +181,8 @@ def aggregate_translations(entity) -> List[Any]: return [] translations[cloud_device_id] = { - f'{PROPOSED}': aggregate_translations(proposed_entity), - f'{SOLUTION}': aggregate_translations(solution_entity) + PROPOSED: aggregate_translations(proposed_entity), + SOLUTION: aggregate_translations(solution_entity) } return translations diff --git a/tools/validators/instance_validator/README.md b/tools/validators/instance_validator/README.md index 4adaa2813..f5c0e7fe4 100644 --- a/tools/validators/instance_validator/README.md +++ b/tools/validators/instance_validator/README.md @@ -82,7 +82,9 @@ The `--service-account` parameter value should be a path to a service account ke `--timeout`: The timeout duration in seconds for the telemetry validation test. The default value is 600 seconds, or 10 minutes. If this time limit is exceeded before the validator receives a test pubsub message for each of the entities configured in the given instance config file, the test will fail with an error and report the entities that were not heard from. -`--report-filename`: If provided, errors from the telemetry validation test will be written to this report file. Otherwise, errors will be written to stdout. +`--report-filename`: If provided, errors from the telemetry validation test will be written to this report file. Otherwise, errors will be written to the console. + +Running telemetry validation will also output a machine-readable log of the validation performed on a set of devices. This log will be output as `telemetry_validation_log.json` in the current working directory. ### Instance Validator Workflow diff --git a/tools/validators/instance_validator/tests/entity_instance_test.py b/tools/validators/instance_validator/tests/entity_instance_test.py index 13c9a1cab..6ccdf8fa5 100644 --- a/tools/validators/instance_validator/tests/entity_instance_test.py +++ b/tools/validators/instance_validator/tests/entity_instance_test.py @@ -81,20 +81,26 @@ class EntityInstanceTest(absltest.TestCase): def setUpClass(cls): super(EntityInstanceTest, cls).setUpClass() cls.config_universe = generate_universe.BuildUniverse( - use_simplified_universe=True) + use_simplified_universe=True + ) cls.init_validator = entity_instance.InstanceValidator( - cls.config_universe, _INIT_CFG) + cls.config_universe, _INIT_CFG + ) cls.update_validator = entity_instance.InstanceValidator( - cls.config_universe, _UPDATE_CFG) + cls.config_universe, _UPDATE_CFG + ) @mock.patch.object( - entity_instance.InstanceValidator, 'Validate', return_value=True) + entity_instance.InstanceValidator, 'Validate', return_value=True + ) @mock.patch.object( - entity_instance.GraphValidator, 'Validate', return_value=True) + entity_instance.GraphValidator, 'Validate', return_value=True + ) @mock.patch.object(entity_instance, 'EntityInstance') def testCombinedChecksInstanceAndGraph(self, mock_entity, mock_gv, mock_iv): - validator = entity_instance.CombinationValidator(self.config_universe, - _UPDATE_CFG, {}) + validator = entity_instance.CombinationValidator( + self.config_universe, _UPDATE_CFG, {} + ) self.assertTrue(validator.Validate(mock_entity)) # Add False to mock assertion for is_udmi argument @@ -107,7 +113,8 @@ def testInstance_ValidEtagOnUpdate_Success(self): guid='ENTITY-GUID', code='ENTITY-NAME', etag='a12345', - update_mask=['connections']) + update_mask=['connections'] + ) self.assertTrue(self.update_validator.Validate(valid_instance)) @@ -116,7 +123,8 @@ def testInstance_InValidEtagOnUpdate_Fails(self): _UPDATE, guid='ENTITY-GUID', code='ENTITY-NAME', - update_mask=['connections']) + update_mask=['connections'] + ) self.assertFalse(self.update_validator.Validate(invalid_instance)) @@ -128,7 +136,8 @@ def testInstance_ValidType_Success(self): namespace='FACILITIES', type_name='BUILDING', etag='a12345', - update_mask=['connections']) + update_mask=['connections'] + ) self.assertTrue(self.update_validator.Validate(instance)) @@ -140,7 +149,8 @@ def testInstance_InvalidNamespace_Fails(self): namespace='NOT_A_NAMESPACE', type_name='BUILDING', etag='a12345', - update_mask=['connections']) + update_mask=['connections'] + ) is_valid = self.update_validator.Validate(instance) @@ -148,20 +158,22 @@ def testInstance_InvalidNamespace_Fails(self): def testInstance_InvalidEntityTypeFormat_RaisesTypeError(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', 'building_type.yaml')]) + [path.join(_TESTCASE_PATH, 'BAD', 'building_type.yaml')] + ) entity_guid = next(iter(parsed)) entity = parsed[entity_guid] try: entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) except TypeError as e: self.assertEqual(type(e), TypeError) else: self.fail(f'{TypeError} was not raised') def testInstance_RequiresEntityTypeToExistUpdate_Fails(self): - """ Test that the entity type exists. """ + """Test that the entity type exists.""" instance = entity_instance.EntityInstance( _UPDATE, guid='ENTITY-GUID', @@ -169,81 +181,108 @@ def testInstance_RequiresEntityTypeToExistUpdate_Fails(self): namespace='FACILITIES', type_name='LIGHTING/NOT_A_LAMP', etag='a12345', - update_mask=['connections']) + update_mask=['connections'] + ) self.assertFalse(self.update_validator.Validate(instance)) def testInstance_InvalidEntityNamespace_Fails(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', 'building_type_namespace.yaml')]) + [path.join(_TESTCASE_PATH, 'BAD', 'building_type_namespace.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertFalse(self.init_validator.Validate(instance)) def testInstance_InvalidUseOfAbstractType_Fails(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', 'abstract_type.yaml')]) + [path.join(_TESTCASE_PATH, 'BAD', 'abstract_type.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertFalse(self.init_validator.Validate(instance)) def testInstance_InvalidEntityType_Fails(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', 'building_type_entity.yaml')]) + [path.join(_TESTCASE_PATH, 'BAD', 'building_type_entity.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertFalse(self.init_validator.Validate(instance)) def testInstance_ValidMultipleTranslationWithFields_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'building_translation_fields.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'building_translation_fields.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertTrue(self.init_validator.Validate(instance)) def testInstance_InvalidTranslationRequiredFieldMissing_Fails(self): - parsed, default_operation = _Helper([ - path.join(_TESTCASE_PATH, 'BAD', - 'translation_with_required_field_missing.yaml') - ]) + parsed, default_operation = _Helper( + [ + path.join( + _TESTCASE_PATH, + 'BAD', + 'translation_with_required_field_missing.yaml' + ) + ] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertFalse(self.init_validator.Validate(instance)) def testInstance_InvalidPassthroughTranslationFieldMissing_Fails(self): - parsed, default_operation = _Helper([ - path.join(_TESTCASE_PATH, 'BAD', - 'translation_opt_field_marked_missing.yaml') - ]) + parsed, default_operation = _Helper( + [ + path.join( + _TESTCASE_PATH, + 'BAD', + 'translation_opt_field_marked_missing.yaml' + ) + ] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertFalse(self.init_validator.Validate(instance)) def testInstance_InvalidTranslationFieldCloudDeviceIdMissing_RaiesKeyError( - self): + self, + ): try: - _Helper([ - path.join(_TESTCASE_PATH, 'BAD', - 'translation_missing_cloud_device_id.yaml') - ]) + _Helper( + [ + path.join( + _TESTCASE_PATH, + 'BAD', + 'translation_missing_cloud_device_id.yaml' + ) + ] + ) except KeyError as e: self.assertEqual(type(e), KeyError) else: @@ -251,71 +290,93 @@ def testInstance_InvalidTranslationFieldCloudDeviceIdMissing_RaiesKeyError( def testInstance_ValidTranslation_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'translation.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'translation.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertTrue(self.init_validator.Validate(instance)) self.assertEqual(instance.cloud_device_id, 'foobar') def testInstance_ValidTranslationWithExplicitlyMissingReqField_Success(self): - """ Test that a MISSING required field is allowed. """ - parsed, default_operation = _Helper([ - path.join(_TESTCASE_PATH, 'GOOD', - 'translation_req_field_marked_missing.yaml') - ]) + """Test that a MISSING required field is allowed.""" + parsed, default_operation = _Helper( + [ + path.join( + _TESTCASE_PATH, + 'GOOD', + 'translation_req_field_marked_missing.yaml' + ) + ] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertTrue(self.init_validator.Validate(instance)) def testInstance_ValidateMissingFieldOnGatewayEntity_Success(self): - """ Test that the MISSING fields on a gateway type are allowed. """ - parsed, default_operation = _Helper([ - path.join(_TESTCASE_PATH, 'GOOD', - 'translation_missing_fields_on_gateway.yaml') - ]) + """Test that the MISSING fields on a gateway type are allowed.""" + parsed, default_operation = _Helper( + [ + path.join( + _TESTCASE_PATH, + 'GOOD', + 'translation_missing_fields_on_gateway.yaml' + ) + ] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertTrue(self.init_validator.Validate(instance)) def testInstance_ValidTranslationWithExplicityMissingOptField_Fails(self): - """ Test that a MISSING optional field is not allowed. """ + """Test that a MISSING optional field is not allowed.""" parsed, default_operation = _Helper([]) - parsed, default_operation = _Helper([ - path.join(_TESTCASE_PATH, 'BAD', - 'translation_opt_field_marked_missing.yaml') - ]) + parsed, default_operation = _Helper( + [ + path.join( + _TESTCASE_PATH, + 'BAD', + 'translation_opt_field_marked_missing.yaml' + ) + ] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, - entity, - default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertFalse(self.init_validator.Validate(instance)) def testInstance_ValidMultipleTranslationsWithIdenticalTypes_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'translation_identical.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'translation_identical.yaml')] + ) entity_iter = iter(parsed.items()) entity_1_guid, entity_1_block = next(entity_iter) entity_2_guid, entity_2_block = next(entity_iter) entity_3_guid, entity_3_block = next(entity_iter) entity_1 = entity_instance.EntityInstance.FromYaml( - entity_1_guid, entity_1_block, default_operation=default_operation) + entity_1_guid, entity_1_block, default_operation=default_operation + ) entity_2 = entity_instance.EntityInstance.FromYaml( - entity_2_guid, entity_2_block, default_operation=default_operation) + entity_2_guid, entity_2_block, default_operation=default_operation + ) entity_3 = entity_instance.EntityInstance.FromYaml( - entity_3_guid, entity_3_block, default_operation=default_operation) + entity_3_guid, entity_3_block, default_operation=default_operation + ) self.assertTrue(self.init_validator.Validate(entity_1)) self.assertTrue(self.init_validator.Validate(entity_2)) @@ -323,211 +384,267 @@ def testInstance_ValidMultipleTranslationsWithIdenticalTypes_Success(self): def testInstance_InvalidTranslationExtraField_Fails(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', 'translation_with_extra_field.yaml')]) + [path.join(_TESTCASE_PATH, 'BAD', 'translation_with_extra_field.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertFalse(self.init_validator.Validate(instance)) def testInstance_ValidTranslationUnits_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'translation_units.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'translation_units.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertTrue(self.init_validator.Validate(instance)) def testInstance_ValidTranslationUnitsAndStates_Success(self): - parsed, default_operation = _Helper([ - path.join(_TESTCASE_PATH, 'GOOD', 'translation_units_and_states.yaml') - ]) + parsed, default_operation = _Helper( + [path.join(_TESTCASE_PATH, 'GOOD', 'translation_units_and_states.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertTrue(self.init_validator.Validate(instance)) def testInstance_MultipleUnitMappings_Fails(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', 'translation_multiple_units.yaml')]) + [path.join(_TESTCASE_PATH, 'BAD', 'translation_multiple_units.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) with self.assertRaises( ValueError, - msg='There should be exactly 1 unit mapping in the translation for ' + - 'field "zone_air_temperature_sensor".'): + msg='There should be exactly 1 unit mapping in the translation for ' + + 'field "zone_air_temperature_sensor".', + ): entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) def testInstance_ValidValueRange_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'translation_value_range.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'translation_value_range.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertTrue(self.init_validator.Validate(instance)) def testInstance_ValueRangeWithNoUnits_Fails(self): - parsed, default_operation = _Helper([ - path.join(_TESTCASE_PATH, 'BAD', - 'translation_value_range_with_no_units.yaml') - ]) + parsed, default_operation = _Helper( + [ + path.join( + _TESTCASE_PATH, + 'BAD', + 'translation_value_range_with_no_units.yaml' + ) + ] + ) entity_guid, entity = next(iter(parsed.items())) with self.assertRaises( ValueError, msg='A value range cannot be provided without units in the translation ' - + 'for field "zone_air_temperature_sensor".'): + + 'for field "zone_air_temperature_sensor".' + ): entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) def testInstance_InvalidValueRangeFormat_Fails(self): - parsed, default_operation = _Helper([ - path.join(_TESTCASE_PATH, 'BAD', - 'translation_invalid_value_range_format.yaml') - ]) + parsed, default_operation = _Helper( + [ + path.join( + _TESTCASE_PATH, + 'BAD', + 'translation_invalid_value_range_format.yaml', + ) + ] + ) entity_guid, entity = next(iter(parsed.items())) with self.assertRaises( ValueError, - msg='Value range in the translation for field ' + - '"zone_air_temperature_sensor" should be formatted: ,.'): + msg='Value range in the translation for field ' + + '"zone_air_temperature_sensor" should be formatted: ,.' + ): entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) def testInstance_InvalidValueRangeOrder_Fails(self): - parsed, default_operation = _Helper([ - path.join(_TESTCASE_PATH, 'BAD', - 'translation_invalid_value_range_order.yaml') - ]) + parsed, default_operation = _Helper( + [ + path.join( + _TESTCASE_PATH, + 'BAD', + 'translation_invalid_value_range_order.yaml', + ) + ] + ) entity_guid, entity = next(iter(parsed.items())) with self.assertRaises( ValueError, - msg='Value range in the translation for field ' + - '"zone_air_temperature_sensor" should have a min value that is less ' + - 'than the max value.'): + msg='Value range in the translation for field ' + + '"zone_air_temperature_sensor" should have a min value that is less ' + + 'than the max value.' + ): entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) def testInstance_InvalidTranslationStates_Fails(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', 'translation_states.yaml')]) + [path.join(_TESTCASE_PATH, 'BAD', 'translation_states.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertFalse(self.init_validator.Validate(instance)) def testInstance_ValidTranslationStates_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'translation_states_list.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'translation_states_list.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertTrue(self.init_validator.Validate(instance)) def testInstance_InvalidTranslationStatesDuplicate_Fails(self): - parsed, default_operation = _Helper([ - path.join(_TESTCASE_PATH, 'BAD', - 'translation_states_list_with_duplicate.yaml') - ]) + parsed, default_operation = _Helper( + [ + path.join( + _TESTCASE_PATH, + 'BAD', + 'translation_states_list_with_duplicate.yaml' + ) + ] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertFalse(self.init_validator.Validate(instance)) def testInstance_InvalidLinkFields_Fails(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', 'building_links_fields.yaml')]) + [path.join(_TESTCASE_PATH, 'BAD', 'building_links_fields.yaml')] + ) entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity_parsed, default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation + ) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( - self.config_universe, _INIT_CFG, entity_instances) + self.config_universe, _INIT_CFG, entity_instances + ) self.assertFalse( - combination_validator.Validate( - entity_instances.get('ENTITY-NAME-GUID'))) + combination_validator.Validate(entity_instances.get('ENTITY-NAME-GUID')) + ) def testInstance_InvalidLinkEntityName_Fails(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', 'building_links_entity_name.yaml')]) + [path.join(_TESTCASE_PATH, 'BAD', 'building_links_entity_name.yaml')] + ) entity_instances = {} for entity_guid, entity_parsed in parsed.items(): try: entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity_parsed, default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation + ) entity_instances[entity.guid] = entity print(entity.guid) except ValueError: continue combination_validator = entity_instance.CombinationValidator( - self.config_universe, _INIT_CFG, entity_instances) + self.config_universe, _INIT_CFG, entity_instances + ) self.assertFalse( - combination_validator.Validate( - entity_instances.get('ENTITY-NAME-GUID'))) + combination_validator.Validate(entity_instances.get('ENTITY-NAME-GUID')) + ) def testInstance_InvalidLinkFieldWrong_Fails(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', 'links_wrong_link.yaml')]) + [path.join(_TESTCASE_PATH, 'BAD', 'links_wrong_link.yaml')] + ) entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity_parsed, default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation + ) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( - self.config_universe, _UPDATE, entity_instances) + self.config_universe, _UPDATE, entity_instances + ) self.assertFalse( - combination_validator.Validate( - entity_instances.get('ENTITY-NAME-GUID'))) + combination_validator.Validate(entity_instances.get('ENTITY-NAME-GUID')) + ) def testInstance_InvalidLinkFieldMissing_Fails(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', 'links_missing_field.yaml')]) + [path.join(_TESTCASE_PATH, 'BAD', 'links_missing_field.yaml')] + ) entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity_parsed, default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation + ) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( - self.config_universe, _INIT_CFG, entity_instances) + self.config_universe, _INIT_CFG, entity_instances + ) self.assertFalse( - combination_validator.Validate( - entity_instances.get('ENTITY-NAME-GUID'))) + combination_validator.Validate(entity_instances.get('ENTITY-NAME-GUID')) + ) def testInstance_ValidLinkEntityName_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'links.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'links.yaml')] + ) entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity_parsed, default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation + ) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( - self.config_universe, _INIT_CFG, entity_instances) + self.config_universe, _INIT_CFG, entity_instances + ) for _, instance in entity_instances.items(): self.assertTrue(combination_validator.Validate(instance)) @@ -535,67 +652,80 @@ def testInstance_ValidLinkEntityName_Success(self): def testInstance_ValidGoodLinkWithIncrementEntityName_Success(self): parsed, default_operation = _Helper( # KW: this one is a entity_franken-type it definitely won't make sense - [path.join(_TESTCASE_PATH, 'GOOD', 'links_increment.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'links_increment.yaml')] + ) entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity_parsed, default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation + ) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( - self.config_universe, _INIT_CFG, entity_instances) + self.config_universe, _INIT_CFG, entity_instances + ) for _, instance in entity_instances.items(): self.assertTrue(combination_validator.Validate(instance)) def testInstance_ValidLinkToPassthroughEntity_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'links_passthrough.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'links_passthrough.yaml')] + ) entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity_parsed, default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation + ) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( - self.config_universe, _INIT_CFG, entity_instances) + self.config_universe, _INIT_CFG, entity_instances + ) for _, instance in entity_instances.items(): self.assertTrue(combination_validator.Validate(instance)) def testInstance_ValidGoodGuidFormat_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'guid_format.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'guid_format.yaml')] + ) entity_instances = {} for entity_guid, entity in parsed.items(): instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) entity_instances[instance.guid] = instance combination_validator = entity_instance.CombinationValidator( - self.config_universe, _INIT_CFG, entity_instances) + self.config_universe, _INIT_CFG, entity_instances + ) for _, instance in entity_instances.items(): self.assertTrue(combination_validator.Validate(instance)) def testInstance_ValidateStates_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'translation_states.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'translation_states.yaml')] + ) entity_iter = iter(parsed.items()) entity_1_guid, entity_1_block = next(entity_iter) entity_2_guid, entity_2_block = next(entity_iter) entity_1 = entity_instance.EntityInstance.FromYaml( - entity_1_guid, entity_1_block, default_operation=default_operation) + entity_1_guid, entity_1_block, default_operation=default_operation + ) entity_2 = entity_instance.EntityInstance.FromYaml( - entity_2_guid, entity_2_block, default_operation=default_operation) + entity_2_guid, entity_2_block, default_operation=default_operation + ) self.assertTrue(self.init_validator.Validate(entity_1)) self.assertTrue(self.init_validator.Validate(entity_2)) def testInstance_GoodConnectionType_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'building_connections.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'building_connections.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) expected_connections = [ @@ -603,18 +733,23 @@ def testInstance_GoodConnectionType_Success(self): connection.Connection('CONTAINS', 'A-THIRD-ENTITY-GUID') ] instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) - - self.assertIn('connections', entity, - 'entity does not have connections when expected') - self.assertIsNotNone(self.config_universe.connection_universe, - 'universe does not have a valid connections universe') + entity_guid, entity, default_operation=default_operation + ) + + self.assertIn( + 'connections', entity, 'entity does not have connections when expected' + ) + self.assertIsNotNone( + self.config_universe.connection_universe, + 'universe does not have a valid connections universe' + ) self.assertTrue(self.init_validator.Validate(instance)) self.assertCountEqual(expected_connections, instance.connections) def testInstance_ValidConnection_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'building_connection_list.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'building_connection_list.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) expected_connections = [ @@ -622,24 +757,30 @@ def testInstance_ValidConnection_Success(self): connection.Connection('CONTAINS', 'ANOTHER-ENTITY-GUID') ] - self.assertIn('connections', entity, - 'entity does not have connections when expected') - self.assertIsNotNone(self.config_universe.connection_universe, - 'universe does not have a valid connections universe') + self.assertIn( + 'connections', entity, 'entity does not have connections when expected' + ) + self.assertIsNotNone( + self.config_universe.connection_universe, + 'universe does not have a valid connections universe' + ) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertTrue(self.init_validator.Validate(instance)) self.assertCountEqual(expected_connections, instance.connections) def testInstance_InvalidConnectionType_Fails(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', 'building_connections.yaml')]) + [path.join(_TESTCASE_PATH, 'BAD', 'building_connections.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) instance = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertFalse(self.init_validator.Validate(instance)) @@ -649,7 +790,8 @@ def testInstance_ValidLinkSourceField_Success(self): guid='AHU-1-GUID', code='AHU-1', links=[link.Link('CTRL-1-GUID', {'run_status': 'run_status'})], - etag='123') + etag='123' + ) self.assertTrue(self.update_validator.Validate(src_ok)) @@ -659,7 +801,8 @@ def testInstance_InvalidLinkSourceField_Fails(self): guid='AHU-1-GUID', code='AHU-1', links=[link.Link('CTRL-1-GUID', {'nonexistent_status': 'run_status'})], - etag='123') + etag='123' + ) self.assertFalse(self.update_validator.Validate(src_field)) @@ -669,10 +812,11 @@ def testGraph_OrphanLinkOkOnUpdate_Success(self): guid='AHU-1-GUID', code='AHU-1', links=[link.Link('CTRL-1-GUID', {'run_status_1': 'run_status'})], - etag='123') - validator = entity_instance.GraphValidator(self.config_universe, - _UPDATE_CFG, - {'CTRL-1-GUID': target}) + etag='123' + ) + validator = entity_instance.GraphValidator( + self.config_universe, _UPDATE_CFG, {'CTRL-1-GUID': target} + ) self.assertTrue(validator.Validate(target)) @@ -681,15 +825,18 @@ def testGraph_GoodConnection_Success(self): _ADD, guid='VAV-123-GUID', code='VAV-123', - connections=[connection.Connection('FEEDS', 'AHU-1-GUID')]) + connections=[connection.Connection('FEEDS', 'AHU-1-GUID')] + ) source = entity_instance.EntityInstance( _ADD, guid='AHU-1-GUID', code='AHU-1', - connections=[connection.Connection('FEEDS', 'AHU-1-GUID')]) + connections=[connection.Connection('FEEDS', 'AHU-1-GUID')] + ) instances = {'VAV-123-GUID': target, 'AHU-1-GUID': source} - validator = entity_instance.GraphValidator(self.config_universe, _INIT_CFG, - instances) + validator = entity_instance.GraphValidator( + self.config_universe, _INIT_CFG, instances + ) self.assertTrue(validator.Validate(target)) @@ -698,9 +845,11 @@ def testGraph_RejectsOrphanConnectionOnInit_Fails(self): _ADD, guid='VAV-123-GUID', code='VAV-123', - connections=[connection.Connection('FEEDS', 'AHU-1-GUID')]) - validator = entity_instance.GraphValidator(self.config_universe, _INIT_CFG, - {'VAV-123-GUID': target}) + connections=[connection.Connection('FEEDS', 'AHU-1-GUID')] + ) + validator = entity_instance.GraphValidator( + self.config_universe, _INIT_CFG, {'VAV-123-GUID': target} + ) self.assertFalse(validator.Validate(target)) @@ -710,28 +859,32 @@ def testGraph_DoesNotAllowOrphanConnectionOnUpdate_Fails(self): guid='VAV-123-GUID', code='VAV-123', connections=[connection.Connection('FEEDS', 'AHU-1-GUID')], - etag='123') - validator = entity_instance.GraphValidator(self.config_universe, - _UPDATE_CFG, - {'VAV-123-GUID': target}) + etag='123' + ) + validator = entity_instance.GraphValidator( + self.config_universe, _UPDATE_CFG, {'VAV-123-GUID': target} + ) self.assertFalse(validator.Validate(target)) def testInstance_EtagRequiredForUpdate_Fails(self): no_tag_update = entity_instance.EntityInstance( - _UPDATE, guid='VAV-123-GUID', code='VAV-123') + _UPDATE, guid='VAV-123-GUID', code='VAV-123' + ) self.assertFalse(self.update_validator.Validate(no_tag_update)) def testInstance_EtagNotRequiredForDelete_Success(self): no_tag_delete = entity_instance.EntityInstance( - _DELETE, guid='VAV-123-GUID', code='VAV-123') + _DELETE, guid='VAV-123-GUID', code='VAV-123' + ) self.assertTrue(self.update_validator.Validate(no_tag_delete)) def testInstance_OperationRequiredOnUpdate_Fails(self): entity = entity_instance.EntityInstance( - _UPDATE, guid='VAV-123-GUID', code='VAV-123', etag='1234') + _UPDATE, guid='VAV-123-GUID', code='VAV-123', etag='1234' + ) self.assertFalse(self.init_validator.Validate(entity)) @@ -744,19 +897,20 @@ def testInstance_MultipleUnitsNotAllowed_Fails(self): namespace='GATEWAYS', type_name='PASSTHROUGH', translation={ - 'foo_bar': - field_translation.DimensionalValue( - std_field_name='foo/bar', - unit_field_name='foo/unit', - raw_field_name='foo/raw', - unit_mapping={'standard_unit_1': 'raw_unit_1'}), - 'foo_baz': - field_translation.DimensionalValue( - std_field_name='foo/baz', - unit_field_name='bar/unit', - raw_field_name='bar/raw', - unit_mapping={'standard_unit_1': 'raw_unit_2'}), - }) + 'foo_bar': field_translation.DimensionalValue( + std_field_name='foo/bar', + unit_field_name='foo/unit', + raw_field_name='foo/raw', + unit_mapping={'standard_unit_1': 'raw_unit_1'} + ), + 'foo_baz': field_translation.DimensionalValue( + std_field_name='foo/baz', + unit_field_name='bar/unit', + raw_field_name='bar/raw', + unit_mapping={'standard_unit_1': 'raw_unit_2'} + ) + } + ) self.assertFalse(self.update_validator.Validate(entity)) @@ -768,13 +922,14 @@ def testDimensionalTranslationMissingUnitMapping_ReturnsValueError(self): code='VAV-123', etag='1234', translation={ - 'foo_bar': - field_translation.DimensionalValue( - std_field_name='foo/bar', - unit_field_name='foo/unit', - raw_field_name='foo/raw', - unit_mapping={}), - }) + 'foo_bar': field_translation.DimensionalValue( + std_field_name='foo/bar', + unit_field_name='foo/unit', + raw_field_name='foo/raw', + unit_mapping={} + ) + } + ) except ValueError as e: self.assertEqual(type(e), ValueError) else: @@ -789,17 +944,19 @@ def testInstance_InvalidDimensionalTranslationField_Fails(self): namespace='GATEWAYS', type_name='PASSTHROUGH', translation={ - 'UNDEFINED_UNIT': - field_translation.DimensionalValue( - std_field_name='foo/bar', - unit_field_name='foo/unit', - raw_field_name='foo/raw', - unit_mapping={'foo': 'bar'}) - }) + 'UNDEFINED_UNIT': field_translation.DimensionalValue( + std_field_name='foo/bar', + unit_field_name='foo/unit', + raw_field_name='foo/raw', + unit_mapping={'foo': 'bar'} + ) + } + ) self.assertFalse(self.update_validator.Validate(entity)) def testInstance_InvalidDimensionalTranslationFieldUnit_Fails(self): + # pylint: disable=line-too-long entity = entity_instance.EntityInstance( _UPDATE, guid='VAV-123-GUID', @@ -808,17 +965,19 @@ def testInstance_InvalidDimensionalTranslationFieldUnit_Fails(self): namespace='GATEWAYS', type_name='PASSTHROUGH', translation={ - 'return_water_temperature_sensor': - field_translation.DimensionalValue( - std_field_name='foo/bar', - unit_field_name='foo/unit', - raw_field_name='foo/raw', - unit_mapping={'INVALID_SENSOR_UNIT': 'degF'}) - }) + 'return_water_temperature_sensor': field_translation.DimensionalValue( + std_field_name='foo/bar', + unit_field_name='foo/unit', + raw_field_name='foo/raw', + unit_mapping={'INVALID_SENSOR_UNIT': 'degF'} + ) + }, + ) self.assertFalse(self.update_validator.Validate(entity)) def testInstance_ValidDimensionalTranslationField_Success(self): + # pylint: disable=line-too-long entity = entity_instance.EntityInstance( _UPDATE, guid='VAV-123-GUID', @@ -827,13 +986,14 @@ def testInstance_ValidDimensionalTranslationField_Success(self): namespace='GATEWAYS', type_name='PASSTHROUGH', translation={ - 'return_water_temperature_sensor': - field_translation.DimensionalValue( - std_field_name='foo/bar', - unit_field_name='foo/unit', - raw_field_name='foo/raw', - unit_mapping={'degrees_fahrenheit': 'degF'}) - }) + 'return_water_temperature_sensor': field_translation.DimensionalValue( + std_field_name='foo/bar', + unit_field_name='foo/unit', + raw_field_name='foo/raw', + unit_mapping={'degrees_fahrenheit': 'degF'} + ) + } + ) self.assertTrue(self.update_validator.Validate(entity)) @@ -847,12 +1007,11 @@ def testInstance_MultiStateTranslationMissingStates_RaisesValueError(self): namespace='GATEWAYS', type_name='PASSTHROUGH', translation={ - 'foo_bar': - field_translation.MultiStateValue( - std_field_name='foo/bar', - raw_field_name='foo/raw', - states={}) - }) + 'foo_bar': field_translation.MultiStateValue( + std_field_name='foo/bar', raw_field_name='foo/raw', states={} + ) + }, + ) except ValueError as e: self.assertEqual(type(e), ValueError) else: @@ -867,12 +1026,13 @@ def testInstance_MultiStateTranslationUndefinedField_Fails(self): namespace='GATEWAYS', type_name='PASSTHROUGH', translation={ - 'UNDEFINED_STATE': - field_translation.MultiStateValue( - std_field_name='foo/bar', - raw_field_name='foo/raw', - states={'foo': 'bar'}) - }) + 'UNDEFINED_STATE': field_translation.MultiStateValue( + std_field_name='foo/bar', + raw_field_name='foo/raw', + states={'foo': 'bar'} + ) + } + ) self.assertFalse(self.update_validator.Validate(entity)) @@ -885,12 +1045,13 @@ def testInstance_InvalidMultiStateTranslationFieldState_Fails(self): namespace='GATEWAYS', type_name='PASSTHROUGH', translation={ - 'exhaust_air_damper_command': - field_translation.MultiStateValue( - std_field_name='exhaust_air_damper_command', - raw_field_name='exhaust_air_damper_command', - states={'INVALID_STATE': '1'}) - }) + 'exhaust_air_damper_command': field_translation.MultiStateValue( + std_field_name='exhaust_air_damper_command', + raw_field_name='exhaust_air_damper_command', + states={'INVALID_STATE': '1'} + ) + } + ) self.assertFalse(self.update_validator.Validate(entity)) @@ -903,15 +1064,13 @@ def testInstance_ValidMultiStateTranslationField_Success(self): namespace='GATEWAYS', type_name='PASSTHROUGH', translation={ - 'exhaust_air_damper_command': - field_translation.MultiStateValue( - std_field_name='exhaust_air_damper_command', - raw_field_name='exhaust_air_damper_command', - states={ - 'OPEN': '1', - 'CLOSED': '0' - }) - }) + 'exhaust_air_damper_command': field_translation.MultiStateValue( + std_field_name='exhaust_air_damper_command', + raw_field_name='exhaust_air_damper_command', + states={'OPEN': '1', 'CLOSED': '0'} + ) + } + ) self.assertTrue(self.update_validator.Validate(entity)) @@ -924,17 +1083,19 @@ def testInstance_DimensionalValueNoUnitsExpected_Success(self): namespace='GATEWAYS', type_name='PASSTHROUGH', translation={ - 'line_powerfactor_sensor': - field_translation.DimensionalValue( - std_field_name='foo/bar', - unit_field_name='foo/unit', - raw_field_name='foo/raw', - unit_mapping={'no_units': 'no_units'}), - }) + 'line_powerfactor_sensor': field_translation.DimensionalValue( + std_field_name='foo/bar', + unit_field_name='foo/unit', + raw_field_name='foo/raw', + unit_mapping={'no_units': 'no_units'} + ) + } + ) self.assertTrue(self.update_validator.Validate(entity)) def testInstance_DimensionalValueUnitsExpected_Fails(self): + # pylint: disable=line-too-long entity = entity_instance.EntityInstance( _UPDATE, guid='VAV-123-GUID', @@ -943,19 +1104,21 @@ def testInstance_DimensionalValueUnitsExpected_Fails(self): namespace='GATEWAYS', type_name='PASSTHROUGH', translation={ - 'zone_air_cooling_temperature_setpoint': - field_translation.DimensionalValue( - std_field_name='foo/bar', - unit_field_name='foo/unit', - raw_field_name='foo/raw', - unit_mapping={'no_units': 'no_units'}), - }) + 'zone_air_cooling_temperature_setpoint': field_translation.DimensionalValue( + std_field_name='foo/bar', + unit_field_name='foo/unit', + raw_field_name='foo/raw', + unit_mapping={'no_units': 'no_units'} + ) + } + ) self.assertFalse(self.update_validator.Validate(entity)) def testValidate_EmptyCode_Fails(self): - entity = entity_instance.EntityInstance(_ADD, guid='VAV-123-GUID', - code='VAV-123') + entity = entity_instance.EntityInstance( + _ADD, guid='VAV-123-GUID', code='VAV-123' + ) self.assertFalse(self.init_validator.Validate(entity)) @@ -969,18 +1132,22 @@ def testFromYaml_EntityBlockMissingCodeAndGuid_RaisesValueError(self): entity_yaml = {} with self.assertRaises( - ValueError, msg='Entity block must contain either "code" or "guid".'): + ValueError, msg='Entity block must contain either "code" or "guid".' + ): entity_instance.EntityInstance.FromYaml( - entity_guid, entity_yaml, default_operation=_EXPORT) + entity_guid, entity_yaml, default_operation=_EXPORT + ) def testFromYaml_EntityBlockContainsCodeAndGuid_RaisesValueError(self): entity_guid = 'VAV-123-GUID' entity_yaml = {'guid': entity_guid, 'code': 'VAV-123'} with self.assertRaises( - ValueError, msg='Entity block cannot contain both "code" and "guid".'): + ValueError, msg='Entity block cannot contain both "code" and "guid".' + ): entity_instance.EntityInstance.FromYaml( - entity_guid, entity_yaml, default_operation=_EXPORT) + entity_guid, entity_yaml, default_operation=_EXPORT + ) def testFromYaml_KeyIsCode_Fails(self): # this test should now fail as entity_instance enforces entities keyed by @@ -993,7 +1160,8 @@ def testFromYaml_KeyIsCode_Fails(self): # this will raise a ValueError as entity must be keyed by guid; using # presence of code as a proxy entity_instance.EntityInstance.FromYaml( - entity_code, entity_yaml, default_operation=_EXPORT) + entity_code, entity_yaml, default_operation=_EXPORT + ) def testFromYaml_KeyIsGuid_Success(self): entity_code = 'VAV-123' @@ -1001,7 +1169,8 @@ def testFromYaml_KeyIsGuid_Success(self): entity_yaml = {'code': entity_code} entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity_yaml, default_operation=_EXPORT) + entity_guid, entity_yaml, default_operation=_EXPORT + ) self.assertEqual(entity.guid, entity_guid) self.assertEqual(entity.code, entity_code) @@ -1014,7 +1183,8 @@ def testValidate_RequiresGuidOnAdd_Fails(self): namespace='FACILITIES', type_name='BUILDING', etag='a12345', - update_mask=['connections']) + update_mask=['connections'] + ) self.assertFalse(self.update_validator.Validate(instance)) @@ -1026,74 +1196,96 @@ def testValidate_RequiresGuidOnUpdate_Fails(self): namespace='FACILITIES', type_name='BUILDING', etag='a12345', - update_mask=['connections']) + update_mask=['connections'] + ) self.assertFalse(self.update_validator.Validate(instance)) def testValidate_UpdateEntityTypeOnly_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'update_entity_type_only.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'update_entity_type_only.yaml')] + ) entity_guid, entity_parsed = next(iter(parsed.items())) entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity_parsed, default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation + ) self.assertTrue(self.update_validator.Validate(entity)) def testValidate_UpdateEntityTypeAndTranslations_Success(self): - parsed, default_operation = _Helper([ - path.join(_TESTCASE_PATH, 'GOOD', - 'update_entity_type_and_translations.yaml') - ]) + parsed, default_operation = _Helper( + [ + path.join( + _TESTCASE_PATH, + 'GOOD', + 'update_entity_type_and_translations.yaml' + ) + ] + ) entity_guid, entity_parsed = next(iter(parsed.items())) entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity_parsed, default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation + ) self.assertTrue(self.update_validator.Validate(entity)) def testValidate_UpdateEntityType_Fails(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', 'update_entity_type.yaml')]) + [path.join(_TESTCASE_PATH, 'BAD', 'update_entity_type.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertFalse(self.update_validator.Validate(entity)) def testValidate_UpdateEntityClearType_Fails(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'BAD', 'update_entity_clear_type.yaml')]) + [path.join(_TESTCASE_PATH, 'BAD', 'update_entity_clear_type.yaml')] + ) entity_guid, entity = next(iter(parsed.items())) entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity, default_operation=default_operation) + entity_guid, entity, default_operation=default_operation + ) self.assertFalse(self.update_validator.Validate(entity)) def testValidate_GoodUpdateOperationDefaultExport_Success(self): - parsed, default_operation = _Helper([ - path.join(_TESTCASE_PATH, 'GOOD', - 'update_no_operation_default_export.yaml') - ]) + parsed, default_operation = _Helper( + [ + path.join( + _TESTCASE_PATH, + 'GOOD', + 'update_no_operation_default_export.yaml' + ) + ] + ) entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity_parsed, default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation + ) entity_instances[entity_guid] = entity combination_validator = entity_instance.CombinationValidator( - self.config_universe, _UPDATE_CFG, entity_instances) + self.config_universe, _UPDATE_CFG, entity_instances + ) self.assertTrue( - combination_validator.Validate( - entity_instances['PHYSICAL-ENTITY-GUID'])) + combination_validator.Validate(entity_instances['PHYSICAL-ENTITY-GUID']) + ) self.assertEqual(entity_instances['VIRTUAL-ENTITY-GUID'].operation, _UPDATE) self.assertTrue( - combination_validator.Validate(entity_instances['VIRTUAL-ENTITY-GUID'])) - self.assertEqual(entity_instances['PHYSICAL-ENTITY-GUID'].operation, - _EXPORT) + combination_validator.Validate(entity_instances['VIRTUAL-ENTITY-GUID']) + ) + self.assertEqual( + entity_instances['PHYSICAL-ENTITY-GUID'].operation, _EXPORT + ) def testValidate_UpdateCloudDeviceID_Fails(self): instance = entity_instance.EntityInstance( @@ -1104,24 +1296,29 @@ def testValidate_UpdateCloudDeviceID_Fails(self): type_name='BUILDING', etag='a12345', cloud_device_id='CLOUD-DEVICE-ID', - update_mask=['cloud_device_id']) + update_mask=['cloud_device_id'] + ) self.assertFalse(self.update_validator.Validate(instance)) def testValidate_GoodStatesCaseSensitivity_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'states_case_sensitive.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'states_case_sensitive.yaml')] + ) entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity_parsed, default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation + ) entity_instances[entity_guid] = entity combination_validator = entity_instance.CombinationValidator( - self.config_universe, _INIT_CFG, entity_instances) + self.config_universe, _INIT_CFG, entity_instances + ) self.assertTrue( - combination_validator.Validate(entity_instances['FC2-1-1-GUID'])) + combination_validator.Validate(entity_instances['FC2-1-1-GUID']) + ) def testValidate_BadStatesCaseSensitivity_Failure(self): # The example states_case_insensitive.yaml is used in instance validator and @@ -1129,30 +1326,37 @@ def testValidate_BadStatesCaseSensitivity_Failure(self): # however, case-sensitivity is enforced between concrete and ontology # specifications parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'states_case_insensitive.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'states_case_insensitive.yaml')] + ) entity_instances = {} for entity_guid, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( - entity_guid, entity_parsed, default_operation=default_operation) + entity_guid, entity_parsed, default_operation=default_operation + ) entity_instances[entity_guid] = entity combination_validator = entity_instance.CombinationValidator( - self.config_universe, _INIT_CFG, entity_instances) + self.config_universe, _INIT_CFG, entity_instances + ) self.assertFalse( - combination_validator.Validate(entity_instances['FC2-1-1-GUID'])) + combination_validator.Validate(entity_instances['FC2-1-1-GUID']) + ) def testValidate_BuildingConfigEntityWithId_Success(self): parsed, default_operation = _Helper( - [path.join(_TESTCASE_PATH, 'GOOD', 'bc_entity_with_id.yaml')]) + [path.join(_TESTCASE_PATH, 'GOOD', 'bc_entity_with_id.yaml')] + ) entity_iter = iter(parsed.items()) entity_1_guid, entity_1_block = next(entity_iter) entity_2_guid, entity_2_block = next(entity_iter) entity_1 = entity_instance.EntityInstance.FromYaml( - entity_1_guid, entity_1_block, default_operation=default_operation) + entity_1_guid, entity_1_block, default_operation=default_operation + ) entity_2 = entity_instance.EntityInstance.FromYaml( - entity_2_guid, entity_2_block, default_operation=default_operation) + entity_2_guid, entity_2_block, default_operation=default_operation + ) self.assertTrue(self.init_validator.Validate(entity_1)) self.assertFalse(entity_instance.IsEntityIdPresent(entity_1)) @@ -1160,7 +1364,8 @@ def testValidate_BuildingConfigEntityWithId_Success(self): self.assertTrue(entity_instance.IsEntityIdPresent(entity_2)) self.assertEqual( entity_2.entity_id, - parsed['US-SEA-BLDG1-GUID'].get(instance_parser.ENTITY_ID_KEY)) + parsed['US-SEA-BLDG1-GUID'].get(instance_parser.ENTITY_ID_KEY), + ) if __name__ == '__main__': diff --git a/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_missing_fields_on_gateway.yaml b/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_missing_fields_on_gateway.yaml index e8a70ac28..14f14f30e 100644 --- a/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_missing_fields_on_gateway.yaml +++ b/tools/validators/instance_validator/tests/fake_instances/GOOD/translation_missing_fields_on_gateway.yaml @@ -15,4 +15,4 @@ gateway-guid: values: volts: V discharge_fan_run_status: MISSING - code: TEST-GATEWAY + code: TEST-GATEWAY \ No newline at end of file diff --git a/tools/validators/instance_validator/tests/handler_test.py b/tools/validators/instance_validator/tests/handler_test.py index 245498eaa..baccdc96e 100644 --- a/tools/validators/instance_validator/tests/handler_test.py +++ b/tools/validators/instance_validator/tests/handler_test.py @@ -88,10 +88,11 @@ def testValidateReportFileNotEmpty(self): self.assertGreater(report_size, 0) def testValidateOneBuildingExistFails(self): - """ Check that a config without a building is found to be invalid. """ + """Check that a config without a building is found to be invalid.""" input_file = os.path.join(_TESTCASE_PATH, 'BAD', 'missing_building.yaml') config_universe = generate_universe.BuildUniverse( - use_simplified_universe=True) + use_simplified_universe=True + ) entities, config_mode = _Deserialize([input_file]) helper = handler.EntityHelper(config_universe) @@ -120,9 +121,10 @@ def testTelemetryArgsBothSetSuccess(self, mock_subscriber, mock_validator): [mock.call('a', 'file'), mock.call().Listen(mock.ANY)]) # TODO(berkoben): Make this assert stricter - mock_validator.assert_has_calls( - [mock.call(mock.ANY, mock.ANY, mock.ANY, mock.ANY), - mock.call().StartTimer()]) + mock_validator.assert_has_calls([ + mock.call(mock.ANY, mock.ANY, mock.ANY, mock.ANY), + mock.call().StartTimer(), + ]) except SystemExit: self.fail('ValidationHelper:Validate raised ExceptionType unexpectedly!') diff --git a/tools/validators/instance_validator/tests/message_filters_test.py b/tools/validators/instance_validator/tests/message_filters_test.py index cc6d8e527..a01040d1a 100644 --- a/tools/validators/instance_validator/tests/message_filters_test.py +++ b/tools/validators/instance_validator/tests/message_filters_test.py @@ -11,14 +11,15 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -"""Tests tools.validators.instance_validator.message_filters""" +"""Tests tools.validators.instance_validator.message_filters.""" from __future__ import absolute_import from absl.testing import absltest from validate import message_filters + class MessageFilterTests(absltest.TestCase): - """Tests""" + """Tests for Message Filter module.""" def testTelemetryWithEmptyMessage(self): self.assertFalse(message_filters.Udmi.telemetry({})) @@ -35,5 +36,6 @@ def testTelemetryWithStatePointset(self): attrs = {'subFolder': 'pointset', 'subType': 'state'} self.assertFalse(message_filters.Udmi.telemetry(attrs)) + if __name__ == '__main__': absltest.main() diff --git a/tools/validators/instance_validator/tests/subscriber_test.py b/tools/validators/instance_validator/tests/subscriber_test.py new file mode 100644 index 000000000..a72880dc6 --- /dev/null +++ b/tools/validators/instance_validator/tests/subscriber_test.py @@ -0,0 +1,40 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Tests tools.validators.instance_validator.instance_validator.""" +from unittest import mock +from absl.testing import absltest +from validate import subscriber + +FAKE_SUBSCRIPTION_NAME = 'fake/subscription' +mock_callback = mock.Mock() + + +class SubscriberTest(absltest.TestCase): + + def setUp(self): + super().setUp() + self.subscriber = subscriber.Subscriber(FAKE_SUBSCRIPTION_NAME) + + @mock.patch.object(subscriber, 'auth') + @mock.patch.object(subscriber, 'pubsub_v1') + def test_listen_no_service_account(self, test_pubsub, test_auth): + test_auth.default.return_value = ('fake_credentials', 'fake_project_id') + test_pubsub.SubscriberClient.return_value = None + with self.assertRaises(AttributeError): + self.subscriber.Listen(callback=mock_callback) + test_auth.default.assert_called_once() + + +if __name__ == '__main__': + absltest.main() diff --git a/tools/validators/instance_validator/tests/telemetry_validator_report_test.py b/tools/validators/instance_validator/tests/telemetry_validator_report_test.py new file mode 100644 index 000000000..90b8ced05 --- /dev/null +++ b/tools/validators/instance_validator/tests/telemetry_validator_report_test.py @@ -0,0 +1,241 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Tests for telemetry_validator_report.py.""" + +import datetime +from unittest import mock + +from absl.testing import absltest + +from validate import telemetry_validation_report as tvr +from validate.constants import ENTITY_CODE +from validate.constants import ENTITY_GUID +from validate.constants import ERROR_DEVICES +from validate.constants import EXPECTED_DEVICES +from validate.constants import EXPECTED_POINTS +from validate.constants import EXTRA_DEVICES +from validate.constants import EXTRA_POINTS +from validate.constants import INVALID_DIMENSIONAL_VALUES +from validate.constants import MESSAGE_TIMESTAMP +from validate.constants import MESSAGE_VERSION +from validate.constants import MISSING_DEVICES +from validate.constants import MISSING_POINTS +from validate.constants import MISSING_PRESENT_VALUES +from validate.constants import REPORT_TIMESTAMP +from validate.constants import TELEMETRY_MESSAGE_ERRORS +from validate.constants import TELEMETRY_MESSAGE_WARNINGS +from validate.constants import TIMESTAMP_FORMAT +from validate.constants import UNMAPPED_STATES + + +TEST_GUID = 'b93304dc-1dce-4f8b-8f69-8e34b93fa69c' +TEST_CODE = 'ABC_123' +TEST_TIMESTAMP = 'test_timestamp' + + +# TODO: (b/263799046) Refactor re-used testing variables. +class TelemetryValidatorReportTest(absltest.TestCase): + + @mock.patch.object(tvr, 'datetime') + def testGenerateReport(self, mock_datetime): + mock_datetime.datetime.now().strftime.return_value = TEST_TIMESTAMP + expected_points = [ + tvr.TelemetryPoint( + point_name='return_water_temperature_sensor', present_value=100.0 + ), + tvr.TelemetryPoint( + point_name='supply_water_temperature_sensor', present_value=200.0 + ), + ] + missing_point = tvr.TelemetryPoint( + point_name='run_command', present_value=True + ) + extra_point_1 = tvr.TelemetryPoint( + point_name='return_water_temperature_setpoint', present_value=100.0 + ) + extra_point_2 = tvr.TelemetryPoint( + point_name='supply_water_temperature_setpoint', present_value=200.0 + ) + error_device = tvr.TelemetryMessageValidationBlock( + guid='22d390ef-de1f-4cba-acee-ecf0f697fd2f', + code='DEVICE_5', + version=1, + timestamp=TEST_TIMESTAMP, + expected_points=expected_points + ) + error_device.AddMissingPoint(missing_point) + error_device.AddExtraPoint(extra_point_1) + error_device.AddExtraPoint(extra_point_2) + expected_devices = { + '633c8617-635f-4ee0-86df-78a996027ca1': 'DEVICE_1', + '74dcafa4-6cfa-47ac-a127-0697f9b72005': 'DEVICE_2', + '22d390ef-de1f-4cba-acee-ecf0f697fd2f': 'DEVICE_5', + } + extra_devices = {'e2e2918b-49a9-4921-a3a5-071c80629d87': 'DEVICE_3'} + missing_devices = {'74dcafa4-6cfa-47ac-a127-0697f9b72005': 'DEVICE_2'} + error_devices = [error_device] + + telemetry_validation_report = tvr.TelemetryValidationReport( + expected_devices=expected_devices, + extra_devices=extra_devices, + missing_devices=missing_devices, + error_devices=error_devices, + ) + + expected_validation_report_json = { + REPORT_TIMESTAMP: TEST_TIMESTAMP, + EXPECTED_DEVICES: expected_devices, + EXTRA_DEVICES: extra_devices, + MISSING_DEVICES: missing_devices, + ERROR_DEVICES: [ + error_device.CreateJsonReportBlock() + for error_device in error_devices + ], + } + + result_validation_report_json = telemetry_validation_report.GenerateReport() + + self.assertEqual( + expected_validation_report_json, result_validation_report_json + ) + + +class TelemetryMessageValidationBlockTest(absltest.TestCase): + + def testInit(self): + expected_points = [ + tvr.TelemetryPoint( + point_name='return_water_temperature_sensor', present_value=100.0 + ), + tvr.TelemetryPoint( + point_name='supply_water_temperature_sensor', present_value=200.0 + ) + ] + test_validation_block = tvr.TelemetryMessageValidationBlock( + guid=TEST_GUID, + code=TEST_CODE, + version=1, + timestamp=datetime.datetime.now(tz=datetime.timezone.utc).strftime( + TIMESTAMP_FORMAT + ), + expected_points=expected_points + ) + + self.assertEqual(test_validation_block.guid, TEST_GUID) + self.assertEqual(test_validation_block.code, TEST_CODE) + self.assertEqual(test_validation_block.version, 1) + self.assertEqual(test_validation_block.expected_points, expected_points) + + def testJsonReportBlockStringFormat(self): + expected_points = [ + tvr.TelemetryPoint( + point_name='return_water_temperature_sensor', present_value=100.0 + ), + tvr.TelemetryPoint( + point_name='supply_water_temperature_sensor', present_value=200.0 + ), + ] + missing_point = tvr.TelemetryPoint( + point_name='run_command', present_value=True + ) + extra_point_1 = tvr.TelemetryPoint( + point_name='return_water_temperature_setpoint', present_value=100.0 + ) + extra_point_2 = tvr.TelemetryPoint( + point_name='supply_water_temperature_setpoint', present_value=200.0 + ) + + expected_json_dict = { + MESSAGE_TIMESTAMP: TEST_TIMESTAMP, + MESSAGE_VERSION: 1, + ENTITY_CODE: TEST_CODE, + ENTITY_GUID: TEST_GUID, + EXPECTED_POINTS: { + 'return_water_temperature_sensor': {'present_value': 100.0}, + 'supply_water_temperature_sensor': {'present_value': 200.0} + }, + TELEMETRY_MESSAGE_ERRORS: { + MISSING_POINTS: {'run_command': {'present_value': True}}, + MISSING_PRESENT_VALUES: {}, + INVALID_DIMENSIONAL_VALUES: {} + }, + TELEMETRY_MESSAGE_WARNINGS: { + EXTRA_POINTS: { + 'return_water_temperature_setpoint': {'present_value': 100.0}, + 'supply_water_temperature_setpoint': {'present_value': 200.0}, + }, + UNMAPPED_STATES: {} + } + } + + test_validation_block = tvr.TelemetryMessageValidationBlock( + guid=TEST_GUID, + code=TEST_CODE, + version=1, + timestamp=TEST_TIMESTAMP, + expected_points=expected_points + ) + test_validation_block.AddMissingPoint(missing_point) + test_validation_block.AddExtraPoint(extra_point_1) + test_validation_block.AddExtraPoint(extra_point_2) + + result_json_dict = test_validation_block.CreateJsonReportBlock() + + self.assertEqual(expected_json_dict, result_json_dict) + + def testMissingTimetsampAndVersion(self): + expected_points = [ + tvr.TelemetryPoint( + point_name='return_water_temperature_sensor', present_value=100.0 + ), + tvr.TelemetryPoint( + point_name='supply_water_temperature_sensor', present_value=200.0 + ), + ] + test_validation_block = tvr.TelemetryMessageValidationBlock( + guid=TEST_GUID, + code=TEST_CODE, + expected_points=expected_points + ) + + self.assertEqual(test_validation_block.guid, TEST_GUID) + self.assertEqual(test_validation_block.code, TEST_CODE) + self.assertIsNone(test_validation_block.version) + self.assertIsNone(test_validation_block.timestamp) + self.assertEqual(test_validation_block.expected_points, expected_points) + + def testMessageBlockAddsDescription(self): + expected_points = [ + tvr.TelemetryPoint( + point_name='return_water_temperature_sensor', present_value=100.0 + ), + tvr.TelemetryPoint( + point_name='supply_water_temperature_sensor', present_value=200.0 + ) + ] + test_validation_block = tvr.TelemetryMessageValidationBlock( + guid=TEST_GUID, + code=TEST_CODE, + expected_points=expected_points, + description='test description' + ) + + self.assertEqual(test_validation_block.description, 'test description') + self.assertEqual(test_validation_block.guid, TEST_GUID) + self.assertEqual(test_validation_block.code, TEST_CODE) + self.assertEqual(test_validation_block.expected_points, expected_points) + + +if __name__ == '__main__': + absltest.main() diff --git a/tools/validators/instance_validator/tests/telemetry_validator_test.py b/tools/validators/instance_validator/tests/telemetry_validator_test.py index d6930cbde..046ecaf44 100644 --- a/tools/validators/instance_validator/tests/telemetry_validator_test.py +++ b/tools/validators/instance_validator/tests/telemetry_validator_test.py @@ -20,33 +20,38 @@ from os import path from absl.testing import absltest + from tests import test_constants from validate import entity_instance from validate import handler from validate import instance_parser -from validate import telemetry_validation_reporting as tvr from validate import telemetry_validator + _TELEMETRY_PATH = test_constants.TEST_TELEMETRY _INSTANCES_PATH = path.join(test_constants.TEST_INSTANCES, 'GOOD') -_MESSAGE_ATTRIBUTES_PATH_1 = path.join(_TELEMETRY_PATH, - 'message_attributes_CHWS_WDT-17.json') +_MESSAGE_ATTRIBUTES_PATH_1 = path.join( + _TELEMETRY_PATH, 'message_attributes_CHWS_WDT-17.json' +) with open(_MESSAGE_ATTRIBUTES_PATH_1, encoding='utf-8') as f: _MESSAGE_ATTRIBUTES_1 = json.load(f) -_MESSAGE_ATTRIBUTES_PATH_2 = path.join(_TELEMETRY_PATH, - 'message_attributes_DMP_EDM-17.json') +_MESSAGE_ATTRIBUTES_PATH_2 = path.join( + _TELEMETRY_PATH, 'message_attributes_DMP_EDM-17.json' +) with open(_MESSAGE_ATTRIBUTES_PATH_2, encoding='utf-8') as f: _MESSAGE_ATTRIBUTES_2 = json.load(f) -_MESSAGE_ATTRIBUTES_PATH_3 = path.join(_TELEMETRY_PATH, - 'message_attributes_SDC_EXT-17.json') +_MESSAGE_ATTRIBUTES_PATH_3 = path.join( + _TELEMETRY_PATH, 'message_attributes_SDC_EXT-17.json' +) with open(_MESSAGE_ATTRIBUTES_PATH_3, encoding='utf-8') as f: _MESSAGE_ATTRIBUTES_3 = json.load(f) -_MESSAGE_ATTRIBUTES_PATH_4 = path.join(_TELEMETRY_PATH, - 'message_attributes_FAN-17.json') +_MESSAGE_ATTRIBUTES_PATH_4 = path.join( + _TELEMETRY_PATH, 'message_attributes_FAN-17.json' +) with open(_MESSAGE_ATTRIBUTES_PATH_4, encoding='utf-8') as f: _MESSAGE_ATTRIBUTES_4 = json.load(f) @@ -63,68 +68,78 @@ def ack(self): with open( - path.join(_TELEMETRY_PATH, 'telemetry_good.json'), - encoding='utf-8') as file: + path.join(_TELEMETRY_PATH, 'telemetry_good.json'), encoding='utf-8' +) as file: file_contents = file.read() _MESSAGEGOOD = FakeMessage(_MESSAGE_ATTRIBUTES_1, file_contents) _MESSAGEGOOD_2 = FakeMessage(_MESSAGE_ATTRIBUTES_3, file_contents) with open( - path.join(_TELEMETRY_PATH, 'telemetry_missing_point.json'), - encoding='utf-8') as file: + path.join(_TELEMETRY_PATH, 'telemetry_missing_point.json'), encoding='utf-8' +) as file: _MESSAGE_MISSING_POINT = FakeMessage(_MESSAGE_ATTRIBUTES_1, file.read()) with open( path.join(_TELEMETRY_PATH, 'telemetry_missing_point_partial.json'), - encoding='utf-8') as file: - _MESSAGE_MISSING_GOOD_POINT_PARTIAL = FakeMessage(_MESSAGE_ATTRIBUTES_1, - file.read()) + encoding='utf-8', +) as file: + _MESSAGE_MISSING_GOOD_POINT_PARTIAL = FakeMessage( + _MESSAGE_ATTRIBUTES_1, file.read() + ) with open( path.join(_TELEMETRY_PATH, 'telemetry_missing_present_value.json'), - encoding='utf-8') as file: - _MESSAGE_MISSING_PRESENT_VALUE = FakeMessage(_MESSAGE_ATTRIBUTES_1, - file.read()) + encoding='utf-8', +) as file: + _MESSAGE_MISSING_PRESENT_VALUE = FakeMessage( + _MESSAGE_ATTRIBUTES_1, file.read() + ) with open( - path.join(_TELEMETRY_PATH, 'telemetry_invalid_state.json'), - encoding='utf-8') as file: + path.join(_TELEMETRY_PATH, 'telemetry_invalid_state.json'), encoding='utf-8' +) as file: _MESSAGE_INVALID_STATE = FakeMessage(_MESSAGE_ATTRIBUTES_2, file.read()) with open( - path.join(_TELEMETRY_PATH, 'telemetry_invalid_json.json'), - encoding='utf-8') as file: + path.join(_TELEMETRY_PATH, 'telemetry_invalid_json.json'), encoding='utf-8' +) as file: _MESSAGE_INVALID_JSON = FakeMessage(_MESSAGE_ATTRIBUTES_2, file.read()) with open( path.join(_TELEMETRY_PATH, 'telemetry_invalid_number.json'), - encoding='utf-8') as file: + encoding='utf-8', +) as file: _MESSAGE_INVALID_NUMBER = FakeMessage(_MESSAGE_ATTRIBUTES_1, file.read()) with open( path.join(_TELEMETRY_PATH, 'telemetry_invalid_number_boolean.json'), - encoding='utf-8') as file: - _MESSAGE_INVALID_NUMBER_BOOLEAN = FakeMessage(_MESSAGE_ATTRIBUTES_1, - file.read()) + encoding='utf-8', +) as file: + _MESSAGE_INVALID_NUMBER_BOOLEAN = FakeMessage( + _MESSAGE_ATTRIBUTES_1, file.read() + ) with open( path.join(_TELEMETRY_PATH, 'telemetry_multiple_errors.json'), - encoding='utf-8') as file: + encoding='utf-8', +) as file: _MESSAGE_MULTIPLE_ERRORS = FakeMessage(_MESSAGE_ATTRIBUTES_1, file.read()) with open( path.join(_TELEMETRY_PATH, 'telemetry_good_multistates.json'), - encoding='utf-8') as file: + encoding='utf-8', +) as file: _MESSAGEGOOD_MULTIPLE_STATES = FakeMessage(_MESSAGE_ATTRIBUTES_4, file.read()) with open( - path.join(_TELEMETRY_PATH, 'telemetry_string_state.json'), - encoding='utf-8') as file: + path.join(_TELEMETRY_PATH, 'telemetry_string_state.json'), encoding='utf-8' +) as file: _MESSAGE_STRING_STATES = FakeMessage(_MESSAGE_ATTRIBUTES_2, file.read()) with open( path.join(_TELEMETRY_PATH, 'telemetry_good_states_list.json'), - encoding='utf-8') as file: + encoding='utf-8', +) as file: _MESSAGEGOOD_STATES_LIST = FakeMessage(_MESSAGE_ATTRIBUTES_2, file.read()) # TODO(nkilmer): fix inconsistency between telemetry parser expecting a string, @@ -138,11 +153,16 @@ def _CreateEntityInstances(yaml_filename): default_operation = handler.GetDefaultOperation(parser.GetConfigMode()) parsed_yaml = parser.GetEntities() - return { - key: entity_instance.EntityInstance.FromYaml( - key, value, default_operation=default_operation) - for key, value in parsed_yaml.items() - } + parsed_entities = {} + for key, value in parsed_yaml.items(): + parsed_entities.update( + { + key: entity_instance.EntityInstance.FromYaml( + key, value, default_operation=default_operation + ) + } + ) + return parsed_entities # A single test entity with numeric fields. @@ -192,160 +212,116 @@ class TelemetryValidatorTest(absltest.TestCase): # telemetry_validator.TelemetryValidator({}, 1, TimeoutCallback) # threading.Timer(2, lambda: self.assertIsTrue(timeout)) - def testTelemetryValidatorGetErrorsReturnsAllErrors(self): - validator = telemetry_validator.TelemetryValidator(GOOD_ENTITIES_1, 1, - is_udmi=False, - callback=_NullCallback) - error_one = tvr.TelemetryReportPoint(GOOD_ENTITY_NAME_1, GOOD_POINT_NAME_1, - 'Test error 1', - tvr.TelemetryReportPointType.ERROR) - error_two = tvr.TelemetryReportPoint(GOOD_ENTITY_NAME_2, GOOD_POINT_NAME_2, - 'Test error 2', - tvr.TelemetryReportPointType.ERROR) - - validator.AddError(error_one) - validator.AddError(error_two) - errors = validator.GetErrors() - - self.assertIn(error_one, errors) - self.assertIn(error_two, errors) - self.assertLen(errors, 2) - def testTelemetryValidatorGetUnvalidatedEntitiesReturnsMissingEntities(self): - validator = telemetry_validator.TelemetryValidator(GOOD_ENTITIES_3_4, 1, - is_udmi=False, - callback=_NullCallback) - + validator = telemetry_validator.TelemetryValidator( + GOOD_ENTITIES_3_4, 1, is_udmi=False, callback=_NullCallback + ) validator.ValidateMessage(_MESSAGEGOOD_2) + validator.validated_entities.update({'fake_entity_code': True}) - unvalidated_entities = validator.GetUnvalidatedEntityNames() - self.assertNotIn(GOOD_ENTITY_NAME_3, unvalidated_entities) - self.assertIn(GOOD_ENTITY_NAME_4, unvalidated_entities) + unvalidated_entities = validator.GetUnvalidatedEntities() + self.assertNotIn(GOOD_ENTITY_NAME_3, unvalidated_entities.values()) + self.assertIn(GOOD_ENTITY_NAME_4, unvalidated_entities.values()) self.assertLen(unvalidated_entities, 1) + self.assertLen(validator.GetExtraEntities(), 1) - def testTelemetryValidatorIgnoresMissingPointOnPartialUpdate(self): - validator = telemetry_validator.TelemetryValidator(GOOD_ENTITIES_1, 1, - is_udmi=False, - callback=_NullCallback) + def testTelemetryValidatorGetUnvalidatedEntitiesReturnsExtraEntities(self): + validator = telemetry_validator.TelemetryValidator( + GOOD_ENTITIES_3_4, 1, is_udmi=False, callback=_NullCallback + ) + validator.ValidateMessage(_MESSAGEGOOD_2) + validator.validated_entities.update( + {'fake_entity_guid': 'fake_entity_code'} + ) + + validator.GetUnvalidatedEntities() + extra_entities = validator.GetExtraEntities() + self.assertLen(extra_entities, 1) + self.assertNotIn(GOOD_ENTITY_NAME_3, extra_entities.values()) + self.assertNotIn(GOOD_ENTITY_NAME_4, extra_entities.values()) + self.assertIn('fake_entity_code', extra_entities.values()) + + def testTelemetryValidatorIgnoresMissingPointOnPartialUpdate(self): + validator = telemetry_validator.TelemetryValidator( + GOOD_ENTITIES_1, 1, is_udmi=False, callback=_NullCallback + ) validator.ValidateMessage(_MESSAGE_MISSING_GOOD_POINT_PARTIAL) - self.assertEmpty(validator.GetErrors()) + self.assertEmpty(validator.GetInvalidMessageBlocks()) def testTelemetryValidatorDetectsMissingPoint(self): - validator = telemetry_validator.TelemetryValidator(GOOD_ENTITIES_1, 1, - is_udmi=False, - callback=_NullCallback) - + validator = telemetry_validator.TelemetryValidator( + GOOD_ENTITIES_1, 1, is_udmi=False, callback=_NullCallback + ) validator.ValidateMessage(_MESSAGE_MISSING_POINT) + error_blocks = validator.GetInvalidMessageBlocks() - error = tvr.TelemetryReportPoint(GOOD_ENTITY_NAME_1, GOOD_POINT_NAME_2, - 'Field missing from ' - 'telemetry message', - tvr.TelemetryReportPointType.ERROR) - errors = validator.GetErrors() - self.assertIn(error, errors) - self.assertLen(errors, 1) + self.assertLen(error_blocks, 1) + self.assertLen(error_blocks[0].missing_points, 1) def testTelemetryValidatorDetectsMissingPresentValue(self): - validator = telemetry_validator.TelemetryValidator(GOOD_ENTITIES_1, 1, - is_udmi=False, - callback=_NullCallback) - + validator = telemetry_validator.TelemetryValidator( + GOOD_ENTITIES_1, 1, is_udmi=False, callback=_NullCallback + ) validator.ValidateMessage(_MESSAGE_MISSING_PRESENT_VALUE) + error_blocks = validator.GetInvalidMessageBlocks() - error = tvr.TelemetryReportPoint( - GOOD_ENTITY_NAME_1, GOOD_POINT_NAME_1, - 'Missing number in telemetry message' - ': None', tvr.TelemetryReportPointType.ERROR) - - errors = validator.GetErrors() - self.assertIn(error, errors) - self.assertLen(errors, 1) + self.assertLen(error_blocks, 1) + self.assertLen(error_blocks[0].missing_present_values, 1) def testTelemetryValidatorDetectsUnmappedState(self): - validator = telemetry_validator.TelemetryValidator(GOOD_ENTITIES_2, 1, - is_udmi=False, - callback=_NullCallback) - + validator = telemetry_validator.TelemetryValidator( + GOOD_ENTITIES_2, 1, is_udmi=False, callback=_NullCallback + ) validator.ValidateMessage(_MESSAGE_INVALID_STATE) + error_blocks = validator.GetInvalidMessageBlocks() - error1 = tvr.TelemetryReportPoint( - GOOD_ENTITY_NAME_2, GOOD_POINT_NAME_3, - 'Unmapped state in telemetry message' - ': BAD_STATE', tvr.TelemetryReportPointType.ERROR) - error2 = tvr.TelemetryReportPoint(GOOD_ENTITY_NAME_2, GOOD_POINT_NAME_4, - 'Unmapped state in telemetry message: 3', - tvr.TelemetryReportPointType.ERROR) - - errors = validator.GetErrors() - self.assertIn(error1, errors) - self.assertIn(error2, errors) - self.assertLen(errors, 2) + self.assertLen(error_blocks, 1) + self.assertLen(error_blocks[0].unmapped_states, 2) def testTelemetryValidatorDetectsStringAsInvalidNumber(self): - validator = telemetry_validator.TelemetryValidator(GOOD_ENTITIES_1, 1, - is_udmi=False, - callback=_NullCallback) - + validator = telemetry_validator.TelemetryValidator( + GOOD_ENTITIES_1, 1, is_udmi=False, callback=_NullCallback + ) validator.ValidateMessage(_MESSAGE_INVALID_NUMBER) + error_blocks = validator.GetInvalidMessageBlocks() - error = tvr.TelemetryReportPoint( - GOOD_ENTITY_NAME_1, GOOD_POINT_NAME_1, - 'Invalid number in telemetry message' - ': BAD_NUMBER', tvr.TelemetryReportPointType.ERROR) - - errors = validator.GetErrors() - self.assertIn(error, errors) - self.assertLen(errors, 1) + self.assertLen(error_blocks, 1) + self.assertLen(error_blocks[0].invalid_dimensional_values, 1) def testTelemetryValidatorDetectsBooleanAsInvalidNumber(self): - validator = telemetry_validator.TelemetryValidator(GOOD_ENTITIES_1, 1, - is_udmi=False, - callback=_NullCallback) + validator = telemetry_validator.TelemetryValidator( + GOOD_ENTITIES_1, 1, is_udmi=False, callback=_NullCallback + ) validator.ValidateMessage(_MESSAGE_INVALID_NUMBER_BOOLEAN) + error_blocks = validator.GetInvalidMessageBlocks() - error = tvr.TelemetryReportPoint( - GOOD_ENTITY_NAME_1, GOOD_POINT_NAME_1, - 'Invalid number in telemetry message' - ': false', tvr.TelemetryReportPointType.ERROR) - - errors = validator.GetErrors() - self.assertIn(error, errors) - self.assertLen(errors, 1) + self.assertLen(error_blocks, 1) + self.assertLen(error_blocks[0].invalid_dimensional_values, 1) def testTelemetryValidatorDetectsMultipleErrorsInMessage(self): - validator = telemetry_validator.TelemetryValidator(GOOD_ENTITIES_1, 1, - is_udmi=False, - callback=_NullCallback) - + validator = telemetry_validator.TelemetryValidator( + GOOD_ENTITIES_1, 1, is_udmi=False, callback=_NullCallback + ) validator.ValidateMessage(_MESSAGE_MULTIPLE_ERRORS) + error_blocks = validator.GetInvalidMessageBlocks() - error_one = tvr.TelemetryReportPoint( - GOOD_ENTITY_NAME_1, GOOD_POINT_NAME_1, - 'Invalid number in telemetry message: BAD_NUMBER', - tvr.TelemetryReportPointType.ERROR) - error_two = tvr.TelemetryReportPoint( - GOOD_ENTITY_NAME_1, GOOD_POINT_NAME_2, 'Field missing from telemetry ' - 'message', tvr.TelemetryReportPointType.ERROR) - - errors = validator.GetErrors() - self.assertIn(error_one, errors) - self.assertIn(error_two, errors) - self.assertLen(errors, 2) + self.assertLen(error_blocks, 1) + self.assertLen(error_blocks[0].invalid_dimensional_values, 1) + self.assertLen(error_blocks[0].missing_points, 1) def testTelemetryValidatorCallbackWhenAllEntitiesValidated(self): - def ValidationCallback(validator): - self.assertEmpty(validator.GetErrors()) + self.assertEmpty(validator.GetInvalidMessageBlocks()) self.assertTrue(validator.AllEntitiesValidated()) validator = telemetry_validator.TelemetryValidator( @@ -354,10 +330,23 @@ def ValidationCallback(validator): validator.ValidateMessage(_MESSAGEGOOD) - def testTelemetryValidatorOnMultiStateWithBooleanSuccess(self): + def testTelemetryValidatorAddsExtraDevicesWhenValidated(self): + validator = telemetry_validator.TelemetryValidator( + GOOD_ENTITIES_2, 1, is_udmi=False, callback=_NullCallback + ) + + validator.ValidateMessage(_MESSAGE_MISSING_PRESENT_VALUE) + extra_enities = validator.GetExtraEntities() + missing_entities = validator.GetUnvalidatedEntities() + + self.assertLen(extra_enities, 1) + self.assertLen(missing_entities, 1) + self.assertIn(GOOD_ENTITY_NAME_1, extra_enities.values()) + self.assertIn(GOOD_ENTITY_NAME_2, missing_entities.values()) + def testTelemetryValidatorOnMultiStateWithBooleanSuccess(self): def ValidationCallback(validator): - self.assertEmpty(validator.GetErrors()) + self.assertEmpty(validator.GetInvalidMessageBlocks()) self.assertTrue(validator.AllEntitiesValidated()) validator = telemetry_validator.TelemetryValidator( @@ -366,9 +355,8 @@ def ValidationCallback(validator): validator.ValidateMessage(_MESSAGEGOOD_MULTIPLE_STATES) def testTelemetryValidatorOnMultiStateWithRawValueList(self): - def ValidationCallback(validator): - self.assertEmpty(validator.GetErrors()) + self.assertEmpty(validator.GetInvalidMessageBlocks()) self.assertTrue(validator.AllEntitiesValidated()) validator = telemetry_validator.TelemetryValidator( @@ -378,21 +366,19 @@ def ValidationCallback(validator): validator.ValidateMessage(_MESSAGEGOOD_STATES_LIST) def testTelemetryValidatorOnMultiStateWithStringSuccess(self): - def ValidationCallback(validator): - self.assertEmpty(validator.GetErrors()) + self.assertEmpty(validator.GetInvalidMessageBlocks()) self.assertTrue(validator.AllEntitiesValidated()) validator = telemetry_validator.TelemetryValidator( GOOD_ENTITIES_7, 1, is_udmi=False, callback=ValidationCallback ) - validator.ValidateMessage(_MESSAGE_STRING_STATES) def testInvalidJsonMessageDoesNotRaiseException(self): def ValidationCallback(validator): - self.assertEmpty(validator.GetErrors()) + self.assertEmpty(validator.GetInvalidMessageBlocks()) self.assertTrue(validator.AllEntitiesValidated()) validator = telemetry_validator.TelemetryValidator( diff --git a/tools/validators/instance_validator/validate/constants.py b/tools/validators/instance_validator/validate/constants.py index b4b94a67e..7ae0e2eac 100644 --- a/tools/validators/instance_validator/validate/constants.py +++ b/tools/validators/instance_validator/validate/constants.py @@ -31,3 +31,34 @@ # Default timeout duration for telemetry validation test DEFAULT_TIMEOUT = 600 + +# Telemetry validation constants +TIMESTAMP_FORMAT = '%Y-%m-%dT%H:%M:%SZ' + +# Report-level constants +REPORT_TIMESTAMP = 'updated' +EXTRA_DEVICES = 'extra_devices' +MISSING_DEVICES = 'missing_devices' +EXPECTED_DEVICES = 'expected_devices' +ERROR_DEVICES = 'errorDevices' + +# Device-level constants +MESSAGE_TIMESTAMP = 'timestamp' +ENTITY_GUID = 'guid' +MISSING_VERSION = 'no_version' +MISSING_TIMESTAMP = 'no_timestamp' +TELEMETRY_MESSAGE_ERRORS = 'telemetryMessageErrors' +TELEMETRY_MESSAGE_WARNINGS = 'telemetryMessageWarnings' +ENTITY_CODE = 'entityCode' +MESSAGE_VERSION = 'version' +PRESENT_VALUE_KEY = 'present_value' +EXPECTED_POINTS = 'expectedPoints' +EXTRA_POINTS = 'extraPoints' +MISSING_POINTS = 'missingPoints' +UNMAPPED_STATES = 'unmapped_states' +MISSING_PRESENT_VALUES = 'missing_present_values' +INVALID_DIMENSIONAL_VALUES = 'invalid_dimensional_values' +ERRORS_INCONSISTENT = 'content inconsistent between messages' +EXTRA_POINTS_INCONSISTENT = 'extra points inconsistent between messages' +MISSING_POINTS_INCONSISTENT = 'missing points inconsistent between messages' +MESSAGE_DESCRIPTION = 'description' diff --git a/tools/validators/instance_validator/validate/entity_instance.py b/tools/validators/instance_validator/validate/entity_instance.py index 6792c4d3d..9f047dc2c 100644 --- a/tools/validators/instance_validator/validate/entity_instance.py +++ b/tools/validators/instance_validator/validate/entity_instance.py @@ -16,11 +16,10 @@ from __future__ import annotations from __future__ import print_function -from typing import Any, Dict, List, Optional, Set, Tuple import re +from typing import Any, Dict, List, Optional, Set, Tuple import strictyaml as syaml - from validate import connection from validate import field_translation as ft_lib from validate import instance_parser as parse @@ -35,8 +34,8 @@ _CONFIG_EXPORT = parse.ConfigMode.EXPORT # udmi present value: points.$name.present_value # where name follows: [a-z][a-z0-9]*(_[a-z0-9]+)* -_UDMI_PRESENT_VALUE_REGEX = \ - r'^(points.)[a-z][a-z0-9]*(_[a-z0-9]+)*(.present_value)$' +_UDMI_PRESENT_VALUE_REGEX = ( + r'^(points.)[a-z][a-z0-9]*(_[a-z0-9]+)*(.present_value)$') _UDMI_PRESENT_VALUE_PATTERN = re.compile(_UDMI_PRESENT_VALUE_REGEX) @@ -119,14 +118,14 @@ def __init__(self, universe: pvt.ConfigUniverse, self.config_mode = config_mode self.entity_instances = entity_instances - def Validate(self, entity: EntityInstance, is_udmi: bool=False) -> bool: + def Validate(self, entity: EntityInstance, is_udmi: bool = False) -> bool: """Returns true if an entity follows all instance and graph rules. - Args: - entity: EntityInstance object to be validated against the ontology for - content and connectivity. - is_udmi: Indicate validation process under udmi specification; - bool default False. + Args: + entity: EntityInstance object to be validated against the ontology for + content and connectivity. + is_udmi: Indicate validation process under udmi specification; bool + default False. """ iv = InstanceValidator(self.universe, self.config_mode) @@ -167,15 +166,19 @@ def _ConnectionsAreValid(self, entity: EntityInstance) -> bool: for conn_inst in entity.connections: if conn_inst.source not in self.entity_instances: if self.config_mode in (_CONFIG_INIT, _CONFIG_UPDATE): - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is connected ' - f'to an entity that doesn\'t exist: {conn_inst.source}. Check ' - 'that this entity is defined.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) is connected ' + f"to an entity that doesn't exist: {conn_inst.source}. Check " + 'that this entity is defined.' + ) is_valid = False continue if self.entity_instances[ conn_inst.source].operation == parse.EntityOperation.DELETE: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is connected to ' - f'a deleted entity: {conn_inst.source}.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) is connected to ' + f'a deleted entity: {conn_inst.source}.' + ) is_valid = False return is_valid @@ -189,15 +192,19 @@ def _LinksAreValid(self, entity: EntityInstance) -> bool: for link_inst in entity.links: if link_inst.source not in self.entity_instances.keys(): if self.config_mode == _CONFIG_INIT or _CONFIG_UPDATE: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) links to an ' - f'invalid source: {link_inst.source}. Check that this source ' - 'exists.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) links to an ' + f'invalid source: {link_inst.source}. Check that this source ' + 'exists.' + ) is_valid = False continue if self.entity_instances[ link_inst.source].operation == parse.EntityOperation.DELETE: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) links to a ' - f'deleted entity: {link_inst.source}.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) links to a ' + f'deleted entity: {link_inst.source}.' + ) is_valid = False continue @@ -207,10 +214,12 @@ def _LinksAreValid(self, entity: EntityInstance) -> bool: for _, source_field in link_inst.field_map.items(): if not _FieldIsAllowed(self.universe, source_field, src_entity_type): - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines a ' - 'link field that is not valid in the ontology: ' - f'{source_field}. Confirm this field is defined in the ' - 'ontology.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines a ' + 'link field that is not valid in the ontology: ' + f'{source_field}. Confirm this field is defined in the ' + 'ontology.' + ) is_valid = False continue @@ -272,31 +281,38 @@ def _ValidateType(self, entity: EntityInstance) -> bool: return True if self.universe.GetEntityTypeNamespace(entity.namespace) is None: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is defined with an ' - f'invalid namespace: {entity.namespace}. Confirm the namespace is ' - 'defined in the ontology.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) is defined with an ' + f'invalid namespace: {entity.namespace}. Confirm the namespace is ' + 'defined in the ontology.' + ) return False entity_type = self.universe.GetEntityType(entity.namespace, entity.type_name) if entity_type is None: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is defined with an ' - f'invalid entity type: {entity.type_name} in namespace ' - f'{entity.namespace}. Confirm the type is defined in the ontology, ' - 'and in the correct namespace.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) is defined with an ' + f'invalid entity type: {entity.type_name} in namespace ' + f'{entity.namespace}. Confirm the type is defined in the ontology, ' + 'and in the correct namespace.' + ) return False elif entity_type.is_abstract: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is defined with an ' - f'abstract entity type: {entity.type_name}. Abstract types cannot ' - 'be applied to individual entity instances. Define a non-abstract ' - 'type that uses this abstract type and apply that to this ' - 'instance.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) is defined with an ' + f'abstract entity type: {entity.type_name}. Abstract types cannot ' + 'be applied to individual entity instances. Define a non-abstract ' + 'type that uses this abstract type and apply that to this ' + 'instance.' + ) return False return True - def _ValidateTranslation(self, entity: EntityInstance, is_udmi: bool = False - ) -> bool: + def _ValidateTranslation( + self, entity: EntityInstance, is_udmi: bool = False + ) -> bool: """Validate an entity's translation against the entity's type or ontology. If entity operation is ADD, this code ensures that all fields are in the @@ -325,13 +341,17 @@ def _ValidateTranslation(self, entity: EntityInstance, is_udmi: bool = False entity_type) if not qualified_field_name: if entity_type and not entity_type.allow_undefined_fields: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) translates ' - f'field "{as_written_field_name}" which is not defined on the ' - f'type "{entity.type_name}"') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) translates ' + f'field "{as_written_field_name}" which is not defined on the ' + f'type "{entity.type_name}"' + ) else: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) translates ' - f'field "{as_written_field_name}" which does not exist in the ' - 'ontology.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) translates ' + f'field "{as_written_field_name}" which does not exist in the ' + 'ontology.' + ) is_valid = False else: found_fields[qualified_field_name] = ft @@ -342,9 +362,11 @@ def _ValidateTranslation(self, entity: EntityInstance, is_udmi: bool = False unmatched = set(type_fields.keys()).difference(set(found_fields.keys())) for unmatched_name in unmatched: if not type_fields[unmatched_name].optional: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) missing field ' - f'"{unmatched_name}" which is required for assigned type ' - f'"{entity.type_name}"') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) missing field ' + f'"{unmatched_name}" which is required for assigned type ' + f'"{entity.type_name}"' + ) is_valid = False # Check that MISSING translation fields are handled properly. @@ -395,37 +417,45 @@ def _ValidateTranslation(self, entity: EntityInstance, is_udmi: bool = False if isinstance(ft, ft_lib.DimensionalValue): if is_udmi and not _UDMI_PRESENT_VALUE_PATTERN.fullmatch( - ft.raw_field_name): - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) translates ' - f'field "{ft.raw_field_name}" with a present value pattern ' - 'that does not conform to UDMI pattern ' - f'"{_UDMI_PRESENT_VALUE_REGEX}".') + ft.raw_field_name + ): + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) translates ' + f'field "{ft.raw_field_name}" with a present value pattern ' + 'that does not conform to UDMI pattern ' + f'"{_UDMI_PRESENT_VALUE_REGEX}".' + ) is_valid = False for std_unit, raw_unit in ft.unit_mapping.items(): if std_unit not in found_units: found_units[std_unit] = raw_unit continue if found_units[std_unit] != raw_unit: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' - f'multiple raw units ({raw_unit},{std_unit}) to the same ' - 'measurement type. Raw units are expected to be the same ' - 'across the device: e.g. "degrees_fahrenheit" should not ' - 'map to "deg_f" and "fahrenheit" on the same device ' - 'translation.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' + f'multiple raw units ({raw_unit},{std_unit}) to the same ' + 'measurement type. Raw units are expected to be the same ' + 'across the device: e.g. "degrees_fahrenheit" should not ' + 'map to "deg_f" and "fahrenheit" on the same device ' + 'translation.' + ) is_valid = False return is_valid - def _FieldTranslationIsValid(self, qualified_field_name: str, - ft: ft_lib.FieldTranslation, - entity: EntityInstance): + def _FieldTranslationIsValid( + self, + qualified_field_name: str, + ft: ft_lib.FieldTranslation, + entity: EntityInstance): """Returns a boolean indicating whether or not the translation is valid. Method assumes field has already been checked for existence in the ontology. Args: - qualified_field_name: a qualified field name for the field - ft: subclass of `FieldTranslation` for the field + qualified_field_name: A qualified field name for the field + ft: Subclass of `FieldTranslation` for the field + entity: Instance of EntityInstance class """ if isinstance(ft, ft_lib.UndefinedField): return True @@ -433,9 +463,11 @@ def _FieldTranslationIsValid(self, qualified_field_name: str, valid_units = self.universe.GetUnitsForMeasurement(qualified_field_name) if valid_units and set(valid_units).difference({'no_units'}): if not isinstance(ft, ft_lib.DimensionalValue): - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines field ' - f'{qualified_field_name} but does not define valid units. ' - 'Add units.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines field ' + f'{qualified_field_name} but does not define valid units. ' + 'Add units.' + ) return False if not ft.unit_mapping: @@ -461,38 +493,48 @@ def _FieldTranslationIsValid(self, qualified_field_name: str, valid_states = self.universe.GetStatesByField(qualified_field_name) if valid_states: if not isinstance(ft, ft_lib.MultiStateValue): - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines field ' - f'{qualified_field_name} without states, which are expected on ' - 'the field. Define states.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines field ' + f'{qualified_field_name} without states, which are expected on ' + 'the field. Define states.' + ) if not ft.states: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' - f'field {qualified_field_name} without states, which are ' - 'expected for this field. Define states.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' + f'field {qualified_field_name} without states, which are ' + 'expected for this field. Define states.' + ) return False is_valid = True for state, value in ft.states.items(): if state not in valid_states: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' - f'field {qualified_field_name} with an invalid state: ' - f'{state}. Allowed states are ({str(valid_states)}).') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' + f'field {qualified_field_name} with an invalid state: ' + f'{state}. Allowed states are ({str(valid_states)}).' + ) is_valid = False raw_values = value if isinstance(value, list) else [value] for raw_value in raw_values: if ft.raw_values[raw_value] != state: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' - f'field {qualified_field_name} has raw value {raw_value} ' - f'mapped to more than one state: {state} and ' - f'{ft.raw_values[raw_value]}') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' + f'field {qualified_field_name} has raw value {raw_value} ' + f'mapped to more than one state: {state} and ' + f'{ft.raw_values[raw_value]}' + ) is_valid = False return is_valid if isinstance(ft, ft_lib.MultiStateValue): - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines field ' - f'{qualified_field_name} with states, but this field is not ' - 'multi-state.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines field ' + f'{qualified_field_name} with states, but this field is not ' + 'multi-state.' + ) return False return True @@ -517,9 +559,11 @@ def _ConnectionsAreValid(self, entity: EntityInstance) -> bool: for conn_inst in entity.connections: conn_universe = self.universe.connection_universe if conn_universe and not conn_universe.IsDefined(conn_inst.ctype): - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' - f'connection {conn_inst.ctype}, which does not exist in the ' - 'ontology.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines ' + f'connection {conn_inst.ctype}, which does not exist in the ' + 'ontology.' + ) is_valid = False return is_valid @@ -543,9 +587,11 @@ def _LinksAreValid(self, entity: EntityInstance) -> bool: entity_type = self.universe.GetEntityType(entity.namespace, entity.type_name) if entity_type and entity_type.allow_undefined_fields and entity.links: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is not allowed to ' - 'be the target of links because it is defined as a passthrough ' - 'entity.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) is not allowed to ' + 'be the target of links because it is defined as a passthrough ' + 'entity.' + ) return False is_valid = True @@ -555,31 +601,35 @@ def _LinksAreValid(self, entity: EntityInstance) -> bool: qualified_tgt_field = _GetAllowedField(self.universe, target_field, entity_type) if not qualified_tgt_field: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) links to ' - f'target field {target_field} that is invalid for ' - f'link: {link_inst}') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) links to ' + f'target field {target_field} that is invalid for ' + f'link: {link_inst}' + ) is_valid = False continue qualified_src_field = _GetAllowedField(self.universe, source_field, None) if not qualified_src_field: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) links to ' - f'source field {source_field} that is invalid for ' - f'link: {link_inst}') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) links to ' + f'source field {source_field} that is invalid for ' + f'link: {link_inst}' + ) is_valid = False continue found_fields.add(qualified_tgt_field) - if not self._LinkUnitsMatch(qualified_src_field, - qualified_tgt_field, - entity): + if not self._LinkUnitsMatch( + qualified_src_field, qualified_tgt_field, entity + ): is_valid = False continue - if not self._LinkStatesMatch(qualified_src_field, - qualified_tgt_field, - entity): + if not self._LinkStatesMatch( + qualified_src_field, qualified_tgt_field, entity + ): is_valid = False continue @@ -591,33 +641,35 @@ def _LinksAreValid(self, entity: EntityInstance) -> bool: return is_valid - def _LinkUnitsMatch(self, - source_field: str, - target_field: str, - entity: EntityInstance) -> bool: + def _LinkUnitsMatch( + self, source_field: str, target_field: str, entity: EntityInstance + ) -> bool: """Validates that units match between linked source and target fields.""" source_units = self.universe.GetUnitsForMeasurement(source_field) target_units = self.universe.GetUnitsForMeasurement(target_field) if source_units != target_units: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) links target field ' - f'{target_field} to source field {source_field} but the units ' - 'do not match between the fields.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) links target field ' + f'{target_field} to source field {source_field} but the units ' + 'do not match between the fields.' + ) return False return True - def _LinkStatesMatch(self, - source_field: str, - target_field: str, - entity: EntityInstance) -> bool: + def _LinkStatesMatch( + self, source_field: str, target_field: str, entity: EntityInstance + ) -> bool: """Validates that states match between linked source and target fields.""" source_states = self.universe.GetStatesByField(source_field) target_states = self.universe.GetStatesByField(target_field) if source_states != target_states: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) links target field ' - f'{target_field} to source field {source_field} but the states do ' - 'not match between the fields.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) links target field ' + f'{target_field} to source field {source_field} but the states do ' + 'not match between the fields.' + ) return False return True @@ -633,63 +685,81 @@ def Validate(self, entity: EntityInstance, is_udmi: bool = False) -> bool: """ if IsEntityIdPresent(entity): - print(f'[WARNING]\tEntity {entity.guid} ({entity.code}) defines "id" but ' - 'this will be deprecated in future releases. Please review ' - 'https://github.com/google/digitalbuildings/' - 'ontology/docs/building_config.md for more ' - 'information.') + print( + f'[WARNING]\tEntity {entity.guid} ({entity.code}) defines "id" but ' + 'this will be deprecated in future releases. Please review ' + 'https://github.com/google/digitalbuildings/' + 'ontology/docs/building_config.md for more ' + 'information.' + ) is_valid = True if entity.update_mask is not None: if entity.operation != parse.EntityOperation.UPDATE: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) requires update ' - 'mask for update operations.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) requires update ' + 'mask for update operations.' + ) is_valid = False if entity.type_name is None: if parse.ENTITY_TYPE_KEY in entity.update_mask: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) must define a ' - 'clear Entity Type if performing an update.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) must define a ' + 'clear Entity Type if performing an update.' + ) is_valid = False if parse.ENTITY_CLOUD_DEVICE_ID_KEY in entity.update_mask: print('Update to Cloud Device ID not allowed') is_valid = False if not entity.guid: - print(f'[ERROR]\tEntity ({entity.code}) is missing a GUID. This must be ' - 'provided.') + print( + f'[ERROR]\tEntity ({entity.code}) is missing a GUID. This must be ' + 'provided.' + ) is_valid = False if not entity.code and entity.operation != parse.EntityOperation.DELETE: - print(f'[ERROR]\tEntity {entity.guid} is missing a code. This must be ' - 'provided.') + print( + f'[ERROR]\tEntity {entity.guid} is missing a code. This must be ' + 'provided.' + ) is_valid = False if (self.config_mode == _CONFIG_INIT and entity.operation != parse.EntityOperation.ADD): - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines operation ' - f'{entity.operation} that is not valid. Only ADD operation is ' - 'allowed in INITIALIZE mode.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) defines operation ' + f'{entity.operation} that is not valid. Only ADD operation is ' + 'allowed in INITIALIZE mode.' + ) return False if entity.operation == parse.EntityOperation.DELETE: return is_valid if self.config_mode in (_CONFIG_EXPORT, _CONFIG_UPDATE) and not entity.etag: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is missing an ' - 'etag, which is required for EXPORT or UPDATE operations.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) is missing an ' + 'etag, which is required for EXPORT or UPDATE operations.' + ) is_valid = False if entity.namespace is None: if entity.operation == parse.EntityOperation.ADD: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is missing a ' - 'namespace for its type.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) is missing a ' + 'namespace for its type.' + ) is_valid = False if entity.type_name is None: if entity.operation == parse.EntityOperation.ADD: - print(f'[ERROR]\tEntity {entity.guid} ({entity.code}) is missing a ' - 'type definition.') + print( + f'[ERROR]\tEntity {entity.guid} ({entity.code}) is missing a ' + 'type definition.' + ) is_valid = False else: @@ -724,13 +794,16 @@ def _ParseTypeString(type_str: syaml.YAML) -> Tuple[str, str]: type_parse = type_str.split('/') if len(type_parse) == 1: - raise TypeError(f'Namespace is malformed for type: {type_str}. Proper ' - 'format is NAMESPACE/TYPE_NAME.' - ) + raise TypeError( + f'Namespace is malformed for type: {type_str}. Proper ' + 'format is NAMESPACE/TYPE_NAME.' + ) if len(type_parse) > 2: - raise TypeError(f'Type is improperly formatted: {type_str}. Proper ' - 'formatting is: NAMESPACE/TYPE_NAME') + raise TypeError( + f'Type is improperly formatted: {type_str}. Proper ' + 'formatting is: NAMESPACE/TYPE_NAME' + ) return type_parse[0], type_parse[1] @@ -756,9 +829,9 @@ def _ParseTranslation( for std_field_name, ft in translation_body.items(): if isinstance(ft, str): if not ft: - raise ValueError(f'Translation details are empty for field: ' - f'{std_field_name}.' - ) + raise ValueError( + f'Translation details are empty for field: {std_field_name}.' + ) elif ft == ft_lib.PresenceMode.MISSING.value: translation[std_field_name] = ft_lib.UndefinedField(std_field_name) continue @@ -770,8 +843,9 @@ def _ParseTranslation( if parse.STATES_KEY in ft: if ft_object: - raise ValueError('States and units are not allowed in the ' - 'same field translation.') + raise ValueError( + 'States and units are not allowed in the same field translation.' + ) ft_object = ft_lib.MultiStateValue(std_field_name, raw_field_name, ft[parse.STATES_KEY]) @@ -959,8 +1033,9 @@ def FromYaml(cls, entity_key: str, entity_yaml: Dict[str, Any], # validate that operation is UPDATE if update_mask is present if parse.EntityOperation.FromString(entity_yaml[ parse.ENTITY_OPERATION_KEY]) != parse.EntityOperation.UPDATE: - raise ValueError('Only specify UPDATE operation when ' - '"update_mask" is present.') + raise ValueError( + 'Only specify UPDATE operation when "update_mask" is present.' + ) update_mask = entity_yaml[parse.UPDATE_MASK_KEY] operation = parse.EntityOperation.UPDATE # case 2: update_mask implies update operation @@ -990,14 +1065,17 @@ def FromYaml(cls, entity_key: str, entity_yaml: Dict[str, Any], # as proxy that the block is keyed by code raise ValueError('Entity block must be keyed by a guid. Please adjust.') else: - raise ValueError('Keys "code" and "guid" missing from entity block. ' - 'Fix this by adding one of these keys to the entity ' - 'definition.') + raise ValueError( + 'Keys "code" and "guid" missing from entity block. ' + 'Fix this by adding one of these keys to the entity ' + 'definition.' + ) if operation in [parse.EntityOperation.ADD, parse.EntityOperation.UPDATE]: if not guid: - raise ValueError('Entity block must contain "guid" for ' - 'ADD/UPDATE operations.') + raise ValueError( + 'Entity block must contain "guid" for ADD/UPDATE operations.' + ) namespace, type_name = None, None if parse.ENTITY_TYPE_KEY in entity_yaml: diff --git a/tools/validators/instance_validator/validate/generate_universe.py b/tools/validators/instance_validator/validate/generate_universe.py index ee3835993..c61358eb1 100644 --- a/tools/validators/instance_validator/validate/generate_universe.py +++ b/tools/validators/instance_validator/validate/generate_universe.py @@ -33,9 +33,11 @@ def BuildUniverse( """Generates the ontology universe. Args: - use_simplified_universe: boolean to quick load minimal universe instead of + use_simplified_universe: Boolean to quick load minimal universe instead of full ontology - modified_types_filepath: filepath to the modified ontology types + modified_types_filepath: Filepath to the modified ontology types + default_types_filepath: Filepath to digitalbuildings ontology or other + default ontology. Returns: Generated universe object. @@ -46,9 +48,10 @@ def BuildUniverse( elif modified_types_filepath: modified_ontology_exists = path.exists(modified_types_filepath) if not modified_ontology_exists: - print(f'[ERROR]\tSpecified filepath [{modified_types_filepath}] does not ' - f'exist.' - ) + print( + f'[ERROR]\tSpecified filepath [{modified_types_filepath}] does not ' + 'exist.' + ) return None modified_types_filepath = path.expanduser(modified_types_filepath) @@ -57,15 +60,18 @@ def BuildUniverse( filter_text=None, changed_directory=modified_types_filepath, original_directory=default_types_filepath, - interactive=False) + interactive=False, + ) yaml_files = external_file_lib.RecursiveDirWalk(modified_types_filepath) else: if default_types_filepath is None: raise TypeError('default_types_filepath cannot be None.') default_ontology_exists = path.exists(default_types_filepath) if not default_ontology_exists: - print(f'[ERROR]\tSpecified filepath [{constants.ONTOLOGY_ROOT}] for ' - 'default ontology does not exist.') + print( + f'[ERROR]\tSpecified filepath [{constants.ONTOLOGY_ROOT}] for ' + 'default ontology does not exist.' + ) return None # use default location for ontology files yaml_files = external_file_lib.RecursiveDirWalk(default_types_filepath) @@ -78,8 +84,10 @@ def BuildUniverse( universe.GetEntityTypeNamespaces()) if not namespace_validation.IsValid(): - print('[ERROR]\tOntology is not valid. Ensure your current branch of the ' - 'ontology is correct and error-free.') + print( + '[ERROR]\tOntology is not valid. Ensure your current branch of the ' + 'ontology is correct and error-free.' + ) return None return universe diff --git a/tools/validators/instance_validator/validate/handler.py b/tools/validators/instance_validator/validate/handler.py index 58d625f74..68655b4ec 100644 --- a/tools/validators/instance_validator/validate/handler.py +++ b/tools/validators/instance_validator/validate/handler.py @@ -16,7 +16,8 @@ from __future__ import print_function import _thread -import datetime +import json +import os import sys from typing import Dict, List, Tuple @@ -25,12 +26,14 @@ from validate import generate_universe from validate import instance_parser from validate import subscriber +from validate import telemetry_validation_report as tvr from validate import telemetry_validator from yamlformat.validator import presubmit_validate_types_lib as pvt def GetDefaultOperation( - config_mode: instance_parser.ConfigMode) -> instance_parser.EntityOperation: + config_mode: instance_parser.ConfigMode, +) -> instance_parser.EntityOperation: """Returns the default EntityOperation for the ConfigMode.""" if config_mode == instance_parser.ConfigMode.INITIALIZE: return instance_parser.EntityOperation.ADD @@ -44,9 +47,10 @@ def GetDefaultOperation( def Deserialize( - yaml_files: List[str] -) -> Tuple[Dict[str, entity_instance.EntityInstance], - instance_parser.ConfigMode]: + yaml_files: List[str], +) -> Tuple[ + Dict[str, entity_instance.EntityInstance], instance_parser.ConfigMode +]: """Parses a yaml configuration file and deserializes it. Args: @@ -70,26 +74,30 @@ def Deserialize( for entity_key, entity_yaml in parser.GetEntities().items(): try: entity = entity_instance.EntityInstance.FromYaml( - entity_key, entity_yaml, default_entity_operation) + entity_key, entity_yaml, default_entity_operation + ) entities[entity.guid] = entity except ValueError as ex: - print(f'[ERROR]\tInvalid Entity syntax found for this entity: ' - f'{entity_key} and this content: "{entity_yaml}" and with error' - f': "{ex}"') + print( + '[ERROR]\tInvalid Entity syntax found for this entity: ' + f'{entity_key} and this content: "{entity_yaml}" and with error' + f': "{ex}"' + ) raise ex except KeyError as ex: - print(f'[ERROR]\tInvalid Entity syntax found for this entity: ' - f'{entity_key} and this content: "{entity_yaml}" and with error' - f': "{ex}"') + print( + '[ERROR]\tInvalid Entity syntax found for this entity: ' + f'{entity_key} and this content: "{entity_yaml}" and with error' + f': "{ex}"' + ) raise ex return entities, parser.GetConfigMode() def _ValidateConfig( - filenames: List[str], - universe: pvt.ConfigUniverse, - is_udmi) -> List[entity_instance.EntityInstance]: + filenames: List[str], universe: pvt.ConfigUniverse, is_udmi +) -> List[entity_instance.EntityInstance]: """Runs all config validation checks.""" print(f'[INFO]\tLoading config files: {filenames}') entities, config_mode = Deserialize(filenames) @@ -98,23 +106,29 @@ def _ValidateConfig( return helper.Validate(entities, config_mode, is_udmi) -def _ValidateTelemetry(subscription: str, service_account: str, - entities: Dict[str, entity_instance.EntityInstance], - timeout: int, is_udmi: bool) -> None: +def _ValidateTelemetry( + subscription: str, + service_account: str, + entities: Dict[str, entity_instance.EntityInstance], + timeout: int, + is_udmi: bool +) -> None: """Runs all telemetry validation checks.""" helper = TelemetryHelper(subscription, service_account) helper.Validate(entities, timeout, is_udmi) -def RunValidation(filenames: List[str], - use_simplified_universe: bool = False, - modified_types_filepath: str = None, - default_types_filepath: str = constants.ONTOLOGY_ROOT, - subscription: str = None, - service_account: str = None, - report_filename: str = None, - timeout: int = constants.DEFAULT_TIMEOUT, - is_udmi: bool = False) -> None: +def RunValidation( + filenames: List[str], + use_simplified_universe: bool = False, + modified_types_filepath: str = None, + default_types_filepath: str = constants.ONTOLOGY_ROOT, + subscription: str = None, + service_account: str = None, + report_filename: str = None, + timeout: int = constants.DEFAULT_TIMEOUT, + is_udmi: bool = False +) -> None: """Top level runner for all validations. Args: @@ -127,7 +141,6 @@ def RunValidation(filenames: List[str], report_filename: Fully qualified path to write a validation report to. timeout: Timeout duration of the telemetry validator. Default is 60 seconds. is_udmi: Telemetry follows UDMI standards. - """ saved_stdout = sys.stdout report_file = None @@ -142,7 +155,8 @@ def RunValidation(filenames: List[str], universe = generate_universe.BuildUniverse( use_simplified_universe=use_simplified_universe, modified_types_filepath=modified_types_filepath, - default_types_filepath=default_types_filepath) + default_types_filepath=default_types_filepath + ) if not universe: print('[ERROR]\tUniverse did not load properly.') sys.exit(0) @@ -151,14 +165,17 @@ def RunValidation(filenames: List[str], entities = _ValidateConfig(filenames, universe, is_udmi) if subscription: print('[INFO]\tStarting telemetry validation.') - _ValidateTelemetry(subscription, service_account, entities, - timeout, is_udmi) + _ValidateTelemetry( + subscription, service_account, entities, timeout, is_udmi + ) else: - print('[WARNING]\tTelemetry validation skipped, subscription ' - 'not found. Please provide a subscription and service account to ' - 'run telemetry validation. See here for more details: ' - 'https://google.github.io/digitalbuildings/tools/validators/' - 'instance_validator/#telemetry-validation') + print( + '[WARNING]\tTelemetry validation skipped, subscription ' + 'not found. Please provide a subscription and service account to ' + 'run telemetry validation. See here for more details: ' + 'https://google.github.io/digitalbuildings/tools/validators/' + 'instance_validator/#telemetry-validation' + ) finally: sys.stdout = saved_stdout if report_file: @@ -166,6 +183,7 @@ def RunValidation(filenames: List[str], report_file.close() print('[INFO]\tInstance validation completed.') + class TelemetryHelper(object): """A validation helper to encapsulate telemetry validation. @@ -179,8 +197,12 @@ def __init__(self, subscription, service_account_file): self.subscription = subscription self.service_account_file = service_account_file - def Validate(self, entities: Dict[str, entity_instance.EntityInstance], - timeout: int, is_udmi: bool) -> None: + def Validate( + self, + entities: Dict[str, entity_instance.EntityInstance], + timeout: int, + is_udmi: bool, + ) -> None: """Validates telemetry payload received from the subscription. Args: @@ -192,7 +214,8 @@ def Validate(self, entities: Dict[str, entity_instance.EntityInstance], print(f'[INFO]\tConnecting to PubSub subscription {self.subscription}') sub = subscriber.Subscriber(self.subscription, self.service_account_file) validator = telemetry_validator.TelemetryValidator( - entities, timeout, is_udmi, _TelemetryValidationCallback) + entities, timeout, is_udmi, _TelemetryValidationCallback + ) validator.StartTimer() try: print('[INFO]\tStaring to listen to subscription messages.') @@ -203,36 +226,43 @@ def Validate(self, entities: Dict[str, entity_instance.EntityInstance], def _TelemetryValidationCallback( - validator: telemetry_validator.TelemetryValidator) -> None: + validator: telemetry_validator.TelemetryValidator, +) -> None: """Callback when the telemetry validator finishes. + This could be called due to a timeout or because telemetry messages were received and validated for every expected entity. + Args: validator: the telemetry validator that triggered the callback. """ - print('Generating validation report ...') - current_time = datetime.datetime.now() - timestamp = current_time.strftime('%d-%b-%Y (%H:%M:%S)') - report = f'\nReport Generated at: {timestamp}\n' - - if not validator.AllEntitiesValidated(): - report += ('No telemetry message was received for the following ' - 'entities:') - report += '\n' - for entity_name in validator.GetUnvalidatedEntityNames(): - report += f' {entity_name}\n' - - report += '\nTelemetry validation errors:\n' - for error in validator.GetErrors(): - report += error.GetPrintableMessage() - - report += '\nTelemetry validation warnings:\n' - for warnings in validator.GetWarnings(): - report += warnings.GetPrintableMessage() + print('[INFO]\tGenerating telemetry validation report.') + expected_devices = { + entity.guid: entity_code + for entity_code, entity in validator.entities_with_translation.items() + } + error_devices = list(validator.GetInvalidMessageBlocks()) + + # create validation report object + validation_report = tvr.TelemetryValidationReport( + expected_devices=expected_devices, + missing_devices=validator.GetUnvalidatedEntities(), + error_devices=error_devices, + extra_devices=validator.GetExtraEntities(), + ) + + # create formatted validation report string + validation_report_dict = validation_report.GenerateReport() + + # Export to filepath and write to console. + with open( + os.path.join(os.getcwd(), 'telemetry_validation_report.json'), + 'w', + encoding='UTF-8' + ) as report: + report.write(json.dumps(validation_report_dict, indent=4)) - print('\n') - print(report) print('Report Generated') _thread.interrupt_main() @@ -249,9 +279,10 @@ def __init__(self, universe: pvt.ConfigUniverse): self.universe = universe def Validate( - self, entities: Dict[str, entity_instance.EntityInstance], + self, + entities: Dict[str, entity_instance.EntityInstance], config_mode: instance_parser.ConfigMode, - is_udmi: bool= False + is_udmi: bool = False, ) -> Dict[str, entity_instance.EntityInstance]: """Validates entity instances that are already deserialized. @@ -269,17 +300,23 @@ def Validate( print('[INFO]\tValidating entity instance definitions.') building_found = False valid_entities = {} - validator = entity_instance.CombinationValidator(self.universe, config_mode, - entities) + validator = entity_instance.CombinationValidator( + self.universe, config_mode, entities + ) alpha_interdep_helper = AlphaInterdependencyHelper() is_valid = True for entity_guid, current_entity in entities.items(): if not alpha_interdep_helper.ValidateAndUpdateState( - current_entity.operation): - raise ValueError('(v1 Alpha): Building Config cannot have more ' - 'than 2 operations; one being EXPORT.') - if (current_entity.operation is not instance_parser.EntityOperation.DELETE - and current_entity.type_name.lower() == 'building'): + current_entity.operation + ): + raise ValueError( + '(v1 Alpha): Building Config cannot have more ' + 'than 2 operations; one being EXPORT.' + ) + if ( + current_entity.operation is not instance_parser.EntityOperation.DELETE + and current_entity.type_name.lower() == 'building' + ): building_found = True if not validator.Validate(current_entity, is_udmi): is_valid = False @@ -287,8 +324,10 @@ def Validate( valid_entities[entity_guid] = current_entity if not building_found: - raise SyntaxError('Building entity not found. Configs must contain ' - 'a non-deleted entity of type FACILITIES/BUILDING.') + raise SyntaxError( + 'Building entity not found. Configs must contain ' + 'a non-deleted entity of type FACILITIES/BUILDING.' + ) # Final validity determination. if is_valid: @@ -309,7 +348,8 @@ def GetValidationState(self) -> bool: return self.__validation_state def ValidateAndUpdateState( - self, entity_operation: instance_parser.EntityOperation) -> bool: + self, entity_operation: instance_parser.EntityOperation + ) -> bool: """Validates entity instance operation against v1 Alpha Milestones. Enforces the constraint that only one type of operation along with export diff --git a/tools/validators/instance_validator/validate/instance_parser.py b/tools/validators/instance_validator/validate/instance_parser.py index 2ed41c9e1..207fa74b7 100644 --- a/tools/validators/instance_validator/validate/instance_parser.py +++ b/tools/validators/instance_validator/validate/instance_parser.py @@ -103,7 +103,7 @@ def _MergeSchemas(first: Dict[syaml.ScalarValidator, syaml.Validator], #### Public Text parsing Constants #### -ENTITY_ID_KEY = 'id' # deprecated; kept for legacy reasons +ENTITY_ID_KEY = 'id' # deprecated; kept for legacy reasons ENTITY_GUID_KEY = 'guid' ENTITY_CODE_KEY = 'code' ENTITY_CLOUD_DEVICE_ID_KEY = 'cloud_device_id' diff --git a/tools/validators/instance_validator/validate/message_filters.py b/tools/validators/instance_validator/validate/message_filters.py index c0e12b73b..e6d605467 100644 --- a/tools/validators/instance_validator/validate/message_filters.py +++ b/tools/validators/instance_validator/validate/message_filters.py @@ -12,22 +12,20 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Helper classes for filtering messages""" +"""Helper classes for filtering messages.""" -class Udmi(): - """ Helper functions for filtering UDMI messages based on message and - attributes - """ + +class Udmi: + """Helper functions for filtering UDMI messages attributes.""" SUB_FOLDER = 'subFolder' SUB_TYPE = 'subType' STATE = 'state' POINTSET = 'pointset' - @staticmethod - def telemetry(attributes): - """ Checks if a PubSub message is a UDMI Telemetry (pointset event) message - based on message attributes + @classmethod + def telemetry(cls, attributes): + """Checks if a PubSub message is a UDMI Telemetry (pointset event) message. Args: attributes: PubSub message attributes @@ -35,7 +33,9 @@ def telemetry(attributes): Returns: true/false if message type is UDMI telemetry """ - if (attributes.get(Udmi.SUB_FOLDER) == Udmi.POINTSET - and attributes.get(Udmi.SUB_TYPE) != Udmi.STATE): + if ( + attributes.get(Udmi.SUB_FOLDER) == Udmi.POINTSET + and attributes.get(Udmi.SUB_TYPE) != Udmi.STATE + ): return True return False diff --git a/tools/validators/instance_validator/validate/telemetry.py b/tools/validators/instance_validator/validate/telemetry.py index 0a2d5414b..051aabdaf 100644 --- a/tools/validators/instance_validator/validate/telemetry.py +++ b/tools/validators/instance_validator/validate/telemetry.py @@ -54,8 +54,12 @@ def __init__(self, message): """ super().__init__() self.attributes = self._parse_attributes(message.attributes) - self.version, self.timestamp, self.points, self.is_partial = ( - self._parse_data(message.data)) + ( + self.version, + self.timestamp, + self.points, + self.is_partial, + ) = self._parse_data(message.data) def _parse_attributes(self, pubsub_message_attributes) -> Dict[str, str]: """Receives a pubsub message data and parses it. @@ -69,18 +73,19 @@ def _parse_attributes(self, pubsub_message_attributes) -> Dict[str, str]: """ parsed_attributes = {} parsed_attributes[DEVICE_ID] = pubsub_message_attributes.get(DEVICE_ID) - parsed_attributes[DEVICE_REGISTRY_ID] = \ - pubsub_message_attributes.get(DEVICE_REGISTRY_ID) - parsed_attributes[DEVICE_NUM_ID] = \ - pubsub_message_attributes.get(DEVICE_NUM_ID) - parsed_attributes[SUB_FOLDER] = \ - pubsub_message_attributes.get(SUB_FOLDER) - parsed_attributes[SUB_TYPE] = \ - pubsub_message_attributes.get(SUB_TYPE) + parsed_attributes[DEVICE_REGISTRY_ID] = pubsub_message_attributes.get( + DEVICE_REGISTRY_ID + ) + parsed_attributes[DEVICE_NUM_ID] = pubsub_message_attributes.get( + DEVICE_NUM_ID + ) + parsed_attributes[SUB_FOLDER] = pubsub_message_attributes.get(SUB_FOLDER) + parsed_attributes[SUB_TYPE] = pubsub_message_attributes.get(SUB_TYPE) return parsed_attributes - def _parse_data(self, - message) -> Tuple[str, str, Dict[str, point.Point], bool]: + def _parse_data( + self, message + ) -> Tuple[str, str, Dict[str, point.Point], bool]: """Receives a pubsub message data and parses it. Handles parsing as outlined in: @@ -105,27 +110,31 @@ def _parse_data(self, except json.JSONDecodeError: print(f'[ERROR]\tReceived an invalid JSON payload: {message}') except AttributeError: - print(f'[ERROR]\tReceived a JSON payload with an attribute ' - f'error: {message}') + print( + f'[ERROR]\tReceived a JSON payload with an attribute error: {message}' + ) except ValueError: - print(f'[ERROR]\tReceived a JSON payload with a value error: ' - f'{message}') + print(f'[ERROR]\tReceived a JSON payload with a value error: {message}') else: if isinstance(json_object, int): - print(f'[ERROR]\tReceived an invalid JSON payload containing: ' - f'{json_object}') + print( + '[ERROR]\tReceived an invalid JSON payload containing: ' + f'{json_object}' + ) return version, timestamp, points, is_partial # UDMI v1 sends as int and v1+ sends version as String if VERSION not in json_object.keys(): - print(f'[ERROR]\tReceived a JSON payload with no version: ' - f'{json_object}') + print( + f'[ERROR]\tReceived a JSON payload with no version: {json_object}' + ) return version, timestamp, points, is_partial version = str(json_object[VERSION]) if TIMESTAMP not in json_object.keys(): - print(f'[ERROR]\tReceived a JSON payload with no timestamp: ' - f'{json_object}') + print( + f'[ERROR]\tReceived a JSON payload with no timestamp: {json_object}' + ) return version, timestamp, points, is_partial timestamp = json_object[TIMESTAMP] @@ -133,8 +142,7 @@ def _parse_data(self, points = {} if POINTS not in json_object.keys(): - print(f'[ERROR]\tReceived a JSON payload with no points: ' - f'{json_object}') + print(f'[ERROR]\tReceived a JSON payload with no points: {json_object}') return version, timestamp, points, is_partial json_points = json_object[POINTS] for point_name, value in json_points.items(): diff --git a/tools/validators/instance_validator/validate/telemetry_validation_report.py b/tools/validators/instance_validator/validate/telemetry_validation_report.py new file mode 100644 index 000000000..50fb0f53d --- /dev/null +++ b/tools/validators/instance_validator/validate/telemetry_validation_report.py @@ -0,0 +1,237 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Container for the result of a pubsub message validation.""" + +from __future__ import annotations + +import dataclasses +import datetime +from typing import Any, Dict, List, Optional + +from validate.constants import ENTITY_CODE +from validate.constants import ENTITY_GUID +from validate.constants import ERROR_DEVICES +from validate.constants import EXPECTED_DEVICES +from validate.constants import EXPECTED_POINTS +from validate.constants import EXTRA_DEVICES +from validate.constants import EXTRA_POINTS +from validate.constants import INVALID_DIMENSIONAL_VALUES +from validate.constants import MESSAGE_DESCRIPTION +from validate.constants import MESSAGE_TIMESTAMP +from validate.constants import MESSAGE_VERSION +from validate.constants import MISSING_DEVICES +from validate.constants import MISSING_POINTS +from validate.constants import MISSING_PRESENT_VALUES +from validate.constants import MISSING_TIMESTAMP +from validate.constants import MISSING_VERSION +from validate.constants import PRESENT_VALUE_KEY +from validate.constants import REPORT_TIMESTAMP +from validate.constants import TELEMETRY_MESSAGE_ERRORS +from validate.constants import TELEMETRY_MESSAGE_WARNINGS +from validate.constants import TIMESTAMP_FORMAT +from validate.constants import UNMAPPED_STATES + + +@dataclasses.dataclass +class TelemetryPoint(object): + """Class to hold telemetry point attributes. + + Attributes: + point_name: Name of the point. + present_value: A point's present value which as a string, int, boolean, or + float. + """ + + point_name: str + present_value: Any + + +class TelemetryValidationReport(object): + """Container for a telememtry validation report. + + Attributes: + timestamp: UTC timestamp for when the report is created. + version: A pubsub message's UDMI version. + expected_devices: Dictionary mapping of valid device GUIDs to device codes + listed in a building configuration. + extra_devices: Dictionary mapping of valid device GUIDs to device codes + reported by a pubsub subscription and not contained in a building + configuration file. + missing_devices: Dictionary mapping of valid device GUIDs to device codes + not reported by a pubsub subscription but contained in a building + configuration file. + error_devices: List of TelemetryMessageValidationBlock instances for + telemetry messages that generate validation errors. + """ + + def __init__( + self, + expected_devices: Dict[str, str], + extra_devices: Dict[str, str], + missing_devices: Dict[str, str], + error_devices: List[TelemetryMessageValidationBlock], + ): + """Init.""" + self.timestamp = datetime.datetime.now(tz=datetime.timezone.utc).strftime( + TIMESTAMP_FORMAT + ) + self.expected_devices = expected_devices + self.extra_devices = extra_devices + self.missing_devices = missing_devices + self.error_devices = error_devices + + def AddExtraDevice(self, code: str) -> None: + self.extra_devices.append(code) + + def AddMissingDevice(self, code: str) -> None: + self.missing_devices.append(code) + + def AddErrorDevice(self, code: str) -> None: + self.error_devices.append(code) + + def GenerateReport(self) -> Dict[str, List[Any]]: + """Returns json payload representation of validation report.""" + validation_report_dict = { + REPORT_TIMESTAMP: self.timestamp, + EXPECTED_DEVICES: self.expected_devices, + EXTRA_DEVICES: self.extra_devices, + MISSING_DEVICES: self.missing_devices, + ERROR_DEVICES: [ + block.CreateJsonReportBlock() for block in self.error_devices + ], + } + return validation_report_dict + + +class TelemetryMessageValidationBlock(object): + """A container for telemetry validation result from pubsub message by entity. + + Attributes: + guid: Entity guid of the of the device whose pubsub message is being + validated. + code: Entity code of the of the device whose pubsub message is being + validated. + timestamp: UTC timestamp for when oubsub message is received. + version: GCP pubsub API version. + expected_points: Dictionary of expected points. + extra_points: Set of points found in telemetry that is not captured in the + building config. + missing_points: Set of points found in the building config that is not + captured in the telemetry stream. + missing_present_values: Points in a pubsub message which are missing the + present_value field. + unmapped_states: Point states received in a pubsub but not present in a + building config file. + invalid_dimensional_values: Points whose dimensional value is not of the + correct type. + valid: Boolean indicator of whether a pubsub message is valid and conforms + to a building config translation. + description: [Optional] Description of what makes the device invalid. Good + for errors or warnings that may not fall under one of the above + categories. + """ + + def __init__( + self, + guid: str, + code: str, + expected_points: list[str], + timestamp: Optional[datetime.datetime] = None, + version: Optional[str] = None, + description: Optional[str] = None, + ): + """Init.""" + + self.guid = guid + self.code = code + self.version = version + self.timestamp = timestamp + self.expected_points = expected_points + self.extra_points = [] + self.missing_points = [] + self.missing_present_values = [] + self.unmapped_states = [] + self.invalid_dimensional_values = [] + self.valid = True + self.description = description + + def AddExtraPoint(self, point: str) -> None: + self.valid = False + self.extra_points.append(point) + + def AddMissingPoint(self, point: str) -> None: + self.valid = False + self.missing_points.append(point) + + def AddMissingPresentValue(self, point: str) -> None: + self.valid = False + self.missing_present_values.append(point) + + def AddUnmappedState(self, state: str, point: str) -> None: + self.valid = False + self.unmapped_states.append((point, state)) + + def AddInvalidDimensionalValue(self, value: str, point: str) -> None: + self.valid = False + self.invalid_dimensional_values.append((point, value)) + + def CreateJsonReportBlock(self) -> Dict[str, Any]: + """Exports a telemetry validation report point(block) as valid json.""" + + json_report_block = { + ENTITY_CODE: self.code, + ENTITY_GUID: self.guid, + EXPECTED_POINTS: self._TelemetryPointListToDict(self.expected_points), + TELEMETRY_MESSAGE_ERRORS: { + MISSING_POINTS: self._TelemetryPointListToDict(self.missing_points), + MISSING_PRESENT_VALUES: self._TelemetryPointListToDict( + self.missing_present_values + ), + INVALID_DIMENSIONAL_VALUES: self._TelemetryPointListToDict( + self.invalid_dimensional_values + ), + }, + TELEMETRY_MESSAGE_WARNINGS: { + EXTRA_POINTS: self._TelemetryPointListToDict(self.extra_points), + UNMAPPED_STATES: self._TelemetryPointListToDict( + self.unmapped_states + ), + }, + } + + if not self.timestamp: + json_report_block.update({MESSAGE_TIMESTAMP: MISSING_TIMESTAMP}) + else: + json_report_block.update({MESSAGE_TIMESTAMP: self.timestamp}) + + if not self.version: + json_report_block.update({MESSAGE_VERSION: MISSING_VERSION}) + else: + json_report_block.update({MESSAGE_VERSION: self.version}) + + if self.description: + json_report_block.update({MESSAGE_DESCRIPTION: self.description}) + + return json_report_block + + def _TelemetryPointListToDict( + self, point_list: List[TelemetryPoint] + ) -> Dict[str, Any]: + """Returns a dictionary representation of a TelemetryPoint instance.""" + + point_dictionary = { + point.point_name: {PRESENT_VALUE_KEY: point.present_value} + for point in point_list + } + return point_dictionary diff --git a/tools/validators/instance_validator/validate/telemetry_validator.py b/tools/validators/instance_validator/validate/telemetry_validator.py index b22366308..b88bd30ff 100644 --- a/tools/validators/instance_validator/validate/telemetry_validator.py +++ b/tools/validators/instance_validator/validate/telemetry_validator.py @@ -19,23 +19,36 @@ """ import threading +from typing import Dict from validate import field_translation as ft_lib -from validate import telemetry from validate import message_filters -from validate import telemetry_validation_reporting as tvr +from validate import telemetry +from validate import telemetry_validation_report as tvr DEVICE_ID = telemetry.DEVICE_ID +DEVICE_NUM_ID = telemetry.DEVICE_NUM_ID +GUID = 'guid' class TelemetryValidator(object): """Validates telemetry messages against a building config file. - Attributes; - entities: a dict with entity_name as a key and EntityInstance as value. - timeout: the max time the validator must read messages from pubsub. - is_udmi: true/false treat telemetry stream as UDMI - callback: the method called by the pubsub listener upon receiving a msg. + Attributes: + entities_with_translation: Mapping of entity codes to an EntityInstance + instances. that map 1:1 from a building config to a telemetry message. + timeout: The max time the validator must read messages from pubsub. + callback: The method called by the pubsub listener upon receiving a msg. + is_udmi: Flag to indicate whether telemtry payloads should conform to the + UDMI standard. + validated_entities: Map of entity guid to entity code Entities that have + been run through ValidateMessage() and passed. + timer: Validation timeout timer. + invalid_message_blocks: List of TelemetryMessageValidationBlock instances + for invalid pubsub messages. + extra_entities: Mapping of entity guids to entity codes for entities + reported in a tlemetry payload but not recorded in the building config + file being validated. """ def __init__(self, entities, timeout, is_udmi, callback): @@ -44,6 +57,8 @@ def __init__(self, entities, timeout, is_udmi, callback): Args: entities: EntityInstance dictionary timeout: validation timeout duration in seconds + is_udmi: Flag to indicate whether telemtry payloads should conform to the + UDMI standard. callback: callback function to be called either because messages for all entities were seen or because the timeout duration was reached """ @@ -58,11 +73,20 @@ def __init__(self, entities, timeout, is_udmi, callback): self.callback = callback self.is_udmi = is_udmi self.validated_entities = {} - # TODO(charbull): refactor by having on validation_report object instead - # of two: warning and errors - self._validation_errors = [] - self._validation_warnings = [] self._timer: threading.Timer = None + self._invalid_message_blocks = [] + self._extra_entities = {} + + def AddInvalidMessageBlock(self, validation_block): + self._invalid_message_blocks.append(validation_block) + + def GetInvalidMessageBlocks(self): + """Returns list of TelemetryMessageValidationBlock for invalid messages. + + A TelemetryMessageValidationBlock instance is a container for validations + performed on a pubsub message. + """ + return self._invalid_message_blocks def StartTimer(self): """Starts the validation timeout timer.""" @@ -77,73 +101,98 @@ def StopTimer(self): self._timer = None def AllEntitiesValidated(self): - """Returns true if a message was received for every entity.""" + """True if all enities in a building config have been validated. + + Returns true if a valid telemetry message was received for every entity in a + building configuration file. + """ return len(self.entities_with_translation) == len(self.validated_entities) - def GetUnvalidatedEntityNames(self): - """Returns a set of entities that have not been validated.""" - return set(self.entities_with_translation.keys()) - set( - self.validated_entities.keys()) + def GetUnvalidatedEntities(self) -> Dict[str, str]: + """Returns a mapping of entity_guid to entity_code + + Entities in a building config file that do not map to a device in a pubsub + telemetry stream. + """ + unvalidated_entities = self.entities_with_translation.copy() + for ( + validated_entity_guid, + validated_entity_code, + ) in self.validated_entities.items(): + try: + unvalidated_entities.pop(validated_entity_code) + except KeyError: + self._extra_entities.update( + {validated_entity_guid: validated_entity_code} + ) + continue + return { + entity.guid: entity_code + for entity_code, entity in unvalidated_entities.items() + } + + def GetExtraEntities(self) -> Dict[str, str]: + """Returns a mapping of entity_guid to entity_code + + entities are reported in a pubsub payload but are not present in the + building config being validated. + """ + return self._extra_entities def CallbackIfCompleted(self): """Checks if all entities have been validated, and calls the callback.""" if self.AllEntitiesValidated(): self.callback(self) - def AddError(self, error): - """Adds a validation error.""" - self._validation_errors.append(error) - - def GetErrors(self): - """Returns all validation errors.""" - return self._validation_errors - - def AddWarning(self, warning): - """Adds a validation Warning.""" - self._validation_warnings.append(warning) - - def GetWarnings(self): - """Returns all validation warnings.""" - return self._validation_warnings - def ValidateMessage(self, message): """Validates a telemetry message. Args: - message: the telemetry message to validate. - - Adds all validation errors for the message to a list of all errors - discovered by this validator. + message: the telemetry message to validate. Adds all validation errors + for the message to a list of all errors and warnings discovered by this + validator. """ - # UDMI Pub/Sub streams include messages which aren't telemetry, silently - # ignore these if validator configured with --udmi flag - if self.is_udmi and not message_filters.Udmi.telemetry(message.attributes): - message.ack() - return - tele = telemetry.Telemetry(message) - entity_name = tele.attributes[DEVICE_ID] + entity_code = tele.attributes[DEVICE_ID] + entity_guid = tele.attributes[DEVICE_NUM_ID] + message_timestamp = tele.timestamp + message_version = tele.version # Telemetry message received for an entity not in building config - if entity_name not in self.entities_with_translation.keys(): - self.AddWarning( - tvr.TelemetryReportPoint( - entity_name, None, 'Telemetry message received for an entity not ' - 'in building config', tvr.TelemetryReportPointType.WARNING)) + if entity_code not in self.entities_with_translation.keys(): + self._extra_entities.update({entity_guid: entity_code}) message.ack() return - if entity_name in self.validated_entities: + # Telemetry message received for a device that's already been validated. + if entity_guid in self.validated_entities: # Already validated telemetry for this entity, # so the message can be skipped. message.ack() return - self.validated_entities[entity_name] = True + self.validated_entities.update({entity_guid: entity_code}) + + entity = self.entities_with_translation[entity_code] - entity = self.entities_with_translation[entity_name] + validation_block = tvr.TelemetryMessageValidationBlock( + guid=None, + code=entity_code, + timestamp=message_timestamp, + version=message_version, + expected_points=entity.translation.values(), + ) - print(f'[INFO]\tValidating telemetry message for entity {entity_name}') + # UDMI Pub/Sub streams could include messages which aren't telemetry + # Raise a warning for devices that are sending non-udmi compliant payloads + if self.is_udmi and not message_filters.Udmi.telemetry(message.attributes): + validation_block.description = ( + f'Message for {entity_code} does not conform to UDMI standard.' + ) + message.ack() + return + + print(f'Validating telemetry message for entity: {entity_code}') point_full_paths = { f'points.{key}.present_value': key for key in tele.points } @@ -152,53 +201,27 @@ def ValidateMessage(self, message): continue if field_translation.raw_field_name not in point_full_paths: if not tele.is_partial: - self.AddError( - tvr.TelemetryReportPoint(entity_name, - field_translation.raw_field_name, - 'Field missing from telemetry message', - tvr.TelemetryReportPointType.ERROR)) + validation_block.AddMissingPoint(field_translation.raw_field_name) continue + point = tele.points[point_full_paths[field_translation.raw_field_name]] pv = point.present_value + if pv is None: - if isinstance(field_translation, ft_lib.MultiStateValue): - self.AddError( - tvr.TelemetryReportPoint( - entity_name, field_translation.raw_field_name, - f'Missing state in telemetry message: {pv}', - tvr.TelemetryReportPointType.ERROR)) - elif isinstance(field_translation, ft_lib.DimensionalValue): - self.AddError( - tvr.TelemetryReportPoint( - entity_name, field_translation.raw_field_name, - f'Missing number in telemetry message: {pv}', - tvr.TelemetryReportPointType.ERROR)) - else: - self.AddError( - tvr.TelemetryReportPoint( - entity_name, field_translation.raw_field_name, - 'Present value missing from telemetry message', - tvr.TelemetryReportPointType.ERROR)) - continue + validation_block.AddMissingPresentValue(point=point) - if isinstance(field_translation, ft_lib.MultiStateValue): + elif isinstance(field_translation, ft_lib.MultiStateValue): if pv not in field_translation.raw_values: - self.AddError( - tvr.TelemetryReportPoint( - entity_name, field_translation.raw_field_name, - f'Unmapped state in telemetry message: {pv}', - tvr.TelemetryReportPointType.ERROR)) - + validation_block.AddUnmappedState(state=pv, point=point) continue - if isinstance(field_translation, - ft_lib.DimensionalValue) and not self.ValueIsNumeric(pv): - self.AddError( - tvr.TelemetryReportPoint( - entity_name, field_translation.raw_field_name, - f'Invalid number in telemetry message: {pv}', - tvr.TelemetryReportPointType.ERROR)) + elif isinstance( + field_translation, ft_lib.DimensionalValue + ) and not self.ValueIsNumeric(pv): + validation_block.AddInvalidDimensionalValue(value=pv, point=point) + if not validation_block.valid: + self.AddInvalidMessageBlock(validation_block) message.ack() self.CallbackIfCompleted() diff --git a/tools/validators/instance_validator/validate/universe_helper/types.py b/tools/validators/instance_validator/validate/universe_helper/types.py index d3760d282..594ded34f 100644 --- a/tools/validators/instance_validator/validate/universe_helper/types.py +++ b/tools/validators/instance_validator/validate/universe_helper/types.py @@ -170,10 +170,10 @@ 'id': '4726112880724803584', 'description': 'Basic fan with start/stop and status.', 'is_canonical': True, - 'uses': ['run_command','run_status'], - 'opt_uses': ['power_sensor'] + 'uses': ['run_command', 'run_status'], + 'opt_uses': ['power_sensor'], }, - 'FAN_SS_ABC':{ + 'FAN_SS_ABC': { 'id': 'abxc', 'description': 'Reffan', 'is_canonical': True, @@ -181,8 +181,7 @@ 'run_command', 'run_status', 'zone_air_temperature_sensor_1', - 'zone_air_temperature_sensor_2' - ] + 'zone_air_temperature_sensor_2', + ], }, - } From e3e92bce7e7c6d597cee2a3240d93f2703c3e5f2 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Thu, 9 Feb 2023 12:36:15 +0800 Subject: [PATCH 08/45] minor update for motorized* --- ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml | 2 +- ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml | 4 ++-- ontology/yaml/resources/HVAC/entity_types/AHU.yaml | 2 +- ontology/yaml/resources/HVAC/entity_types/DMP.yaml | 4 ++-- ontology/yaml/resources/HVAC/entity_types/FCU.yaml | 4 ++-- ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml index 86b5786cf..187347587 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml @@ -65,7 +65,7 @@ UPS_IOBM_PPWM_UPSBM: - UPS - IOBM - PPWM - - UPSBM + - UPSBM UPS_SS_BBM: description: "UPS unit with load bypass and battery mode and alarm." diff --git a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml index dc9fd90d5..5da3cf773 100644 --- a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml @@ -6274,8 +6274,8 @@ MWCM: description: "Motorized water valve control and monitoring." is_abstract: true uses: - - motorized_valve_run_command - - motorized_valve_run_status + - motorized_valve_position_command + - motorized_valve_position_status SCRSS: id: "3343154851889545216" diff --git a/ontology/yaml/resources/HVAC/entity_types/AHU.yaml b/ontology/yaml/resources/HVAC/entity_types/AHU.yaml index c9f8188e1..02753314e 100644 --- a/ontology/yaml/resources/HVAC/entity_types/AHU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/AHU.yaml @@ -4792,4 +4792,4 @@ AHU_BSPC_DX4SC_ECON_EFSS_EFVSC_SFSS_SFVSC_SSPC_RHHC_NONCANONICAL_1: uses: - heating_water_valve_percentage_command - min_zone_air_relative_humidity_sensor - - min_zone_air_relative_humidity_setpoint + - min_zone_air_relative_humidity_setpoint \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/DMP.yaml b/ontology/yaml/resources/HVAC/entity_types/DMP.yaml index ea84fe645..9e1e14e55 100644 --- a/ontology/yaml/resources/HVAC/entity_types/DMP.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/DMP.yaml @@ -90,8 +90,8 @@ DMP_MFSD: - DMP - MFSD uses: - - motorized_damper_run_command - - motorized_damper_run_status + - motorized_damper_position_command + - motorized_damper_position_status ################################### ### Existing Non-standard Types ### diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index 68b2134f3..8a6b6989f 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1544,7 +1544,7 @@ FCU_RTM_DXZTC_SRC: uses: - filter_alarm - lost_power_alarm - + FCU_DXZTC: description: "FCU with SS, discharge temp sensors, zone control and sensor, filter change" is_canonical: true @@ -1554,7 +1554,7 @@ FCU_DXZTC: uses: - panel_controller_status - filter_alarm - + FCU_NON_CANONICAL_TYPE_1: id: "17300095970133934080" description: "Typical chilled water FCU with cooling-only (discharge control) for MDF rooms, diff --git a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml index a2ffaa32b..9f65fdd3f 100644 --- a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml @@ -247,4 +247,4 @@ SENSOR_SPM: is_canonical: true implements: - /SENSOR - - SPM + - SPM \ No newline at end of file From 30156b2d95d6518465b82b6d40598fdb9bbc5a15 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Thu, 9 Feb 2023 12:43:08 +0800 Subject: [PATCH 09/45] minor fix --- ontology/yaml/resources/fields/telemetry_fields.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ontology/yaml/resources/fields/telemetry_fields.yaml b/ontology/yaml/resources/fields/telemetry_fields.yaml index d38cb75cb..0840dd27c 100644 --- a/ontology/yaml/resources/fields/telemetry_fields.yaml +++ b/ontology/yaml/resources/fields/telemetry_fields.yaml @@ -919,16 +919,16 @@ literals: - NORMAL - UNKNOWN - static_pressure_sensor -- motorized_valve_run_command: +- motorized_valve_position_command: - CLOSED - OPEN -- motorized_valve_run_status: +- motorized_valve_position_status: - CLOSED - OPEN -- motorized_damper_run_command: +- motorized_damper_position_command: - CLOSED - OPEN -- motorized_damper_run_status: +- motorized_damper_position_status: - CLOSED - OPEN From 74870463c4006bc96eda3c4b8fa74be05f4e24d6 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Wed, 22 Feb 2023 11:14:15 +0800 Subject: [PATCH 10/45] small update unused fields --- ontology/yaml/resources/fields/telemetry_fields.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/ontology/yaml/resources/fields/telemetry_fields.yaml b/ontology/yaml/resources/fields/telemetry_fields.yaml index 0840dd27c..c5f39a047 100644 --- a/ontology/yaml/resources/fields/telemetry_fields.yaml +++ b/ontology/yaml/resources/fields/telemetry_fields.yaml @@ -900,9 +900,6 @@ literals: - valve_status: - OPEN - CLOSED -- zone_control_cooling_command: - - COOLING - - OFF - low_battery_alarm: - ACTIVE - INACTIVE From 3947b94087b2751f70f3e5292511a90f73b29339 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Fri, 10 Mar 2023 09:26:38 +0800 Subject: [PATCH 11/45] fix recent breaking changes --- .../resources/HVAC/entity_types/ABSTRACT.yaml | 6 ---- .../yaml/resources/HVAC/entity_types/FAN.yaml | 1 - .../yaml/resources/HVAC/entity_types/FCU.yaml | 36 +++++++++---------- .../resources/HVAC/entity_types/SENSOR.yaml | 7 ---- .../yaml/resources/HVAC/entity_types/VLV.yaml | 4 +-- .../resources/METERS/entity_types/WM.yaml | 1 - .../resources/PLUMBING/entity_types/WSR.yaml | 10 +++--- .../resources/SAFETY/entity_types/FACP.yaml | 7 ++-- .../resources/SAFETY/entity_types/HDS.yaml | 1 + .../resources/fields/telemetry_fields.yaml | 29 ++++++++------- 10 files changed, 45 insertions(+), 57 deletions(-) diff --git a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml index 9dcfe16f5..d5b914580 100644 --- a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml @@ -4387,12 +4387,6 @@ WDPM: - high_differential_pressure_alarm - low_differential_pressure_alarm -SPM: - description: "Static pressure monitoring." - is_abstract: true - uses: - - static_pressure_sensor - CHWDPM: guid: "dcdb66fc-576b-4475-a1cd-f143e16edcde" description: "Differential pressure monitoring for chilled water." diff --git a/ontology/yaml/resources/HVAC/entity_types/FAN.yaml b/ontology/yaml/resources/HVAC/entity_types/FAN.yaml index f8a13c52b..33682c65b 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FAN.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FAN.yaml @@ -27,7 +27,6 @@ FAN_SS: - SS opt_uses: - air_pressure_sensor - - lost_power_alarm FAN_SS_VSC: guid: "b58b9431-ff2c-4cc2-adab-a8c51c4ee6ab" diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index 6cafe1997..9131619ec 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1544,17 +1544,7 @@ FCU_RTM_DXZTC_SRC: uses: - filter_alarm - lost_power_alarm - -FCU_DXZTC: - description: "FCU with SS, discharge temp sensors, zone control and sensor, filter change" - is_canonical: true - implements: - - FCU - - DXZTC - uses: - - panel_controller_status - - filter_alarm - + FCU_NON_CANONICAL_TYPE_1: guid: "c8343898-b5c4-4540-a792-3630b28e2a16" description: "Typical chilled water FCU with cooling-only (discharge control) for MDF rooms, @@ -1658,17 +1648,27 @@ FCU_RTC_RHDHS_DTM_DFSS: - fire_alarm - schedule_run_command -FCU_RHDHS_DXSC_SHM_RTC: - description: "FCU with temperature control, humidity monitor with electrical parameter monitoring and water leak alarm." +FCU_DXZTC: + description: "FCU with SS, discharge temp sensors, zone control and sensor, filter change" + is_canonical: true + implements: + - FCU + - DXZTC + uses: + - panel_controller_status + - filter_alarm + +FCU_RHDHS_DXRC: + description: "FCU with temperature & pressure monitor, humidity monitor and water leak & status alarm." is_canonical: true implements: - FCU - RHDHS - - DXSC - - SHM - - RTC + - DXRC uses: + - fan_run_status - water_leak_detection_alarm - - supply_fan_run_status - - low_discharge_air_flowrate_alarm - failed_alarm + - low_discharge_air_flowrate_alarm + - high_air_static_pressure_alarm + - low_air_static_pressure_alarm diff --git a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml index c0b9e9975..81fe805fc 100644 --- a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml @@ -241,10 +241,3 @@ SENSOR_WDPM: implements: - /SENSOR - WDPM - -SENSOR_SPM: - description: "Sensor with static pressure monitor" - is_canonical: true - implements: - - /SENSOR - - SPM \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/VLV.yaml b/ontology/yaml/resources/HVAC/entity_types/VLV.yaml index 8337c659f..882840af1 100644 --- a/ontology/yaml/resources/HVAC/entity_types/VLV.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/VLV.yaml @@ -65,10 +65,10 @@ VLV_SWCM: implements: - VLV - SWCM - + VLV_MWCM: description: "Motorized water valve control and monitoring." is_canonical: true implements: - VLV - - MWCM + - MWCM \ No newline at end of file diff --git a/ontology/yaml/resources/METERS/entity_types/WM.yaml b/ontology/yaml/resources/METERS/entity_types/WM.yaml index adc3aabb3..769ea3f3d 100644 --- a/ontology/yaml/resources/METERS/entity_types/WM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/WM.yaml @@ -25,7 +25,6 @@ WM_STANDARD: - flowrate_sensor WM_WF: - id: "5379261270530719744" guid: "df942136-4b98-4da7-9e68-acc210d6cf03" description: "Water flow rate meter with counter." implements: diff --git a/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml index e50775e8e..66a0fa267 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml @@ -20,11 +20,9 @@ WSR_STD: implements: - WSR uses: - - run_status + - run_mode opt_uses: - - lost_power_alarm - water_flowrate_status - - run_mode WSR_AL: description: "Standard water softener with alarms." @@ -33,7 +31,7 @@ WSR_AL: - WSR - AL uses: - - run_status + - run_mode + - lost_power_alarm opt_uses: - - water_flowrate_status - - run_mode \ No newline at end of file + - water_flowrate_status \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index 401350e92..b92b27948 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -34,10 +34,9 @@ FACP_FA2X: opt_uses: - panel_alarm -FACP_AL_PAS: - id: "10168360087169531904" +FACP_PAS_AL: guid: "34d56a9a-15ca-4921-a851-eb13c7be7dfd" - description: "Fire alarm panel with Pre-action suppression." + description: "Fire alarm panel with Pre-action suppression with alarm." is_canonical: true implements: - FACP @@ -58,7 +57,7 @@ FACP_AL: - fire_alarm - supervisor_alarm -FACP_FA2X_AL_GS: +FACP_FA2X_GS_AL: description: "Fire alarm panel with 2-level alarm and gas suppression." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml index 611683631..7b1513652 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml @@ -24,6 +24,7 @@ HDS_STD: is_canonical: true uses: - particle_concentration_sensor + opt_uses: - particle_concentration_alarm HDS_H2M: diff --git a/ontology/yaml/resources/fields/telemetry_fields.yaml b/ontology/yaml/resources/fields/telemetry_fields.yaml index 382787ee5..bf53709b8 100644 --- a/ontology/yaml/resources/fields/telemetry_fields.yaml +++ b/ontology/yaml/resources/fields/telemetry_fields.yaml @@ -1568,6 +1568,16 @@ literals: - fire_alarm: - ACTIVE - INACTIVE +- supply_water_volume_accumulator: + fixed_min: -0.000315451 + flexible_max: 0.315451 +- valve_command: + - OPEN + - CLOSED +- valve_status: + - OPEN + - CLOSED + - primary_fire_alarm: # better than using fire_alarm_1 (which will lead to fire_alarm_1_23) - ACTIVE - INACTIVE @@ -1583,16 +1593,6 @@ literals: - particle_concentration_alarm: - ACTIVE - INACTIVE - -- supply_water_volume_accumulator: - fixed_min: -0.000315451 - flexible_max: 0.315451 -- valve_command: - - OPEN - - CLOSED -- valve_status: - - OPEN - - CLOSED - low_battery_alarm: - ACTIVE - INACTIVE @@ -1608,7 +1608,6 @@ literals: - panel_controller_status: - NORMAL - UNKNOWN -- static_pressure_sensor - motorized_valve_position_command: - CLOSED - OPEN @@ -1621,7 +1620,13 @@ literals: - motorized_damper_position_status: - CLOSED - OPEN - +- high_air_static_pressure_alarm: + - ACTIVE + - INACTIVE +- low_air_static_pressure_alarm: + - ACTIVE + - INACTIVE + - emergency_release_status: - ACTIVE - INACTIVE From e6fac0a322f80d53ac636454759b3af08bd34a70 Mon Sep 17 00:00:00 2001 From: db-robot Date: Fri, 10 Mar 2023 01:26:37 +0000 Subject: [PATCH 12/45] Add GUIDs to new entity types --- .../resources/HVAC/entity_types/ABSTRACT.yaml | 2 + .../yaml/resources/HVAC/entity_types/FCU.yaml | 2 + .../resources/HVAC/entity_types/SENSOR.yaml | 1 + .../yaml/resources/HVAC/entity_types/VLV.yaml | 1 + .../resources/PLUMBING/entity_types/WSR.yaml | 74 ++++++++++--------- .../resources/SAFETY/entity_types/FACP.yaml | 2 + .../resources/SAFETY/entity_types/HDS.yaml | 1 + 7 files changed, 47 insertions(+), 36 deletions(-) diff --git a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml index d5b914580..c31fa90c0 100644 --- a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml @@ -6265,6 +6265,7 @@ SWCM: - valve_status MWCM: + guid: "817a97fb-124e-4039-b26a-636188194dcc" description: "Motorized water valve control and monitoring." is_abstract: true uses: @@ -6489,6 +6490,7 @@ RFVSC2X: - OPERATIONAL MFSD: + guid: "d9cc060f-62b9-4f97-b4c4-6d888038f534" description: "Motorized fire smoke damper" is_canonical: true implements: diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index 9131619ec..2c2383acb 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1649,6 +1649,7 @@ FCU_RTC_RHDHS_DTM_DFSS: - schedule_run_command FCU_DXZTC: + guid: "9a927a3f-2c3c-4516-b934-9ee1fa1fc89d" description: "FCU with SS, discharge temp sensors, zone control and sensor, filter change" is_canonical: true implements: @@ -1659,6 +1660,7 @@ FCU_DXZTC: - filter_alarm FCU_RHDHS_DXRC: + guid: "5e7fdbec-85f0-4b4b-a205-3864198d37c5" description: "FCU with temperature & pressure monitor, humidity monitor and water leak & status alarm." is_canonical: true implements: diff --git a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml index 81fe805fc..ef484a0ea 100644 --- a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml @@ -236,6 +236,7 @@ SENSOR_ZA_CO2M_PMM_HCHO: - zone_air_formaldehyde_concentration_sensor SENSOR_WDPM: + guid: "cd28badd-dbed-4104-932a-e83a2a4e947c" description: "Sensor with differential pressure monitor" is_canonical: true implements: diff --git a/ontology/yaml/resources/HVAC/entity_types/VLV.yaml b/ontology/yaml/resources/HVAC/entity_types/VLV.yaml index 882840af1..76a49ec24 100644 --- a/ontology/yaml/resources/HVAC/entity_types/VLV.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/VLV.yaml @@ -67,6 +67,7 @@ VLV_SWCM: - SWCM VLV_MWCM: + guid: "4a102754-83a1-4a6a-9ad4-c919677d185f" description: "Motorized water valve control and monitoring." is_canonical: true implements: diff --git a/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml index 66a0fa267..6d4f11d14 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml @@ -1,37 +1,39 @@ -# Copyright 2022 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the License); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an AS IS BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -### CANONICAL TYPES - -WSR_STD: - description: "Standard water softener." - is_canonical: true - implements: - - WSR - uses: - - run_mode - opt_uses: - - water_flowrate_status - -WSR_AL: - description: "Standard water softener with alarms." - is_canonical: true - implements: - - WSR - - AL - uses: - - run_mode - - lost_power_alarm - opt_uses: +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +### CANONICAL TYPES + +WSR_STD: + guid: "9d768dfb-547d-40cf-9af2-6a4e01d8f284" + description: "Standard water softener." + is_canonical: true + implements: + - WSR + uses: + - run_mode + opt_uses: + - water_flowrate_status + +WSR_AL: + guid: "b1e9300f-e4e1-419d-af6f-ecea599919ec" + description: "Standard water softener with alarms." + is_canonical: true + implements: + - WSR + - AL + uses: + - run_mode + - lost_power_alarm + opt_uses: - water_flowrate_status \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index b92b27948..7f3a12b1d 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -48,6 +48,7 @@ FACP_PAS_AL: - air_pressure_status FACP_AL: + guid: "4f71f3df-ed93-498b-aea3-1ab444055c84" description: "Fire alarm panel with alarm." is_canonical: true implements: @@ -58,6 +59,7 @@ FACP_AL: - supervisor_alarm FACP_FA2X_GS_AL: + guid: "3bbda411-751e-43d2-92c8-ce11cb2fa03a" description: "Fire alarm panel with 2-level alarm and gas suppression." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml index 7b1513652..6527cf2bb 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml @@ -18,6 +18,7 @@ HDS_STD: + guid: "4eaf243f-7e9b-4f34-a159-409cfee5d51d" description: "Standard Hydrogen sensor." implements: - HDS From 839682866f8d179d23eea6f3530b7e5eb92a6136 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Thu, 30 Mar 2023 09:03:29 +0800 Subject: [PATCH 13/45] update for PR #794 - fixes fire alarms,etc --- .../yaml/resources/HVAC/entity_types/DMP.yaml | 10 ---- .../yaml/resources/HVAC/entity_types/FCU.yaml | 56 ++++++++++--------- .../HVAC/entity_types/GENERALTYPES.yaml | 6 -- .../PLUMBING/entity_types/ABSTRACT.yaml | 12 +--- .../resources/PLUMBING/entity_types/WSR.yaml | 14 ----- .../SAFETY/entity_types/ABSTRACT.yaml | 16 ++++-- .../{HVAC => SAFETY}/entity_types/EHT.yaml | 1 + .../resources/SAFETY/entity_types/FACP.yaml | 35 +++--------- .../resources/SAFETY/entity_types/FSS.yaml | 23 +++++--- .../SAFETY/entity_types/GENERALTYPES.yaml | 10 ++++ .../resources/SAFETY/entity_types/MFSD.yaml | 24 ++++++++ .../resources/fields/telemetry_fields.yaml | 13 ++--- 12 files changed, 106 insertions(+), 114 deletions(-) rename ontology/yaml/resources/{HVAC => SAFETY}/entity_types/EHT.yaml (94%) create mode 100644 ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml diff --git a/ontology/yaml/resources/HVAC/entity_types/DMP.yaml b/ontology/yaml/resources/HVAC/entity_types/DMP.yaml index 8d3abdd3f..11c0fc978 100644 --- a/ontology/yaml/resources/HVAC/entity_types/DMP.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/DMP.yaml @@ -83,16 +83,6 @@ DMP_EDBPC_ZTM: - EDBPC - ZTM -DMP_MFSD: - description: "Motorized fire smoke damper." - is_canonical: true - implements: - - DMP - - MFSD - uses: - - motorized_damper_position_command - - motorized_damper_position_status - ################################### ### Existing Non-standard Types ### ################################### diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index c865af771..d7c2b2afd 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1648,33 +1648,6 @@ FCU_RTC_RHDHS_DTM_DFSS: - fire_alarm - schedule_run_command -FCU_DXZTC: - guid: "9a927a3f-2c3c-4516-b934-9ee1fa1fc89d" - description: "FCU with SS, discharge temp sensors, zone control and sensor, filter change" - is_canonical: true - implements: - - FCU - - DXZTC - uses: - - panel_controller_status - - filter_alarm - -FCU_RHDHS_DXRC: - guid: "5e7fdbec-85f0-4b4b-a205-3864198d37c5" - description: "FCU with temperature & pressure monitor, humidity monitor and water leak & status alarm." - is_canonical: true - implements: - - FCU - - RHDHS - - DXRC - uses: - - fan_run_status - - water_leak_detection_alarm - - failed_alarm - - low_discharge_air_flowrate_alarm - - high_air_static_pressure_alarm - - low_air_static_pressure_alarm - FCU_DFVSC_CHWZC_CSP_RTM_WDT: guid: "8c3dc3ea-8344-4a5a-85c1-5f1491f7c256" description: "Hydronic cooling or heating fan coil unit with cooling temperature setpoint control" @@ -1715,3 +1688,32 @@ FCU_DSP_DFVSC_DTM_RTM: - DFVSC - DTM - RTM + + +FCU_DXZTC_DFSS: + guid: "38271d04-f2a1-417c-a3af-b2a2299c7979" + description: "FCU with SS, discharge temp sensors, zone control and sensor, filter change" + is_canonical: true + implements: + - FCU + - DXZTC + - DFSS + opt_uses: + - panel_controller_status + - filter_alarm + +FCU_RHDHS_DXDC_DFSS: + guid: "958c49e9-464b-4e17-beda-07fbbf1b9e97" + description: "FCU with temperature & pressure monitor, humidity monitor and water leak & status alarm." + is_canonical: true + implements: + - FCU + - RHDHS + - DXDC + - DFSS + opt_uses: + - water_leak_detection_alarm + - failed_alarm + - failed_discharge_fan_alarm + - high_air_static_pressure_alarm + - low_air_static_pressure_alarm diff --git a/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml index bcf5f397a..dec6f1aba 100644 --- a/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml @@ -444,9 +444,3 @@ CRREF: - failed_communication_alarm implements: - EQUIPMENT - -EHT: - description: "Tag for heat tracer." - is_abstract: true - implements: - - EQUIPMENT diff --git a/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml index 8370fef6c..c10ee32ed 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml @@ -38,21 +38,13 @@ LVLM: WCR: description: "Water conditioner" is_abstract: true - uses: - - run_status implements: + - /SS - EQUIPMENT WSR: description: "Water softener" is_abstract: true - uses: - - run_status - implements: - - EQUIPMENT - -AL: - description: "Tag for those with alarms" - is_abstract: true implements: + - /SS - EQUIPMENT diff --git a/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml index 6d4f11d14..348e7a1f5 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml @@ -20,20 +20,6 @@ WSR_STD: is_canonical: true implements: - WSR - uses: - - run_mode opt_uses: - water_flowrate_status - -WSR_AL: - guid: "b1e9300f-e4e1-419d-af6f-ecea599919ec" - description: "Standard water softener with alarms." - is_canonical: true - implements: - - WSR - - AL - uses: - - run_mode - lost_power_alarm - opt_uses: - - water_flowrate_status \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index 0bffd7fa7..6dafb358e 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -79,9 +79,6 @@ FA2X: uses: - fire_alarm_1 - fire_alarm_2 - opt_uses: - - primary_fire_alarm - - secondary_fire_alarm WLS: guid: "16a99ce4-3298-4f9a-9ba8-41edec6a48c8" @@ -97,8 +94,17 @@ LM: uses: - level_status -AL: - description: "Tag for those with alarms" +MDC: + description: "Tag for those with motorized dampers" + is_abstract: true + implements: + - EQUIPMENT + uses: + - motorized_damper_position_status + - motorized_damper_position_command + +EHT: + description: "Tag for heat tracer." is_abstract: true implements: - EQUIPMENT \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/EHT.yaml b/ontology/yaml/resources/SAFETY/entity_types/EHT.yaml similarity index 94% rename from ontology/yaml/resources/HVAC/entity_types/EHT.yaml rename to ontology/yaml/resources/SAFETY/entity_types/EHT.yaml index 5e3818fe0..90ace530b 100644 --- a/ontology/yaml/resources/HVAC/entity_types/EHT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/EHT.yaml @@ -18,6 +18,7 @@ EHT_SS: + guid: "9c6784e8-edfa-4110-84be-d7b1e71514a2" description: "Basic heat tracer with start/stop" is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index 7f3a12b1d..96eccb0d9 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -34,40 +34,21 @@ FACP_FA2X: opt_uses: - panel_alarm -FACP_PAS_AL: - guid: "34d56a9a-15ca-4921-a851-eb13c7be7dfd" - description: "Fire alarm panel with Pre-action suppression with alarm." - is_canonical: true - implements: - - FACP - - AL - uses: - - fire_alarm - - supervisor_alarm - - water_flowrate_status - - air_pressure_status - -FACP_AL: - guid: "4f71f3df-ed93-498b-aea3-1ab444055c84" +FACP_ALM: description: "Fire alarm panel with alarm." is_canonical: true implements: - FACP - - AL uses: - fire_alarm - - supervisor_alarm + opt_uses: + - failed_panel_alarm -FACP_FA2X_GS_AL: - guid: "3bbda411-751e-43d2-92c8-ce11cb2fa03a" - description: "Fire alarm panel with 2-level alarm and gas suppression." +FACP_ASD: + description: "Basic aspirating type, fire detection with alarms." is_canonical: true implements: - FACP - - FA2X - - AL - uses: - - primary_fire_alarm - - secondary_fire_alarm - - supervisor_alarm - - gas_release_status + - ASD + opt_uses: + - failed_panel_alarm diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index 451670db4..e87a1bf39 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -24,15 +24,24 @@ FSS_STD: uses: - fire_alarm -FSS_ASD_AL: - description: "Basic aspirating type, fire suppression with alarms." +FSS_PAS: + description: "Fire alarm panel with Pre-action suppression with alarm." is_canonical: true implements: - FSS - - ASD - - AL uses: - - primary_smoke_alarm - - secondary_smoke_alarm - fire_alarm - - supervisor_alarm + - failed_panel_alarm + - water_flowrate_status + - air_pressure_status + +FSS_FA2X_GS: + guid: "8d99b865-98d3-431f-bd28-fe04c853e396" + description: "Fire alarm panel with 2-level alarm and gas suppression." + is_canonical: true + implements: + - FSS + - FA2X + uses: + - failed_panel_alarm + - gas_release_status diff --git a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml index 4e135650a..4937a4b3e 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml @@ -109,6 +109,10 @@ ASD: is_abstract: true implements: - EQUIPMENT + opt_uses: + - low_smoke_alarm + - medium_smoke_alarm + - fire_alarm HDS: guid: "025f5773-7626-4a30-bd44-ef0845a92215" @@ -116,3 +120,9 @@ HDS: is_abstract: true implements: - /SENSOR + +MFSD: + description: "Motorized fire smoke damper" + is_abstract: true + implements: + - EQUIPMENT \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml new file mode 100644 index 000000000..dbccb9f3d --- /dev/null +++ b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml @@ -0,0 +1,24 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Canonical types + + +MFSD_MDC: + guid: "fbfb943b-04b7-4d80-9bc3-1f1d6d8db99f" + description: "Basic fire suppression with motorized dampers." + is_canonical: true + implements: + - MFSD + - MDC \ No newline at end of file diff --git a/ontology/yaml/resources/fields/telemetry_fields.yaml b/ontology/yaml/resources/fields/telemetry_fields.yaml index 46b626c3f..72dd8596c 100644 --- a/ontology/yaml/resources/fields/telemetry_fields.yaml +++ b/ontology/yaml/resources/fields/telemetry_fields.yaml @@ -1575,16 +1575,13 @@ literals: - OPEN - CLOSED -- primary_fire_alarm: # better than using fire_alarm_1 (which will lead to fire_alarm_1_23) +- failed_panel_alarm: - ACTIVE - INACTIVE -- secondary_fire_alarm: +- low_smoke_alarm: # for aspirating type smoke detectors - ACTIVE - INACTIVE -- primary_smoke_alarm: # for aspirating type smoke detectors - - ACTIVE - - INACTIVE -- secondary_smoke_alarm: # for aspirating type smoke detectors +- medium_smoke_alarm: # for aspirating type smoke detectors - ACTIVE - INACTIVE - particle_concentration_alarm: @@ -1593,10 +1590,10 @@ literals: - low_battery_alarm: - ACTIVE - INACTIVE -- load_bypass_mode: +- load_bypass_status: - OFF - ON -- battery_mode: +- use_battery_status: - OFF - ON - gas_release_status: From 96769eda5fb7696011de5a4c378d165c6aa08ab9 Mon Sep 17 00:00:00 2001 From: db-robot Date: Thu, 30 Mar 2023 01:03:46 +0000 Subject: [PATCH 14/45] Add GUIDs to new entity types --- ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml | 2 ++ ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml | 2 ++ ontology/yaml/resources/SAFETY/entity_types/FACP.yaml | 2 ++ ontology/yaml/resources/SAFETY/entity_types/FSS.yaml | 1 + ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml | 2 ++ 5 files changed, 9 insertions(+) diff --git a/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml index c10ee32ed..2f0305db4 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml @@ -36,6 +36,7 @@ LVLM: - percentage_sensor WCR: + guid: "4dcd2843-a2bc-4cf0-8da6-3595da415120" description: "Water conditioner" is_abstract: true implements: @@ -43,6 +44,7 @@ WCR: - EQUIPMENT WSR: + guid: "b01b5597-f6a0-43e0-9c24-4a90f530874b" description: "Water softener" is_abstract: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index 6dafb358e..e30e387bd 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -95,6 +95,7 @@ LM: - level_status MDC: + guid: "98048385-3819-4f8e-9c45-2f868b91d686" description: "Tag for those with motorized dampers" is_abstract: true implements: @@ -104,6 +105,7 @@ MDC: - motorized_damper_position_command EHT: + guid: "5706d4c8-be7a-45fd-a94c-347a1b225569" description: "Tag for heat tracer." is_abstract: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index 96eccb0d9..2aa0e4802 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -35,6 +35,7 @@ FACP_FA2X: - panel_alarm FACP_ALM: + guid: "c8858bab-a98c-4586-a236-1e5797b37161" description: "Fire alarm panel with alarm." is_canonical: true implements: @@ -45,6 +46,7 @@ FACP_ALM: - failed_panel_alarm FACP_ASD: + guid: "82aca545-20fa-4f4e-8e54-ef8c09938c6c" description: "Basic aspirating type, fire detection with alarms." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index e87a1bf39..aa58fdb6d 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -25,6 +25,7 @@ FSS_STD: - fire_alarm FSS_PAS: + guid: "4f48dbd6-6f9a-4bb6-9062-b9d398bbfc95" description: "Fire alarm panel with Pre-action suppression with alarm." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml index 4937a4b3e..c69674317 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml @@ -105,6 +105,7 @@ SSS: - /SENSOR ASD: + guid: "caff049c-045c-44d3-943e-4acd2ccad03c" description: "Aspirating type, smoke detector" is_abstract: true implements: @@ -122,6 +123,7 @@ HDS: - /SENSOR MFSD: + guid: "27cbded8-5f48-4c65-8b1f-e2fc1a8aac1b" description: "Motorized fire smoke damper" is_abstract: true implements: From 247ce3c99885e36e90a7708b5ace8b201df46a03 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Fri, 14 Apr 2023 10:25:15 +0800 Subject: [PATCH 15/45] minor fix on BBM --- .../yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml | 8 +++++--- ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml | 2 -- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml index e3fbe535d..1d8b79fc6 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml @@ -184,8 +184,10 @@ SRC2: - source2_lost_power_alarm BBM: - description: "For UPS with Load Bypass and Battery mode." + description: "For UPS with Load Bypass and Battery status." is_abstract: true uses: - - load_bypass_mode - - battery_mode \ No newline at end of file + - load_bypass_status + - use_battery_status + opt_uses: + - low_battery_alarm \ No newline at end of file diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml index 455eaf658..9e39690fd 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml @@ -74,8 +74,6 @@ UPS_SS_BBM: - UPS - SS - BBM - uses: - - low_battery_alarm UPS_PWM: guid: "64f90598-969d-4cf6-ace6-50793a46aed8" From 752cf9cb70c381a5d0f55c6a063a7ce6256d6e7e Mon Sep 17 00:00:00 2001 From: db-robot Date: Tue, 18 Apr 2023 08:09:29 +0000 Subject: [PATCH 16/45] Add GUIDs to new entity types --- .../ELECTRICAL/entity_types/ABSTRACT.yaml | 1 + .../resources/METERS/entity_types/WM.yaml | 1 + .../PLUMBING/entity_types/ABSTRACT.yaml | 2 + .../PLUMBING/entity_types/GENERALTYPES.yaml | 1 + .../resources/PLUMBING/entity_types/VLV.yaml | 62 ++++++++++--------- .../SAFETY/entity_types/ABSTRACT.yaml | 1 + 6 files changed, 38 insertions(+), 30 deletions(-) diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml index c662c85d8..929db27a9 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml @@ -184,6 +184,7 @@ SRC2: - source2_lost_power_alarm BBM: + guid: "19a1ccef-bf9b-437a-ae4e-f7214e2ce75c" description: "For UPS with Load Bypass and Battery status." is_abstract: true uses: diff --git a/ontology/yaml/resources/METERS/entity_types/WM.yaml b/ontology/yaml/resources/METERS/entity_types/WM.yaml index fa85f3496..5092c6c69 100644 --- a/ontology/yaml/resources/METERS/entity_types/WM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/WM.yaml @@ -37,6 +37,7 @@ WM_WF: - water_volume_accumulator WM_WFM: + guid: "2a9b7978-0009-422e-8c15-5038b133671e" description: "Generic water flow rate meter." implements: - WM diff --git a/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml index b0ad53c31..c71a09730 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml @@ -36,6 +36,7 @@ LVLM: - percentage_sensor SWCM: + guid: "66cfede5-b839-4504-82ac-60f89f7bbb45" description: "Solenoid water valve control and monitoring." is_abstract: true uses: @@ -43,6 +44,7 @@ SWCM: - valve_status MWCM: + guid: "813c8a91-7f08-47ac-af20-95dda60f3211" description: "Motorized water valve control and monitoring." is_abstract: true uses: diff --git a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml index 59346777f..e461bf3af 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml @@ -42,6 +42,7 @@ RO: - EQUIPMENT VLV: + guid: "ffa75634-a382-494f-a75e-bcd41cb98f2e" description: "Tag for valves. Valves are devices which control the flow of water. " is_abstract: true opt_uses: diff --git a/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml b/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml index ba9157d52..b427b25d8 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml @@ -1,31 +1,33 @@ -# Copyright 2023 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the License); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an AS IS BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -######################## -### Canonical Types ### -######################## - -VLV_SWCM: - description: "Solenoid water valve control and monitoring." - is_canonical: true - implements: - - VLV - - SWCM - -VLV_MWCM: - description: "Motorized water valve control and monitoring." - is_canonical: true - implements: - - VLV +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +######################## +### Canonical Types ### +######################## + +VLV_SWCM: + guid: "0ebc80de-36a6-4250-b453-55c62aa5021f" + description: "Solenoid water valve control and monitoring." + is_canonical: true + implements: + - VLV + - SWCM + +VLV_MWCM: + guid: "5e0a1315-3a80-465f-9cb1-60b58d2f2b86" + description: "Motorized water valve control and monitoring." + is_canonical: true + implements: + - VLV - MWCM \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index f97f2ca86..db47d79b6 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -112,6 +112,7 @@ EHT: - EQUIPMENT ASD: + guid: "78bb60a3-ed15-4c20-8428-a636f2b94c0d" description: "Aspirating type, smoke detector" is_abstract: true implements: From df3284ee947dee621cc616aaac211b3f9535ee1d Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Tue, 18 Apr 2023 16:09:38 +0800 Subject: [PATCH 17/45] updated fixes --- .../ELECTRICAL/entity_types/ABSTRACT.yaml | 2 +- .../resources/HVAC/entity_types/ABSTRACT.yaml | 4 +-- .../yaml/resources/HVAC/entity_types/FCU.yaml | 2 +- .../resources/METERS/entity_types/WM.yaml | 11 +++++++ .../PLUMBING/entity_types/ABSTRACT.yaml | 14 +++++++++ .../PLUMBING/entity_types/GENERALTYPES.yaml | 8 +++++ .../resources/PLUMBING/entity_types/VLV.yaml | 31 +++++++++++++++++++ .../resources/PLUMBING/entity_types/WSR.yaml | 3 +- .../SAFETY/entity_types/ABSTRACT.yaml | 16 ++++++++-- .../resources/SAFETY/entity_types/FACP.yaml | 12 +++++++ .../SAFETY/entity_types/GENERALTYPES.yaml | 11 ------- .../resources/fields/telemetry_fields.yaml | 27 ++++------------ .../yaml/resources/subfields/subfields.yaml | 1 - 13 files changed, 101 insertions(+), 41 deletions(-) create mode 100644 ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml index 1d8b79fc6..c662c85d8 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml @@ -188,6 +188,6 @@ BBM: is_abstract: true uses: - load_bypass_status - - use_battery_status + - battery_status opt_uses: - low_battery_alarm \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml index 740758cad..8fb2417a4 100644 --- a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml @@ -6285,8 +6285,8 @@ MWCM: description: "Motorized water valve control and monitoring." is_abstract: true uses: - - motorized_valve_position_command - - motorized_valve_position_status + - valve_command + - valve_status SCRSS: guid: "636b1262-b08b-4e1b-b130-e1a510b79a0c" diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index d7c2b2afd..ce0f6e28e 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1699,7 +1699,7 @@ FCU_DXZTC_DFSS: - DXZTC - DFSS opt_uses: - - panel_controller_status + - failed_alarm - filter_alarm FCU_RHDHS_DXDC_DFSS: diff --git a/ontology/yaml/resources/METERS/entity_types/WM.yaml b/ontology/yaml/resources/METERS/entity_types/WM.yaml index 769ea3f3d..fa85f3496 100644 --- a/ontology/yaml/resources/METERS/entity_types/WM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/WM.yaml @@ -35,3 +35,14 @@ WM_WF: opt_uses: - water_linearvelocity_sensor - water_volume_accumulator + +WM_WFM: + description: "Generic water flow rate meter." + implements: + - WM + is_canonical: true + uses: + - water_flowrate_sensor + opt_uses: + - water_volume_accumulator + - water_linearvelocity_sensor \ No newline at end of file diff --git a/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml index 2f0305db4..b0ad53c31 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml @@ -35,6 +35,20 @@ LVLM: opt_uses: - percentage_sensor +SWCM: + description: "Solenoid water valve control and monitoring." + is_abstract: true + uses: + - valve_command + - valve_status + +MWCM: + description: "Motorized water valve control and monitoring." + is_abstract: true + uses: + - valve_command + - valve_status + WCR: guid: "4dcd2843-a2bc-4cf0-8da6-3595da415120" description: "Water conditioner" diff --git a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml index a54b24d52..59346777f 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml @@ -40,4 +40,12 @@ RO: is_abstract: true implements: - EQUIPMENT + +VLV: + description: "Tag for valves. Valves are devices which control the flow of water. " + is_abstract: true + opt_uses: + - failed_communication_alarm + implements: + - EQUIPMENT diff --git a/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml b/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml new file mode 100644 index 000000000..ba9157d52 --- /dev/null +++ b/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml @@ -0,0 +1,31 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +######################## +### Canonical Types ### +######################## + +VLV_SWCM: + description: "Solenoid water valve control and monitoring." + is_canonical: true + implements: + - VLV + - SWCM + +VLV_MWCM: + description: "Motorized water valve control and monitoring." + is_canonical: true + implements: + - VLV + - MWCM \ No newline at end of file diff --git a/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml index 348e7a1f5..27bda562c 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml @@ -20,6 +20,7 @@ WSR_STD: is_canonical: true implements: - WSR - opt_uses: + uses: - water_flowrate_status + opt_uses: - lost_power_alarm diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index e30e387bd..f97f2ca86 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -101,12 +101,22 @@ MDC: implements: - EQUIPMENT uses: - - motorized_damper_position_status - - motorized_damper_position_command + - damper_status + - damper_command EHT: guid: "5706d4c8-be7a-45fd-a94c-347a1b225569" description: "Tag for heat tracer." is_abstract: true implements: - - EQUIPMENT \ No newline at end of file + - EQUIPMENT + +ASD: + description: "Aspirating type, smoke detector" + is_abstract: true + implements: + - EQUIPMENT + opt_uses: + - low_smoke_alarm + - medium_smoke_alarm + - fire_alarm diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index 2aa0e4802..315ff8fc4 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -34,6 +34,18 @@ FACP_FA2X: opt_uses: - panel_alarm +FACP_PAS: + guid: "34d56a9a-15ca-4921-a851-eb13c7be7dfd" + description: "Fire alarm panel with Pre-action suppression." + is_canonical: true + implements: + - FACP + uses: + - fire_alarm + - supervisor_alarm + - water_flowrate_status + - air_pressure_status + FACP_ALM: guid: "c8858bab-a98c-4586-a236-1e5797b37161" description: "Fire alarm panel with alarm." diff --git a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml index c69674317..dc4dec0a3 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml @@ -104,17 +104,6 @@ SSS: implements: - /SENSOR -ASD: - guid: "caff049c-045c-44d3-943e-4acd2ccad03c" - description: "Aspirating type, smoke detector" - is_abstract: true - implements: - - EQUIPMENT - opt_uses: - - low_smoke_alarm - - medium_smoke_alarm - - fire_alarm - HDS: guid: "025f5773-7626-4a30-bd44-ef0845a92215" description: "Hydrogen Sensor." diff --git a/ontology/yaml/resources/fields/telemetry_fields.yaml b/ontology/yaml/resources/fields/telemetry_fields.yaml index 60fac6ac0..10f23647b 100644 --- a/ontology/yaml/resources/fields/telemetry_fields.yaml +++ b/ontology/yaml/resources/fields/telemetry_fields.yaml @@ -1597,31 +1597,13 @@ literals: - load_bypass_status: - OFF - ON -- use_battery_status: - - OFF - - ON - gas_release_status: - OPEN - CLOSED -- panel_controller_status: - - NORMAL - - UNKNOWN -- motorized_valve_position_command: - - CLOSED - - OPEN -- motorized_valve_position_status: - - CLOSED - - OPEN -- motorized_damper_position_command: - - CLOSED - - OPEN -- motorized_damper_position_status: - - CLOSED - - OPEN -- high_air_static_pressure_alarm: +- high_discharge_air_static_pressure_alarm: - ACTIVE - INACTIVE -- low_air_static_pressure_alarm: +- low_discharge_air_static_pressure_alarm: - ACTIVE - INACTIVE @@ -2116,10 +2098,13 @@ literals: - OPEN - CLOSED -# Damper status +# Dampers - damper_status: - OPEN - CLOSED +- damper_command: + - OPEN + - CLOSED - lighting_percentage_sensor: # For relative ranged illuminance inputs. fixed_min: 0.0 fixed_max: 100.0 diff --git a/ontology/yaml/resources/subfields/subfields.yaml b/ontology/yaml/resources/subfields/subfields.yaml index 48b43cdcf..93e38d6e4 100644 --- a/ontology/yaml/resources/subfields/subfields.yaml +++ b/ontology/yaml/resources/subfields/subfields.yaml @@ -164,7 +164,6 @@ descriptor: mixed: "Process or component used to mix multiple streams of air." mixing: "Process of mixing substance." model: "Particular design version of an asset (e.g. model_label)." - motorized: "Process or component driven by a motor" neutral: "Line in the electrical cirucit which carries current back to the source. Distinct from ground." next: "Something that occurs directly in time after the present or most recent one." no: "Nitrogen monoxide, a colorless gas. It is a toxic air pollutant." From 4093d4c16938864446f0e14f38437b8dccd738f0 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Tue, 25 Apr 2023 14:21:54 +0800 Subject: [PATCH 18/45] small updates for PR 794 --- .../yaml/resources/HVAC/entity_types/FCU.yaml | 4 +-- .../resources/METERS/entity_types/WM.yaml | 5 ++-- .../PLUMBING/entity_types/ABSTRACT.yaml | 26 ++----------------- .../PLUMBING/entity_types/GENERALTYPES.yaml | 15 ++++++++++- 4 files changed, 21 insertions(+), 29 deletions(-) diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index ce0f6e28e..beae71572 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1715,5 +1715,5 @@ FCU_RHDHS_DXDC_DFSS: - water_leak_detection_alarm - failed_alarm - failed_discharge_fan_alarm - - high_air_static_pressure_alarm - - low_air_static_pressure_alarm + - high_discharge_air_static_pressure_alarm + - low_discharge_air_static_pressure_alarm diff --git a/ontology/yaml/resources/METERS/entity_types/WM.yaml b/ontology/yaml/resources/METERS/entity_types/WM.yaml index fa85f3496..99b04a2d0 100644 --- a/ontology/yaml/resources/METERS/entity_types/WM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/WM.yaml @@ -26,13 +26,14 @@ WM_STANDARD: WM_WF: guid: "df942136-4b98-4da7-9e68-acc210d6cf03" - description: "Water flow rate meter with counter." + description: "Water supply flow rate meter with counter." implements: - WM is_canonical: true uses: - - water_flowrate_sensor + - supply_water_flowrate_sensor opt_uses: + - supply_water_volume_accumulator - water_linearvelocity_sensor - water_volume_accumulator diff --git a/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml index b0ad53c31..fc85e3b33 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/ABSTRACT.yaml @@ -35,32 +35,10 @@ LVLM: opt_uses: - percentage_sensor -SWCM: - description: "Solenoid water valve control and monitoring." +WVCM: + description: "Water valve control and monitoring." is_abstract: true uses: - valve_command - valve_status -MWCM: - description: "Motorized water valve control and monitoring." - is_abstract: true - uses: - - valve_command - - valve_status - -WCR: - guid: "4dcd2843-a2bc-4cf0-8da6-3595da415120" - description: "Water conditioner" - is_abstract: true - implements: - - /SS - - EQUIPMENT - -WSR: - guid: "b01b5597-f6a0-43e0-9c24-4a90f530874b" - description: "Water softener" - is_abstract: true - implements: - - /SS - - EQUIPMENT diff --git a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml index 59346777f..6fc260a3f 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml @@ -48,4 +48,17 @@ VLV: - failed_communication_alarm implements: - EQUIPMENT - + +WCR: + description: "Water conditioner" + is_abstract: true + implements: + - /SS + - EQUIPMENT + +WSR: + description: "Water softener" + is_abstract: true + implements: + - /SS + - EQUIPMENT From ccbd2c60fb6bc0c0a77b1a4cab44ba4a8f5941a9 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Tue, 25 Apr 2023 14:37:36 +0800 Subject: [PATCH 19/45] fix for update PR 794 --- .../yaml/resources/PLUMBING/entity_types/VLV.yaml | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml b/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml index b427b25d8..0110babcc 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml @@ -16,18 +16,9 @@ ### Canonical Types ### ######################## -VLV_SWCM: - guid: "0ebc80de-36a6-4250-b453-55c62aa5021f" +VLV_WVCM: description: "Solenoid water valve control and monitoring." is_canonical: true implements: - VLV - - SWCM - -VLV_MWCM: - guid: "5e0a1315-3a80-465f-9cb1-60b58d2f2b86" - description: "Motorized water valve control and monitoring." - is_canonical: true - implements: - - VLV - - MWCM \ No newline at end of file + - WVCM From fa67e615937312bf87604253f8dd26cc648f702e Mon Sep 17 00:00:00 2001 From: db-robot Date: Tue, 25 Apr 2023 06:37:29 +0000 Subject: [PATCH 20/45] Add GUIDs to new entity types --- ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml b/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml index 0110babcc..526321e8b 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml @@ -17,6 +17,7 @@ ######################## VLV_WVCM: + guid: "5e2412fe-9c9f-4699-9b91-d17ecf56be59" description: "Solenoid water valve control and monitoring." is_canonical: true implements: From c40a34eef2fc8114f3517b4618149b265235e077 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Mon, 19 Jun 2023 16:35:19 +0800 Subject: [PATCH 21/45] removed HVAC/VLV_MWCM, cleaned guids --- .../yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml | 1 - ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml | 8 -------- ontology/yaml/resources/HVAC/entity_types/FCU.yaml | 2 -- ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml | 1 - ontology/yaml/resources/HVAC/entity_types/VLV.yaml | 8 -------- ontology/yaml/resources/METERS/entity_types/WM.yaml | 1 - .../resources/PLUMBING/entity_types/GENERALTYPES.yaml | 1 - ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml | 1 - ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml | 1 - ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml | 3 --- ontology/yaml/resources/SAFETY/entity_types/EHT.yaml | 1 - ontology/yaml/resources/SAFETY/entity_types/FACP.yaml | 2 -- ontology/yaml/resources/SAFETY/entity_types/FSS.yaml | 2 -- .../yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml | 1 - ontology/yaml/resources/SAFETY/entity_types/HDS.yaml | 1 - ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml | 1 - 16 files changed, 35 deletions(-) diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml index 929db27a9..c662c85d8 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml @@ -184,7 +184,6 @@ SRC2: - source2_lost_power_alarm BBM: - guid: "19a1ccef-bf9b-437a-ae4e-f7214e2ce75c" description: "For UPS with Load Bypass and Battery status." is_abstract: true uses: diff --git a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml index 1e4125167..1e80d1d70 100644 --- a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml @@ -6282,14 +6282,6 @@ SWCM: - valve_command - valve_status -MWCM: - guid: "817a97fb-124e-4039-b26a-636188194dcc" - description: "Motorized water valve control and monitoring." - is_abstract: true - uses: - - valve_command - - valve_status - SCRSS: guid: "636b1262-b08b-4e1b-b130-e1a510b79a0c" description: "Scurbber start stop monitoring." diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index beae71572..cd9dd371e 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1691,7 +1691,6 @@ FCU_DSP_DFVSC_DTM_RTM: FCU_DXZTC_DFSS: - guid: "38271d04-f2a1-417c-a3af-b2a2299c7979" description: "FCU with SS, discharge temp sensors, zone control and sensor, filter change" is_canonical: true implements: @@ -1703,7 +1702,6 @@ FCU_DXZTC_DFSS: - filter_alarm FCU_RHDHS_DXDC_DFSS: - guid: "958c49e9-464b-4e17-beda-07fbbf1b9e97" description: "FCU with temperature & pressure monitor, humidity monitor and water leak & status alarm." is_canonical: true implements: diff --git a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml index 977feb463..5606f7b1d 100644 --- a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml @@ -236,7 +236,6 @@ SENSOR_ZA_CO2M_PMM_HCHO: - zone_air_formaldehyde_concentration_sensor SENSOR_WDPM: - guid: "cd28badd-dbed-4104-932a-e83a2a4e947c" description: "Sensor with differential pressure monitor" is_canonical: true implements: diff --git a/ontology/yaml/resources/HVAC/entity_types/VLV.yaml b/ontology/yaml/resources/HVAC/entity_types/VLV.yaml index 76a49ec24..b22f74805 100644 --- a/ontology/yaml/resources/HVAC/entity_types/VLV.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/VLV.yaml @@ -65,11 +65,3 @@ VLV_SWCM: implements: - VLV - SWCM - -VLV_MWCM: - guid: "4a102754-83a1-4a6a-9ad4-c919677d185f" - description: "Motorized water valve control and monitoring." - is_canonical: true - implements: - - VLV - - MWCM \ No newline at end of file diff --git a/ontology/yaml/resources/METERS/entity_types/WM.yaml b/ontology/yaml/resources/METERS/entity_types/WM.yaml index 457ea68b4..99b04a2d0 100644 --- a/ontology/yaml/resources/METERS/entity_types/WM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/WM.yaml @@ -38,7 +38,6 @@ WM_WF: - water_volume_accumulator WM_WFM: - guid: "2a9b7978-0009-422e-8c15-5038b133671e" description: "Generic water flow rate meter." implements: - WM diff --git a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml index c090ec335..6fc260a3f 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml @@ -42,7 +42,6 @@ RO: - EQUIPMENT VLV: - guid: "ffa75634-a382-494f-a75e-bcd41cb98f2e" description: "Tag for valves. Valves are devices which control the flow of water. " is_abstract: true opt_uses: diff --git a/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml b/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml index 526321e8b..0110babcc 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml @@ -17,7 +17,6 @@ ######################## VLV_WVCM: - guid: "5e2412fe-9c9f-4699-9b91-d17ecf56be59" description: "Solenoid water valve control and monitoring." is_canonical: true implements: diff --git a/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml index 27bda562c..cf48eac2f 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml @@ -15,7 +15,6 @@ ### CANONICAL TYPES WSR_STD: - guid: "9d768dfb-547d-40cf-9af2-6a4e01d8f284" description: "Standard water softener." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index db47d79b6..dac643778 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -95,7 +95,6 @@ LM: - level_status MDC: - guid: "98048385-3819-4f8e-9c45-2f868b91d686" description: "Tag for those with motorized dampers" is_abstract: true implements: @@ -105,14 +104,12 @@ MDC: - damper_command EHT: - guid: "5706d4c8-be7a-45fd-a94c-347a1b225569" description: "Tag for heat tracer." is_abstract: true implements: - EQUIPMENT ASD: - guid: "78bb60a3-ed15-4c20-8428-a636f2b94c0d" description: "Aspirating type, smoke detector" is_abstract: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/EHT.yaml b/ontology/yaml/resources/SAFETY/entity_types/EHT.yaml index 90ace530b..5e3818fe0 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/EHT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/EHT.yaml @@ -18,7 +18,6 @@ EHT_SS: - guid: "9c6784e8-edfa-4110-84be-d7b1e71514a2" description: "Basic heat tracer with start/stop" is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index 315ff8fc4..8da0bbe1c 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -47,7 +47,6 @@ FACP_PAS: - air_pressure_status FACP_ALM: - guid: "c8858bab-a98c-4586-a236-1e5797b37161" description: "Fire alarm panel with alarm." is_canonical: true implements: @@ -58,7 +57,6 @@ FACP_ALM: - failed_panel_alarm FACP_ASD: - guid: "82aca545-20fa-4f4e-8e54-ef8c09938c6c" description: "Basic aspirating type, fire detection with alarms." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index aa58fdb6d..f89bc8ca3 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -25,7 +25,6 @@ FSS_STD: - fire_alarm FSS_PAS: - guid: "4f48dbd6-6f9a-4bb6-9062-b9d398bbfc95" description: "Fire alarm panel with Pre-action suppression with alarm." is_canonical: true implements: @@ -37,7 +36,6 @@ FSS_PAS: - air_pressure_status FSS_FA2X_GS: - guid: "8d99b865-98d3-431f-bd28-fe04c853e396" description: "Fire alarm panel with 2-level alarm and gas suppression." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml index dc4dec0a3..e68eeb90c 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml @@ -112,7 +112,6 @@ HDS: - /SENSOR MFSD: - guid: "27cbded8-5f48-4c65-8b1f-e2fc1a8aac1b" description: "Motorized fire smoke damper" is_abstract: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml index 6527cf2bb..7b1513652 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml @@ -18,7 +18,6 @@ HDS_STD: - guid: "4eaf243f-7e9b-4f34-a159-409cfee5d51d" description: "Standard Hydrogen sensor." implements: - HDS diff --git a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml index dbccb9f3d..dacbce5b5 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml @@ -16,7 +16,6 @@ MFSD_MDC: - guid: "fbfb943b-04b7-4d80-9bc3-1f1d6d8db99f" description: "Basic fire suppression with motorized dampers." is_canonical: true implements: From 594b1bd60a0838a4cbd7ef5bc4d81915d4fac574 Mon Sep 17 00:00:00 2001 From: db-robot Date: Mon, 19 Jun 2023 08:34:59 +0000 Subject: [PATCH 22/45] Add GUIDs to new entity types --- ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml | 1 + ontology/yaml/resources/HVAC/entity_types/FCU.yaml | 2 ++ ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml | 1 + ontology/yaml/resources/METERS/entity_types/WM.yaml | 1 + .../yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml | 3 +++ ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml | 1 + ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml | 1 + ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml | 3 +++ ontology/yaml/resources/SAFETY/entity_types/EHT.yaml | 1 + ontology/yaml/resources/SAFETY/entity_types/FACP.yaml | 2 ++ ontology/yaml/resources/SAFETY/entity_types/FSS.yaml | 2 ++ ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml | 1 + ontology/yaml/resources/SAFETY/entity_types/HDS.yaml | 1 + ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml | 1 + 14 files changed, 21 insertions(+) diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml index c662c85d8..fa0551b43 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml @@ -184,6 +184,7 @@ SRC2: - source2_lost_power_alarm BBM: + guid: "6ea6a214-a12f-4f8c-b97b-512538566611" description: "For UPS with Load Bypass and Battery status." is_abstract: true uses: diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index cd9dd371e..43c73dfba 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1691,6 +1691,7 @@ FCU_DSP_DFVSC_DTM_RTM: FCU_DXZTC_DFSS: + guid: "95515cb5-eb97-4acf-9be2-a792c8cf99e4" description: "FCU with SS, discharge temp sensors, zone control and sensor, filter change" is_canonical: true implements: @@ -1702,6 +1703,7 @@ FCU_DXZTC_DFSS: - filter_alarm FCU_RHDHS_DXDC_DFSS: + guid: "6d3bf040-cb9a-4ce9-8c3e-30607fb8977d" description: "FCU with temperature & pressure monitor, humidity monitor and water leak & status alarm." is_canonical: true implements: diff --git a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml index 5606f7b1d..0732c0fb0 100644 --- a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml @@ -236,6 +236,7 @@ SENSOR_ZA_CO2M_PMM_HCHO: - zone_air_formaldehyde_concentration_sensor SENSOR_WDPM: + guid: "c0eb13ea-8495-46de-8443-9a3b5696d084" description: "Sensor with differential pressure monitor" is_canonical: true implements: diff --git a/ontology/yaml/resources/METERS/entity_types/WM.yaml b/ontology/yaml/resources/METERS/entity_types/WM.yaml index 99b04a2d0..5f4a508f7 100644 --- a/ontology/yaml/resources/METERS/entity_types/WM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/WM.yaml @@ -38,6 +38,7 @@ WM_WF: - water_volume_accumulator WM_WFM: + guid: "ed5a4434-1d87-4a1e-abb5-563ab57a44b1" description: "Generic water flow rate meter." implements: - WM diff --git a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml index 6fc260a3f..354bc1115 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml @@ -42,6 +42,7 @@ RO: - EQUIPMENT VLV: + guid: "396ab9cc-500d-4e0a-b09c-be249cb3e420" description: "Tag for valves. Valves are devices which control the flow of water. " is_abstract: true opt_uses: @@ -50,6 +51,7 @@ VLV: - EQUIPMENT WCR: + guid: "7bfd5568-c818-4952-98d3-e736e9e9428a" description: "Water conditioner" is_abstract: true implements: @@ -57,6 +59,7 @@ WCR: - EQUIPMENT WSR: + guid: "178274c8-ec3d-4c5a-b2f3-f5ae7cb894dc" description: "Water softener" is_abstract: true implements: diff --git a/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml b/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml index 0110babcc..f4db9cd2c 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/VLV.yaml @@ -17,6 +17,7 @@ ######################## VLV_WVCM: + guid: "63e9ccb7-67f6-4547-aff8-d3cf30d1ab40" description: "Solenoid water valve control and monitoring." is_canonical: true implements: diff --git a/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml index cf48eac2f..108166a20 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml @@ -15,6 +15,7 @@ ### CANONICAL TYPES WSR_STD: + guid: "c406cac4-2e0c-4396-8963-db72b7f1ccb6" description: "Standard water softener." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index dac643778..37c11ca28 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -95,6 +95,7 @@ LM: - level_status MDC: + guid: "74bb9d42-e8f3-429c-96c1-7ad56842a9cd" description: "Tag for those with motorized dampers" is_abstract: true implements: @@ -104,12 +105,14 @@ MDC: - damper_command EHT: + guid: "700c69bb-8d37-4e5f-806f-ae64d007cf35" description: "Tag for heat tracer." is_abstract: true implements: - EQUIPMENT ASD: + guid: "aaeb7587-fdfe-4e11-86d3-bbd6ea017515" description: "Aspirating type, smoke detector" is_abstract: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/EHT.yaml b/ontology/yaml/resources/SAFETY/entity_types/EHT.yaml index 5e3818fe0..7cf4b9295 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/EHT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/EHT.yaml @@ -18,6 +18,7 @@ EHT_SS: + guid: "fd135e80-a15b-4c3f-8fa8-31c0641933a3" description: "Basic heat tracer with start/stop" is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index 8da0bbe1c..37cb7dbbc 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -47,6 +47,7 @@ FACP_PAS: - air_pressure_status FACP_ALM: + guid: "b8bf8e9b-5db2-40a8-8052-868ac60b760b" description: "Fire alarm panel with alarm." is_canonical: true implements: @@ -57,6 +58,7 @@ FACP_ALM: - failed_panel_alarm FACP_ASD: + guid: "3f21bbad-15ad-4253-982d-fed1324543d3" description: "Basic aspirating type, fire detection with alarms." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index f89bc8ca3..a567357f9 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -25,6 +25,7 @@ FSS_STD: - fire_alarm FSS_PAS: + guid: "a76f5813-f503-4388-96fe-82bcfeabc3f0" description: "Fire alarm panel with Pre-action suppression with alarm." is_canonical: true implements: @@ -36,6 +37,7 @@ FSS_PAS: - air_pressure_status FSS_FA2X_GS: + guid: "35b78ae1-19c1-4591-b88c-eefeb9f1951f" description: "Fire alarm panel with 2-level alarm and gas suppression." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml index e68eeb90c..907cbc47c 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml @@ -112,6 +112,7 @@ HDS: - /SENSOR MFSD: + guid: "c7f22ce3-2c92-42b7-8a53-a788b6f002e8" description: "Motorized fire smoke damper" is_abstract: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml index 7b1513652..098472038 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml @@ -18,6 +18,7 @@ HDS_STD: + guid: "05e2fa4b-6ad7-4a63-a8b2-f0cf003dca1e" description: "Standard Hydrogen sensor." implements: - HDS diff --git a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml index dacbce5b5..5f46a1d51 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml @@ -16,6 +16,7 @@ MFSD_MDC: + guid: "a69f2e64-0fd5-4e1a-b051-32993f7fa993" description: "Basic fire suppression with motorized dampers." is_canonical: true implements: From ee0ffa956313fd0a9f9efbd52d54de055266b2f7 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Thu, 22 Jun 2023 11:27:13 +0800 Subject: [PATCH 23/45] updated based on new feedback from cstridivant --- .../resources/ELECTRICAL/entity_types/ABSTRACT.yaml | 2 +- ontology/yaml/resources/METERS/entity_types/WM.yaml | 12 ------------ .../resources/SAFETY/entity_types/ABSTRACT.yaml | 2 ++ .../yaml/resources/SAFETY/entity_types/FACP.yaml | 13 ++----------- .../yaml/resources/SAFETY/entity_types/HDS.yaml | 11 ----------- .../yaml/resources/fields/telemetry_fields.yaml | 5 +---- 6 files changed, 6 insertions(+), 39 deletions(-) diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml index fa0551b43..9965f12c6 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml @@ -188,7 +188,7 @@ BBM: description: "For UPS with Load Bypass and Battery status." is_abstract: true uses: - - load_bypass_status + - bypass_status - battery_status opt_uses: - low_battery_alarm \ No newline at end of file diff --git a/ontology/yaml/resources/METERS/entity_types/WM.yaml b/ontology/yaml/resources/METERS/entity_types/WM.yaml index 5f4a508f7..fdc4df113 100644 --- a/ontology/yaml/resources/METERS/entity_types/WM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/WM.yaml @@ -36,15 +36,3 @@ WM_WF: - supply_water_volume_accumulator - water_linearvelocity_sensor - water_volume_accumulator - -WM_WFM: - guid: "ed5a4434-1d87-4a1e-abb5-563ab57a44b1" - description: "Generic water flow rate meter." - implements: - - WM - is_canonical: true - uses: - - water_flowrate_sensor - opt_uses: - - water_volume_accumulator - - water_linearvelocity_sensor \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index 37c11ca28..002606293 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -35,6 +35,8 @@ H2M: is_abstract: true uses: - zone_air_h2_concentration_sensor + opt_uses: + - zone_air_h2_concentration_alarm WLDS: guid: "6530f835-51a6-45c0-9130-382c297c2a01" diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index 37cb7dbbc..495b0ba81 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -23,6 +23,8 @@ FACP_STD: - FACP uses: - fire_alarm + opt_uses: + - failed_panel_alarm FACP_FA2X: guid: "a29a1bdd-0f8c-498e-b4ed-d09789f2487c" @@ -46,17 +48,6 @@ FACP_PAS: - water_flowrate_status - air_pressure_status -FACP_ALM: - guid: "b8bf8e9b-5db2-40a8-8052-868ac60b760b" - description: "Fire alarm panel with alarm." - is_canonical: true - implements: - - FACP - uses: - - fire_alarm - opt_uses: - - failed_panel_alarm - FACP_ASD: guid: "3f21bbad-15ad-4253-982d-fed1324543d3" description: "Basic aspirating type, fire detection with alarms." diff --git a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml index 098472038..05c60b795 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/HDS.yaml @@ -17,17 +17,6 @@ ######################## -HDS_STD: - guid: "05e2fa4b-6ad7-4a63-a8b2-f0cf003dca1e" - description: "Standard Hydrogen sensor." - implements: - - HDS - is_canonical: true - uses: - - particle_concentration_sensor - opt_uses: - - particle_concentration_alarm - HDS_H2M: guid: "c433b9fa-2e3c-42a9-9574-d601941e23c9" description: "Zone air hydrogen level used for monitoring in battery rooms." diff --git a/ontology/yaml/resources/fields/telemetry_fields.yaml b/ontology/yaml/resources/fields/telemetry_fields.yaml index ebb90af53..89f126c44 100644 --- a/ontology/yaml/resources/fields/telemetry_fields.yaml +++ b/ontology/yaml/resources/fields/telemetry_fields.yaml @@ -1588,15 +1588,12 @@ literals: - medium_smoke_alarm: # for aspirating type smoke detectors - ACTIVE - INACTIVE -- particle_concentration_alarm: +- zone_air_h2_concentration_alarm: - ACTIVE - INACTIVE - low_battery_alarm: - ACTIVE - INACTIVE -- load_bypass_status: - - OFF - - ON - gas_release_status: - OPEN - CLOSED From cef41ff3ec0d30b2da128ac7f8a6d9fc321356f6 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Fri, 23 Jun 2023 14:00:24 +0800 Subject: [PATCH 24/45] updated based on new feedback from cstirdivant --- ontology/yaml/resources/HVAC/entity_types/FCU.yaml | 1 - .../PLUMBING/entity_types/GENERALTYPES.yaml | 8 -------- .../resources/SAFETY/entity_types/ABSTRACT.yaml | 13 +------------ .../yaml/resources/SAFETY/entity_types/FSS.yaml | 4 ++-- .../resources/SAFETY/entity_types/GENERALTYPES.yaml | 7 +++++++ .../yaml/resources/fields/telemetry_fields.yaml | 2 +- 6 files changed, 11 insertions(+), 24 deletions(-) diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index f9c941742..e41658435 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1724,6 +1724,5 @@ FCU_RHDHS_DXDC_DFSS: opt_uses: - water_leak_detection_alarm - failed_alarm - - failed_discharge_fan_alarm - high_discharge_air_static_pressure_alarm - low_discharge_air_static_pressure_alarm diff --git a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml index 354bc1115..155fa433b 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml @@ -50,14 +50,6 @@ VLV: implements: - EQUIPMENT -WCR: - guid: "7bfd5568-c818-4952-98d3-e736e9e9428a" - description: "Water conditioner" - is_abstract: true - implements: - - /SS - - EQUIPMENT - WSR: guid: "178274c8-ec3d-4c5a-b2f3-f5ae7cb894dc" description: "Water softener" diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index 002606293..48dbb631f 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -36,7 +36,7 @@ H2M: uses: - zone_air_h2_concentration_sensor opt_uses: - - zone_air_h2_concentration_alarm + - high_zone_air_h2_concentration_alarm WLDS: guid: "6530f835-51a6-45c0-9130-382c297c2a01" @@ -100,25 +100,14 @@ MDC: guid: "74bb9d42-e8f3-429c-96c1-7ad56842a9cd" description: "Tag for those with motorized dampers" is_abstract: true - implements: - - EQUIPMENT uses: - damper_status - damper_command -EHT: - guid: "700c69bb-8d37-4e5f-806f-ae64d007cf35" - description: "Tag for heat tracer." - is_abstract: true - implements: - - EQUIPMENT - ASD: guid: "aaeb7587-fdfe-4e11-86d3-bbd6ea017515" description: "Aspirating type, smoke detector" is_abstract: true - implements: - - EQUIPMENT opt_uses: - low_smoke_alarm - medium_smoke_alarm diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index a567357f9..f8412ce88 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -26,7 +26,7 @@ FSS_STD: FSS_PAS: guid: "a76f5813-f503-4388-96fe-82bcfeabc3f0" - description: "Fire alarm panel with Pre-action suppression with alarm." + description: "Fire Suppression System with pre-suppression fire alarms." is_canonical: true implements: - FSS @@ -38,7 +38,7 @@ FSS_PAS: FSS_FA2X_GS: guid: "35b78ae1-19c1-4591-b88c-eefeb9f1951f" - description: "Fire alarm panel with 2-level alarm and gas suppression." + description: "Fire Suppression System with with 2-level alarm and gas suppression." is_canonical: true implements: - FSS diff --git a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml index 907cbc47c..8c87646ef 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml @@ -111,6 +111,13 @@ HDS: implements: - /SENSOR +EHT: + guid: "700c69bb-8d37-4e5f-806f-ae64d007cf35" + description: "Heat Tracer." + is_abstract: true + implements: + - EQUIPMENT + MFSD: guid: "c7f22ce3-2c92-42b7-8a53-a788b6f002e8" description: "Motorized fire smoke damper" diff --git a/ontology/yaml/resources/fields/telemetry_fields.yaml b/ontology/yaml/resources/fields/telemetry_fields.yaml index 89f126c44..c1502286c 100644 --- a/ontology/yaml/resources/fields/telemetry_fields.yaml +++ b/ontology/yaml/resources/fields/telemetry_fields.yaml @@ -1588,7 +1588,7 @@ literals: - medium_smoke_alarm: # for aspirating type smoke detectors - ACTIVE - INACTIVE -- zone_air_h2_concentration_alarm: +- high_zone_air_h2_concentration_alarm: - ACTIVE - INACTIVE - low_battery_alarm: From a6749b26ed98d180632a72ce9ffd3043be9e6785 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Fri, 23 Jun 2023 15:31:16 +0800 Subject: [PATCH 25/45] updated based on new feedback from cstirdivant --- ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml | 2 +- ontology/yaml/resources/HVAC/entity_types/FCU.yaml | 2 -- ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml | 2 -- ontology/yaml/resources/SAFETY/entity_types/FSS.yaml | 2 -- ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml | 1 - ontology/yaml/resources/fields/telemetry_fields.yaml | 3 --- 6 files changed, 1 insertion(+), 11 deletions(-) diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml index 9965f12c6..07388cd21 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml @@ -191,4 +191,4 @@ BBM: - bypass_status - battery_status opt_uses: - - low_battery_alarm \ No newline at end of file + - low_battery_charge_alarm \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index e41658435..e6dca17cd 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1701,7 +1701,6 @@ FCU_DSP_DFVSC_DTM_RTM: FCU_DXZTC_DFSS: - guid: "95515cb5-eb97-4acf-9be2-a792c8cf99e4" description: "FCU with SS, discharge temp sensors, zone control and sensor, filter change" is_canonical: true implements: @@ -1713,7 +1712,6 @@ FCU_DXZTC_DFSS: - filter_alarm FCU_RHDHS_DXDC_DFSS: - guid: "6d3bf040-cb9a-4ce9-8c3e-30607fb8977d" description: "FCU with temperature & pressure monitor, humidity monitor and water leak & status alarm." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index 48dbb631f..bf6d354dc 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -97,7 +97,6 @@ LM: - level_status MDC: - guid: "74bb9d42-e8f3-429c-96c1-7ad56842a9cd" description: "Tag for those with motorized dampers" is_abstract: true uses: @@ -105,7 +104,6 @@ MDC: - damper_command ASD: - guid: "aaeb7587-fdfe-4e11-86d3-bbd6ea017515" description: "Aspirating type, smoke detector" is_abstract: true opt_uses: diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index f8412ce88..46a3ae1b4 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -25,7 +25,6 @@ FSS_STD: - fire_alarm FSS_PAS: - guid: "a76f5813-f503-4388-96fe-82bcfeabc3f0" description: "Fire Suppression System with pre-suppression fire alarms." is_canonical: true implements: @@ -37,7 +36,6 @@ FSS_PAS: - air_pressure_status FSS_FA2X_GS: - guid: "35b78ae1-19c1-4591-b88c-eefeb9f1951f" description: "Fire Suppression System with with 2-level alarm and gas suppression." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml index 5f46a1d51..dacbce5b5 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml @@ -16,7 +16,6 @@ MFSD_MDC: - guid: "a69f2e64-0fd5-4e1a-b051-32993f7fa993" description: "Basic fire suppression with motorized dampers." is_canonical: true implements: diff --git a/ontology/yaml/resources/fields/telemetry_fields.yaml b/ontology/yaml/resources/fields/telemetry_fields.yaml index c1502286c..8930f40e7 100644 --- a/ontology/yaml/resources/fields/telemetry_fields.yaml +++ b/ontology/yaml/resources/fields/telemetry_fields.yaml @@ -1591,9 +1591,6 @@ literals: - high_zone_air_h2_concentration_alarm: - ACTIVE - INACTIVE -- low_battery_alarm: - - ACTIVE - - INACTIVE - gas_release_status: - OPEN - CLOSED From a47fb6d895ce9367eb8ddb4d1d19c9741e47fc77 Mon Sep 17 00:00:00 2001 From: db-robot Date: Fri, 23 Jun 2023 07:31:58 +0000 Subject: [PATCH 26/45] Add GUIDs to new entity types --- ontology/yaml/resources/HVAC/entity_types/FCU.yaml | 2 ++ ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml | 2 ++ ontology/yaml/resources/SAFETY/entity_types/FSS.yaml | 2 ++ ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml | 1 + 4 files changed, 7 insertions(+) diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index e6dca17cd..c00f648d2 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1701,6 +1701,7 @@ FCU_DSP_DFVSC_DTM_RTM: FCU_DXZTC_DFSS: + guid: "6ac9ebf2-c506-46af-9a5f-db1787a7c68c" description: "FCU with SS, discharge temp sensors, zone control and sensor, filter change" is_canonical: true implements: @@ -1712,6 +1713,7 @@ FCU_DXZTC_DFSS: - filter_alarm FCU_RHDHS_DXDC_DFSS: + guid: "00141569-ad19-41c2-b80a-1ff3350b6aad" description: "FCU with temperature & pressure monitor, humidity monitor and water leak & status alarm." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index bf6d354dc..337e1b63c 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -97,6 +97,7 @@ LM: - level_status MDC: + guid: "ec1aab74-c961-40fd-87b7-ce219c9c6d3a" description: "Tag for those with motorized dampers" is_abstract: true uses: @@ -104,6 +105,7 @@ MDC: - damper_command ASD: + guid: "d5829c05-fc88-4ac4-8587-8c75ed0d0486" description: "Aspirating type, smoke detector" is_abstract: true opt_uses: diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index 46a3ae1b4..a0897b0b4 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -25,6 +25,7 @@ FSS_STD: - fire_alarm FSS_PAS: + guid: "eb21c6ee-73f8-408c-9790-d8be67b71696" description: "Fire Suppression System with pre-suppression fire alarms." is_canonical: true implements: @@ -36,6 +37,7 @@ FSS_PAS: - air_pressure_status FSS_FA2X_GS: + guid: "26cd62af-1919-4251-b7a9-517f1ee4cadb" description: "Fire Suppression System with with 2-level alarm and gas suppression." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml index dacbce5b5..a3979fa2b 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml @@ -16,6 +16,7 @@ MFSD_MDC: + guid: "c2a5c203-a475-4a3a-9e81-ce83e943189f" description: "Basic fire suppression with motorized dampers." is_canonical: true implements: From 8745d676aba3307410844d3a624c3b9b53fab7f9 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Fri, 30 Jun 2023 13:59:16 +0800 Subject: [PATCH 27/45] updated based on comments from cstirdivant --- ontology/yaml/resources/HVAC/entity_types/FCU.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index e6dca17cd..ec2cb5945 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1719,8 +1719,11 @@ FCU_RHDHS_DXDC_DFSS: - RHDHS - DXDC - DFSS + uses: + - run_status opt_uses: - water_leak_detection_alarm - failed_alarm - high_discharge_air_static_pressure_alarm - low_discharge_air_static_pressure_alarm + - low_discharge_air_flowrate_alarm From dd586dee9bcf4b6e1f92e1dcd618bfdab2037a45 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Fri, 30 Jun 2023 14:04:19 +0800 Subject: [PATCH 28/45] updated based on comments from cstirdivant --- ontology/yaml/resources/HVAC/entity_types/FCU.yaml | 2 -- ontology/yaml/resources/SAFETY/entity_types/FSS.yaml | 2 -- ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml | 1 - 3 files changed, 5 deletions(-) diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index 13b64797a..ec2cb5945 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1701,7 +1701,6 @@ FCU_DSP_DFVSC_DTM_RTM: FCU_DXZTC_DFSS: - guid: "6ac9ebf2-c506-46af-9a5f-db1787a7c68c" description: "FCU with SS, discharge temp sensors, zone control and sensor, filter change" is_canonical: true implements: @@ -1713,7 +1712,6 @@ FCU_DXZTC_DFSS: - filter_alarm FCU_RHDHS_DXDC_DFSS: - guid: "00141569-ad19-41c2-b80a-1ff3350b6aad" description: "FCU with temperature & pressure monitor, humidity monitor and water leak & status alarm." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index a0897b0b4..46a3ae1b4 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -25,7 +25,6 @@ FSS_STD: - fire_alarm FSS_PAS: - guid: "eb21c6ee-73f8-408c-9790-d8be67b71696" description: "Fire Suppression System with pre-suppression fire alarms." is_canonical: true implements: @@ -37,7 +36,6 @@ FSS_PAS: - air_pressure_status FSS_FA2X_GS: - guid: "26cd62af-1919-4251-b7a9-517f1ee4cadb" description: "Fire Suppression System with with 2-level alarm and gas suppression." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml index a3979fa2b..dacbce5b5 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml @@ -16,7 +16,6 @@ MFSD_MDC: - guid: "c2a5c203-a475-4a3a-9e81-ce83e943189f" description: "Basic fire suppression with motorized dampers." is_canonical: true implements: From 542733d3cc206478b32f861b4e70841dfa027f63 Mon Sep 17 00:00:00 2001 From: db-robot Date: Fri, 30 Jun 2023 06:04:54 +0000 Subject: [PATCH 29/45] Add GUIDs to new entity types --- ontology/yaml/resources/HVAC/entity_types/FCU.yaml | 2 ++ ontology/yaml/resources/SAFETY/entity_types/FSS.yaml | 2 ++ ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml | 1 + 3 files changed, 5 insertions(+) diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index ec2cb5945..c86322527 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1701,6 +1701,7 @@ FCU_DSP_DFVSC_DTM_RTM: FCU_DXZTC_DFSS: + guid: "5688519e-f88e-4620-8bd5-89d91467028d" description: "FCU with SS, discharge temp sensors, zone control and sensor, filter change" is_canonical: true implements: @@ -1712,6 +1713,7 @@ FCU_DXZTC_DFSS: - filter_alarm FCU_RHDHS_DXDC_DFSS: + guid: "f60a2563-da8f-4360-b2d9-f471c065356c" description: "FCU with temperature & pressure monitor, humidity monitor and water leak & status alarm." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index 46a3ae1b4..b76ac0c2c 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -25,6 +25,7 @@ FSS_STD: - fire_alarm FSS_PAS: + guid: "7a1d7598-2ec9-4fa0-ad88-8f876a632dde" description: "Fire Suppression System with pre-suppression fire alarms." is_canonical: true implements: @@ -36,6 +37,7 @@ FSS_PAS: - air_pressure_status FSS_FA2X_GS: + guid: "637223a2-1c85-4ba3-b28f-ba5c96ffce9d" description: "Fire Suppression System with with 2-level alarm and gas suppression." is_canonical: true implements: diff --git a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml index dacbce5b5..6bfe1204c 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml @@ -16,6 +16,7 @@ MFSD_MDC: + guid: "daa7795d-7d4a-4741-ac68-e0a3dd2574c3" description: "Basic fire suppression with motorized dampers." is_canonical: true implements: From 8f9724d861d9218bd290b440bd455bdf80f2705c Mon Sep 17 00:00:00 2001 From: db-robot Date: Mon, 3 Jul 2023 00:39:29 +0000 Subject: [PATCH 30/45] Add GUIDs to new entity types --- ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml | 2 ++ ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml | 2 ++ ontology/yaml/resources/HVAC/entity_types/BLR.yaml | 1 + ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml | 1 + ontology/yaml/resources/HVAC/entity_types/WEATHER.yaml | 1 + 5 files changed, 7 insertions(+) diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml index 8c8071f91..bcd71cafd 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml @@ -68,6 +68,7 @@ UPS_IOBM_PPWM_UPSBM: - UPSBM UPS_SS_BBM: + guid: "adcf545f-eb61-4130-a0f1-d611ab303d17" description: "UPS unit with load bypass and battery mode and alarm." is_canonical: true implements: @@ -84,6 +85,7 @@ UPS_PWM: - PWM UPS_SS_UPSBM: + guid: "6d106664-6b73-4ff7-bc8b-452d54875261" description: "Basic UPS with battery monitoring" is_canonical: true implements: diff --git a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml index a465d5292..fac40422e 100644 --- a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml @@ -2909,6 +2909,7 @@ HTSWC: - CONTROL HTRWC: + guid: "11e774f7-bf89-430a-aece-1ff71bda5395" description: "Gas or electric heater control on return water side." is_abstract: true opt_uses: @@ -6663,6 +6664,7 @@ VMADC: - CONTROL OAQM: + guid: "e1f0a2e5-1090-4bc6-baa9-c2eca1aed3fd" description: "Outside air quality monitoring (particulates and gases)" is_abstract: true uses: diff --git a/ontology/yaml/resources/HVAC/entity_types/BLR.yaml b/ontology/yaml/resources/HVAC/entity_types/BLR.yaml index 97aef5936..0a1683a0e 100644 --- a/ontology/yaml/resources/HVAC/entity_types/BLR.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/BLR.yaml @@ -273,6 +273,7 @@ BLR_SS_SWTC_WDPC: - WDPC BLR_SS_RWTC_HTRWC: + guid: "9a027d50-9042-4bd7-97e6-2ddfa47b4e65" description: "Single-stage boiler with return control." is_canonical: true implements: diff --git a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml index 0260a769c..606dff665 100644 --- a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml @@ -253,6 +253,7 @@ SENSOR_CO2M_VOCM: - VOCM SENSOR_ZTM_ZHM_CO2M_VOCM_PMM: + guid: "f4a549fa-d3a5-4584-8ae7-a8ace64f9650" description: "Simple air quality sensor with VOC, particulates, CO2, temperature and humidity monitoring." is_canonical: true implements: diff --git a/ontology/yaml/resources/HVAC/entity_types/WEATHER.yaml b/ontology/yaml/resources/HVAC/entity_types/WEATHER.yaml index e7fd8a798..9f402675c 100644 --- a/ontology/yaml/resources/HVAC/entity_types/WEATHER.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/WEATHER.yaml @@ -25,6 +25,7 @@ WEATHER_OA: - OA WEATHER_OA_OAQM: + guid: "d944e31f-025a-43ed-abf2-381b8b887158" description: "Outside temperature, humidity and air quality monitoring." is_canonical: true implements: From 53ecea6828ce65059b5b4f2aa0845f1b91381f44 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Mon, 3 Jul 2023 09:04:34 +0800 Subject: [PATCH 31/45] updated fixes based on comments from cstirdivant --- ontology/yaml/resources/METERS/entity_types/WM.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/ontology/yaml/resources/METERS/entity_types/WM.yaml b/ontology/yaml/resources/METERS/entity_types/WM.yaml index fdc4df113..0eecf50a0 100644 --- a/ontology/yaml/resources/METERS/entity_types/WM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/WM.yaml @@ -35,4 +35,3 @@ WM_WF: opt_uses: - supply_water_volume_accumulator - water_linearvelocity_sensor - - water_volume_accumulator From 8c65deda745afa652e26b80694c75052c3dbeea8 Mon Sep 17 00:00:00 2001 From: db-robot Date: Wed, 5 Jul 2023 17:04:20 +0000 Subject: [PATCH 32/45] Add GUIDs to new entity types --- ontology/yaml/resources/HVAC/entity_types/PMP.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/ontology/yaml/resources/HVAC/entity_types/PMP.yaml b/ontology/yaml/resources/HVAC/entity_types/PMP.yaml index 776bcf0fd..79f034088 100644 --- a/ontology/yaml/resources/HVAC/entity_types/PMP.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/PMP.yaml @@ -141,6 +141,7 @@ PMP_SS_RMM: - high_pressure_status PMP_SS_WDPM: + guid: "12948c15-169a-4965-81dd-1097cdaca393" description: "Pump with pressure alarms and status monitoring" is_canonical: true implements: From ee70bb719ee5a5accea9c20c0b451dfc3384ec54 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Thu, 6 Jul 2023 17:02:10 +0800 Subject: [PATCH 33/45] updated based on new feedbacks --- .../ELECTRICAL/entity_types/ABSTRACT.yaml | 3 +-- .../yaml/resources/HVAC/entity_types/FCU.yaml | 5 ++-- .../SAFETY/entity_types/ABSTRACT.yaml | 4 ++-- .../resources/SAFETY/entity_types/FACP.yaml | 4 +++- .../resources/SAFETY/entity_types/FD.yaml | 8 +++++++ .../resources/SAFETY/entity_types/FSS.yaml | 12 ---------- .../SAFETY/entity_types/GENERALTYPES.yaml | 7 ------ .../resources/SAFETY/entity_types/MFSD.yaml | 24 ------------------- 8 files changed, 17 insertions(+), 50 deletions(-) delete mode 100644 ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml index e8f2d3737..7d6d608a5 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml @@ -186,10 +186,9 @@ SRC2: BBM: guid: "6ea6a214-a12f-4f8c-b97b-512538566611" - description: "For UPS with Load Bypass and Battery status." + description: "For UPS with Battery status and alarm." is_abstract: true uses: - - bypass_status - battery_status opt_uses: - low_battery_charge_alarm \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index c86322527..58118a1d1 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1712,7 +1712,7 @@ FCU_DXZTC_DFSS: - failed_alarm - filter_alarm -FCU_RHDHS_DXDC_DFSS: +FCU_RHDHS_DXDC_DFSS_RTM: guid: "f60a2563-da8f-4360-b2d9-f471c065356c" description: "FCU with temperature & pressure monitor, humidity monitor and water leak & status alarm." is_canonical: true @@ -1721,10 +1721,11 @@ FCU_RHDHS_DXDC_DFSS: - RHDHS - DXDC - DFSS + - RTM uses: - run_status opt_uses: - - water_leak_detection_alarm + - water_leak_alarm - failed_alarm - high_discharge_air_static_pressure_alarm - low_discharge_air_static_pressure_alarm diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index 337e1b63c..68f98da10 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -98,7 +98,7 @@ LM: MDC: guid: "ec1aab74-c961-40fd-87b7-ce219c9c6d3a" - description: "Tag for those with motorized dampers" + description: "Motorized binary damper control." is_abstract: true uses: - damper_status @@ -106,7 +106,7 @@ MDC: ASD: guid: "d5829c05-fc88-4ac4-8587-8c75ed0d0486" - description: "Aspirating type, smoke detector" + description: "Aspirating type, smoke detector." is_abstract: true opt_uses: - low_smoke_alarm diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index 495b0ba81..fa8c331b2 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -44,9 +44,11 @@ FACP_PAS: - FACP uses: - fire_alarm - - supervisor_alarm - water_flowrate_status - air_pressure_status + opt_uses: + - supervisor_alarm + - failed_panel_alarm FACP_ASD: guid: "3f21bbad-15ad-4253-982d-fed1324543d3" diff --git a/ontology/yaml/resources/SAFETY/entity_types/FD.yaml b/ontology/yaml/resources/SAFETY/entity_types/FD.yaml index 6bf49c96f..b45dd716a 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FD.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FD.yaml @@ -31,3 +31,11 @@ FD_SD: uses: - damper_percentage_sensor - damper_percentage_command + +FD_MDC: + guid: "a731be05-13de-43a5-9edc-9fd89c6cfffc" + description: "Fire dampers with motorized binary dampers (open/closed)" + is_canonical: true + implements: + - FD + - MDC \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index b76ac0c2c..9f95dbbd5 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -24,18 +24,6 @@ FSS_STD: uses: - fire_alarm -FSS_PAS: - guid: "7a1d7598-2ec9-4fa0-ad88-8f876a632dde" - description: "Fire Suppression System with pre-suppression fire alarms." - is_canonical: true - implements: - - FSS - uses: - - fire_alarm - - failed_panel_alarm - - water_flowrate_status - - air_pressure_status - FSS_FA2X_GS: guid: "637223a2-1c85-4ba3-b28f-ba5c96ffce9d" description: "Fire Suppression System with with 2-level alarm and gas suppression." diff --git a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml index 8c87646ef..974a51bba 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml @@ -117,10 +117,3 @@ EHT: is_abstract: true implements: - EQUIPMENT - -MFSD: - guid: "c7f22ce3-2c92-42b7-8a53-a788b6f002e8" - description: "Motorized fire smoke damper" - is_abstract: true - implements: - - EQUIPMENT \ No newline at end of file diff --git a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml b/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml deleted file mode 100644 index 6bfe1204c..000000000 --- a/ontology/yaml/resources/SAFETY/entity_types/MFSD.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright 2023 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the License); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an AS IS BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Canonical types - - -MFSD_MDC: - guid: "daa7795d-7d4a-4741-ac68-e0a3dd2574c3" - description: "Basic fire suppression with motorized dampers." - is_canonical: true - implements: - - MFSD - - MDC \ No newline at end of file From b0cb7f2784d969c9e71634969829ce80542ba8fa Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Thu, 13 Jul 2023 15:46:16 +0800 Subject: [PATCH 34/45] updated based on new feedback --- .../resources/ELECTRICAL/entity_types/ABSTRACT.yaml | 9 --------- .../yaml/resources/ELECTRICAL/entity_types/UPS.yaml | 9 --------- .../resources/PLUMBING/entity_types/GENERALTYPES.yaml | 1 - .../yaml/resources/PLUMBING/entity_types/WSR.yaml | 1 + .../yaml/resources/SAFETY/entity_types/ABSTRACT.yaml | 8 -------- ontology/yaml/resources/SAFETY/entity_types/FACP.yaml | 2 +- ontology/yaml/resources/SAFETY/entity_types/FD.yaml | 11 +++-------- .../resources/SAFETY/entity_types/GENERALTYPES.yaml | 2 +- 8 files changed, 6 insertions(+), 37 deletions(-) diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml index 7d6d608a5..23154dff9 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/ABSTRACT.yaml @@ -183,12 +183,3 @@ SRC2: - source2_phase3_phase1_over_voltage_status - source2_over_voltage_status - source2_lost_power_alarm - -BBM: - guid: "6ea6a214-a12f-4f8c-b97b-512538566611" - description: "For UPS with Battery status and alarm." - is_abstract: true - uses: - - battery_status - opt_uses: - - low_battery_charge_alarm \ No newline at end of file diff --git a/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml b/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml index 3fb8fd8dc..169b5c13a 100644 --- a/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml +++ b/ontology/yaml/resources/ELECTRICAL/entity_types/UPS.yaml @@ -66,15 +66,6 @@ UPS_IOBM_PPWM_UPSBM: - IOBM - PPWM - UPSBM - -UPS_SS_BBM: - guid: "adcf545f-eb61-4130-a0f1-d611ab303d17" - description: "UPS unit with load bypass and battery mode and alarm." - is_canonical: true - implements: - - UPS - - SS - - BBM UPS_PWM: guid: "64f90598-969d-4cf6-ace6-50793a46aed8" diff --git a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml index 155fa433b..55ed6f161 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/GENERALTYPES.yaml @@ -55,5 +55,4 @@ WSR: description: "Water softener" is_abstract: true implements: - - /SS - EQUIPMENT diff --git a/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml index 108166a20..99c5a4c50 100644 --- a/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml +++ b/ontology/yaml/resources/PLUMBING/entity_types/WSR.yaml @@ -20,6 +20,7 @@ WSR_STD: is_canonical: true implements: - WSR + - /SS uses: - water_flowrate_status opt_uses: diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index 68f98da10..94f88df3b 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -96,14 +96,6 @@ LM: uses: - level_status -MDC: - guid: "ec1aab74-c961-40fd-87b7-ce219c9c6d3a" - description: "Motorized binary damper control." - is_abstract: true - uses: - - damper_status - - damper_command - ASD: guid: "d5829c05-fc88-4ac4-8587-8c75ed0d0486" description: "Aspirating type, smoke detector." diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index fa8c331b2..248bed52c 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -46,8 +46,8 @@ FACP_PAS: - fire_alarm - water_flowrate_status - air_pressure_status - opt_uses: - supervisor_alarm + opt_uses: - failed_panel_alarm FACP_ASD: diff --git a/ontology/yaml/resources/SAFETY/entity_types/FD.yaml b/ontology/yaml/resources/SAFETY/entity_types/FD.yaml index b45dd716a..0ea96bafc 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FD.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FD.yaml @@ -31,11 +31,6 @@ FD_SD: uses: - damper_percentage_sensor - damper_percentage_command - -FD_MDC: - guid: "a731be05-13de-43a5-9edc-9fd89c6cfffc" - description: "Fire dampers with motorized binary dampers (open/closed)" - is_canonical: true - implements: - - FD - - MDC \ No newline at end of file + opt_uses: + - damper_status + - damper_command diff --git a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml index 974a51bba..f6bcc8fa5 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml @@ -113,7 +113,7 @@ HDS: EHT: guid: "700c69bb-8d37-4e5f-806f-ae64d007cf35" - description: "Heat Tracer." + description: "Tag for a heat tracer. A heat tracer is typically a heated coil that is wound around pipes to prevent the liquid inside from freezing." is_abstract: true implements: - EQUIPMENT From 171925965c0606a00a50dd41c0b1509b8d52cab1 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Sat, 15 Jul 2023 12:52:02 +0800 Subject: [PATCH 35/45] moved dampers_ from FD_SD to FD_STD opt_uses:damper_command --- ontology/yaml/resources/SAFETY/entity_types/FD.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ontology/yaml/resources/SAFETY/entity_types/FD.yaml b/ontology/yaml/resources/SAFETY/entity_types/FD.yaml index 0ea96bafc..99e232cb2 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FD.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FD.yaml @@ -20,6 +20,8 @@ FD_STD: - FD uses: - damper_status + opt_uses: + - damper_command FD_SD: guid: "70dad00c-3334-4a77-8ce2-2d41d6a97c78" @@ -31,6 +33,3 @@ FD_SD: uses: - damper_percentage_sensor - damper_percentage_command - opt_uses: - - damper_status - - damper_command From 32ac6b8f749a0eebb1e1cb90fd924d06eaa63a8b Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Tue, 18 Jul 2023 13:25:52 +0800 Subject: [PATCH 36/45] updated: diff pressure sensor and FAN_SS (added opt_uses: air_pressure_sensor) --- ontology/yaml/resources/HVAC/entity_types/FAN.yaml | 8 ++++++++ .../yaml/resources/HVAC/entity_types/GENERALTYPES.yaml | 1 + 2 files changed, 9 insertions(+) diff --git a/ontology/yaml/resources/HVAC/entity_types/FAN.yaml b/ontology/yaml/resources/HVAC/entity_types/FAN.yaml index 2e8b4e0f3..989e13d78 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FAN.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FAN.yaml @@ -759,3 +759,11 @@ FAN_SS_MSM: implements: - FAN - MSM + +FAN_SS_WDPM: + description: "Fan with differential pressure monitoring." + is_canonical: true + implements: + - FAN + - SS + - WDPM \ No newline at end of file diff --git a/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml index dec6f1aba..76ecf0d84 100644 --- a/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml @@ -53,6 +53,7 @@ FCU: - return_air_relative_humidity_sensor - discharge_air_temperature_sensor - failed_communication_alarm + - air_pressure_sensor implements: - EQUIPMENT From ded801f6ffb0f54e15f5f8b0e3829d8e95ccc0e6 Mon Sep 17 00:00:00 2001 From: db-robot Date: Tue, 18 Jul 2023 05:26:33 +0000 Subject: [PATCH 37/45] Add GUIDs to new entity types --- ontology/yaml/resources/HVAC/entity_types/FAN.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/ontology/yaml/resources/HVAC/entity_types/FAN.yaml b/ontology/yaml/resources/HVAC/entity_types/FAN.yaml index 989e13d78..700ce670e 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FAN.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FAN.yaml @@ -761,6 +761,7 @@ FAN_SS_MSM: - MSM FAN_SS_WDPM: + guid: "cd8f2cbd-ac27-4710-ba05-1ef09e48b5ce" description: "Fan with differential pressure monitoring." is_canonical: true implements: From 71d21c8345f8ef24c76147327991c5a135262267 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Tue, 25 Jul 2023 11:07:31 +0800 Subject: [PATCH 38/45] minor removals/fixes based on new feedbacks --- ontology/yaml/resources/HVAC/entity_types/FCU.yaml | 4 +--- ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml | 8 -------- ontology/yaml/resources/SAFETY/entity_types/FACP.yaml | 2 +- 3 files changed, 2 insertions(+), 12 deletions(-) diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index 80d4946d6..148d883ed 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1430,7 +1430,7 @@ FCU_NONCANONICAL_1: - zone_occupancy_status_1 - zone_occupancy_status_2 - zone_occupancy_status_3 - + FCU_DFSS_CSP_ZHC_DXZC_NONCANONICAL_1: guid: "0bca6899-fa9a-40ff-a3bd-8828991b39c1" description: "Non-standard type." @@ -1762,8 +1762,6 @@ FCU_RHDHS_DXDC_DFSS_RTM: - DXDC - DFSS - RTM - uses: - - run_status opt_uses: - water_leak_alarm - failed_alarm diff --git a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml index adf05f949..d7ddf5511 100644 --- a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml @@ -234,14 +234,6 @@ SENSOR_ZA_CO2M_PMM_HCHO: - PMM uses: - zone_air_formaldehyde_concentration_sensor - -SENSOR_WDPM: - guid: "c0eb13ea-8495-46de-8443-9a3b5696d084" - description: "Sensor with differential pressure monitor" - is_canonical: true - implements: - - /SENSOR - - WDPM SENSOR_CO2M_VOCM: guid: "3eca4fc4-0a66-4a12-bbc1-88fedeb9ede5" diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index 248bed52c..4c03daeec 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -44,9 +44,9 @@ FACP_PAS: - FACP uses: - fire_alarm + - supervisor_alarm - water_flowrate_status - air_pressure_status - - supervisor_alarm opt_uses: - failed_panel_alarm From 98fdaaca3f0c70dacacfbdc6f74321250cbb8029 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Mon, 14 Aug 2023 13:20:19 +0800 Subject: [PATCH 39/45] fix to remove air_pressure_sensor in FAN_SS --- ontology/yaml/resources/HVAC/entity_types/FAN.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/ontology/yaml/resources/HVAC/entity_types/FAN.yaml b/ontology/yaml/resources/HVAC/entity_types/FAN.yaml index f6727247f..ffe169d0d 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FAN.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FAN.yaml @@ -25,8 +25,6 @@ FAN_SS: implements: - FAN - SS - opt_uses: - - air_pressure_sensor FAN_SS_VSC: guid: "b58b9431-ff2c-4cc2-adab-a8c51c4ee6ab" From 7870166b56faf3b407a6e21710ed4eaab6e96fdc Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Tue, 15 Aug 2023 14:59:20 +0800 Subject: [PATCH 40/45] fix telemetry_fields --- ontology/yaml/resources/fields/telemetry_fields.yaml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ontology/yaml/resources/fields/telemetry_fields.yaml b/ontology/yaml/resources/fields/telemetry_fields.yaml index dc00d736c..94cc5118d 100644 --- a/ontology/yaml/resources/fields/telemetry_fields.yaml +++ b/ontology/yaml/resources/fields/telemetry_fields.yaml @@ -1618,12 +1618,6 @@ literals: - gas_release_status: - OPEN - CLOSED -- high_discharge_air_static_pressure_alarm: - - ACTIVE - - INACTIVE -- low_discharge_air_static_pressure_alarm: - - ACTIVE - - INACTIVE - emergency_release_status: - ACTIVE From d44238c3295561a9ef198cb51ce7999a8dcd8161 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Thu, 24 Aug 2023 11:58:41 +0800 Subject: [PATCH 41/45] updated based on new feedbacks from DBO team --- ontology/yaml/resources/HVAC/entity_types/FCU.yaml | 7 +++---- .../yaml/resources/HVAC/entity_types/GENERALTYPES.yaml | 1 + ontology/yaml/resources/METERS/entity_types/WM.yaml | 1 + .../yaml/resources/SAFETY/entity_types/ABSTRACT.yaml | 9 --------- ontology/yaml/resources/SAFETY/entity_types/FACP.yaml | 10 ++++++---- ontology/yaml/resources/SAFETY/entity_types/FSS.yaml | 2 +- .../resources/SAFETY/entity_types/GENERALTYPES.yaml | 2 +- 7 files changed, 13 insertions(+), 19 deletions(-) diff --git a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml index 9f51869f4..60cefd3a8 100644 --- a/ontology/yaml/resources/HVAC/entity_types/FCU.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/FCU.yaml @@ -1775,7 +1775,7 @@ FCU_DXZTC_DFSS: - failed_alarm - filter_alarm -FCU_RHDHS_DXDC_DFSS_RTM: +FCU_RHDHS_DXDC_DFSS_RTM_DSPM_DFM: guid: "f60a2563-da8f-4360-b2d9-f471c065356c" description: "FCU with temperature & pressure monitor, humidity monitor and water leak & status alarm." is_canonical: true @@ -1785,9 +1785,8 @@ FCU_RHDHS_DXDC_DFSS_RTM: - DXDC - DFSS - RTM + - DSPM + - DFM opt_uses: - water_leak_alarm - failed_alarm - - high_discharge_air_static_pressure_alarm - - low_discharge_air_static_pressure_alarm - - low_discharge_air_flowrate_alarm diff --git a/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml index 66896ea54..49cb2e021 100644 --- a/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/GENERALTYPES.yaml @@ -39,6 +39,7 @@ FAN: - failed_communication_alarm - failed_exhaust_air_temperature_alarm - failed_smoke_detection_alarm + - lost_power_alarm implements: - EQUIPMENT diff --git a/ontology/yaml/resources/METERS/entity_types/WM.yaml b/ontology/yaml/resources/METERS/entity_types/WM.yaml index 0eecf50a0..fdc4df113 100644 --- a/ontology/yaml/resources/METERS/entity_types/WM.yaml +++ b/ontology/yaml/resources/METERS/entity_types/WM.yaml @@ -35,3 +35,4 @@ WM_WF: opt_uses: - supply_water_volume_accumulator - water_linearvelocity_sensor + - water_volume_accumulator diff --git a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml index 94f88df3b..ed82535d7 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/ABSTRACT.yaml @@ -95,12 +95,3 @@ LM: is_abstract: true uses: - level_status - -ASD: - guid: "d5829c05-fc88-4ac4-8587-8c75ed0d0486" - description: "Aspirating type, smoke detector." - is_abstract: true - opt_uses: - - low_smoke_alarm - - medium_smoke_alarm - - fire_alarm diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index 4c03daeec..9c9a22c6b 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -24,7 +24,7 @@ FACP_STD: uses: - fire_alarm opt_uses: - - failed_panel_alarm + - master_alarm FACP_FA2X: guid: "a29a1bdd-0f8c-498e-b4ed-d09789f2487c" @@ -48,7 +48,7 @@ FACP_PAS: - water_flowrate_status - air_pressure_status opt_uses: - - failed_panel_alarm + - master_alarm FACP_ASD: guid: "3f21bbad-15ad-4253-982d-fed1324543d3" @@ -56,6 +56,8 @@ FACP_ASD: is_canonical: true implements: - FACP - - ASD opt_uses: - - failed_panel_alarm + - low_smoke_alarm + - medium_smoke_alarm + - fire_alarm + - master_alarm diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index 9f95dbbd5..9cc0e5edd 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -32,5 +32,5 @@ FSS_FA2X_GS: - FSS - FA2X uses: - - failed_panel_alarm + - master_alarm - gas_release_status diff --git a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml index f6bcc8fa5..96bee9a30 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/GENERALTYPES.yaml @@ -103,7 +103,7 @@ SSS: is_abstract: true implements: - /SENSOR - + HDS: guid: "025f5773-7626-4a30-bd44-ef0845a92215" description: "Hydrogen Sensor." From 659c76f537a26dab9dbd4bed8ed57154fef21a52 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Thu, 24 Aug 2023 15:14:48 +0800 Subject: [PATCH 42/45] update minor fix --- ontology/yaml/resources/fields/telemetry_fields.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/ontology/yaml/resources/fields/telemetry_fields.yaml b/ontology/yaml/resources/fields/telemetry_fields.yaml index f177891f6..0c1589e0a 100644 --- a/ontology/yaml/resources/fields/telemetry_fields.yaml +++ b/ontology/yaml/resources/fields/telemetry_fields.yaml @@ -1603,9 +1603,6 @@ literals: - OPEN - CLOSED -- failed_panel_alarm: - - ACTIVE - - INACTIVE - low_smoke_alarm: # for aspirating type smoke detectors - ACTIVE - INACTIVE From 2c7d332121b1e2c37235aec4f568638715b5db4a Mon Sep 17 00:00:00 2001 From: db-robot Date: Fri, 29 Sep 2023 00:19:46 +0000 Subject: [PATCH 43/45] Add GUIDs to new entity types --- ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml | 1 + ontology/yaml/resources/HVAC/entity_types/SDC.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml index c05b047eb..68428f72b 100644 --- a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml @@ -6789,6 +6789,7 @@ OAQM: - MONITORING UDEC: + guid: "956f1afb-04b1-4d4d-afb9-4aff1ac51b20" description: "Up and down extension control for shades." is_abstract: true uses: diff --git a/ontology/yaml/resources/HVAC/entity_types/SDC.yaml b/ontology/yaml/resources/HVAC/entity_types/SDC.yaml index f1af80429..c562fae3a 100644 --- a/ontology/yaml/resources/HVAC/entity_types/SDC.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/SDC.yaml @@ -86,6 +86,7 @@ SDC_EXTOR: - shade_mode SDC_UDEC: + guid: "34201ca6-677b-47bc-b624-a80581490b6d" description: "Simple shade with up and down extent control." is_canonical: true implements: From 7eab65cf22053fc766bf1d3643ff616122f23489 Mon Sep 17 00:00:00 2001 From: josephedwardchang Date: Tue, 3 Oct 2023 14:45:36 +0800 Subject: [PATCH 44/45] renamed points for better description --- ontology/yaml/resources/SAFETY/entity_types/FACP.yaml | 4 ++-- ontology/yaml/resources/SAFETY/entity_types/FSS.yaml | 2 +- ontology/yaml/resources/fields/telemetry_fields.yaml | 6 +++--- ontology/yaml/resources/subfields/subfields.yaml | 1 + 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml index 9c9a22c6b..2cce920da 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FACP.yaml @@ -57,7 +57,7 @@ FACP_ASD: implements: - FACP opt_uses: - - low_smoke_alarm - - medium_smoke_alarm + - low_smoke_intensity_alarm + - medium_smoke_intensity_alarm - fire_alarm - master_alarm diff --git a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml index 9cc0e5edd..d1fb2f9ff 100644 --- a/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml +++ b/ontology/yaml/resources/SAFETY/entity_types/FSS.yaml @@ -33,4 +33,4 @@ FSS_FA2X_GS: - FA2X uses: - master_alarm - - gas_release_status + - gas_release_valve_status diff --git a/ontology/yaml/resources/fields/telemetry_fields.yaml b/ontology/yaml/resources/fields/telemetry_fields.yaml index 77b755601..6318b0852 100644 --- a/ontology/yaml/resources/fields/telemetry_fields.yaml +++ b/ontology/yaml/resources/fields/telemetry_fields.yaml @@ -1603,16 +1603,16 @@ literals: - OPEN - CLOSED -- low_smoke_alarm: # for aspirating type smoke detectors +- low_smoke_intensity_alarm: # for aspirating type smoke detectors - ACTIVE - INACTIVE -- medium_smoke_alarm: # for aspirating type smoke detectors +- medium_smoke_intensity_alarm: # for aspirating type smoke detectors - ACTIVE - INACTIVE - high_zone_air_h2_concentration_alarm: - ACTIVE - INACTIVE -- gas_release_status: +- gas_release_valve_status: - OPEN - CLOSED diff --git a/ontology/yaml/resources/subfields/subfields.yaml b/ontology/yaml/resources/subfields/subfields.yaml index 4ccc3aa82..4d84c00c1 100644 --- a/ontology/yaml/resources/subfields/subfields.yaml +++ b/ontology/yaml/resources/subfields/subfields.yaml @@ -142,6 +142,7 @@ descriptor: inlet: "Area of media entrance." inhibit: "Prohibit from executing a function or starting an operation." input: "The input to a system." + intensity: "The relative magnitude or strength of something (i.e., high_intensity_* indicates something is strong or forceful)." inter: "Represents something in between references (e.g. average_inter_line_voltage, the average voltage between lines)." isolation: "Process of isolating one component or process from another." leak: "Media leaving the system abnormally." From 21e1343e50348f6cba91cf652577ab795a528c47 Mon Sep 17 00:00:00 2001 From: db-robot Date: Wed, 4 Oct 2023 22:08:22 +0000 Subject: [PATCH 45/45] Add GUIDs to new entity types --- ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml | 7 +++++++ ontology/yaml/resources/HVAC/entity_types/BLR.yaml | 1 + ontology/yaml/resources/HVAC/entity_types/CH.yaml | 1 + ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml | 5 +++++ 4 files changed, 14 insertions(+) diff --git a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml index 9edddbeea..3d72ffb7d 100644 --- a/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/ABSTRACT.yaml @@ -329,6 +329,7 @@ COC: - high_zone_air_co_concentration_alarm COM: + guid: "bd9a1e2d-0710-4c58-8a56-3890af55f6b3" description: "Carbon monoxide monitoring." is_abstract: true implements: @@ -1126,6 +1127,7 @@ SCHWTC: - chilled_supply_water_temperature_setpoint RCHWTC: + guid: "6babdc1e-edae-49b3-98e4-ca0b675b7f0f" description: "Return chilled water temperature control." is_abstract: true implements: @@ -5093,6 +5095,7 @@ SWTM: RWTM: + guid: "c317c88d-f090-4cd9-9289-6e03e24e496f" description: "Return water temperature monitoring." is_abstract: true implements: @@ -6862,6 +6865,7 @@ VSMC: - schedule_run_command ZOC: + guid: "822b78b6-1eb4-4d4b-9f4e-089ef57011aa" description: "Occupancy counter monitoring" is_abstract: true uses: @@ -6870,6 +6874,7 @@ ZOC: - MONITORING SPLM: + guid: "d92998e1-1091-4291-a1f9-b8cc0e3aa334" description: "Sound pressure level monitoring" is_abstract: true uses: @@ -6878,6 +6883,7 @@ SPLM: - MONITORING ZAQIM: + guid: "3ce06a65-9e5c-4862-9571-a2d59792c86a" description: "Zone air quality indexes monitoring" is_abstract: true uses: @@ -6889,6 +6895,7 @@ ZAQIM: - MONITORING PMDM: + guid: "8247354f-bedb-4ccd-8f62-238c025277bc" description: "Particulate matter density monitoring" is_abstract: true uses: diff --git a/ontology/yaml/resources/HVAC/entity_types/BLR.yaml b/ontology/yaml/resources/HVAC/entity_types/BLR.yaml index debf973ae..c6dfc9dc8 100644 --- a/ontology/yaml/resources/HVAC/entity_types/BLR.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/BLR.yaml @@ -283,6 +283,7 @@ BLR_SS_RWTC_HTRWC: - HTRWC BLR_HT2SWC_RWTM: + guid: "e72cfc15-8544-4a9c-bc0a-89f33384ebeb" description: "Two-stage boiler with supply control, return temperature monitoring." is_canonical: true implements: diff --git a/ontology/yaml/resources/HVAC/entity_types/CH.yaml b/ontology/yaml/resources/HVAC/entity_types/CH.yaml index ca09cb286..9220847cd 100644 --- a/ontology/yaml/resources/HVAC/entity_types/CH.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/CH.yaml @@ -97,6 +97,7 @@ CH_SS_SCHWTC_CWDT: - CWDT CH_SS_RCHWTC_CWDT: + guid: "1f0accb9-f2d8-4258-a048-8d3c7a7510d0" description: "Simple water cooled chiller, return water temperature control." is_canonical: true implements: diff --git a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml index b2f851c4b..3dd64c4e0 100644 --- a/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml +++ b/ontology/yaml/resources/HVAC/entity_types/SENSOR.yaml @@ -257,6 +257,7 @@ SENSOR_ZTM_ZHM_CO2M_VOCM_PMM: - PMM SENSOR_ZTM_ZHM_ZOC: + guid: "cf04e900-0c65-4bb5-b769-6926f88c88dc" description: "Zone occupant counter with zone temperature & humidity monitoring." is_canonical: true implements: @@ -266,6 +267,7 @@ SENSOR_ZTM_ZHM_ZOC: - ZOC SENSOR_ZTM_ZHM_CO2M_VOCM_PMDM_SPLM_ZAQIM: + guid: "d1abcda3-d6a1-477d-b690-a993d7a3947f" description: "Indoor Air Quality sensor with temperature, humidity, CO2, VOC, particulates (density), illuminance and sound monitoring." is_canonical: true implements: @@ -281,6 +283,7 @@ SENSOR_ZTM_ZHM_CO2M_VOCM_PMDM_SPLM_ZAQIM: - illuminance_sensor SENSOR_ZTM_ZHM_CO2M_VOCM_PMDM: + guid: "f96985ff-f152-4053-8453-85d557fd534b" description: "Indoor Air Quality sensor with temperature, humidity, CO2, VOC, particulates (density) monitoring." is_canonical: true implements: @@ -292,6 +295,7 @@ SENSOR_ZTM_ZHM_CO2M_VOCM_PMDM: - PMDM SENSOR_ZTM_ZHM_CO2M_SPLM_PMDM_COM_ZSPM_VOCM_ZAQIM_MS_TMPR: + guid: "ba5e0fb0-b20c-4bb8-a178-3c57ef261ed7" description: "Indoor Air Quality sensor with temperature, humidity, CO2, CO, sound, particulates (density), illuminance, formaldehyde, pressure sensors with air quality, vape, TVOC indexes and motion & tamper detection." is_canonical: true implements: @@ -311,6 +315,7 @@ SENSOR_ZTM_ZHM_CO2M_SPLM_PMDM_COM_ZSPM_VOCM_ZAQIM_MS_TMPR: - tamper_alarm SENSOR_ZOC: + guid: "29e14ea6-4bdc-40b7-8af2-98ffe12ecc4c" description: "Zone occupant counter sensor." is_canonical: true implements: