Mr-Markus / ZigbeeNet

A .NET Standard library for working with ZigBee
Eclipse Public License 1.0
131 stars 47 forks source link
c-sharp csharp iot netstandard smart-home smarthome xbee zigbee zigbee-gateway

ZigBeeNet

Twitter Follow

ZigBeeNet is a implementation of the Zigbee 3.0 Cluster Library for .NET Standard.

It is fully implemented in Netstandard 2.0 and NET Core 3.0 so that it runs on multiple platform

Build Status

Name Status
master Build status
develop Build status

Packages

Package name NuGet Description
ZigBeeNet NuGet Core library
ZigBeeNet.Transport.SerialPort NuGet Platform indipendent SerialPort implementation
ZigBeeNet.Hardware.TI.CC2531 NuGet Texas Instruments CC25XX dongle implementation
ZigBeeNet.Hardware.Digi.XBee NuGet Digi XBee dongle implementation
ZigbeeNet.Hardware.ConBee NuGet Dresden Elektronik ConBee dongle implementation
ZigbeeNet.Hardware.Ember NuGet Silicon Labs ember dongle implementation
ZigbeeNet.DataStore.JSON NuGet JSON DataStore
ZigbeeNet.DataStore.MongoDb NuGet MongoDb DataStore

Smart Home

With Zigbee 3.0 you can also build your own Smart Home solution and control Zigbee devices from different manufactures like Philips with Philips Hue and IKEA with Tradfri at the same time in the same network. So you are very flexible and the components are very cheap.

Usage

For a detailed description about how to use ZigBeeNet see our wiki page:

You can also take a look at the Playground Demo project

If you need further information we will help you whenever you need it. Just open an new issue for it.

A basic example here:

using System;

namespace ZigBeeNet.PlayGround
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                ZigBeeSerialPort zigbeePort = new ZigBeeSerialPort("COM4");

                IZigBeeTransportTransmit dongle = new ZigBeeDongleTiCc2531(zigbeePort);

                ZigBeeNetworkManager networkManager = new ZigBeeNetworkManager(dongle);

                // Initialise the network
                networkManager.Initialize();

                networkManager.AddSupportedCluster(0x06);

                ZigBeeStatus startupSucceded = networkManager.Startup(false);

                if (startupSucceded == ZigBeeStatus.SUCCESS)
                {
                    Log.Logger.Information("ZigBee console starting up ... [OK]");
                }
                else
                {
                    Log.Logger.Information("ZigBee console starting up ... [FAIL]");
                    return;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            Console.ReadLine();
        }
    }
}

Supported Dongles and Chipsets / Zigbee Stacks

Because Zigbee is just a specification you need a stack of a manufacturer that implements it. ZigBeeNet is developed with a strict seperation of the Zigbee Cluster Library (ZCL) and the various manufacturer stacks. Because of that it is possible to use different hardware for your Zigbee solution

If there is a manufacturer solution missing, feel free to open an issue or take part of it's implementation

Texas Instruments ( Z-Stack )

Z-Stack 3.0.x is TI's Zigbee 3.0 compliant protocol suite for the CC2530, CC2531, and CC2538 Wireless MCU. Z-Stack comunicates through TI's Unified Network Processor Interface (NPI) which is used for establishing a serial data link between a TI SoC and external MCUs or PCs. UNPI is also implemented in this project and is also implemented for different plattforms.

The easiest solution is the CC2531 USB Stick with the ZNP (Zigbee Network Processor) Image, so that it works as an Zigbee gateway via serial port

Source: http://www.ti.com/tool/z-stack

Digi XBee

Digi XBee is the brand name of a family of form factor compatible radio modules from Digi International.

Source: https://en.wikipedia.org/wiki/XBee

We have tested it with the XBee ZigBee S2C chip

ConBee

ConBee is a hardware dongle from Dresden Elektronik

Source: https://www.phoscon.de/en/conbee2

We have tested it with the ConBee 2

Silicon Labs Ember EM35x / EFR32

The library supports the Silicon Labs EZSP protocol using ASH protocol over a serial interface. The implementation of the SPI protocol assumes that the SPI provides a TTY-like software interface to the application, or is otherwise abstracted via the ZigBeePort interface.

It is worth noting that EM3588 devices that have an embedded USB core will likely work with any baud rate, where dongles using external USB interface (eg CP2102 used with an EM3581) will likely require a specific baud rate.

Currently there are two main NCP images - one that supports hardware flow control with a baud rate of 115200, and one that supports software flow control with a rate of 57600.

Free beer !!

No. Sorry. But now that I have your attention .. we need your help! Since it is hardly possible to test all devices, let us know with which devices you have already successfully tested ZigBeeNet or where you encountered problems. Just open an Issue.

See also:

Related Issue
Wiki

Many thanks!

Hint

This project is highly inspired by https://github.com/zsmartsystems/com.zsmartsystems.zigbee and many ideas were adopted (almost a java -> c# port).

Contributing

Feel free to open an issue if you have any idea or enhancement. If you want to implement on code create a fork and open a pull request.

Coding guidelines

For a cleaner code we have some coding guidelines. you can find them here.

License and Copyright

ZigBeeNet is licensed under the Eclipse Public License. Refer to the license file for further information.

Some parts of this project are converted to c# from com.zsmartsystems.zigbee.

com.zsmartsystems.zigbee use code from zigbee4java which in turn is derived from ZB4O projects which are licensed under the Apache-2 license.

ZigBee Documentation

Some documentation used to create parts of this framework is copyright © ZigBee Alliance, Inc. All rights Reserved. The following copyright notice is copied from the ZigBee documentation.

Elements of ZigBee Alliance specifications may be subject to third party intellectual property rights, including without limitation, patent, copyright or trademark rights (such a third party may or may not be a member of ZigBee). ZigBee is not responsible and shall not be held responsible in any manner for identifying or failing to identify any or all such third party intellectual property rights.

No right to use any ZigBee name, logo or trademark is conferred herein. Use of any ZigBee name, logo or trademark requires membership in the ZigBee Alliance and compliance with the ZigBee Logo and Trademark Policy and related ZigBee policies.

This document and the information contained herein are provided on an “AS IS” basis and ZigBee DISCLAIMS ALL WARRANTIES EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO (A) ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OF THIRD PARTIES (INCLUDING WITHOUT LIMITATION ANY INTELLECTUAL PROPERTY RIGHTS INCLUDING PATENT, COPYRIGHT OR TRADEMARK RIGHTS) OR (B) ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR NONINFRINGEMENT. IN NO EVENT WILL ZIGBEE BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF BUSINESS, LOSS OF USE OF DATA, INTERRUPTION OF BUSINESS, OR FOR ANY OTHER DIRECT, INDIRECT, SPECIAL OR EXEMPLARY, INCIDENTIAL, PUNITIVE OR CONSEQUENTIAL DAMAGES OF ANY KIND, IN CONTRACT OR IN TORT, IN CONNECTION WITH THIS DOCUMENT OR THE INFORMATION CONTAINED HEREIN, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE.

All Company, brand and product names may be trademarks that are the sole property of their respective owners.

Dongle Documentation

Some documentation used to implement dongle drivers is copywrite to the respective holders, including Silicon Labs, Texas Instruments, Dresden Electronics, Digi International.