Git Product home page Git Product logo

circlehome's Introduction

CircleHome: Home Assistant enabled IoT UI for M5Dial

A HomeAssistant device controller built into a cute 1.28" dial.

Features

  • Control HomeAssistant devices:
    • Lights (brightness, colour, on/off)
    • Switches (on/off)
    • More may be added if requested...
  • Create timers which alert using the on-board buzzer
  • Automatically identifies entities from your Home Assistant install - no per-device configuration required
  • Clock with timezone and daylight savings time correction
  • Little configuration required - authenticate in your browser with HomeAssistant

Installation

The software is only compatible with the M5Dial by M5Stack, but it would be relatively trivial to port it to other ESP32-based dials and knobs.

  • Flash the latest release at [https://aeroniemi.github.io/circlehome/]
  • Set the WiFi details using the tool (Improv Serial/WiFi)
  • Visit the device URL to authenticate with your Home Assistant instance
  • You're good to go!

Operation

The interface of CircleHome should be fairly intuitive, but here's a few tips:

  • To return to the main menu, long press the dial.

Building

  • The repository contains all the details you'll need to build the project using Platform-IO.
  • Install the Platform-IO plugin to Visual Studio Code.
  • Clone the repository
  • Open the VSCode workspace
  • Open a Platform-IO terminal using Ctrl+P
  • A number of VSCode tasks exist to generate images and other derivative assets - you may need to run those before uploading code.
  • Run pio run
  • Alternatively you can just run Platform-IO Build from the command palette
  • To upload to a device, run Platform-IO Upload

circlehome's People

Contributors

aeroniemi avatar

Watchers

 avatar

circlehome's Issues

Create a UI timer screen

I want to be able to set a timer, see a countdown and have it make noise when it ends

Best option I've seen so far is to create a calendar event in home assistant

Crash due to invalid timezone

The code crashes if you enter a invalid timezone. e.g.

  • "europe/london"
  • "gmt+8"

The library cares about capitalisation so the capitalisation needs to be correct
equally, this needs to be validated out before being committed to settings

Improve the UI Clock page

It'd be nice to:

  • show the date
  • have a monospace font (or at least not move so much because it is annoying)

Screen flickering

if you put the screen on a fixed colour you can see quite easily that the screen flickers quite a bit. i think this is due to the driver, so perhaps write our own one/replace it.

Do we really need -frtti?

Currently -frtti is needed to get the project to compile due to dynamic class assignment in the entities - this isn't ideal, and i don't think even actually needed because errors manages just fine without it. Test and if possible remove this requirement.

Write basic documentation

  • a readme
  • explanation of how someone else could use it
  • at least one gif/photos to show it doing things

Speed up (local) building

Currently it can sometimes take in excess of 300 seconds (5 minutes!) to build the project locally - even actions is quicker. It'd be nice to make this take less time, and there must be optimisations available

Update workflows for releases

  • A workflow that runs on tag to create a release
    • create release
    • adds relevant files as artifacts to the release
    • includes changelog in the body
  • Update the PR workflow to
    • Include bin files
  • ?Add memory/flash usage to PR

Remaining tasks for initial release

Currently the product is actually pretty functional - it includes almost all of the things I deem essential for initial release. There's a few more things that need doing though, so do those

Some kind of initialisation/setup experience

being able to set the wifi ssid/password/timezone/token once the EFI has been installed allows us to ship pre-compiled firmware for others to use

probably some kind of web server that saves the results to Preferences

Add Improv WiFi

Replace the bit of the setup experience that does this with improv

Create a UI music player screen

like the LVGL demo i guess but needs to:
background is cover art (oh boy here comes the file system i guess)
play/pause/skip/back
time elapsed/time left
twist volume

Create a way to show errors/messages on the UI

It'd be useful to be able to show errors and other messages on the UI as well as via serial. Examples include:

  • Cannot connect to wifi
  • Cannot connect to HA
  • HA credentials invalid
  • Need to initialize

Use a LV message box

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.