public virtual bool HandleMultiInstanceReport(byte[] message) { //UNHANDLED: 01 14 00 04 08 04 0E 32 02 21 74 00 00 1E BB 00 00 00 00 00 00 2D // ^^ bool processed = false; // byte commandClass = message[7]; // if (commandClass == (byte)CommandClass.COMMAND_CLASS_METER) { if (message.Length > 14 && message[4] == 0x00) { // CLASS METER // double wattsRead = ((double)int.Parse(message[12].ToString("X2") + message[13].ToString("X2") + message[14].ToString("X2"), System.Globalization.NumberStyles.HexNumber)) / 1000D; nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, ParameterType.PARAMETER_WATTS, wattsRead); // processed = true; } else if (message.Length > 14 && message[4] == 0x08) { //TODO: complete here... processed = true; } } return(processed); }
public byte[] GeneratePrivateNetworkKey() { privateNetworkKey = new byte[16]; Random rnd = new Random(); rnd.NextBytes(privateNetworkKey); // notify the controller that the privateNetworkKey was generated so that it can save it ZWaveEvent keyGenEvent = new ZWaveEvent(parentNode, EventParameter.SecurityGeneratedKey, 0, 0); parentNode.RaiseUpdateParameterEvent(keyGenEvent); return(privateNetworkKey); }
public ZWaveEvent GetEvent(ZWaveNode node, byte[] message) { ZWaveEvent nodeEvent = null; byte cmdType = message[1]; if (cmdType == (byte)Command.DoorLock_Report) { int lockState; if (message[2] == 0xFF) { lockState = 6; } else { lockState = System.Convert.ToInt32(message[2].ToString("X2")); } if (lockState > 6) { lockState = 7; } string resp; if (lockState == 0) { resp = "Unlocked"; } else if (lockState == 6) { resp = "Locked"; } else { resp = "Unknown"; } var messageEvent = new ZWaveEvent(node, EventParameter.DoorLockStatus, resp, 0); node.RaiseUpdateParameterEvent(messageEvent); } return(nodeEvent); }
public virtual bool HandleMultiInstanceReport(byte[] message) { //UNHANDLED: 01 14 00 04 08 04 0E 32 02 21 74 00 00 1E BB 00 00 00 00 00 00 2D // ^^ | | // +--|------> 0x31 Command Class Meter // +------> 0x02 Meter Report bool processed = false; // byte commandClass = message[7]; byte commandType = message[8]; // if (commandClass == (byte)CommandClass.Meter && commandType == (byte)Command.MeterReport) { // TODO: should check meter report type (Electric, Gas, Water) and value precision scale // TODO: the code below parse always as Electric type EnergyValue energy = EnergyValue.Parse(message); nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, energy.EventType, energy.Value); processed = true; } return(processed); }
public virtual bool HandleMultiInstanceReport(byte[] message) { //UNHANDLED: 01 14 00 04 08 04 0E 32 02 21 74 00 00 1E BB 00 00 00 00 00 00 2D // ^^ | | // +--|------> 0x31 Command Class Meter // +------> 0x02 Meter Report bool processed = false; // byte commandClass = message[7]; byte commandType = message[8]; // if (commandClass == (byte)CommandClass.COMMAND_CLASS_METER && commandType == (byte)Command.COMMAND_METER_REPORT) { // TODO: should check meter report type (Electric, Gas, Water) and value precision scale // TODO: the code below parse always as Electric type double wattsRead = ((double)int.Parse(message[12].ToString("X2") + message[13].ToString("X2") + message[14].ToString("X2"), System.Globalization.NumberStyles.HexNumber)) / 1000D; nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, ParameterType.PARAMETER_WATTS, wattsRead); processed = true; } return(processed); }
// // 01 0D 00 04 00 1C 07 9C 02 00 05 FF 00 00 89 // | | | | | | | | | | | | | | | // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // // 01 0F 00 04 00 18 09 71 05 07 00 00 FF 07 02 00 // 01 0F 00 04 00 18 09 71 05 07 FF 00 FF 07 02 00 // public virtual bool HandleBasicReport(byte[] message) { bool handled = false; // //byte cmdLength = message[6]; byte cmdClass = message[7]; byte cmdType = message[8]; // if (cmdClass == (byte)CommandClass.COMMAND_CLASS_BASIC && (cmdType == 0x03 || cmdType == 0x01)) { nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, ParameterType.PARAMETER_BASIC, (double)message[9]); handled = true; } else if (cmdClass == (byte)CommandClass.COMMAND_CLASS_SCENE_ACTIVATION && cmdType == 0x01) { nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, ParameterType.PARAMETER_GENERIC, (double)message[9]); handled = true; } else if (cmdClass == (byte)CommandClass.COMMAND_CLASS_SENSOR_BINARY && cmdType == 0x03) { nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, ParameterType.PARAMETER_GENERIC, message[9]); handled = true; } else if (cmdClass == (byte)CommandClass.COMMAND_CLASS_SENSOR_MULTILEVEL && cmdType == 0x05) { var sensorValue = Sensor.ParseSensorValue(message); if (sensorValue.Parameter == ZWaveSensorParameter.UNKNOWN) { byte key = message[9]; nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, ParameterType.PARAMETER_GENERIC, sensorValue.Value); Console.WriteLine("\nUNHANDLED SENSOR PARAMETER TYPE => " + key + "\n"); } else { nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, sensorValue.EventType, sensorValue.Value); handled = true; } } else if ((cmdClass == (byte)CommandClass.COMMAND_CLASS_SENSOR_ALARM && cmdType == 0x02) || (cmdClass == (byte)CommandClass.COMMAND_CLASS_ALARM && cmdType == 0x05)) { var sensorAlarmValue = Sensor.ParseSensorAlarmValue(message); nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, sensorAlarmValue.EventType, sensorAlarmValue.Value); handled = true; } return(handled); }
public void SetNodeHost(ZWaveNode node) { nodeHost = node; nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, ParameterType.METER_WATT, 0); }
public void SetNodeHost(ZWaveNode node) { nodeHost = node; nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, ParameterType.PARAMETER_WATTS, 0); }
public static ZWaveEvent GetEvent(ZWaveNode node, byte[] message) { ZWaveEvent nodeEvent = null; byte cmdClass = message[7]; byte cmdType = message[8]; byte instanceCmdClass = message[9]; switch (cmdType) { case (byte)Command.MultiInstanceReport: case (byte)Command.MultiInstaceV2Encapsulated: byte[] instanceMessage; byte instanceNumber = message[9]; // if it's a COMMAND_MULTIINSTANCEV2_ENCAP we shift key and val +1 byte if (cmdType == (byte)Command.MultiInstaceV2Encapsulated) { instanceCmdClass = message[11]; instanceMessage = new byte[message.Length - 4]; System.Array.Copy(message, 4, instanceMessage, 0, message.Length - 4); } else { instanceCmdClass = message[10]; instanceMessage = new byte[message.Length - 3]; System.Array.Copy(message, 3, instanceMessage, 0, message.Length - 3); } switch (instanceCmdClass) { case (byte)CommandClass.Basic: nodeEvent = Basic.GetEvent(node, instanceMessage); break; case (byte)CommandClass.Alarm: nodeEvent = Alarm.GetEvent(node, instanceMessage); break; case (byte)CommandClass.SensorAlarm: nodeEvent = SensorAlarm.GetEvent(node, instanceMessage); break; case (byte)CommandClass.SceneActivation: nodeEvent = SceneActivation.GetEvent(node, instanceMessage); break; case (byte)CommandClass.SwitchBinary: nodeEvent = SwitchBinary.GetEvent(node, instanceMessage); if (nodeEvent != null) { node.RaiseUpdateParameterEvent(instanceNumber, EventParameter.MultiinstanceSwitchBinary, nodeEvent.Value); } break; case (byte)CommandClass.SwitchMultilevel: nodeEvent = SwitchMultilevel.GetEvent(node, instanceMessage); if (nodeEvent != null) { node.RaiseUpdateParameterEvent(instanceNumber, EventParameter.MultiinstanceSwitchMultilevel, nodeEvent.Value); } break; case (byte)CommandClass.SensorBinary: nodeEvent = SensorBinary.GetEvent(node, instanceMessage); if (nodeEvent != null) { node.RaiseUpdateParameterEvent(instanceNumber, EventParameter.MultiinstanceSensorBinary, nodeEvent.Value); } break; case (byte)CommandClass.SensorMultilevel: nodeEvent = SensorMultilevel.GetEvent(node, instanceMessage); if (nodeEvent != null) { node.RaiseUpdateParameterEvent(instanceNumber, EventParameter.MultiinstanceSensorMultilevel, nodeEvent.Value); } break; case (byte)CommandClass.Meter: nodeEvent = Meter.GetEvent(node, instanceMessage); break; } if (nodeEvent != null) { nodeEvent.Instance = (int)message[9]; } break; case (byte)Command.MultiInstanceCountReport: byte instanceCount = message[10]; switch (instanceCmdClass) { case (byte)CommandClass.SwitchBinary: nodeEvent = new ZWaveEvent(node, EventParameter.MultiinstanceSwitchBinaryCount, instanceCount, 0); break; case (byte)CommandClass.SwitchMultilevel: nodeEvent = new ZWaveEvent(node, EventParameter.MultiinstanceSwitchMultilevelCount, instanceCount, 0); break; case (byte)CommandClass.SensorBinary: nodeEvent = new ZWaveEvent(node, EventParameter.MultiinstanceSensorBinaryCount, instanceCount, 0); break; case (byte)CommandClass.SensorMultilevel: nodeEvent = new ZWaveEvent(node, EventParameter.MultiinstanceSensorMultilevelCount, instanceCount, 0); break; } break; } return nodeEvent; }
public static ZWaveEvent GetEvent(ZWaveNode node, byte[] message) { ZWaveEvent nodeEvent = null; byte cmdClass = message[7]; byte cmdType = message[8]; byte instanceCmdClass = message[9]; switch (cmdType) { case (byte)Command.MultiInstanceReport: case (byte)Command.MultiInstaceV2Encapsulated: byte[] instanceMessage; byte instanceNumber = message[9]; // if it's a COMMAND_MULTIINSTANCEV2_ENCAP we shift key and val +1 byte if (cmdType == (byte)Command.MultiInstaceV2Encapsulated) { instanceCmdClass = message[11]; instanceMessage = new byte[message.Length - 4]; System.Array.Copy(message, 4, instanceMessage, 0, message.Length - 4); } else { instanceCmdClass = message[10]; instanceMessage = new byte[message.Length - 3]; System.Array.Copy(message, 3, instanceMessage, 0, message.Length - 3); } switch (instanceCmdClass) { case (byte)CommandClass.Basic: nodeEvent = Basic.GetEvent(node, instanceMessage); break; case (byte)CommandClass.Alarm: nodeEvent = Alarm.GetEvent(node, instanceMessage); break; case (byte)CommandClass.SensorAlarm: nodeEvent = SensorAlarm.GetEvent(node, instanceMessage); break; case (byte)CommandClass.SceneActivation: nodeEvent = SceneActivation.GetEvent(node, instanceMessage); break; case (byte)CommandClass.SwitchBinary: nodeEvent = SwitchBinary.GetEvent(node, instanceMessage); if (nodeEvent != null) { node.RaiseUpdateParameterEvent(instanceNumber, EventParameter.MultiinstanceSwitchBinary, nodeEvent.Value); } break; case (byte)CommandClass.SwitchMultilevel: nodeEvent = SwitchMultilevel.GetEvent(node, instanceMessage); if (nodeEvent != null) { node.RaiseUpdateParameterEvent(instanceNumber, EventParameter.MultiinstanceSwitchMultilevel, nodeEvent.Value); } break; case (byte)CommandClass.SensorBinary: nodeEvent = SensorBinary.GetEvent(node, instanceMessage); if (nodeEvent != null) { node.RaiseUpdateParameterEvent(instanceNumber, EventParameter.MultiinstanceSensorBinary, nodeEvent.Value); } break; case (byte)CommandClass.SensorMultilevel: nodeEvent = SensorMultilevel.GetEvent(node, instanceMessage); if (nodeEvent != null) { node.RaiseUpdateParameterEvent(instanceNumber, EventParameter.MultiinstanceSensorMultilevel, nodeEvent.Value); } break; case (byte)CommandClass.Meter: nodeEvent = Meter.GetEvent(node, instanceMessage); break; } if (nodeEvent != null) { nodeEvent.Instance = (int)message[9]; } break; case (byte)Command.MultiInstanceCountReport: byte instanceCount = message[10]; switch (instanceCmdClass) { case (byte)CommandClass.SwitchBinary: nodeEvent = new ZWaveEvent(node, EventParameter.MultiinstanceSwitchBinaryCount, instanceCount, 0); break; case (byte)CommandClass.SwitchMultilevel: nodeEvent = new ZWaveEvent(node, EventParameter.MultiinstanceSwitchMultilevelCount, instanceCount, 0); break; case (byte)CommandClass.SensorBinary: nodeEvent = new ZWaveEvent(node, EventParameter.MultiinstanceSensorBinaryCount, instanceCount, 0); break; case (byte)CommandClass.SensorMultilevel: nodeEvent = new ZWaveEvent(node, EventParameter.MultiinstanceSensorMultilevelCount, instanceCount, 0); break; } break; } return(nodeEvent); }
public virtual bool HandleBasicReport(byte[] message) { bool handled = false; // //byte cmdLength = message[6]; byte cmdClass = message[7]; byte cmdType = message[8]; // if (cmdClass == (byte)CommandClass.Basic && (cmdType == (byte)Command.BasicReport || cmdType == (byte)Command.BasicSet)) { nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, ParameterType.LEVEL, (double)message[9]); handled = true; } else if (cmdClass == (byte)CommandClass.SceneActivation && cmdType == (byte)Command.SceneActivationSet) { nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, ParameterType.GENERIC, (double)message[9]); handled = true; } else if (cmdClass == (byte)CommandClass.SensorBinary && cmdType == (byte)Command.SensorBinaryReport) { nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, ParameterType.GENERIC, message[9]); handled = true; } else if (cmdClass == (byte)CommandClass.SensorMultilevel && cmdType == (byte)Command.SensorMultilevelReport) { var sensor = SensorValue.Parse(message); if (sensor.Parameter == ZWaveSensorParameter.UNKNOWN) { byte key = message[9]; nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, ParameterType.GENERIC, sensor.Value); Console.WriteLine("\nUNHANDLED SENSOR PARAMETER TYPE => " + key + "\n"); } else { nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, sensor.EventType, sensor.Value); handled = true; } } else if ((cmdClass == (byte)CommandClass.SensorAlarm && cmdType == (byte)Command.SensorAlarmReport) || (cmdClass == (byte)CommandClass.Alarm && cmdType == (byte)Command.AlarmReport)) { var alarm = AlarmValue.Parse(message); nodeHost.RaiseUpdateParameterEvent(nodeHost, 0, alarm.EventType, alarm.Value); handled = true; } return(handled); }