src.bluetooth_sig.gatt.characteristics.templates.scaled

Scaled value templates with configurable resolution and offset.

Covers ScaledTemplate (abstract), ScaledUint8/16/24/32, ScaledSint8/16/24/32, and PercentageTemplate.

Classes

Name

Description

PercentageTemplate

Template for percentage values (0-100%) using uint8.

ScaledSint16Template

Template for scaled 16-bit signed integer.

ScaledSint24Template

Template for scaled 24-bit signed integer with configurable resolution and offset.

ScaledSint32Template

Template for scaled 32-bit signed integer with configurable resolution and offset.

ScaledSint8Template

Template for scaled 8-bit signed integer.

ScaledTemplate

Base class for scaled integer templates.

ScaledUint16Template

Template for scaled 16-bit unsigned integer.

ScaledUint24Template

Template for scaled 24-bit unsigned integer with configurable resolution and offset.

ScaledUint32Template

Template for scaled 32-bit unsigned integer with configurable resolution and offset.

ScaledUint8Template

Template for scaled 8-bit unsigned integer.

Module Contents

class src.bluetooth_sig.gatt.characteristics.templates.scaled.PercentageTemplate

Bases: src.bluetooth_sig.gatt.characteristics.templates.base.CodingTemplate[int]

Template for percentage values (0-100%) using uint8.

decode_value(data: bytearray, offset: int = 0, ctx: src.bluetooth_sig.gatt.context.CharacteristicContext | None = None, *, validate: bool = True) int

Parse percentage value.

encode_value(value: int, *, validate: bool = True) bytearray

Encode percentage value to bytes.

property data_size: int

1 byte.

Type:

Size

property extractor: src.bluetooth_sig.gatt.characteristics.utils.extractors.RawExtractor

Get uint8 extractor.

property translator: src.bluetooth_sig.gatt.characteristics.utils.translators.IdentityTranslator

Return identity translator since validation is separate from translation.

class src.bluetooth_sig.gatt.characteristics.templates.scaled.ScaledSint16Template(scale_factor: float = 0.01, offset: int = 0)

Bases: ScaledTemplate

Template for scaled 16-bit signed integer.

Used for signed values that need decimal precision encoded as integers. Can be initialized with scale_factor/offset or Bluetooth SIG M, d, b parameters. Formula: value = scale_factor * (raw + offset) or value = M * 10^d * (raw + b) Example: Temperature -10.5°C stored as -1050 with scale_factor=0.01, offset=0 or M=1, d=-2, b=0

property data_size: int

2 bytes.

Type:

Size

class src.bluetooth_sig.gatt.characteristics.templates.scaled.ScaledSint24Template(scale_factor: float = 0.01, offset: int = 0)

Bases: ScaledTemplate

Template for scaled 24-bit signed integer with configurable resolution and offset.

Used for signed values encoded in 3 bytes. Example: Elevation 500.00m stored as bytes with scale_factor=0.01, offset=0

property data_size: int

3 bytes.

Type:

Size

class src.bluetooth_sig.gatt.characteristics.templates.scaled.ScaledSint32Template(scale_factor: float = 0.01, offset: int = 0)

Bases: ScaledTemplate

Template for scaled 32-bit signed integer with configurable resolution and offset.

Used for signed values encoded in 4 bytes. Example: Longitude -180.0 to 180.0 degrees stored with scale_factor=1e-7

property data_size: int

4 bytes.

Type:

Size

class src.bluetooth_sig.gatt.characteristics.templates.scaled.ScaledSint8Template(scale_factor: float = 1.0, offset: int = 0)

Bases: ScaledTemplate

Template for scaled 8-bit signed integer.

Used for signed values that need decimal precision encoded as integers. Can be initialized with scale_factor/offset or Bluetooth SIG M, d, b parameters. Formula: value = scale_factor * (raw + offset) or value = M * 10^d * (raw + b) Example: Temperature with scale_factor=0.01, offset=0 or M=1, d=-2, b=0

property data_size: int

1 byte.

Type:

Size

class src.bluetooth_sig.gatt.characteristics.templates.scaled.ScaledTemplate(scale_factor: float, offset: int)

Bases: src.bluetooth_sig.gatt.characteristics.templates.base.CodingTemplate[float]

Base class for scaled integer templates.

Handles common scaling logic: value = (raw + offset) * scale_factor Subclasses implement raw parsing/encoding and range checking.

Exposes extractor and translator for pipeline access.

decode_value(data: bytearray, offset: int = 0, ctx: src.bluetooth_sig.gatt.context.CharacteristicContext | None = None, *, validate: bool = True) float

Parse scaled integer value.

encode_value(value: float, *, validate: bool = True) bytearray

Encode scaled value to bytes.

classmethod from_letter_method(M: int, d: int, b: int) ScaledTemplate

Create instance using Bluetooth SIG M, d, b parameters.

Parameters:
  • M – Multiplier factor

  • d – Decimal exponent (10^d)

  • b – Offset to add to raw value before scaling

Returns:

ScaledTemplate instance

classmethod from_scale_offset(scale_factor: float, offset: int) ScaledTemplate

Create instance using scale factor and offset.

Parameters:
  • scale_factor – Factor to multiply raw value by

  • offset – Offset to add to raw value before scaling

Returns:

ScaledTemplate instance

property extractor: src.bluetooth_sig.gatt.characteristics.utils.extractors.RawExtractor

Get the byte extractor for pipeline access.

property offset: int

Get the offset.

property scale_factor: float

Get the scale factor.

property translator: src.bluetooth_sig.gatt.characteristics.utils.translators.LinearTranslator

Get the value translator for pipeline access.

class src.bluetooth_sig.gatt.characteristics.templates.scaled.ScaledUint16Template(scale_factor: float = 1.0, offset: int = 0)

Bases: ScaledTemplate

Template for scaled 16-bit unsigned integer.

Used for values that need decimal precision encoded as integers. Can be initialized with scale_factor/offset or Bluetooth SIG M, d, b parameters. Formula: value = scale_factor * (raw + offset) or value = M * 10^d * (raw + b) Example: Temperature 25.5°C stored as 2550 with scale_factor=0.01, offset=0 or M=1, d=-2, b=0

property data_size: int

2 bytes.

Type:

Size

class src.bluetooth_sig.gatt.characteristics.templates.scaled.ScaledUint24Template(scale_factor: float = 1.0, offset: int = 0)

Bases: ScaledTemplate

Template for scaled 24-bit unsigned integer with configurable resolution and offset.

Used for values encoded in 3 bytes as unsigned integers. Example: Illuminance 1000 lux stored as bytes with scale_factor=1.0, offset=0

property data_size: int

3 bytes.

Type:

Size

class src.bluetooth_sig.gatt.characteristics.templates.scaled.ScaledUint32Template(scale_factor: float = 0.1, offset: int = 0)

Bases: ScaledTemplate

Template for scaled 32-bit unsigned integer with configurable resolution and offset.

property data_size: int

4 bytes.

Type:

Size

class src.bluetooth_sig.gatt.characteristics.templates.scaled.ScaledUint8Template(scale_factor: float = 1.0, offset: int = 0)

Bases: ScaledTemplate

Template for scaled 8-bit unsigned integer.

Used for unsigned values that need decimal precision encoded as integers. Can be initialized with scale_factor/offset or Bluetooth SIG M, d, b parameters. Formula: value = scale_factor * (raw + offset) or value = M * 10^d * (raw + b) Example: Uncertainty with scale_factor=0.1, offset=0 or M=1, d=-1, b=0

property data_size: int

1 byte.

Type:

Size