public async Task<UnsignedParam> ReadParameter(UnsignedParam param)
        {
            if (param.ObisCode == VendorSpecificRegisterIds.MeasurementMode.AsLong())
            {
                var pp = new ProductionParameters(this.baseMeterDevice);
                MeasurmentMode mm = await pp.GetMeasurementMode().ConfigureAwait(false);
                ulong mmNumber = 0;
                switch (mm)
                {
                    case MeasurmentMode.MM1_ImportReverseLocking:
                        mmNumber = 1;
                        break;
                    case MeasurmentMode.MM2_ImportExport:
                        mmNumber = 2;
                        break;
                    case MeasurmentMode.MM3_ExportLocking:
                        mmNumber = 3;
                        break;
                    case MeasurmentMode.MM4_Export:
                        mmNumber = 4;
                        break;
                    default:
                        throw new ArgumentOutOfRangeException();
                }

                return new UnsignedParam()
                {
                    ObisCode = param.ObisCode,
                    Data = mmNumber
                };
            }

            var obis = new ObisId((ulong)param.ObisCode);
            var result = await this.baseMeterDevice.ReadRegisterAsync(obis).ConfigureAwait(false);
            if (result == null)
            {
                throw new NullReferenceException();
            }

            return new UnsignedParam()
            {
                ObisCode = param.ObisCode, Data = result.GetAsULong()
            };
        }