{
 "manufacturer": "Thermokon",
 "manufacturer_slug": "thermokon",
 "model": "JOY BACnet room thermostats / fan coil controllers (5DO, ECAO2DO, HCAO2DO, EC3AO, HC3AO)",
 "model_slug": "joy-bacnet-room-thermostat",
 "short_model": "JOY BACnet",
 "aliases": [
  "JOY FC5DO BACnet",
  "JOY ECAO2DO BACnet",
  "JOY HCAO2DO BACnet",
  "JOY EC3AO BACnet",
  "JOY HC3AO BACnet",
  "JOY HC AO2DO 24V RS485 BACnet",
  "JOY RS485 BACnet"
 ],
 "equipment_type": "Room thermostat / fan coil controller",
 "applies_to": "Thermokon JOY wall thermostats with RS485 BACnet MS/TP for fan coils, heating/cooling valves and 6-way valves, in 230 V and 24 V versions with optional CO2 and humidity sensors.",
 "summary": "JOY is a touch-display room thermostat that runs its own heating/cooling control for fan coils, valves and 6-way valves, with a time program, ECO mode and up to two universal inputs. Its BACnet MS/TP interface exposes the measured values and states, plus 'overwrite' objects the BMS uses to set occupancy, ECO, setpoint, change-over, fan stage and the outputs. Configuration is done with Thermokon's uConfig tool and sent as a file over BACnet.",
 "bacnet_transport": [
  "BACnet MS/TP"
 ],
 "firmware": "4.0.0 (manual revision 5)",
 "default_device_instance": "Offset Device ID (AV 100, default 100) + MAC address",
 "access_inferred": true,
 "notes": [
  "Object list from section 9.1 of the JOY BACnet description, revision 5 (23.06.2025), pages 45-49, plus the file object from section 7.3.",
  "Several objects exist only on some variants (column 'Type' in the manual): AI 8-9 on EC 3AO/HC 3AO, AI 10 on HC 3AO/HC AO2DO, AI 11 on EC 3AO/EC AO2DO, BI 8-9 on relay variants, keys BI 12-13 on HC variants.",
  "The fan-stage states differ by variant. Shown here are the 5DO states; on EC 3AO/EC AO2DO, MI 2 runs 1=off, 2-6=stages, 7=Auto Off, 8-12=Auto stages and MV 2 runs 1=off, 2-6=stage 1-5, 7=AUTO; HC variants use 1=off, 2-4=stage 1-3 on MV 2.",
  "The manual has no access column; inputs are shown read-only and values writable."
 ],
 "source": {
  "title": "Description JOY BACnet",
  "doc_number": null,
  "revision_date": "Revision 5, 23.06.2025",
  "url": "https://www.thermokon.de/direct/files/joy-rs485-bacnet-manual.zip"
 },
 "points": [
  {
   "type": "DEV",
   "instance": null,
   "name": "MAC-address_Offset deviceID_ModelName",
   "description": "Device object; instance = Offset Device ID + MAC address",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "FILE",
   "instance": 0,
   "name": "confJoy.bin",
   "description": "Configuration file transfer (uConfig)",
   "units": "",
   "access": "W",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 1,
   "name": "Set point base",
   "description": "Base setpoint",
   "units": "°C",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 2,
   "name": "Set point offset",
   "description": "Setpoint offset set by the user",
   "units": "°C",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 3,
   "name": "Set point heating",
   "description": "Active heating setpoint",
   "units": "°C",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 4,
   "name": "Set point cooling",
   "description": "Active cooling setpoint",
   "units": "°C",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 5,
   "name": "Internal temperature sensor",
   "description": "Built-in temperature sensor",
   "units": "°C",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 6,
   "name": "External temperature sensor",
   "description": "External temperature sensor",
   "units": "°C",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 7,
   "name": "Manipulated variable",
   "description": "Controller output",
   "units": "%",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 8,
   "name": "Output heating",
   "description": "Heating output (EC 3AO, HC 3AO)",
   "units": "V",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 9,
   "name": "Output cooling",
   "description": "Cooling output (EC 3AO, HC 3AO)",
   "units": "V",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 10,
   "name": "Output 6-way valve",
   "description": "6-way valve output (HC 3AO, HC AO2DO)",
   "units": "V",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 11,
   "name": "Output Fan coil EC-type",
   "description": "EC fan output (EC 3AO, EC AO2DO)",
   "units": "V",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 12,
   "name": "Internal humidity sensor",
   "description": "Room humidity (rH variants)",
   "units": "%",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 13,
   "name": "Internal CO2-sensor",
   "description": "Room CO2 (CO2 variants)",
   "units": "ppm",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 14,
   "name": "Manipulating variable 2nd control loop",
   "description": "Second control loop output",
   "units": "%",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 1,
   "name": "Set point base overwrite",
   "description": "Base setpoint from the BMS; -1 = use local setting",
   "units": "°C",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 2,
   "name": "Set point offset overwrite",
   "description": "Setpoint offset from the BMS",
   "units": "°C",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 8,
   "name": "Output heating overwrite",
   "description": "Force the heating output; -1 = automatic",
   "units": "V",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 9,
   "name": "Output cooling overwrite",
   "description": "Force the cooling output; -1 = automatic",
   "units": "V",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 10,
   "name": "Output 6- way valve output overwrite",
   "description": "Force the 6-way valve output; -1 = automatic",
   "units": "V",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 11,
   "name": "Output fan coil value overwrite",
   "description": "Force the EC fan output; -1 = automatic",
   "units": "",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 100,
   "name": "Offset Device ID",
   "description": "Offset added to the MAC address for the device instance",
   "units": "",
   "access": "W",
   "states": ""
  },
  {
   "type": "BI",
   "instance": 1,
   "name": "Device state",
   "description": "Unit on or in standby",
   "units": "",
   "access": "R",
   "states": "0=Device on, 1=standby (off)"
  },
  {
   "type": "BI",
   "instance": 2,
   "name": "Occupancy state",
   "description": "Room occupancy",
   "units": "",
   "access": "R",
   "states": "0=room unoccupied, 1=room occupied"
  },
  {
   "type": "BI",
   "instance": 3,
   "name": "Dew point state",
   "description": "Dew point detected",
   "units": "",
   "access": "R",
   "states": "0=dew point inactive, 1=dew point active"
  },
  {
   "type": "BI",
   "instance": 4,
   "name": "Window state",
   "description": "Window open",
   "units": "",
   "access": "R",
   "states": "0=window closed, 1=window open"
  },
  {
   "type": "BI",
   "instance": 5,
   "name": "ECO mode",
   "description": "ECO mode active",
   "units": "",
   "access": "R",
   "states": "0=ECO mode inactive, 1=ECO mode active"
  },
  {
   "type": "BI",
   "instance": 6,
   "name": "State input 1",
   "description": "Input 1 contact",
   "units": "",
   "access": "R",
   "states": "0=open, 1=closed"
  },
  {
   "type": "BI",
   "instance": 7,
   "name": "State input 2",
   "description": "Input 2 contact",
   "units": "",
   "access": "R",
   "states": "0=open, 1=closed"
  },
  {
   "type": "BI",
   "instance": 8,
   "name": "Output heating",
   "description": "Heating relay output (5DO, EC/HC AO2DO)",
   "units": "",
   "access": "R",
   "states": "0=open, 1=closed"
  },
  {
   "type": "BI",
   "instance": 9,
   "name": "Output cooling",
   "description": "Cooling relay output (5DO, EC/HC AO2DO)",
   "units": "",
   "access": "R",
   "states": "0=open, 1=closed"
  },
  {
   "type": "BI",
   "instance": 10,
   "name": "Top left",
   "description": "Key top left pressed",
   "units": "",
   "access": "R",
   "states": "0=inactive, 1=active"
  },
  {
   "type": "BI",
   "instance": 11,
   "name": "Top right",
   "description": "Key top right pressed",
   "units": "",
   "access": "R",
   "states": "0=inactive, 1=active"
  },
  {
   "type": "BI",
   "instance": 12,
   "name": "Center left",
   "description": "Key center left pressed",
   "units": "",
   "access": "R",
   "states": "0=inactive, 1=active"
  },
  {
   "type": "BI",
   "instance": 13,
   "name": "Center right",
   "description": "Key center right pressed",
   "units": "",
   "access": "R",
   "states": "0=inactive, 1=active"
  },
  {
   "type": "BI",
   "instance": 14,
   "name": "Bottom left",
   "description": "Key bottom left pressed",
   "units": "",
   "access": "R",
   "states": "0=inactive, 1=active"
  },
  {
   "type": "BI",
   "instance": 15,
   "name": "Bottom right",
   "description": "Key bottom right pressed",
   "units": "",
   "access": "R",
   "states": "0=inactive, 1=active"
  },
  {
   "type": "BI",
   "instance": 16,
   "name": "CO2-alarm",
   "description": "CO2 alarm",
   "units": "",
   "access": "R",
   "states": "0=inactive, 1=active"
  },
  {
   "type": "BV",
   "instance": 1,
   "name": "Device state overwrite",
   "description": "Switch the unit on or to standby",
   "units": "",
   "access": "W",
   "states": "0=Device on, 1=standby (off)"
  },
  {
   "type": "BV",
   "instance": 2,
   "name": "Occupancy state overwrite",
   "description": "Occupancy command from the BMS",
   "units": "",
   "access": "W",
   "states": "0=room unoccupied, 1=room occupied"
  },
  {
   "type": "BV",
   "instance": 3,
   "name": "Dew point state overwrite",
   "description": "Dew point signal from the BMS",
   "units": "",
   "access": "W",
   "states": "0=dew point inactive, 1=dew point active"
  },
  {
   "type": "BV",
   "instance": 4,
   "name": "Window state overwrite",
   "description": "Window signal from the BMS",
   "units": "",
   "access": "W",
   "states": "0=window closed, 1=window open"
  },
  {
   "type": "BV",
   "instance": 5,
   "name": "ECO mode overwrite",
   "description": "ECO mode command from the BMS",
   "units": "",
   "access": "W",
   "states": "0=deactivate ECO mode, 1=activate ECO mode"
  },
  {
   "type": "BV",
   "instance": 6,
   "name": "Default alarm",
   "description": "Alarm indication on the display",
   "units": "",
   "access": "W",
   "states": "0=alarm inactive, 1=alarm active"
  },
  {
   "type": "MI",
   "instance": 1,
   "name": "Change-over state",
   "description": "Current change-over mode",
   "units": "",
   "access": "R",
   "states": "1=heating mode (cooling locked), 2=cooling mode (heating locked), 3=Data point inactive"
  },
  {
   "type": "MI",
   "instance": 2,
   "name": "State fan coil",
   "description": "Current fan stage",
   "units": "",
   "access": "R",
   "states": "1=off, 2=stage 1, 3=stage 2, 4=stage 3, 5=Auto Off, 6=Auto stage 1, 7=Auto stage 2, 8=Auto stage 3 (5DO)"
  },
  {
   "type": "MI",
   "instance": 3,
   "name": "Controller state",
   "description": "Current controller state",
   "units": "",
   "access": "R",
   "states": "0=off, 1=heating, 2=cooling"
  },
  {
   "type": "MV",
   "instance": 1,
   "name": "Change-over overwrite",
   "description": "Change-over mode from the BMS",
   "units": "",
   "access": "W",
   "states": "1=heating mode (cooling locked), 2=cooling mode (heating locked), 3=mode not defined, 4=Data point inactive"
  },
  {
   "type": "MV",
   "instance": 2,
   "name": "Fan coil value overwrite",
   "description": "Fan stage command from the BMS",
   "units": "",
   "access": "W",
   "states": "1=off, 2=stage 1, 3=stage 2, 4=stage 3, 5=AUTO (5DO)"
  },
  {
   "type": "MV",
   "instance": 3,
   "name": "Preset Controller",
   "description": "Controller mode preset (auto, heating/cooling only, manual)",
   "units": "",
   "access": "W",
   "states": "1=off, 2=heating AUTO, 3=cooling AUTO, 4=AUTO, 5=heating AUTO both outputs, 6=cooling AUTO both outputs, 7=outputs OFF (manual), 8=output heating ON (manual), 9=output cooling ON (manual), 10=heating MANUAL both outputs, 11=cooling MANUAL both outputs"
  },
  {
   "type": "MV",
   "instance": 4,
   "name": "Release of keys",
   "description": "Key lock",
   "units": "",
   "access": "W",
   "states": "1=all keys released, 2=all keys locked, 3=fan coil keys locked"
  },
  {
   "type": "MV",
   "instance": 4183,
   "name": "COV mode",
   "description": "COV notifications off, local or global broadcast",
   "units": "",
   "access": "W",
   "states": "1=off, 2=local, 3=global"
  }
 ],
 "integration": {
  "summary": "Set the MAC address and baud rate in the JOY parameter menu, then command the unit through the overwrite objects: Device state (BV 1), occupancy (BV 2), ECO (BV 5), base setpoint (AV 1) and fan stage (MV 2). Read the room temperature, active setpoints, controller state and alarm inputs.",
  "minimum_points": [
   {
    "ref": "BV 1",
    "name": "Device state overwrite",
    "why": "Unit on (0) or standby (1)"
   },
   {
    "ref": "BV 2",
    "name": "Occupancy state overwrite",
    "why": "Occupancy command, 1 = occupied"
   },
   {
    "ref": "BV 5",
    "name": "ECO mode overwrite",
    "why": "ECO mode on/off"
   },
   {
    "ref": "AV 1",
    "name": "Set point base overwrite",
    "why": "Base setpoint; -1 returns to local setting"
   },
   {
    "ref": "MV 2",
    "name": "Fan coil value overwrite",
    "why": "Fan stage command"
   },
   {
    "ref": "MI 3",
    "name": "Controller state",
    "why": "Off, heating or cooling"
   },
   {
    "ref": "AI 5",
    "name": "Internal temperature sensor",
    "why": "Room temperature"
   },
   {
    "ref": "AI 3",
    "name": "Set point heating",
    "why": "Active heating setpoint"
   },
   {
    "ref": "AI 4",
    "name": "Set point cooling",
    "why": "Active cooling setpoint"
   },
   {
    "ref": "BI 16",
    "name": "CO2-alarm",
    "why": "CO2 alarm (CO2 variants)"
   }
  ],
  "enable": "Device state overwrite (BV 1) switches the unit between on and standby; Occupancy state overwrite (BV 2) and ECO mode overwrite (BV 5) set the operating mode. An occupied command can override an active ECO mode if that option is configured.",
  "heartbeat": null,
  "remote_sensors": "Dew point (BV 3) and window (BV 4) states can come from the BMS instead of wired inputs. Writing the base setpoint (AV 1) overrides the time program until -1 is written back; output overwrites (AV 8-11) also use -1 for automatic.",
  "setup": [
   "MAC address 0-127 and baud rate are set in the parameter menu.",
   "Device instance = Offset Device ID (AV 100, default 100) + MAC address.",
   "Configuration (time program, inputs, controller) is written as confJoy.bin through BACnet file transfer (FILE 0) with uConfig."
  ],
  "gotchas": [
   "A written base setpoint stays in force and disables the time channel until -1 is written.",
   "Output overwrite AVs keep forcing the output until set back to -1."
  ]
 },
 "page": "https://easybacnet.com/bacnet-points-lists/thermokon/joy-bacnet-room-thermostat",
 "note": "Provided as-is. Point availability varies by firmware and options; verify against the live device.",
 "disclaimer": "DISCLAIMER: reference only, provided AS IS with no warranty. May contain errors or be out of date. You must verify every point against the manufacturer's current documentation and the live device before use. easybacnet.com accepts no liability for its use and is not affiliated with the manufacturer. Terms: https://easybacnet.com/terms#content"
}
