/// <summary> /// Creates the set request file. /// </summary> /// <param name="portId">The port id.</param> /// <param name="param">The param.</param> /// <returns></returns> public static SmlFile CreateSetRequestFile(string portId, TextParam param) { var handler = new SmlHandler(portId); var smlFile = new SmlFile(); handler.AddOpenRequest(smlFile); handler.AddSetTextParamRequest(smlFile, param); handler.AddCloseRequest(smlFile); return smlFile; }
/// <summary> /// Adds the set text param request. /// </summary> /// <param name="reqFile">The req file.</param> /// <param name="param">The param.</param> private void AddSetTextParamRequest(SmlFile reqFile, TextParam param) { var msg = new Core.Sml.Messages.Message() { TransactionId = new[] { (byte)(reqFile.Count + 1) }, GroupNo = 0x00, SetProcParameterRequest = new Core.Sml.Messages.SetProcParameterRequest() { TreePath = new List<Core.Obis.ObisId>() { new Core.Obis.ObisId((ulong)param.ObisCode) }, Tree = new Tree(new Core.Obis.ObisId((ulong)param.ObisCode), param.Data) } }; //var obisId = (ObisId)param.ObisCode; //var paramTreePath = new SmlTreePath(obisId); //var tree = new SmlTree { ParameterName = new SmlOctetstring(ObisUtil.GetBytes(obisId)) }; //if (string.IsNullOrEmpty(param.Data)) //{ // throw new ArgumentNullException("param"); //} //tree.ParameterValue = new SmlProcParValue(new SmlOctetstring(param.Data)); //var msg = SmlMessageFactory.SetProcParamReq(paramTreePath, tree); //var transactionId = new byte[] { (byte)(reqFile.Count + 1) }; //msg.TransactionId = new SmlOctetstring(transactionId); //msg.GroupNo = 0x00; reqFile.Add(msg); }
public async Task<TextParam> ReadParameter(TextParam param) { var obis = new ObisId((ulong) param.ObisCode); var result = await this.baseMeterDevice.ReadRegisterAsync(obis).ConfigureAwait(false); if (result == null) { throw new NullReferenceException(); } return new TextParam() { ObisCode = param.ObisCode, Data = result.GetAsString() }; }
public async Task WriteParameter(TextParam param, bool enableManufacturerMode = false) { throw new NotImplementedException(); }
/// <summary> /// Reads the parameter. /// </summary> /// <param name="param">The param.</param> /// <returns></returns> public async Task<TextParam> ReadParameter(TextParam param) { logger.Info("Reading text parameter."); var requestFile = SmlHandler.CreateGetRequestFile(portName, param.ObisCode); return await Retry.Do( async () => { var resVal = await SendFile(requestFile).ConfigureAwait(false); CheckAttentionResponse(param.ObisCode, resVal); var val = (byte[])resVal; if (val != null) { param.Data = Encoding.UTF8.GetString(val); logger.Info("Responding with text result: {0}.", param.Data); return param; } logger.Info("No response for reading text parameter."); throw new NullReferenceException(); }); }
/// <summary> /// Writes the parameter. /// </summary> /// <param name="param">The param.</param> /// <param name="enableManufacturerMode">if set to <c>true</c> [enable manufacturer mode].</param> public async Task WriteParameter(TextParam param, bool enableManufacturerMode = false) { logger.Info( "Writing text parameter {0} with value {1}.", (ObisId)param.ObisCode, param.Data); await Retry.DoTask( async () => { var requestFile = SmlHandler.CreateSetRequestFile(portName, param); await SendRequestFile(requestFile, enableManufacturerMode).ConfigureAwait(false); if (writeOnlyParams.Contains(param.ObisCode)) { return; } var result = await ReadParameter(new TextParam { ObisCode = param.ObisCode }); if (param.Data.Trim() != result.Data.Trim()) { throw new DataException( string.Format( "Failed to write and verify {0:X6}: written: {1}, read: {2}", param.ObisCode, param.Data, result.Data)); } }); }
/// <summary> /// Reads the tariff switching program number. /// </summary> /// <param name="clientId">The client id.</param> /// <param name="communicationPort">The communication port.</param> /// <returns>The current tariff switching program number</returns> public async Task<TextParam> ReadTariffSwitchingProgramNumber(Guid clientId, CommunicationPort communicationPort) { CheckConfiguration(communicationPort, clientId); var textParam = new TextParam() { ObisCode = (long)ObisId.EdlTariffProgramNumber, Data = string.Empty }; textParam = await ClientComListDict[communicationPort.ComPortName].ComThread.ReadParameter(textParam); return textParam; }
/// <summary> /// Writes the tariff switching program number. /// </summary> /// <param name="clientId">The client id.</param> /// <param name="communicationPort">The communication port.</param> /// <param name="switchingProgramNo">The switching program no.</param> public async Task WriteTariffSwitchingProgramNumber(Guid clientId, CommunicationPort communicationPort, string switchingProgramNo) { CheckConfiguration(communicationPort, clientId); var textParam = new TextParam() { ObisCode = (long)ObisId.EdlTariffProgramNumber, Data = switchingProgramNo }; await ClientComListDict[communicationPort.ComPortName].ComThread.WriteParameter(textParam); }
/// <summary> /// Writes the display special text. /// </summary> /// <param name="clientId">The client id.</param> /// <param name="communicationPort">The communication port.</param> /// <param name="displaySpecialText">The display special text.</param> public async Task WriteDisplaySpecialText(Guid clientId, CommunicationPort communicationPort, string displaySpecialText) { CheckConfiguration(communicationPort, clientId); var textParam = new TextParam() { ObisCode = (long)ObisId.EdlInfoText, Data = displaySpecialText }; await ClientComListDict[communicationPort.ComPortName].ComThread.WriteParameter(textParam); }
/// <summary> /// Reads the display special text. /// </summary> /// <param name="clientId">The client id.</param> /// <param name="communicationPort">The communication port.</param> /// <returns>The special text shown on the LCD's 2nd line.</returns> public async Task<TextParam> ReadDisplaySpecialText(Guid clientId, CommunicationPort communicationPort) { CheckConfiguration(communicationPort, clientId); var textParam = new TextParam() { ObisCode = (long)ObisId.EdlInfoText, Data = string.Empty }; textParam = await ClientComListDict[communicationPort.ComPortName].ComThread.ReadParameter(textParam); return textParam; }
public async Task<TextParam> ReadHardwareVersion(Guid clientId, CommunicationPort communicationPort) { var port = CheckConfiguration(communicationPort, clientId); var param = new TextParam { Data = null, ObisCode = VendorSpecificRegisterIds.HardwareVersion.AsLong() }; param = await port.ComThread.ReadParameter(param); return param; }
public async Task<TextParam> ReadFirmwareVersion(Guid clientId, CommunicationPort communicationPort) { var port = CheckConfiguration(communicationPort, clientId); var param = new TextParam() { Data = "" }; param.ObisCode = RegisterIds.FirmwareVersion.AsLong(); param = await port.ComThread.ReadParameter(param); return param; }
/// <summary> /// Writes the parameter. /// </summary> /// <param name="param">The param.</param> /// <param name="enableManufacturerMode">if set to <c>true</c> [enable manufacturer mode].</param> public async Task WriteParameter(TextParam param, bool enableManufacturerMode = false) { this.logger.Info( "Writing text parameter {0} with value {1}.", (ObisId)param.ObisCode, param.Data); await Retry.DoTask( async () => { var requestFile = SmlHandler.CreateSetRequestFile(this.endpoint, param); await this.SendRequestFile(requestFile, enableManufacturerMode); if (writeOnlyParams.Contains(param.ObisCode)) { return; } var result = await this.ReadParameter(new TextParam() { ObisCode = param.ObisCode }); if (param.Data.Trim() != result.Data.Trim()) { throw new DataException( $"Failed to write and verify {param.ObisCode:X6}: written: {param.Data}, read: {result.Data}"); } }); }