python-roborock 4.24.0__tar.gz → 4.25.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. {python_roborock-4.24.0 → python_roborock-4.25.0}/PKG-INFO +1 -1
  2. {python_roborock-4.24.0 → python_roborock-4.25.0}/pyproject.toml +1 -1
  3. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/cli.py +2 -16
  4. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/code_mappings.py +24 -0
  5. {python_roborock-4.24.0 → python_roborock-4.25.0}/.gitignore +0 -0
  6. {python_roborock-4.24.0 → python_roborock-4.25.0}/LICENSE +0 -0
  7. {python_roborock-4.24.0 → python_roborock-4.25.0}/README.md +0 -0
  8. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/__init__.py +0 -0
  9. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/broadcast_protocol.py +0 -0
  10. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/callbacks.py +0 -0
  11. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/const.py +0 -0
  12. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/__init__.py +0 -0
  13. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/b01_q10/__init__.py +0 -0
  14. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/b01_q10/b01_q10_code_mappings.py +0 -0
  15. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/b01_q10/b01_q10_containers.py +0 -0
  16. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/b01_q7/__init__.py +0 -0
  17. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/b01_q7/b01_q7_code_mappings.py +0 -0
  18. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/b01_q7/b01_q7_containers.py +0 -0
  19. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/containers.py +0 -0
  20. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/dyad/__init__.py +0 -0
  21. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/dyad/dyad_code_mappings.py +0 -0
  22. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/dyad/dyad_containers.py +0 -0
  23. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/v1/__init__.py +0 -0
  24. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/v1/v1_clean_modes.py +0 -0
  25. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/v1/v1_code_mappings.py +0 -0
  26. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/v1/v1_containers.py +0 -0
  27. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/zeo/__init__.py +0 -0
  28. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/zeo/zeo_code_mappings.py +0 -0
  29. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/data/zeo/zeo_containers.py +0 -0
  30. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/device_features.py +0 -0
  31. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/README.md +0 -0
  32. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/__init__.py +0 -0
  33. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/cache.py +0 -0
  34. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/device.py +0 -0
  35. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/device_manager.py +0 -0
  36. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/file_cache.py +0 -0
  37. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/rpc/__init__.py +0 -0
  38. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/rpc/a01_channel.py +0 -0
  39. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/rpc/b01_q10_channel.py +0 -0
  40. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/rpc/b01_q7_channel.py +0 -0
  41. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/rpc/v1_channel.py +0 -0
  42. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/__init__.py +0 -0
  43. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/a01/__init__.py +0 -0
  44. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/b01/__init__.py +0 -0
  45. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/b01/q10/__init__.py +0 -0
  46. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/b01/q10/command.py +0 -0
  47. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/b01/q10/common.py +0 -0
  48. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/b01/q10/status.py +0 -0
  49. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/b01/q10/vacuum.py +0 -0
  50. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/b01/q7/__init__.py +0 -0
  51. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/b01/q7/clean_summary.py +0 -0
  52. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/b01/q7/map.py +0 -0
  53. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/traits_mixin.py +0 -0
  54. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/__init__.py +0 -0
  55. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/child_lock.py +0 -0
  56. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/clean_summary.py +0 -0
  57. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/command.py +0 -0
  58. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/common.py +0 -0
  59. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/consumeable.py +0 -0
  60. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/device_features.py +0 -0
  61. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/do_not_disturb.py +0 -0
  62. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/dust_collection_mode.py +0 -0
  63. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/flow_led_status.py +0 -0
  64. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/home.py +0 -0
  65. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/led_status.py +0 -0
  66. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/map_content.py +0 -0
  67. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/maps.py +0 -0
  68. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/network_info.py +0 -0
  69. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/rooms.py +0 -0
  70. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/routines.py +0 -0
  71. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/smart_wash_params.py +0 -0
  72. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/status.py +0 -0
  73. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/valley_electricity_timer.py +0 -0
  74. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/volume.py +0 -0
  75. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/traits/v1/wash_towel_mode.py +0 -0
  76. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/transport/__init__.py +0 -0
  77. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/transport/channel.py +0 -0
  78. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/transport/local_channel.py +0 -0
  79. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/devices/transport/mqtt_channel.py +0 -0
  80. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/diagnostics.py +0 -0
  81. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/exceptions.py +0 -0
  82. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/map/__init__.py +0 -0
  83. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/map/map_parser.py +0 -0
  84. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/mqtt/__init__.py +0 -0
  85. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/mqtt/health_manager.py +0 -0
  86. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/mqtt/roborock_session.py +0 -0
  87. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/mqtt/session.py +0 -0
  88. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/protocol.py +0 -0
  89. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/protocols/__init__.py +0 -0
  90. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/protocols/a01_protocol.py +0 -0
  91. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/protocols/b01_q10_protocol.py +0 -0
  92. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/protocols/b01_q7_protocol.py +0 -0
  93. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/protocols/v1_protocol.py +0 -0
  94. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/py.typed +0 -0
  95. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/roborock_message.py +0 -0
  96. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/roborock_typing.py +0 -0
  97. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/util.py +0 -0
  98. {python_roborock-4.24.0 → python_roborock-4.25.0}/roborock/web_api.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-roborock
3
- Version: 4.24.0
3
+ Version: 4.25.0
4
4
  Summary: A package to control Roborock vacuums.
5
5
  Project-URL: Repository, https://github.com/humbertogontijo/python-roborock
6
6
  Project-URL: Documentation, https://python-roborock.readthedocs.io/
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-roborock"
3
- version = "4.24.0"
3
+ version = "4.25.0"
4
4
  description = "A package to control Roborock vacuums."
5
5
  authors = [{ name = "humbertogontijo", email = "humbertogontijo@users.noreply.github.com" }, {name="Lash-L"}, {name="allenporter"}]
6
6
  requires-python = ">=3.11, <4"
@@ -764,21 +764,6 @@ async def network_info(ctx, device_id: str):
764
764
  await _display_v1_trait(context, device_id, lambda v1: v1.network_info)
765
765
 
766
766
 
767
- def _parse_b01_q10_command(cmd: str) -> B01_Q10_DP:
768
- """Parse B01_Q10 command from either enum name or value."""
769
- try:
770
- return B01_Q10_DP(int(cmd))
771
- except ValueError:
772
- try:
773
- return B01_Q10_DP.from_name(cmd)
774
- except ValueError:
775
- try:
776
- return B01_Q10_DP.from_value(cmd)
777
- except ValueError:
778
- pass
779
- raise RoborockException(f"Invalid command {cmd} for B01_Q10 device")
780
-
781
-
782
767
  @click.command()
783
768
  @click.option("--device_id", required=True)
784
769
  @click.option("--cmd", required=True)
@@ -795,7 +780,8 @@ async def command(ctx, cmd, device_id, params):
795
780
  if result:
796
781
  click.echo(dump_json(result))
797
782
  elif device.b01_q10_properties is not None:
798
- cmd_value = _parse_b01_q10_command(cmd)
783
+ if cmd_value := B01_Q10_DP.from_any_optional(cmd) is None:
784
+ raise RoborockException(f"Invalid command {cmd} for B01_Q10 device")
799
785
  command_trait: Trait = device.b01_q10_properties.command
800
786
  await command_trait.send(cmd_value, json.loads(params) if params is not None else None)
801
787
  click.echo("Command sent successfully; Enable debug logging (-d) to see responses.")
@@ -100,6 +100,30 @@ class RoborockModeEnum(StrEnum):
100
100
  return member
101
101
  raise ValueError(f"{name} is not a valid name for {cls.__name__}")
102
102
 
103
+ @classmethod
104
+ def from_any_optional(cls, value: str | int) -> Self | None:
105
+ """Resolve a string or int to an enum member.
106
+
107
+ Tries to look up by enum name, string value, or integer code
108
+ and returns None if no match is found.
109
+ """
110
+ # Try enum name lookup (e.g. "SEEK")
111
+ try:
112
+ return cls.from_name(str(value))
113
+ except ValueError:
114
+ pass
115
+ # Try DP string value lookup (e.g. "dpSeek")
116
+ try:
117
+ return cls.from_value(str(value))
118
+ except ValueError:
119
+ pass
120
+ # Try integer code lookup (e.g. "11")
121
+ try:
122
+ return cls.from_code(int(value))
123
+ except (ValueError, TypeError):
124
+ pass
125
+ return None
126
+
103
127
  @classmethod
104
128
  def keys(cls) -> list[str]:
105
129
  """Returns a list of all member values."""