BACnet Router and Server Configuration is available with SmartServer 2.5 and higher.
Info |
---|
For SmartServer 3.1 or prior, see (Optional) Setting up BACnet (Release 3.1). |
You can use the SmartServer as a BACnet server, BACnet client, and a BACnet router. Using the SmartServer BACnet Server, you can access the SmartServer from a BACnet workstation and other BACnet client applications.
To configure the BACnet server, you need to create the BACnet Type Map (BTM) file for the interface as described in this section. You can create BACnet type maps for multiple device interfaces by creating a BTM file for each.
...
...
title | Using the BTM Creation Tool |
---|
You can
...
use the BTM Creation Tool web page to automatically create one or more BTM file(s). Go to the SmartServer GitHub repository to retrieve this tool and follow the instructions in the ReadMe file to get started.
Once the BTM file is created, you will also need to:
Set up BACnet. See Add a BACnet Interface.
Import the BTM file using the Import/Export button (
...
). See Exporting and Importing
...
SmartServer Configuration Files. For SmartServer releases prior to 3.5, use the Devices Types widget. See Defining Device Types (Release 3.4 and 3.5).
This section covers the following topics:
Table of Contents | ||
---|---|---|
|
Creating a BACnet Type Map (BTM) File
...
<product>.btm.csv and <product>.csv extensions also supported but must contain the meta data line #filetype,bacnet_type_map in order to be recognized as a BTM file.
For example, if you want to map datapoints from a LON EVB defined by 6kEvbMultiSensor.xif, then you should name the BTM file 6kEvbMultiSensor.btm. Similarly, if you want to map datapoints from a Modbus device defined by Adam-4150.mod, then you should create a BTM file called Adam-4150.btm.
Consequently, you cannot have a scenario where there are multiple drivers using the same <product> name and they need to be mapped. For example, if you have device.xif and device.mod, and the two files need to be mapped, then there will be a conflict because both BTM files will need to be called device.btm.
A BACnet type map file has the following three sections.
A file type specification that identifies the file as a BACnet type map.
An XIF details section that specifies the version and XIF name (repeated from the filename) for the BACnet type map.
A datapoint list that specifies the XIF datapoints to be mapped to the BACnet Server. The first line of the datapoint list is a header with column headings for a datapoint list.
The following example shows the top portion of a BACnet type map file.
Code Block |
---|
#filetype,bacnet_type_map |
...
#version,v7.0.0 |
...
#product_name,XL10_VAV2 |
...
#program_id,80:00:0C:50:0A:03:04:03 |
...
#manufacturer,Honeywell |
...
#description,Variable Air Volume XL10 Controller |
...
Block Name,Block Index,Datapoint Name,Address,IAP Type,IAP Field,BACnet Name,BACnet Units,Description,StateTextMap |
File Type Specification
The file type specification for a BACnet type map file is the following:
Code Block |
---|
#filetype,bacnet_type_map |
If you open a CSV file with this line in Excel, it is displayed as two cells, one with with #filetype and and one with bacnet_type_map.
...
The BTM details identify the device interface (XIF) mapped by the mapping file. The BTM details has the following contents:
Code Block |
---|
#version,<Version> |
...
#product_name,<Product Name> |
...
#program_id,<Program ID> |
...
#manufacturer,<Manufacturer> |
...
#description,<Description> |
If you open a CSV file with these lines in Excel, each line is displayed as two cells.
Specify the details as follows:
<Version> – (optional) version of the mapped device.
<Product Name> – (optional) manufacturer's name for the mapped device.
<Program ID> – (optional) program ID for the mapped device.
<Manufacturer> – (optional) manufacturer of the mapped device.
<Description> – (optional) description of the mapped device.
Following is an example BTM details specification for a XL10 VAV Controller:
Code Block |
---|
#filetype,bacnet_type_map |
...
#version,v7.0.0 |
...
#product_name,XL10_VAV2 |
...
#program_id,80:00:0C:50:0A:03:04:03 |
...
#manufacturer,Honeywell |
...
#description,Variable Air Volume XL10 Controller |
Datapoint List
The datapoint list that specifies the XIF datapoints for the mapped device interface (XIF). The first line of the datapoint list is a header with column headings for a XIF datapoint list.
Following is an example datapoint list with a single XIF datapoint defined:
Code Block |
---|
Block Name,Block Index,Datapoint Name,Address,IAP Type,IAP Field,BACnet Name,BACnet Units,Description,StateTextMap |
...
VAV,0,nvoSpaceTemp,AI:1,SNVT_temp_p,,RmTemp,degrees-fahrenheit,Space Temperature, |
The following table describes the column contents for the datapoint list:
Parameter | Required/Optional | Description |
---|
Block Name | Optional | Block XIF name for the datapoint. |
If not specified |
because the column does not exist or the existing column has no entry, then the block name will |
be block. Prior to SmartServer 3.2, this parameter was called block Type. | ||
Block Index | Optional | Specifies a numeric block index. The block index can be any positive (>=0) integer value and is not required to be sequential. If not specified, the block index will be zero. For example: for a device with 8 digital outputs, you can define 8 blocks, each named DO, using indexes 0 through 7 (the index names may not be sequential, and may not start with 0). Prior to SmartServer 3.2, this parameter was called block handle. |
Datapoint Name | Required | The datapoint XIF name. This is a descriptive name to identify the datapoint. The name must be unique for all the datapoints in a block containing the datapoint (see Block Name). Multiple lines in the BTM file may specify the same block name, block index, and datapoint name. These lines specify the definition of a single IAP datapoint based on multiple BACnet objects. See IAP Type Mapping for more information. Prior to SmartServer 3.2, this parameter was called POINT NAME. |
Address | Required for BACnet if the legacy Object Type and Object Instance fields are not specified, otherwise this parameter is optional | The BACnet address, specified as <BACnet object type>:<BACnet object instance number>. The supported BACnet object types are AI, AO, AV, BI, BO, BV, LAV, IV, MSI, MSO, MSV, and PIV. LON and Modbus inputs are considered BACnet outputs (AO, BO, MSO). LON and Modbus outputs are considered BACnet inputs (AI, BI, MSI). The BACnet object instance number is the object instance number defined by the BACnet protocol. Do not include leading zeros. For example: AI:941001 is the BASremote Reset Status datapoint, but you cannot specify AI:00941001. Prior to SmartServer 3.2, this parameter was defined by two separate parameters called bacnet_type and instance. |
IAP Type | Required | IAP type that identifies how the data appears in IAP/MQ and identifies the datapoint type to be reported in IAP/MQ. Multiple BACnet objects may be mapped to a single IAP datapoint. See IAP Type Mapping for more information. Prior to SmartServer 3.2, this parameter was called SNVT type. |
IAP Field | Optional | Name of a field within the IAP type. The field is specified as a path in a nested structure. For example: the CIE luminance field in a SNVT_color_2 datapoint is named color_value/CIE1931_lumen/y. If not specified, the entire type is used. Prior to SmartServer 3.2, this parameter was called SNVT Field with a required field name or a value of "value" in the BACNET TYPE MAP file. Specifying "value" for the entire field is not required starting with SmartServer 3.2. |
BACnet Name | Required | The BACnet object name property to be published for the BACnet object by the BACnet Server. Prior to SmartServer 3.2, this parameter was called NAME. |
BACnet Units | Optional | The BACnet units property to be published for the BACnet object by the BACnet Server. Leave as blank ( ,, ) for BI, BO, BV, MSI, MSO, MSV BACnet objects. A value is optional for AI, AO, and AV BACnet objects. BACnet unit values are listed in the BACnet Units section below. Prior to SmartServer 3.2, this parameter was called Units. |
Description | Optional | Provides a human-readable freeform description of the datapoint or datapoint field. |
StateTextMap |
Required if the device interface has any multistate objects | Comma-separated list of LonWorks datapoint enumerated types and the StateTextMap value on the BACnet multistate object (described in the table below). Format:
Example:
| ||||
Trend Log | Optional | Indicates whether or not the Trend Log object is needed for a given datapoint type. If Yes or True, then the datapoint is logged. For any other value, or for a blank entry, the datapoint is not logged. The supported BACnet object properties are defined in the BACnet Object Properties table below. |
IAP Type Mapping
The BACnet Server maps native datapoints to and from IAP datapoints and datapoint fields. Type mapping is bidirectional so that the server will map received native values to IAP values, and will map received IAP value to native values.
The IAP type mapping is performed as described in the following table.
Native Type | IAP Type | Native → IAP Mapping | IAP → Native Mapping |
---|---|---|---|
Any scalar type | Any scalar type | Scaled native value | Scaled IAP value |
Multistate | Enumeration | Native BACnet-compatible multistate values are mapped to IAP enumerations based on the multistate value corresponding to the multistate string as follows: starting with a native value of 1 for the first enumeration value, incrementing the native value by one for each subsequent enumeration value followed by the zero value followed by the -1 value which will be Invalid unless otherwise specified by the enumeration, followed by each negative value starting with -2. For example, if an IAP enumeration defines values of -4, -2, 0, 1, 5, and 8, these will be mapped to native values as follows: 1 → 1, 5 → 2, 8 → 3, 0 → 4, -1 → 5, -2 → 6, and -4 → 7. The IAP values will be the enumeration strings associated with the mapped value. | The reverse of the native to IAP mapping. For the example the mapping from IAP value to native values will be based on the enumeration value corresponding to the IAP value string as follows: 1 → 1, 2 → 5, 3 → 8, 4 → 0, -5 → -1, 6 → -2, and 7 → -4. The mapped value string will be the enumeration string for the IAP value. |
Multistate | Any scalar type | Native BACnet-compatible multistate values are mapped to IAP scalars with the same value, with the multistate value corresponding to the multistate string. | The reverse of the native to IAP mapping. |
Any scalar type | Enumeration | Any native scalar type is mapped to an IAP enumeration type by setting the enumeration value to the scalar value, and the IAP value to the corresponding member name for the enumeration value. | The reverse of the native to IAP mapping. |
BACnet Units
The following tables provide a listing of names that can be listed in the BACnet Units parameter.
Info | ||
---|---|---|
title | BACnet Units | square-meters |
Info |
---|
...
BACnet Units #if ( BACNET_PROTOCOL_REVISION >= 17 )per-mille |
BACnet Object Properties
The following table lists the properties that are supported by the BACnet Trend Log object.
BACnet Property | R/W | Value |
---|---|---|
Object Identifier | RO | TLOG:{TL Instance #} Example: TLOG:0000002 |
Object Name | RO | Trend-{BACnet_instance#}-{block_name}/{block_index}/{datapoint_name} Example: Trend-002-mmAIblock/1/AI:2 |
Object Type | RO | Object Trend Log = 20 |
Enable | RW | GET /iap/log/data/{data_log_id}/state PUT /iap/log/data/{data_log_id}/state {Enabled} or |
Log Device Object Property | RO | Specifies the Device Identifier, Object Identifier, and Property Identifier of the property to be trend logged. Example: |
Log Interval | RW | Sets the Log Interval in the Device Type. The default value is 150 seconds. /iap/devTypes/{deviceType}/if/{block_name}/{block_index}/{datapoint_name} /dla GET SET |
Stope When Full | RO | Set to False; |
the data log uses a circular buffer. | ||
Buffer Size | RO | Set to 2^32 – 1 |
Description | RO | Description for this Trend Log object. |
Log Buffer | RO |
The log buffer is only accessible via the ReadRange service. | ||
Record Count | RW | GET /iap/log/data/{data_log_id}/count If Record Count is set to 0, then
|
Total Record Count | RO | GET /iap/log/data/{data_log_id}/totalCount |
Event State | RO | NORMAL |
Logging Type | RO | POLLED only. |
Status Flags | RO | Fault, alarm, or out-of-service. |
Exporting a BACnet Type Map (BTM) File
BTM file exports using the IMPORT / EXPORT dialog are available with SmartServer 4.1 (Beta) and higher.
With SmartServer 4.1 (Beta) and higher, you can export BTM files using the CMS Import/Export button (Exporting and Importing and Exporting SmartServer Configuration Files.
) → EXPORT tab → Settings option. BTM files are included in the device types package (.dtp file). SeeBACnet Type Map (BTM) File Examples
XL10 VAV Controller (with Enumerated Type)
Following is an example BACnet type map file for Honeywell's XL10 s XL10 VAV Controller that includes an enumerated type (StateTextMap parameter).
Code Block |
---|
#filetype,bacnet_type_map |
...
#version,v7.0.0 |
...
#product_name,XL10_VAV2 |
...
#program_id,80:00:0C:50:0A:03:04:03 |
...
#manufacturer,Honeywell |
...
#description,Variable Air Volume XL10 Controller |
...
Block Name,Block Index,Datapoint Name,Address,IAP Type,IAP Field,BACnet Name,BACnet Units,Description,StateTextMap |
...
VAV,0,nvoSpaceTemp,AI:1,SNVT_temp_p,,RmTemp,degrees-fahrenheit,Space Temperature, |
...
VAV,0,nvoEffectSetPt,AI:2,SNVT_temp_p,,RmTempSpt,degrees-fahrenheit,Space Temperature Setpoint, |
...
VAV,0,nciSetPts,AO:3,SNVT_temp_setpt,occupied_cool,ClgOccSpt,degrees-fahrenheit,Cooling Occupied Setpoint, |
...
VAV,0,nciSetPts,AO:4,SNVT_temp_setpt,occupied_heat,HtgOccSpt,degrees-fahrenheit,Heating Occupied Setpoint, |
...
VAV,0,nciSetPts,AO:5,SNVT_temp_setpt,unoccupied_cool,ClgUnoccSpt,degrees-fahrenheit,Cooling Unoccupied Setpoint, |
...
VAV,0,nciSetPts,AO:6,SNVT_temp_setpt,unoccupied_heat,HtgUnoccSpt,degrees-fahrenheit,Heating Unoccupied Setpoint, |
...
VAV,0,nvoBoxFlow,AI:7,SNVT_flow,,SaFlow,cubic-feet-per-minute,Box Flow, |
...
VAV,0,nvoFlowControlPt,AI:8,SNVT_flow,,FlowCtrlSpt,cubic-feet-per-minute,Box Flow Setpoint, |
...
VAV,0,nvoUnitStatus,AI:9,SNVT_hvac_status,heat_output_primary,ReheatPos,percent,Heating Valve Position, |
...
VAV,0,nvoCtlDataG,AI:10,UNVT_ctl_data,ubDamperPosS1,SaDmprPos,percent,Damper Position, |
...
VAV,0,nvoTerminalLoad,AI:11,SNVT_lev_percent,,TermlLoad,percent,Terminal Load, |
...
VAV,0,nvoUnitStatus,AI:12,SNVT_hvac_status,fan_output,StatusFan,percent,Fan Status, |
...
VAV,0,nvoUnitStatus,MSI:13,SNVT_hvac_status,mode,StatusMode,,Mode,"{""HVAC_NUL"": ""Null"",""HVAC_AUTO"": ""Auto"",""HVAC_HEAT"": ""Heat"",""HVAC_MRNG_WRMUP"": ""MorningWarmup"",""HVAC_COOL"": ""Cool"",""HVAC_NIGHT_PURGE"": ""NightPurge"",""HVAC_PRE_COOL"": ""PreCool"",""HVAC_OFF"": ""Off"",""HVAC_TEST"": ""Test"",""HVAC_EMERG_HEAT"": ""EmergHeat"",""HVAC_FAN_ONLY"": ""FanOnly"",""HVAC_FREE_COOL"": ""FreeCool"",""HVAC_ICE"": ""Ice"",""HVAC_MAX_HEAT"": ""MaxHeat"",""HVAC_ECONOMY"": ""Economy"",""HVAC_DEHUMID"": ""Dehumid"",""HVAC_CALIBRATE"": ""Calibrate"",""HVAC_EMERG_COOL"": ""EmergCool"",""HVAC_EMERG_STEAM"": ""EmergSteam"",""HVAC_MAX_COOL"": ""MaxCool"",""HVAC_HVC_LOAD"": ""HvcLoad"",""HVAC_NO_LOAD"": ""NoLoad""}" |
6K EVB MultiSensor
Following is an example BACnet type map file for EnOceanfor EnOcean's 6K EVB MultiSensor.
Code Block |
---|
#filetype,bacnet_type_map |
...
#version,v6.0.0 |
...
#product_name,6kEvbMultiSensor |
...
#manufacturer,EnOcean |
...
#program_id, 9F:FF:FF:05:01:84:04:60 |
...
#description,MultiSensor example application for the FT 6050 EVB |
...
Block Name,Block Index,Datapoint Name,Address,IAP Type,IAP Field,BACnet Name,BACnet Units,Description,StateTextMap |
...
TempSensor,0,nvoTemperature,AV:1,SNVT_temp_p,,Space Temperature,degrees-celsius,Space temperature, |
...
LightSensor,0,nvoLightlevel,AI:2,SNVT_lux,,Light Level,luxes,Light level, |
...
Switch,0,nvoSwitch,AI:3,SNVT_switch,state,Switch 1 State,,Switch 1 reported state, |
...
Switch,0,nvoSwitch,AI:4,SNVT_switch,value,Switch 1 Level,percent,Switch 1 reported level, |
...
Switch,0,nviSwitchFb,AO:5,SNVT_switch,state,Switch 1 State FB,,Switch 1 state feedback, |
...
Switch,0,nviSwitchFb,AO:6,SNVT_switch,value,Switch 1 Value FB,percent,Switch 1 level feedback, |
...
Lamp,0,nviLamp,AO:7,SNVT_switch,state,Lamp 1 State,,Lamp 1 state control, |
...
Lamp,0,nviLamp,AO:8,SNVT_switch,value,Lamp 1 Level,percent,Lamp 1 level control, |
...
Lamp,0,nvoLampFb,AI:9,SNVT_switch,state,Lamp 1 State FB State,,Lamp 1 state feedback, |
...
Lamp,0,nvoLampFb,AI:10,SNVT_switch,value,Lamp 1 Level FB Value,percent,Lamp 1 level feedback, |
Using Trend Log
Following is an example BACnet type map file using the Trend Log column.
Code Block |
---|
#filetype,bacnet_type_map |
...
#version,v3.14.15927,,,,,,,,,,,,,,, |
...
#product_name,MulStateVirtDev4,,,,,,,,,,,,,,, |
...
#program_id,904321011E001E12 |
...
#manufacturer,Echelon |
...
#description,Variable Air Volume XL10 Controller |
...
Block Type,Datapoint Name,bacnet_type,instance,IAP Type,BACnet Name,StateTextMap,Trend Log,units |
...
mmAIblock,AI:1,AI,1,scalar,AI:1,,true, |
...
mmAOblock,AO:1,AO,1,scalar,AO:1,,true, |
...
mmBIBlock,BI:1,BI,1,scalar,BI:1,,yes, |
...
mmBVBlock,BV:1,BV,1,scalar,BV:1,,TRUE, |
...
mmBOBlock,BO:1,BO,1,scalar,BO:1,,yes, |
...
mmBlock,MSI:1,MSI,1,scalar,MSI:1,"{""1"": ""One"",""2"": ""Two"",""3"": ""Three""}",yes, |
...
mmBlock,MSV:1,MSV,1,scalar,MSV:1,"{""1"": ""One"",""2"": ""Two"",""3"": ""Three""}",True, |
...
mmBlock,MSO:1,MSO,1,scalar,MSO:1,"{""1"": ""One"",""2"": ""Two"",""3"": ""Three""}",yes, |
...
mmIVblock,IV:1,IV,1,scalar,IV:1,,True, |
...
mmLAVblock,LAV:1,LAV,1,scalar,LAV:1,,yes, |
...
mmPIVblock,PIV:1,PIV,1,scalar,PIV:1,,true, |