Home

Awesome

<p align="center"> <img src="https://raw.githubusercontent.com/sieren/Homepoint/master/media/logo.png" width="320" alt="homepoint logo" /> </p> <p align="center"> <img alt="issues" src="https://travis-ci.org/sieren/Homepoint.svg?branch=master"> <a href="https://github.com/sieren/Homepoint/issues"><img src="https://img.shields.io/github/issues/sieren/Homepoint.svg"/></a> <a href="#donations"><img src="https://yourdonation.rocks/images/badge.svg" alt="Donations Badge"></a> </p>

:house: Control your MQTT/HomeKit Smart Home Devices from an ESP32-powered screen :house:

<p align="center"> <img src="https://raw.githubusercontent.com/sieren/Homepoint/master/media/img3.gif" width="500"> <img src="https://raw.githubusercontent.com/sieren/Homepoint/master/media/img6.jpg" height="281"> </p>

Homepoint is a screen-based interface for MQTT & HomeKit-connected Smarthome devices that runs on the ESP32 Chipset.

Table of Contents

<a name="features"></a>

:heavy_check_mark: Features

*currently on experimental branch. <a name="demo">

:camera: Demo

HomePoint Youtube demo

<a name="installation"></a>

:house: Installation

HomePoint comes in 2 pre-compiled .bin files ready to be flashed on either a generic ESP32 Module or M5Stack. More details on the hardware setup are available in the Wiki.

Steps to install:

  1. Download ESPTools from https://github.com/espressif/esptool/releases
  2. Install ESPTools with python setup.py install
  3. Run esptool.py -b 921600 write_flash -fs 4MB -fm dout 0x0 homepoint_espgeneric.bin (or homepoint_m5stack.bin for M5Stack)

Alternatively, watch the installation video below:

HomePoint Installation demo

<a name="build"></a>

:house: Build from source

Homepoint was created using the ESP-IDF SDK.

Detailed build instructions are available in the Wiki.

<a name="configuration"></a>

:twisted_rightwards_arrows: Configuration

The configuration lives in data/config.json.

<a name="devices"></a>

Devices & Scenes

HomePoint supports two types of Scenes with a selection of devices each:

SCENE TypesDEVICE Types
Light, Switch(none, all devices expected to be switches)
Sensordisplay one or two values at once with customizable icons (singleValue / combinedValues)

Grouped Sensors support up to two devices (due to screen space).
Lights & Switches support an infinite number of devices in a group.

Some Sensors use JSON as a data-format, in which case a key can be defined. These can be on any level of the sensor json payload, for Tasmota smart plugs the key value "Power" can be used to display the current power consumption.

<a name="credentials"></a>

WiFi & MQTT Credentials

WiFi and MQTT credentials are to be defined on the top level.

<a name="ntp"></a>

NTP Time (optional)

In order to set the correct timezone, copy & paste your NTP TZ Setting to the timezone key.

<a name="hardware"></a>

Hardware (optional)

Some of the IL9341 Display units seem to differ in e.g. how the touch-screen coordinates correspond to the display or how the LED backlight is controlled. Therefore we offer some options to override the defaults in the configuration file.

KeyTypeValue
"ledPinPullup"Booleantrue or false - control backlight power which can be pull-up/down depending on unit
"screenRotationAngle"IntThe rotation parameter can be 0, 1, 2 or 3 - incrementing in 90deg angles
"screenSaverMinutes"IntMinutes until display is switched off (default 10)
"touchXAxisInverted"Booldefault: false, invert the X Axis of the touch screen in case it is misaligned
"touchYAxisInverted"Booldefault: true, invert the Y Axis of the touch screen in case it is misaligned
"displayColorInverted"Booldefault: false, invert the colorspace (ie. for ILI9342C Displays)

<a name="examples"></a>

Example

MQTT Topics are case-sensitive as per MQTT specification.

{
  "wifi": "MyWifiSSID",
  "password": "My Wifi Password",
  "hostname": "optionalhostname",
  "login": "admin",
  "webpass": "admin",
  "mqttbroker": "mqtt://192.168.1.2",
  "mqttusername": "mqttusername",
  "mqttpasswd": "mymqttpassword",
  "timezone": "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00",
  "scenes": [{
    "name": "Living Room",
    "type": "Light",
    "icon": "livingroom",
    "devices": [{
      "name": "Some Light",
      "setTopic": "lights/hue/00:17:88:01:02:3c:2a:6d-0b/set/on",
      "getTopic": "hue/status/lights/Hue color lamp 1",
      "onValue": "true",
      "offValue": "false"
    },
    {
      "name": "Door Light",
      "setTopic": "lights/hue/00:17:88:01:02:3c:2a:6d-0b/set/on",
      "getTopic": "hue/status/lights/Hue color lamp 1",
      "onValue": "true",
      "offValue": "false",
      "icon": "door"
    },
    ]
  },
  {
    "name": "Bedroom",
    "type": "Sensor",
    "icon": "door",
    "devices": [{
      "name": "Temperature DHT Sensor",
      "type": "singleValue",
      "jsondata": true,
      "firstIcon": "temperature_small",
      "firstKey": "temperature",
      "getTopic": "bedroom/esptemp"
    },
    {
      "name": "Tasmota Smart Plug",
      "type": "singleValue",
      "jsondata": true,
      "firstKey": "Power",
      "firstIcon":"wattage_small",
      "getTopic": "tele/DVES_2F73BE/SENSOR"
    }]
  }]
}

A more fully-configured example is available here.

<a name="roadmap"></a>

:crystal_ball: Roadmap

<a name="known-bugs"></a>

:bug: Known bugs & issues :bug:

If you find any bugs or need assistance, don't hesitate and open an issue :)

<a name="contributing"></a>

:revolving_hearts: Contributing

Contributions are welcome! Just hack away and open a Pull Request. But please follow the style of the code that's already there (ie. no tabs, spacing).

<a name="donations"></a>

:coffee: Buy me a coffee

I have developed HomePoint in my free time because I wanted to learn more about C++ on ESP32 and to solve a concrete problem in my smarthome.
As development kept on going, I thought about ways to make this project open source and more accessible and user-friendly for the maker-community.

If you enjoy using HomePoint or this work, consider a small donation. But don't worry, I'll continue working on this anyway ;-).

paypal

Thanks!!

<a name="license"></a>

:scroll: License

MIT © Matthias Frick