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