public void UpdateTelemetry(ICoolerTelemetry telemetry)
        {
            _telemetry = telemetry;

            RaisePropertyChanged(() => Diagnostic);
            RaisePropertyChanged(() => CoolingLiquidPressure);
            RaisePropertyChanged(() => FanSpeed);
            RaisePropertyChanged(() => CoolingLiquidTemperature);
            RaisePropertyChanged(() => Reserve1);
            RaisePropertyChanged(() => Reserve2);
        }
 public CoolerTelemetryViewModel()
 {
     _telemetry = null;
 }
        private void ReadCycle()
        {
            _logger.Log("Запуск циклического опроса телеметрии");
            Cancel             = false;
            _readingInProgress = true;
            _readCycleCommand.RaiseCanExecuteChanged();
            _stopReadingCommand.RaiseCanExecuteChanged();


            _backWorker.AddWork(() =>
            {
                try
                {
                    var w8er = new ManualResetEvent(false);
                    while (!Cancel)
                    {
                        var cmd = new ReadCoolerTelemetryCommand();
                        _commandSenderHost.Sender.SendCommandAsync(
                            0x01,
                            cmd,
                            TimeSpan.FromSeconds(0.2), 2,
                            (exception, bytes) =>
                        {
                            ICoolerTelemetry coolerTelemetry = null;
                            try
                            {
                                if (exception != null)
                                {
                                    throw new Exception("Произошла ошибка во время обмена", exception);
                                }
                                var result      = cmd.GetResult(bytes);
                                coolerTelemetry = result;
                            }
                            catch (Exception ex)
                            {
                                // TODO: log exception, null values
                                _logger.Log("Ошибка: " + ex.Message);
                                Console.WriteLine(ex);
                            }
                            finally
                            {
                                _userInterfaceRoot.Notifier.Notify(() =>
                                                                   CoolerTelemetryVm.UpdateTelemetry(coolerTelemetry));
                                w8er.Set();
                            }
                        });
                        w8er.WaitOne();
                        w8er.Reset();
                        Thread.Sleep(300); // TODO: interval must be setted by user
                    }
                }
                catch (Exception ex)
                {
                    _logger.Log("Ошибка фонового потока очереди отправки: " + ex.Message);
                }
                finally
                {
                    _logger.Log("Циклический опрос окончен");
                    _userInterfaceRoot.Notifier.Notify(() =>
                    {
                        _readingInProgress = false;
                        _readCycleCommand.RaiseCanExecuteChanged();
                        _stopReadingCommand.RaiseCanExecuteChanged();
                    });
                }
            });
        }