Added Zigbee plugin based on Zigbee4java
This commit is contained in:
parent
4f0398260b
commit
dd1cc00c9d
4 changed files with 180 additions and 0 deletions
56
plugins/hal-zigbee/README.md
Normal file
56
plugins/hal-zigbee/README.md
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
# Plugin Configuration
|
||||||
|
|
||||||
|
|Config Parameter |Value |Description |
|
||||||
|
|-----------------|-----------------------------|------------|
|
||||||
|
|zwave.com_port |Name or location of com port |The port where radio dongle is connected|
|
||||||
|
|
||||||
|
# Hardware
|
||||||
|
|
||||||
|
You need to buy the following items:
|
||||||
|
|
||||||
|
1. http://www.ti.com/tool/cc2531emk
|
||||||
|
* Example item:
|
||||||
|
https://www.aliexpress.com/item/4001091370032.html
|
||||||
|
2. http://www.ti.com/tool/cc-debugger
|
||||||
|
* Example kit:
|
||||||
|
https://www.aliexpress.com/item/4001095299084.html
|
||||||
|
|
||||||
|
## Flashing Dongle
|
||||||
|
Instructions are originally from: https://www.zigbee2mqtt.io/information/flashing_the_cc2531.html
|
||||||
|
|
||||||
|
### Windows
|
||||||
|
1. Download and install the "SmartRF Flash Programmer" **(Not v2)** application from https://www.ti.com/tool/FLASH-PROGRAMMER
|
||||||
|
|
||||||
|
|
||||||
|
2. Connect CC debugger to the CC2531 USB sniffer.
|
||||||
|
3. Connect **BOTH** the CC2531 USB sniffer and the CC debugger to your PC using USB.
|
||||||
|
* If the light on the CC debugger is RED press set reset button on the CC debugger. The light on the CC debugger should now turn GREEN. If not use [CC debugger user guide](http://www.ti.com/lit/ug/swru197h/swru197h.pdf) to troubleshoot your problem.
|
||||||
|
4. Download the firmware [CC2531_DEFAULT_20190608.zip](https://github.com/Koenkk/Z-Stack-firmware/raw/master/coordinator/Z-Stack_Home_1.2/bin/default/CC2531_DEFAULT_20190608.zip)
|
||||||
|
4. Start SmartRF Flash Programmer, with the properties below:
|
||||||
|
* Flash image: Make sure to select the .hex file and not the .bin file.
|
||||||
|
* Uncheck "Retain IEEE address when reprogramming the chip.
|
||||||
|
|
||||||
|
### Linux or MacOS
|
||||||
|
|
||||||
|
1. Install prerequisites for CC-Tool using a package manager (e.g. Homebrew for macOS)
|
||||||
|
* Ubuntu/Debian: libusb-1.0-0-dev, libboost-all-dev, autoconf, libtool
|
||||||
|
* Fedora: dh-autoreconf, boost-devel, libusb1-devel, gcc-c++
|
||||||
|
* Archlinux: dh-autoreconf, libusb, boost
|
||||||
|
* macOS: brew install autoconf automake libusb boost pkgconfig libtool
|
||||||
|
* Raspbian: dh-autoreconf, libusb-1.0-0-dev, libboost-all-dev
|
||||||
|
|
||||||
|
2. Build cc-tool
|
||||||
|
|
||||||
|
git clone https://github.com/dashesy/cc-tool.git
|
||||||
|
cd cc-tool
|
||||||
|
./bootstrap
|
||||||
|
./configure
|
||||||
|
make
|
||||||
|
|
||||||
|
3. Connect **BOTH** the CC2531 USB sniffer and the CC debugger to your PC using USB.
|
||||||
|
* If the light on the CC debugger is RED press set reset button on the CC debugger. The light on the CC debugger should now turn GREEN. If not use [CC debugger user guide](http://www.ti.com/lit/ug/swru197h/swru197h.pdf) to troubleshoot your problem.
|
||||||
|
4. Download the firmware [CC2531_DEFAULT_20190608.zip](https://github.com/Koenkk/Z-Stack-firmware/raw/master/coordinator/Z-Stack_Home_1.2/bin/default/CC2531_DEFAULT_20190608.zip)
|
||||||
|
5. Flash your firmware:
|
||||||
|
|
||||||
|
sudo ./cc-tool -e -w CC2531ZNP-Prod.hex
|
||||||
|
|
||||||
5
plugins/hal-zigbee/build.gradle
Normal file
5
plugins/hal-zigbee/build.gradle
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
dependencies {
|
||||||
|
implementation project(':hal-core')
|
||||||
|
|
||||||
|
implementation 'org.bubblecloud.zigbee4java:zigbee-api:3.0.3'
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,111 @@
|
||||||
|
package se.hal.plugin.zigbee;
|
||||||
|
|
||||||
|
import se.hal.HalContext;
|
||||||
|
import se.hal.intf.*;
|
||||||
|
import se.hal.struct.AbstractDevice;
|
||||||
|
import zutil.log.LogUtil;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class HalZigbeeController implements HalSensorController, HalEventController, HalAutoScannableController {
|
||||||
|
private static final Logger logger = LogUtil.getLogger();
|
||||||
|
|
||||||
|
private static final String CONFIG_ZIGBEE_PORT = "";
|
||||||
|
|
||||||
|
private SerialPort port;
|
||||||
|
private ZigBeeApiDongleImpl zigbeeApi;
|
||||||
|
|
||||||
|
private HalSensorReportListener sensorListener;
|
||||||
|
private HalEventReportListener eventListener;
|
||||||
|
private List<AbstractDevice> registeredDevices;
|
||||||
|
|
||||||
|
|
||||||
|
public HalZigbeeController() {}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isAvailable() {
|
||||||
|
return HalContext.containsProperty(CONFIG_ZIGBEE_PORT);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
initialize(HalContext.getStringProperty(CONFIG_ZIGBEE_PORT));
|
||||||
|
}
|
||||||
|
public void initialize(String comPort) {
|
||||||
|
byte[] networkKey = null; // Default network key
|
||||||
|
port = new SerialPortImpl(comPort);
|
||||||
|
zigbeeApi = new ZigBeeApiDongleImpl(
|
||||||
|
new ZigBeeDongleTiCc2531Impl(port, 4951, 11, networkKey, false),
|
||||||
|
false);
|
||||||
|
|
||||||
|
zigbeeApi.startup();
|
||||||
|
|
||||||
|
ZigBeeDevice device = zigbeeApi.getZigBeeDevices().get(3);
|
||||||
|
|
||||||
|
zigbeeApi.on(device);
|
||||||
|
Thread.sleep(1000);
|
||||||
|
zigbeeApi.color(device, 1.0, 0.0, 0.0, 1.0);
|
||||||
|
Thread.sleep(1000);
|
||||||
|
zigbeeApi.color(device, 0.0, 1.0, 0.0, 1.0);
|
||||||
|
Thread.sleep(1000);
|
||||||
|
zigbeeApi.color(device, 0.0, 0.0, 1.0, 1.0);
|
||||||
|
Thread.sleep(1000);
|
||||||
|
zigbeeApi.off(device);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() {
|
||||||
|
logger.info("Shutting down Zigbee port...");
|
||||||
|
|
||||||
|
zigbeeApi.shutdown();
|
||||||
|
port.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// --------------------------
|
||||||
|
// Hal Overrides
|
||||||
|
// --------------------------
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void register(HalEventConfig event) {
|
||||||
|
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void register(HalSensorConfig sensor) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deregister(HalEventConfig event) {
|
||||||
|
registeredDevices.remove(event);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void deregister(HalSensorConfig sensor) {
|
||||||
|
registeredDevices.remove(sensor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
return registeredDevices.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void send(HalEventConfig eventConfig, HalEventData eventData) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setListener(HalEventReportListener listener) {
|
||||||
|
eventListener = listener;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void setListener(HalSensorReportListener listener) {
|
||||||
|
sensorListener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
8
plugins/hal-zigbee/src/se/hal/plugin/zigbee/plugin.json
Normal file
8
plugins/hal-zigbee/src/se/hal/plugin/zigbee/plugin.json
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"version": 0.1,
|
||||||
|
"name": "Hal-Zigbee",
|
||||||
|
"description": "A Zigbee plugin for directly connecting to a CC2531 device over serial port.",
|
||||||
|
"interfaces": [
|
||||||
|
{"se.hal.intf.HalAutoScannableController": "se.hal.plugin.zigbee.deconz.zigbee.HalDeconzZigbeeController"}
|
||||||
|
]
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue