Exemplo n.º 1
0
 private void SendNotification()
 {
     _eventHandler.ComponentStateChangeFiring <SsrState>(new ComponentStateChange <SsrState> {
         CurrentState = CurrentState.Clone(),
         PriorState   = PriorState.Clone()
     });
 }
Exemplo n.º 2
0
        private void PidControllerStateRequestOccured(ComponentStateRequest <PidControllerRequestState> pidControllerStateRequest)
        {
            if (pidControllerStateRequest.Id == Id)
            {
                Logger.LogInformation($"Pid Request Received: {Id} {pidControllerStateRequest.RequestState.SetPoint} {pidControllerStateRequest.RequestState.IsEngaged}");

                if (!CurrentState.IsEngaged &&
                    pidControllerStateRequest.RequestState.IsEngaged.HasValue &&
                    pidControllerStateRequest.RequestState.IsEngaged.Value)
                {
                    // PID is getting engaged, disengage the others.
                    var pidsToDisengage = ComponentHelper.PidComponentIds.Where(p => p != CurrentState.Id).ToList();

                    foreach (var pidToDisengage in pidsToDisengage)
                    {
                        _eventHandler.ComponentStateRequestFiring(new ComponentStateRequest <PidControllerRequestState> {
                            RequestState = new PidControllerRequestState {
                                Id        = pidToDisengage,
                                IsEngaged = false
                            }
                        });
                    }
                }

                PriorState   = CurrentState;
                CurrentState = CurrentState.Update(pidControllerStateRequest.RequestState);

                _eventHandler.ComponentStateChangeFiring(new ComponentStateChange <PidControllerState> {
                    PriorState   = PriorState.Clone(),
                    CurrentState = CurrentState.Clone()
                });

                Process();
            }
        }
Exemplo n.º 3
0
        public override async Task Run()
        {
            while (true)
            {
                try {
                    foreach (var ssrComponentId in _ssrStateLookup.Keys.ToList())
                    {
                        if (_ssrStateLookup.ContainsKey(ssrComponentId) && _thermometerStateLookup.ContainsKey(ssrComponentId))
                        {
                            var ssrState         = _ssrStateLookup[ssrComponentId];
                            var thermometerState = _thermometerStateLookup[ssrComponentId];

                            var newTemperature = (ssrState.Percentage == 0) ?
                                                 thermometerState.Temperature - 0.05 :
                                                 thermometerState.Temperature + (ssrState.Percentage * .01);

                            if (newTemperature < 70)
                            {
                                newTemperature = 70;
                            }

                            if (newTemperature > 212)
                            {
                                newTemperature = 212;
                            }

                            //if (newTemperature != thermometerState.Temperature) {
                            //Logger.LogInformation($"Fake: OLD: {thermometerState.Temperature} - NEW: {newTemperature}");

                            _eventHandler.ComponentStateChangeFiring(new ComponentStateChange <ThermocoupleState> {
                                CurrentState = new ThermocoupleState {
                                    Id          = ssrComponentId,
                                    Temperature = newTemperature
                                }
                            });
                            //}
                        }
                    }
                } catch (Exception ex) {
                    Logger.LogError(ex.ToString());
                }

                await Task.Delay(1000);
            }
        }
Exemplo n.º 4
0
        private void ThermocoupleStateChangeOccured(ComponentStateChange <ThermocoupleState> thermocoupleStateChange)
        {
            if (thermocoupleStateChange.Id == Id)
            {
                //var

                var currentState = new ThermometerState {
                    Id          = Id,
                    Temperature = thermocoupleStateChange.CurrentState.Temperature,
                    Timestamp   = thermocoupleStateChange.CurrentState.Timestamp
                };

                // Archive old shit.
                if (CurrentState != null)
                {
                    PreviousStates.Add(currentState);
                    PriorState = CurrentState;
                }

                CurrentState = currentState;

                _eventHandler.ComponentStateChangeFiring <ThermometerState>(new ComponentStateChange <ThermometerState> {
                    CurrentState = CurrentState.Clone(),
                    PriorState   = PriorState.Clone()
                });

                //Logger.Information($"ThermometerChangeOccured[{Id}] : {thermometerChange.Value}");


                // Determin Change - Get all changes at least this old, order by newest, take first
                // TODO: Refactor to use previous state
                //var earliestTimeOfChange = DateTime.Now.AddMilliseconds(-_changeWindowInMillis);
                //var previousChange = ThermometerStates.Where(tc => tc.Timestamp < earliestTimeOfChange).OrderByDescending(tc => tc.Timestamp).FirstOrDefault();

                //if (thermometerStateChange.PriorState != null)
                //    Change = thermometerStateChange.CurrentState.Temperature - thermometerStateChange.PriorState.Temperature;

                // Determine Retention
                // TODO: Move this to a background thread
                var oldestTimeOfChange = DateTime.Now.AddMinutes(-_changeEventRetentionInMins);
                var changesToRemove    = PreviousStates.RemoveAll(tc => tc.Timestamp < oldestTimeOfChange);
            }
        }
Exemplo n.º 5
0
        private async Task ProcessTemperatures()
        {
            String message = String.Empty;

            try {
                _dataReaderObject = new DataReader(EventHandlerForDevice.Current.Device.InputStream);
                message           = await ReadAsync(_readCancellationTokenSource.Token, 200);

                //Debug.WriteLine($"Msg:\n{message}");
                foreach (var tempReading in message.Split(_stringSeparators, StringSplitOptions.RemoveEmptyEntries))
                {
                    var tempReadingValues = tempReading.Split('|');

                    if (tempReadingValues.Length == 2)
                    {
                        int.TryParse(tempReadingValues[0], out int index);
                        double.TryParse(tempReadingValues[1], out double temperature);

                        var componentId = (ComponentId)Enum.Parse(typeof(ComponentId), (index).ToString());

                        _eventHandler.ComponentStateChangeFiring(new ComponentStateChange <ThermocoupleState> {
                            CurrentState = new ThermocoupleState {
                                Id          = componentId,
                                Temperature = temperature
                            }
                        });
                    }
                }
            } catch (OperationCanceledException /*exception*/) {
                NotifyReadTaskCanceled();
            } catch (Exception exception) {
                Debug.WriteLine(exception.Message.ToString());
            } finally {
                _dataReaderObject.DetachStream();
                _dataReaderObject = null;
            }
        }
Exemplo n.º 6
0
        public FakeArduinoTemperatureControllerService(Thermometer[] thermometers,
                                                       Ssr[] ssrs,
                                                       IBeerFactoryEventHandler eventHandler,
                                                       ILoggerFactory loggerFactory)
        {
            Logger        = loggerFactory.CreateLogger <FakeArduinoTemperatureControllerService>();
            _eventHandler = eventHandler;

            _ssrStateLookup         = ssrs.ToDictionary(ssr => ssr.CurrentState.Id, ssr => ssr.CurrentState);
            _thermometerStateLookup = thermometers.ToDictionary(therm => therm.CurrentState.Id, therm => therm.CurrentState);

            _eventHandler.SubscribeToComponentStateChange <SsrState>(ssrStateChangeOccured);
            _eventHandler.SubscribeToComponentStateChange <ThermometerState>(thermometerStateChangeOccured);

            foreach (var componentId in ComponentHelper.AllComponentIds)
            {
                _eventHandler.ComponentStateChangeFiring(new ComponentStateChange <ThermocoupleState> {
                    CurrentState = new ThermocoupleState {
                        Id          = componentId,
                        Temperature = 70
                    }
                });
            }
        }
Exemplo n.º 7
0
        private void PumpStateRequestOccured(ComponentStateRequest <PumpRequestState> pumpRequestState)
        {
            bool correctPump = pumpRequestState.Id == CurrentState.Id;

            if (pumpRequestState.Id == CurrentState.Id && CurrentState.IsDifferent(pumpRequestState.RequestState))
            {
                CurrentState = CurrentState.Update(pumpRequestState.RequestState);

                if (CurrentState.IsEngaged)
                {
                    _pin?.Write(GpioPinValue.High);
                }
                else
                {
                    _pin?.Write(GpioPinValue.Low);
                }

                Logger.LogInformation($"Pump: {CurrentState.Id} - {CurrentState.IsEngaged}");

                _eventHandler.ComponentStateChangeFiring(new ComponentStateChange <PumpState> {
                    CurrentState = CurrentState.Clone()
                });
            }
        }