miio.devtools.simulators.miotsimulator module

class miio.devtools.simulators.miotsimulator.MiotSimulator(device_model)[source]

Bases: object

MiOT device simulator.

This class implements a barebone simulator for a given devicemodel instance created from a miot schema file.

action(payload)[source]

Handle action method.

dump_properties(payload)[source]

Dumps the available properties.

This is not implemented on real devices, but can be used for debugging.

dump_services(payload)[source]

Dumps the available services.

get_properties(payload)[source]

Handle get_properties method.

initialize_state()[source]

Create initial state for the device.

set_properties(payload)[source]

Handle set_properties method.

class miio.devtools.simulators.miotsimulator.SimulatedDeviceModel(*args, description: str, type: URN, services: List[SimulatedMiotService])[source]

Bases: DeviceModel

Overridden to allow simulated properties.

class Config

Bases: object

extra = 'forbid'
classmethod construct(_fields_set: SetStr | None = None, **values: Any) Model

Creates a new model setting __dict__ and __fields_set__ from trusted or pre-validated data. Default values are respected, but no other validation is performed. Behaves as if Config.extra = ‘allow’ was set since it adds all passed values

copy(*, include: AbstractSetIntStr | MappingIntStrAny | None = None, exclude: AbstractSetIntStr | MappingIntStrAny | None = None, update: DictStrAny | None = None, deep: bool = False) Model

Duplicate a model, optionally choose which fields to include, exclude and change.

Parameters:
  • include – fields to include in new model

  • exclude – fields to exclude from new model, as with values this takes precedence over include

  • update – values to change/add in the new model. Note: the data is not validated before creating the new model: you should trust this data

  • deep – set to True to make a deep copy of the model

Returns:

new model instance

dict(*, include: AbstractSetIntStr | MappingIntStrAny | None = None, exclude: AbstractSetIntStr | MappingIntStrAny | None = None, by_alias: bool = False, skip_defaults: bool | None = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False) DictStrAny

Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.

classmethod from_orm(obj: Any) Model
get_property(service: str, prop_name: str) MiotProperty

Return the property model for given service and property name.

get_property_by_siid_piid(siid: int, piid: int) MiotProperty

Return the property model for given siid, piid.

get_service_by_siid(siid: int) MiotService

Return the service for given siid.

json(*, include: AbstractSetIntStr | MappingIntStrAny | None = None, exclude: AbstractSetIntStr | MappingIntStrAny | None = None, by_alias: bool = False, skip_defaults: bool | None = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False, encoder: Callable[[Any], Any] | None = None, models_as_dict: bool = True, **dumps_kwargs: Any) str

Generate a JSON representation of the model, include and exclude arguments as per dict().

encoder is an optional function to supply as default to json.dumps(), other arguments as per json.dumps().

classmethod parse_file(path: str | Path, *, content_type: str = None, encoding: str = 'utf8', proto: Protocol = None, allow_pickle: bool = False) Model
classmethod parse_obj(obj: Any) Model
classmethod parse_raw(b: str | bytes, *, content_type: str = None, encoding: str = 'utf8', proto: Protocol = None, allow_pickle: bool = False) Model
classmethod schema(by_alias: bool = True, ref_template: str = '#/definitions/{model}') DictStrAny
classmethod schema_json(*, by_alias: bool = True, ref_template: str = '#/definitions/{model}', **dumps_kwargs: Any) str
classmethod update_forward_refs(**localns: Any) None

Try to update ForwardRefs on fields based on this Model, globalns and localns.

classmethod validate(value: Any) Model
description: str
property device_type: str

Return device type as string.

services: List[SimulatedMiotService]
urn: URN
class miio.devtools.simulators.miotsimulator.SimulatedMiotProperty(*, type: URN, description: str, extras: Dict = None, service: MiotService | None = None, iid: int, format: MiotFormat, access: List[MiotAccess] = ['read'], unit: str | None = None, value: Any | None = None, current_value: int | str | bool = -10000, **extra_data: Any)[source]

Bases: MiotProperty

Simulates a property.

  • Creates dummy values based on the property information.

  • Validates inputs for set_properties

class Config[source]

Bases: object

smart_union = True
validate_assignment = True
classmethod construct(_fields_set: SetStr | None = None, **values: Any) Model

Creates a new model setting __dict__ and __fields_set__ from trusted or pre-validated data. Default values are respected, but no other validation is performed. Behaves as if Config.extra = ‘allow’ was set since it adds all passed values

copy(*, include: AbstractSetIntStr | MappingIntStrAny | None = None, exclude: AbstractSetIntStr | MappingIntStrAny | None = None, update: DictStrAny | None = None, deep: bool = False) Model

Duplicate a model, optionally choose which fields to include, exclude and change.

Parameters:
  • include – fields to include in new model

  • exclude – fields to exclude from new model, as with values this takes precedence over include

  • update – values to change/add in the new model. Note: the data is not validated before creating the new model: you should trust this data

  • deep – set to True to make a deep copy of the model

Returns:

new model instance

dict(*, include: AbstractSetIntStr | MappingIntStrAny | None = None, exclude: AbstractSetIntStr | MappingIntStrAny | None = None, by_alias: bool = False, skip_defaults: bool | None = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False) DictStrAny

Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.

fill_from_parent(service: MiotService)

Fill some information from the parent service.

classmethod from_orm(obj: Any) Model
get_descriptor() PropertyDescriptor

Create a descriptor based on the property information.

json(*, include: AbstractSetIntStr | MappingIntStrAny | None = None, exclude: AbstractSetIntStr | MappingIntStrAny | None = None, by_alias: bool = False, skip_defaults: bool | None = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False, encoder: Callable[[Any], Any] | None = None, models_as_dict: bool = True, **dumps_kwargs: Any) str

Generate a JSON representation of the model, include and exclude arguments as per dict().

encoder is an optional function to supply as default to json.dumps(), other arguments as per json.dumps().

classmethod parse_file(path: str | Path, *, content_type: str = None, encoding: str = 'utf8', proto: Protocol = None, allow_pickle: bool = False) Model
classmethod parse_obj(obj: Any) Model
classmethod parse_raw(b: str | bytes, *, content_type: str = None, encoding: str = 'utf8', proto: Protocol = None, allow_pickle: bool = False) Model
classmethod schema(by_alias: bool = True, ref_template: str = '#/definitions/{model}') DictStrAny
classmethod schema_json(*, by_alias: bool = True, ref_template: str = '#/definitions/{model}', **dumps_kwargs: Any) str
classmethod update_forward_refs(**localns: Any) None

Try to update ForwardRefs on fields based on this Model, globalns and localns.

classmethod validate(value: Any) Model
classmethod verify_value(v, values)[source]

This verifies that the type of the value conforms with the mapping definition.

This will also create random values for the mapping when the device is initialized.

access: List[MiotAccess]
choices: List[MiotEnumValue] | None
current_value: int | str | bool
description: str
extras: Dict
format: MiotFormat
gatt_access: List[Any] | None
property name: str

Return combined name of the service and the action.

property normalized_name: str

Return a normalized name.

This returns a normalized name() that can be used as a python identifier, currently meaning that ‘:’ and ‘-’ are replaced with ‘_’.

piid: int
property plain_name: str

Return plain name.

property pretty_access

Return pretty-printable access.

property pretty_input_constraints: str

Return input constraints for writable settings.

property pretty_value
range: List[int] | None
service: 'MiotService' | None
property siid: int | None

Return siid.

unit: str | None
urn: URN
value: Any | None
class miio.devtools.simulators.miotsimulator.SimulatedMiotService(*args, iid: int, type: URN, description: str, properties: List[SimulatedMiotProperty] = [], events: List[MiotEvent] = None, actions: List[MiotAction] = None)[source]

Bases: MiotService

Overridden to allow simulated properties.

class Config

Bases: object

extra = 'forbid'
classmethod construct(_fields_set: SetStr | None = None, **values: Any) Model

Creates a new model setting __dict__ and __fields_set__ from trusted or pre-validated data. Default values are respected, but no other validation is performed. Behaves as if Config.extra = ‘allow’ was set since it adds all passed values

copy(*, include: AbstractSetIntStr | MappingIntStrAny | None = None, exclude: AbstractSetIntStr | MappingIntStrAny | None = None, update: DictStrAny | None = None, deep: bool = False) Model

Duplicate a model, optionally choose which fields to include, exclude and change.

Parameters:
  • include – fields to include in new model

  • exclude – fields to exclude from new model, as with values this takes precedence over include

  • update – values to change/add in the new model. Note: the data is not validated before creating the new model: you should trust this data

  • deep – set to True to make a deep copy of the model

Returns:

new model instance

dict(*, include: AbstractSetIntStr | MappingIntStrAny | None = None, exclude: AbstractSetIntStr | MappingIntStrAny | None = None, by_alias: bool = False, skip_defaults: bool | None = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False) DictStrAny

Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.

classmethod from_orm(obj: Any) Model
get_action_by_id(aiid)

Return action by id.

get_property_by_id(piid)

Return property by id.

json(*, include: AbstractSetIntStr | MappingIntStrAny | None = None, exclude: AbstractSetIntStr | MappingIntStrAny | None = None, by_alias: bool = False, skip_defaults: bool | None = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False, encoder: Callable[[Any], Any] | None = None, models_as_dict: bool = True, **dumps_kwargs: Any) str

Generate a JSON representation of the model, include and exclude arguments as per dict().

encoder is an optional function to supply as default to json.dumps(), other arguments as per json.dumps().

classmethod parse_file(path: str | Path, *, content_type: str = None, encoding: str = 'utf8', proto: Protocol = None, allow_pickle: bool = False) Model
classmethod parse_obj(obj: Any) Model
classmethod parse_raw(b: str | bytes, *, content_type: str = None, encoding: str = 'utf8', proto: Protocol = None, allow_pickle: bool = False) Model
classmethod schema(by_alias: bool = True, ref_template: str = '#/definitions/{model}') DictStrAny
classmethod schema_json(*, by_alias: bool = True, ref_template: str = '#/definitions/{model}', **dumps_kwargs: Any) str
classmethod update_forward_refs(**localns: Any) None

Try to update ForwardRefs on fields based on this Model, globalns and localns.

classmethod validate(value: Any) Model
actions: List[MiotAction]
description: str
events: List[MiotEvent]
property name: str

Return service name.

property normalized_name: str

Return normalized service name.

This returns a normalized name() that can be used as a python identifier, currently meaning that ‘:’ and ‘-’ are replaced with ‘_’.

properties: List[SimulatedMiotProperty]
siid: int
urn: URN
miio.devtools.simulators.miotsimulator.create_random(values)[source]

Create random value for the given mapping.

async miio.devtools.simulators.miotsimulator.main(dev, model)[source]