dotbot.models module#

Pydantic models used by the controller and server application.

class dotbot.models.DotBotAddressModel(*, address)[source]#

Bases: BaseModel

Simple model to hold a DotBot address.

Parameters:

address (str) –

address: str#
model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'address': FieldInfo(annotation=str, required=True)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

class dotbot.models.DotBotCalibrationIndexModel(*, index)[source]#

Bases: BaseModel

Model that holds the controller LH2 calibration index.

Parameters:

index (int) –

index: int#
model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'index': FieldInfo(annotation=int, required=True)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

class dotbot.models.DotBotCalibrationStateModel(*, state)[source]#

Bases: BaseModel

Model that holds the controller LH2 calibration state.

Parameters:

state (str) –

model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'state': FieldInfo(annotation=str, required=True)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

state: str#
class dotbot.models.DotBotControlModeModel(*, mode)[source]#

Bases: BaseModel

Mode of a DotBot.

Parameters:

mode (ControlModeType) –

mode: ControlModeType#
model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'mode': FieldInfo(annotation=ControlModeType, required=True)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

class dotbot.models.DotBotGPSPosition(*, latitude, longitude)[source]#

Bases: BaseModel

GPS position of a DotBot, usually running a SailBot application.

Parameters:
  • latitude (float) –

  • longitude (float) –

latitude: float#
longitude: float#
model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'latitude': FieldInfo(annotation=float, required=True), 'longitude': FieldInfo(annotation=float, required=True)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

class dotbot.models.DotBotLH2Position(*, x, y, z)[source]#

Bases: BaseModel

Position of a DotBot.

Parameters:
  • x (float) –

  • y (float) –

  • z (float) –

model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'x': FieldInfo(annotation=float, required=True), 'y': FieldInfo(annotation=float, required=True), 'z': FieldInfo(annotation=float, required=True)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

x: float#
y: float#
z: float#
class dotbot.models.DotBotModel(*, address, application=ApplicationType.DotBot, swarm='0000', status=DotBotStatus.ALIVE, mode=ControlModeType.MANUAL, last_seen, direction=None, wind_angle=None, rudder_angle=None, sail_angle=None, move_raw=None, rgb_led=None, lh2_position=None, gps_position=None, waypoints=[], waypoints_threshold=40, position_history=[])[source]#

Bases: BaseModel

Model class that defines a DotBot.

Parameters:
address: str#
application: ApplicationType#
direction: int | None#
gps_position: DotBotGPSPosition | None#
last_seen: float#
lh2_position: DotBotLH2Position | None#
mode: ControlModeType#
model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'address': FieldInfo(annotation=str, required=True), 'application': FieldInfo(annotation=ApplicationType, required=False, default=<ApplicationType.DotBot: 0>), 'direction': FieldInfo(annotation=Union[int, NoneType], required=False, default=None), 'gps_position': FieldInfo(annotation=Union[DotBotGPSPosition, NoneType], required=False, default=None), 'last_seen': FieldInfo(annotation=float, required=True), 'lh2_position': FieldInfo(annotation=Union[DotBotLH2Position, NoneType], required=False, default=None), 'mode': FieldInfo(annotation=ControlModeType, required=False, default=<ControlModeType.MANUAL: 0>), 'move_raw': FieldInfo(annotation=Union[DotBotMoveRawCommandModel, NoneType], required=False, default=None), 'position_history': FieldInfo(annotation=List[Union[DotBotLH2Position, DotBotGPSPosition]], required=False, default=[]), 'rgb_led': FieldInfo(annotation=Union[DotBotRgbLedCommandModel, NoneType], required=False, default=None), 'rudder_angle': FieldInfo(annotation=Union[int, NoneType], required=False, default=None), 'sail_angle': FieldInfo(annotation=Union[int, NoneType], required=False, default=None), 'status': FieldInfo(annotation=DotBotStatus, required=False, default=<DotBotStatus.ALIVE: 0>), 'swarm': FieldInfo(annotation=str, required=False, default='0000'), 'waypoints': FieldInfo(annotation=List[Union[DotBotLH2Position, DotBotGPSPosition]], required=False, default=[]), 'waypoints_threshold': FieldInfo(annotation=int, required=False, default=40), 'wind_angle': FieldInfo(annotation=Union[int, NoneType], required=False, default=None)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

move_raw: DotBotMoveRawCommandModel | None#
position_history: List[DotBotLH2Position | DotBotGPSPosition]#
rgb_led: DotBotRgbLedCommandModel | None#
rudder_angle: int | None#
sail_angle: int | None#
status: DotBotStatus#
swarm: str#
waypoints: List[DotBotLH2Position | DotBotGPSPosition]#
waypoints_threshold: int#
wind_angle: int | None#
class dotbot.models.DotBotMoveRawCommandModel(*, left_x, left_y, right_x, right_y)[source]#

Bases: BaseModel

Model class that defines a move raw command.

Parameters:
  • left_x (int) –

  • left_y (int) –

  • right_x (int) –

  • right_y (int) –

left_x: int#
left_y: int#
model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'left_x': FieldInfo(annotation=int, required=True), 'left_y': FieldInfo(annotation=int, required=True), 'right_x': FieldInfo(annotation=int, required=True), 'right_y': FieldInfo(annotation=int, required=True)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

right_x: int#
right_y: int#
class dotbot.models.DotBotNotificationCommand(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]#

Bases: IntEnum

Notification command of a DotBot.

NONE: int = 0#
PIN_CODE_UPDATE: int = 3#
RELOAD: int = 1#
UPDATE: int = 2#
class dotbot.models.DotBotNotificationModel(*, cmd, data=None, pin_code=None)[source]#

Bases: BaseModel

Model class used to send controller notifications.

Parameters:
cmd: DotBotNotificationCommand#
data: DotBotNotificationUpdate | None#
model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'cmd': FieldInfo(annotation=DotBotNotificationCommand, required=True), 'data': FieldInfo(annotation=Union[DotBotNotificationUpdate, NoneType], required=False, default=None), 'pin_code': FieldInfo(annotation=Union[int, NoneType], required=False, default=None)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

pin_code: int | None#
class dotbot.models.DotBotNotificationUpdate(*, address, direction, wind_angle, rudder_angle, sail_angle, lh2_position=None, gps_position=None)[source]#

Bases: BaseModel

Update notification model.

Parameters:
  • address (str) –

  • direction (int | None) –

  • wind_angle (int | None) –

  • rudder_angle (int | None) –

  • sail_angle (int | None) –

  • lh2_position (DotBotLH2Position | None) –

  • gps_position (DotBotGPSPosition | None) –

address: str#
direction: int | None#
gps_position: DotBotGPSPosition | None#
lh2_position: DotBotLH2Position | None#
model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'address': FieldInfo(annotation=str, required=True), 'direction': FieldInfo(annotation=Union[int, NoneType], required=True), 'gps_position': FieldInfo(annotation=Union[DotBotGPSPosition, NoneType], required=False, default=None), 'lh2_position': FieldInfo(annotation=Union[DotBotLH2Position, NoneType], required=False, default=None), 'rudder_angle': FieldInfo(annotation=Union[int, NoneType], required=True), 'sail_angle': FieldInfo(annotation=Union[int, NoneType], required=True), 'wind_angle': FieldInfo(annotation=Union[int, NoneType], required=True)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

rudder_angle: int | None#
sail_angle: int | None#
wind_angle: int | None#
class dotbot.models.DotBotQueryModel(*, max_positions=1000, application=None, mode=None, status=None, swarm=None)[source]#

Bases: BaseModel

Model class used to filter DotBots.

Parameters:
application: ApplicationType | None#
max_positions: int#
mode: ControlModeType | None#
model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'application': FieldInfo(annotation=Union[ApplicationType, NoneType], required=False, default=None), 'max_positions': FieldInfo(annotation=int, required=False, default=1000), 'mode': FieldInfo(annotation=Union[ControlModeType, NoneType], required=False, default=None), 'status': FieldInfo(annotation=Union[DotBotStatus, NoneType], required=False, default=None), 'swarm': FieldInfo(annotation=Union[str, NoneType], required=False, default=None)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

status: DotBotStatus | None#
swarm: str | None#
class dotbot.models.DotBotReplyModel(*, request, data)[source]#

Bases: BaseModel

Model class used to handle controller replies.

Parameters:
data: Any#
model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'data': FieldInfo(annotation=Any, required=True), 'request': FieldInfo(annotation=DotBotRequestType, required=True)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

request: DotBotRequestType#
class dotbot.models.DotBotRequestModel(*, request, reply)[source]#

Bases: BaseModel

Model class used to handle controller request.

Parameters:
model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'reply': FieldInfo(annotation=str, required=True), 'request': FieldInfo(annotation=DotBotRequestType, required=True)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

reply: str#
request: DotBotRequestType#
class dotbot.models.DotBotRequestType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]#

Bases: IntEnum

Request received from MQTT client.

DOTBOTS: int = 0#
LH2_CALIBRATION_STATE: int = 1#
class dotbot.models.DotBotRgbLedCommandModel(*, red, green, blue)[source]#

Bases: BaseModel

Model class that defines an RGB LED command.

Parameters:
  • red (int) –

  • green (int) –

  • blue (int) –

blue: int#
green: int#
model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'blue': FieldInfo(annotation=int, required=True), 'green': FieldInfo(annotation=int, required=True), 'red': FieldInfo(annotation=int, required=True)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

red: int#
class dotbot.models.DotBotStatus(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]#

Bases: IntEnum

Status of a DotBot.

ALIVE: int = 0#
DEAD: int = 2#
LOST: int = 1#
class dotbot.models.DotBotWaypoints(*, threshold, waypoints)[source]#

Bases: BaseModel

Waypoints model.

Parameters:
model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'threshold': FieldInfo(annotation=int, required=True), 'waypoints': FieldInfo(annotation=List[Union[DotBotLH2Position, DotBotGPSPosition]], required=True)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

threshold: int#
waypoints: List[DotBotLH2Position | DotBotGPSPosition]#
class dotbot.models.DotBotXGOActionCommandModel(*, action)[source]#

Bases: BaseModel

Model class that defines an XGO action command.

Parameters:

action (int) –

action: int#
model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'action': FieldInfo(annotation=int, required=True)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

class dotbot.models.MqttPinCodeModel(*, pin)[source]#

Bases: BaseModel

Pin code used to derive crypto keys for MQTT.

Parameters:

pin (int) –

model_computed_fields: ClassVar[Dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, FieldInfo]] = {'pin': FieldInfo(annotation=int, required=True)}#

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

pin: int#