HomeIO Articles about real life tech solution and HomeIO - an universal system for remote monitor and control

Wind turbine statistics addon is more pretty now

A better one

I have changed addon interface to allow better representation of current state of system. You can see history of various parameters from latest one.


Theese parameters are:

  • time - hour
  • work - generated energy in Wh but in file there is in Joules)
  • coil time - time of working turbine by coil voltage higher than 5V
  • batt time - time of working turbine by charging current higher than 0.5A
  • res time - time of working resistor as a brake
  • max b curr - maximum charging current
  • max b v - maximum battery voltage
  • max coil v - maximum voltage on coil (one preselected)

Sample image

Wind turbine statistics

Shared pointers

The best lazy solution to memory leak

Shared pointers allow me to utilize power of pointers without thinking about memory deallocation - delete function.

Overhead in that method is max 1-3% depends on compiler.

At this moment only ncurses related code is not using shared pointers.

Cmake is awesome

My friend told my about cmake that it is his favourite building tool.

At start I had big problem to understand how this tool works. I need to create simple “hello world” program and compile it. Next thing was try to integrate with HomeIO and from that point it started to work quite fast.

The biggest pros of cmake is that if make compiling much faster in development by compiling only what has been changed. After compile error I don’t have to wait to compile what was already done.

There are some things to do, like put some cmake snippets in better format than shell scripts. I don’t want to use makefile to run another makefile.

Ncurses interface

New interface

HomeIO was created as a server-like application which everything important is rendered as log-like response.

Wind turbine instance is very dynamic. There was too much of information rendered too fast. It was nearly not readable at all. I need to change it.

I wanted to try ncurses as one of the most popular tool to create console interface. It was quite some work which allowed me to perform a lot of other changes and fixes.

Now, you can see current measurements without using frontend.


Interface consist of various tabs which I will describe below.

  • Home - status of all modules, boot and shutdown
  • Log - last log messages, scrollable
  • Meas - current measurements
  • Action - list of actions
  • Overseer - list of overseer: current state, measurement and executable action
  • Addons - every addon has its own page
  • Stats - at this moment only resource usage stats

Measurement UI


I want to add theese features soon:

  • Better addons interface: wind turbine with more meaningful data, …
  • Some actions can executable from interface. It will be probably accessible by addon page.
  • More stats

Refactoring and clang support


I’m in the middle of refactoring to more proper code structure: header structure and all code (*.cpp) files as input for compiler. My friend told me that approach is much more secure, and allow to detect errors much more easily.

I’ve managed to make backend compilable and run it on local instance for tests, but there is a some work to do.


I’ve managed to allow to compile backend using clang. I’ve always used GCC, and I’m not going to change it.

Clang is much more verbose and detects other types of errors (or warnings). Testing on both compilers allow creation of much more portable code.


I’m thinking about using some basic text interface, but allow to change to old log-style output.

This should make backend process much more readable and usable.