[![MIT License](https://img.shields.io/github/license/serega404/EasyESPRealy)](https://github.com/serega404/EasyESPRealy/blob/master/LICENSE)
![IDE](https://img.shields.io/badge/Work%20in-Arduino%20IDE-green)

## About The Project

This project was designed to facilitate deployment of a Wi-Fi relay. Advanced users can also extend its functionality with ease.

### Example device
![alt text](images/example_device.jpg "example")

### Installation

1. Open .ino file in Arduino IDE

2. Select COM port and Board in the tools

3. Change the following constants:

    - `WIFI_SSID` - SSID of your Wi-Fi network,
    - `WIFI_PASSWORD` - Wi-Fi password,
    - `MQTT_HOST`, `MQTT_LOGIN`, `MQTT_PASSWORD` - as required to connect to your MQTT Broker.

    It is also recommended to change your `OTAUSER` and `OTAPASSWORD`.

3. Flash the firmware to the ESP.

## Usage

The MQTT Protocol is used in many smart home projects, and this repository is no exception. A server with a MQTT Brocker installed and a client that can handle requests are required.

To enable or disable the relay, send `1` or `0` to `setStateTopic`.
Сurrent status of the relay can be obtained in `stateTopic`.

### Home Assistant template config
```
light:
  - platform: mqtt
    name: "Light 1"
    command_topic: "dvor/light1/state/set"
    state_topic: "dvor/light1/state"
    payload_on: "1"
    payload_off: "0"
    qos: 1
```

## MQTT Topics

* `ipTopic` - returns the IP address after entering boot mode
* `bootTopic` - required for HTTP updater
* `setStateTopic` - necessary to get information from MQTT broker
* `stateTopic` - checks whether the relay is enabled

## OTA Update

1. Send `1` in `bootTopic` to enable firmware update mode
2. Get relay's IP address from `ipTopic` (this can be done with [MQTT-Explorer](https://mqtt-explorer.com/))
3. Go to `http://{ip}/firmware` in your Internet browser
4. Enter your username and password (Default: `admin` / `admin`)
5. Select the file and click *Update Firmware*

## Libraries

* [ESP8266WiFi](https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WiFi)
* [AsyncMqttClient](https://github.com/marvinroger/async-mqtt-client)
* [ESP8266HTTPUpdateServer](https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266HTTPUpdateServer)
* [Ticker](https://github.com/esp8266/Arduino/tree/master/libraries/Ticker)

## Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Feel free to contribute to this project.

## License

Distributed under the MIT License. See `LICENSE` for more information.

## Contact

*Sergey Karmanov* - [@serega404](https://t.me/serega404)