From 04cad477087cb7e175816b8b2e6c3717349137da Mon Sep 17 00:00:00 2001 From: Andrew Garnhart Date: Mon, 9 Mar 2026 18:30:21 -0600 Subject: [PATCH 1/2] Add boiler point specs with runtime and level sensor bases Add boiler-specific point specs and the abstract base types they require that do not yet exist in the library: New abstract base types (misc.xeto): - RuntimeSensor: cumulative equipment runtime duration (hours) - LevelSensor: liquid level percentage (0-100%) - WaterLevelSensor: water-specific level sensor New global tag (entity.xeto): - runtime: cumulative time duration tracking how long equipment runs Boiler point specs (boiler.xeto): - BoilerHeatRunCmd: on/off command (extends HeatRunCmd) - BoilerHeatRunSensor: on/off status (extends HeatRunSensor) - BoilerEnableCmd: interlock enable (extends HeatEnableCmd) - BoilerHeatModulatingCmd: burner capacity 0-100% (extends HeatModulatingCmd) - BoilerWaterLevelSensor: water level 0-100% (extends WaterLevelSensor) - BoilerRuntimeSensor: cumulative runtime hours (extends RuntimeSensor) --- src/xeto/ph.points/boiler.xeto | 26 ++++++++++++++++++++++++++ src/xeto/ph.points/misc.xeto | 15 +++++++++++++++ src/xeto/ph/entity.xeto | 3 +++ 3 files changed, 44 insertions(+) create mode 100644 src/xeto/ph.points/boiler.xeto diff --git a/src/xeto/ph.points/boiler.xeto b/src/xeto/ph.points/boiler.xeto new file mode 100644 index 0000000..ac68a2e --- /dev/null +++ b/src/xeto/ph.points/boiler.xeto @@ -0,0 +1,26 @@ +// +// Copyright (c) 2026, Project-Haystack +// Licensed under the Academic Free License version 3.0 +// +// History: +// 12 Feb 2026 Adam Garnhart Creation +// + +// On/off command to run a boiler +BoilerHeatRunCmd : HeatRunCmd { boiler } + +// Sensor for on/off state of a boiler +BoilerHeatRunSensor : HeatRunSensor { boiler } + +// Command to permit/prohibit a boiler to run. +// Used as an interlock with a run command. +BoilerEnableCmd : HeatEnableCmd { boiler } + +// Command for modulating boiler heating capacity from 0% to 100% +BoilerHeatModulatingCmd : HeatModulatingCmd { boiler } + +// Sensor for boiler water level from 0% (empty) to 100% (full) +BoilerWaterLevelSensor : WaterLevelSensor { boiler } + +// Sensor for cumulative runtime duration of a boiler +BoilerRuntimeSensor : RuntimeSensor { boiler } diff --git a/src/xeto/ph.points/misc.xeto b/src/xeto/ph.points/misc.xeto index babb441..a6afe22 100644 --- a/src/xeto/ph.points/misc.xeto +++ b/src/xeto/ph.points/misc.xeto @@ -102,3 +102,18 @@ HeatModulatingSensor : HeatModulatingPoint & SensorPoint // Command for modulating heating capacity as a percentage from 0% to 100%. HeatModulatingCmd : HeatModulatingPoint & CmdPoint + +// Sensor for cumulative runtime duration of equipment +RuntimeSensor : NumberPoint & SensorPoint { + runtime + unit: Unit "hr" +} + +// Sensor for liquid level as a percentage from 0% (empty) to 100% (full) +LevelSensor : NumberPoint & SensorPoint { + level + unit: Unit "%" +} + +// Sensor for water level as a percentage from 0% (empty) to 100% (full) +WaterLevelSensor : LevelSensor { water } diff --git a/src/xeto/ph/entity.xeto b/src/xeto/ph/entity.xeto index e84490c..99d2c5c 100644 --- a/src/xeto/ph/entity.xeto +++ b/src/xeto/ph/entity.xeto @@ -1268,6 +1268,9 @@ PhEntity: Entity { // on in order to run the equipment. *run: Marker + // Cumulative time duration which tracks how long equipment has been running + *runtime: Marker + // Scalar is an atomic value kind *scalar: Obj From c0d3a2e8e9ac5df5af2a865d340abe30879e0c3d Mon Sep 17 00:00:00 2001 From: Andrew Garnhart Date: Mon, 9 Mar 2026 18:37:41 -0600 Subject: [PATCH 2/2] Improve documentation to match Haystack conventions Update comments on new specs and global tags to follow upstream documentation patterns: cross-references with bracket notation, multi-line descriptions for complex concepts, and consistent phrasing with existing specs. --- src/xeto/ph.points/boiler.xeto | 5 +++-- src/xeto/ph.points/misc.xeto | 9 ++++++--- src/xeto/ph/entity.xeto | 4 +++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/xeto/ph.points/boiler.xeto b/src/xeto/ph.points/boiler.xeto index ac68a2e..d80da8a 100644 --- a/src/xeto/ph.points/boiler.xeto +++ b/src/xeto/ph.points/boiler.xeto @@ -13,10 +13,11 @@ BoilerHeatRunCmd : HeatRunCmd { boiler } BoilerHeatRunSensor : HeatRunSensor { boiler } // Command to permit/prohibit a boiler to run. -// Used as an interlock with a run command. +// Enable is used as an interlock with a run command. BoilerEnableCmd : HeatEnableCmd { boiler } -// Command for modulating boiler heating capacity from 0% to 100% +// Command for modulating boiler heating capacity +// as a percentage from 0% to 100% BoilerHeatModulatingCmd : HeatModulatingCmd { boiler } // Sensor for boiler water level from 0% (empty) to 100% (full) diff --git a/src/xeto/ph.points/misc.xeto b/src/xeto/ph.points/misc.xeto index a6afe22..9b8ace8 100644 --- a/src/xeto/ph.points/misc.xeto +++ b/src/xeto/ph.points/misc.xeto @@ -103,17 +103,20 @@ HeatModulatingSensor : HeatModulatingPoint & SensorPoint // Command for modulating heating capacity as a percentage from 0% to 100%. HeatModulatingCmd : HeatModulatingPoint & CmdPoint -// Sensor for cumulative runtime duration of equipment +// Sensor for cumulative runtime duration of equipment. +// Runtime is measured as total operating hours. RuntimeSensor : NumberPoint & SensorPoint { runtime unit: Unit "hr" } -// Sensor for liquid level as a percentage from 0% (empty) to 100% (full) +// Sensor for liquid level as a percentage where +// 0% indicates empty and 100% indicates full LevelSensor : NumberPoint & SensorPoint { level unit: Unit "%" } -// Sensor for water level as a percentage from 0% (empty) to 100% (full) +// Sensor for water level as a percentage where +// 0% indicates empty and 100% indicates full WaterLevelSensor : LevelSensor { water } diff --git a/src/xeto/ph/entity.xeto b/src/xeto/ph/entity.xeto index 99d2c5c..a394cc9 100644 --- a/src/xeto/ph/entity.xeto +++ b/src/xeto/ph/entity.xeto @@ -1268,7 +1268,9 @@ PhEntity: Entity { // on in order to run the equipment. *run: Marker - // Cumulative time duration which tracks how long equipment has been running + // Cumulative time duration tracking how long an [ph::PhEntity.equip] has + // been running. Paired with [ph::PhEntity.sensor] to report total operating + // hours. See [ph::PhEntity.run] for the on/off state of equipment. *runtime: Marker // Scalar is an atomic value kind