Update SpotArea and CLI command to more closely reflect the app
Library:
SpotArea namedarea -> area
SpotArea customarea -> map_position
CLI Commands:
spotclean -> area
Ex: sucks area 0,1
- will clean areas 0 and 1 / A and B
area options:
--map-postion|-p
- will clean a specified map coordinate
Ex: sucks area -p "-602,1812,800,723"
- will clean the specified custom map coordinates
Set timeout to 1.25 secs for IOT API
- Some commands (Move) never return a status, so this allows things to continue moving along without waiting too long
Original implementation assumed that the "total" value from the API response was the denominator for lifespan, but this was incorrect. The "val" from the `life_span` message is the percentage represented as a whole number, with no dividing necessary.
All sucks vocabulary is now defined up-front in consts, so that library users can import those const instead of hard-coding them.
is_cleaning and is_charging properties were added to VacBot, avoiding library users to have to understand which vacuum statuses mean active cleaning.
All logging has been moved to instantiated loggers using the module's namespace, as is recommended by the Python docs.
Tons of cleanup alongside a lot of new functionality. BotVac now provides an overall vacuum state as a single state, and can emit events to subscribers every time the state changes, as well as any lifespan or battery changes.
The BotVac can also now be created in a `monitor` mode, meaning the BotVac object will handle fetching initial state, refetching state after the BotVac goes offline then online, and regularly checking in on component lifespans.
All statuses are also now normalized so that the BotVac's reported statuses always match the names defined by the sucks library.
The _handle_error method was throwing a runtime error because it expects an XML element
The functionality in _handle_error is covered by _handle_ctl so it can be removed altogether
The capitalization adjustment was breaking any commands that required CamelCase, such as GetChargeState. Args are not needed for commands such as GetChargeState, so the xml will no longer build that array if it's set to None.