4. Messages (from the train)

The intelino train sends a lot of valuable information which is accessible through typed data classes (read only). Some of this information comes as events and some are delivered as responses to single requests or stream requests.

4.1. Base classes

Base classes are not intended for use, but it is good to know what have all messages in common.

class trainlib_async.messages.TrainMsgBase

Base train message.

command_id: ClassVar[int]
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgEventBase

Bases: trainlib_async.messages.TrainMsgBase

Base event message.

command_id: ClassVar[int] = 224
event_id: ClassVar[trainlib_async.messages.EventId]
timestamp_ms: int
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgEventSensorColorChangedBase

Bases: trainlib_async.messages.TrainMsgEventBase

Triggered after the color is accepted by the train.

sensor: ClassVar[trainlib_async.enums.enums.ColorSensor]
color: trainlib_async.enums.enums.SnapColorValue
command_id: ClassVar[int] = 224
event_id: ClassVar[EventId]
timestamp_ms: int
raw_packet: TrainBlePacket

4.2. Response messages

class trainlib_async.messages.TrainMsgMacAddress

Bases: trainlib_async.messages.TrainMsgBase

TrainMsgMacAddress(raw_packet: ‘TrainBlePacket’, mac_address: str)

command_id: ClassVar[int] = 66
mac_address: str
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgTrainUuid

Bases: trainlib_async.messages.TrainMsgBase

TrainMsgTrainUuid(raw_packet: ‘TrainBlePacket’, uuid: str)

command_id: ClassVar[int] = 67
uuid: str
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgVersionDetail

Bases: trainlib_async.messages.TrainMsgBase

Train version information.

class Version(major: int, minor: int, patch: Optional[int] = None)

Bases: object

Version number tuple.

major: int
minor: int
patch: Optional[int] = None
command_id: ClassVar[int] = 7
ble_api_version: trainlib_async.messages.TrainMsgVersionDetail.Version
fw_version: trainlib_async.messages.TrainMsgVersionDetail.Version
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgStatsLifetimeOdometer

Bases: trainlib_async.messages.TrainMsgBase

TrainMsgStatsLifetimeOdometer(raw_packet: ‘TrainBlePacket’, lifetime_odometer_meters: float)

command_id: ClassVar[int] = 62
lifetime_odometer_meters: float
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgMovement

Bases: trainlib_async.messages.TrainMsgBase

Movement stream message.

command_id: ClassVar[int] = 183
direction: trainlib_async.enums.enums.MovementDirection
speed_cmps: float
pwm: int
speed_control: bool
desired_speed_cmps: float
pause_time_ms: int
next_split_decision: trainlib_async.enums.enums.SteeringDecision
lifetime_odometer_meters: float
raw_packet: TrainBlePacket

4.3. Event messages

class trainlib_async.messages.TrainMsgEventMovementDirectionChanged

Bases: trainlib_async.messages.TrainMsgEventBase

Triggered whenever the direction changes or the train stops.

event_id: ClassVar[trainlib_async.messages.EventId] = 1
direction: trainlib_async.enums.enums.MovementDirection
command_id: ClassVar[int] = 224
timestamp_ms: int
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgEventLowBattery

Bases: trainlib_async.messages.TrainMsgEventBase

Triggered when the battery voltage is low.

event_id: ClassVar[trainlib_async.messages.EventId] = 2
command_id: ClassVar[int] = 224
timestamp_ms: int
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgEventChargingStateChanged

Bases: trainlib_async.messages.TrainMsgEventBase

Triggered when the charger is connected or disconnected.

event_id: ClassVar[trainlib_async.messages.EventId] = 4
is_charging: bool
command_id: ClassVar[int] = 224
timestamp_ms: int
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgEventButtonPressDetected

Bases: trainlib_async.messages.TrainMsgEventBase

Triggered when the train’s button is pressed. The detection does not affect the button’s functionality (start/stop driving on a short press, turn off on a long press).

event_id: ClassVar[trainlib_async.messages.EventId] = 5
button_press_type: trainlib_async.enums.enums.ButtonPress
command_id: ClassVar[int] = 224
timestamp_ms: int
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgEventSnapCommandDetected

Bases: trainlib_async.messages.TrainMsgEventBase

Triggered when a snap sequence (command) is detected, regardless of the execution status.

event_id: ClassVar[trainlib_async.messages.EventId] = 9
snap_counter: int
colors: trainlib_async.messages.SnapCommand
command_id: ClassVar[int] = 224
timestamp_ms: int
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgEventSnapCommandExecuted

Bases: trainlib_async.messages.TrainMsgEventBase

Triggered after the snap sequence (command) execution started.

If snap execution is turned off, this event will not be sent.

event_id: ClassVar[trainlib_async.messages.EventId] = 6
snap_counter: int
colors: trainlib_async.messages.SnapCommand
command_id: ClassVar[int] = 224
timestamp_ms: int
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgEventFrontColorChanged

Bases: trainlib_async.messages.TrainMsgEventSensorColorChangedBase

Train’s front color sensor.

event_id: ClassVar[trainlib_async.messages.EventId] = 7
sensor: ClassVar[trainlib_async.enums.enums.ColorSensor] = 1
command_id: ClassVar[int] = 224
color: SnapColorValue
timestamp_ms: int
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgEventBackColorChanged

Bases: trainlib_async.messages.TrainMsgEventSensorColorChangedBase

Train’s back color sensor.

event_id: ClassVar[trainlib_async.messages.EventId] = 8
sensor: ClassVar[trainlib_async.enums.enums.ColorSensor] = 2
command_id: ClassVar[int] = 224
color: SnapColorValue
timestamp_ms: int
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgEventSplitDecision

Bases: trainlib_async.messages.TrainMsgEventBase

Triggered after the split track is detected and the steering decision is made.

event_id: ClassVar[trainlib_async.messages.EventId] = 10
decision: trainlib_async.enums.enums.SteeringDecision
command_id: ClassVar[int] = 224
timestamp_ms: int
raw_packet: TrainBlePacket

4.4. Error messages

class trainlib_async.messages.TrainMsgUnknown

Bases: trainlib_async.messages.TrainMsgBase

TrainMsgUnknown(raw_packet: ‘TrainBlePacket’)

command_id: ClassVar[int] = 0
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgEventUnknown

Bases: trainlib_async.messages.TrainMsgEventBase

TrainMsgEventUnknown(raw_packet: ‘TrainBlePacket’, timestamp_ms: int)

command_id: ClassVar[int] = 0
event_id: ClassVar[trainlib_async.messages.EventId] = 0
timestamp_ms: int
raw_packet: TrainBlePacket
class trainlib_async.messages.TrainMsgMalformed

Bases: trainlib_async.messages.TrainMsgBase

TrainMsgMalformed(raw_packet: ‘TrainBlePacket’)

command_id: ClassVar[int] = 256
raw_packet: TrainBlePacket

4.5. Union classes

The library defines aliased union classes for messages. These should be used instead of the base classes e.g. when a function expects various message types as arguments.

trainlib_async.messages.TrainMsg

alias of Union[trainlib_async.messages.TrainMsgUnknown, trainlib_async.messages.TrainMsgMalformed, trainlib_async.messages.TrainMsgMacAddress, trainlib_async.messages.TrainMsgTrainUuid, trainlib_async.messages.TrainMsgVersionDetail, trainlib_async.messages.TrainMsgStatsLifetimeOdometer, trainlib_async.messages.TrainMsgMovement, trainlib_async.messages.TrainMsgEventUnknown, trainlib_async.messages.TrainMsgEventMovementDirectionChanged, trainlib_async.messages.TrainMsgEventLowBattery, trainlib_async.messages.TrainMsgEventLowBatteryCutOff, trainlib_async.messages.TrainMsgEventChargingStateChanged, trainlib_async.messages.TrainMsgEventButtonPressDetected, trainlib_async.messages.TrainMsgEventSnapCommandExecuted, trainlib_async.messages.TrainMsgEventFrontColorChanged, trainlib_async.messages.TrainMsgEventBackColorChanged, trainlib_async.messages.TrainMsgEventSnapCommandDetected, trainlib_async.messages.TrainMsgEventSplitDecision]

trainlib_async.messages.TrainMsgEvent

alias of Union[trainlib_async.messages.TrainMsgEventUnknown, trainlib_async.messages.TrainMsgEventMovementDirectionChanged, trainlib_async.messages.TrainMsgEventLowBattery, trainlib_async.messages.TrainMsgEventLowBatteryCutOff, trainlib_async.messages.TrainMsgEventChargingStateChanged, trainlib_async.messages.TrainMsgEventButtonPressDetected, trainlib_async.messages.TrainMsgEventSnapCommandExecuted, trainlib_async.messages.TrainMsgEventFrontColorChanged, trainlib_async.messages.TrainMsgEventBackColorChanged, trainlib_async.messages.TrainMsgEventSnapCommandDetected, trainlib_async.messages.TrainMsgEventSplitDecision]

trainlib_async.messages.TrainMsgEventSensorColorChanged

alias of Union[trainlib_async.messages.TrainMsgEventFrontColorChanged, trainlib_async.messages.TrainMsgEventBackColorChanged]