Device Configuration

Utilities

pyflysight.config_utils.FlysightV1Config dataclass

FlysightV1Config(
    gps_settings: cp.GPSSettings = cp.GPSSettings(),
    tone_settings: cp.ToneSettings = cp.ToneSettings(),
    threshold_settings: cp.ThresholdSettings = cp.ThresholdSettings(),
    rate_settings: cp.RateSettings = cp.RateSettings(),
    speech_settings: cp.SpeechSettings = cp.SpeechSettings(),
    misc_settings: cp.MiscellaneousSettings = cp.MiscellaneousSettings(),
    init_settings: cp.InitializationSettings = cp.InitializationSettings(),
    alarm_settings: cp.AlarmSettings = cp.AlarmSettings(),
    alarm_windows: list[cp.AlarmWindowSettings] = cp.AlarmWindowSettings.factory(),
    alt_settings: cp.AltitudeSettings = cp.AltitudeSettings(),
    silence_windows: list[cp.SilenceWindowSettings] = cp.SilenceWindowSettings.factory(),
)

Bases: FlysightConfig

Helper representation for the FlySight Hardware Version 1 configuration parameters.

Valid parameters are enumerated & collected, along with their defaults, by the members of pyflysight.config_params. A best attempt is made to synchronize the expected configuration parameters with what is available to the device firmware. Firmware changes may cause these to go out of sync.

See
Warning

The FlySight support wiki and firmware source may not be synchronized, in these cases an attempt is made to match the behavior described by the firmware source code.

Info

While most configuration parameters are set in the device's CONFIG.TXT, located at the root of the device, there are a few configuration variables set by FLYSIGHT.TXT that are not enumerated here. These are mostly hardware-specific configuration values (e.g. charging amperage) and are not related to regular use of the device.

alarm_settings class-attribute instance-attribute

alarm_settings: AlarmSettings = field(default_factory=AlarmSettings)

alarm_windows class-attribute instance-attribute

alarm_windows: list[AlarmWindowSettings] = field(default_factory=factory)

alt_settings class-attribute instance-attribute

alt_settings: AltitudeSettings = field(default_factory=AltitudeSettings)

gps_settings class-attribute instance-attribute

gps_settings: GPSSettings = field(default_factory=GPSSettings)

init_settings class-attribute instance-attribute

init_settings: InitializationSettings = field(default_factory=InitializationSettings)

misc_settings class-attribute instance-attribute

misc_settings: MiscellaneousSettings = field(default_factory=MiscellaneousSettings)

rate_settings class-attribute instance-attribute

rate_settings: RateSettings = field(default_factory=RateSettings)

silence_windows class-attribute instance-attribute

silence_windows: list[SilenceWindowSettings] = field(default_factory=factory)

speech_settings class-attribute instance-attribute

speech_settings: SpeechSettings = field(default_factory=SpeechSettings)

threshold_settings class-attribute instance-attribute

threshold_settings: ThresholdSettings = field(default_factory=ThresholdSettings)

tone_settings class-attribute instance-attribute

tone_settings: ToneSettings = field(default_factory=ToneSettings)

from_json classmethod

from_json(filepath: Path) -> FlysightV1Config

Create a new instance from a previously serialized configuration.

Warning

Configuration files generated for a V2 device will raise a TypeError due to the extra configuration parameters present.

pyflysight.config_utils.FlysightV2Config dataclass

FlysightV2Config(
    gps_settings: cp.GPSSettings = cp.GPSSettings(),
    imu_settings: cp.IMUSettings = cp.IMUSettings(),
    tone_settings: cp.ToneSettings = cp.ToneSettings(),
    threshold_settings: cp.ThresholdSettings = cp.ThresholdSettings(),
    rate_settings: cp.RateSettings = cp.RateSettings(),
    speech_settings: cp.SpeechSettings = cp.SpeechSettings(),
    misc_settings: cp.MiscellaneousSettings = cp.MiscellaneousSettings(),
    init_settings: cp.InitializationSettings = cp.InitializationSettings(),
    alarm_settings: cp.AlarmSettings = cp.AlarmSettings(),
    alarm_windows: list[cp.AlarmWindowSettings] = cp.AlarmWindowSettings.factory(),
    alt_settings: cp.AltitudeSettings = cp.AltitudeSettings(),
    silence_windows: list[cp.SilenceWindowSettings] = cp.SilenceWindowSettings.factory(),
)

Bases: FlysightConfig

Helper representation for the FlySight Hardware Version 2 configuration parameters.

Valid parameters are enumerated & collected, along with their defaults, by the members of pyflysight.config_params. A best attempt is made to synchronize the expected configuration parameters with what is available to the device firmware. Firmware changes may cause these to go out of sync.

See
Warning

The FlySight support wiki and firmware source may not be synchronized, in these cases an attempt is made to match the behavior described by the firmware source code.

Info

While most configuration parameters are set in the device's CONFIG.TXT, located at the root of the device, there are a few configuration variables set by FLYSIGHT.TXT that are not enumerated here. These are mostly hardware-specific configuration values (e.g. charging amperage) and are not related to regular use of the device.

alarm_settings class-attribute instance-attribute

alarm_settings: AlarmSettings = field(default_factory=AlarmSettings)

alarm_windows class-attribute instance-attribute

alarm_windows: list[AlarmWindowSettings] = field(default_factory=factory)

alt_settings class-attribute instance-attribute

alt_settings: AltitudeSettings = field(default_factory=AltitudeSettings)

gps_settings class-attribute instance-attribute

gps_settings: GPSSettings = field(default_factory=GPSSettings)

imu_settings class-attribute instance-attribute

imu_settings: IMUSettings = field(default_factory=IMUSettings)

init_settings class-attribute instance-attribute

init_settings: InitializationSettings = field(default_factory=InitializationSettings)

misc_settings class-attribute instance-attribute

misc_settings: MiscellaneousSettings = field(default_factory=MiscellaneousSettings)

rate_settings class-attribute instance-attribute

rate_settings: RateSettings = field(default_factory=RateSettings)

silence_windows class-attribute instance-attribute

silence_windows: list[SilenceWindowSettings] = field(default_factory=factory)

speech_settings class-attribute instance-attribute

speech_settings: SpeechSettings = field(default_factory=SpeechSettings)

threshold_settings class-attribute instance-attribute

threshold_settings: ThresholdSettings = field(default_factory=ThresholdSettings)

tone_settings class-attribute instance-attribute

tone_settings: ToneSettings = field(default_factory=ToneSettings)

from_json classmethod

from_json(filepath: Path) -> FlysightV2Config

Create a new instance from a previously serialized configuration.

Info

Configuration files serialized from a V1 device configuration will return a valid instance, where any V2-specific parameters (e.g. IMU settings) will be set to their default values.

Configuration Groupings

pyflysight.config_params.GPSSettings dataclass

GPSSettings(
    _header: str = "; GPS settings",
    _header_text: str | None = None,
    Model: GPSModel = GPSModel.AIRBORNE_LT_1G,
    Rate: int = 200,
)

Bases: FlysightSetting

Model class-attribute instance-attribute

Model: GPSModel = AIRBORNE_LT_1G

Rate class-attribute instance-attribute

Rate: int = 200

pyflysight.config_params.IMUSettings dataclass

IMUSettings(
    _header: str = "; IMU settings",
    _header_text: str | None = IMU_HEADER,
    Baro_ODR: BaroODR = BaroODR.HZ_10,
    Hum_ODR: HumODR = HumODR.HZ_1,
    Mag_ODR: MagODR = MagODR.HZ_10,
    Accel_ODR: AccelODR = AccelODR.HZ_12_5,
    Accel_FS: AccelFS = AccelFS.GEE_16,
    Gyro_ODR: GyroODR = GyroODR.HZ_12_5,
    Gyro_FS: GyroFS = GyroFS.DEG_S_2000,
)

Bases: FlysightSetting

Accel_FS class-attribute instance-attribute

Accel_FS: AccelFS = GEE_16

Accel_ODR class-attribute instance-attribute

Accel_ODR: AccelODR = HZ_12_5

Baro_ODR class-attribute instance-attribute

Baro_ODR: BaroODR = HZ_10

Gyro_FS class-attribute instance-attribute

Gyro_FS: GyroFS = DEG_S_2000

Gyro_ODR class-attribute instance-attribute

Gyro_ODR: GyroODR = HZ_12_5

Hum_ODR class-attribute instance-attribute

Hum_ODR: HumODR = HZ_1

Mag_ODR class-attribute instance-attribute

Mag_ODR: MagODR = HZ_10

pyflysight.config_params.ToneSettings dataclass

ToneSettings(
    _header: str = "; Tone settings",
    _header_text: str | None = None,
    Mode: ToneMeasurementMode = ToneMeasurementMode.GLIDE_RATIO,
    Min: int = 0,
    Max: int = 300,
    Limits: ToneLimits = ToneLimits.MIN_MAX_TONE,
    Volume: ToneVolume = ToneVolume.MORE_LOUDER,
)

Bases: FlysightSetting

Limits class-attribute instance-attribute

Limits: ToneLimits = MIN_MAX_TONE

Max class-attribute instance-attribute

Max: int = 300

Min class-attribute instance-attribute

Min: int = 0

Mode class-attribute instance-attribute

Mode: ToneMeasurementMode = GLIDE_RATIO

Volume class-attribute instance-attribute

Volume: ToneVolume = MORE_LOUDER

pyflysight.config_params.ThresholdSettings dataclass

ThresholdSettings(
    _header: str = "; Thresholds",
    _header_text: str | None = None,
    V_Thresh: int = 1000,
    H_Thresh: int = 0,
)

Bases: FlysightSetting

H_Thresh class-attribute instance-attribute

H_Thresh: int = 0

V_Thresh class-attribute instance-attribute

V_Thresh: int = 1000

pyflysight.config_params.RateSettings dataclass

RateSettings(
    _header: str = "; Rate settings",
    _header_text: str | None = None,
    Mode_2: Mode2 = Mode2.CHANGE_VALUE_1,
    Min_Val_2: int = 300,
    Max_Val_2: int = 1500,
    Min_Rate: int = 100,
    Max_Rate: int = 500,
    Flatline: FlatLine = FlatLine.NO,
)

Bases: FlysightSetting

Flatline class-attribute instance-attribute

Flatline: FlatLine = NO

Max_Rate class-attribute instance-attribute

Max_Rate: int = 500

Max_Val_2 class-attribute instance-attribute

Max_Val_2: int = 1500

Min_Rate class-attribute instance-attribute

Min_Rate: int = 100

Min_Val_2 class-attribute instance-attribute

Min_Val_2: int = 300

Mode_2 class-attribute instance-attribute

Mode_2: Mode2 = CHANGE_VALUE_1

pyflysight.config_params.SpeechSettings dataclass

SpeechSettings(
    _header: str = "; Speech settings",
    _header_text: str | None = None,
    Sp_Rate: int = 0,
    Sp_Volume: SpeechVolume = SpeechVolume.MORE_LOUDER,
    Sp_Mode: SpeechMode = SpeechMode.GLIDE_RATIO,
    Sp_Units: SpeechUnits = SpeechUnits.MPH_F,
    Sp_Dec: int = 1,
)

Bases: FlysightSetting

Sp_Dec class-attribute instance-attribute

Sp_Dec: int = 1

Sp_Mode class-attribute instance-attribute

Sp_Mode: SpeechMode = GLIDE_RATIO

Sp_Rate class-attribute instance-attribute

Sp_Rate: int = 0

Sp_Units class-attribute instance-attribute

Sp_Units: SpeechUnits = MPH_F

Sp_Volume class-attribute instance-attribute

Sp_Volume: SpeechVolume = MORE_LOUDER

pyflysight.config_params.MiscellaneousSettings dataclass

MiscellaneousSettings(
    _header: str = "; Miscellaneous",
    _header_text: str | None = None,
    Use_SAS: UseSAS = UseSAS.YES,
    TZ_Offset: int = 0,
)

Bases: FlysightSetting

TZ_Offset class-attribute instance-attribute

TZ_Offset: int = 0

Use_SAS class-attribute instance-attribute

Use_SAS: UseSAS = YES

pyflysight.config_params.InitializationSettings dataclass

InitializationSettings(
    _header: str = "; Initialization",
    _header_text: str | None = INITIALIZATION_HEADER,
    Init_Mode: InitMode = InitMode.DO_NOTHING,
    Init_File: int = 0,
)

Bases: FlysightSetting

Init_File class-attribute instance-attribute

Init_File: int = 0

Init_Mode class-attribute instance-attribute

Init_Mode: InitMode = DO_NOTHING

pyflysight.config_params.AlarmSettings dataclass

AlarmSettings(
    _header: str = "; Alarm settings",
    _header_text: str | None = ALARM_HEADER,
    Win_Above: int = 0,
    Win_Below: int = 0,
    DZ_Elev: int = 0,
)

Bases: FlysightSetting

DZ_Elev class-attribute instance-attribute

DZ_Elev: int = 0

Win_Above class-attribute instance-attribute

Win_Above: int = 0

Win_Below class-attribute instance-attribute

Win_Below: int = 0

pyflysight.config_params.AlarmWindowSettings dataclass

AlarmWindowSettings(
    _header: str = "; Alarm windows",
    _header_text: str | None = None,
    Alarm_Elev: int = 0,
    Alarm_Type: AlarmType = AlarmType.NO_ALARM,
    Alarm_File: int = 0,
)

Bases: FlysightSetting

Alarm_Elev class-attribute instance-attribute

Alarm_Elev: int = 0

Alarm_File class-attribute instance-attribute

Alarm_File: int = 0

Alarm_Type class-attribute instance-attribute

Alarm_Type: AlarmType = NO_ALARM

factory classmethod

factory() -> list[AlarmWindowSettings]

pyflysight.config_params.AltitudeSettings dataclass

AltitudeSettings(
    _header: str = "; Altitude mode settings",
    _header_text: str | None = ALTITUDE_HEADER,
    Alt_Units: AltUnits = AltUnits.FEET,
    Alt_Step: int = 0,
)

Bases: FlysightSetting

Alt_Step class-attribute instance-attribute

Alt_Step: int = 0

Alt_Units class-attribute instance-attribute

Alt_Units: AltUnits = FEET

pyflysight.config_params.SilenceWindowSettings dataclass

SilenceWindowSettings(
    _header: str = "; Silence windows",
    _header_text: str | None = SILENCE_WINDOW_HEADER,
    Win_Top: int = 0,
    Win_Bottom: int = 0,
)

Bases: FlysightSetting

Win_Bottom class-attribute instance-attribute

Win_Bottom: int = 0

Win_Top class-attribute instance-attribute

Win_Top: int = 0

factory classmethod

factory() -> list[SilenceWindowSettings]

Parameter Enumerations

GPS Parameters

pyflysight.config_params.GPSModel

Bases: IntEnum

AIRBORNE_LT_1G class-attribute instance-attribute
AIRBORNE_LT_1G = 6
AIRBORNE_LT_2G class-attribute instance-attribute
AIRBORNE_LT_2G = 7
AIRBORNE_LT_4G class-attribute instance-attribute
AIRBORNE_LT_4G = 8
AUTOMOTIVE class-attribute instance-attribute
AUTOMOTIVE = 4
PEDESTRIAN class-attribute instance-attribute
PEDESTRIAN = 3
PORTABLE class-attribute instance-attribute
PORTABLE = 0
SEA class-attribute instance-attribute
SEA = 5
STATIONARY class-attribute instance-attribute
STATIONARY = 2

IMU Parameters

Warning

These parameters are only valid for FlySight V2 hardware

pyflysight.config_params.BaroODR

Bases: IntEnum

DISABLE class-attribute instance-attribute
DISABLE = 0
HZ_1 class-attribute instance-attribute
HZ_1 = 1
HZ_10 class-attribute instance-attribute
HZ_10 = 2
HZ_100 class-attribute instance-attribute
HZ_100 = 6
HZ_200 class-attribute instance-attribute
HZ_200 = 7
HZ_25 class-attribute instance-attribute
HZ_25 = 3
HZ_50 class-attribute instance-attribute
HZ_50 = 4
HZ_75 class-attribute instance-attribute
HZ_75 = 5

pyflysight.config_params.HumODR

Bases: IntEnum

DISABLE class-attribute instance-attribute
DISABLE = 0
HZ_1 class-attribute instance-attribute
HZ_1 = 1
HZ_12_5 class-attribute instance-attribute
HZ_12_5 = 3
HZ_7 class-attribute instance-attribute
HZ_7 = 2

pyflysight.config_params.MagODR

Bases: IntEnum

HZ_10 class-attribute instance-attribute
HZ_10 = 0
HZ_100 class-attribute instance-attribute
HZ_100 = 3
HZ_20 class-attribute instance-attribute
HZ_20 = 1
HZ_50 class-attribute instance-attribute
HZ_50 = 2

pyflysight.config_params.AccelODR

Bases: IntEnum

DISABLE class-attribute instance-attribute
DISABLE = 0
HZ_104 class-attribute instance-attribute
HZ_104 = 4
HZ_12_5 class-attribute instance-attribute
HZ_12_5 = 1
HZ_1666 class-attribute instance-attribute
HZ_1666 = 8
HZ_1_6 class-attribute instance-attribute
HZ_1_6 = 11
HZ_208 class-attribute instance-attribute
HZ_208 = 5
HZ_26 class-attribute instance-attribute
HZ_26 = 2
HZ_3333 class-attribute instance-attribute
HZ_3333 = 9
HZ_416 class-attribute instance-attribute
HZ_416 = 6
HZ_52 class-attribute instance-attribute
HZ_52 = 3
HZ_6666 class-attribute instance-attribute
HZ_6666 = 10
HZ_833 class-attribute instance-attribute
HZ_833 = 7

pyflysight.config_params.AccelFS

Bases: IntEnum

GEE_16 class-attribute instance-attribute
GEE_16 = 1
GEE_2 class-attribute instance-attribute
GEE_2 = 0
GEE_4 class-attribute instance-attribute
GEE_4 = 2
GEE_8 class-attribute instance-attribute
GEE_8 = 3

pyflysight.config_params.GyroODR

Bases: IntEnum

DISABLE class-attribute instance-attribute
DISABLE = 0
HZ_104 class-attribute instance-attribute
HZ_104 = 4
HZ_12_5 class-attribute instance-attribute
HZ_12_5 = 1
HZ_1666 class-attribute instance-attribute
HZ_1666 = 8
HZ_208 class-attribute instance-attribute
HZ_208 = 5
HZ_26 class-attribute instance-attribute
HZ_26 = 2
HZ_3333 class-attribute instance-attribute
HZ_3333 = 9
HZ_416 class-attribute instance-attribute
HZ_416 = 6
HZ_52 class-attribute instance-attribute
HZ_52 = 3
HZ_6666 class-attribute instance-attribute
HZ_6666 = 10
HZ_833 class-attribute instance-attribute
HZ_833 = 7

pyflysight.config_params.GyroFS

Bases: IntEnum

DEG_S_1000 class-attribute instance-attribute
DEG_S_1000 = 2
DEG_S_2000 class-attribute instance-attribute
DEG_S_2000 = 3
DEG_S_250 class-attribute instance-attribute
DEG_S_250 = 0
DEG_S_500 class-attribute instance-attribute
DEG_S_500 = 1

Tone Parameters

pyflysight.config_params.ToneMeasurementMode

Bases: IntEnum

DIVE_ANGLE class-attribute instance-attribute
DIVE_ANGLE = 11
GLIDE_RATIO class-attribute instance-attribute
GLIDE_RATIO = 2
HORIZONTAL_SPEED class-attribute instance-attribute
HORIZONTAL_SPEED = 0
INVERSE_GLIDE_RATIO class-attribute instance-attribute
INVERSE_GLIDE_RATIO = 3
TOTAL_SPEED class-attribute instance-attribute
TOTAL_SPEED = 4
VERTICAL_SPEED class-attribute instance-attribute
VERTICAL_SPEED = 1

pyflysight.config_params.ToneLimits

Bases: IntEnum

CHIRP_DOWN_UP class-attribute instance-attribute
CHIRP_DOWN_UP = 3
CHIRP_UP_DOWN class-attribute instance-attribute
CHIRP_UP_DOWN = 2
MIN_MAX_TONE class-attribute instance-attribute
MIN_MAX_TONE = 1
NO_TONE class-attribute instance-attribute
NO_TONE = 0

pyflysight.config_params.ToneVolume

Bases: IntEnum

EVEN_MORE_LOUDER class-attribute instance-attribute
EVEN_MORE_LOUDER = 7
EVEN_MORE_QUIETER class-attribute instance-attribute
EVEN_MORE_QUIETER = 1
LOUDER class-attribute instance-attribute
LOUDER = 5
LOUDEST class-attribute instance-attribute
LOUDEST = 8
MIDDLE class-attribute instance-attribute
MIDDLE = 4
MORE_LOUDER class-attribute instance-attribute
MORE_LOUDER = 6
MORE_QUIETER class-attribute instance-attribute
MORE_QUIETER = 2
QUIETER class-attribute instance-attribute
QUIETER = 3
QUIETEST class-attribute instance-attribute
QUIETEST = 0

Rate Parameters

pyflysight.config_params.Mode2

Bases: IntEnum

CHANGE_VALUE_1 class-attribute instance-attribute
CHANGE_VALUE_1 = 9
DIVE_ANGLE class-attribute instance-attribute
DIVE_ANGLE = 11
GLIDE_RATIO class-attribute instance-attribute
GLIDE_RATIO = 2
HORIZONTAL_SPEED class-attribute instance-attribute
HORIZONTAL_SPEED = 0
INVERSE_GLIDE_RATIO class-attribute instance-attribute
INVERSE_GLIDE_RATIO = 3
MAG_VALUE_1 class-attribute instance-attribute
MAG_VALUE_1 = 8
TOTAL_SPEED class-attribute instance-attribute
TOTAL_SPEED = 4
VERTICAL_SPEED class-attribute instance-attribute
VERTICAL_SPEED = 1

pyflysight.config_params.FlatLine

Bases: IntEnum

NO class-attribute instance-attribute
NO = 0
YES class-attribute instance-attribute
YES = 1

Speech Parameters

pyflysight.config_params.SpeechVolume

Bases: IntEnum

EVEN_MORE_LOUDER class-attribute instance-attribute
EVEN_MORE_LOUDER = 7
EVEN_MORE_QUIETER class-attribute instance-attribute
EVEN_MORE_QUIETER = 1
LOUDER class-attribute instance-attribute
LOUDER = 5
LOUDEST class-attribute instance-attribute
LOUDEST = 8
MIDDLE class-attribute instance-attribute
MIDDLE = 4
MORE_LOUDER class-attribute instance-attribute
MORE_LOUDER = 6
MORE_QUIETER class-attribute instance-attribute
MORE_QUIETER = 2
QUIETER class-attribute instance-attribute
QUIETER = 3
QUIETEST class-attribute instance-attribute
QUIETEST = 0

pyflysight.config_params.SpeechMode

Bases: IntEnum

ALTITUDE_ABOVE_DZ class-attribute instance-attribute
ALTITUDE_ABOVE_DZ = 5
DIVE_ANGLE class-attribute instance-attribute
DIVE_ANGLE = 11
GLIDE_RATIO class-attribute instance-attribute
GLIDE_RATIO = 2
HORIZONTAL_SPEED class-attribute instance-attribute
HORIZONTAL_SPEED = 0
INVERSE_GLIDE_RATIO class-attribute instance-attribute
INVERSE_GLIDE_RATIO = 3
TOTAL_SPEED class-attribute instance-attribute
TOTAL_SPEED = 4
VERTICAL_SPEED class-attribute instance-attribute
VERTICAL_SPEED = 1

pyflysight.config_params.SpeechUnits

Bases: IntEnum

KMH_M class-attribute instance-attribute
KMH_M = 0
MPH_F class-attribute instance-attribute
MPH_F = 1

Miscellaneous Parameters

pyflysight.config_params.UseSAS

Bases: IntEnum

NO class-attribute instance-attribute
NO = 0
YES class-attribute instance-attribute
YES = 1

Initialization Parameters

pyflysight.config_params.InitMode

Bases: IntEnum

DO_NOTHING class-attribute instance-attribute
DO_NOTHING = 0
PLAY_FILE class-attribute instance-attribute
PLAY_FILE = 2
TEST_SPEECH class-attribute instance-attribute
TEST_SPEECH = 1

Alarm Parameters

pyflysight.config_params.AlarmType

Bases: IntEnum

BEEP class-attribute instance-attribute
BEEP = 1
CHIRP_DOWN class-attribute instance-attribute
CHIRP_DOWN = 3
CHIRP_UP class-attribute instance-attribute
CHIRP_UP = 2
NO_ALARM class-attribute instance-attribute
NO_ALARM = 0
PLAY_FILE class-attribute instance-attribute
PLAY_FILE = 4

pyflysight.config_params.AltUnits

Bases: IntEnum

FEET class-attribute instance-attribute
FEET = 1
METERS class-attribute instance-attribute
METERS = 0