Closed billyourself closed 1 year ago
hello @billyourself, thanks for your report. It looks there is an issue on the 1.1.4, I will check the last modification I made recently and release the 1.1.5 within tomorrow. It seams to be an issue with the Image_handler module that should be already fixed on the new release I'm going to publish soon. By the way can you please try to setup the integration via the GUI, (remove the configuration from the yaml / restart home assistant / go on device & services and add integrations setup and search "valetudo" and reboot once again. Please note I tested the integration with the Robock V1, if you are still facing issues with the DreamD9 I will add some additional debug logs so that we can get the json data information on the next version so that we can fix this issue with your robot. Thank you really much for your cooperation.
Oops closed the issue by accident.
I tried both GUI and config YAML and the same error occurred for both.
I'll wait for 1.1.5, try again and report back. Thanks!
So, I did some improvement based on your founding, will continue tomorrow and post a complete change list. I'm also including a function that will export the json and the payload received from MQTT. This will be stored in the same folder of the integration (it is the same folder where will store the snapshots) this function will be released on 1.1.5 as soon it will pass the tests (not yet here in github.. but on the real world) I will post also the checks made on this new release. And anyhow.. if this will not work with your vacuum I will do my best to fix it so that we can state that for instance it works with both robots ;)
@billyourself Release 1.1.5v is now available. Please note that there are additional required parameters. So please delete the configuration prior to install the new version and reconfigure the camera from GUI. I guess the issue is now fixed, I was able to reproduce it somehow and after 24h continuous running on the HassOS (PI4) no errors at all. Note the PI4 is my test env. I didn't check it on my production (home) instance yet.. HA is updated to the last version (that anyhow was probably the root cause of the braking code). I'm really happy that you started to use this integration.. so at your disposal for any request and or suggestions.. when hopefully it will work also for you :)
hold on please I just checked the installer and "snapshots" folder is no present.. this cause a warning (as expected) you can create the folder by your on i"valetudo_vacuum_camera/" add the "snapshots" folder. Will check and confirm if the installer will work in few minutes.
okay fixed the release :) the folder is now included on the installer.
Thanks @sca075 - Looks like this issue has been resolved... but we have a new one.
It appears to be decoding the JSON just fine and getting all the map points. The entity now gets a result, although it is just a blank grey image. Error that is the problem this time is 'Error in get_image_from_json: object of type 'NoneType' has no len()'.
Config was done via the UI, more or less the same but I set the rotate and crop as both 0.
Log entries:
2023-07-08 21:01:50.237 DEBUG (Thread-6 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Connected to MQTT broker. 2023-07-08 21:01:50.242 DEBUG (Thread-6 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Received data from MQTT 2023-07-08 21:01:55.238 INFO (SyncWorker_3) [custom_components.valetudo_vacuum_camera.camera] Camera image update process: True 2023-07-08 21:01:55.238 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.connector] Processing data from MQTT 2023-07-08 21:01:55.238 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Decoding PNG to JSON 2023-07-08 21:01:55.239 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Valetudo Json data grabbed 2023-07-08 21:01:55.239 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON 2023-07-08 21:01:55.252 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON Complete 2023-07-08 21:01:55.252 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Reading the json data we got from the MQTT 2023-07-08 21:01:55.252 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Image Size in X and Y: {6554} 2023-07-08 21:01:55.255 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Vacuum JSon ID: {'54097c9f-41a6-4f82-a24a-062f051c09f4'} 2023-07-08 21:01:55.265 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got zone clean: {'no_go_area': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3675, 3690, 3775, 3690, 3775, 3860, 3675, 3860], 'type': 'no_go_area'}, {'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3780, 3770, 3925, 3770, 3925, 3860, 3780, 3860], 'type': 'no_go_area'}]} 2023-07-08 21:01:55.271 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got the points in the json: {'robot_position': [{'__class': 'PointMapEntity', 'metaData': {'angle': 2}, 'points': [3278, 3254], 'type': 'robot_position'}], 'charger_location': [{'__class': 'PointMapEntity', 'metaData': {'angle': 182}, 'points': [3279, 3229], 'type': 'charger_location'}]} 2023-07-08 21:01:55.271 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got robot position: [{'__class': 'PointMapEntity', 'metaData': {'angle': 2}, 'points': [3278, 3254], 'type': 'robot_position'}] 2023-07-08 21:01:55.271 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got charger position: [3279, 3229] 2023-07-08 21:01:55.277 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Drawing image background 2023-07-08 21:01:55.639 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Drawing Zone Clean 2023-07-08 21:01:56.343 ERROR (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Error in get_image_from_json: object of type 'NoneType' has no len() 2023-07-08 21:01:56.387 INFO (SyncWorker_3) [custom_components.valetudo_vacuum_camera.camera] Staring up ... 2023-07-08 21:01:56.406 INFO (SyncWorker_3) [custom_components.valetudo_vacuum_camera.camera] Camera image update complete
It happens usually when it starts for the first time, you just need few cycles to wait that the image is completely finished. Until it is gray the data are not fully loaded.
I will try with rotation and crop 0 In my test for the most I use crop 25 and rotate 180.. (the image is smaller)
I probably got the reason... for [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Drawing Zone Clean 2023-07-08 21:01:56.343 ERROR (SyncWorker_3) please give me few hours and it will be fix.
Thanks, appreciate your quick work on all of this!
okay.. the json structure of your vacuum is a little different from the one I use.. the vacuum as no zone clean but probably rooms, is that correct? I replaced the errors with info messages so that home assistant will be a little more happy.. the image handler will not attempt to draw the zone as per the data as logged are none. The only Error will occur when the position of the robot is not got.. hope this should help to complete the startup sequence. I will let you know how to install the patch in about 30 minutes.
By zone cleaning, do you mean the ability to manually select a rectangular/square area to clean like the screenshot below? If so, yes it has that capability - that screenshot is direct from my Valetudo interface.
It also has rooms (noted as Segments in Valetudo).
Thanks again, I'll await your instructions.
Okay let's give it a try if you go on HACS, click on the integration, then refresh data. Re-download, but before you confirm check the show beta version. There should be a version Select v23.608.02 here the changes discussed are in. So when it finish to install there is to reboot unfortunately to get the new version operative. It will load the image after a while.. then the calibration data will be created as soon the full image is display.. if all get right as it should.. you don't need to reconfigure the camera for this. And yes the clean zones in your json are called differently.. if you have a file explorer or visual studio you will see that in the snapshot folder there is a png and json for sure when we finally get the image..
N.B. if you will finally get the image it would be really appreciated a copy of the json having the "segments" defined, I noticed you have also no_go areas it will be nice to add those functionality to the image_handler. So if you don't mind, I will wait for your feedback...
Okay so I got something to show. I couldn't get it working with 0 rotation/0 cropping (I noticed something in the logs about tile size cannot be larger than frame) so I used your settings.
I then sent the robot to do a quick area clean so the map would push some updates.
That's what I get - it's displaying two rooms but there are many more missing (including the room the robot docks in).
Interestingly, I had debug logging enabled and after about 10 seconds, my entire HA instance crashed and restarted - not sure if related, and my logs show nothing to clue me on to why. Probably worth noting though.
Here's some logs:
2023-07-08 23:22:01.209 DEBUG (Thread-3 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Received data from MQTT 2023-07-08 23:22:02.692 INFO (SyncWorker_9) [custom_components.valetudo_vacuum_camera.camera] Camera image update process: True 2023-07-08 23:22:02.692 DEBUG (SyncWorker_9) [custom_components.valetudo_vacuum_camera.valetudo.connector] Processing data from MQTT 2023-07-08 23:22:02.692 DEBUG (SyncWorker_9) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Decoding PNG to JSON 2023-07-08 23:22:02.692 DEBUG (SyncWorker_9) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Valetudo Json data grabbed 2023-07-08 23:22:02.692 DEBUG (SyncWorker_9) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON 2023-07-08 23:22:02.707 DEBUG (SyncWorker_9) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON Complete 2023-07-08 23:22:02.707 DEBUG (SyncWorker_9) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Reading the json data we got from the MQTT 2023-07-08 23:22:02.707 DEBUG (SyncWorker_9) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Image Size in X and Y: {6554} 2023-07-08 23:22:02.708 DEBUG (SyncWorker_9) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Vacuum JSon ID: {'63398655-bd77-463f-9bf5-4e3dc97a56bf'} 2023-07-08 23:22:02.714 DEBUG (SyncWorker_9) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got zone clean: {'no_go_area': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3675, 3690, 3775, 3690, 3775, 3860, 3675, 3860], 'type': 'no_go_area'}, {'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3780, 3770, 3925, 3770, 3925, 3860, 3780, 3860], 'type': 'no_go_area'}], 'active_zone': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3770, 3641, 3903, 3641, 3903, 3720, 3770, 3720], 'type': 'active_zone'}]} 2023-07-08 23:22:02.716 DEBUG (SyncWorker_9) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got the points in the json: {'robot_position': [{'__class': 'PointMapEntity', 'metaData': {'angle': 269}, 'points': [3848, 3646], 'type': 'robot_position'}], 'charger_location': [{'__class': 'PointMapEntity', 'metaData': {'angle': 184}, 'points': [3280, 3235], 'type': 'charger_location'}]} 2023-07-08 23:22:02.716 DEBUG (SyncWorker_9) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got robot position: [{'__class': 'PointMapEntity', 'metaData': {'angle': 269}, 'points': [3848, 3646], 'type': 'robot_position'}] 2023-07-08 23:22:02.716 DEBUG (SyncWorker_9) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got charger position: [3280, 3235] 2023-07-08 23:22:02.717 DEBUG (SyncWorker_9) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Drawing image background 2023-07-08 23:22:03.232 DEBUG (SyncWorker_9) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Drawing Zone Clean 2023-07-08 23:22:05.288 INFO (SyncWorker_9) [custom_components.valetudo_vacuum_camera.camera] Snapshot image loaded 2023-07-08 23:22:05.500 INFO (SyncWorker_9) [custom_components.valetudo_vacuum_camera.camera] Camera image update complete 2023-07-08 23:22:10.603 DEBUG (Thread-3 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Received data from MQTT 2023-07-08 23:22:12.654 INFO (SyncWorker_1) [custom_components.valetudo_vacuum_camera.camera] Camera image update process: True 2023-07-08 23:22:12.654 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.connector] Processing data from MQTT 2023-07-08 23:22:12.655 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Decoding PNG to JSON 2023-07-08 23:22:12.655 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Valetudo Json data grabbed 2023-07-08 23:22:12.655 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON 2023-07-08 23:22:12.658 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON Complete 2023-07-08 23:22:12.658 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Reading the json data we got from the MQTT 2023-07-08 23:22:12.658 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Image Size in X and Y: {6554} 2023-07-08 23:22:12.658 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Vacuum JSon ID: {'d723aa79-0bae-422e-b369-3aa205223cb6'} 2023-07-08 23:22:12.661 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got zone clean: {'no_go_area': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3675, 3690, 3775, 3690, 3775, 3860, 3675, 3860], 'type': 'no_go_area'}, {'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3780, 3770, 3925, 3770, 3925, 3860, 3780, 3860], 'type': 'no_go_area'}], 'active_zone': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3770, 3641, 3903, 3641, 3903, 3720, 3770, 3720], 'type': 'active_zone'}]} 2023-07-08 23:22:12.664 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got the points in the json: {'robot_position': [{'__class': 'PointMapEntity', 'metaData': {'angle': 65}, 'points': [3781, 3663], 'type': 'robot_position'}], 'charger_location': [{'__class': 'PointMapEntity', 'metaData': {'angle': 184}, 'points': [3280, 3235], 'type': 'charger_location'}]} 2023-07-08 23:22:12.664 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got robot position: [{'__class': 'PointMapEntity', 'metaData': {'angle': 65}, 'points': [3781, 3663], 'type': 'robot_position'}] 2023-07-08 23:22:12.664 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got charger position: [3280, 3235] 2023-07-08 23:22:12.664 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Frame number 1 2023-07-08 23:22:14.013 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Crop Box data: (2458, 2458, 4096, 4096) 2023-07-08 23:22:14.015 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Crop image size: (1638, 1638) 2023-07-08 23:22:14.442 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.camera] Applied image rotation: {180} 2023-07-08 23:22:14.581 INFO (SyncWorker_1) [custom_components.valetudo_vacuum_camera.camera] Camera image update complete 2023-07-08 23:22:18.409 DEBUG (Thread-3 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Received data from MQTT 2023-07-08 23:22:22.658 INFO (SyncWorker_3) [custom_components.valetudo_vacuum_camera.camera] Camera image update process: True 2023-07-08 23:22:22.658 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.connector] Processing data from MQTT 2023-07-08 23:22:22.658 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Decoding PNG to JSON 2023-07-08 23:22:22.658 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Valetudo Json data grabbed 2023-07-08 23:22:22.658 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON 2023-07-08 23:22:22.660 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON Complete 2023-07-08 23:22:22.660 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Reading the json data we got from the MQTT 2023-07-08 23:22:22.660 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Image Size in X and Y: {6554} 2023-07-08 23:22:22.660 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Vacuum JSon ID: {'cfbd2cfc-3adb-459d-a335-6880fb7c50f7'} 2023-07-08 23:22:22.663 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got zone clean: {'no_go_area': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3675, 3690, 3775, 3690, 3775, 3860, 3675, 3860], 'type': 'no_go_area'}, {'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3780, 3770, 3925, 3770, 3925, 3860, 3780, 3860], 'type': 'no_go_area'}], 'active_zone': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3770, 3641, 3903, 3641, 3903, 3720, 3770, 3720], 'type': 'active_zone'}]} 2023-07-08 23:22:22.666 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got the points in the json: {'robot_position': [{'__class': 'PointMapEntity', 'metaData': {'angle': 242}, 'points': [3889, 3671], 'type': 'robot_position'}], 'charger_location': [{'__class': 'PointMapEntity', 'metaData': {'angle': 184}, 'points': [3280, 3235], 'type': 'charger_location'}]} 2023-07-08 23:22:22.666 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got robot position: [{'__class': 'PointMapEntity', 'metaData': {'angle': 242}, 'points': [3889, 3671], 'type': 'robot_position'}] 2023-07-08 23:22:22.666 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got charger position: [3280, 3235] 2023-07-08 23:22:22.667 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Frame number 2 2023-07-08 23:22:24.036 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Crop Box data: (2458, 2458, 4096, 4096) 2023-07-08 23:22:24.036 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Crop image size: (1638, 1638) 2023-07-08 23:22:24.470 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.camera] Applied image rotation: {180} 2023-07-08 23:22:24.621 INFO (SyncWorker_3) [custom_components.valetudo_vacuum_camera.camera] Camera image update complete 2023-07-08 23:22:26.556 DEBUG (Thread-3 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Received data from MQTT 2023-07-08 23:22:27.658 INFO (SyncWorker_1) [custom_components.valetudo_vacuum_camera.camera] Camera image update process: True 2023-07-08 23:22:27.658 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.connector] Processing data from MQTT 2023-07-08 23:22:27.658 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Decoding PNG to JSON 2023-07-08 23:22:27.658 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Valetudo Json data grabbed 2023-07-08 23:22:27.658 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON 2023-07-08 23:22:27.660 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON Complete 2023-07-08 23:22:27.660 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Reading the json data we got from the MQTT 2023-07-08 23:22:27.660 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Image Size in X and Y: {6554} 2023-07-08 23:22:27.660 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Vacuum JSon ID: {'b31e811d-b431-48b6-acfd-3dd8f96c052c'} 2023-07-08 23:22:27.663 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got zone clean: {'no_go_area': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3675, 3690, 3775, 3690, 3775, 3860, 3675, 3860], 'type': 'no_go_area'}, {'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3780, 3770, 3925, 3770, 3925, 3860, 3780, 3860], 'type': 'no_go_area'}], 'active_zone': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3770, 3641, 3903, 3641, 3903, 3720, 3770, 3720], 'type': 'active_zone'}]} 2023-07-08 23:22:27.665 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got the points in the json: {'robot_position': [{'__class': 'PointMapEntity', 'metaData': {'angle': 148}, 'points': [3805, 3681], 'type': 'robot_position'}], 'charger_location': [{'__class': 'PointMapEntity', 'metaData': {'angle': 184}, 'points': [3280, 3235], 'type': 'charger_location'}]} 2023-07-08 23:22:27.665 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got robot position: [{'__class': 'PointMapEntity', 'metaData': {'angle': 148}, 'points': [3805, 3681], 'type': 'robot_position'}] 2023-07-08 23:22:27.665 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got charger position: [3280, 3235] 2023-07-08 23:22:27.666 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Frame number 3 2023-07-08 23:22:28.967 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Crop Box data: (2458, 2458, 4096, 4096) 2023-07-08 23:22:28.967 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Crop image size: (1638, 1638) 2023-07-08 23:22:29.389 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.camera] Applied image rotation: {180} 2023-07-08 23:22:29.532 INFO (SyncWorker_1) [custom_components.valetudo_vacuum_camera.camera] Camera image update complete 2023-07-08 23:22:30.926 DEBUG (Thread-3 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Received data from MQTT 2023-07-08 23:22:32.658 INFO (SyncWorker_3) [custom_components.valetudo_vacuum_camera.camera] Camera image update process: True 2023-07-08 23:22:32.659 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.connector] Processing data from MQTT 2023-07-08 23:22:32.659 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Decoding PNG to JSON 2023-07-08 23:22:32.659 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Valetudo Json data grabbed 2023-07-08 23:22:32.659 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON 2023-07-08 23:22:32.662 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON Complete 2023-07-08 23:22:32.662 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Reading the json data we got from the MQTT 2023-07-08 23:22:32.662 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Image Size in X and Y: {6554} 2023-07-08 23:22:32.662 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Vacuum JSon ID: {'fe29cdfb-918f-46eb-9024-7afada0f43c9'} 2023-07-08 23:22:32.666 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got zone clean: {'no_go_area': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3675, 3690, 3775, 3690, 3775, 3860, 3675, 3860], 'type': 'no_go_area'}, {'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3780, 3770, 3925, 3770, 3925, 3860, 3780, 3860], 'type': 'no_go_area'}], 'active_zone': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3770, 3641, 3903, 3641, 3903, 3720, 3770, 3720], 'type': 'active_zone'}]} 2023-07-08 23:22:32.667 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got the points in the json: {'robot_position': [{'__class': 'PointMapEntity', 'metaData': {'angle': 90}, 'points': [3861, 3683], 'type': 'robot_position'}], 'charger_location': [{'__class': 'PointMapEntity', 'metaData': {'angle': 184}, 'points': [3280, 3235], 'type': 'charger_location'}]} 2023-07-08 23:22:32.667 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got robot position: [{'__class': 'PointMapEntity', 'metaData': {'angle': 90}, 'points': [3861, 3683], 'type': 'robot_position'}] 2023-07-08 23:22:32.667 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got charger position: [3280, 3235] 2023-07-08 23:22:32.668 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Frame number 4 2023-07-08 23:22:33.952 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Crop Box data: (2458, 2458, 4096, 4096) 2023-07-08 23:22:33.953 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Crop image size: (1638, 1638) 2023-07-08 23:22:34.375 DEBUG (SyncWorker_3) [custom_components.valetudo_vacuum_camera.camera] Applied image rotation: {180} 2023-07-08 23:22:34.517 INFO (SyncWorker_3) [custom_components.valetudo_vacuum_camera.camera] Camera image update complete 2023-07-08 23:22:43.210 DEBUG (Thread-3 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Received data from MQTT 2023-07-08 23:22:44.636 DEBUG (Thread-3 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Received data from MQTT 2023-07-08 23:22:46.043 DEBUG (Thread-3 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Received data from MQTT 2023-07-08 23:22:47.662 INFO (SyncWorker_4) [custom_components.valetudo_vacuum_camera.camera] Camera image update process: True 2023-07-08 23:22:47.662 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.connector] Processing data from MQTT 2023-07-08 23:22:47.662 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Decoding PNG to JSON 2023-07-08 23:22:47.662 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Valetudo Json data grabbed 2023-07-08 23:22:47.662 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON 2023-07-08 23:22:47.664 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON Complete 2023-07-08 23:22:47.664 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Reading the json data we got from the MQTT 2023-07-08 23:22:47.664 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Image Size in X and Y: {6554} 2023-07-08 23:22:47.664 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Vacuum JSon ID: {'5134dd91-0a2a-4661-b659-34cf9a6f56e9'} 2023-07-08 23:22:47.667 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got zone clean: {'no_go_area': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3675, 3690, 3775, 3690, 3775, 3860, 3675, 3860], 'type': 'no_go_area'}, {'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3780, 3770, 3925, 3770, 3925, 3860, 3780, 3860], 'type': 'no_go_area'}], 'active_zone': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3770, 3641, 3903, 3641, 3903, 3720, 3770, 3720], 'type': 'active_zone'}]} 2023-07-08 23:22:47.669 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got the points in the json: {'robot_position': [{'__class': 'PointMapEntity', 'metaData': {'angle': 336}, 'points': [3805, 3681], 'type': 'robot_position'}], 'charger_location': [{'__class': 'PointMapEntity', 'metaData': {'angle': 184}, 'points': [3280, 3235], 'type': 'charger_location'}]} 2023-07-08 23:22:47.669 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got robot position: [{'__class': 'PointMapEntity', 'metaData': {'angle': 336}, 'points': [3805, 3681], 'type': 'robot_position'}] 2023-07-08 23:22:47.669 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got charger position: [3280, 3235] 2023-07-08 23:22:47.669 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Frame number 5 2023-07-08 23:22:48.940 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Crop Box data: (2458, 2458, 4096, 4096) 2023-07-08 23:22:48.940 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Crop image size: (1638, 1638) 2023-07-08 23:22:49.326 DEBUG (Thread-3 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Received data from MQTT 2023-07-08 23:22:49.361 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.camera] Applied image rotation: {180} 2023-07-08 23:22:49.511 INFO (SyncWorker_4) [custom_components.valetudo_vacuum_camera.camera] Camera image update complete 2023-07-08 23:22:52.664 INFO (SyncWorker_4) [custom_components.valetudo_vacuum_camera.camera] Camera image update process: True 2023-07-08 23:22:52.664 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.connector] Processing data from MQTT 2023-07-08 23:22:52.664 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Decoding PNG to JSON 2023-07-08 23:22:52.664 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Valetudo Json data grabbed 2023-07-08 23:22:52.664 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON 2023-07-08 23:22:52.668 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON Complete 2023-07-08 23:22:52.668 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Reading the json data we got from the MQTT 2023-07-08 23:22:52.668 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Image Size in X and Y: {6554} 2023-07-08 23:22:52.668 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Vacuum JSon ID: {'4327b6cf-e632-4693-97e6-eafc7d41b13a'} 2023-07-08 23:22:52.671 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got zone clean: {'no_go_area': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3675, 3690, 3775, 3690, 3775, 3860, 3675, 3860], 'type': 'no_go_area'}, {'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3780, 3770, 3925, 3770, 3925, 3860, 3780, 3860], 'type': 'no_go_area'}], 'active_zone': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3770, 3641, 3903, 3641, 3903, 3720, 3770, 3720], 'type': 'active_zone'}]} 2023-07-08 23:22:52.673 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got the points in the json: {'robot_position': [{'__class': 'PointMapEntity', 'metaData': {'angle': 336}, 'points': [3752, 3565], 'type': 'robot_position'}], 'charger_location': [{'__class': 'PointMapEntity', 'metaData': {'angle': 184}, 'points': [3280, 3235], 'type': 'charger_location'}]} 2023-07-08 23:22:52.673 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got robot position: [{'__class': 'PointMapEntity', 'metaData': {'angle': 336}, 'points': [3752, 3565], 'type': 'robot_position'}] 2023-07-08 23:22:52.673 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got charger position: [3280, 3235] 2023-07-08 23:22:52.673 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Drawing image background 2023-07-08 23:22:52.947 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Drawing Zone Clean 2023-07-08 23:22:54.866 INFO (SyncWorker_4) [custom_components.valetudo_vacuum_camera.camera] Camera image update complete 2023-07-08 23:22:56.963 DEBUG (Thread-3 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Received data from MQTT 2023-07-08 23:22:57.665 INFO (SyncWorker_1) [custom_components.valetudo_vacuum_camera.camera] Camera image update process: True 2023-07-08 23:22:57.665 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.connector] Processing data from MQTT 2023-07-08 23:22:57.665 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Decoding PNG to JSON 2023-07-08 23:22:57.665 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Valetudo Json data grabbed 2023-07-08 23:22:57.665 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON 2023-07-08 23:22:57.667 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON Complete 2023-07-08 23:22:57.667 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Reading the json data we got from the MQTT 2023-07-08 23:22:57.667 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Image Size in X and Y: {6554} 2023-07-08 23:22:57.667 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Vacuum JSon ID: {'0d25d1b9-99de-45b6-b6d5-21f775dfe0e9'} 2023-07-08 23:22:57.670 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got zone clean: {'no_go_area': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3675, 3690, 3775, 3690, 3775, 3860, 3675, 3860], 'type': 'no_go_area'}, {'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3780, 3770, 3925, 3770, 3925, 3860, 3780, 3860], 'type': 'no_go_area'}], 'active_zone': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3770, 3641, 3903, 3641, 3903, 3720, 3770, 3720], 'type': 'active_zone'}]} 2023-07-08 23:22:57.672 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got the points in the json: {'robot_position': [{'__class': 'PointMapEntity', 'metaData': {'angle': 309}, 'points': [3619, 3382], 'type': 'robot_position'}], 'charger_location': [{'__class': 'PointMapEntity', 'metaData': {'angle': 184}, 'points': [3280, 3235], 'type': 'charger_location'}]} 2023-07-08 23:22:57.672 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got robot position: [{'__class': 'PointMapEntity', 'metaData': {'angle': 309}, 'points': [3619, 3382], 'type': 'robot_position'}] 2023-07-08 23:22:57.672 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got charger position: [3280, 3235] 2023-07-08 23:22:57.672 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Frame number 1 2023-07-08 23:22:58.992 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Crop Box data: (2458, 2458, 4096, 4096) 2023-07-08 23:22:58.992 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Crop image size: (1638, 1638) 2023-07-08 23:22:59.421 DEBUG (SyncWorker_1) [custom_components.valetudo_vacuum_camera.camera] Applied image rotation: {180} 2023-07-08 23:22:59.564 INFO (SyncWorker_1) [custom_components.valetudo_vacuum_camera.camera] Camera image update complete 2023-07-08 23:23:01.380 DEBUG (Thread-3 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Received data from MQTT 2023-07-08 23:23:02.667 INFO (SyncWorker_7) [custom_components.valetudo_vacuum_camera.camera] Camera image update process: True 2023-07-08 23:23:02.668 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.valetudo.connector] Processing data from MQTT 2023-07-08 23:23:02.668 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Decoding PNG to JSON 2023-07-08 23:23:02.668 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Valetudo Json data grabbed 2023-07-08 23:23:02.668 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON 2023-07-08 23:23:02.670 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON Complete 2023-07-08 23:23:02.670 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Reading the json data we got from the MQTT 2023-07-08 23:23:02.670 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Image Size in X and Y: {6554} 2023-07-08 23:23:02.670 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Vacuum JSon ID: {'af38cd64-2422-46e9-848e-726c11822164'} 2023-07-08 23:23:02.674 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got zone clean: {'no_go_area': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3675, 3690, 3775, 3690, 3775, 3860, 3675, 3860], 'type': 'no_go_area'}, {'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3780, 3770, 3925, 3770, 3925, 3860, 3780, 3860], 'type': 'no_go_area'}], 'active_zone': [{'__class': 'PolygonMapEntity', 'metaData': {}, 'points': [3770, 3641, 3903, 3641, 3903, 3720, 3770, 3720], 'type': 'active_zone'}]} 2023-07-08 23:23:02.675 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got the points in the json: {'robot_position': [{'__class': 'PointMapEntity', 'metaData': {'angle': 266}, 'points': [3515, 3386], 'type': 'robot_position'}], 'charger_location': [{'__class': 'PointMapEntity', 'metaData': {'angle': 184}, 'points': [3280, 3235], 'type': 'charger_location'}]} 2023-07-08 23:23:02.676 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got robot position: [{'__class': 'PointMapEntity', 'metaData': {'angle': 266}, 'points': [3515, 3386], 'type': 'robot_position'}] 2023-07-08 23:23:02.676 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Got charger position: [3280, 3235] 2023-07-08 23:23:02.677 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Frame number 2 2023-07-08 23:23:03.995 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Crop Box data: (2458, 2458, 4096, 4096) 2023-07-08 23:23:03.996 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.valetudo.image_handler] Crop image size: (1638, 1638) 2023-07-08 23:23:04.419 DEBUG (SyncWorker_7) [custom_components.valetudo_vacuum_camera.camera] Applied image rotation: {180} 2023-07-08 23:23:04.564 INFO (SyncWorker_7) [custom_components.valetudo_vacuum_camera.camera] Camera image update complete 2023-07-08 23:23:10.696 DEBUG (Thread-3 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Received data from MQTT
Here's the map JSON as requested:
{ "__class": "ValetudoMap", "metaData": { "version": 2, "nonce": "bf5ba661-c319-4a43-a371-ed5f566ef926", "totalLayerArea": 837600 }, "size": { "x": 6554, "y": 6554 }, "pixelSize": 5, "layers": [ { "__class": "MapLayer", "metaData": { "segmentId": "1", "active": false, "source": "regular", "name": "Study", "area": 63775 }, "type": "segment", "pixels": [], "dimensions": { "x": { "min": 615, "max": 681, "mid": 648, "avg": 649 }, "y": { "min": 500, "max": 549, "mid": 525, "avg": 526 }, "pixelCount": 2551 }, "compressedPixels": [ 628, 500, 2, 627, 501, 4, 637, 501, 34, 627, 502, 3, 636, 502, 37, 626, 503, 47, 626, 504, 47, 627, 505, 46, 627, 506, 46, 627, 507, 46, 627, 508, 46, 626, 509, 47, 626, 510, 47, 626, 511, 47, 626, 512, 47, 628, 513, 45, 629, 514, 44, 629, 515, 44, 629, 516, 44, 629, 517, 44, 615, 518, 11, 629, 518, 44, 615, 519, 14, 630, 519, 43, 615, 520, 14, 630, 520, 43, 617, 521, 12, 630, 521, 43, 615, 522, 14, 631, 522, 3, 636, 522, 37, 615, 523, 10, 636, 523, 37, 615, 524, 9, 635, 524, 38, 615, 525, 9, 633, 525, 40, 615, 526, 12, 632, 526, 41, 617, 527, 11, 633, 527, 40, 615, 528, 13, 634, 528, 39, 615, 529, 12, 629, 529, 2, 635, 529, 38, 615, 530, 12, 628, 530, 6, 635, 530, 38, 615, 531, 12, 628, 531, 42, 615, 532, 65, 615, 533, 67, 615, 534, 1, 617, 534, 65, 617, 535, 8, 627, 535, 55, 616, 536, 5, 622, 536, 3, 627, 536, 55, 623, 537, 59, 623, 538, 59, 623, 539, 59, 623, 540, 59, 622, 541, 60, 622, 542, 58, 622, 543, 58, 622, 544, 60, 622, 545, 60, 622, 546, 60, 623, 547, 59, 625, 548, 57, 667, 549, 13 ] }, { "__class": "MapLayer", "metaData": { "segmentId": "2", "active": false, "source": "regular", "name": "Bedroom", "area": 106550 }, "type": "segment", "pixels": [], "dimensions": { "x": { "min": 685, "max": 752, "mid": 719, "avg": 717 }, "y": { "min": 503, "max": 572, "mid": 538, "avg": 538 }, "pixelCount": 4262 }, "compressedPixels": [ 686, 503, 18, 736, 503, 7, 686, 504, 18, 736, 504, 8, 686, 505, 8, 696, 505, 8, 705, 505, 29, 735, 505, 8, 696, 506, 47, 696, 507, 47, 686, 508, 10, 697, 508, 46, 686, 509, 57, 686, 510, 66, 686, 511, 66, 686, 512, 66, 686, 513, 33, 720, 513, 11, 733, 513, 19, 686, 514, 33, 720, 514, 11, 733, 514, 19, 686, 515, 33, 720, 515, 32, 686, 516, 33, 720, 516, 32, 686, 517, 33, 720, 517, 12, 734, 517, 18, 686, 518, 33, 720, 518, 12, 734, 518, 18, 686, 519, 33, 720, 519, 32, 686, 520, 33, 720, 520, 32, 686, 521, 33, 720, 521, 32, 686, 522, 33, 720, 522, 32, 686, 523, 33, 720, 523, 29, 751, 523, 1, 686, 524, 18, 706, 524, 13, 720, 524, 29, 686, 525, 18, 706, 525, 13, 720, 525, 14, 735, 525, 14, 686, 526, 33, 720, 526, 29, 686, 527, 33, 720, 527, 29, 686, 528, 33, 720, 528, 29, 686, 529, 33, 720, 529, 29, 686, 530, 33, 720, 530, 29, 686, 531, 33, 720, 531, 29, 686, 532, 33, 720, 532, 29, 686, 533, 33, 720, 533, 29, 686, 534, 29, 717, 534, 2, 720, 534, 29, 686, 535, 29, 717, 535, 2, 720, 535, 29, 686, 536, 33, 720, 536, 29, 686, 537, 33, 720, 537, 29, 686, 538, 33, 720, 538, 29, 686, 539, 63, 686, 540, 63, 686, 541, 63, 686, 542, 63, 686, 543, 63, 686, 544, 33, 721, 544, 12, 735, 544, 14, 686, 545, 33, 721, 545, 12, 735, 545, 14, 686, 546, 63, 686, 547, 63, 686, 548, 63, 686, 549, 63, 686, 550, 63, 686, 551, 63, 686, 552, 63, 686, 553, 63, 686, 554, 63, 685, 555, 64, 685, 556, 64, 685, 557, 64, 685, 558, 64, 685, 559, 64, 685, 560, 64, 685, 561, 64, 685, 562, 61, 685, 563, 60, 685, 564, 59, 747, 564, 2, 685, 565, 59, 746, 565, 6, 685, 566, 59, 745, 566, 8, 685, 567, 59, 746, 567, 7, 685, 568, 59, 746, 568, 7, 687, 569, 57, 746, 569, 7, 694, 570, 51, 747, 570, 5, 694, 571, 52, 748, 571, 5, 694, 572, 52, 748, 572, 4 ] }, { "__class": "MapLayer", "metaData": { "segmentId": "3", "active": false, "source": "regular", "name": "Bathroom", "area": 19800 }, "type": "segment", "pixels": [], "dimensions": { "x": { "min": 628, "max": 660, "mid": 644, "avg": 644 }, "y": { "min": 553, "max": 586, "mid": 570, "avg": 572 }, "pixelCount": 792 }, "compressedPixels": [ 655, 553, 6, 655, 554, 6, 655, 555, 6, 655, 556, 6, 655, 557, 6, 655, 558, 6, 638, 559, 11, 655, 559, 6, 638, 560, 10, 638, 561, 14, 653, 561, 1, 657, 561, 4, 637, 562, 24, 628, 563, 33, 628, 564, 33, 628, 565, 33, 628, 566, 33, 628, 567, 33, 628, 568, 33, 628, 569, 31, 628, 570, 31, 628, 571, 31, 628, 572, 27, 656, 572, 1, 628, 573, 27, 628, 574, 27, 628, 575, 27, 628, 576, 28, 628, 577, 28, 628, 578, 28, 628, 579, 29, 628, 580, 29, 628, 581, 29, 628, 582, 30, 629, 583, 1, 631, 583, 27, 631, 584, 27, 636, 585, 23, 635, 586, 7 ] }, { "__class": "MapLayer", "metaData": { "segmentId": "4", "active": false, "source": "regular", "name": "Guest", "area": 54075 }, "type": "segment", "pixels": [], "dimensions": { "x": { "min": 683, "max": 734, "mid": 709, "avg": 710 }, "y": { "min": 587, "max": 642, "mid": 615, "avg": 613 }, "pixelCount": 2163 }, "compressedPixels": [ 703, 587, 26, 703, 588, 26, 683, 589, 6, 702, 589, 27, 683, 590, 17, 702, 590, 27, 683, 591, 45, 683, 592, 46, 683, 593, 46, 683, 594, 46, 683, 595, 46, 683, 596, 47, 731, 596, 1, 734, 596, 1, 683, 597, 52, 683, 598, 52, 683, 599, 52, 683, 600, 52, 683, 601, 48, 733, 601, 2, 683, 602, 48, 686, 603, 45, 686, 604, 45, 686, 605, 45, 686, 606, 45, 685, 607, 46, 685, 608, 46, 685, 609, 46, 685, 610, 46, 685, 611, 46, 698, 612, 33, 698, 613, 33, 698, 614, 33, 697, 615, 34, 697, 616, 34, 697, 617, 34, 697, 618, 34, 697, 619, 34, 697, 620, 34, 697, 621, 34, 697, 622, 34, 697, 623, 34, 697, 624, 34, 697, 625, 34, 697, 626, 34, 697, 627, 34, 697, 628, 34, 697, 629, 34, 697, 630, 34, 697, 631, 34, 697, 632, 34, 697, 633, 34, 697, 634, 34, 697, 635, 31, 729, 635, 2, 697, 636, 32, 697, 637, 32, 697, 638, 34, 697, 639, 34, 697, 640, 34, 697, 641, 25, 723, 641, 6, 697, 642, 31 ] }, { "__class": "MapLayer", "metaData": { "segmentId": "5", "active": false, "source": "regular", "name": "Laundry", "area": 21675 }, "type": "segment", "pixels": [], "dimensions": { "x": { "min": 611, "max": 658, "mid": 635, "avg": 636 }, "y": { "min": 611, "max": 641, "mid": 626, "avg": 622 }, "pixelCount": 867 }, "compressedPixels": [ 630, 611, 29, 630, 612, 29, 625, 613, 1, 630, 613, 29, 625, 614, 34, 625, 615, 34, 624, 616, 35, 611, 617, 2, 624, 617, 34, 611, 618, 3, 623, 618, 35, 611, 619, 47, 611, 620, 47, 611, 621, 47, 611, 622, 47, 611, 623, 47, 611, 624, 47, 611, 625, 47, 611, 626, 40, 613, 627, 38, 613, 628, 25, 644, 628, 7, 613, 629, 25, 646, 629, 5, 613, 630, 25, 639, 630, 5, 646, 630, 5, 613, 631, 14, 639, 631, 5, 646, 631, 5, 639, 632, 5, 646, 632, 5, 639, 633, 5, 646, 633, 5, 639, 634, 5, 649, 634, 2, 639, 635, 5, 639, 636, 5, 646, 636, 2, 649, 636, 2, 639, 637, 5, 646, 637, 5, 639, 638, 3, 646, 638, 5, 646, 639, 5, 646, 640, 5, 646, 641, 5 ] }, { "__class": "MapLayer", "metaData": { "segmentId": "6", "active": false, "source": "regular", "name": "Front door", "area": 31800 }, "type": "segment", "pixels": [], "dimensions": { "x": { "min": 715, "max": 752, "mid": 734, "avg": 735 }, "y": { "min": 646, "max": 684, "mid": 665, "avg": 665 }, "pixelCount": 1272 }, "compressedPixels": [ 724, 646, 29, 724, 647, 29, 724, 648, 29, 724, 649, 29, 726, 650, 27, 726, 651, 27, 724, 652, 29, 724, 653, 29, 724, 654, 29, 724, 655, 29, 725, 656, 28, 725, 657, 28, 725, 658, 28, 717, 659, 36, 717, 660, 36, 717, 661, 36, 717, 662, 36, 717, 663, 36, 717, 664, 35, 717, 665, 35, 715, 666, 37, 715, 667, 37, 715, 668, 38, 715, 669, 38, 715, 670, 37, 715, 671, 36, 715, 672, 37, 715, 673, 38, 715, 674, 38, 715, 675, 38, 715, 676, 36, 715, 677, 36, 715, 678, 36, 715, 679, 36, 715, 680, 37, 717, 681, 3, 723, 681, 22, 746, 681, 6, 723, 682, 22, 723, 683, 22, 723, 684, 22 ] }, { "__class": "MapLayer", "metaData": { "segmentId": "7", "active": false, "source": "regular", "name": "Lounge", "area": 236000 }, "type": "segment", "pixels": [], "dimensions": { "x": { "min": 663, "max": 815, "mid": 739, "avg": 737 }, "y": { "min": 685, "max": 771, "mid": 728, "avg": 732 }, "pixelCount": 9440 }, "compressedPixels": [ 716, 685, 5, 722, 685, 23, 791, 685, 8, 716, 686, 29, 789, 686, 10, 716, 687, 29, 789, 687, 10, 716, 688, 29, 790, 688, 7, 801, 688, 3, 716, 689, 29, 791, 689, 6, 800, 689, 5, 716, 690, 29, 790, 690, 7, 800, 690, 5, 716, 691, 33, 791, 691, 6, 800, 691, 5, 716, 692, 33, 791, 692, 7, 800, 692, 5, 807, 692, 2, 810, 692, 2, 716, 693, 33, 778, 693, 20, 801, 693, 1, 806, 693, 7, 716, 694, 33, 763, 694, 4, 778, 694, 21, 806, 694, 8, 716, 695, 88, 806, 695, 8, 716, 696, 89, 806, 696, 8, 716, 697, 89, 806, 697, 8, 716, 698, 90, 807, 698, 6, 716, 699, 83, 801, 699, 5, 808, 699, 4, 716, 700, 83, 801, 700, 6, 811, 700, 1, 716, 701, 92, 716, 702, 95, 716, 703, 85, 803, 703, 8, 716, 704, 85, 803, 704, 7, 716, 705, 94, 716, 706, 94, 716, 707, 94, 678, 708, 5, 685, 708, 112, 677, 709, 6, 685, 709, 112, 677, 710, 6, 685, 710, 112, 676, 711, 8, 686, 711, 3, 691, 711, 6, 698, 711, 99, 676, 712, 8, 686, 712, 3, 691, 712, 106, 676, 713, 8, 686, 713, 111, 674, 714, 1, 677, 714, 6, 685, 714, 112, 671, 715, 4, 677, 715, 5, 685, 715, 112, 671, 716, 4, 678, 716, 4, 684, 716, 113, 671, 717, 4, 676, 717, 1, 679, 717, 2, 683, 717, 114, 671, 718, 3, 676, 718, 121, 671, 719, 3, 676, 719, 121, 671, 720, 3, 676, 720, 121, 674, 721, 123, 674, 722, 123, 671, 723, 126, 671, 724, 126, 672, 725, 125, 672, 726, 125, 671, 727, 126, 663, 728, 1, 670, 728, 127, 663, 729, 134, 663, 730, 134, 663, 731, 134, 663, 732, 134, 663, 733, 134, 663, 734, 134, 663, 735, 134, 663, 736, 134, 664, 737, 71, 737, 737, 19, 758, 737, 39, 664, 738, 70, 738, 738, 18, 758, 738, 39, 664, 739, 71, 747, 739, 50, 664, 740, 76, 750, 740, 47, 664, 741, 76, 751, 741, 46, 664, 742, 76, 753, 742, 44, 664, 743, 76, 754, 743, 43, 664, 744, 71, 754, 744, 43, 664, 745, 71, 754, 745, 43, 664, 746, 71, 754, 746, 43, 664, 747, 71, 741, 747, 5, 754, 747, 43, 664, 748, 71, 741, 748, 6, 753, 748, 44, 664, 749, 71, 741, 749, 6, 752, 749, 45, 664, 750, 71, 740, 750, 7, 751, 750, 46, 664, 751, 71, 739, 751, 7, 749, 751, 36, 787, 751, 10, 664, 752, 71, 739, 752, 7, 749, 752, 34, 787, 752, 16, 804, 752, 12, 664, 753, 70, 739, 753, 7, 749, 753, 10, 761, 753, 22, 785, 753, 18, 804, 753, 12, 664, 754, 70, 749, 754, 10, 761, 754, 22, 785, 754, 31, 664, 755, 73, 749, 755, 13, 763, 755, 11, 779, 755, 37, 663, 756, 74, 750, 756, 11, 764, 756, 10, 779, 756, 37, 663, 757, 74, 747, 757, 13, 779, 757, 37, 663, 758, 74, 747, 758, 14, 778, 758, 38, 671, 759, 66, 747, 759, 13, 779, 759, 36, 672, 760, 65, 747, 760, 13, 780, 760, 36, 666, 761, 1, 669, 761, 1, 673, 761, 64, 747, 761, 14, 775, 761, 4, 781, 761, 35, 665, 762, 6, 673, 762, 64, 747, 762, 3, 752, 762, 9, 771, 762, 2, 776, 762, 3, 781, 762, 4, 787, 762, 28, 665, 763, 72, 747, 763, 3, 752, 763, 10, 764, 763, 1, 771, 763, 3, 776, 763, 4, 781, 763, 4, 665, 764, 73, 747, 764, 15, 764, 764, 21, 665, 765, 73, 751, 765, 28, 781, 765, 4, 665, 766, 73, 751, 766, 3, 756, 766, 23, 781, 766, 4, 665, 767, 77, 756, 767, 29, 665, 768, 77, 756, 768, 29, 665, 769, 6, 672, 769, 70, 747, 769, 4, 755, 769, 30, 672, 770, 20, 693, 770, 41, 737, 770, 4, 747, 770, 5, 761, 770, 22, 672, 771, 62, 737, 771, 5, 747, 771, 5, 760, 771, 23 ] }, { "__class": "MapLayer", "metaData": { "segmentId": "8", "active": false, "source": "regular", "name": "Dining", "area": 129550 }, "type": "segment", "pixels": [], "dimensions": { "x": { "min": 613, "max": 714, "mid": 664, "avg": 667 }, "y": { "min": 645, "max": 704, "mid": 675, "avg": 676 }, "pixelCount": 5182 }, "compressedPixels": [ 665, 645, 15, 646, 646, 67, 646, 647, 67, 646, 648, 67, 646, 649, 67, 646, 650, 3, 651, 650, 62, 646, 651, 3, 651, 651, 62, 646, 652, 67, 646, 653, 67, 646, 654, 67, 646, 655, 67, 646, 656, 67, 646, 657, 67, 633, 658, 80, 633, 659, 80, 633, 660, 46, 681, 660, 32, 613, 661, 66, 681, 661, 32, 613, 662, 100, 613, 663, 100, 613, 664, 100, 615, 665, 98, 615, 666, 60, 676, 666, 39, 615, 667, 100, 615, 668, 100, 615, 669, 100, 615, 670, 50, 667, 670, 48, 615, 671, 50, 667, 671, 22, 691, 671, 24, 615, 672, 74, 691, 672, 24, 615, 673, 100, 615, 674, 100, 615, 675, 100, 615, 676, 100, 613, 677, 102, 613, 678, 102, 613, 679, 102, 613, 680, 102, 613, 681, 99, 613, 682, 99, 613, 683, 52, 667, 683, 46, 613, 684, 52, 667, 684, 22, 691, 684, 22, 615, 685, 74, 691, 685, 22, 613, 686, 100, 613, 687, 100, 613, 688, 54, 669, 688, 18, 689, 688, 24, 613, 689, 54, 669, 689, 18, 689, 689, 24, 613, 690, 100, 613, 691, 100, 613, 692, 100, 613, 693, 100, 613, 694, 21, 640, 694, 73, 613, 695, 21, 640, 695, 73, 613, 696, 20, 640, 696, 73, 614, 697, 19, 639, 697, 74, 616, 698, 18, 639, 698, 74, 639, 699, 74, 639, 700, 74, 639, 701, 74, 639, 702, 73, 639, 703, 73, 639, 704, 15, 655, 704, 5 ] }, { "__class": "MapLayer", "metaData": { "segmentId": "9", "active": false, "source": "regular", "name": "Kitchen", "area": 46200 }, "type": "segment", "pixels": [], "dimensions": { "x": { "min": 623, "max": 662, "mid": 643, "avg": 641 }, "y": { "min": 705, "max": 759, "mid": 732, "avg": 735 }, "pixelCount": 1848 }, "compressedPixels": [ 639, 705, 13, 655, 705, 5, 639, 706, 13, 654, 706, 5, 639, 707, 13, 654, 707, 6, 639, 708, 13, 654, 708, 6, 640, 709, 13, 655, 709, 5, 640, 710, 14, 655, 710, 5, 640, 711, 14, 623, 712, 31, 623, 713, 31, 623, 714, 31, 623, 715, 31, 623, 716, 31, 623, 717, 31, 623, 718, 31, 623, 719, 31, 623, 720, 31, 623, 721, 31, 623, 722, 31, 623, 723, 31, 623, 724, 31, 623, 725, 31, 623, 726, 31, 623, 727, 31, 623, 728, 37, 623, 729, 37, 623, 730, 37, 623, 731, 37, 623, 732, 37, 623, 733, 37, 623, 734, 37, 623, 735, 37, 623, 736, 37, 623, 737, 36, 623, 738, 37, 623, 739, 40, 623, 740, 40, 623, 741, 40, 623, 742, 40, 623, 743, 40, 623, 744, 40, 623, 745, 40, 623, 746, 40, 623, 747, 40, 623, 748, 40, 623, 749, 40, 623, 750, 40, 623, 751, 40, 623, 752, 40, 623, 753, 40, 623, 754, 36, 623, 755, 37, 623, 756, 37, 623, 757, 37, 623, 758, 37, 623, 759, 37 ] }, { "__class": "MapLayer", "metaData": { "segmentId": "10", "active": false, "source": "regular", "name": "Toilet", "area": 10325 }, "type": "segment", "pixels": [], "dimensions": { "x": { "min": 613, "max": 641, "mid": 627, "avg": 628 }, "y": { "min": 589, "max": 606, "mid": 598, "avg": 597 }, "pixelCount": 413 }, "compressedPixels": [ 616, 589, 24, 616, 590, 26, 617, 591, 24, 617, 592, 25, 613, 593, 2, 616, 593, 26, 613, 594, 29, 613, 595, 8, 623, 595, 19, 613, 596, 3, 618, 596, 1, 624, 596, 18, 613, 597, 2, 624, 597, 18, 624, 598, 18, 618, 599, 3, 623, 599, 19, 616, 600, 26, 616, 601, 26, 616, 602, 26, 616, 603, 23, 616, 604, 19, 616, 605, 14, 616, 606, 14 ] }, { "__class": "MapLayer", "metaData": { "segmentId": "11", "active": false, "source": "regular", "name": "Hallway", "area": 53900 }, "type": "segment", "pixels": [], "dimensions": { "x": { "min": 642, "max": 684, "mid": 663, "avg": 669 }, "y": { "min": 550, "max": 644, "mid": 597, "avg": 596 }, "pixelCount": 2156 }, "compressedPixels": [ 667, 550, 15, 666, 551, 16, 665, 552, 16, 665, 553, 16, 664, 554, 18, 664, 555, 21, 664, 556, 21, 664, 557, 21, 664, 558, 21, 664, 559, 21, 664, 560, 21, 664, 561, 21, 664, 562, 21, 664, 563, 21, 664, 564, 21, 664, 565, 21, 664, 566, 21, 664, 567, 21, 664, 568, 21, 664, 569, 21, 664, 570, 17, 664, 571, 18, 664, 572, 18, 664, 573, 18, 664, 574, 18, 664, 575, 18, 664, 576, 18, 664, 577, 18, 664, 578, 18, 664, 579, 18, 664, 580, 18, 664, 581, 18, 664, 582, 18, 664, 583, 18, 664, 584, 18, 664, 585, 18, 647, 586, 12, 664, 586, 18, 647, 587, 13, 664, 587, 18, 647, 588, 13, 664, 588, 18, 646, 589, 14, 664, 589, 19, 646, 590, 17, 664, 590, 19, 646, 591, 37, 646, 592, 37, 642, 593, 1, 644, 593, 39, 642, 594, 1, 644, 594, 39, 642, 595, 1, 644, 595, 39, 642, 596, 1, 644, 596, 39, 642, 597, 1, 644, 597, 39, 642, 598, 1, 644, 598, 39, 642, 599, 1, 644, 599, 39, 642, 600, 1, 644, 600, 39, 642, 601, 1, 644, 601, 39, 642, 602, 1, 644, 602, 39, 644, 603, 38, 646, 604, 35, 646, 605, 36, 646, 606, 36, 646, 607, 14, 664, 607, 18, 647, 608, 13, 664, 608, 18, 647, 609, 13, 664, 609, 18, 647, 610, 12, 664, 610, 18, 664, 611, 18, 664, 612, 18, 664, 613, 18, 664, 614, 18, 664, 615, 18, 664, 616, 18, 664, 617, 18, 664, 618, 18, 664, 619, 18, 664, 620, 18, 664, 621, 18, 664, 622, 18, 664, 623, 18, 664, 624, 18, 664, 625, 18, 664, 626, 16, 664, 627, 16, 664, 628, 16, 664, 629, 16, 664, 630, 16, 664, 631, 16, 664, 632, 16, 664, 633, 16, 664, 634, 16, 664, 635, 16, 664, 636, 16, 664, 637, 16, 664, 638, 16, 664, 639, 16, 664, 640, 16, 664, 641, 16, 665, 642, 15, 666, 643, 14, 666, 644, 14 ] }, { "__class": "MapLayer", "metaData": { "area": 63950 }, "type": "wall", "pixels": [], "dimensions": { "x": { "min": 608, "max": 816, "mid": 712, "avg": 693 }, "y": { "min": 499, "max": 773, "mid": 636, "avg": 644 }, "pixelCount": 2558 }, "compressedPixels": [ 626, 499, 4, 637, 499, 8, 624, 500, 3, 634, 500, 3, 644, 500, 29, 624, 501, 1, 634, 501, 1, 672, 501, 2, 685, 501, 20, 735, 501, 10, 624, 502, 1, 630, 502, 5, 673, 502, 1, 684, 502, 2, 704, 502, 1, 735, 502, 1, 744, 502, 1, 624, 503, 1, 673, 503, 1, 684, 503, 1, 704, 503, 32, 744, 503, 1, 624, 504, 1, 673, 504, 1, 684, 504, 1, 744, 504, 1, 624, 505, 1, 673, 505, 1, 684, 505, 1, 744, 505, 1, 624, 506, 1, 673, 506, 1, 684, 506, 1, 688, 506, 1, 690, 506, 6, 744, 506, 1, 624, 507, 1, 673, 507, 1, 684, 507, 2, 744, 507, 1, 624, 508, 1, 673, 508, 1, 684, 508, 1, 743, 508, 11, 624, 509, 1, 673, 509, 1, 684, 509, 1, 753, 509, 1, 623, 510, 2, 673, 510, 1, 684, 510, 1, 753, 510, 1, 623, 511, 1, 673, 511, 1, 684, 511, 1, 753, 511, 1, 623, 512, 2, 673, 512, 1, 684, 512, 1, 753, 512, 1, 624, 513, 2, 673, 513, 1, 684, 513, 1, 753, 513, 1, 625, 514, 3, 673, 514, 1, 684, 514, 1, 753, 514, 1, 613, 515, 2, 627, 515, 1, 673, 515, 1, 684, 515, 1, 753, 515, 1, 613, 516, 1, 618, 516, 1, 627, 516, 1, 673, 516, 1, 684, 516, 1, 753, 516, 1, 613, 517, 1, 619, 517, 7, 627, 517, 1, 673, 517, 1, 684, 517, 1, 753, 517, 1, 613, 518, 1, 626, 518, 2, 673, 518, 1, 684, 518, 1, 753, 518, 1, 613, 519, 1, 673, 519, 1, 684, 519, 1, 753, 519, 1, 613, 520, 1, 673, 520, 1, 684, 520, 1, 753, 520, 1, 613, 521, 1, 673, 521, 1, 684, 521, 1, 753, 521, 1, 613, 522, 1, 673, 522, 1, 684, 522, 1, 753, 522, 1, 613, 523, 1, 673, 523, 1, 684, 523, 1, 753, 523, 1, 613, 524, 1, 673, 524, 1, 684, 524, 1, 750, 524, 1, 752, 524, 2, 613, 525, 1, 673, 525, 1, 684, 525, 1, 751, 525, 2, 613, 526, 1, 628, 526, 3, 673, 526, 1, 684, 526, 1, 752, 526, 1, 613, 527, 1, 628, 527, 3, 673, 527, 1, 684, 527, 1, 752, 527, 1, 613, 528, 1, 628, 528, 1, 673, 528, 1, 684, 528, 1, 752, 528, 1, 613, 529, 1, 673, 529, 1, 684, 529, 1, 751, 529, 2, 613, 530, 1, 673, 530, 4, 684, 530, 1, 751, 530, 2, 613, 531, 1, 676, 531, 9, 752, 531, 1, 613, 532, 1, 683, 532, 2, 752, 532, 1, 613, 533, 1, 682, 533, 3, 752, 533, 1, 613, 534, 1, 682, 534, 1, 684, 534, 1, 751, 534, 2, 613, 535, 1, 615, 535, 1, 682, 535, 1, 684, 535, 1, 752, 535, 1, 613, 536, 2, 682, 536, 1, 684, 536, 1, 752, 536, 1, 614, 537, 2, 617, 537, 1, 619, 537, 3, 682, 537, 1, 684, 537, 1, 752, 537, 1, 621, 538, 1, 682, 538, 1, 684, 538, 1, 752, 538, 1, 620, 539, 2, 682, 539, 1, 684, 539, 1, 752, 539, 1, 620, 540, 1, 682, 540, 1, 684, 540, 1, 752, 540, 1, 620, 541, 1, 682, 541, 1, 684, 541, 1, 752, 541, 1, 620, 542, 1, 682, 542, 1, 684, 542, 1, 751, 542, 2, 620, 543, 1, 682, 543, 1, 684, 543, 1, 751, 543, 1, 620, 544, 1, 682, 544, 1, 684, 544, 1, 751, 544, 2, 620, 545, 2, 682, 545, 1, 684, 545, 1, 752, 545, 1, 621, 546, 1, 682, 546, 1, 684, 546, 1, 752, 546, 1, 621, 547, 1, 682, 547, 1, 684, 547, 1, 752, 547, 1, 621, 548, 1, 682, 548, 1, 684, 548, 1, 752, 548, 1, 621, 549, 45, 682, 549, 1, 684, 549, 1, 752, 549, 1, 665, 550, 1, 682, 550, 1, 684, 550, 1, 752, 550, 1, 664, 551, 2, 682, 551, 1, 684, 551, 1, 752, 551, 1, 645, 552, 17, 663, 552, 2, 681, 552, 4, 752, 552, 1, 645, 553, 1, 661, 553, 1, 663, 553, 1, 683, 553, 2, 752, 553, 1, 645, 554, 2, 661, 554, 1, 663, 554, 1, 752, 554, 1, 645, 555, 2, 661, 555, 1, 663, 555, 1, 752, 555, 1, 645, 556, 1, 661, 556, 1, 663, 556, 1, 752, 556, 1, 645, 557, 1, 654, 557, 1, 661, 557, 1, 663, 557, 1, 752, 557, 1, 637, 558, 12, 653, 558, 2, 661, 558, 1, 663, 558, 1, 752, 558, 1, 637, 559, 1, 661, 559, 1, 663, 559, 1, 752, 559, 1, 637, 560, 1, 661, 560, 1, 663, 560, 1, 752, 560, 1, 636, 561, 2, 661, 561, 1, 663, 561, 1, 751, 561, 2, 627, 562, 10, 661, 562, 1, 663, 562, 1, 751, 562, 2, 627, 563, 1, 661, 563, 1, 663, 563, 1, 752, 563, 1, 627, 564, 1, 661, 564, 1, 663, 564, 1, 752, 564, 2, 627, 565, 1, 661, 565, 1, 663, 565, 1, 753, 565, 1, 627, 566, 1, 661, 566, 1, 663, 566, 1, 753, 566, 1, 627, 567, 1, 661, 567, 1, 663, 567, 1, 753, 567, 1, 627, 568, 1, 661, 568, 1, 663, 568, 1, 753, 568, 1, 627, 569, 1, 659, 569, 3, 663, 569, 1, 753, 569, 1, 627, 570, 1, 659, 570, 1, 663, 570, 1, 753, 570, 1, 627, 571, 1, 659, 571, 1, 663, 571, 1, 683, 571, 3, 753, 571, 1, 627, 572, 1, 658, 572, 2, 663, 572, 1, 683, 572, 1, 685, 572, 1, 753, 572, 1, 627, 573, 1, 657, 573, 1, 663, 573, 1, 683, 573, 1, 685, 573, 69, 627, 574, 1, 657, 574, 1, 663, 574, 1, 683, 574, 1, 627, 575, 1, 657, 575, 2, 663, 575, 1, 683, 575, 1, 627, 576, 1, 658, 576, 1, 663, 576, 1, 683, 576, 1, 627, 577, 1, 658, 577, 1, 663, 577, 1, 683, 577, 1, 627, 578, 1, 658, 578, 1, 663, 578, 1, 683, 578, 1, 627, 579, 1, 658, 579, 1, 663, 579, 1, 683, 579, 1, 627, 580, 1, 658, 580, 1, 663, 580, 1, 683, 580, 1, 627, 581, 1, 658, 581, 2, 663, 581, 1, 683, 581, 1, 627, 582, 1, 659, 582, 1, 663, 582, 1, 683, 582, 1, 627, 583, 1, 630, 583, 1, 659, 583, 1, 663, 583, 1, 683, 583, 1, 630, 584, 1, 659, 584, 1, 663, 584, 1, 683, 584, 1, 630, 585, 6, 659, 585, 1, 663, 585, 1, 683, 585, 1, 634, 586, 1, 644, 586, 3, 659, 586, 2, 663, 586, 1, 683, 586, 1, 702, 586, 28, 645, 587, 2, 660, 587, 1, 663, 587, 1, 683, 587, 20, 729, 587, 1, 615, 588, 27, 645, 588, 1, 660, 588, 4, 729, 588, 1, 615, 589, 1, 640, 589, 1, 642, 589, 1, 645, 589, 1, 661, 589, 1, 729, 589, 1, 615, 590, 1, 645, 590, 1, 729, 590, 1, 615, 591, 2, 642, 591, 4, 729, 591, 1, 612, 592, 5, 643, 592, 2, 729, 592, 1, 612, 593, 1, 615, 593, 1, 729, 593, 1, 612, 594, 1, 729, 594, 1, 612, 595, 1, 621, 595, 2, 729, 595, 7, 612, 596, 1, 616, 596, 2, 619, 596, 4, 730, 596, 1, 735, 596, 1, 612, 597, 1, 622, 597, 1, 735, 597, 1, 612, 598, 2, 621, 598, 2, 735, 598, 1, 612, 599, 1, 735, 599, 1, 612, 600, 1, 735, 600, 1, 612, 601, 1, 735, 601, 1, 612, 602, 1, 731, 602, 5, 612, 603, 4, 639, 603, 5, 731, 603, 1, 615, 604, 1, 635, 604, 5, 643, 604, 3, 683, 604, 3, 731, 604, 1, 615, 605, 1, 630, 605, 6, 645, 605, 1, 683, 605, 2, 731, 605, 1, 615, 606, 1, 630, 606, 1, 645, 606, 1, 683, 606, 2, 731, 606, 1, 615, 607, 16, 645, 607, 1, 660, 607, 3, 683, 607, 2, 731, 607, 1, 645, 608, 1, 660, 608, 1, 662, 608, 1, 683, 608, 2, 731, 608, 1, 645, 609, 1, 660, 609, 1, 662, 609, 1, 683, 609, 2, 731, 609, 1, 622, 610, 24, 659, 610, 2, 662, 610, 1, 683, 610, 2, 731, 610, 1, 622, 611, 1, 659, 611, 1, 662, 611, 1, 683, 611, 2, 731, 611, 1, 622, 612, 1, 659, 612, 1, 662, 612, 1, 683, 612, 2, 731, 612, 1, 622, 613, 2, 659, 613, 1, 662, 613, 1, 683, 613, 14, 731, 613, 1, 622, 614, 2, 659, 614, 1, 662, 614, 1, 683, 614, 1, 696, 614, 1, 731, 614, 1, 610, 615, 1, 622, 615, 1, 659, 615, 1, 662, 615, 1, 683, 615, 1, 696, 615, 1, 731, 615, 1, 610, 616, 1, 621, 616, 2, 659, 616, 1, 662, 616, 1, 683, 616, 1, 696, 616, 1, 731, 616, 1, 610, 617, 1, 616, 617, 1, 620, 617, 2, 659, 617, 1, 662, 617, 1, 683, 617, 1, 696, 617, 1, 731, 617, 1, 610, 618, 1, 615, 618, 2, 618, 618, 3, 659, 618, 1, 662, 618, 1, 683, 618, 1, 696, 618, 1, 731, 618, 1, 610, 619, 1, 659, 619, 1, 662, 619, 1, 683, 619, 1, 696, 619, 1, 731, 619, 1, 610, 620, 1, 659, 620, 1, 662, 620, 1, 683, 620, 1, 696, 620, 1, 731, 620, 1, 610, 621, 1, 659, 621, 1, 662, 621, 1, 683, 621, 1, 696, 621, 1, 731, 621, 1, 610, 622, 1, 659, 622, 1, 662, 622, 1, 683, 622, 1, 696, 622, 1, 731, 622, 1, 610, 623, 1, 659, 623, 1, 662, 623, 1, 683, 623, 1, 696, 623, 1, 731, 623, 1, 610, 624, 1, 658, 624, 2, 662, 624, 1, 683, 624, 1, 696, 624, 1, 731, 624, 1, 610, 625, 1, 658, 625, 1, 662, 625, 1, 683, 625, 1, 696, 625, 1, 731, 625, 1, 610, 626, 1, 652, 626, 7, 662, 626, 1, 681, 626, 3, 696, 626, 1, 731, 626, 1, 610, 627, 2, 652, 627, 2, 662, 627, 1, 680, 627, 2, 696, 627, 1, 731, 627, 1, 611, 628, 1, 662, 628, 1, 680, 628, 1, 696, 628, 1, 731, 628, 1, 611, 629, 1, 662, 629, 1, 680, 629, 1, 696, 629, 1, 731, 629, 1, 611, 630, 1, 662, 630, 1, 680, 630, 1, 696, 630, 1, 731, 630, 1, 611, 631, 1, 636, 631, 2, 662, 631, 1, 680, 631, 1, 696, 631, 1, 731, 631, 1, 611, 632, 25, 637, 632, 1, 651, 632, 1, 662, 632, 1, 680, 632, 1, 696, 632, 1, 731, 632, 1, 637, 633, 1, 651, 633, 1, 662, 633, 1, 680, 633, 1, 696, 633, 1, 731, 633, 1, 637, 634, 1, 651, 634, 1, 662, 634, 1, 680, 634, 1, 696, 634, 1, 731, 634, 1, 637, 635, 1, 651, 635, 1, 662, 635, 1, 680, 635, 1, 696, 635, 1, 731, 635, 1, 637, 636, 1, 651, 636, 1, 662, 636, 1, 680, 636, 1, 696, 636, 1, 731, 636, 1, 637, 637, 1, 651, 637, 1, 662, 637, 1, 680, 637, 1, 696, 637, 1, 731, 637, 1, 637, 638, 1, 651, 638, 1, 662, 638, 1, 680, 638, 1, 696, 638, 1, 731, 638, 1, 637, 639, 1, 651, 639, 1, 662, 639, 1, 680, 639, 1, 696, 639, 1, 731, 639, 2, 637, 640, 1, 651, 640, 1, 662, 640, 1, 680, 640, 1, 696, 640, 1, 732, 640, 1, 637, 641, 1, 651, 641, 1, 662, 641, 1, 680, 641, 1, 696, 641, 1, 732, 641, 1, 637, 642, 2, 641, 642, 1, 646, 642, 4, 651, 642, 1, 662, 642, 2, 680, 642, 1, 696, 642, 1, 731, 642, 2, 638, 643, 8, 649, 643, 3, 663, 643, 2, 680, 643, 1, 696, 643, 1, 717, 643, 2, 731, 643, 1, 664, 644, 1, 680, 644, 17, 713, 644, 21, 644, 645, 21, 713, 645, 1, 723, 645, 2, 733, 645, 21, 644, 646, 1, 713, 646, 1, 721, 646, 3, 753, 646, 1, 644, 647, 1, 713, 647, 1, 721, 647, 1, 753, 647, 1, 644, 648, 1, 713, 648, 1, 721, 648, 1, 753, 648, 1, 644, 649, 1, 713, 649, 1, 721, 649, 1, 753, 649, 1, 644, 650, 1, 713, 650, 1, 721, 650, 1, 753, 650, 1, 644, 651, 1, 713, 651, 1, 721, 651, 1, 753, 651, 1, 644, 652, 1, 713, 652, 1, 721, 652, 2, 753, 652, 1, 644, 653, 1, 713, 653, 1, 722, 653, 1, 753, 653, 1, 644, 654, 1, 713, 654, 1, 721, 654, 2, 753, 654, 1, 644, 655, 1, 713, 655, 1, 721, 655, 1, 753, 655, 1, 644, 656, 1, 713, 656, 1, 721, 656, 2, 753, 656, 1, 611, 657, 7, 620, 657, 2, 632, 657, 11, 644, 657, 1, 713, 657, 1, 722, 657, 2, 753, 657, 1, 611, 658, 1, 614, 658, 2, 621, 658, 1, 632, 658, 1, 713, 658, 1, 716, 658, 8, 753, 658, 1, 611, 659, 1, 621, 659, 4, 632, 659, 1, 713, 659, 1, 716, 659, 1, 753, 659, 1, 610, 660, 2, 625, 660, 8, 713, 660, 1, 716, 660, 1, 753, 660, 1, 609, 661, 2, 713, 661, 1, 716, 661, 1, 753, 661, 1, 609, 662, 1, 713, 662, 1, 715, 662, 2, 753, 662, 1, 609, 663, 1, 713, 663, 1, 715, 663, 1, 753, 663, 1, 608, 664, 1, 713, 664, 1, 715, 664, 1, 753, 664, 1, 608, 665, 1, 713, 665, 3, 753, 665, 1, 608, 666, 1, 753, 666, 1, 608, 667, 1, 753, 667, 1, 608, 668, 1, 753, 668, 1, 608, 669, 1, 753, 669, 1, 608, 670, 1, 666, 670, 1, 753, 670, 1, 608, 671, 1, 666, 671, 1, 752, 671, 2, 608, 672, 1, 752, 672, 2, 608, 673, 1, 753, 673, 1, 608, 674, 1, 753, 674, 1, 608, 675, 1, 753, 675, 1, 608, 676, 1, 752, 676, 2, 608, 677, 1, 752, 677, 1, 608, 678, 2, 611, 678, 2, 752, 678, 2, 609, 679, 3, 753, 679, 1, 611, 680, 1, 753, 680, 1, 611, 681, 1, 713, 681, 3, 721, 681, 1, 753, 681, 1, 611, 682, 1, 712, 682, 2, 715, 682, 7, 745, 682, 9, 611, 683, 1, 713, 683, 1, 721, 683, 1, 745, 683, 1, 611, 684, 1, 665, 684, 2, 689, 684, 2, 713, 684, 9, 745, 684, 1, 787, 684, 13, 805, 684, 4, 611, 685, 1, 689, 685, 2, 713, 685, 2, 745, 685, 2, 787, 685, 1, 799, 685, 1, 808, 685, 1, 611, 686, 1, 713, 686, 2, 746, 686, 1, 799, 686, 1, 808, 686, 1, 611, 687, 1, 713, 687, 2, 746, 687, 1, 799, 687, 5, 808, 687, 1, 611, 688, 1, 713, 688, 2, 745, 688, 2, 808, 688, 1, 611, 689, 1, 713, 689, 2, 746, 689, 1, 777, 689, 9, 789, 689, 1, 807, 689, 2, 611, 690, 1, 713, 690, 2, 746, 690, 4, 777, 690, 1, 779, 690, 2, 785, 690, 5, 808, 690, 1, 611, 691, 1, 713, 691, 2, 749, 691, 1, 777, 691, 1, 807, 691, 6, 611, 692, 1, 713, 692, 2, 749, 692, 1, 777, 692, 1, 805, 692, 2, 812, 692, 2, 611, 693, 1, 713, 693, 2, 749, 693, 1, 752, 693, 23, 777, 693, 1, 800, 693, 1, 805, 693, 1, 813, 693, 2, 611, 694, 1, 713, 694, 2, 749, 694, 3, 775, 694, 3, 805, 694, 1, 814, 694, 1, 611, 695, 1, 713, 695, 2, 805, 695, 1, 814, 695, 1, 611, 696, 1, 713, 696, 2, 814, 696, 1, 611, 697, 1, 713, 697, 2, 814, 697, 1, 611, 698, 3, 713, 698, 2, 813, 698, 2, 613, 699, 5, 628, 699, 10, 713, 699, 2, 806, 699, 1, 813, 699, 1, 617, 700, 12, 637, 700, 2, 713, 700, 2, 807, 700, 3, 812, 700, 2, 638, 701, 1, 713, 701, 2, 812, 701, 1, 638, 702, 1, 713, 702, 2, 812, 702, 1, 638, 703, 1, 713, 703, 2, 812, 703, 1, 638, 704, 1, 713, 704, 2, 811, 704, 2, 638, 705, 1, 660, 705, 53, 714, 705, 1, 811, 705, 1, 638, 706, 1, 660, 706, 1, 699, 706, 1, 705, 706, 1, 714, 706, 1, 810, 706, 2, 638, 707, 1, 660, 707, 1, 677, 707, 1, 679, 707, 1, 681, 707, 19, 705, 707, 10, 810, 707, 1, 638, 708, 1, 660, 708, 1, 676, 708, 2, 683, 708, 2, 800, 708, 11, 638, 709, 1, 660, 709, 1, 675, 709, 2, 683, 709, 2, 797, 709, 3, 622, 710, 17, 660, 710, 1, 675, 710, 1, 683, 710, 2, 797, 710, 1, 621, 711, 2, 655, 711, 3, 660, 711, 1, 674, 711, 2, 684, 711, 1, 689, 711, 1, 797, 711, 1, 621, 712, 1, 654, 712, 2, 657, 712, 1, 660, 712, 1, 674, 712, 1, 684, 712, 2, 797, 712, 1, 621, 713, 1, 654, 713, 1, 671, 713, 5, 684, 713, 1, 797, 713, 1, 621, 714, 1, 654, 714, 1, 669, 714, 2, 675, 714, 1, 683, 714, 2, 797, 714, 1, 621, 715, 1, 654, 715, 1, 669, 715, 1, 676, 715, 1, 683, 715, 1, 797, 715, 1, 621, 716, 1, 654, 716, 1, 669, 716, 2, 676, 716, 1, 682, 716, 1, 797, 716, 1, 621, 717, 1, 654, 717, 1, 669, 717, 2, 797, 717, 1, 621, 718, 1, 654, 718, 1, 669, 718, 1, 797, 718, 1, 621, 719, 1, 654, 719, 1, 669, 719, 1, 674, 719, 2, 797, 719, 1, 621, 720, 1, 654, 720, 1, 669, 720, 2, 797, 720, 1, 621, 721, 1, 654, 721, 1, 670, 721, 1, 672, 721, 1, 797, 721, 1, 621, 722, 1, 654, 722, 1, 670, 722, 3, 797, 722, 1, 621, 723, 1, 654, 723, 1, 670, 723, 1, 797, 723, 1, 621, 724, 1, 654, 724, 1, 670, 724, 1, 797, 724, 1, 621, 725, 1, 654, 725, 1, 671, 725, 1, 797, 725, 1, 621, 726, 1, 654, 726, 4, 660, 726, 1, 670, 726, 2, 797, 726, 1, 621, 727, 1, 657, 727, 2, 660, 727, 1, 662, 727, 5, 669, 727, 2, 797, 727, 1, 621, 728, 1, 660, 728, 1, 662, 728, 1, 666, 728, 4, 797, 728, 1, 621, 729, 1, 660, 729, 1, 662, 729, 1, 797, 729, 1, 621, 730, 1, 660, 730, 1, 662, 730, 1, 797, 730, 1, 621, 731, 1, 660, 731, 1, 662, 731, 1, 797, 731, 1, 621, 732, 1, 660, 732, 1, 662, 732, 1, 797, 732, 1, 621, 733, 1, 660, 733, 1, 662, 733, 1, 797, 733, 1, 621, 734, 1, 660, 734, 1, 662, 734, 1, 797, 734, 1, 621, 735, 1, 660, 735, 1, 662, 735, 1, 797, 735, 1, 621, 736, 1, 660, 736, 1, 662, 736, 1, 797, 736, 1, 621, 737, 1, 660, 737, 3, 797, 737, 1, 621, 738, 1, 663, 738, 1, 797, 738, 1, 621, 739, 1, 663, 739, 1, 741, 739, 3, 797, 739, 1, 621, 740, 1, 741, 740, 5, 748, 740, 1, 797, 740, 1, 621, 741, 1, 742, 741, 1, 745, 741, 4, 797, 741, 1, 621, 742, 1, 741, 742, 2, 748, 742, 3, 797, 742, 1, 621, 743, 1, 740, 743, 2, 743, 743, 5, 750, 743, 1, 797, 743, 1, 621, 744, 1, 740, 744, 4, 747, 744, 7, 797, 744, 1, 621, 745, 1, 740, 745, 1, 742, 745, 1, 748, 745, 2, 751, 745, 2, 797, 745, 1, 621, 746, 1, 752, 746, 2, 797, 746, 1, 621, 747, 1, 736, 747, 1, 752, 747, 1, 797, 747, 1, 621, 748, 1, 751, 748, 2, 797, 748, 1, 621, 749, 1, 797, 749, 1, 621, 750, 1, 748, 750, 1, 797, 750, 1, 621, 751, 1, 747, 751, 1, 797, 751, 20, 621, 752, 1, 785, 752, 1, 816, 752, 1, 621, 753, 1, 735, 753, 2, 759, 753, 1, 784, 753, 1, 816, 753, 1, 621, 754, 1, 660, 754, 3, 735, 754, 1, 759, 754, 1, 816, 754, 1, 621, 755, 1, 660, 755, 1, 662, 755, 1, 739, 755, 1, 816, 755, 1, 621, 756, 1, 660, 756, 1, 662, 756, 1, 739, 756, 5, 816, 756, 1, 621, 757, 1, 660, 757, 1, 662, 757, 1, 738, 757, 2, 743, 757, 4, 763, 757, 5, 773, 757, 2, 816, 757, 1, 621, 758, 1, 660, 758, 1, 662, 758, 1, 738, 758, 2, 746, 758, 1, 761, 758, 3, 767, 758, 11, 816, 758, 1, 621, 759, 1, 660, 759, 1, 662, 759, 9, 739, 759, 3, 746, 759, 1, 761, 759, 2, 772, 759, 1, 777, 759, 2, 816, 759, 1, 621, 760, 1, 660, 760, 1, 663, 760, 1, 670, 760, 1, 741, 760, 2, 746, 760, 1, 760, 760, 1, 769, 760, 5, 778, 760, 2, 816, 760, 1, 621, 761, 40, 663, 761, 1, 671, 761, 1, 738, 761, 1, 742, 761, 2, 745, 761, 2, 763, 761, 3, 767, 761, 3, 771, 761, 3, 779, 761, 1, 816, 761, 1, 663, 762, 1, 743, 762, 3, 763, 762, 1, 768, 762, 2, 773, 762, 1, 779, 762, 1, 785, 762, 1, 815, 762, 2, 663, 763, 1, 763, 763, 1, 769, 763, 1, 774, 763, 1, 785, 763, 2, 802, 763, 1, 814, 763, 2, 663, 764, 1, 785, 764, 30, 663, 765, 1, 785, 765, 1, 663, 766, 1, 785, 766, 1, 663, 767, 1, 754, 767, 1, 785, 767, 1, 663, 768, 1, 785, 768, 1, 663, 769, 1, 785, 769, 1, 663, 770, 3, 669, 770, 2, 734, 770, 2, 753, 770, 4, 758, 770, 1, 783, 770, 3, 665, 771, 1, 669, 771, 2, 734, 771, 2, 754, 771, 1, 756, 771, 1, 758, 771, 1, 783, 771, 1, 665, 772, 90, 756, 772, 11, 773, 772, 1, 777, 772, 2, 781, 772, 3, 766, 773, 16 ] } ], "entities": [ { "__class": "PointMapEntity", "metaData": { "angle": 3 }, "points": [ 3278, 3254 ], "type": "robot_position" }, { "__class": "PointMapEntity", "metaData": { "angle": 183 }, "points": [ 3279, 3229 ], "type": "charger_location" }, { "__class": "PolygonMapEntity", "metaData": {}, "points": [ 3675, 3690, 3775, 3690, 3775, 3860, 3675, 3860 ], "type": "no_go_area" }, { "__class": "PolygonMapEntity", "metaData": {}, "points": [ 3780, 3770, 3925, 3770, 3925, 3860, 3780, 3860 ], "type": "no_go_area" }, { "__class": "PathMapEntity", "metaData": {}, "points": [ 3775, 3640, 3777, 3645, 3777, 3650, 3776, 3655, 3776, 3660, 3776, 3665, 3776, 3670, 3781, 3672, 3786, 3674, 3790, 3677, 3794, 3680, 3797, 3684, 3800, 3688, 3802, 3693, 3803, 3698, 3802, 3703, 3800, 3708, 3797, 3712, 3795, 3717, 3800, 3716, 3804, 3713, 3810, 3713, 3815, 3713, 3820, 3713, 3825, 3713, 3830, 3713, 3835, 3714, 3841, 3714, 3846, 3714, 3851, 3714, 3856, 3714, 3861, 3714, 3867, 3714, 3872, 3714, 3877, 3714, 3882, 3714, 3887, 3714, 3893, 3714, 3897, 3711, 3897, 3706, 3897, 3701, 3897, 3695, 3897, 3690, 3897, 3685, 3897, 3680, 3897, 3675, 3897, 3670, 3897, 3665, 3897, 3660, 3897, 3655, 3897, 3650, 3893, 3646, 3888, 3646, 3883, 3646, 3877, 3646, 3872, 3647, 3867, 3647, 3862, 3647, 3857, 3647, 3852, 3647, 3846, 3646, 3841, 3646, 3836, 3646, 3831, 3646, 3825, 3647, 3820, 3647, 3815, 3647, 3809, 3647, 3804, 3647, 3799, 3647, 3794, 3647, 3788, 3647, 3783, 3647, 3778, 3647, 3775, 3651, 3775, 3656, 3776, 3661, 3776, 3665, 3780, 3663, 3785, 3660, 3786, 3659, 3791, 3657, 3796, 3657, 3801, 3657, 3807, 3657, 3812, 3657, 3817, 3657, 3823, 3657, 3828, 3657, 3833, 3657, 3838, 3657, 3844, 3657, 3849, 3657, 3854, 3657, 3859, 3657, 3865, 3657, 3870, 3657, 3875, 3657, 3880, 3657, 3885, 3657, 3886, 3657, 3891, 3658, 3894, 3662, 3893, 3667, 3889, 3671, 3887, 3672, 3881, 3672, 3876, 3672, 3871, 3672, 3865, 3672, 3860, 3672, 3855, 3671, 3849, 3671, 3844, 3671, 3839, 3671, 3834, 3671, 3828, 3671, 3823, 3671, 3818, 3671, 3812, 3671, 3807, 3671, 3802, 3671, 3797, 3671, 3801, 3675, 3803, 3679, 3806, 3683, 3807, 3684, 3812, 3683, 3817, 3683, 3823, 3683, 3828, 3683, 3833, 3683, 3839, 3683, 3844, 3683, 3849, 3683, 3855, 3683, 3860, 3683, 3865, 3683, 3870, 3683, 3876, 3683, 3881, 3683, 3886, 3683, 3886, 3683, 3891, 3684, 3894, 3688, 3893, 3693, 3889, 3696, 3887, 3697, 3882, 3697, 3877, 3697, 3871, 3697, 3866, 3697, 3861, 3697, 3855, 3697, 3850, 3696, 3845, 3696, 3839, 3696, 3834, 3696, 3829, 3696, 3823, 3696, 3818, 3696, 3813, 3696 ], "type": "path" }, { "__class": "PolygonMapEntity", "metaData": {}, "points": [ 3770, 3641, 3903, 3641, 3903, 3720, 3770, 3720 ], "type": "active_zone" } ] }
Okay will work on it, I hope you can wait for a while. For the most the code works and I guess it is just matter of reformatting the Image. Will keep you posted
No rush, thanks again for your effort on this.
There is to re-design the image_handler but I already know how to do it. The reason why it crashed is probably because the code was developed with the V1, so I decided to re-do the image_handler in a more flexible way.. it was long time that I waited for it. It is a nice challenge and we will get it done. Thanks once again for the data :)
@billyourself I could draw the background layers and got the image, anyhow I understood also that the image is too big so I will test it with the cropping function, if all goes well I will later give you the beta release version to test it.
this is the image with the data you provided (note the colours of the rooms at the moment are constants) the vacuum is in dock position (will be rotated 180 deg but at the moment it is like that because we will need to check the robot position while running). The issue with HA instance was defiantly because the image was too big to handle, this is why it crashed. I will increase the scan time to 10 sec. instead of 5 sec. because composing this image take around 4.7 sec. while the one from my vacuum is on the range of 2.5 sec. I still need to integrate the modifications I made on the image_handler and run some tests. @billyourself I hope this will work and please note you will need to setup the camera to crop 45% and rotate counter clock wise as desired (this mean you need to remove and integrate again the camera at today, hope soon to fix the config_flow to avoid it). NB at the time be there is no no_go area draw.
@billyourself version 236.09.01 is now available. I will move this post to the discussions.
Checklist
The problem
Update for camera.valetudo_vacuum_camera fails.
The entity does not show an image, nor does it with with the Xiaomi Lovelace Vacuum Card.
Configuration has been set up as per instructions and confirmed working with I Can't Believe It's Not Valetudo.
Logs from HA:
2023-07-07 20:21:29.631 DEBUG (Thread-6 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Connected to MQTT broker. 2023-07-07 20:21:29.632 DEBUG (Thread-6 (_thread_main)) [custom_components.valetudo_vacuum_camera.valetudo.connector] Received data from MQTT 2023-07-07 20:21:34.624 INFO (SyncWorker_4) [custom_components.valetudo_vacuum_camera.camera] camera image update process: True 2023-07-07 20:21:34.624 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.valetudo.connector] Processing data from MQTT 2023-07-07 20:21:34.624 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Decoding PNG to JSON 2023-07-07 20:21:34.624 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] data grabbed 2023-07-07 20:21:34.624 DEBUG (SyncWorker_4) [custom_components.valetudo_vacuum_camera.utils.valetudo_jdata] Extracting JSON 2023-07-07 20:21:34.903 ERROR (MainThread) [homeassistant.helpers.entity] Update for camera.valetudo_vacuum_camera fails Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 695, in async_update_ha_state await self.async_device_update() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 942, in async_device_update await hass.async_add_executor_job(self.update) File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/valetudo_vacuum_camera/camera.py", line 184, in update pil_img = self._map_handler.get_image_from_json(parsed_json) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/valetudo_vacuum_camera/valetudo/image_handler.py", line 344, in get_image_from_json img_np_array = self.draw_zone_clean( ^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/valetudo_vacuum_camera/valetudo/image_handler.py", line 229, in draw_zone_clean tot_zones = len(coordinates) - 1 ^^^^^^^^^^^^^^^^ TypeError: object of type 'NoneType' has no len()
What version of an integration has described problem?
1.1.4
What was the last working version of an integration?
No response
What vacuum model do you have problems with?
Dreame D9, Valetudo Flashed
Please firmware installed on your Vacuum.
Dreame FW: 1132, Valetudo: DreameD9ValetudoRobot 2023.05.0
What version of Home Assistant do you use?
2023.7.1
What type of installation are you running?
Home Assistant OS
Camera's configuration
Logs or Errors shown in the HA logs (please enable the Debug Mode)
Additional information
No response