diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..09a3661
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,114 @@
+aioesphomeapi
+=============
+
+``aioesphomeapi`` allows you to interact with devices flashed with `ESPHome `_.
+
+Installation
+------------
+
+The module is available from the `Python Package Index `_.
+
+.. code:: bash
+
+ $ pip3 install aioesphomeapi
+
+Usage
+-----
+
+It's required that you enable the `Native API `_ component for the device.
+
+.. code:: yaml
+
+ # Example configuration entry
+ api:
+ password: 'MyPassword'
+
+Check the output to get the local address of the device or use the ``name:``under ``esphome:`` from the device configuration.
+
+.. code:: bash
+
+ [17:56:38][C][api:095]: API Server:
+ [17:56:38][C][api:096]: Address: api_test.local:6053
+
+
+The sample code below will connect to the device and retrieve details.
+
+.. code:: python
+
+ import aioesphomeapi
+ import asyncio
+
+ async def main():
+ """Connect to an ESPHome device and get details."""
+ loop = asyncio.get_running_loop()
+
+ # Establish connection
+ api = aioesphomeapi.APIClient(loop, "api_test.local", 6053, "MyPassword")
+ await api.connect(login=True)
+
+ # Get API version of the device's firmware
+ print(api.api_version)
+
+ # Show device details
+ device_info = await api.device_info()
+ print(device_info)
+
+ # List all entities of the device
+ entities = await api.list_entities_services()
+ print(entities)
+
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(main())
+
+Subscribe to state changes of an ESPHome device.
+
+.. code:: python
+
+ import aioesphomeapi
+ import asyncio
+
+ async def main():
+ """Connect to an ESPHome device and wait for state changes."""
+ loop = asyncio.get_running_loop()
+ cli = aioesphomeapi.APIClient(loop, "api_test.local", 6053, "MyPassword")
+
+ await cli.connect(login=True)
+
+ def change_callback(state):
+ """Print the state changes of the device.."""
+ print(state)
+
+ # Subscribe to the state changes
+ await cli.subscribe_states(change_callback)
+
+ loop = asyncio.get_event_loop()
+ try:
+ asyncio.ensure_future(main())
+ loop.run_forever()
+ except KeyboardInterrupt:
+ pass
+ finally:
+ loop.close()
+
+Other examples:
+
+- `Camera `_
+- `Async print `_
+- `Simple print `_
+
+Development
+-----------
+
+For development is recommended to use a Python virtual environment (``venv``).
+
+.. code:: bash
+
+ $ python3 -m venv .
+ $ source bin/activate
+ $ python3 setup.py develop
+
+License
+-------
+
+``aioesphomeapi`` is licensed under MIT, for more details check LICENSE.