public string LastMiniDeviceSetting(DeviceSettingType type) { if (DebugSettings.ContainsKey(type.ToString())) { return(DebugSettings[type.ToString()]); } return(null); }
/// <summary> /// Last time when the device settings of the specified type were received. /// </summary> /// <returns>Timestamp in server local time.</returns> public DateTime LastMiniDeviceSettingLastReceived(DeviceSettingType type) { if (DebugSettingsLastReceived.ContainsKey(type.ToString())) { return(DebugSettingsLastReceived[type.ToString()].ToLocalTime()); } return(DateTime.MinValue); }
/// <summary> /// Parse devicesettings and returns one or a list of DeviceSettings /// Number of DeviceSettings is dependent on first DeviceSettingType (setting), SensorSettingsComposite and SensorMeasurements contains multi settings /// </summary> /// <param name="ProtocolNr">Firmware version 39: clientbyte added by client settings & client info</param> /// <param name="setting">DeviceSettingType</param> /// <param name="parser"></param> /// <returns></returns> public static IEnumerable <DeviceSettingsPayload> GetDeviceSettings(int ProtocolNr, DeviceSettingType setting, StringParser parser) { bool handled = false; if (ProtocolNr >= 41) { handled = true; switch (setting) { case DeviceSettingType.P1CounterOptions: yield return(new DeviceSettingsPayload { LastReceived = DateTime.Now.ToUniversalTime(), DeviceSetting = setting, DeviceSettingValue = parser.ParseByte() }); break; case DeviceSettingType.ClientManufacturerReport: yield return(new DeviceSettingsPayload { LastReceived = DateTime.Now.ToUniversalTime(), DeviceSetting = setting, Client = null, DeviceSettingValueStr = String.Format("Manufacturer ID {0}, Product type {1}, Product ID {2}", parser.ParseInt16(), parser.ParseInt16(), parser.ParseInt16()) }); break; case DeviceSettingType.ClientNodeId: case DeviceSettingType.ClientNumberOfDevicesInZWaveNetwork: parser.ParseByte(); break; case DeviceSettingType.ClientCounterTypesSmartPlug: var nbrCounterTypes = parser.ParseByte(); for (int i = 0; i < nbrCounterTypes; i++) { parser.ParseByte(); } break; case DeviceSettingType.ClientCompositeZWave: // 0x4D yield return(ParseCompositeZwave(ProtocolNr, parser)); break; case DeviceSettingType.ClientRawNodeInformation: case DeviceSettingType.ClientRawSupportedReport: parser.ParseByte(); parser.ParseDelimitedText('"'); break; case DeviceSettingType.ClientZWaveNetworkInfoList: // 0x60, break; case DeviceSettingType.ClientZWaveMeterReport: // 0x61, break; case DeviceSettingType.ClientZwaveBasicSetSetting: // 0x62 break; default: handled = false; break; } } if ((!handled) && (ProtocolNr >= 44)) { handled = true; switch (setting) { case DeviceSettingType.P1DSMRVersion: yield return(new DeviceSettingsPayload { LastReceived = DateTime.Now.ToUniversalTime(), DeviceSetting = setting, DeviceSettingValue = parser.ParseByte() }); break; default: handled = false; break; } } if (!handled) { switch (setting) { case DeviceSettingType.ManufacturerMeterType: yield return(new DeviceSettingsPayload { LastReceived = DateTime.Now.ToUniversalTime(), DeviceSetting = setting, DeviceSettingValue = parser.ParseInt32() }); break; case DeviceSettingType.Sensor1Low: case DeviceSettingType.Sensor1High: case DeviceSettingType.Sensor2Low: case DeviceSettingType.Sensor2High: case DeviceSettingType.SensorMinPulseLength: case DeviceSettingType.SensorMinPulseWidth: case DeviceSettingType.SensorMaxPulseWidth: case DeviceSettingType.SensorMinGap: case DeviceSettingType.SensorMaxGap: case DeviceSettingType.SensorNoiseLevel: case DeviceSettingType.SensorFilterCoefficient: case DeviceSettingType.SensorPulseLengthMin: case DeviceSettingType.SensorPulseLengthMax: case DeviceSettingType.SensorPulseWidthMin: case DeviceSettingType.SensorPulseWidthMax: case DeviceSettingType.SensorBaselineMin: case DeviceSettingType.SensorBaselineMax: case DeviceSettingType.SensorSignalMin: case DeviceSettingType.SensorSignalMax: case DeviceSettingType.SensorSignalAverage: yield return(new DeviceSettingsPayload { LastReceived = DateTime.Now.ToUniversalTime(), DeviceSetting = setting, DeviceSettingValue = parser.ParseUInt16() }); break; case DeviceSettingType.PrimaryMeterType: case DeviceSettingType.SecondaryMeterType: case DeviceSettingType.SensorChannel: yield return(new DeviceSettingsPayload { LastReceived = DateTime.Now.ToUniversalTime(), DeviceSetting = setting, DeviceSettingValue = parser.ParseByte() }); break; case DeviceSettingType.CalibrationSettingsComposite: for (byte i = 0; i < 4; i++) { yield return(new DeviceSettingsPayload { LastReceived = DateTime.Now.ToUniversalTime(), DeviceSetting = (DeviceSettingType)parser.ParseByte(), DeviceSettingValue = parser.ParseUInt16() }); } break; case DeviceSettingType.SensorSettingsComposite: for (byte i = 0; i < 7; i++) { yield return(new DeviceSettingsPayload { LastReceived = DateTime.Now.ToUniversalTime(), DeviceSetting = (DeviceSettingType)parser.ParseByte(), DeviceSettingValue = parser.ParseUInt16() }); } break; case DeviceSettingType.SensorMeasurements: for (int i = 0; i < 9; i++) { yield return(new DeviceSettingsPayload { LastReceived = DateTime.Now.ToUniversalTime(), DeviceSetting = (DeviceSettingType)parser.ParseByte(), DeviceSettingValue = parser.ParseUInt16() }); } break; case DeviceSettingType.FirmwareUrl: case DeviceSettingType.ReportUrl: case DeviceSettingType.P1ManufacturerCode: yield return(new DeviceSettingsPayload { LastReceived = DateTime.Now.ToUniversalTime(), DeviceSetting = setting, DeviceSettingValueStr = parser.ParseDelimitedText('"') }); break; case DeviceSettingType.ClientProductAndSerialNumber: case DeviceSettingType.ClientRawP1Data: yield return(new DeviceSettingsPayload { LastReceived = DateTime.Now.ToUniversalTime(), DeviceSetting = setting, Client = ProtocolNr >= 39 ? (QboxClient?)parser.ParseByte() : null, DeviceSettingValueStr = parser.ParseDelimitedText('"') }); break; case DeviceSettingType.ClientPrimaryMeterType: case DeviceSettingType.ClientSecondaryMeterType: case DeviceSettingType.ClientFirmwareVersion: yield return(new DeviceSettingsPayload { LastReceived = DateTime.Now.ToUniversalTime(), DeviceSetting = setting, Client = ProtocolNr >= 39 ? (QboxClient?)parser.ParseByte() : null, DeviceSettingValue = parser.ParseByte() }); break; default: throw new Exception(String.Format("Unknown device setting: {0}", setting)); } } }