Skip to content
danielWQ edited this page Dec 21, 2016 · 3 revisions

Overview

Since version 0.0.8 of the driver, BACnet objects may also be served by OpenMUC. A separate Connection implementation handles this "server connection".

All BACnet objects which are configured at the start of the driver will be created during initialization. If the configuration of a single channel (=object) is not correct, the other channels will be created anyways.

Features

Device reuse

If a local device with the same port already exists (e.g. 0xBAC0), this BACnet device will be reused. Thus using the driver as driver and server simultaneously is possible.

Read/Listening

Read and listening operations of the driver are implemented. So the read operation as well as sampling from the channel works.

In addition listeners may be registered to be notified on value change.

Write

The created BACnet objects are automatically configured for write access. So write operation from the OpenMUC driver/application as well as from external systems is possible.

ObjectTypes

At the moment, the following BACnet ObjectTypes are supported:

BACnet ObjectType OpenMUC mapping Initial value
analog input FLOAT 0.0
analog output FLOAT 0.0
analog value FLOAT 0.0
binary input BOOLEAN false
binary output BOOLEAN false
binary value BOOLEAN false
multistate value INTEGER 1

Change Of Value

Change-of-value subscription by other BACnet clients is supported. The thresholds for notification are currently hard-coded and set to 1.0 for floating-point types. Boolean-types send a notification on every state change.

Properties

The BACnet server implementation supports the read/write of other properties than presentValue. As default, channels mapped to the presentValue property of the created BACnet object are created, but in addition it is possible to add further channels for other properties.

Scan

Scan for channels is not supported at the moment.

Configuration

Device configuration

To create a BACnet object server, the device must have set the setting isServer=true. For further details on the device configuration see Device management.

Channel configuration

The channel address is used as BACnet object name.

Since version 0.0.9, any property of the served BACnet objects can be written. So depending on the channel configuration, the channel values are mapped to either the presentValue (which is the default) or any other property value.

For presentValue properties, the unit and the object type can be configured using the unit tag in the channels configuration. The syntax is objectType;unit. Misconfiguration will be reported in the log (including possible values for configuration). If a multistate value has to be served, the possible multistate values (separated by ,) has to be defined as third option in the unit tag (see example below).

Other properties besides presentValue are addressed in the channelAddress, separated by the # sign (e.g. L'Float1#outOfService). Other settings like unit are ignored. Note that the type of the property-value may not correspond with the type of the presentValue (e.g. if presentValue is a floating-point number, outOfService of the same object is a boolean). BACnet objects will only be created for channels mapped to the presentValue property. Channels for other properties will "reuse" the existing BACnet object. So it is important, that the channel for presentValue must be present in the configuration in order to address additional channels.

The name of the property has to match the definition in BACnet4J's PropertyIdentifier class.

Example

<driver id="bacnet">
    <device id="localserver">
        <deviceAddress>12345</deviceAddress>
        <settings>localDevicePort=0xBAC0;broadcastIP=172.16.162.255;isServer=true</settings>
        <connectRetryInterval>5m</connectRetryInterval>
        <channel id="FloatWert1">
            <channelAddress>L'Float1</channelAddress>
            <listening>true</listening>
            <unit>analogValue;degreesCelsius</unit>
        </channel>
        <channel id="FloatWert2">
            <channelAddress>L'Float2</channelAddress>
            <listening>true</listening>
            <unit>analogValue;degreesCelsius</unit>
        </channel>
        <channel id="BoolWert1">
            <channelAddress>L'Bool1</channelAddress>
            <unit>binaryValue;noUnits</unit>
        </channel>
        <channel id="BoolWert1_OOS">
            <channelAddress>L'Bool1#outOfService</channelAddress>
        </channel>
        <channel id="MultistateWert1">
            <channelAddress>L'Multistate1</channelAddress>
            <unit>multiStateValue;noUnits;off,nt,ht</unit>
            <description>Betriebsmodus (1=Off/2=NT/3=HT)</description>
        </channel>
    </device>
</driver>
Clone this wiki locally