valetudo-map-parser 0.1.9a4__tar.gz → 0.1.9a6__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 (27) hide show
  1. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/PKG-INFO +1 -1
  2. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/rand25_handler.py +93 -11
  3. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/pyproject.toml +1 -1
  4. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/LICENSE +0 -0
  5. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/NOTICE.txt +0 -0
  6. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/README.md +0 -0
  7. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/__init__.py +0 -0
  8. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/config/__init__.py +0 -0
  9. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/config/auto_crop.py +0 -0
  10. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/config/color_utils.py +0 -0
  11. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/config/colors.py +0 -0
  12. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/config/drawable.py +0 -0
  13. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/config/drawable_elements.py +0 -0
  14. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/config/enhanced_drawable.py +0 -0
  15. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/config/optimized_element_map.py +0 -0
  16. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/config/rand25_parser.py +0 -0
  17. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/config/room_outline.py +0 -0
  18. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/config/shared.py +0 -0
  19. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/config/types.py +0 -0
  20. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/config/utils.py +0 -0
  21. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/hypfer_draw.py +0 -0
  22. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/hypfer_handler.py +0 -0
  23. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/hypfer_rooms_handler.py +0 -0
  24. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/map_data.py +0 -0
  25. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/py.typed +0 -0
  26. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/reimg_draw.py +0 -0
  27. {valetudo_map_parser-0.1.9a4 → valetudo_map_parser-0.1.9a6}/SCR/valetudo_map_parser/rooms_handler.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: valetudo-map-parser
3
- Version: 0.1.9a4
3
+ Version: 0.1.9a6
4
4
  Summary: A Python library to parse Valetudo map data returning a PIL Image object.
5
5
  License: Apache-2.0
6
6
  Author: Sandro Cantarella
@@ -97,10 +97,17 @@ class ReImageHandler(BaseHandler, AutoCrop):
97
97
 
98
98
  # Update self.rooms_pos from room_properties for compatibility with other methods
99
99
  self.rooms_pos = []
100
+ room_ids = [] # Collect room IDs for shared.map_rooms
100
101
  for room_id, room_data in room_properties.items():
101
102
  self.rooms_pos.append(
102
103
  {"name": room_data["name"], "outline": room_data["outline"]}
103
104
  )
105
+ # Store the room number (segment ID) for MQTT active zone mapping
106
+ room_ids.append(room_data["number"])
107
+
108
+ # Update shared.map_rooms with the room IDs for MQTT active zone mapping
109
+ self.shared.map_rooms = room_ids
110
+ _LOGGER.debug("Updated shared.map_rooms with room IDs: %s", room_ids)
104
111
 
105
112
  # get the zones and points data
106
113
  zone_properties = await self.async_zone_propriety(zones_data)
@@ -231,8 +238,8 @@ class ReImageHandler(BaseHandler, AutoCrop):
231
238
  if not self.rooms_pos and not self.room_propriety:
232
239
  self.room_propriety = await self.get_rooms_attributes(destinations)
233
240
 
234
- # Always check robot position for zooming
235
- if self.rooms_pos and robot_position:
241
+ # Always check robot position for zooming (fallback)
242
+ if self.rooms_pos and robot_position and not hasattr(self, 'robot_pos'):
236
243
  self.robot_pos = await self.async_get_robot_in_room(
237
244
  (robot_position[0] * 10),
238
245
  (robot_position[1] * 10),
@@ -248,6 +255,68 @@ class ReImageHandler(BaseHandler, AutoCrop):
248
255
  size_x, size_y, background_color
249
256
  )
250
257
  self.img_base_layer = await self.async_copy_array(img_np_array)
258
+
259
+ # Check active zones BEFORE auto-crop to enable proper zoom functionality
260
+ # This needs to run on every frame, not just frame 0
261
+ if (
262
+ self.shared.image_auto_zoom
263
+ and self.shared.vacuum_state == "cleaning"
264
+ and robot_position
265
+ and destinations # Check if we have destinations data for room extraction
266
+ ):
267
+ _LOGGER.debug(
268
+ "%s: Attempting early room extraction for active zone checking",
269
+ self.file_name
270
+ )
271
+ # Extract room data early if we have destinations
272
+ try:
273
+ temp_room_properties = await self.rooms_handler.async_extract_room_properties(
274
+ m_json, destinations
275
+ )
276
+ if temp_room_properties:
277
+ # Create temporary rooms_pos for robot room detection
278
+ temp_rooms_pos = []
279
+ for room_id, room_data in temp_room_properties.items():
280
+ temp_rooms_pos.append(
281
+ {"name": room_data["name"], "outline": room_data["outline"]}
282
+ )
283
+
284
+ # Store original rooms_pos and temporarily use the new one
285
+ original_rooms_pos = self.rooms_pos
286
+ self.rooms_pos = temp_rooms_pos
287
+
288
+ # Perform robot room detection to check active zones
289
+ robot_room_result = await self.async_get_robot_in_room(
290
+ robot_position[0], robot_position[1], robot_position_angle
291
+ )
292
+
293
+ # Restore original rooms_pos
294
+ self.rooms_pos = original_rooms_pos
295
+
296
+ _LOGGER.debug(
297
+ "%s: Early robot room detection for zoom: robot in %s, zooming=%s",
298
+ self.file_name,
299
+ robot_room_result.get("in_room", "unknown"),
300
+ self.zooming
301
+ )
302
+ except Exception as e:
303
+ _LOGGER.debug(
304
+ "%s: Early room extraction failed: %s, falling back to robot-position zoom",
305
+ self.file_name,
306
+ e
307
+ )
308
+ # Fallback to robot-position-based zoom if room extraction fails
309
+ if (
310
+ self.shared.image_auto_zoom
311
+ and self.shared.vacuum_state == "cleaning"
312
+ and robot_position
313
+ ):
314
+ self.zooming = True
315
+ _LOGGER.debug(
316
+ "%s: Enabling fallback robot-position-based zoom",
317
+ self.file_name
318
+ )
319
+
251
320
  return self.img_base_layer, robot_position, robot_position_angle
252
321
 
253
322
  async def _draw_map_elements(
@@ -294,19 +363,32 @@ class ReImageHandler(BaseHandler, AutoCrop):
294
363
  img_np_array, robot_position, robot_position_angle, robot_color
295
364
  )
296
365
 
297
- # Check if zoom should be enabled based on conditions (similar to Hypfer handler)
298
- # For Rand256, robot room detection might happen after image generation
299
- # so we need to check zoom conditions before auto-crop
366
+ # Store robot position for potential zoom function use
367
+ if robot_position:
368
+ self.robot_position = robot_position
369
+
370
+ # Check if zoom should be enabled based on active zones
300
371
  if (
301
372
  self.shared.image_auto_zoom
302
373
  and self.shared.vacuum_state == "cleaning"
303
- and robot_position # Robot position is available
304
- and not self.zooming # Not already enabled
374
+ and robot_position
305
375
  ):
306
- # Enable zooming if all conditions are met
307
- self.zooming = True
308
- # Store robot position for zoom function to use
309
- self.robot_position = robot_position
376
+ # For Rand256, we need to check active zones differently since room data is not available yet
377
+ # Use a simplified approach: enable zoom if any active zones are set
378
+ active_zones = self.shared.rand256_active_zone
379
+ if active_zones and any(zone for zone in active_zones):
380
+ self.zooming = True
381
+ _LOGGER.debug(
382
+ "%s: Enabling zoom for Rand256 - active zones detected: %s",
383
+ self.file_name,
384
+ active_zones
385
+ )
386
+ else:
387
+ self.zooming = False
388
+ _LOGGER.debug(
389
+ "%s: Zoom disabled for Rand256 - no active zones set",
390
+ self.file_name
391
+ )
310
392
 
311
393
  img_np_array = await self.async_auto_trim_and_zoom_image(
312
394
  img_np_array,
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "valetudo-map-parser"
3
- version = "0.1.9a4"
3
+ version = "0.1.9a6"
4
4
  description = "A Python library to parse Valetudo map data returning a PIL Image object."
5
5
  authors = ["Sandro Cantarella <gsca075@gmail.com>"]
6
6
  license = "Apache-2.0"