The HomA framework consists of various independent software and hardware components that can be added to the system simply by connecting them to the central broker. Once connected, they can publish and subscribe to various topics on the MQTT message bus in order to interact with other components. The architecture overview below should give you a good overview about the system.
- Ambilight Controls generic RGB LED strips for room illumination
- Calendar Automates tasks through Google calendar events
- Demo A demo component that displays a device with various controls in the interface
- CSM Publishes the average power consumption reported by a custom API for the VOLTCRAFT® VSM-102 smartmeter.
- Logger Logs published messages to the console
- Rules Automates anything through a set of rules
- Sockets Controls generic 433Mhz wireless power sockets
- Solar Publishes various solar positions
- Weather Shows the current weather at a location
For more components look at hmueller01/homA-components.
Adding custom components
Currently, most components are written in Node.js and use the HomA module that is available in the npm repositories. The module provides a common command-line syntax and several helper functions to connect to the broker, save and restore settings or schedule the publishing of values at a specified time.
That being said, you're of course free to add components written in a language of your choice. If you want to write your own one, fork the repository on GitHub, clone the repository to your local machine, create and check out a new branch, add your component to the components directory, commit your changes and push the new branch to your fork of the repository. Finally send send us a pull request. Please include a small README.md file that describes what your component does and how to use it. We also promise not to bite or to laugh about a seemingly trivial component.
While you are mostly free to publish and subscribe to any topic of your choice, the conventions page should get you started when you want to integrate your component into the system.