initial ZWave implementation
This commit is contained in:
parent
84ba74b656
commit
017b690437
5 changed files with 329 additions and 0 deletions
BIN
lib/netty-all-4.0.46.Final.jar
vendored
Executable file
BIN
lib/netty-all-4.0.46.Final.jar
vendored
Executable file
Binary file not shown.
BIN
lib/wzwave-0.0.3.jar
vendored
Executable file
BIN
lib/wzwave-0.0.3.jar
vendored
Executable file
Binary file not shown.
230
src/se/hal/plugin/zwave/JSCZWaveController.java
Executable file
230
src/se/hal/plugin/zwave/JSCZWaveController.java
Executable file
|
|
@ -0,0 +1,230 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2013 Whizzo Software, LLC.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*******************************************************************************/
|
||||
package se.hal.plugin.zwave;
|
||||
|
||||
import com.whizzosoftware.wzwave.channel.*;
|
||||
import com.whizzosoftware.wzwave.codec.ZWaveFrameDecoder;
|
||||
import com.whizzosoftware.wzwave.codec.ZWaveFrameEncoder;
|
||||
import com.whizzosoftware.wzwave.controller.ZWaveController;
|
||||
import com.whizzosoftware.wzwave.controller.ZWaveControllerContext;
|
||||
import com.whizzosoftware.wzwave.controller.ZWaveControllerListener;
|
||||
import com.whizzosoftware.wzwave.controller.netty.NettyZWaveController;
|
||||
import com.whizzosoftware.wzwave.frame.*;
|
||||
import com.whizzosoftware.wzwave.node.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* A jSerialComm implementation of a ZWaveController.
|
||||
*
|
||||
* @author Ziver Koc
|
||||
*/
|
||||
public class JSCZWaveController implements ZWaveController, ZWaveControllerContext, ZWaveControllerListener, ZWaveChannelListener, NodeListener {
|
||||
private static final Logger logger = LoggerFactory.getLogger(JSCZWaveController.class);
|
||||
|
||||
private String serialPort;
|
||||
private String libraryVersion;
|
||||
private int homeId;
|
||||
private byte nodeId;
|
||||
private ZWaveChannelInboundHandler inboundHandler;
|
||||
private ZWaveControllerListener listener;
|
||||
private final List<ZWaveNode> nodes = new ArrayList<ZWaveNode>();
|
||||
private final Map<Byte,ZWaveNode> nodeMap = new HashMap<Byte,ZWaveNode>();
|
||||
|
||||
public JSCZWaveController(String serialPort) {
|
||||
this.serialPort = serialPort;
|
||||
this.inboundHandler = new ZWaveChannelInboundHandler(this);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* ZWaveController methods
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void setListener(ZWaveControllerListener listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
public void start() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHomeId() {
|
||||
return homeId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte getNodeId() {
|
||||
return nodeId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLibraryVersion() {
|
||||
return libraryVersion;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<ZWaveNode> getNodes() {
|
||||
return nodes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendDataFrame(DataFrame dataFrame) {
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* ZWaveControllerListener methods
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void onZWaveNodeAdded(ZWaveEndpoint node) {
|
||||
if (listener != null) {
|
||||
listener.onZWaveNodeAdded(node);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onZWaveNodeUpdated(ZWaveEndpoint node) {
|
||||
if (listener != null) {
|
||||
listener.onZWaveNodeUpdated(node);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onZWaveConnectionFailure(Throwable t) {
|
||||
if (listener != null) {
|
||||
listener.onZWaveConnectionFailure(t);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* ZWaveChannelListener methods
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void onLibraryInfo(String libraryVersion) {
|
||||
this.libraryVersion = libraryVersion;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onControllerInfo(int homeId, byte nodeId) {
|
||||
this.homeId = homeId;
|
||||
this.nodeId = nodeId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNodeProtocolInfo(byte nodeId, NodeProtocolInfo nodeProtocolInfo) {
|
||||
try {
|
||||
logger.trace("Received protocol info for node " + nodeId);
|
||||
ZWaveNode node = ZWaveNodeFactory.createNode(this, nodeId, nodeProtocolInfo, this);
|
||||
logger.trace("Created node [" + node.getNodeId() + "]: " + node);
|
||||
nodes.add(node);
|
||||
nodeMap.put(node.getNodeId(), node);
|
||||
} catch (NodeCreationException e) {
|
||||
logger.error("Unable to create node", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSendData(SendData sendData) {
|
||||
byte nodeId = sendData.getNodeId();
|
||||
ZWaveNode node = nodeMap.get(nodeId);
|
||||
if (node != null) {
|
||||
node.onDataFrameReceived(this, sendData);
|
||||
} else {
|
||||
logger.error("Unable to find node " + nodeId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onApplicationCommand(ApplicationCommand applicationCommand) {
|
||||
ZWaveNode node = nodeMap.get(applicationCommand.getNodeId());
|
||||
if (node != null) {
|
||||
node.onDataFrameReceived(this, applicationCommand);
|
||||
if (listener != null && node.isStarted()) {
|
||||
listener.onZWaveNodeUpdated(node);
|
||||
}
|
||||
} else {
|
||||
logger.error("Unable to find node " + applicationCommand.getNodeId());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onApplicationUpdate(ApplicationUpdate applicationUpdate) {
|
||||
Byte nodeId = applicationUpdate.getNodeId();
|
||||
|
||||
if (applicationUpdate.didInfoRequestFail()) {
|
||||
logger.trace("UPDATE_STATE_NODE_INFO_REQ_FAILED received");
|
||||
}
|
||||
|
||||
if (nodeId != null) {
|
||||
ZWaveNode node = nodeMap.get(nodeId);
|
||||
if (node != null) {
|
||||
node.onDataFrameReceived(this, applicationUpdate);
|
||||
if (listener != null && node.isStarted()) {
|
||||
listener.onZWaveNodeUpdated(node);
|
||||
}
|
||||
} else {
|
||||
logger.error("Unable to find node " + applicationUpdate.getNodeId());
|
||||
}
|
||||
} else {
|
||||
logger.error("Unable to determine node to route ApplicationUpdate to");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* NodeListener methods
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void onNodeStarted(ZWaveNode node) {
|
||||
// when a node moves to the "started" state, alert listeners that it's ready to be added
|
||||
if (listener != null) {
|
||||
listener.onZWaveNodeAdded(node);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Test main
|
||||
*/
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
NettyZWaveController c = new NettyZWaveController("/dev/cu.SLAB_USBtoUART");
|
||||
ZWaveControllerListener listener = new ZWaveControllerListener() {
|
||||
@Override
|
||||
public void onZWaveNodeAdded(ZWaveEndpoint node) {
|
||||
System.out.println("onZWaveNodeAdded: " + node);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onZWaveNodeUpdated(ZWaveEndpoint node) {
|
||||
System.out.println("onZWaveNodeUpdated: " + node);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onZWaveConnectionFailure(Throwable t) {
|
||||
System.out.println("A connection error occurred: " + t.getLocalizedMessage());
|
||||
}
|
||||
};
|
||||
c.setListener(listener);
|
||||
c.start();
|
||||
|
||||
Thread.sleep(10000);
|
||||
}
|
||||
}
|
||||
92
src/se/hal/plugin/zwave/ZWaveSerialComm.java
Executable file
92
src/se/hal/plugin/zwave/ZWaveSerialComm.java
Executable file
|
|
@ -0,0 +1,92 @@
|
|||
package se.hal.plugin.zwave;
|
||||
|
||||
import com.whizzosoftware.wzwave.controller.ZWaveController;
|
||||
import com.whizzosoftware.wzwave.controller.ZWaveControllerListener;
|
||||
import com.whizzosoftware.wzwave.controller.netty.NettyZWaveController;
|
||||
import com.whizzosoftware.wzwave.node.ZWaveEndpoint;
|
||||
import se.hal.HalContext;
|
||||
import se.hal.intf.*;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class ZWaveSerialComm implements HalSensorController, HalEventController, HalAutoScannableController, ZWaveControllerListener {
|
||||
|
||||
private ZWaveController controller;
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
return HalContext.getStringProperty("zwave.com_port") != null;
|
||||
}
|
||||
@Override
|
||||
public void initialize() throws Exception {
|
||||
controller = new NettyZWaveController(HalContext.getStringProperty("zwave.com_port"));
|
||||
controller.setListener(this);
|
||||
controller.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
controller.stop();
|
||||
controller = null;
|
||||
}
|
||||
|
||||
////////////// Z-WAVE CODE ////////////////////////
|
||||
|
||||
@Override
|
||||
public void onZWaveNodeAdded(ZWaveEndpoint zWaveEndpoint) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onZWaveNodeUpdated(ZWaveEndpoint zWaveEndpoint) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onZWaveConnectionFailure(Throwable throwable) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
////////////// HAL CODE ////////////////////////
|
||||
|
||||
@Override
|
||||
public void register(HalSensorConfig sensor) {
|
||||
|
||||
}
|
||||
@Override
|
||||
public void register(HalEventConfig event) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deregister(HalSensorConfig sensor) {
|
||||
|
||||
}
|
||||
@Override
|
||||
public void deregister(HalEventConfig event) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setListener(HalEventReportListener listener) {
|
||||
|
||||
}
|
||||
@Override
|
||||
public void setListener(HalSensorReportListener listener) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void send(HalEventConfig eventConfig, HalEventData eventData) {
|
||||
|
||||
}
|
||||
}
|
||||
7
src/se/hal/plugin/zwave/plugin.json
Executable file
7
src/se/hal/plugin/zwave/plugin.json
Executable file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"version": 1.0,
|
||||
"name": "Z-Wave",
|
||||
"interfaces": [
|
||||
{"se.hal.intf.HalAutoScannableController": "se.hal.plugin.zwave.ZWaveSerialComm"}
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue