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.messages.TrainMsgBase

Base train message.

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

Bases: intelino.trainlib_async.messages.TrainMsgBase

Base event message.

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

Bases: intelino.trainlib_async.messages.TrainMsgEventBase

Triggered after the color is accepted by the train.

sensor: ClassVar[intelino.trainlib_async.enums.enums.ColorSensor]
color: intelino.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.messages.TrainMsgMacAddress

Bases: intelino.trainlib_async.messages.TrainMsgBase

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

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

Bases: intelino.trainlib_async.messages.TrainMsgBase

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

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

Bases: intelino.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: intelino.trainlib_async.messages.TrainMsgVersionDetail.Version
fw_version: intelino.trainlib_async.messages.TrainMsgVersionDetail.Version
raw_packet: TrainBlePacket
class trainlib.messages.TrainMsgStatsLifetimeOdometer

Bases: intelino.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.messages.TrainMsgMovement

Bases: intelino.trainlib_async.messages.TrainMsgBase

Movement stream message.

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

4.3. Event messages

class trainlib.messages.TrainMsgEventMovementDirectionChanged

Bases: intelino.trainlib_async.messages.TrainMsgEventBase

Triggered whenever the direction changes or the train stops.

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

Bases: intelino.trainlib_async.messages.TrainMsgEventBase

Triggered when the battery voltage is low.

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

Bases: intelino.trainlib_async.messages.TrainMsgEventBase

Triggered when the charger is connected or disconnected.

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

Bases: intelino.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[intelino.trainlib_async.messages.EventId] = 5
button_press_type: intelino.trainlib_async.enums.enums.ButtonPress
command_id: ClassVar[int] = 224
timestamp_ms: int
raw_packet: TrainBlePacket
class trainlib.messages.TrainMsgEventSnapCommandDetected

Bases: intelino.trainlib_async.messages.TrainMsgEventBase

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

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

Bases: intelino.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[intelino.trainlib_async.messages.EventId] = 6
snap_counter: int
colors: intelino.trainlib_async.messages.SnapCommand
command_id: ClassVar[int] = 224
timestamp_ms: int
raw_packet: TrainBlePacket
class trainlib.messages.TrainMsgEventFrontColorChanged

Bases: intelino.trainlib_async.messages.TrainMsgEventSensorColorChangedBase

Train’s front color sensor.

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

Bases: intelino.trainlib_async.messages.TrainMsgEventSensorColorChangedBase

Train’s back color sensor.

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

Bases: intelino.trainlib_async.messages.TrainMsgEventBase

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

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

4.4. Error messages

class trainlib.messages.TrainMsgUnknown

Bases: intelino.trainlib_async.messages.TrainMsgBase

TrainMsgUnknown(raw_packet: ‘TrainBlePacket’)

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

Bases: intelino.trainlib_async.messages.TrainMsgEventBase

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

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

Bases: intelino.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.messages.TrainMsg

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

trainlib.messages.TrainMsgEvent

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

trainlib.messages.TrainMsgEventSensorColorChanged

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