For SmartServer 3.3 and higher, see Setting Up Datapoint Connections.
For SmartServer 3.0-3.2, see Defining Datapoint Connections (Release 3.0-3.2).
You can define connection rules that specify how datapoint outputs are connected to datapoint inputs. A connection rule specifies how an update from one or more datapoints is automatically routed to one or more datapoint inputs. You define connection rules in a connection requirements (CON) file. The file is a manually-generated CSV file defining one or more connection rules for datapoints. A connection rule comprises two or more lines in the CSV file. All lines in the connection file that apply to the same connection rule will have the same rule ID. Each rule ID specifies one or more source datapoints and one or more destination datapoints.
This section consists of the following:
Overview
Each time a new CON file is added, the new rules are checked against the existing rules. A rule that is in the existing and new CON file is unchanged. Any new rule that is added, and any old rule that does not exist in the new CON file, is deleted. Therefore, in order to add, change, or delete connections, a new CON file with all the desired connections needs to be imported. To 618276, import a connection file with the header and parameter name, but without any defined connection rules.
Both connections and datapoint properties (DLA) files have presets and localization. These files are similar to each other but not interchangeable. For example, if you want to create a connection file that limits which datapoint values are sent to the destination using presets, you cannot use a preset defined in the datapoint properties. You must create the preset in the CON file.
There are two kinds of connections: point-to-point and LON peer-to-peer. Point-to-point connections allow you to connect two datapoints from devices using different protocols (Modbus to LON). Peer-to-peer connections are between LON devices and only available in DMM.
Point-to-Point connections can be used to convert data from different protocols, different datapoints types (scalar to structure, or structure to scalar) using the CON file map, or localization parameters. You can also specify that only certain values be sent to the destination datapoint by using presets (e.g., ON or OFF). Connection rules that use map, presets, or localization are point-to-point connections.
Point-to-point connections rely on the SmartServer receiving datapoint updates. In order to get datapoint updates, you typically configure the datapoint properties for all the datapoints you use for a connection using the Datapoint Properties widget (or DLA file) and set up monitoring (polling or event-driven). Updates will also occur and can be monitored on the Datapoint Browser widget as it received updates, or any other application that does on-demand GETs.
For LON devices, if the SmartServer is configured for DMM, the SmartServer can create either peer-to-peer or point-to-point connections. Any connection rule in which only LON devices are used and there is no map, preset, or localization specified on the source or destination will cause the SmartServer to create a peer-to-peer connection. If map, preset, or localization is specified, then the SmartServer will use point-to-point. In this case for DMM, the SmartServer will automatically create a peer-to-peer binding between the source LON device and the SmartServer, and will update the destination datapoints if any source values change. This means that you do not need to add an event or polling for the source LON devices using the Datapoint Properties widget as the event update is automatically created by the SmartServer. For IMM only point-to-point connections are created.
For peer-to-peer connections (only supported in DMM), all connection information is configured in the LON edge devices, and any change to the source datapoint will be sent automatically to the destination devices without any interaction by the SmartServer. Peer-to-peer connections are processed faster than point-to-point connections since they only involve the SmartServer to create the connection, or if the connection is routed through the SmartServer.
Refer to the following table regarding supported datapoint connection types for various protocols:
LON | Modbus | BACnet | IOX | |
---|---|---|---|---|
LON | 1,2 | 1 | - | 1 |
Modbus | 1 | 1 | - | 1 |
BACnet | - | - | - | - |
IOX | 1 | 1 | - | 1 |
1 = point-to-point
2 = LON peer-to-peer
Creating a CON File
Requirements
A CON file contains the following embedded metadata tags anywhere in the file, and typically in the first line:{noformat}#filetype,con{noformat}
CON files are CSV files categorized by the extension .CON, .CSV, or .CON.CSV (not case sensitive). The #filetype tag is equal to con (not case sensitive) and is identified by its file name. A CON file can be imported with any of the mentioned file extensions, and must use CSV formatting. In order to be able to double-click the file and view it in Excel, you should use the .CSV or .CON.CSV extension. The file will be most easily identified using .CON.CSV.
The following examples are provided:
- Example formulas
- Example CSV files
1. Example formula – the following formula can be added to a CON file first, by opening the file in Excel, and then by pasting the file formula.
This example formula appears in Excel such as:
{"state":{"transform":"$ ? 1 : 0"},"value":"$"}
The corresponding CSV file format for the above formula is to double all double quotes, and add double quotes at the beginning and end of the formula. This is handled automatically if you add the formula above using Excel. If you change the CON file using notepad you will need to add the CSV format as shown below.
If you open the file in a text editor (i.e., notepad), you will see the following:
"{""state"":{"transform"":""$ ? 1 : 0""},""value"":""$""}"
2. Example CSV files – already show converted formulas. Just copy the CSV file data to a text editor (i.e., notepad) and save it with a .CSV extension (or .CON.CSV). You can then view the CON file in Excel.
CON File Parameters
A CON file contains the following columns (not case sensitive):
Parameter | Description |
---|---|
Rule ID | Unique identifier There may be multiple entries with the same Rule ID. All entries with the same Rule ID are part of the same connection rule. |
Area Scope | Leave blank when specifying Device name. When specifying Device Type this is the first part of the geozone path, with optional wildcards, to which the connection rule applies. First instance found for the rule is used and others are ignored silently. If no area scope is found in any rule line, the connection rule is ignored silently. |
Zone Scope | Leave blank when specifying Device name. When specifying Device Type this is the second part of the geozone path, with optional wildcards, to which the connection rule applies. First instance found for the rule is used and others are ignored silently. If no zone scope is found in any rule line, all zones in the area scope are used. |
Device Name | Device name or wild card |
Device Type | XIF file name (not required if Device_Name is specified and not a wildcard). When using Device Type you need always need to specify area scope (either the area scope name or * for all area scope). |
Datapoint Name | Datapoint XIF name Each datapoint has a Datapoint Instance name and a datapoint XIF name (datapoint XIF name is shown in CMS Datapoint Browser Widget Details view or Datapoint Properties). Specify the datapoint XIF name. |
Direction | Source or Destination |
Map | Mapping formula where $ is source value . Source Map only. For destination mapping use Localization or Preset Map. $ is source value and map formula Examples: Scalar (temperature in Celsius to temperature in Fahrenheit): {"transform": "$ * 1.8 + 32"} Map formula to go from scalar to structure datapoint (SNVT_count to SNVT_Switch which has two fields, state and value): {"state":{"transform":"$ ? 1 : 0"},"value":"$"} If doing a FAN IN connection, and the source datapoints have different map formulas, then you need to create separate rules for each source datapoint and include the same list of destination for each rule. (optional parameter) |
Presets | Presets that both the source and destination must contain in order for the data to be transferred. Source and destination can have a different list of presets, but source value is only sent to destination if both source and destination have matching presets. All other values that do not have matching presets are not sent. To do destination mapping, do the map as part of the destination preset formula or use destination. "onlyPreset" - should always be set to true, means only connections with matching source and destination presets are transferred to destination. (optional parameter) |
Repeat Presets | If set to true, all subsequent source or destinations use the same localization. (optional parameter) |
Localization | Localization formula: For source $ is the source value, for destination $ is the connection value, and the localization formula value is what the CMS Datapoint Browser shows. Examples: Source localization for scalar (SNVT_count to SNVT_temp_p in deg F): Source localization: {"transform": "$ * 1.8 + 32"} Destination formula to go from scalar to structure datapoint (SNVT_count to SNVT_Switch): {"state":{"transform":"$ ? 1 : 0"},"value":"$"} {"value":{"transform": "$ + 10"}, "state":{"$ > 0 ? 1 : 0"}} (optional parameter) |
Repeat Localization | If set to true, all subsequent source or destinations use the same localization. (optional parameter) |
Using Presets, Localization, and Map
Presets and localization can be applied to source and destinations datapoints. Leave the cell blank in the CON file for any rule not using preset, localization or map.
Map, presets and localization is typically only used if the datapoint type is different. That is, if both the source and destination datapoints are the same datapoint type, then in most cases you would not use map, preset, or localization for the connection rules.
Map, preset and localization allow you to create a connection that translates values from one datapoint type to another (e.g., SNVT_switch to SNVT_count), or to manipulate the source or destination values. For example, if the source and destination datapoints are SNVT_count, but the source has a range of -100 to 300 and the destination only allows a range of 0 to 100, you can use use map or localization to change the allowed destination range.
The following scenarios are supported:
Localization | Presets | Map |
---|---|---|
yes | no | no |
no | yes | no |
no | no | yes |
yes | yes | no |
yes | no | yes |
no | yes | yes |
yes | yes | yes |
The order of the transformation for the source datapoint is IAP value → Localization → Presets → Map.
- If the source localization is defined, the datapoint is transformed to a localized value.
- If the source presets is not NULL, the IAP value (or the local value) is transformed to a preset value.
- If the map is defined, the last transformation value, which could be a preset value, a local value or an IAP value, is transformed according to the map rules.
The reverse transformation order for the destinations datapoint is Presets → Localization → IAP value. Presets (if defined) are specified using the local values. The localization rule must be specified to reverse transform the preset value to the IAP value.
The map is specified in source and will be applied to the source datapoint for all destinations. Only one map per connection rule ID is supported. Map should be left empty for destinations as it is not supported. Mapping for individual destinations is defined in presets or localization.
If the datapoint value does not map to any of the presets, then the value is not sent if the onlyPreset property is set to true. Otherwise, the native value will be sent instead. If both transformation map and presets are defined on the source datapoint, then the transformation map is ignored. Only one preset can be defined in the datapoint source. If you have more than one source that has different presets, you have to split it into different connection objects.
The CON file has an option to specify whether to skip sending datapoint values if the presetValue is not defined or the source presetValue does not map to any of the destination presets.
Most BACnet and Modbus datapoint types are scalars values (only one number like temperature). LON datapoints can be scalar or structured datapoints. Structured datapoints have fields in which each field represents a value (e.g., SNVT_switch has a state and value fields).
For structured destination datapoints you need to specify result for all fields. That is, if you have a five field destination, then the formulas you use must specify a destination value that has all five fields.
Understanding Connection Operations
Source value → Source Transform (by source map, preset, or localization) → Connection value → Destination Transform (by destination preset or localization) → Destination value.
- There can be FAN INs (multiple sources) for one connection.
- If the source map, preset, and localization are the same for all source datapoints, then you can use one connection rule.
- If the source map, preset, or localization is different, then you need to specify the source in separate rules and duplicate the destination datapoints for both.
- If you have some source datapoints with the same map, preset, or localization, then those can be in one rule and the other source datapoints need to be in separate rules.
- There can be FAN OUTs (multiple destination) for one connection.
- There can be FAN INs and FAN OUTs for one connection.
- If the source map, preset, and localization are the same for all source datapoints, then you can use one connection rule.
- If the source map, preset, or localization is different, then you need to specify the source in separate rules and duplicate the destination datapoints for both.
- If you have some source datapoints with the same map, preset, or localization, then those can be in one rule and the other source datapoints need to be in separate rules.
Formula Examples
$ represents the input of a source or destination transform and specifies the complete datapoint value. For structured datapoints, like SNVT_switch, specify $.<field name> to access a datapoint field value.
For example:
- To access the SNVT_switch state field, specify: $.state
- To access the SNVT_switch value field, specify: $.value
You need to use a transform function in the formula any time the formula uses multiplication, division, addition, subtraction, if-then, math formula, or math function.
Math Functions
Math functions can be applied to datapoint values, such as limiting the range of the datapoint value.
These example formulas can be copied into an Excel cell.
Function | Function Name | Description | Formula |
---|---|---|---|
min(x,y) | Min | Min is used to limit a maximum value (e.g., to limit a scalar value high value to 100 or lower) | {"transform":"min($, 100)"} |
max(x,y) | Max | Max is used to limit a minimum value (e.g., to positive numbers) | {"transform":"max($, 0)"} |
sqrt(x) | Square Root | Calculates the square root of a value | {"transform":"sqrt($.value)"} |
Example formula to limit a datapoint value to a value between 10 and 100:
{"transform":"min(max($, 0),100)"}
Source Map Formulas
Destination map is configured by using preset map or localization.
These example formulas can be copied into an Excel cell (always leave destination map blank). For the examples below, SNVT_switch is a structured datapoint having a value with two fields (i.e., state and value).
Datapoint format | Datapoint type | Direction | Formula | Notes |
---|---|---|---|---|
Scalar to Scalar | SNVT_count to SNVT_count | Source | {"$": "$"} | Special case where value is not modified (see note 1). |
Scalar to Scalar | SNVT_count to SNVT_count | Source | {"transform":"$ * 2"} | (see note 2) |
Scalar to Scalar | SNVT_count to SNVT_count | Source | {"$": {"transform":"$ * 100"}} | (see note 2) |
Scalar to Structured | SNVT_count to SNVT_switch | Source | {"state":{"transform":"$ ? 1 : 0"},"value":"$"} | Converting Scalar Datapoint to Structure Datapoint (SNVT_switch) (see note 2). The destination state field translation requires logic so you need to use a transform formula (see note 2). |
Scalar to Structured | SNVT_count to SNVT_switch | Source | {"state":{"transform":"$ ? 1 : 0"},"value":{"transform":"min(max($, 10), 100)"}} | Converting Scalar Datapoint to Structure Datapoint (SNVT_switch) and limits destination value between 10 - 100. |
Scalar to Structured | SNVT_count to SNVT_switch | Source | {"state":{"transform":"$ ? 1 : 0"},"value":{"transform":"$ * 5"}} | Converting Scalar Datapoint to Structure Datapoint (SNVT_switch) (see note 2). |
Scalar to Structured | SNVT_count to SNVT_switch | Source | {"state":{"transform":"$ > 5 ? 1 : 0"},"value":{"transform":"$ * 5"}} | State: if source value > 5 then connection value = 1 else connection value = 0. |
Structured to Structured | SNVT_switch to SNVT_switch | Source | {"$": "$"} | Special case where no fields are modified (see note 1). |
Structured to Structured | SNVT_switch to SNVT_switch | Source | {"state":{"transform":"$.state ? 1 : 0"},"value":{"transform":"$.value * 5"}} | Special case using only one unmodified field (see note 1). |
Structured to Scalar | SNVT_switch to SNVT_count | Source | {"$": "$.value"} | Special case using only one field (see note 1). |
Structured to Scalar | SNVT_switch to SNVT count | Source | {"transform":"$.value * 2"} | Uses multiplication, therefore you need to use transform (see note 2). |
Note 2: Transform function is required when map formula has multiplication, division, addition, subtraction, if-then, or math formula.
Presets Formulas
These example formulas can be copied into an Excel cell.
Datapoint format | Datapoint type | Direction | Formula |
---|---|---|---|
Scalar | SNVT_count | Source | |
Scalar | SNVT_count | Destination | {"$": {"enumeration":{"source": "$", "map": {"ON": 100,"MID": 50, "OFF": 0}}}} |
Structured | SNVT_switch | Source | {"$": {"transform": "$.value == 100 && $.state == 1 ? 'ON' : $.value == 50 && $.state == 1 ? 'MID' : $.value == 0 && $.state == 0 ? 'OFF' : ' ' "}} |
Structured | SNVT_switch | Destination | {"$": {"value":{"enumeration":{"source": "$", "map": {"ON": 100,"MID": 50,"OFF": 0}}},"state":{"enumeration":{"source":"$","map":{"ON": 1,"MID": 1,"OFF": 0}}}},"onlyPreset": true} |
Localization Formulas
These example formulas can be copied into an Excel cell.
Datapoint format | Datapoint type | Direction | Formula |
---|---|---|---|
Scalar | SNVT_count | Source | {"transform": "$ * 1.8 + 32"} |
Scalar | SNVT_count | Destination | {"transform": "$ * 2"} |
Structured | SNVT_switch | Source | {"value":{"transform": "$.value + 10"},"state":{"transform": "$.state"}} |
Structured | SNVT_switch | Destination | {"value":{"transform": "$.value * 2"},"state":{"transform": "$.state"}} |
Structured | SNVT_switch | Destination | {"state":{"transform":"$ ? 1 : 0"},"value":{"transform":"min(max($, 10), 100)"}} |
CON File Examples
Using map, presets, and localization in datapoints is optional. A datapoint can have map only (Sources), presets only, localization only, have all three map, presets and localization, or neither. When both presets and localization are used, the presets map are typically configured based on the localization value. Therefore, when an update is received, the value needs to be localized first before mapping to a preset string. And, when a preset string is entered, the map value needs to be transformed using the revert transformation rule to get the native value.
To use the example files shown below, copy the text to a text editor like notepad, then save as text, and finally change the extension to .CON.CSV. At this point, you can view the files using Excel.
The connection rules that specify Device Type require you to assign the device to a context. Contexts are created and viewed using the Planning widget and devices are assigned to a context using the Device widget.
When creating connection rule for structured datapoints, you need to specify $ which means entire value, or specify the preset or transform for each field. That is, you cannot create a rule that specifies a transform for a specific field. It is either the entire value $ or all the fields.
The first example demonstrates a LON peer-to-peer connection, which is only available for LON devices (DMM mode only). All other examples show point-to-point connections ,which are used for all protocols including BACnet, Modbus, and LON connections.
LON Peer-to-Peer Connection
The following CON file example (Device Name specified) shows the format without using map, presets, and localization.
#filetype,con,,,,, |
With Source Map
The following CON file example (Device Name Specified) shows the format for map, presets, and localization, when only map specified.
#filetype,con,,,,,,,,,, |
With Two Sources and One Destination (Different Source Mapping)
The following CON file example shows two sources that are connected to, and one destination, with each source having a different mapping transformation. In this case, you need to create multiple rules (i.e., separate rules for each mapping transformation), or specify the mapping rules in Presets column, where presets and the mapping rules are defined, similar to the following:
- create a rule for sourceA/destA
- create another rule for sourceB/destA
#filetype,con |
With Presets
The following CON file example shows the format for map, presets, and localization.
#filetype,con,,,,,,,,,, |
With Localization
The following CON file example shows the format for map, presets, and localization.
#filetype,con,,,,,,,,,, |
With Presets and Localization (One Source and Two Destinations)
The following CON file example shows the format for map, presets, and localization.
#filetype,con,,,,,,,,,, |
Clear Connections
The following CON file example shows the format to clear all connections (using a connection file with no rules).
#filetype,con,,,,,,,,,, |