public override async Task Refresh( )
        {
            await base.Refresh( );

            if (!Characteristics.Characteristics.TryGetValue(HeightSpeed,
                                                             out var heightAndSpeed) ||
                heightAndSpeed == null)
            {
                Logger.Error("Failed to find characteristic for Height and Speed " +
                             $"with UUID '{HeightSpeed}'");

                return;
            }

            _subscriber?.Dispose( );   // Attention: this is to hard to test

            _subscriber = heightAndSpeed.ValueChanged
                          .SubscribeOn(Scheduler)
                          .Subscribe(OnValueChanged);

            var rawValue = GetValueOrEmpty(HeightSpeed).ToArray( );

            var details = new RawValueChangedDetails(HeightSpeed,
                                                     rawValue,
                                                     DateTimeOffset.Now,
                                                     GattServiceUuid);

            _subjectHeightSpeed.OnNext(details);
        }
        private void OnValueChanged(GattCharacteristicValueChangedDetails details)
        {
            if (details == null)
            {
                Logger.Error($"{typeof ( GattCharacteristicValueChangedDetails )} is null");

                return;
            }

            Logger.Debug($"Value = {details.Value.ToHex ( )}, " +
                         $"Timestamp = {details.Timestamp}, " +
                         $"Uuid = {details.Uuid}");

            if (details.Value.Count( ) != 4)
            {
                Logger.Error($"Failed, expected 4 bytes but received {details.Value.Count ( )}");
                return;
            }

            var valueChanged = new RawValueChangedDetails(HeightSpeed,
                                                          details.Value,
                                                          details.Timestamp,
                                                          details.Uuid);

            _subjectHeightSpeed.OnNext(valueChanged);
        }