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() }; }