* Add support for Honeywell evohome CH/DHW systems More flake8 corrections Passes Flake8 tests Almost passed flake8.pylint! Passed all tox tests Now it needs serious testing! Almost ready to submit BUGFIX: DHW state now functional More improvements to available() Solved the DHW temp units problem! Last minute bug squash to improve dicts merge Trying to rebase fixing more rbase errors revert to creating HTTP_error_code internally for now ready to submit PR Added support for Honeywell evohome CH/DHW systems * Updated requirements_test_all.txt * Fix: D401 First line should be in imperative mood * Remove _LOGGER.info (replace with _LOGGER.debug) * raise PlatformNotReady when RequestException during setup() * Revert some LOGGER.debug to LOGGER.warning * Improved logging levels, and removed some unwanted comments * Improvments to logging - additional self._status info * BUGFIX: DHW wrongly showing available = False (and some other tweaks) * Fix trailing whitespace * Remove state_attributes override and API_VER code * Removed heating zones, DHW and heuristics to reduce # lines of code * Removed some more lines of code * Removed unused configuration parameters * Remove some more un-needed lines * Removed more (uneeded) lines of code & fixed two minor typos * Improvements to debug logging of available() = False * Improvements to code, and code clean-up * Corrected a minor typo * A small tidy up * reduces precision of emulated temps floats to 0.1 * Some code improvements as suggested by JeardM * Rewrite of exception handler * Removed another unwanted logging in properties * Remove async_ version of various methods * moved available heuristics to update() * Cleanup of code, and re-work linter hints * fixed a minor documentation typo * scan_interval is now no longer a configurable option * Change from Master/Slave to Parent/Child * Removed the last of the slaves * Removed the last of the masters * Move -PARALLEL_UPDATES to .\climate\evohome.py' * main code moved to climate/evohome.py * merge EvoEntity into EvoController class * remove should_poll (for now) * woops! left a hint in * removed icon * only log a WARNING the first time available = False * cleanup dodgy exception handling * Tidy up exception handling * Many changes as suggested by @MartinHjelmare, thanks * remove hass from init, part 1 * use async_added_to_hass instead of dispatcher_connect * remove hass from init, part 2 (done) * add 1-2 arrays, and tidied up some comments * from dispatcher to async_added_to_hass * cleaned up some logging, and removed others * Many changes as request by @MartinHjelmare * Homage to the lint * Changed to the HA of doing operating_mode * Now using update_before_add=True * reduced logging further still... * fixed minor lint * fix a small logic error * Add device_state_attributes to track actual operating mode * Clean up doc quotes caused by previous changes * Woops! removed some debug lines that shoudln't have stayed in * Add a complete set of device_state_attributes * Cleanup some constants * Remove more legacy code * domain_data to evo_data & this else should be a finally * minor change for readability * Minor change for readability #2 * removed unused code * small tidy up - no code changes * fix minor lint * Correct URLs & descriptions in docstring * whoops - fixed a typo in docstrings * remove an unused line of cide & a small tidy-up
444 lines
12 KiB
Python
444 lines
12 KiB
Python
# coding: utf-8
|
|
"""Constants used by Home Assistant components."""
|
|
MAJOR_VERSION = 0
|
|
MINOR_VERSION = 80
|
|
PATCH_VERSION = '0.dev0'
|
|
__short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION)
|
|
__version__ = '{}.{}'.format(__short_version__, PATCH_VERSION)
|
|
REQUIRED_PYTHON_VER = (3, 5, 3)
|
|
|
|
# Format for platforms
|
|
PLATFORM_FORMAT = '{}.{}'
|
|
|
|
# Can be used to specify a catch all when registering state or event listeners.
|
|
MATCH_ALL = '*'
|
|
|
|
# If no name is specified
|
|
DEVICE_DEFAULT_NAME = 'Unnamed Device'
|
|
|
|
# Sun events
|
|
SUN_EVENT_SUNSET = 'sunset'
|
|
SUN_EVENT_SUNRISE = 'sunrise'
|
|
|
|
# #### CONFIG ####
|
|
CONF_ABOVE = 'above'
|
|
CONF_ACCESS_TOKEN = 'access_token'
|
|
CONF_ADDRESS = 'address'
|
|
CONF_AFTER = 'after'
|
|
CONF_ALIAS = 'alias'
|
|
CONF_API_KEY = 'api_key'
|
|
CONF_API_VERSION = 'api_version'
|
|
CONF_AT = 'at'
|
|
CONF_AUTHENTICATION = 'authentication'
|
|
CONF_AUTH_MFA_MODULES = 'auth_mfa_modules'
|
|
CONF_AUTH_PROVIDERS = 'auth_providers'
|
|
CONF_BASE = 'base'
|
|
CONF_BEFORE = 'before'
|
|
CONF_BELOW = 'below'
|
|
CONF_BINARY_SENSORS = 'binary_sensors'
|
|
CONF_BLACKLIST = 'blacklist'
|
|
CONF_BRIGHTNESS = 'brightness'
|
|
CONF_CODE = 'code'
|
|
CONF_COLOR_TEMP = 'color_temp'
|
|
CONF_COMMAND = 'command'
|
|
CONF_COMMAND_CLOSE = 'command_close'
|
|
CONF_COMMAND_OFF = 'command_off'
|
|
CONF_COMMAND_ON = 'command_on'
|
|
CONF_COMMAND_OPEN = 'command_open'
|
|
CONF_COMMAND_STATE = 'command_state'
|
|
CONF_COMMAND_STOP = 'command_stop'
|
|
CONF_CONDITION = 'condition'
|
|
CONF_COVERS = 'covers'
|
|
CONF_CURRENCY = 'currency'
|
|
CONF_CUSTOMIZE = 'customize'
|
|
CONF_CUSTOMIZE_DOMAIN = 'customize_domain'
|
|
CONF_CUSTOMIZE_GLOB = 'customize_glob'
|
|
CONF_DELAY_TIME = 'delay_time'
|
|
CONF_DEVICE = 'device'
|
|
CONF_DEVICE_CLASS = 'device_class'
|
|
CONF_DEVICES = 'devices'
|
|
CONF_DISARM_AFTER_TRIGGER = 'disarm_after_trigger'
|
|
CONF_DISCOVERY = 'discovery'
|
|
CONF_DISKS = 'disks'
|
|
CONF_DISPLAY_CURRENCY = 'display_currency'
|
|
CONF_DISPLAY_OPTIONS = 'display_options'
|
|
CONF_DOMAIN = 'domain'
|
|
CONF_DOMAINS = 'domains'
|
|
CONF_EFFECT = 'effect'
|
|
CONF_ELEVATION = 'elevation'
|
|
CONF_EMAIL = 'email'
|
|
CONF_ENTITIES = 'entities'
|
|
CONF_ENTITY_ID = 'entity_id'
|
|
CONF_ENTITY_NAMESPACE = 'entity_namespace'
|
|
CONF_ENTITY_PICTURE_TEMPLATE = 'entity_picture_template'
|
|
CONF_EVENT = 'event'
|
|
CONF_EXCLUDE = 'exclude'
|
|
CONF_FILE_PATH = 'file_path'
|
|
CONF_FILENAME = 'filename'
|
|
CONF_FOR = 'for'
|
|
CONF_FORCE_UPDATE = 'force_update'
|
|
CONF_FRIENDLY_NAME = 'friendly_name'
|
|
CONF_FRIENDLY_NAME_TEMPLATE = 'friendly_name_template'
|
|
CONF_HEADERS = 'headers'
|
|
CONF_HOST = 'host'
|
|
CONF_HOSTS = 'hosts'
|
|
CONF_ICON = 'icon'
|
|
CONF_ICON_TEMPLATE = 'icon_template'
|
|
CONF_INCLUDE = 'include'
|
|
CONF_ID = 'id'
|
|
CONF_IP_ADDRESS = 'ip_address'
|
|
CONF_LATITUDE = 'latitude'
|
|
CONF_LONGITUDE = 'longitude'
|
|
CONF_LIGHTS = 'lights'
|
|
CONF_MAC = 'mac'
|
|
CONF_METHOD = 'method'
|
|
CONF_MAXIMUM = 'maximum'
|
|
CONF_MINIMUM = 'minimum'
|
|
CONF_MODE = 'mode'
|
|
CONF_MONITORED_CONDITIONS = 'monitored_conditions'
|
|
CONF_MONITORED_VARIABLES = 'monitored_variables'
|
|
CONF_NAME = 'name'
|
|
CONF_OFFSET = 'offset'
|
|
CONF_OPTIMISTIC = 'optimistic'
|
|
CONF_PACKAGES = 'packages'
|
|
CONF_PASSWORD = 'password'
|
|
CONF_PATH = 'path'
|
|
CONF_PAYLOAD = 'payload'
|
|
CONF_PAYLOAD_OFF = 'payload_off'
|
|
CONF_PAYLOAD_ON = 'payload_on'
|
|
CONF_PENDING_TIME = 'pending_time'
|
|
CONF_PIN = 'pin'
|
|
CONF_PLATFORM = 'platform'
|
|
CONF_PORT = 'port'
|
|
CONF_PREFIX = 'prefix'
|
|
CONF_PROFILE_NAME = 'profile_name'
|
|
CONF_PROTOCOL = 'protocol'
|
|
CONF_PROXY_SSL = 'proxy_ssl'
|
|
CONF_QUOTE = 'quote'
|
|
CONF_RADIUS = 'radius'
|
|
CONF_RECIPIENT = 'recipient'
|
|
CONF_REGION = 'region'
|
|
CONF_RESOURCE = 'resource'
|
|
CONF_RESOURCES = 'resources'
|
|
CONF_RGB = 'rgb'
|
|
CONF_ROOM = 'room'
|
|
CONF_SCAN_INTERVAL = 'scan_interval'
|
|
CONF_SENDER = 'sender'
|
|
CONF_SENSOR_TYPE = 'sensor_type'
|
|
CONF_SENSORS = 'sensors'
|
|
CONF_SHOW_ON_MAP = 'show_on_map'
|
|
CONF_SLAVE = 'slave'
|
|
CONF_SSL = 'ssl'
|
|
CONF_STATE = 'state'
|
|
CONF_STATE_TEMPLATE = 'state_template'
|
|
CONF_STRUCTURE = 'structure'
|
|
CONF_SWITCHES = 'switches'
|
|
CONF_TEMPERATURE_UNIT = 'temperature_unit'
|
|
CONF_TIME_ZONE = 'time_zone'
|
|
CONF_TIMEOUT = 'timeout'
|
|
CONF_TOKEN = 'token'
|
|
CONF_TRIGGER_TIME = 'trigger_time'
|
|
CONF_TYPE = 'type'
|
|
CONF_UNIT_OF_MEASUREMENT = 'unit_of_measurement'
|
|
CONF_UNIT_SYSTEM = 'unit_system'
|
|
CONF_URL = 'url'
|
|
CONF_USERNAME = 'username'
|
|
CONF_VALUE_TEMPLATE = 'value_template'
|
|
CONF_VERIFY_SSL = 'verify_ssl'
|
|
CONF_WEEKDAY = 'weekday'
|
|
CONF_WHITELIST = 'whitelist'
|
|
CONF_WHITELIST_EXTERNAL_DIRS = 'whitelist_external_dirs'
|
|
CONF_WHITE_VALUE = 'white_value'
|
|
CONF_XY = 'xy'
|
|
CONF_ZONE = 'zone'
|
|
|
|
# #### EVENTS ####
|
|
EVENT_HOMEASSISTANT_START = 'homeassistant_start'
|
|
EVENT_HOMEASSISTANT_STOP = 'homeassistant_stop'
|
|
EVENT_HOMEASSISTANT_CLOSE = 'homeassistant_close'
|
|
EVENT_STATE_CHANGED = 'state_changed'
|
|
EVENT_TIME_CHANGED = 'time_changed'
|
|
EVENT_CALL_SERVICE = 'call_service'
|
|
EVENT_SERVICE_EXECUTED = 'service_executed'
|
|
EVENT_PLATFORM_DISCOVERED = 'platform_discovered'
|
|
EVENT_COMPONENT_LOADED = 'component_loaded'
|
|
EVENT_SERVICE_REGISTERED = 'service_registered'
|
|
EVENT_SERVICE_REMOVED = 'service_removed'
|
|
EVENT_LOGBOOK_ENTRY = 'logbook_entry'
|
|
EVENT_THEMES_UPDATED = 'themes_updated'
|
|
|
|
# #### DEVICE CLASSES ####
|
|
DEVICE_CLASS_BATTERY = 'battery'
|
|
DEVICE_CLASS_HUMIDITY = 'humidity'
|
|
DEVICE_CLASS_ILLUMINANCE = 'illuminance'
|
|
DEVICE_CLASS_TEMPERATURE = 'temperature'
|
|
|
|
# #### STATES ####
|
|
STATE_ON = 'on'
|
|
STATE_OFF = 'off'
|
|
STATE_HOME = 'home'
|
|
STATE_NOT_HOME = 'not_home'
|
|
STATE_UNKNOWN = 'unknown'
|
|
STATE_OPEN = 'open'
|
|
STATE_OPENING = 'opening'
|
|
STATE_CLOSED = 'closed'
|
|
STATE_CLOSING = 'closing'
|
|
STATE_PLAYING = 'playing'
|
|
STATE_PAUSED = 'paused'
|
|
STATE_IDLE = 'idle'
|
|
STATE_STANDBY = 'standby'
|
|
STATE_ALARM_DISARMED = 'disarmed'
|
|
STATE_ALARM_ARMED_HOME = 'armed_home'
|
|
STATE_ALARM_ARMED_AWAY = 'armed_away'
|
|
STATE_ALARM_ARMED_NIGHT = 'armed_night'
|
|
STATE_ALARM_ARMED_CUSTOM_BYPASS = 'armed_custom_bypass'
|
|
STATE_ALARM_PENDING = 'pending'
|
|
STATE_ALARM_ARMING = 'arming'
|
|
STATE_ALARM_DISARMING = 'disarming'
|
|
STATE_ALARM_TRIGGERED = 'triggered'
|
|
STATE_LOCKED = 'locked'
|
|
STATE_UNLOCKED = 'unlocked'
|
|
STATE_UNAVAILABLE = 'unavailable'
|
|
STATE_OK = 'ok'
|
|
STATE_PROBLEM = 'problem'
|
|
|
|
# #### STATE AND EVENT ATTRIBUTES ####
|
|
# Attribution
|
|
ATTR_ATTRIBUTION = 'attribution'
|
|
|
|
# Credentials
|
|
ATTR_CREDENTIALS = 'credentials'
|
|
|
|
# Contains time-related attributes
|
|
ATTR_NOW = 'now'
|
|
ATTR_DATE = 'date'
|
|
ATTR_TIME = 'time'
|
|
|
|
# Contains domain, service for a SERVICE_CALL event
|
|
ATTR_DOMAIN = 'domain'
|
|
ATTR_SERVICE = 'service'
|
|
ATTR_SERVICE_DATA = 'service_data'
|
|
|
|
# IDs
|
|
ATTR_ID = 'id'
|
|
|
|
# Name
|
|
ATTR_NAME = 'name'
|
|
|
|
# Data for a SERVICE_EXECUTED event
|
|
ATTR_SERVICE_CALL_ID = 'service_call_id'
|
|
|
|
# Contains one string or a list of strings, each being an entity id
|
|
ATTR_ENTITY_ID = 'entity_id'
|
|
|
|
# String with a friendly name for the entity
|
|
ATTR_FRIENDLY_NAME = 'friendly_name'
|
|
|
|
# A picture to represent entity
|
|
ATTR_ENTITY_PICTURE = 'entity_picture'
|
|
|
|
# Icon to use in the frontend
|
|
ATTR_ICON = 'icon'
|
|
|
|
# The unit of measurement if applicable
|
|
ATTR_UNIT_OF_MEASUREMENT = 'unit_of_measurement'
|
|
|
|
CONF_UNIT_SYSTEM_METRIC = 'metric' # type: str
|
|
CONF_UNIT_SYSTEM_IMPERIAL = 'imperial' # type: str
|
|
|
|
# Electrical attributes
|
|
ATTR_VOLTAGE = 'voltage'
|
|
|
|
# Contains the information that is discovered
|
|
ATTR_DISCOVERED = 'discovered'
|
|
|
|
# Location of the device/sensor
|
|
ATTR_LOCATION = 'location'
|
|
|
|
ATTR_BATTERY_CHARGING = 'battery_charging'
|
|
ATTR_BATTERY_LEVEL = 'battery_level'
|
|
ATTR_WAKEUP = 'wake_up_interval'
|
|
|
|
# For devices which support a code attribute
|
|
ATTR_CODE = 'code'
|
|
ATTR_CODE_FORMAT = 'code_format'
|
|
|
|
# For calling a device specific command
|
|
ATTR_COMMAND = 'command'
|
|
|
|
# For devices which support an armed state
|
|
ATTR_ARMED = 'device_armed'
|
|
|
|
# For devices which support a locked state
|
|
ATTR_LOCKED = 'locked'
|
|
|
|
# For sensors that support 'tripping', eg. motion and door sensors
|
|
ATTR_TRIPPED = 'device_tripped'
|
|
|
|
# For sensors that support 'tripping' this holds the most recent
|
|
# time the device was tripped
|
|
ATTR_LAST_TRIP_TIME = 'last_tripped_time'
|
|
|
|
# For all entity's, this hold whether or not it should be hidden
|
|
ATTR_HIDDEN = 'hidden'
|
|
|
|
# Location of the entity
|
|
ATTR_LATITUDE = 'latitude'
|
|
ATTR_LONGITUDE = 'longitude'
|
|
|
|
# Accuracy of location in meters
|
|
ATTR_GPS_ACCURACY = 'gps_accuracy'
|
|
|
|
# If state is assumed
|
|
ATTR_ASSUMED_STATE = 'assumed_state'
|
|
ATTR_STATE = 'state'
|
|
|
|
ATTR_OPTION = 'option'
|
|
|
|
# Bitfield of supported component features for the entity
|
|
ATTR_SUPPORTED_FEATURES = 'supported_features'
|
|
|
|
# Class of device within its domain
|
|
ATTR_DEVICE_CLASS = 'device_class'
|
|
|
|
# Temperature attribute
|
|
ATTR_TEMPERATURE = 'temperature'
|
|
|
|
# #### UNITS OF MEASUREMENT ####
|
|
# Temperature units
|
|
TEMP_CELSIUS = '°C'
|
|
TEMP_FAHRENHEIT = '°F'
|
|
|
|
# Length units
|
|
LENGTH_CENTIMETERS = 'cm' # type: str
|
|
LENGTH_METERS = 'm' # type: str
|
|
LENGTH_KILOMETERS = 'km' # type: str
|
|
|
|
LENGTH_INCHES = 'in' # type: str
|
|
LENGTH_FEET = 'ft' # type: str
|
|
LENGTH_YARD = 'yd' # type: str
|
|
LENGTH_MILES = 'mi' # type: str
|
|
|
|
# Volume units
|
|
VOLUME_LITERS = 'L' # type: str
|
|
VOLUME_MILLILITERS = 'mL' # type: str
|
|
|
|
VOLUME_GALLONS = 'gal' # type: str
|
|
VOLUME_FLUID_OUNCE = 'fl. oz.' # type: str
|
|
|
|
# Mass units
|
|
MASS_GRAMS = 'g' # type: str
|
|
MASS_KILOGRAMS = 'kg' # type: str
|
|
|
|
MASS_OUNCES = 'oz' # type: str
|
|
MASS_POUNDS = 'lb' # type: str
|
|
|
|
# UV Index units
|
|
UNIT_UV_INDEX = 'UV index' # type: str
|
|
|
|
# #### SERVICES ####
|
|
SERVICE_HOMEASSISTANT_STOP = 'stop'
|
|
SERVICE_HOMEASSISTANT_RESTART = 'restart'
|
|
|
|
SERVICE_TURN_ON = 'turn_on'
|
|
SERVICE_TURN_OFF = 'turn_off'
|
|
SERVICE_TOGGLE = 'toggle'
|
|
SERVICE_RELOAD = 'reload'
|
|
|
|
SERVICE_VOLUME_UP = 'volume_up'
|
|
SERVICE_VOLUME_DOWN = 'volume_down'
|
|
SERVICE_VOLUME_MUTE = 'volume_mute'
|
|
SERVICE_VOLUME_SET = 'volume_set'
|
|
SERVICE_MEDIA_PLAY_PAUSE = 'media_play_pause'
|
|
SERVICE_MEDIA_PLAY = 'media_play'
|
|
SERVICE_MEDIA_PAUSE = 'media_pause'
|
|
SERVICE_MEDIA_STOP = 'media_stop'
|
|
SERVICE_MEDIA_NEXT_TRACK = 'media_next_track'
|
|
SERVICE_MEDIA_PREVIOUS_TRACK = 'media_previous_track'
|
|
SERVICE_MEDIA_SEEK = 'media_seek'
|
|
SERVICE_SHUFFLE_SET = 'shuffle_set'
|
|
|
|
SERVICE_ALARM_DISARM = 'alarm_disarm'
|
|
SERVICE_ALARM_ARM_HOME = 'alarm_arm_home'
|
|
SERVICE_ALARM_ARM_AWAY = 'alarm_arm_away'
|
|
SERVICE_ALARM_ARM_NIGHT = 'alarm_arm_night'
|
|
SERVICE_ALARM_ARM_CUSTOM_BYPASS = 'alarm_arm_custom_bypass'
|
|
SERVICE_ALARM_TRIGGER = 'alarm_trigger'
|
|
|
|
|
|
SERVICE_LOCK = 'lock'
|
|
SERVICE_UNLOCK = 'unlock'
|
|
|
|
SERVICE_OPEN = 'open'
|
|
SERVICE_CLOSE = 'close'
|
|
|
|
SERVICE_CLOSE_COVER = 'close_cover'
|
|
SERVICE_CLOSE_COVER_TILT = 'close_cover_tilt'
|
|
SERVICE_OPEN_COVER = 'open_cover'
|
|
SERVICE_OPEN_COVER_TILT = 'open_cover_tilt'
|
|
SERVICE_SET_COVER_POSITION = 'set_cover_position'
|
|
SERVICE_SET_COVER_TILT_POSITION = 'set_cover_tilt_position'
|
|
SERVICE_STOP_COVER = 'stop_cover'
|
|
SERVICE_STOP_COVER_TILT = 'stop_cover_tilt'
|
|
|
|
SERVICE_SELECT_OPTION = 'select_option'
|
|
|
|
# #### API / REMOTE ####
|
|
SERVER_PORT = 8123
|
|
|
|
URL_ROOT = '/'
|
|
URL_API = '/api/'
|
|
URL_API_STREAM = '/api/stream'
|
|
URL_API_CONFIG = '/api/config'
|
|
URL_API_DISCOVERY_INFO = '/api/discovery_info'
|
|
URL_API_STATES = '/api/states'
|
|
URL_API_STATES_ENTITY = '/api/states/{}'
|
|
URL_API_EVENTS = '/api/events'
|
|
URL_API_EVENTS_EVENT = '/api/events/{}'
|
|
URL_API_SERVICES = '/api/services'
|
|
URL_API_SERVICES_SERVICE = '/api/services/{}/{}'
|
|
URL_API_COMPONENTS = '/api/components'
|
|
URL_API_ERROR_LOG = '/api/error_log'
|
|
URL_API_LOG_OUT = '/api/log_out'
|
|
URL_API_TEMPLATE = '/api/template'
|
|
|
|
HTTP_OK = 200
|
|
HTTP_CREATED = 201
|
|
HTTP_MOVED_PERMANENTLY = 301
|
|
HTTP_BAD_REQUEST = 400
|
|
HTTP_UNAUTHORIZED = 401
|
|
HTTP_NOT_FOUND = 404
|
|
HTTP_METHOD_NOT_ALLOWED = 405
|
|
HTTP_UNPROCESSABLE_ENTITY = 422
|
|
HTTP_TOO_MANY_REQUESTS = 429
|
|
HTTP_INTERNAL_SERVER_ERROR = 500
|
|
HTTP_SERVICE_UNAVAILABLE = 503
|
|
|
|
HTTP_BASIC_AUTHENTICATION = 'basic'
|
|
HTTP_DIGEST_AUTHENTICATION = 'digest'
|
|
|
|
HTTP_HEADER_HA_AUTH = 'X-HA-access'
|
|
HTTP_HEADER_X_REQUESTED_WITH = 'X-Requested-With'
|
|
|
|
CONTENT_TYPE_JSON = 'application/json'
|
|
CONTENT_TYPE_MULTIPART = 'multipart/x-mixed-replace; boundary={}'
|
|
CONTENT_TYPE_TEXT_PLAIN = 'text/plain'
|
|
|
|
# The exit code to send to request a restart
|
|
RESTART_EXIT_CODE = 100
|
|
|
|
UNIT_NOT_RECOGNIZED_TEMPLATE = '{} is not a recognized {} unit.' # type: str
|
|
|
|
LENGTH = 'length' # type: str
|
|
MASS = 'mass' # type: str
|
|
VOLUME = 'volume' # type: str
|
|
TEMPERATURE = 'temperature' # type: str
|
|
SPEED_MS = 'speed_ms' # type: str
|
|
ILLUMINANCE = 'illuminance' # type: str
|
|
|
|
WEEKDAYS = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']
|
|
|
|
# The degree of precision for platforms
|
|
PRECISION_WHOLE = 1
|
|
PRECISION_HALVES = 0.5
|
|
PRECISION_TENTHS = 0.1
|