Files
andry 66d64dda4f build: rewrite Doxyfile for in-repo generation, drop stale output
Relative paths, markdown main page (main.md), project version 4.6.0, HTML
only. Removed the checked-in html/latex/rtf output (now gitignored; the
generated HTML is published to lighthub.github.io).
2026-10-03 00:41:36 +03:00

46 lines
2.4 KiB
Markdown

# LightHub
LightHub is a flexible open-source smart home controller firmware for Arduino Mega 2560,
Arduino Due, ESP8266, ESP32, ESP32-C3, STM32, NRF52840 and M5Stack boards.
It turns a microcontroller into an MQTT-enabled controller for:
- lighting (relays, PWM/DMX dimmers, RGB/RGBW/RGBWW, addressable NeoPixel strips);
- HVAC (thermostats, PID underfloor heating, multizone ventilation `VENTS`, Haier AC);
- irrigation (autonomous sprinkler controller with tank level management);
- meters (Mercury energy meters, generic counters);
- sensors (1-Wire, DHT, CCS811, HDC1080, analog inputs);
- integration buses: Modbus RTU, CAN (lightspot), 1-Wire, UART bridges.
## Getting started
- In-repo user documentation (RU): `documentation/README.md`
- Wiki: https://www.lazyhome.ru/dokuwiki/doku.php?id=start
- Project site: https://lighthub.github.io/
## Core concepts
- **Item** (`item.h`) — a virtual channel of a given type (`CH_*`, 0..23) with arguments,
current value and last command. All external control goes through `Item::Ctrl()`.
- **Suffix** (`suffix_P` in `item.h`) — the topic suffix that selects the action:
`cmd`, `set`, `val`, `del`, `HSV`, `RGB`, `fan`, `mode`, `ctrl`, `hue`, `sat`, `temp`, `raw`.
- **Command** (`itemCmd.h`) — the payload action: `ON`, `OFF`, `TOGGLE`, `INCREASE`, `DECREASE`,
`ENABLE`, `DISABLE`, `FREEZE`, `UNFREEZE`, `AUTO`, `HEAT`, `COOL`, `DRY`, `FAN_ONLY`, ...
- **MQTT topics** — `root/[id|bcst|out]/item/[subitem/]suffix` (defaults: `myhome/in`, `myhome/s_out`).
- **Drivers** (`modules/out_*.cpp`) — one class per channel type; `Setup()` parses JSON config,
`Ctrl()` handles commands, `Poll()` publishes status.
- **Inputs** (`inputs.cpp`) — buttons (single/double/triple/long presses), analog inputs,
rotary encoder (`T:32`), DHT/CCS811/HDC1080 sensors.
- **CAN** (`candriver.cpp`) — 50 kbit/s bus for non-IP "lightspot" controllers,
config download and controller-to-controller communication.
## Documentation layout
| Group | Files |
|-------|-------|
| Channel core | `item.h`, `itemCmd.h`, `abstractch.h`, `abstractin.h`, `abstractout.h`, `colorchannel.h`, `bright.h` |
| Inputs | `inputs.h` (+ rotary encoder), `modules/in_ccs811_hdc1080.h` |
| Config / main | `config.h`, `main.h`, `options.h`, `systemconfigdata.h`, `textconst.h` |
| Buses | `candriver.h`, `ipmodbus.h`, `owTerm.h`, `dmx.h` |
| Drivers | `modules/out_*.h` (one class per `CH_*` type) |