Replaced zwave lib with OpenZwave
This commit is contained in:
parent
12673437da
commit
7777972d97
5 changed files with 298 additions and 216 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,190 +1,353 @@
|
||||||
package se.hal.plugin.zwave;
|
package se.hal.plugin.zwave;
|
||||||
|
|
||||||
import com.whizzosoftware.wzwave.controller.ZWaveController;
|
import org.zwave4j.*;
|
||||||
import com.whizzosoftware.wzwave.controller.ZWaveControllerListener;
|
|
||||||
import com.whizzosoftware.wzwave.controller.netty.NettyZWaveController;
|
|
||||||
import com.whizzosoftware.wzwave.node.NodeInfo;
|
|
||||||
import com.whizzosoftware.wzwave.node.ZWaveEndpoint;
|
|
||||||
import se.hal.HalContext;
|
import se.hal.HalContext;
|
||||||
import se.hal.intf.*;
|
import se.hal.intf.*;
|
||||||
|
import se.hal.plugin.tellstick.TellstickDevice;
|
||||||
import zutil.log.LogUtil;
|
import zutil.log.LogUtil;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* @author zagumennikov
|
||||||
*/
|
*/
|
||||||
public class HalZWaveController implements HalSensorController, HalEventController,
|
public class HalZWaveController implements HalSensorController, HalEventController, HalAutoScannableController, NotificationWatcher{
|
||||||
HalAutoScannableController, ZWaveControllerListener {
|
private static final Logger logger = LogUtil.getLogger();
|
||||||
public static final Logger logger = LogUtil.getLogger();
|
|
||||||
private ZWaveController controller;
|
public static final String CONFIG_ZWAVE_PORT = "zwave.com_port";
|
||||||
|
public static final String CONFIG_ZWAVE_CFG_PATH = "zwave.cfg_path";
|
||||||
|
|
||||||
|
private String serialPort;
|
||||||
|
private long homeId;
|
||||||
|
|
||||||
|
private Options options;
|
||||||
|
private Manager manager;
|
||||||
|
|
||||||
|
private HalSensorReportListener sensorListener;
|
||||||
|
private HalEventReportListener eventListener;
|
||||||
|
private List<TellstickDevice> registeredDevices;
|
||||||
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) throws IOException {
|
||||||
NettyZWaveController zwave = new NettyZWaveController("COM3", new HashMapPersistentStore());
|
HalZWaveController controller = new HalZWaveController();
|
||||||
zwave.setListener(new ZWaveControllerListener(){
|
controller.initialize(
|
||||||
@Override
|
"/dev/serial/by-id/usb-0658_0200-if00",
|
||||||
public void onZWaveNodeAdded(ZWaveEndpoint node) {
|
"./");
|
||||||
System.out.println("onZWaveNodeAdded: "+ node);
|
|
||||||
|
System.in.read();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public HalZWaveController() {
|
||||||
public void onZWaveNodeUpdated(ZWaveEndpoint node) {
|
NativeLibraryLoader.loadLibrary(ZWave4j.LIBRARY_NAME, ZWave4j.class);
|
||||||
System.out.println("onZWaveNodeUpdated: "+ node);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveConnectionFailure(Throwable t) {
|
|
||||||
System.out.println("onZWaveConnectionFailure: "+ t);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveControllerInfo(String libraryVersion, Integer homeId, Byte nodeId) {
|
|
||||||
System.out.println("onZWaveControllerInfo: "+ libraryVersion+" "+homeId+" "+nodeId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveInclusionStarted() {
|
|
||||||
System.out.println("onZWaveInclusionStarted");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveInclusion(NodeInfo nodeInfo, boolean success) {
|
|
||||||
System.out.println("onZWaveInclusion: "+ nodeInfo + " "+success);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveInclusionStopped() {
|
|
||||||
System.out.println("onZWaveInclusionStopped");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveExclusionStarted() {
|
|
||||||
System.out.println("onZWaveExclusionStarted");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveExclusion(NodeInfo nodeInfo, boolean success) {
|
|
||||||
System.out.println("onZWaveExclusion: "+ nodeInfo + " "+success);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveExclusionStopped() {
|
|
||||||
System.out.println("onZWaveExclusionStopped");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
zwave.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAvailable() {
|
public boolean isAvailable() {
|
||||||
return HalContext.getStringProperty("zwave.com_port") != null;
|
return HalContext.getStringProperty(CONFIG_ZWAVE_PORT) != null &&
|
||||||
|
HalContext.getStringProperty(CONFIG_ZWAVE_CFG_PATH) != null;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
controller = new NettyZWaveController(
|
initialize(HalContext.getStringProperty(CONFIG_ZWAVE_PORT),
|
||||||
HalContext.getStringProperty("zwave.com_port"),
|
HalContext.getStringProperty(CONFIG_ZWAVE_CFG_PATH));
|
||||||
new HashMapPersistentStore());
|
}
|
||||||
controller.setListener(this);
|
public void initialize(String comPort, String configDir) {
|
||||||
controller.start();
|
options = Options.create(configDir, "", "");
|
||||||
|
options.addOptionBool("ConsoleOutput", false);
|
||||||
|
options.lock();
|
||||||
|
|
||||||
|
logger.info("Creating OpenZWave Manager...");
|
||||||
|
serialPort = comPort;
|
||||||
|
manager = Manager.create();
|
||||||
|
manager.addWatcher(this, null);
|
||||||
|
|
||||||
|
logger.info("Connecting to com port... ("+ serialPort +")");
|
||||||
|
manager.addDriver(serialPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
controller.stop();
|
manager.removeWatcher(this, null);
|
||||||
controller = null;
|
manager.removeDriver(serialPort);
|
||||||
|
manager.destroy();
|
||||||
|
Options.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////// Z-WAVE CODE ////////////////////////
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onZWaveNodeAdded(ZWaveEndpoint node) {
|
public void onNotification(Notification notification, Object context) {
|
||||||
logger.finest("onZWaveNodeAdded: "+ node);
|
switch (notification.getType()) {
|
||||||
|
case DRIVER_READY:
|
||||||
|
System.out.println(String.format("Driver ready\n" +
|
||||||
|
"\thome id: %d",
|
||||||
|
notification.getHomeId()
|
||||||
|
));
|
||||||
|
homeId = notification.getHomeId();
|
||||||
|
break;
|
||||||
|
case DRIVER_FAILED:
|
||||||
|
System.out.println("Driver failed");
|
||||||
|
break;
|
||||||
|
case DRIVER_RESET:
|
||||||
|
System.out.println("Driver reset");
|
||||||
|
break;
|
||||||
|
case AWAKE_NODES_QUERIED:
|
||||||
|
System.out.println("Awake nodes queried");
|
||||||
|
break;
|
||||||
|
case ALL_NODES_QUERIED_SOME_DEAD:
|
||||||
|
System.out.println("Some Nodes are dead");
|
||||||
|
case ALL_NODES_QUERIED:
|
||||||
|
System.out.println("Finished querying nodes");
|
||||||
|
manager.writeConfig(homeId);
|
||||||
|
// Controller is done initializing
|
||||||
|
break;
|
||||||
|
case POLLING_ENABLED:
|
||||||
|
System.out.println("Polling enabled");
|
||||||
|
break;
|
||||||
|
case POLLING_DISABLED:
|
||||||
|
System.out.println("Polling disabled");
|
||||||
|
break;
|
||||||
|
case NODE_NEW:
|
||||||
|
System.out.println(String.format("Node new\n" +
|
||||||
|
"\tnode id: %d",
|
||||||
|
notification.getNodeId()
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case NODE_ADDED:
|
||||||
|
System.out.println(String.format("Node added\n" +
|
||||||
|
"\tnode id: %d",
|
||||||
|
notification.getNodeId()
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case NODE_REMOVED:
|
||||||
|
System.out.println(String.format("Node removed\n" +
|
||||||
|
"\tnode id: %d",
|
||||||
|
notification.getNodeId()
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case ESSENTIAL_NODE_QUERIES_COMPLETE:
|
||||||
|
System.out.println(String.format("Node essential queries complete\n" +
|
||||||
|
"\tnode id: %d",
|
||||||
|
notification.getNodeId()
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case NODE_QUERIES_COMPLETE:
|
||||||
|
System.out.println(String.format("Node queries complete\n" +
|
||||||
|
"\tnode id: %d",
|
||||||
|
notification.getNodeId()
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case NODE_EVENT:
|
||||||
|
System.out.println(String.format("Node event\n" +
|
||||||
|
"\tnode id: %d\n" +
|
||||||
|
"\tevent id: %d",
|
||||||
|
notification.getNodeId(),
|
||||||
|
notification.getEvent()
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case NODE_NAMING:
|
||||||
|
System.out.println(String.format("Node naming\n" +
|
||||||
|
"\tnode id: %d",
|
||||||
|
notification.getNodeId()
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case NODE_PROTOCOL_INFO:
|
||||||
|
System.out.println(String.format("Node protocol info\n" +
|
||||||
|
"\tnode id: %d\n" +
|
||||||
|
"\ttype: %s",
|
||||||
|
notification.getNodeId(),
|
||||||
|
manager.getNodeType(notification.getHomeId(), notification.getNodeId())
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case VALUE_ADDED:
|
||||||
|
System.out.println(String.format("Value added\n" +
|
||||||
|
"\tnode id: %d\n" +
|
||||||
|
"\tcommand class: %d\n" +
|
||||||
|
"\tinstance: %d\n" +
|
||||||
|
"\tindex: %d\n" +
|
||||||
|
"\tgenre: %s\n" +
|
||||||
|
"\ttype: %s\n" +
|
||||||
|
"\tlabel: %s\n" +
|
||||||
|
"\tvalue: %s",
|
||||||
|
notification.getNodeId(),
|
||||||
|
notification.getValueId().getCommandClassId(),
|
||||||
|
notification.getValueId().getInstance(),
|
||||||
|
notification.getValueId().getIndex(),
|
||||||
|
notification.getValueId().getGenre().name(),
|
||||||
|
notification.getValueId().getType().name(),
|
||||||
|
manager.getValueLabel(notification.getValueId()),
|
||||||
|
getValue(notification.getValueId())
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case VALUE_REMOVED:
|
||||||
|
System.out.println(String.format("Value removed\n" +
|
||||||
|
"\tnode id: %d\n" +
|
||||||
|
"\tcommand class: %d\n" +
|
||||||
|
"\tinstance: %d\n" +
|
||||||
|
"\tindex: %d",
|
||||||
|
notification.getNodeId(),
|
||||||
|
notification.getValueId().getCommandClassId(),
|
||||||
|
notification.getValueId().getInstance(),
|
||||||
|
notification.getValueId().getIndex()
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case VALUE_CHANGED:
|
||||||
|
System.out.println(String.format("Value changed\n" +
|
||||||
|
"\tnode id: %d\n" +
|
||||||
|
"\tcommand class: %d\n" +
|
||||||
|
"\tinstance: %d\n" +
|
||||||
|
"\tindex: %d\n" +
|
||||||
|
"\tvalue: %s",
|
||||||
|
notification.getNodeId(),
|
||||||
|
notification.getValueId().getCommandClassId(),
|
||||||
|
notification.getValueId().getInstance(),
|
||||||
|
notification.getValueId().getIndex(),
|
||||||
|
getValue(notification.getValueId())
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case VALUE_REFRESHED:
|
||||||
|
System.out.println(String.format("Value refreshed\n" +
|
||||||
|
"\tnode id: %d\n" +
|
||||||
|
"\tcommand class: %d\n" +
|
||||||
|
"\tinstance: %d\n" +
|
||||||
|
"\tindex: %d" +
|
||||||
|
"\tvalue: %s",
|
||||||
|
notification.getNodeId(),
|
||||||
|
notification.getValueId().getCommandClassId(),
|
||||||
|
notification.getValueId().getInstance(),
|
||||||
|
notification.getValueId().getIndex(),
|
||||||
|
getValue(notification.getValueId())
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case GROUP:
|
||||||
|
System.out.println(String.format("Group\n" +
|
||||||
|
"\tnode id: %d\n" +
|
||||||
|
"\tgroup id: %d",
|
||||||
|
notification.getNodeId(),
|
||||||
|
notification.getGroupIdx()
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCENE_EVENT:
|
||||||
|
System.out.println(String.format("Scene event\n" +
|
||||||
|
"\tscene id: %d",
|
||||||
|
notification.getSceneId()
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case CREATE_BUTTON:
|
||||||
|
System.out.println(String.format("Button create\n" +
|
||||||
|
"\tbutton id: %d",
|
||||||
|
notification.getButtonId()
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case DELETE_BUTTON:
|
||||||
|
System.out.println(String.format("Button delete\n" +
|
||||||
|
"\tbutton id: %d",
|
||||||
|
notification.getButtonId()
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case BUTTON_ON:
|
||||||
|
System.out.println(String.format("Button on\n" +
|
||||||
|
"\tbutton id: %d",
|
||||||
|
notification.getButtonId()
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case BUTTON_OFF:
|
||||||
|
System.out.println(String.format("Button off\n" +
|
||||||
|
"\tbutton id: %d",
|
||||||
|
notification.getButtonId()
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case NOTIFICATION:
|
||||||
|
System.out.println("Notification");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.println(notification.getType().name());
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private static Object getValue(ValueId valueId) {
|
||||||
public void onZWaveNodeUpdated(ZWaveEndpoint node) {
|
switch (valueId.getType()) {
|
||||||
logger.finest("onZWaveNodeUpdated: "+ node);
|
case BOOL:
|
||||||
|
AtomicReference<Boolean> b = new AtomicReference<>();
|
||||||
|
Manager.get().getValueAsBool(valueId, b);
|
||||||
|
return b.get();
|
||||||
|
case BYTE:
|
||||||
|
AtomicReference<Short> bb = new AtomicReference<>();
|
||||||
|
Manager.get().getValueAsByte(valueId, bb);
|
||||||
|
return bb.get();
|
||||||
|
case DECIMAL:
|
||||||
|
AtomicReference<Float> f = new AtomicReference<>();
|
||||||
|
Manager.get().getValueAsFloat(valueId, f);
|
||||||
|
return f.get();
|
||||||
|
case INT:
|
||||||
|
AtomicReference<Integer> i = new AtomicReference<>();
|
||||||
|
Manager.get().getValueAsInt(valueId, i);
|
||||||
|
return i.get();
|
||||||
|
case LIST:
|
||||||
|
return null;
|
||||||
|
case SCHEDULE:
|
||||||
|
return null;
|
||||||
|
case SHORT:
|
||||||
|
AtomicReference<Short> s = new AtomicReference<>();
|
||||||
|
Manager.get().getValueAsShort(valueId, s);
|
||||||
|
return s.get();
|
||||||
|
case STRING:
|
||||||
|
AtomicReference<String> ss = new AtomicReference<>();
|
||||||
|
Manager.get().getValueAsString(valueId, ss);
|
||||||
|
return ss.get();
|
||||||
|
case BUTTON:
|
||||||
|
return null;
|
||||||
|
case RAW:
|
||||||
|
AtomicReference<short[]> sss = new AtomicReference<>();
|
||||||
|
Manager.get().getValueAsRaw(valueId, sss);
|
||||||
|
return sss.get();
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveConnectionFailure(Throwable t) {
|
|
||||||
logger.finest("onZWaveConnectionFailure: "+ t);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveControllerInfo(String libraryVersion, Integer homeId, Byte nodeId) {
|
|
||||||
logger.finest("onZWaveControllerInfo: "+ libraryVersion+" "+homeId+" "+nodeId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveInclusionStarted() {
|
|
||||||
logger.finest("onZWaveInclusionStarted");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveInclusion(NodeInfo nodeInfo, boolean success) {
|
|
||||||
logger.finest("onZWaveInclusion: "+ nodeInfo + " "+success);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveInclusionStopped() {
|
|
||||||
logger.finest("onZWaveInclusionStopped");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveExclusionStarted() {
|
|
||||||
logger.finest("onZWaveExclusionStarted");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveExclusion(NodeInfo nodeInfo, boolean success) {
|
|
||||||
logger.finest("onZWaveExclusion: "+ nodeInfo + " "+success);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onZWaveExclusionStopped() {
|
|
||||||
logger.finest("onZWaveExclusionStopped");
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////// HAL CODE ////////////////////////
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void register(HalSensorConfig sensor) {
|
|
||||||
|
|
||||||
}
|
|
||||||
@Override
|
@Override
|
||||||
public void register(HalEventConfig event) {
|
public void register(HalEventConfig event) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deregister(HalSensorConfig sensor) {
|
public void register(HalSensorConfig sensor) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deregister(HalEventConfig event) {
|
public void deregister(HalEventConfig event) {
|
||||||
|
registeredDevices.remove(event);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void deregister(HalSensorConfig sensor) {
|
||||||
|
registeredDevices.remove(sensor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int size() {
|
public int size() {
|
||||||
return 0;
|
return registeredDevices.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setListener(HalEventReportListener listener) {
|
|
||||||
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public void setListener(HalSensorReportListener listener) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void send(HalEventConfig eventConfig, HalEventData eventData) {
|
public void send(HalEventConfig eventConfig, HalEventData eventData) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setListener(HalEventReportListener listener) {
|
||||||
|
eventListener = listener;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void setListener(HalSensorReportListener listener) {
|
||||||
|
sensorListener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,81 +0,0 @@
|
||||||
/*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2018 Ziver Koc
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package se.hal.plugin.zwave;
|
|
||||||
|
|
||||||
import com.whizzosoftware.wzwave.node.NodeCreationException;
|
|
||||||
import com.whizzosoftware.wzwave.node.NodeListener;
|
|
||||||
import com.whizzosoftware.wzwave.node.ZWaveNode;
|
|
||||||
import com.whizzosoftware.wzwave.node.ZWaveNodeFactory;
|
|
||||||
import com.whizzosoftware.wzwave.persist.PersistenceContext;
|
|
||||||
import com.whizzosoftware.wzwave.persist.PersistentStore;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A HashMap implementation of PersistentStore.
|
|
||||||
*
|
|
||||||
* @author Ziver Koc
|
|
||||||
*/
|
|
||||||
public class HashMapPersistentStore implements PersistentStore, PersistenceContext {
|
|
||||||
|
|
||||||
private HashMap<String, HashMap<String,Object>> db;
|
|
||||||
|
|
||||||
public HashMapPersistentStore() {
|
|
||||||
db = new HashMap<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ZWaveNode getNode(byte nodeId, NodeListener listener) throws NodeCreationException {
|
|
||||||
return ZWaveNodeFactory.createNode(this, nodeId, listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void saveNode(ZWaveNode node) {
|
|
||||||
node.save(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void close() { }
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Map<String, Object> getNodeMap(int nodeId) {
|
|
||||||
return get("" + nodeId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Map<String, Object> getCommandClassMap(int nodeId, int commandClassId) {
|
|
||||||
return get("" + nodeId + "." + commandClassId);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Map<String, Object> get(String key) {
|
|
||||||
if (!db.containsKey(key))
|
|
||||||
db.put(key, new HashMap<String, Object>());
|
|
||||||
return db.get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue