{
 "manufacturer": "Belimo",
 "manufacturer_slug": "belimo",
 "model": "Thermal Energy Meter V4",
 "model_slug": "thermal-energy-meter-v4",
 "aliases": [
  "TEM",
  "Thermal Energy Meter",
  "22PE-1U",
  "22PEM-1UC",
  "22PE…-1U..",
  "Belimo energy meter"
 ],
 "equipment_type": "Thermal (BTU) energy meter",
 "applies_to": "Belimo Thermal Energy Meters version 4, DN 15 to 50 (22PE..-1U.., including MID-certified 22PEM models).",
 "summary": "The Belimo Thermal Energy Meter combines an ultrasonic flow sensor with supply and return temperature sensors to measure heating and cooling power and energy in hydronic circuits. It offers BACnet MS/TP and BACnet IP (with foreign-device registration). It is a read-only metering device apart from unit selection, meter-register choice and the extra sensor input settings.",
 "bacnet_transport": [
  "BACnet IP",
  "BACnet MS/TP"
 ],
 "firmware": "Application 04.02.0000, firmware 14.10.0002",
 "default_device_instance": 1,
 "access_inferred": false,
 "notes": [
  "The document prints access as R / W; those objects are listed here as writable (W).",
  "Units of flow, power, energy, volume and temperature objects follow the unit-select MVs 123-127.",
  "MV 200 picks the certified register (MID models 22PEM only) or the lifetime register; energy and volume objects follow it.",
  "Sensor 1 objects (AI 20/21, AV 20, BI 20) are out of service unless MV 220/221 select the matching sensor type.",
  "Value ranges depend on pipe size (DN)."
 ],
 "integration": {
  "summary": "Set the units once (MV 123-127), then read heating and cooling power and energy, flow and the two temperatures. Use the PIV energy objects if the BMS prefers integer totals. Watch MV 99 and AV 140 for faults.",
  "minimum_points": [
   {
    "ref": "AV 48",
    "name": "HeatingEnergy_UnitSel",
    "why": "Heating energy total"
   },
   {
    "ref": "AV 47",
    "name": "CoolingEnergy_UnitSel",
    "why": "Cooling energy total"
   },
   {
    "ref": "AV 46",
    "name": "HeatingPower_UnitSel",
    "why": "Heating power delivered; units set by MV 124"
   },
   {
    "ref": "AV 45",
    "name": "CoolingPower_UnitSel",
    "why": "Cooling power delivered; units set by MV 124"
   },
   {
    "ref": "AV 19",
    "name": "AbsFlow_UnitSel",
    "why": "Measured flow"
   },
   {
    "ref": "AI 22",
    "name": "T1_UnitSel",
    "why": "Remote temperature"
   },
   {
    "ref": "AI 23",
    "name": "T2_UnitSel",
    "why": "Flow body temperature"
   },
   {
    "ref": "MV 99",
    "name": "SummaryStatus",
    "why": "Overall OK / warning / not OK"
   },
   {
    "ref": "AV 140",
    "name": "ErrorState",
    "why": "Bit-coded fault and warning flags"
   }
  ],
  "enable": null,
  "heartbeat": null,
  "remote_sensors": null,
  "setup": [
   "Default device instance 1.",
   "MS/TP: baud 9600-115200, default 38400; MAC address 0-127, default 1; max 32 nodes without repeater.",
   "BACnet IP: UDP port configurable, default 47808; foreign-device registration supported.",
   "Configure with Belimo Assistant 2 or the built-in web server; bus termination shows in BV 99."
  ],
  "gotchas": [
   "Writable objects with instance 90 and above are persistent; do not write them on a regular basis.",
   "Avoid toggling MV 200 between certified and lifetime registers, it disrupts energy logging.",
   "The certified register resets when the sensor module is replaced.",
   "Max 6 active COV subscriptions."
  ]
 },
 "source": {
  "title": "BACnet Interface Description, Thermal Energy Meter (TEM), DN 15...50 (Version 4)",
  "doc_number": null,
  "revision_date": "2025-11 / V4.2.0",
  "url": "https://www.belimo.com/mam/general-documents/system_integration/BACnet/belimo_BACnet_Interface-description_TEM_V4_2_en-gb.pdf"
 },
 "points": [
  {
   "type": "BV",
   "instance": 99,
   "name": "BusTermination",
   "description": "120 Ω bus termination enabled",
   "units": "",
   "access": "R",
   "states": "0=Disabled, 1=Enabled"
  },
  {
   "type": "AV",
   "instance": 10,
   "name": "RelFlow",
   "description": "Flow relative to nominal flow qp",
   "units": "%",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 19,
   "name": "AbsFlow_UnitSel",
   "description": "Measured absolute flow",
   "units": "m³/s, m³/h, l/s, l/min, l/h, gpm or cfm (MV 123)",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 100,
   "name": "Vnom_UnitSel",
   "description": "Nominal flow qp",
   "units": "m³/s, m³/h, l/s, l/min, l/h, gpm or cfm (MV 123)",
   "access": "R",
   "states": ""
  },
  {
   "type": "MV",
   "instance": 123,
   "name": "UnitSelFlow",
   "description": "Engineering unit for flow objects",
   "units": "",
   "access": "W",
   "states": "1=m³/s, 2=m³/h, 3=l/s, 4=l/min, 5=l/h, 6=gpm, 7=cfm"
  },
  {
   "type": "AV",
   "instance": 52,
   "name": "Volume_UnitSel",
   "description": "Accumulated volume",
   "units": "m³, l, gal or cf (MV 126)",
   "access": "R",
   "states": ""
  },
  {
   "type": "PIV",
   "instance": 50,
   "name": "VolumePIV_UnitSel",
   "description": "Accumulated volume as integer",
   "units": "MV 126 unit",
   "access": "R",
   "states": ""
  },
  {
   "type": "MV",
   "instance": 126,
   "name": "UnitSelVolume",
   "description": "Engineering unit for volume objects",
   "units": "",
   "access": "W",
   "states": "1=m³, 2=Litre, 3=Gallon, 4=Cubic Foot"
  },
  {
   "type": "AV",
   "instance": 60,
   "name": "GlycolConcentration",
   "description": "Glycol concentration",
   "units": "%",
   "access": "R",
   "states": ""
  },
  {
   "type": "MV",
   "instance": 103,
   "name": "StatusSensor",
   "description": "Flow and temperature sensor status",
   "units": "",
   "access": "R",
   "states": "1=OK, 2=Flow measurement error, 3=Flowbody temperature not OK, 4=Remote temperature not OK, 5=Communication to flow sensor interrupted"
  },
  {
   "type": "MV",
   "instance": 104,
   "name": "StatusFlow",
   "description": "Flow status",
   "units": "",
   "access": "R",
   "states": "1=OK, 2=Actual flow exceeds nominal flow, 3=–, 4=–, 5=Reverse flow"
  },
  {
   "type": "MV",
   "instance": 105,
   "name": "StatusMedia",
   "description": "Medium status",
   "units": "",
   "access": "R",
   "states": "1=OK, 2=Glycol detected, 3=Freeze warning"
  },
  {
   "type": "AV",
   "instance": 45,
   "name": "CoolingPower_UnitSel",
   "description": "Cooling power",
   "units": "W, kW, MW, BTU/h, kBTU/h or ton (MV 124)",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 46,
   "name": "HeatingPower_UnitSel",
   "description": "Heating power",
   "units": "W, kW, MW, BTU/h, kBTU/h or ton (MV 124)",
   "access": "R",
   "states": ""
  },
  {
   "type": "MV",
   "instance": 124,
   "name": "UnitSelPower",
   "description": "Engineering unit for power objects",
   "units": "",
   "access": "W",
   "states": "1=W, 2=kW, 3=MW, 4=BTU/h, 5=kBTU/h, 6=ton"
  },
  {
   "type": "AV",
   "instance": 116,
   "name": "Pnom_UnitSel",
   "description": "Nominal power",
   "units": "W, kW, MW, BTU/h, kBTU/h or ton (MV 124)",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 47,
   "name": "CoolingEnergy_UnitSel",
   "description": "Cooling energy meter",
   "units": "J, kJ, MJ, GJ, Wh, kWh, MWh, BTU, kBTU or ton-h (MV 125)",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 48,
   "name": "HeatingEnergy_UnitSel",
   "description": "Heating energy meter",
   "units": "J, kJ, MJ, GJ, Wh, kWh, MWh, BTU, kBTU or ton-h (MV 125)",
   "access": "R",
   "states": ""
  },
  {
   "type": "MV",
   "instance": 125,
   "name": "UnitSelEnergy",
   "description": "Engineering unit for energy objects",
   "units": "",
   "access": "W",
   "states": "1=J, 2=kJ, 3=MJ, 4=GJ, 5=Wh, 6=kWh, 7=MWh, 8=BTU, 9=kBTU, 10=tonh"
  },
  {
   "type": "MV",
   "instance": 200,
   "name": "SelectMeterRegisters",
   "description": "Certified (MID) or lifetime meter register",
   "units": "",
   "access": "W",
   "states": "1=Certified meter register, 2=Lifetime meter register"
  },
  {
   "type": "PIV",
   "instance": 31,
   "name": "CoolingEnergyPIV_UnitSel",
   "description": "Cooling energy meter as integer",
   "units": "MV 125 unit",
   "access": "R",
   "states": ""
  },
  {
   "type": "PIV",
   "instance": 32,
   "name": "HeatingEnergyPIV_UnitSel",
   "description": "Heating energy meter as integer",
   "units": "MV 125 unit",
   "access": "R",
   "states": ""
  },
  {
   "type": "PIV",
   "instance": 201,
   "name": "MeterSerialNo_Part1",
   "description": "Energy meter serial number, first digits",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "PIV",
   "instance": 202,
   "name": "MeterSerialNo_Part2",
   "description": "Energy meter serial number, last digits",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 22,
   "name": "T1_UnitSel",
   "description": "Remote temperature T1",
   "units": "°C, K or °F (MV 127)",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 23,
   "name": "T2_UnitSel",
   "description": "Flow body temperature T2",
   "units": "°C, K or °F (MV 127)",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 20,
   "name": "Sens1Active_Volt",
   "description": "Sensor 1 input as voltage (active sensor)",
   "units": "V",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 21,
   "name": "Sens1Passive_Ohm",
   "description": "Sensor 1 input as resistance (passive sensor)",
   "units": "Ω",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 20,
   "name": "Sens1Temp_UnitSel",
   "description": "Sensor 1 as temperature (passive sensor)",
   "units": "°C, K or °F (MV 127)",
   "access": "R",
   "states": ""
  },
  {
   "type": "BI",
   "instance": 20,
   "name": "Sens1Switch",
   "description": "Sensor 1 as switch input",
   "units": "",
   "access": "R",
   "states": "0=Inactive, 1=Active"
  },
  {
   "type": "MV",
   "instance": 127,
   "name": "UnitSelTemperature",
   "description": "Engineering unit for temperature objects",
   "units": "",
   "access": "W",
   "states": "1=°C, 2=K, 3=°F"
  },
  {
   "type": "MV",
   "instance": 220,
   "name": "Sens1Type",
   "description": "Sensor 1 input type",
   "units": "",
   "access": "W",
   "states": "1=None, 2=Active Volt, 3=–, 4=Passive, 5=Switch"
  },
  {
   "type": "MV",
   "instance": 221,
   "name": "Sens1TempType",
   "description": "Sensor 1 passive element type",
   "units": "",
   "access": "W",
   "states": "1=None, 2=PT1000, 3=Ni1000EU, 4=–, 5=–, 6=–, 7=–, 8=NTC10k2, 9=NTC10k3"
  },
  {
   "type": "AV",
   "instance": 140,
   "name": "ErrorState",
   "description": "Bit-coded error and warning flags",
   "units": "",
   "access": "R",
   "states": "Bit 3=Reverse flow, 6=Flow actual exceeds flow nominal, 7=Flow measurement error, 8=Remote temperature error, 9=Flowbody temperature error, 10=Communication to sensor interrupted, 11=Freeze warning, 12=Glycol detected, 14=Device end of life reached"
  },
  {
   "type": "MV",
   "instance": 99,
   "name": "SummaryStatus",
   "description": "Summary of MV 103-105",
   "units": "",
   "access": "R",
   "states": "1=Ok, 2=Warning, 3=Not Ok"
  }
 ],
 "page": "https://easybacnet.com/bacnet-points-lists/belimo/thermal-energy-meter-v4",
 "note": "Re-typed from the manufacturer's public documentation (see source). Point availability varies by firmware and options; verify against the live device."
}
