Checklist for creating a platform
A checklist of things to do when you're adding a new platform.
Not all existing platforms follow the requirements in this checklist. This cannot be used as a reason to not follow them!
0. Common
- Follow our Style guidelines
- Use existing constants from const.py- Only add new constants to const.pyif they are widely used. Otherwise keep them on platform level
- Use CONF_MONITORED_CONDITIONSinstead ofCONF_MONITORED_VARIABLES
 
- Only add new constants to 
1. Requirements
- Requirements have been added to manifest.json. TheREQUIREMENTSconstant is deprecated.
- Requirement version should be pinned: "requirements": ['phue==0.8.1']
- We no longer want requirements hosted on GitHub. Please upload to PyPi.
2. Configuration
- If the platform can be set up directly, add a voluptuous schema for configuration validation
- Voluptuous schema extends schema from component
 (e.g.,hue.light.PLATFORM_SCHEMAextendslight.PLATFORM_SCHEMA)
- Default parameters specified in voluptuous schema, not in setup_platform(...)
- Your PLATFORM_SCHEMAshould use as many generic config keys as possible fromhomeassistant.const
- Never depend on users adding things to customizeto configure behavior inside your platform.
import voluptuous as vol
from homeassistant.const import CONF_FILENAME, CONF_HOST
from homeassistant.components.light import PLATFORM_SCHEMA
import homeassistant.helpers.config_validation as cv
CONF_ALLOW_UNREACHABLE = "allow_unreachable"
DEFAULT_UNREACHABLE = False
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
    {
        vol.Required(CONF_HOST): cv.string,
        vol.Optional(CONF_ALLOW_UNREACHABLE, default=DEFAULT_UNREACHABLE): cv.boolean,
        vol.Optional(CONF_FILENAME): cv.string,
    }
)
3. Setup platform
- Verify that the passed in configuration (user/pass/host etc.) works.
- Group your calls to `add_entities if possible.
- If the platform adds extra services, the format should be <domain of your integration>.<service name>. So if your integration's domain is "awesome_sauce" and you are making a light platform, you would register services under theawesome_saucedomain. Make sure that your services verify permissions.
4. Entity
- 
Extend the entity from the integration you're building a platform for. from homeassistant.components.light import Light
 class HueLight(Light):
 """Hue light component."""
- 
Avoid passing in hassas a parameter to the entity.hasswill be set on the entity when the entity is added to Home Assistant. This means you can accesshassasself.hassinside the entity.
- 
Do not call update()in constructor, useadd_entities(devices, update_before_add=True)instead.
- 
Do not do any I/O inside properties. Cache values inside update()instead.
- 
When dealing with time, state and/or attributes should not contain relative time since something happened. Instead, it should store UTC timestamps. 
- 
Leverage the entity lifecycle callbacks to attach event listeners or clean up connections. 
5. Communication with devices/services
- 
All API specific code has to be part of a third party library hosted on PyPi. Home Assistant should only interact with objects and not make direct calls to the API. # bad
 status = requests.get(url("/status"))
 # good
 from phue import Bridge
 bridge = Bridge(...)
 status = bridge.status()Tutorial on publishing your own PyPI package Other noteworthy resources for publishing python packages: 
 Cookiecutter Project
 flit
 Poetry