From c0815ac0f9cce514608a63614915cfb1386ccc32 Mon Sep 17 00:00:00 2001 From: Mark Milligan Date: Thu, 11 Feb 2021 18:52:19 -0600 Subject: [PATCH] Add the static single hub BOM. --- bom/BOM.xlsx | Bin 0 -> 6539 bytes currentmonitor/lantern-currentmonitor/pom.xml | 2 +- .../lanternsoftware/util/ResourceLoader.java | 2 + .../zwave/controller/Controller.java | 4 +- .../zwave/message/CommandClass.java | 1 + .../zwave/message/impl/CRC16EncapRequest.java | 28 +++++++++++ .../message/impl/ConfigurationSetRequest.java | 47 ++++++++++++++++++ .../com.lanternsoftware.zwave.message.Message | 2 + 8 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 bom/BOM.xlsx create mode 100644 zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/impl/CRC16EncapRequest.java create mode 100644 zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/impl/ConfigurationSetRequest.java diff --git a/bom/BOM.xlsx b/bom/BOM.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7050ffd8d3bc42fe3e6ade4cc8db2c38ce266f95 GIT binary patch literal 6539 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.lanternsoftware.currentmonitor lantern-currentmonitor jar - 0.9.5 + 0.9.6 lantern-currentmonitor diff --git a/util/lantern-util-common/src/main/java/com/lanternsoftware/util/ResourceLoader.java b/util/lantern-util-common/src/main/java/com/lanternsoftware/util/ResourceLoader.java index 9e649c8..c20d22a 100644 --- a/util/lantern-util-common/src/main/java/com/lanternsoftware/util/ResourceLoader.java +++ b/util/lantern-util-common/src/main/java/com/lanternsoftware/util/ResourceLoader.java @@ -118,6 +118,8 @@ public abstract class ResourceLoader { try { os = new FileOutputStream(_sFile, false); os.write(_btData); + os.flush(); + os.getFD().sync(); } catch (Throwable t) { LOG.error("Failed to write file: " + _sFile, t); diff --git a/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/controller/Controller.java b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/controller/Controller.java index ee78e31..a89cc68 100644 --- a/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/controller/Controller.java +++ b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/controller/Controller.java @@ -161,7 +161,7 @@ public class Controller { callbacks.put(callback, message.getNodeId()); log += " callback: " + callback; } - logger.info(log); + logger.debug(log); byte[] data = message.toByteArray((byte) 0, callback); logger.debug("Sending outbound: {}", NullUtils.toHexBytes(data)); responseReceived = false; @@ -206,7 +206,7 @@ public class Controller { sendRaw(new byte[]{ACK}); Message message = MessageEngine.decode(_buffer); if (message != null) { - logger.info("Received message inbound: {}", message.describe()); + logger.debug("Received message inbound: {}", message.describe()); MessageEngine.publish(message); if (message instanceof ResponseMessage) { synchronized (responseMutex) { diff --git a/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/CommandClass.java b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/CommandClass.java index 2f83015..c099b13 100644 --- a/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/CommandClass.java +++ b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/CommandClass.java @@ -42,6 +42,7 @@ public enum CommandClass { SCHEDULE_ENTRY_LOCK((byte)0x4E, "SCHEDULE_ENTRY_LOCK"), BASIC_WINDOW_COVERING((byte)0x50, "BASIC_WINDOW_COVERING"), MTP_WINDOW_COVERING((byte)0x51, "MTP_WINDOW_COVERING"), + CRC_16_ENCAP((byte)0x5B, "CRC_16_ENCAP"), MULTI_INSTANCE((byte)0x60, "MULTI_INSTANCE"), DOOR_LOCK((byte)0x62, "DOOR_LOCK"), USER_CODE((byte)0x63, "USER_CODE"), diff --git a/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/impl/CRC16EncapRequest.java b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/impl/CRC16EncapRequest.java new file mode 100644 index 0000000..d6a85f1 --- /dev/null +++ b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/impl/CRC16EncapRequest.java @@ -0,0 +1,28 @@ +package com.lanternsoftware.zwave.message.impl; + +import com.lanternsoftware.zwave.message.CommandClass; +import com.lanternsoftware.zwave.message.ControllerMessageType; +import com.lanternsoftware.zwave.message.RequestMessage; + +public class CRC16EncapRequest extends RequestMessage { + private boolean on; + + public CRC16EncapRequest() { + super(ControllerMessageType.ApplicationCommandHandler, CommandClass.CRC_16_ENCAP, (byte) 0x03); + } + + @Override + public void fromPayload(byte[] _payload) { + nodeId = _payload[5]; + on = _payload[11] == 1; + } + + public boolean isOn() { + return on; + } + + @Override + public String describe() { + return name() + " node: " + nodeId + " on: " + on; + } +} diff --git a/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/impl/ConfigurationSetRequest.java b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/impl/ConfigurationSetRequest.java new file mode 100644 index 0000000..ce8065c --- /dev/null +++ b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/impl/ConfigurationSetRequest.java @@ -0,0 +1,47 @@ +package com.lanternsoftware.zwave.message.impl; + +import com.lanternsoftware.util.CollectionUtils; +import com.lanternsoftware.util.NullUtils; +import com.lanternsoftware.zwave.message.CommandClass; +import com.lanternsoftware.zwave.message.SendDataRequestMessage; + +public class ConfigurationSetRequest extends SendDataRequestMessage { + private byte parameter; + private byte[] value; + + public ConfigurationSetRequest() { + this((byte)0, (byte)0, null); + } + + public ConfigurationSetRequest(byte _nodeId, byte _parameter, byte[] _value) { + super(_nodeId, CommandClass.CONFIGURATION, (byte) 0x04); + parameter = _parameter; + value = _value; + } + + public byte getParameter() { + return parameter; + } + + public void setParameter(byte _parameter) { + parameter = _parameter; + } + + public byte[] getValue() { + return value; + } + + public void setValue(byte[] _value) { + value = _value; + } + + @Override + public byte[] getPayload() { + return CollectionUtils.merge(asByteArray(parameter), asByteArray((byte)CollectionUtils.length(value)), value); + } + + @Override + public String describe() { + return name() + " node: " + nodeId + " parameter: " + parameter + " value: " + NullUtils.toHex(value); + } +} diff --git a/zwave/lantern-zwave/src/main/resources/META-INF/services/com.lanternsoftware.zwave.message.Message b/zwave/lantern-zwave/src/main/resources/META-INF/services/com.lanternsoftware.zwave.message.Message index 9a6e892..ea84139 100644 --- a/zwave/lantern-zwave/src/main/resources/META-INF/services/com.lanternsoftware.zwave.message.Message +++ b/zwave/lantern-zwave/src/main/resources/META-INF/services/com.lanternsoftware.zwave.message.Message @@ -2,10 +2,12 @@ com.lanternsoftware.zwave.message.impl.ApplicationUpdateRequest com.lanternsoftware.zwave.message.impl.BinarySwitchSetRequest com.lanternsoftware.zwave.message.impl.BinarySwitchReportRequest com.lanternsoftware.zwave.message.impl.ByteMessage +com.lanternsoftware.zwave.message.impl.ConfigurationSetRequest com.lanternsoftware.zwave.message.impl.ControllerCapabilitiesRequest com.lanternsoftware.zwave.message.impl.ControllerCapabilitiesResponse com.lanternsoftware.zwave.message.impl.ControllerInitialDataRequest com.lanternsoftware.zwave.message.impl.ControllerInitialDataResponse +com.lanternsoftware.zwave.message.impl.CRC16EncapRequest com.lanternsoftware.zwave.message.impl.DeviceManufacturerActionRequest com.lanternsoftware.zwave.message.impl.GetControllerIdRequest com.lanternsoftware.zwave.message.impl.GetControllerIdResponse