Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions src/xeto/ph.doc/Meters.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

Expand Down
6 changes: 6 additions & 0 deletions src/xeto/ph.points.elec/sp-dc.xeto
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
56 changes: 56 additions & 0 deletions src/xeto/ph.points/evse.xeto
Original file line number Diff line number Diff line change
@@ -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 <abstract> {
evse
coupler
enum: Obj <val:EvseCouplerStatusEnum>
}

// 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 <val:EvsePortChargingStatusEnum>
}
5 changes: 5 additions & 0 deletions src/xeto/ph.points/misc.xeto
Original file line number Diff line number Diff line change
Expand Up @@ -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 <quantity:"time"> "hr"
}
36 changes: 36 additions & 0 deletions src/xeto/ph.points/motor.xeto
Original file line number Diff line number Diff line change
Expand Up @@ -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 <abstract> { 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 <abstract> {
mech
rotational
direction
enum: Obj <val:MechRotationalDirectionEnum>
}

// 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 }
9 changes: 9 additions & 0 deletions src/xeto/ph.points/surface-temp.xeto
Original file line number Diff line number Diff line change
Expand Up @@ -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
//////////////////////////////////////////////////////////////////////////
Expand Down
21 changes: 21 additions & 0 deletions src/xeto/ph/entity.xeto
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
// to ensure consistent usage of terminology.
PhEntity: Entity <abstract> {

// 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

Expand Down Expand Up @@ -100,6 +104,10 @@ PhEntity: Entity <abstract> {
// 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

Expand Down Expand Up @@ -1256,6 +1264,9 @@ PhEntity: Entity <abstract> {
// Rotary screw compression
*rotaryScrew: Marker

// Rotation or spinning motion around an axis
*rotational: Marker

// Device used to route data packets
*router: Marker

Expand All @@ -1271,6 +1282,9 @@ PhEntity: Entity <abstract> {
// 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

Expand Down Expand Up @@ -1504,6 +1518,9 @@ PhEntity: Entity <abstract> {
// 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

Expand Down Expand Up @@ -1576,6 +1593,10 @@ PhEntity: Entity <abstract> {
// 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

Expand Down