Beispiel #1
0
        private void ParsePayload(Mini07ParseModel model)
        {
            _logger.LogTrace("Enter");
            if (model.PayloadIndicator.ClientStatusPresent)
            {
                ParseClientStatuses(model);
            }
            _logger.LogDebug("DeviceSettingsPresent: {deviceSettingPresent}", model.PayloadIndicator.DeviceSettingPresent);
            if (model.PayloadIndicator.DeviceSettingPresent)
            {
                ParseDeviceSettings(model);
            }
            ParseCounters(model);
            if (model.PayloadIndicator.SmartMeterIsPresent)
            {
                var smartMeters = new[]
                {
                    DeviceMeterType.Smart_Meter_EG, DeviceMeterType.Smart_Meter_E
                };
                if (smartMeters.Contains(model.MeterType))
                {
                    ParseSmartMeter(model);
                }
                else if (model.MeterType == DeviceMeterType.Soladin_600)
                {
                    ParseSoladin(model);
                }
                else
                {
                    throw new BaseParserException("Invalid metertype for message payload parsing");
                }
            }

            _logger.LogTrace("Exit");
        }
Beispiel #2
0
        protected override void DoParse()
        {
            _logger.LogTrace("Enter");

            BaseParseResult.ProtocolNr = Reader.ReadByte();
            BaseParseResult.SequenceNr = Reader.ReadByte();
            var model = new Mini07ParseModel
            {
                Status           = new QboxMiniStatus(Reader.ReadByte()),
                MeasurementTime  = Reader.ReadDateTime(),
                MeterType        = (DeviceMeterType)Reader.ReadByte(),
                PayloadIndicator = new PayloaderIndicator(Reader.ReadByte())
            };

            if (!Enum.IsDefined(typeof(DeviceMeterType), model.MeterType))
            {
                throw new BaseParserException(String.Format("Unexpected metertype: {0}", model.MeterType));
            }
            if ((model.MeasurementTime - DateTime.Now).TotalHours > 3.0)
            {
                throw new BaseParserException(String.Format("Unreliable time {0}", model.MeasurementTime));
            }

            ParsePayload(model);

            var miniParseResult = BaseParseResult as MiniParseResult;

            if (miniParseResult != null)
            {
                miniParseResult.Model = model;
            }

            _logger.LogTrace("Exit");
        }
Beispiel #3
0
 protected virtual void AddCounterPayload(Mini07ParseModel model, CounterGroup group)
 {
     model.Payloads.Add(new CounterWithSourcePayload
     {
         InternalNr   = Parser.ParseByte(),
         Value        = Parser.ParseUInt32(),
         PrimaryMeter = group.PrimaryMeterCounters,
         Source       = group.CounterSource
     });
 }
Beispiel #4
0
        protected override void AddCounterPayload(Mini07ParseModel model, CounterGroup group)
        {
            byte number = Reader.ReadByte();

            model.Payloads.Add(new R21CounterPayload
            {
                InternalNr = number & 0x7F,
                // Bit 7 (0x80) indicates if the counter value is valid (0) / invalid (1)
                IsValid      = (number & 0x80) == 0x00,
                Value        = Reader.ReadUInt32(),
                PrimaryMeter = group.PrimaryMeterCounters,
                Source       = group.CounterSource
            });
        }
Beispiel #5
0
 protected virtual void ParseCounters(Mini07ParseModel model)
 {
     _logger.LogDebug("Nr of counters: {nrOfCounters}", model.PayloadIndicator.NrOfCounters);
     for (var i = 0; i < model.PayloadIndicator.NrOfCounters; i++)
     {
         try
         {
             model.Payloads.Add(new CounterPayload
             {
                 InternalNr = Reader.ReadByte(),
                 Value      = Reader.ReadUInt32()
             });
         }
         catch (Exception ex)
         {
             throw new Exception(String.Format("Parsing counter payload (part {0} of {1})", i + 1, model.PayloadIndicator.NrOfCounters), ex);
         }
     }
 }
Beispiel #6
0
        protected override void ParseCounters(Mini07ParseModel model)
        {
            Logger.LogDebug("Nr of countergroups: {nrOfCounters}", model.PayloadIndicator.NrOfCounters);
            int i = 0;

            // Total number of counters
            while (i < model.PayloadIndicator.NrOfCounters)
            {
                try
                {
                    // Grouped per CounterGroup
                    var group = new CounterGroup(Parser.ParseByte());
                    for (var c = 0; c < group.NbrOfCounters; c++)
                    {
                        AddCounterPayload(model, group);
                        i++;
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(String.Format("Parsing counter payload (payload {0} of {1})", i + 1, model.PayloadIndicator.NrOfCounters), ex);
                }
            }
        }