public Parameter GetClone()
        {
            var clone = new Parameter()
            {
                Name = this.Name,
                ObisCode = this.ObisCode,
                TargetValue = this.TargetValue,
                TagId = this.TagId,
                IsActive = this.IsActive,
                IsAutoIncrement = this.IsAutoIncrement,
                IsPartOfMatrixCode = this.IsPartOfMatrixCode,
                IsWriteOnly = this.IsWriteOnly,
                IsReadOnly = this.IsReadOnly,
                IsNameplateOnly = this.IsNameplateOnly,
                IsRandomTargetValue = this.IsRandomTargetValue,
                ModifiedAt = new DateTime(1900, 1, 1),
                CreatedAt = DateTime.Now
            };

            return clone;
        }
 private static void RandomizeTargetValue(Parameter clone)
 {
     var rnd = new Random();
     clone.TargetValue = string.Format("{0}", rnd.Next(1, 9999));
 }
        private static void IncrementTargetValue(Parameter clone)
        {
            if (clone.TagId == ParameterTagId.ServerId)
            {
                var bytesStr = clone.TargetValue.Split('-');
                var bytes = bytesStr.Reverse().Take(4).Select(s => Convert.ToByte(s, 16)).ToArray();
                var val = BitConverter.ToInt32(bytes, 0);
                val++;
                bytes = BitConverter.GetBytes(val).Reverse().ToArray();
                bytesStr[bytesStr.Length - 1] = string.Format("{0:X2}", bytes[3]);
                bytesStr[bytesStr.Length - 2] = string.Format("{0:X2}", bytes[2]);
                bytesStr[bytesStr.Length - 3] = string.Format("{0:X2}", bytes[1]);
                bytesStr[bytesStr.Length - 4] = string.Format("{0:X2}", bytes[0]);

                clone.TargetValue = string.Join("-", bytesStr);
            }
            else
            {
                long tmp;
                if (long.TryParse(clone.TargetValue, out tmp))
                {
                    tmp++;
                    clone.TargetValue = string.Format("{0:D4}", tmp);
                }
            }
        }
        private static void ReadSignature(string comPort, Parameter p)
        {
            CheckInit();

            var sb = new StringBuilder();
            var success = false;

            try
            {
                // EdlLastAplusSignature
                var signedRegister = Proxy.ReadEnergyRegister(guid, GetPort(comPort), 0x100011100FF);
                sb.AppendFormat("OBIS: {0:X12}\n", signedRegister.ObisValue);
                sb.AppendFormat("VALUE: {0}\n", signedRegister.DataValue);
                sb.AppendFormat("UNIT: {0}\n", signedRegister.Unit);
                sb.AppendFormat("STATUS: {0}\n", signedRegister.StatusWord);
                sb.AppendFormat("TIME: {0}\n", signedRegister.ValueTime);
                sb.AppendFormat("SIG: {0}", HexUtil.ByteArrayToString(signedRegister.ValueSignature));

                success = true;
            }
            catch (Exception e)
            {
                sb.Append(e.Message);
            }

            if (!success)
            {
                try
                {
                    // EdlLastAminusSignature = 1099546296575,
                    var signedRegister = Proxy.ReadEnergyRegister(guid, GetPort(comPort), 0x100021100FF);
                    sb.Clear();
                    sb.AppendFormat("OBIS: {0:X12}\n", signedRegister.ObisValue);
                    sb.AppendFormat("VALUE: {0}\n", signedRegister.DataValue);
                    sb.AppendFormat("UNIT: {0}\n", signedRegister.Unit);
                    sb.AppendFormat("STATUS: {0}\n", signedRegister.StatusWord);
                    sb.AppendFormat("TIME: {0}\n", signedRegister.ValueTime);
                    sb.AppendFormat("SIG: {0}", HexUtil.ByteArrayToString(signedRegister.ValueSignature));

                    success = true;
                }
                catch (Exception e)
                {
                    sb.Append(e.Message);
                }
            }

            // enable EDL21 mode again
            try
            {
                Proxy.WriteIsOperationModeEdl40(guid, GetPort(comPort), false);
            }
            catch (Exception ex)
            {
                Log.ErrorException("Re-enabling of EDL21 mode failed.", ex);
            }

            p.RealValue = (success ? "SUCCESS: " : "FAILED: ") + sb.ToString();
        }