diff --git a/src/xeto/ph.doc/Meters.md b/src/xeto/ph.doc/Meters.md index 2962b82..a3dda24 100644 --- a/src/xeto/ph.doc/Meters.md +++ b/src/xeto/ph.doc/Meters.md @@ -234,6 +234,19 @@ Haystack recommends normalizing AC reactive power points as follows: - When the manufacturer does not expose a `net` point, both `import` and `export` points should be used to derive a normalized `net` value. +### Apparent Power + +Some electric meter manufacturers apply a positive or negative sign to +apparent power to convey the direction of active power flow, even though +apparent power is always non-negative by definition. + +Haystack recommends normalizing AC apparent power points as follows: + - The `absolute` tag is applied when the manufacturer exposes an absolute + apparent power point. + - When the manufacturer does not expose an `absolute` point, derive a + normalized `absolute` value by taking the absolute value of the signed + apparent power point. + ## Normalizing AC Electric Active Energy Measurements Electricity meters typically report active energy as accumulated totalized @@ -259,6 +272,19 @@ Haystack recommends normalizing AC active energy points as follows: Although totalized energy registers are most common, these recommendations apply for both totalized and untotalized interval energy data. +## Normalizing AC Electric RMS Current Measurements + +Some electric meter manufacturers apply a positive or negative sign to AC RMS +current to convey the direction of current flow, even though AC RMS current +magnitude is always non-negative by definition. + +Haystack recommends normalizing AC RMS current points as follows: + - The `absolute` tag is applied when the manufacturer exposes an absolute + current point. + - When the manufacturer does not expose an `absolute` point, derive a + normalized `absolute` value by taking the absolute value of the signed + current point. + ## Locations for AC Measurements TODO: this section is out-of-date diff --git a/src/xeto/ph.points.elec/sp-dc.xeto b/src/xeto/ph.points.elec/sp-dc.xeto index b53681c..bf63644 100644 --- a/src/xeto/ph.points.elec/sp-dc.xeto +++ b/src/xeto/ph.points.elec/sp-dc.xeto @@ -17,3 +17,9 @@ ElecDcImportPowerMaxSp : ElecDcPowerMaxSp { import } // Max setpoint for import of DC electric current ElecDcImportCurrentMaxSp : ElecDcCurrentMaxSp { import } + +// Max setpoint for import of DC electric power at a vehicle inlet +VehicleInputElecDcImportPowerMaxSp : ElecDcImportPowerMaxSp { + vehicle + input +} diff --git a/src/xeto/ph.points/evse.xeto b/src/xeto/ph.points/evse.xeto new file mode 100644 index 0000000..4c61273 --- /dev/null +++ b/src/xeto/ph.points/evse.xeto @@ -0,0 +1,56 @@ +// +// Copyright (c) 2026, Project-Haystack +// Licensed under the Academic Free License version 3.0 +// +// History: +// 23 Mar 2026 Rick Jennings Creation +// + +// Operational status enumeration for an EVSE coupler +EvseCouplerStatusEnum : Enum { + // Available for charging. + available + // Occupied. + occupied + // Reserved for a specific user. Only the intended user can authorize a transaction. + // An unauthorized user and their parked vehicle may prohibit an authorized user from recharging. + reserved + // Charging has been prohibited by the CSMS. May be the result of a faulty EVSE or for safety reasons. + unavailable + // Charging has been prohibited by the EVSE. May be the result of a faulty EVSE or for safety reasons. + fault +} + +// Sensor for an EVSE coupler's status +EvseCouplerStatusSensor : EnumPoint & SensorPoint { + evse + coupler + enum: Obj +} + +// Sensor for an EVSE cable's status +EvseCableStatusSensor : EvseCouplerStatusSensor { cable } + +// Charging status enumeration for an EVSE port +EvsePortChargingStatusEnum : Enum { + // Connected to an EV with the contactor closed to allow + // electricity flow between the EVSE port and vehicle. + charging + // Connected to an EV and not charging. + connected + // Not connected to an EV. + notConnected + // Connected to an EV but not charging, due to the vehicle + // not accepting power offered by the EVSE port. + suspendedEv + // Connected to an EV but not charging, due to the EVSE + // not offering power to the vehicle. + suspendedEvse +} + +// Sensor for an EVSE port's charging status +EvsePortChargingStatusSensor : EnumPoint & SensorPoint { + evse + port + enum: Obj +} diff --git a/src/xeto/ph.points/misc.xeto b/src/xeto/ph.points/misc.xeto index 32e84ee..7abc15f 100644 --- a/src/xeto/ph.points/misc.xeto +++ b/src/xeto/ph.points/misc.xeto @@ -103,3 +103,8 @@ HeatModulatingSensor : HeatModulatingPoint & SensorPoint // Command for modulating heating capacity as a percentage from 0% to 100%. HeatModulatingCmd : HeatModulatingPoint & CmdPoint +// Sensor for equipment runtime +RuntimeSensor : NumberPoint & SensorPoint { + runtime + unit: Unit "hr" +} diff --git a/src/xeto/ph.points/motor.xeto b/src/xeto/ph.points/motor.xeto index 563b45b..4639ca0 100644 --- a/src/xeto/ph.points/motor.xeto +++ b/src/xeto/ph.points/motor.xeto @@ -47,3 +47,39 @@ MotorSpeedModulatingSensor : MotorSpeedModulatingPoint & SensorPoint // Command for modulating motor speed. Speed is measured as a // percentage where 0% is off and 100% is full speed. MotorSpeedModulatingCmd : MotorSpeedModulatingPoint & CmdPoint + +// Sensor for mechanical frequency +MechFreqSensor : NumberPoint & SensorPoint { mech, freq } + +// Sensor for mechanical rotational frequency +MechRotationalFreqSensor : MechFreqSensor { + rotational + unit: "rpm" +} + +// Sensor for a motor shaft's mechanical rotational frequency +MotorMechRotationalFreqSensor : MechRotationalFreqSensor { motor } + +// Mechanical rotational direction enumeration, where 'forward' and 'reverse' +// are relative to the motor's nominal rotational direction +MechRotationalDirectionEnum: Enum { forward, reverse } + +// Point associated with mechanical rotational direction +MechRotationalDirectionPoint : EnumPoint { + mech + rotational + direction + enum: Obj +} + +// Sensor for mechanical rotational direction +MechRotationalDirectionSensor : MechRotationalDirectionPoint & SensorPoint + +// Command for mechanical rotational direction +MechRotationalDirectionCmd : MechRotationalDirectionPoint & CmdPoint + +// Sensor for a motor shaft's mechanical rotational direction +MotorMechRotationalDirectionSensor : MechRotationalDirectionSensor { motor } + +// Command for a motor shaft's mechanical rotational direction +MotorMechRotationalDirectionCmd : MechRotationalDirectionCmd { motor } diff --git a/src/xeto/ph.points/surface-temp.xeto b/src/xeto/ph.points/surface-temp.xeto index e1ab8db..97858ae 100644 --- a/src/xeto/ph.points/surface-temp.xeto +++ b/src/xeto/ph.points/surface-temp.xeto @@ -25,6 +25,15 @@ CableSurfaceTempSensor : SurfaceTempSensor { cable } // Sensor that measures temperature of an electric coupler CouplerSurfaceTempSensor : SurfaceTempSensor { coupler } +// Sensor that measures temperature of a motor +MotorTempSensor : SurfaceTempSensor { motor } + +// Sensor that measures temperature of a motor winding +MotorWindingTempSensor : MotorTempSensor { winding } + +// Sensor that measures temperature of a motor bearing +MotorBearingTempSensor : MotorTempSensor { bearing } + ////////////////////////////////////////////////////////////////////////// // EVSE ////////////////////////////////////////////////////////////////////////// diff --git a/src/xeto/ph/entity.xeto b/src/xeto/ph/entity.xeto index 923ae09..f2c07ca 100644 --- a/src/xeto/ph/entity.xeto +++ b/src/xeto/ph/entity.xeto @@ -12,6 +12,10 @@ // to ensure consistent usage of terminology. PhEntity: Entity { + // Unsigned magnitude of a potentially signed data value. For change + // measurements that may be negative, use 'delta' instead. + *absolute: Marker + // Cooling process using energy from heat source such as hot water *absorption: Marker @@ -100,6 +104,10 @@ PhEntity: Entity { // Equipment used to store electric energy *battery: Marker + // Mechanical component that supports rotating, reducing + // friction between moving surfaces + *bearing: Marker + // Plant or animal material used as fuel to produce electricity or heat *biomass: Marker @@ -1256,6 +1264,9 @@ PhEntity: Entity { // Rotary screw compression *rotaryScrew: Marker + // Rotation or spinning motion around an axis + *rotational: Marker + // Device used to route data packets *router: Marker @@ -1271,6 +1282,9 @@ PhEntity: Entity { // on in order to run the equipment. *run: Marker + // Accumulated time an equipment has been in operation + *runtime: Marker + // Scalar is an atomic value kind *scalar: Obj @@ -1504,6 +1518,9 @@ PhEntity: Entity { // AHU supplies air to VAV terminal units *vavZone: Marker + // Vehicle used to transport people or goods + *vehicle: Marker + // Speed in a given direction *velocity: Marker @@ -1576,6 +1593,10 @@ PhEntity: Entity { // Flow of air on surface of the Earth *wind: Marker + // Coil of wire in a transformer, motor, or other electromagnetic device used to + // transfer electricity via electromagnetic induction + *winding: Marker + // Cabling used to convey electricity or data *wire: Marker