valetudo-map-parser 0.1.9b41__py3-none-any.whl → 0.1.9b42__py3-none-any.whl

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.
@@ -11,9 +11,13 @@ import logging
11
11
  import uuid
12
12
  from typing import Any
13
13
 
14
+ import numpy as np
14
15
  from PIL import Image
15
16
 
16
17
  from .config.auto_crop import AutoCrop
18
+ from .config.drawable import Drawable
19
+ from .config.drawable_elements import DrawableElement, DrawingConfig
20
+ from .config.enhanced_drawable import EnhancedDrawable
17
21
  from .config.types import (
18
22
  COLORS,
19
23
  DEFAULT_IMAGE_SIZE,
@@ -48,6 +52,11 @@ class ReImageHandler(BaseHandler, AutoCrop):
48
52
  self.outlines = None # Outlines data
49
53
  self.calibration_data = None # Calibration data
50
54
  self.data = RandImageData # Image Data
55
+
56
+ # Initialize drawing configuration using the shared utility function
57
+ from .config.utils import initialize_drawing_config
58
+ self.drawing_config, self.draw, self.enhanced_draw = initialize_drawing_config(self)
59
+ self.element_map = None # Map of element codes
51
60
  self.go_to = None # Go to position data
52
61
  self.img_base_layer = None # Base image layer
53
62
  self.img_rotate = shared_data.image_rotate # Image rotation
@@ -56,6 +65,59 @@ class ReImageHandler(BaseHandler, AutoCrop):
56
65
  self.file_name = self.shared.file_name # File name
57
66
  self.imd = ImageDraw(self) # Image Draw
58
67
 
68
+ async def extract_room_outline_from_map(self, room_id_int, pixels):
69
+ """Extract the outline of a room using the pixel data and element map.
70
+
71
+ Args:
72
+ room_id_int: The room ID as an integer
73
+ pixels: List of pixel coordinates in the format [[x, y, z], ...]
74
+
75
+ Returns:
76
+ List of points forming the outline of the room
77
+ """
78
+ # Calculate x and y min/max from compressed pixels for rectangular fallback
79
+ x_values = []
80
+ y_values = []
81
+ for x, y, _ in pixels:
82
+ x_values.append(x)
83
+ y_values.append(y)
84
+
85
+ if not x_values or not y_values:
86
+ return []
87
+
88
+ min_x, max_x = min(x_values), max(x_values)
89
+ min_y, max_y = min(y_values), max(y_values)
90
+
91
+ # If we don't have an element map, return a rectangular outline
92
+ if not hasattr(self, "element_map") or self.element_map is None:
93
+ # Return rectangular outline
94
+ return [(min_x, min_y), (max_x, min_y), (max_x, max_y), (min_x, max_y)]
95
+
96
+ # Create a binary mask for this room using the pixel data
97
+ # This is more reliable than using the element_map since we're directly using the pixel data
98
+ height, width = self.element_map.shape
99
+ room_mask = np.zeros((height, width), dtype=np.uint8)
100
+
101
+ # Fill the mask with room pixels using the pixel data
102
+ for x, y, _ in pixels: # Using _ instead of z since z is unused
103
+ # Make sure we're within bounds
104
+ if 0 <= y < height and 0 <= x < width:
105
+ # Mark a pixel at this position
106
+ room_mask[y, x] = 1
107
+
108
+ # Debug log to check if we have any room pixels
109
+ num_room_pixels = np.sum(room_mask)
110
+ _LOGGER.debug(
111
+ "%s: Room %s mask has %d pixels",
112
+ self.file_name, str(room_id_int), int(num_room_pixels)
113
+ )
114
+
115
+ # Use the shared utility function to extract the room outline
116
+ from .config.utils import async_extract_room_outline
117
+ return await async_extract_room_outline(
118
+ room_mask, min_x, min_y, max_x, max_y, self.file_name, room_id_int, _LOGGER
119
+ )
120
+
59
121
  async def extract_room_properties(
60
122
  self, json_data: JsonType, destinations: JsonType
61
123
  ) -> RoomsProperties:
@@ -88,7 +150,27 @@ class ReImageHandler(BaseHandler, AutoCrop):
88
150
  x_max = self.outlines[id_x][1][0]
89
151
  y_min = self.outlines[id_x][0][1]
90
152
  y_max = self.outlines[id_x][1][1]
153
+
154
+ # Get rectangular corners as a fallback
91
155
  corners = self.get_corners(x_max, x_min, y_max, y_min)
156
+
157
+ # Try to extract a more accurate room outline from the element map
158
+ try:
159
+ # Extract the room outline using the element map
160
+ outline = await self.extract_room_outline_from_map(
161
+ room_id, self.segment_data[id_x]
162
+ )
163
+ _LOGGER.debug(
164
+ "%s: Traced outline for room %s with %d points",
165
+ self.file_name,
166
+ room_id,
167
+ len(outline),
168
+ )
169
+ except (ValueError, IndexError, TypeError, ArithmeticError) as e:
170
+ from .config.utils import handle_room_outline_error
171
+ handle_room_outline_error(self.file_name, room_id, e, _LOGGER)
172
+ outline = corners
173
+
92
174
  # rand256 vacuums accept int(room_id) or str(name)
93
175
  # the card will soon support int(room_id) but the camera will send name
94
176
  # this avoids the manual change of the values in the card.
@@ -100,7 +182,7 @@ class ReImageHandler(BaseHandler, AutoCrop):
100
182
  )
101
183
  room_properties[int(room_id)] = {
102
184
  "number": int(room_id),
103
- "outline": corners,
185
+ "outline": outline,
104
186
  "name": name,
105
187
  "x": (x_min + x_max) // 2,
106
188
  "y": (y_min + y_max) // 2,
@@ -197,49 +279,120 @@ class ReImageHandler(BaseHandler, AutoCrop):
197
279
  robot_position,
198
280
  robot_position_angle,
199
281
  ) = await self.imd.async_get_robot_position(m_json)
282
+
200
283
  if self.frame_number == 0:
201
- room_id, img_np_array = await self.imd.async_draw_base_layer(
202
- m_json,
203
- size_x,
204
- size_y,
205
- colors["wall"],
206
- colors["zone_clean"],
207
- colors["background"],
208
- DEFAULT_PIXEL_SIZE,
209
- )
210
- _LOGGER.info("%s: Completed base Layers", self.file_name)
211
- if (room_id > 0) and not self.room_propriety:
212
- self.room_propriety = await self.get_rooms_attributes(destinations)
213
- if self.rooms_pos:
214
- self.robot_pos = await self.async_get_robot_in_room(
215
- (robot_position[0] * 10),
216
- (robot_position[1] * 10),
217
- robot_position_angle,
218
- )
219
- self.img_base_layer = await self.async_copy_array(img_np_array)
284
+ # Create element map for tracking what's drawn where
285
+ self.element_map = np.zeros((size_y, size_x), dtype=np.int32)
286
+ self.element_map[:] = DrawableElement.FLOOR
287
+
288
+ # Draw base layer if floor is enabled
289
+ if self.drawing_config.is_enabled(DrawableElement.FLOOR):
290
+ room_id, img_np_array = await self.imd.async_draw_base_layer(
291
+ m_json,
292
+ size_x,
293
+ size_y,
294
+ colors["wall"],
295
+ colors["zone_clean"],
296
+ colors["background"],
297
+ DEFAULT_PIXEL_SIZE,
298
+ )
299
+ _LOGGER.info("%s: Completed base Layers", self.file_name)
300
+
301
+ # Update element map for rooms
302
+ if 0 < room_id <= 15:
303
+ # This is a simplification - in a real implementation we would
304
+ # need to identify the exact pixels that belong to each room
305
+ pass
306
+
307
+ if room_id > 0 and not self.room_propriety:
308
+ self.room_propriety = await self.get_rooms_attributes(destinations)
309
+ if self.rooms_pos:
310
+ self.robot_pos = await self.async_get_robot_in_room(
311
+ (robot_position[0] * 10),
312
+ (robot_position[1] * 10),
313
+ robot_position_angle,
314
+ )
315
+ self.img_base_layer = await self.async_copy_array(img_np_array)
316
+ else:
317
+ # If floor is disabled, create an empty image
318
+ background_color = self.drawing_config.get_property(
319
+ DrawableElement.FLOOR, "color", colors["background"]
320
+ )
321
+ img_np_array = await self.draw.create_empty_image(
322
+ size_x, size_y, background_color
323
+ )
324
+ self.img_base_layer = await self.async_copy_array(img_np_array)
220
325
  return self.img_base_layer, robot_position, robot_position_angle
221
326
 
222
327
  async def _draw_map_elements(
223
328
  self, img_np_array, m_json, colors, robot_position, robot_position_angle
224
329
  ):
225
- img_np_array, self.charger_pos = await self.imd.async_draw_charger(
226
- img_np_array, m_json, colors["charger"]
227
- )
228
- img_np_array = await self.imd.async_draw_zones(
229
- m_json, img_np_array, colors["zone_clean"]
230
- )
231
- img_np_array = await self.imd.async_draw_virtual_restrictions(
232
- m_json, img_np_array, colors["no_go"]
233
- )
234
- img_np_array = await self.imd.async_draw_path(
235
- img_np_array, m_json, colors["move"]
236
- )
237
- img_np_array = await self.imd.async_draw_go_to_flag(
238
- img_np_array, m_json, colors["go_to"]
239
- )
240
- img_np_array = await self.imd.async_draw_robot_on_map(
241
- img_np_array, robot_position, robot_position_angle, colors["robot"]
242
- )
330
+ # Create element map for tracking what's drawn where if it doesn't exist
331
+ if self.element_map is None:
332
+ self.element_map = np.zeros(
333
+ (img_np_array.shape[0], img_np_array.shape[1]), dtype=np.int32
334
+ )
335
+ self.element_map[:] = DrawableElement.FLOOR
336
+
337
+ # Draw charger if enabled
338
+ if self.drawing_config.is_enabled(DrawableElement.CHARGER):
339
+ img_np_array, self.charger_pos = await self.imd.async_draw_charger(
340
+ img_np_array, m_json, colors["charger"]
341
+ )
342
+ # Update element map for charger position
343
+ if self.charger_pos:
344
+ charger_radius = 15
345
+ for dy in range(-charger_radius, charger_radius + 1):
346
+ for dx in range(-charger_radius, charger_radius + 1):
347
+ if dx * dx + dy * dy <= charger_radius * charger_radius:
348
+ cx, cy = (
349
+ int(self.charger_pos[0] + dx),
350
+ int(self.charger_pos[1] + dy),
351
+ )
352
+ if (
353
+ 0 <= cy < self.element_map.shape[0]
354
+ and 0 <= cx < self.element_map.shape[1]
355
+ ):
356
+ self.element_map[cy, cx] = DrawableElement.CHARGER
357
+
358
+ # Draw zones if enabled
359
+ if self.drawing_config.is_enabled(DrawableElement.RESTRICTED_AREA):
360
+ img_np_array = await self.imd.async_draw_zones(
361
+ m_json, img_np_array, colors["zone_clean"]
362
+ )
363
+
364
+ # Draw virtual restrictions if enabled
365
+ if self.drawing_config.is_enabled(DrawableElement.VIRTUAL_WALL):
366
+ img_np_array = await self.imd.async_draw_virtual_restrictions(
367
+ m_json, img_np_array, colors["no_go"]
368
+ )
369
+
370
+ # Draw path if enabled
371
+ if self.drawing_config.is_enabled(DrawableElement.PATH):
372
+ img_np_array = await self.imd.async_draw_path(
373
+ img_np_array, m_json, colors["move"]
374
+ )
375
+
376
+ # Draw go-to flag if enabled
377
+ if self.drawing_config.is_enabled(DrawableElement.GO_TO_TARGET):
378
+ img_np_array = await self.imd.async_draw_go_to_flag(
379
+ img_np_array, m_json, colors["go_to"]
380
+ )
381
+
382
+ # Draw robot if enabled
383
+ if robot_position and self.drawing_config.is_enabled(DrawableElement.ROBOT):
384
+ # Get robot color (allows for customization)
385
+ robot_color = self.drawing_config.get_property(
386
+ DrawableElement.ROBOT, "color", colors["robot"]
387
+ )
388
+
389
+ img_np_array = await self.imd.async_draw_robot_on_map(
390
+ img_np_array, robot_position, robot_position_angle, robot_color
391
+ )
392
+
393
+ # Update element map for robot position
394
+ from .config.utils import update_element_map_with_robot
395
+ update_element_map_with_robot(self.element_map, robot_position, DrawableElement.ROBOT)
243
396
  img_np_array = await self.async_auto_trim_and_zoom_image(
244
397
  img_np_array,
245
398
  detect_colour=colors["background"],
@@ -371,3 +524,35 @@ class ReImageHandler(BaseHandler, AutoCrop):
371
524
  self.calibration_data.append(calibration_point)
372
525
 
373
526
  return self.calibration_data
527
+
528
+ # Element selection methods
529
+ def enable_element(self, element_code: DrawableElement) -> None:
530
+ """Enable drawing of a specific element."""
531
+ self.drawing_config.enable_element(element_code)
532
+
533
+ def disable_element(self, element_code: DrawableElement) -> None:
534
+ """Disable drawing of a specific element."""
535
+ from .config.utils import manage_drawable_elements
536
+ manage_drawable_elements(self, "disable", element_code=element_code)
537
+
538
+ def set_elements(self, element_codes: list[DrawableElement]) -> None:
539
+ """Enable only the specified elements, disable all others."""
540
+ from .config.utils import manage_drawable_elements
541
+ manage_drawable_elements(self, "set_elements", element_codes=element_codes)
542
+
543
+ def set_element_property(
544
+ self, element_code: DrawableElement, property_name: str, value
545
+ ) -> None:
546
+ """Set a drawing property for an element."""
547
+ from .config.utils import manage_drawable_elements
548
+ manage_drawable_elements(self, "set_property", element_code=element_code, property_name=property_name, value=value)
549
+
550
+ def get_element_at_position(self, x: int, y: int) -> DrawableElement:
551
+ """Get the element code at a specific position."""
552
+ from .config.utils import get_element_at_position
553
+ return get_element_at_position(self.element_map, x, y)
554
+
555
+ def get_room_at_position(self, x: int, y: int) -> int:
556
+ """Get the room ID at a specific position, or None if not a room."""
557
+ from .config.utils import get_room_at_position
558
+ return get_room_at_position(self.element_map, x, y, DrawableElement.ROOM_1)
@@ -0,0 +1,92 @@
1
+ Metadata-Version: 2.3
2
+ Name: valetudo-map-parser
3
+ Version: 0.1.9b42
4
+ Summary: A Python library to parse Valetudo map data returning a PIL Image object.
5
+ License: Apache-2.0
6
+ Author: Sandro Cantarella
7
+ Author-email: gsca075@gmail.com
8
+ Requires-Python: >=3.12
9
+ Classifier: License :: OSI Approved :: Apache Software License
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Programming Language :: Python :: 3.13
13
+ Requires-Dist: Pillow (>=10.3.0)
14
+ Requires-Dist: numpy (>=1.26.4)
15
+ Project-URL: Bug Tracker, https://github.com/sca075/Python-package-valetudo-map-parser/issues
16
+ Project-URL: Changelog, https://github.com/sca075/Python-package-valetudo-map-parser/releases
17
+ Project-URL: Homepage, https://github.com/sca075/Python-package-valetudo-map-parser
18
+ Project-URL: Repository, https://github.com/sca075/Python-package-valetudo-map-parser
19
+ Description-Content-Type: text/markdown
20
+
21
+ # Python-package-valetudo-map-parser
22
+
23
+ ---
24
+ ### What is it:
25
+ ❗This is an _unofficial_ project and is not created, maintained, or in any sense linked to [valetudo.cloud](https://valetudo.cloud)
26
+
27
+ A Python library that converts Valetudo vacuum JSON map data into PIL (Python Imaging Library) images. This package is primarily developed for and used in the [MQTT Vacuum Camera](https://github.com/sca075/mqtt_vacuum_camera) project.
28
+
29
+ ---
30
+
31
+ ### Features:
32
+ - Processes map data from Valetudo-compatible robot vacuums
33
+ - Supports both Hypfer and Rand256 vacuum data formats
34
+ - Renders comprehensive map visualizations including:
35
+ - Walls and obstacles
36
+ - Robot position and cleaning path
37
+ - Room segments and boundaries
38
+ - Cleaning zones
39
+ - Virtual restrictions
40
+ - LiDAR data
41
+ - Provides auto-cropping and dynamic zooming
42
+ - Supports image rotation and aspect ratio management
43
+ - Enables custom color schemes
44
+ - Handles multilingual labels
45
+ - Implements thread-safe data sharing
46
+
47
+ ### Installation:
48
+ ```bash
49
+ pip install valetudo_map_parser
50
+ ```
51
+
52
+ ### Requirements:
53
+ - Python 3.12 or higher
54
+ - Dependencies:
55
+ - Pillow (PIL) for image processing
56
+ - NumPy for array operations
57
+
58
+ ### Usage:
59
+ The library is configured using a dictionary format. See our [sample code](https://github.com/sca075/Python-package-valetudo-map-parser/blob/main/tests/test.py) for implementation examples.
60
+
61
+ Key functionalities:
62
+ - Decodes raw data from Rand256 format
63
+ - Processes JSON data from compatible vacuums
64
+ - Returns Pillow PNG images
65
+ - Provides calibration and room property extraction
66
+ - Supports asynchronous operations
67
+
68
+ ### Development Status:
69
+ Current version: 0.1.9.b41
70
+ - Full functionality available in versions >= 0.1.9
71
+ - Actively maintained and enhanced
72
+ - Uses Poetry for dependency management
73
+ - Implements comprehensive testing
74
+ - Enforces code quality through ruff, isort, and pylint
75
+
76
+ ### Contributing:
77
+ Contributions are welcome! You can help by:
78
+ - Submitting code improvements
79
+ - Enhancing documentation
80
+ - Reporting issues
81
+ - Suggesting new features
82
+
83
+ ### Disclaimer:
84
+ This project is provided "as is" without warranty of any kind. Users assume all risks associated with its use.
85
+
86
+ ### License:
87
+ Apache-2.0
88
+
89
+ ---
90
+ For more information about Valetudo, visit [valetudo.cloud](https://valetudo.cloud)
91
+ Integration with Home Assistant: [MQTT Vacuum Camera](https://github.com/sca075/mqtt_vacuum_camera)
92
+
@@ -0,0 +1,23 @@
1
+ valetudo_map_parser/__init__.py,sha256=INujZn4exaXUjqMN8nZkGJIziDWlW59t65fJ34HJX44,956
2
+ valetudo_map_parser/config/__init__.py,sha256=DQ9plV3ZF_K25Dp5ZQHPDoG-40dQoJNdNi-dfNeR3Zc,48
3
+ valetudo_map_parser/config/auto_crop.py,sha256=6OvRsWzXMXBaSEvgwpaaisNdozDKiDyTmPjknFxoUMc,12624
4
+ valetudo_map_parser/config/colors.py,sha256=IzTT9JvF12YGGJxaTiEJRuwUdCCsFCLzsR9seCDfYWs,6515
5
+ valetudo_map_parser/config/colors_man.py,sha256=9b5c6XmpMzhEiunwfIjVkOk1lDyV-UFoasACdkGXfbo,7833
6
+ valetudo_map_parser/config/drawable.py,sha256=kTqAC6MKvUe5KbncuHpqnILxtkdxkpU_vESPdbAVXVs,18419
7
+ valetudo_map_parser/config/drawable_elements.py,sha256=KzXKxJjsNf06e-cUVatSX5uwsn9OkGEIlOq7Li3n9aA,12119
8
+ valetudo_map_parser/config/enhanced_drawable.py,sha256=ehn0mXdpzHLQEamHE2rBdRv_xXWwfd9gvM5ndgDnoMQ,16825
9
+ valetudo_map_parser/config/rand25_parser.py,sha256=kIayyqVZBfQfAMkiArzqrrj9vqZB3pkgT0Y5ufrQmGA,16448
10
+ valetudo_map_parser/config/shared.py,sha256=GIEMF-M6BVA6SFBrql7chV7TciWNMLJ8geqwHB0NrW8,11253
11
+ valetudo_map_parser/config/types.py,sha256=uEJY-yYHHJWW3EZjg7hERSFrC2XuKzzRGT3C0z31Aw0,18359
12
+ valetudo_map_parser/config/utils.py,sha256=RJ5GI4sSyMJN8JVi1mafDZ3DX2IUBuR2bKjLpH_bNp4,33368
13
+ valetudo_map_parser/hypfer_draw.py,sha256=HymZVqRrvoIUt5MVWYp4jzY5KD9U_U5F8f82SWXoO58,20042
14
+ valetudo_map_parser/hypfer_handler.py,sha256=M-rIoXMcqYYsWw0iGulEeXGDi-a9K8KLUa8IMBxdZ9M,28164
15
+ valetudo_map_parser/map_data.py,sha256=6FbQfgxFB6E4kcOWokReJOVSekVaE1kStyhTQhAhiOg,19469
16
+ valetudo_map_parser/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ valetudo_map_parser/rand25_handler.py,sha256=pb7LOK-lWwMlrVevdwJbYoYhZ66IvBgOvihn9HD58fk,23964
18
+ valetudo_map_parser/reimg_draw.py,sha256=V0JUASavKVnEtAhv7nOV4pjsRxZrNsjIUtctbKO8wvk,12507
19
+ valetudo_map_parser-0.1.9b42.dist-info/LICENSE,sha256=Lh-qBbuRV0-jiCIBhfV7NgdwFxQFOXH3BKOzK865hRs,10480
20
+ valetudo_map_parser-0.1.9b42.dist-info/METADATA,sha256=fVRZ9WEb6Qnmktvv3jaqfmO2kuLhxJcTfgGFjx2yzxE,3289
21
+ valetudo_map_parser-0.1.9b42.dist-info/NOTICE.txt,sha256=5lTOuWiU9aiEnJ2go8sc7lTJ7ntMBx0g0GFnNrswCY4,2533
22
+ valetudo_map_parser-0.1.9b42.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
23
+ valetudo_map_parser-0.1.9b42.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.1
2
+ Generator: poetry-core 2.1.2
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,47 +0,0 @@
1
- Metadata-Version: 2.3
2
- Name: valetudo-map-parser
3
- Version: 0.1.9b41
4
- Summary: A Python library to parse Valetudo map data returning a PIL Image object.
5
- License: Apache-2.0
6
- Author: Sandro Cantarella
7
- Author-email: gsca075@gmail.com
8
- Requires-Python: >=3.12
9
- Classifier: License :: OSI Approved :: Apache Software License
10
- Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.12
12
- Classifier: Programming Language :: Python :: 3.13
13
- Requires-Dist: Pillow (>=10.3.0)
14
- Requires-Dist: numpy (>=1.26.4)
15
- Project-URL: Bug Tracker, https://github.com/sca075/Python-package-valetudo-map-parser/issues
16
- Project-URL: Changelog, https://github.com/sca075/Python-package-valetudo-map-parser/releases
17
- Project-URL: Homepage, https://github.com/sca075/Python-package-valetudo-map-parser
18
- Project-URL: Repository, https://github.com/sca075/Python-package-valetudo-map-parser
19
- Description-Content-Type: text/markdown
20
-
21
- # Python-package-valetudo-map-parser
22
- #
23
-
24
- ---
25
- ### What is it:
26
- ❗This is an _unofficial_ project and is not created, maintained, or in any sense linked to [valetudo.cloud](https://valetudo.cloud)
27
-
28
- Library to Covert Valetudo's Vacuums Json data in a PIL image.
29
-
30
- ---
31
-
32
- It is developed and used in the [MQTT Vacuum Camera](https://github.com/sca075/mqtt_vacuum_camera).
33
- As python package this code relay on Pythons base and popular pakages such Pillow and Numpy.
34
-
35
- This library can be import by simply using ```pip install valetudo_map_parser```.
36
-
37
- - It is configured with a dictionary format (on GitHub repo test [sample code](https://github.com/sca075/Python-package-valetudo-map-parser/blob/main/tests/test.py)).
38
- - It decodes Raw data provided from Rand256.
39
- - It provides functions to decode the json data provided from the vacuums.
40
- - It returns a Pillow PNG image.
41
-
42
-
43
- We are still working on the final release at current this library will be fully functional with >= v0.1.9.
44
-
45
- Anyone can contribute to make this code batter, with code, docs or simply creating issues if any faced.
46
- In any cases please be aware that "as it is" of course apply if you decide to use it.
47
-
@@ -1,21 +0,0 @@
1
- valetudo_map_parser/__init__.py,sha256=Wmd20bdI1btzMq-0x8NxGYWskTjdUmD-Fem9MTfziwU,810
2
- valetudo_map_parser/config/__init__.py,sha256=DQ9plV3ZF_K25Dp5ZQHPDoG-40dQoJNdNi-dfNeR3Zc,48
3
- valetudo_map_parser/config/auto_crop.py,sha256=6OvRsWzXMXBaSEvgwpaaisNdozDKiDyTmPjknFxoUMc,12624
4
- valetudo_map_parser/config/colors.py,sha256=IzTT9JvF12YGGJxaTiEJRuwUdCCsFCLzsR9seCDfYWs,6515
5
- valetudo_map_parser/config/colors_man.py,sha256=9b5c6XmpMzhEiunwfIjVkOk1lDyV-UFoasACdkGXfbo,7833
6
- valetudo_map_parser/config/drawable.py,sha256=CNuNBn1LNWaL2N30tS4jNaJhD5zV4wfGxXOhu0uaMZk,17788
7
- valetudo_map_parser/config/rand25_parser.py,sha256=kIayyqVZBfQfAMkiArzqrrj9vqZB3pkgT0Y5ufrQmGA,16448
8
- valetudo_map_parser/config/shared.py,sha256=-3HPvFDu-31P14NLXxjZP1eaN1k-l7oYWWNHlRL7IeM,10142
9
- valetudo_map_parser/config/types.py,sha256=TAqFjELB7eZTFXq7kYvcgVqOcjprutRsuoQWPj54Rjc,18358
10
- valetudo_map_parser/config/utils.py,sha256=yPutV-FEQlDB2z3LhOOFznoprHCApF-zrQMiOtkcO-k,19198
11
- valetudo_map_parser/hypfer_draw.py,sha256=akeaReXXQJX2Xp4deC8fQoWpWmcKKPPBsFRNToEyZyc,14944
12
- valetudo_map_parser/hypfer_handler.py,sha256=f_1oG69BA94sjcZ8O9Y6A1H-YyEutbvERzqnwgremvg,13001
13
- valetudo_map_parser/map_data.py,sha256=6FbQfgxFB6E4kcOWokReJOVSekVaE1kStyhTQhAhiOg,19469
14
- valetudo_map_parser/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- valetudo_map_parser/rand25_handler.py,sha256=UGRy-2IIgxZ880LlD95-vGrVdUREvM2iC1vbKhlh2eY,15249
16
- valetudo_map_parser/reimg_draw.py,sha256=V0JUASavKVnEtAhv7nOV4pjsRxZrNsjIUtctbKO8wvk,12507
17
- valetudo_map_parser-0.1.9b41.dist-info/LICENSE,sha256=Lh-qBbuRV0-jiCIBhfV7NgdwFxQFOXH3BKOzK865hRs,10480
18
- valetudo_map_parser-0.1.9b41.dist-info/METADATA,sha256=GFf-n6q6CxlHAC7FctF6MumKEJjXFXQKUtgGQWN5FVQ,2093
19
- valetudo_map_parser-0.1.9b41.dist-info/NOTICE.txt,sha256=5lTOuWiU9aiEnJ2go8sc7lTJ7ntMBx0g0GFnNrswCY4,2533
20
- valetudo_map_parser-0.1.9b41.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
21
- valetudo_map_parser-0.1.9b41.dist-info/RECORD,,