voorkant

your non-web Home Assistant front-end

Intro

3 minutes

FIXME: while all of this information should be interesting, some of it should probably eventually be split out to other pages.

What is voorkant? #

voorkant is a (set of) frontends for Home Assistant, built outside of your web browser, aimed at devices too weak to run a web browser. voorkant is written in C++ for performance and portability, using libcurl (currently) to talk to Home Assistant via a websocket connection - which means everything is live, there is no polling.

Why is it called voorkant? #

voorkant is the Dutch word for front or front side.

Can I see some pictures? #

Check out our screenshots page.

What frontends does voorkant provide? #

We currently ship three frontends:

  • cli - a commandline tool for interacting with HA from your shell prompt. Run commands, list your entities, subscribe to state changes.
  • ftxui - a terminal UI that allows viewing entity states and invoking calls on them. This was built to test our HA interactions before we had an actual GUI, but it is useful by itself too.
  • LVGL - the current focus of the project. This is a graphical interface that can run in a window on your PC, but can also run on various embedded (Linux) devices with touch screens (or perhaps, in the future, also some without!). It also works on the framebuffer console of your Raspberry Pi, if you can figure out how to input touches/clicks.

Why did you build voorkant? #

(“I” is Peter).

I have an Eneco Toon 2 thermostat, rooted thanks to ToonSoftwareCollective, with their “app store”. This is a fine device that responds well to screen touches. I was missing a few features/apps that would be nice to have, so I bought a Toon 1 to do app development on. It turns out that Eneco/Quby’s stock software on a Toon 1 is unbearably laggy. I wondered if the hardware really was that bad, or if the software was just inefficient, so I tried a few things, and soon realised that it could run Doom. This suggested to me that the existing software was not showing the full potential of the hardware.

Looking around for suitable GUI libraries, I found LVGL. Porting the LVGL demo showed that this device could be quite responsive with the right software, so I decided to write a native Home Assistant client for the device. And so, voorkant was born.

Who built voorkant? #

voorkant was originally thought up by Peter van Dijk, who wrote the first few lines of code. Once it started taking shape, Ruben d’Arco joined in and contributed big chunks of work.

Day zero enthusiast Robert van der Meulen provided valuable input on many topics.

Collections

Pages

January 0001

Devices

While originally targeted at Toon 1, voorkant can run on other devices too. Toon 1 Specifications: SoC: MCIMX27LM0P4A with: CPU: ARM926EJ-S at 400 MHz 128 MB memory 128 MB flash, root file system 100MB, roughly 40MB free after rooting Ethernet, WiFi, Z-wave, USB port 800x480 display with touch, advertised as 32 bits per pixel by the framebuffer driver kernel version somewhere around 2.6.36-R10-h28 libc-2.21.so with GLIBC_ symbols GLIBC_2.4 to GLIBC_2.18 Based on the libc version, it turns out that binaries copied from Debian 8/armel tend to work, if they don’t need too many libraries.

1 minute

Installation

TODO: avoid $ in copy (for pasting) of commands. https://css-tricks.com/to-or-not-to-displaying-terminal-code-snippets/ is interesting, but not sure how to fold it into markdown. https://discourse.gohugo.io/t/set-custom-classes-within-markdown-content/20627/3 from 2019 notes that hugo’s MD renderer, Goldmark, can only do custom classes on headings, and this appears to still be true. Usage on your local system Compile from source This section is for local running. Scroll down [FIXME anchor link] for deployment to other devices. You will need a very recent Meson version.

2 minutes

Screenshots

Please note that these screenshots may not reflect current development status!

1 minute