# Exshome

[![Hex Package](](
[![Hex Docs](](

DIY Elixir-based smart home.

## System dependencies
- [MPV]( - Exshome uses it as a player. You will not be able to play any track without it.

## Project goals
- Mobile-friendly
- Extensibility
- Test coverage
- Should support different Single Board Computers

## Getting started with development
- Install dependencies with `mix deps.get`
- Setup database `mix ecto.setup`
- Start Phoenix endpoint with `mix phx.server` or inside IEx with `iex -S mix phx.server`. Now you can visit [`localhost:4000`](http://localhost:4000) from your browser.

## Launching as a script
You can use `bin/exshome` to start an application. It is an executable Elixir script. It downloads Exshome and starts the application.

You can download the latest version here:
chmod +x exshome

This script supports these environment variables:
- `EXSHOME_VERSION` - Exshome version. You can get the latest available version [at](
- `EXSHOME_HOST` - Host to listnen on, default is "".
- `EXSHOME_PORT` - Application port, default is "5000".
- `EXSHOME_ROOT` - Path where all application data resides, default is "${HOME}/.exshome".

## Caveats
- [UNIX domain socket length is limited to about 100 bytes]( Application uses these sockets to communicate with MPV. It will not work if the path is larger.

## Applications

Exshome includes simple applications. Each application has own pages.

### Clock (ExshomeClock)
Simple clock.

### Player (ExshomePlayer)
Allows to play music. You can upload your files or add links to the remote resources.

### Automation (ExshomeAutomation)
It is early WIP. Responsible for automating workflows.

## Security considerations
Right now Exshome is designed to run in a home network, so it has no auth. It can be dangerous to open it for a whole Internet.