private void UpdateCache(Telegram telegram, decimal current)
        {
            var entry = new GasFlowCacheEntry {
                Timestamp         = telegram.GasTimestamp,
                Value             = telegram.GasConsumption,
                LastGasFlowResult = current
            };

            this.m_telegrams.AddOrUpdate(telegram.SerialNumberGasMeter, entry, (serial, oldValue) => entry);
        }
        private decimal ComputePerMinute(GasFlowCacheEntry old, Telegram @new)
        {
            if (@new.GasTimestamp == old.Timestamp)
            {
                return(old.LastGasFlowResult);
            }

            var diff  = @new.GasTimestamp.Subtract(old.Timestamp);
            var usage = @new.GasConsumption - old.Value;

            if (usage < 0)
            {
                this.m_logger.Warn("New gas m3 lower than previously received. Are telegrams being received out of order?");
                return(0M);
            }

            return(usage / Convert.ToDecimal(diff.TotalMinutes));
        }