upm  1.3.0
Sensor/Actuator repository for libmraa (v1.7.0)
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Public Types | Public Member Functions | Protected Attributes
TB7300 Class Reference

Honeywell TB7300 Communicating Fan Coil Thermostat. More...

Detailed Description

This module implements support for the Honeywell TB7300 Communicating Fan Coil Thermostat. It may also support the TB7200, though only the TB7300 was available for development of this driver.

The TB7200 Series PI thermostats are designed for zoning applications, and the TB7300 Series PI thermostats are designed for fan coil control. Both Series are communicating thermostats with models available in BACnet(r) MS/TP protocol and can be easily integrated into a WEBs-AX building automation system based on the NiagaraAX(r) platform.

TB7200 and TB7300 Series thermostats are compatible with the Honeywell Occupancy Sensor Cover. Thermostats equipped with an occupancy sensor cover provide advanced active occupancy logic, which will automatically switch occupancy levels from Occupied to Stand-By and Unoccupied as required by local activity being present or not. This advanced occupancy functionality provides advantageous energy savings during occupied hours without sacrificing occupant comfort. All thermostats can be ordered with or without a factory installed PIR cover.

If you intend to work with this device and driver, it is strongly suggested you get the BACnet Intergration Guide document for this device: 63-4524.pdf as recommended in the device documentation.

This module was developed using the upm::BACNETMSTP library, based on libbacnet-stack 0.8.3. Both libbacnet 0.8.3 and the upm::BACNETMSTP libraries must be present in order to build this module.

It was connected using an RS232->RS485 interface. You cannot use the built in MCU TTL UART pins for accessing this device – you must use a full Serial RS232->RS485 or USB-RS485 interface connected via USB.

// You will need to edit this example to conform to your site and your
// devices, specifically the Device Object Instance ID passed to the
// constructor, and the arguments to initMaster() that are
// appropriate for your BACnet network.
string defaultDev = "/dev/ttyUSB0";
// if an argument was specified, use it as the device instead
if (argc > 1)
defaultDev = string(argv[1]);
cout << "Using device " << defaultDev << endl;
cout << "Initializing..." << endl;
// Instantiate an TB7300 object for an TB7300 device that has 73001
// as it's unique Device Object Instance ID. NOTE: You will
// certainly want to change this to the correct value for your
// device(s).
TB7300 *sensor = new TB7300(73001);
// Initialize our BACnet master, if it has not already been
// initialized, with the device and baudrate, choosing 1000001 as
// our unique Device Object Instance ID, 2 as our MAC address and
// using default values for maxMaster and maxInfoFrames
sensor->initMaster(defaultDev, 38400, 1000001, 2);
// Uncomment to enable debugging output
// sensor->setDebug(true);
cout << endl;
cout << "Device Name: " << sensor->getDeviceName() << endl;
cout << "Device Description: " << sensor->getDeviceDescription() << endl;
cout << "Device Location: " << sensor->getDeviceLocation() << endl;
cout << endl;
cout << "Fan Mode: "
<< sensor->getMultiStateValueText(TB7300::MV_Fan_Mode)
<< endl;
cout << "Fan Status: "
<< sensor->getMultiStateValueText(TB7300::MV_Fan_Status)
<< endl;
cout << "System Mode: "
<< sensor->getMultiStateValueText(TB7300::MV_System_Mode)
<< endl;
cout << "Service Alarm: "
<< sensor->getBinaryInputText(TB7300::BI_Service_Alarm)
<< endl;
cout << endl;
// update and print the room temperature every 5 seconds
while (shouldRun)
// update our values
// we show both C and F for temperature
cout << "Temperature: " << sensor->getTemperature()
<< " C / "
<< sensor->getTemperature(true)
<< " F"
<< endl;
cout << endl;
cout << "Exiting..." << endl;
delete sensor;

Public Types

enum  ANALOG_VALUES_T : uint32_t {
  AV_Room_Temperature = 7, AV_PI_Heating_Demand = 21, AV_PI_Cooling_Demand = 22, AV_Occupied_Heat_Setpoint = 39,
  AV_Occupied_Cool_Setpoint = 40, AV_Standby_Heat_Setpoint = 41, AV_Standby_Cool_Setpoint = 42, AV_Unoccupied_Heat_Setpoint = 43,
  AV_Unoccupied_Cool_Setpoint = 44, AV_Password_Value = 56, AV_Heating_Setpoint_Limit = 58, AV_Cooling_Setpoint_Limit = 59,
  AV_Deadband = 63, AV_Standby_Time = 67, AV_Unoccupied_Time = 68
enum  ANALOG_INPUTS_T : uint32_t { AI_Supply_Temperature = 12 }
enum  BINARY_VALUES_T : uint32_t {
  BV_Temp_Override = 8, BV_Aux_Command = 14, BV_Menu_Scroll = 49, BV_Auto_Mode_Enable = 50,
  BV_Temperature_Scale = 51, BV_Setpoint_Type = 60, BV_Setpoint_Function = 61, BV_Reheat_Timebase = 64,
  BV_Auto_Fan = 66, BV_Control_type = 75, BV_Direct_Reverse_Acting = 78
enum  BINARY_INPUTS_T : uint32_t {
  BI_AUX_Status = 25, BI_BI1_Status = 29, BI_BI2_Status = 30, BI_UI3_Status = 31,
  BI_Local_Motion = 32, BI_Window_Alarm = 35, BI_Filter_Alarm = 36, BI_Service_Alarm = 37
enum  MULTISTATE_VALUES_T : uint32_t {
  MV_Sequence_of_Operation = 15, MV_System_Mode = 16, MV_Fan_Mode = 17, MV_Occupancy_Command = 18,
  MV_Keypad_Lockout = 19, MV_Heating_Valve_Status = 26, MV_Cooling_Valve_Status = 27, MV_Fan_Status = 28,
  MV_Effective_Occupancy = 33, MV_BI1_Configuration = 46, MV_BI2_Configuration = 47, MV_UI1_Configuration = 48,
  MV_Pipe_Number = 52, MV_Out1_Config = 53, MV_AUX_Configuration = 54, MV_Fan_Mode_Sequence = 58,
  MV_Temporary_Occupancy_Time = 62, MV_Proportional_Band = 65, MV_Floating_Motor_Timing = 76, MV_On_Off_Control_CPH = 77

Public Member Functions

 TB7300 (uint32_t targetDeviceObjectID)
 ~TB7300 ()
void update ()
float getTemperature (bool fahrenheit=false)
void setTemperatureScale (bool fahrenheit)
bool getTemperatureScale ()
- Public Member Functions inherited from BACNETUTIL
 BACNETUTIL (uint32_t targetDeviceObjectID)
virtual ~BACNETUTIL ()
virtual void initMaster (std::string port, int baudRate, int deviceInstanceNumber, int macAddr, int maxMaster=DEFAULT_MAX_MASTER, int maxInfoFrames=1)
virtual void setDebug (bool enable)
virtual float getAnalogValue (uint32_t objInstance)
virtual void setAnalogValue (uint32_t objInstance, float value)
virtual float getAnalogInput (uint32_t objInstance)
virtual std::string getAnalogValueUnits (uint32_t objInstance)
virtual std::string getAnalogInputUnits (uint32_t objInstance)
virtual bool getBinaryInput (uint32_t objInstance)
virtual std::string lookupBinaryInputText (uint32_t objInstance, bool value)
virtual std::string getBinaryInputText (uint32_t objInstance)
virtual bool getBinaryValue (uint32_t objInstance)
virtual void setBinaryValue (uint32_t objInstance, bool value)
virtual std::string lookupBinaryValueText (uint32_t objInstance, bool value)
virtual std::string getBinaryValueText (uint32_t objInstance)
virtual unsigned int getMultiStateValue (uint32_t objInstance)
virtual std::string lookupMultiStateValueText (uint32_t objInstance, unsigned int value)
virtual std::string getMultiStateValueText (uint32_t objInstance)
virtual unsigned int getMultiStateValueMaxStates (uint32_t objInstance)
virtual void setMultiStateValue (uint32_t objInstance, unsigned int value)
virtual void checkReliability (bool enable)
virtual std::string getDeviceDescription ()
virtual std::string getDeviceLocation ()
virtual bool setDeviceLocation (std::string location)
virtual std::string getDeviceName ()
virtual bool setDeviceName (std::string name)
virtual std::string getAllErrorString ()
virtual BACNETMSTP::BACERR_TYPE_T getErrorType ()
virtual uint8_t getRejectReason ()
virtual std::string getRejectString ()
virtual uint8_t getAbortReason ()
virtual std::string getAbortString ()
virtual BACNET_ERROR_CLASS getErrorClass ()
virtual BACNET_ERROR_CODE getErrorCode ()
virtual std::string getErrorString ()
virtual std::string getUPMErrorString ()

Protected Attributes

float m_temperature
bool m_isTempInitialized
bool m_isCelsius
- Protected Attributes inherited from BACNETUTIL
bool m_debugging
bool m_checkReliability
uint32_t m_targetDeviceObjectID
bool m_initialized
binaryInfo_t m_bvInfo
binaryInfo_t m_biInfo
multiStateInfo_t m_msvInfo
avCacheMap_t m_avUnitCache
aiCacheMap_t m_aiUnitCache

Additional Inherited Members

- Protected Types inherited from BACNETUTIL
typedef std::map< uint32_t,
typedef std::map< uint32_t,
typedef std::map< uint32_t,
std::string > 
typedef std::map< uint32_t,
std::string > 
- Protected Member Functions inherited from BACNETUTIL
virtual void updateMultiStateValueInfo (uint32_t objInstance)
virtual void deleteMultiStateValueInfo (uint32_t objInstance)
virtual void updateBinaryValueInfo (uint32_t objInstance)
virtual void deleteBinaryValueInfo (uint32_t objInstance)
virtual void updateBinaryInputInfo (uint32_t objInstance)
virtual void deleteBinaryInputInfo (uint32_t objInstance)

Constructor & Destructor Documentation

TB7300 ( uint32_t  targetDeviceObjectID)

TB7300 constructor

targetDeviceObjectIDthe unique Instance ID of the Device Object. This number is used to uniquely identify devices on the BACnet network, and ranges from 1 to 4194302. This is not the device's MAC address, though on some devices, the MAC address may be used as part of this number. On the TB7300, this number depends on the model and the MAC address.

Here is the call graph for this function:

~TB7300 ( )

TB7300 Destructor

Member Function Documentation

void update ( void  )

Read current temperature from the sensor and update internal stored value. This method must be called prior to querying the temperature. All other values in the device must be queried directly via the appropriate BACNETUTIL::get*() methods depending on the object of interest.

Here is the call graph for this function:

float getTemperature ( bool  fahrenheit = false)

Get the current temperature. update() must have been called prior to calling this method.

fahrenheittrue to return the temperature in degrees fahrenheit, false to return the temperature in degrees celsius. The default is false (degrees Celsius).
The last temperature reading in Celsius or Fahrenheit.
void setTemperatureScale ( bool  fahrenheit)

Set the device temperature scale to Celsius of Fahrenheit. For devices with an LCD display, this will affect which scale is displayed. When changing the scale, it may take several seconds for the setting to take effect.

fahrenheittrue to set the scale to fahrenheit, false for celsius.

Here is the call graph for this function:

bool getTemperatureScale ( )

Get the device temperature scale.

true if scale is fahrenheit, false for celsius.

Here is the call graph for this function:

Here is the caller graph for this function:

Inheritance diagram for TB7300:
Inheritance graph
Collaboration diagram for TB7300:
Collaboration graph

The documentation for this class was generated from the following files: