Code Monkey home page Code Monkey logo

openbac-bacnet's Introduction

openbac-bacnet

BACnet implementation for Java based on Netty network library

Build Status

About

This is a implementation of the BACnet/IP ASHRAE standard in Java. It is far from complete and maybe never will be, it is mainly to evaluate implementation concepts. The network layer is based on netty to evaluate also asynchronous IO mechanisms. It is currently based on Java 11 and may upgraded to a newer version, there is no special focus on things like e.g. Android support (which may or may not be possible also)

#Model Based Software Engineering Parts of the standard are represented as models (written in XML) and teh code is generated. Since large parts of the standard are basically compositions of primitive Elements this seems to be most flexible. In fact BACnet itself is specified as ASN.1 but somehow with custom encoding rules, so that it is not possible to generate it completely from the ASN.1 model.

Architecture

Implementation of services is along the pattern that a service class serves as abstraction of the service as API. The communication part (a.k. messages) are composite classes within the service to have high coherence.

classDiagram
BACnetService *-- BACnetServiceRequest
BACnetService *-- BACnetServiceResponse
BACnetResponse <|-- BACnetServiceResponse
BACnetResponse : encode(ByteBuf buf)
Loading

The datatype model starts with BACnet encodeable that encapsulates all functionality to de/encode a message into the bytestream. BACnetEnumeration and BACnetBitstring are special, since the standard defines a lot of enumerations which are generated of the model and are subclasses of the respective primitive type.

BACnetPrimitive serves as an intermediate to provide a factory for Primitive Datatypes

classDiagram
BACnetEncodeable <|-- BACnetPrimitive
BACnetEncodeable <|-- BACnetAny
BACnetPrimitive <|-- BACnetBoolean
BACnetPrimitive <|-- BACnetInteger
BACnetPrimitive <|-- BACnetUnsignedInteger
BACnetPrimitive <|-- BACnetReal
BACnetPrimitive <|-- BACnetDouble
BACnetPrimitive <|-- BACnetEnumeration
BACnetPrimitive <|-- BACnetObjectIdentifier
BACnetPrimitive <|-- BACnetCharacterString
BACnetPrimitive <|-- BACnetOctetString
BACnetPrimitive <|-- BACnetBitstring
BACnetPrimitive <|-- BACnetDate
BACnetPrimitive <|-- BACnetTime
BACnetPrimitive <|-- BACnetNull
BACnetEnumeration <|-- BACnetPropertyIdentifier
Loading

openbac-bacnet's People

Contributors

jseitter avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.