I’m having issues with my Neato botvac D7, and its integration with Home Assistant. Since it frequently reports not recognizing the environment, I started using zones. The zones I use cover the entire floor, and seems to be a workaround for when it doesn’t recognize which floor it is on. I have created two zones, one for each floor:
and
If I then use these zones to “Call Service” in the “Developer Tools”, for service “neato.custom_cleaning”, with the data
entity_id: vacuum.dammaren
zone: entrylevel
Then it works fine. However, if I change from “entrylevel” to “secondlevel”. Then I get an error message in home-assistant.log
Zone ‘secondlevel’ was not found for the robot ‘Dammaren’
I then received some help on github on how to check in more detail which maps/zones are available. I issued the following command:
import pybotvac
account = pybotvac.Account('username', 'password')
account.refresh_robots()
print(account.persistent_maps)
for robot in pybotvac.Account('username', 'password').robots:print(robot)
boundary = robot.get_map_boundaries('plan1').json()
print ("Boundary for plan1",boundary)
boundary = robot.get_map_boundaries('plan2').json()
print ("Boundary for plan2",boundary)
This obviously produced alot of text, I will cut most of it. Hopefully I kept the relevant part. The first part shows that I have two “persistant maps”, named “plan1” and “plan2”. So far so good. Then for the next part when I want to check the zones (or I think that’s what I’m doing).
Boundary for plan1
{
'version': 1, 'reqId': '1', 'result': 'not_found', 'data': {}, 'error': None,
'alert': None, 'state': 1, 'action': 0, 'cleaning':
{
'category': 4, 'mode': 2, 'modifier': 1, 'navigationMode': 1, 'mapId': '', 'spotWidth': 0, 'spotHeight': 0
},
'details':
{
'isCharging': False, 'isDocked': True, 'isScheduleEnabled': False,'dockHasBeenSeen': False,'charge': 95
},
'availableCommands':
{
'start': True, 'stop': False, 'pause': False,'resume': False,'goToBase': False
},
'availableServices':
{
'findMe': 'basic-1','generalInfo': 'basic-1','houseCleaning': 'basic-4','IECTest': 'advanced-1','logCopy': 'basic-1',
'manualCleaning': 'basic-1','maps': 'basic-2','preferences': 'basic-2','schedule': 'basic-2','softwareUpdate': 'basic-1',
'spotCleaning': 'basic-3','wifi': 'basic-1'
},
'meta':
{
'modelName': 'BotVacD7Connected',
'firmware': '4.5.3-189'
}
}
Boundary for plan2
{
'version': 1,'reqId': '1','result': 'not_found','data': {},'error': None, 'alert': None, 'state': 1,
'action': 0, 'cleaning':
{
'category': 4,'mode': 2, 'modifier': 1,'navigationMode': 1,'mapId': '', 'spotWidth': 0,'spotHeight': 0
},
'details':
{
'isCharging': False,'isDocked': True,'isScheduleEnabled': False,'dockHasBeenSeen': False,'charge': 95
},
'availableCommands':
{
'start': True,'stop': False,'pause': False,'resume': False,'goToBase': False
},
'availableServices':
{
'findMe': 'basic-1','generalInfo': 'basic-1','houseCleaning': 'basic-4','IECTest': 'advanced-1','logCopy': 'basic-1',
'manualCleaning': 'basic-1','maps': 'basic-2','preferences': 'basic-2','schedule': 'basic-2','softwareUpdate': 'basic-1',
'spotCleaning': 'basic-3','wifi': 'basic-1'
},
'meta':
{
'modelName': 'BotVacD7Connected',
'firmware': '4.5.3-189'
}
}
So, no zones! It would be nice to get this working. I’m writing a python script in appdaemon that deactivates the motion alarm when it’s time to start the vacuuming, but I’m stuck at this point.
Yet, again, it works if I send the command to clean the zone on the first floor I created in the app, but not on the second floor. Am I missing something, should I query something else? Why can’t I see the zones, and why can I only start a zone cleaning on one floor?