-
Notifications
You must be signed in to change notification settings - Fork 7
BACnet Server
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.
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 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.
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.
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 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.
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 for channels is not supported at the moment.
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.
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.
<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>