{
 "manufacturer": "Danfoss",
 "manufacturer_slug": "danfoss",
 "model": "SonoMeter 40 BACnet MS/TP module",
 "model_slug": "sonometer-40-bacnet-mstp-module",
 "aliases": [
  "SonoMeter 40",
  "SonoMeter",
  "Sonometer 40 BACnet",
  "Danfoss BACnet MS/TP base module",
  "AQ404134831215"
 ],
 "equipment_type": "Thermal energy meter (BACnet MS/TP plug-in module)",
 "applies_to": "Danfoss SonoMeter 40 ultrasonic heat/cooling energy meters fitted with the BACnet MS/TP module.",
 "summary": "The BACnet MS/TP module plugs into a SonoMeter 40 energy meter, reads the meter over its internal bus at a set interval and serves the values as 14 read-only Analog Inputs: energy and tariff registers, volumes, pulse inputs, power, flow, the two temperatures and an info code. It is a B-ASC powered from 12-24 V AC/DC.",
 "bacnet_transport": [
  "BACnet MS/TP"
 ],
 "firmware": "Module firmware 0.8.3, application software 2.1",
 "default_device_instance": "Last 5 digits of the meter serial number",
 "access_inferred": false,
 "notes": [
  "Units are listed as alternatives (e.g. kWh or MWh); the meter's configuration sets which one applies.",
  "Names with a slash (e.g. 'Tariff 1 / Energy 2') carry one value or the other depending on meter type.",
  "Instances are not contiguous: AI 0-6, 8, 11, 14, 19-21 and 30.",
  "The device object list printed in the same document stops at AI 11, which conflicts with the object table; check on site.",
  "The module is made by Axioma Metering and reports vendor ID 1006."
 ],
 "source": {
  "title": "Operating guide, BACnet MS/TP Module for energy meter SonoMeter 40",
  "doc_number": "AQ404134831215en-010103",
  "revision_date": "2024-03",
  "url": "https://assets.danfoss.com/documents/373511/AQ404134831215en-010103.pdf"
 },
 "integration": {
  "summary": "Read the heating and cooling energy totals, power, flow and the two temperatures, and watch AI 30 for meter errors. Values only refresh at the module's update interval (300 s by default), so poll or trend no faster than that.",
  "minimum_points": [
   {
    "ref": "AI 1",
    "name": "Accumulated heat energy (E1)",
    "why": "Heating energy total"
   },
   {
    "ref": "AI 2",
    "name": "Accumulated cooling energy (E2) / Energy 1",
    "why": "Cooling energy total (Energy 1 on some meters)"
   },
   {
    "ref": "AI 11",
    "name": "Actual power",
    "why": "Thermal power, W, kW or MW"
   },
   {
    "ref": "AI 14",
    "name": "Actual flow",
    "why": "Measured flow"
   },
   {
    "ref": "AI 19",
    "name": "Flow temperature / Temperature 1",
    "why": "Supply temperature, °C"
   },
   {
    "ref": "AI 20",
    "name": "Return temperature / Temperature 2",
    "why": "Return temperature, °C"
   },
   {
    "ref": "AI 21",
    "name": "Differential temperature",
    "why": "Supply minus return, K"
   },
   {
    "ref": "AI 30",
    "name": "Info code (Error code)",
    "why": "Meter error code"
   }
  ],
  "enable": null,
  "heartbeat": null,
  "remote_sensors": null,
  "setup": [
   "Default device instance is the last 5 digits of the meter serial number; the device name defaults to 'Danfoss BACnet'.",
   "MS/TP MAC 1-127; default is the last 2 digits of the serial number or the meter's 'M-Bus 2' address.",
   "Baud 9600-115200, default 38400, 8E1 (even parity).",
   "Max-master 127 and max-info-frames 2 are writable; no segmentation.",
   "Wiring: terminals 90 (A+) and 91 (B-), power on 60/61 at 12-24 V AC/DC.",
   "Holding SET while powering up for about 12 s resets the module settings (address, baud)."
  ],
  "gotchas": [
   "Data refresh interval is 300 s by default (configurable); readings between updates do not change.",
   "The serial line is 8E1 by default, not the more common 8N1.",
   "The document gives no meanings for the AI 30 info codes; use the meter manual."
  ]
 },
 "points": [
  {
   "type": "AI",
   "instance": 0,
   "name": "Meter serial number",
   "description": "Serial number of the meter",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 1,
   "name": "Accumulated heat energy (E1)",
   "description": "Heating energy total",
   "units": "kWh or MWh",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 2,
   "name": "Accumulated cooling energy (E2) / Energy 1",
   "description": "Cooling energy, or Energy 1, depending on meter type",
   "units": "kWh or MWh",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 3,
   "name": "Tariff 1 / Energy 2",
   "description": "Tariff 1 register, or Energy 2, depending on meter type",
   "units": "kWh or MWh",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 4,
   "name": "Tariff 2",
   "description": "Tariff 2 register",
   "units": "kWh or MWh",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 5,
   "name": "Accumulated volume (V1)",
   "description": "Volume total",
   "units": "l or m³",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 6,
   "name": "Pulse input A accumulated / Accumulated volume (V2)",
   "description": "Pulse input A total, or volume V2",
   "units": "l or m³",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 8,
   "name": "Pulse input B accumulated / Accumulated volume (V3)",
   "description": "Pulse input B total, or volume V3",
   "units": "l, m³, kWh or MWh",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 11,
   "name": "Actual power",
   "description": "Instantaneous thermal power",
   "units": "W, kW or MW",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 14,
   "name": "Actual flow",
   "description": "Instantaneous flow rate",
   "units": "l/h or m³/h",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 19,
   "name": "Flow temperature / Temperature 1",
   "description": "Supply (flow) temperature",
   "units": "°C",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 20,
   "name": "Return temperature / Temperature 2",
   "description": "Return temperature",
   "units": "°C",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 21,
   "name": "Differential temperature",
   "description": "Flow minus return temperature",
   "units": "K",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 30,
   "name": "Info code (Error code)",
   "description": "Meter info / error code",
   "units": "",
   "access": "R",
   "states": ""
  }
 ],
 "page": "https://easybacnet.com/bacnet-points-lists/danfoss/sonometer-40-bacnet-mstp-module",
 "note": "Re-typed from the manufacturer's public documentation (see source). Point availability varies by firmware and options; verify against the live device."
}
