21ae72ba2952d91289df80f579732160d08fa63c
IoT Dashboard — веб-интерфейс «Умного дома»
Читает данные из Redis (только чтение) и отображает графики через Chart.js в браузере.
Пайплайн
Producer → RabbitMQ → Consumer → Redis + MongoDB → Dashboard (этот сервис)
Dashboard не пишет в Redis — только читает. Данные туда кладёт Consumer.
API
| Путь | Ответ | Данные из Redis |
|---|---|---|
GET /api/latest |
[{sensor_id, value, unit, location, timestamp}] |
iot:latest (hash) |
GET /api/counters |
{temperature: "N", humidity: "N", power_meter: "N"} |
iot:counters (hash) |
GET /api/recent |
[{...50 последних событий}] |
iot:recent (zset) |
GET / |
HTML-дашборд | — |
Интерфейс
- Bar Chart — последние значения датчиков (цвет зависит от типа)
- Doughnut Chart — распределение событий по типам устройств
- Таблица — последние 15 событий с временем, датчиком и значением
- Автообновление — каждые 3 секунды
Переменные окружения
| Переменная | По умолчанию | Описание |
|---|---|---|
REDIS_HOST |
127.0.0.1 |
Хост Redis |
REDIS_PORT |
6379 |
Порт Redis |
REDIS_PASS |
— | Пароль Redis (необязательно) |
PORT |
3000 |
Порт HTTP |
Локальный запуск
npm install
REDIS_HOST=localhost node server.js
# Открыть http://localhost:3000
Деплой на Nubes Cloud
- Запушьте этот репо в свой Gitea
- В Terraform-конфиге укажите
git_pathна ваш репо иgit_revision - Nubes автоматически запустит
npm start
HTTP-эндпоинт
Dashboard — единственный сервис, чей HTTP-эндпоинт реально используется: браузер открывает дашборд, JavaScript дёргает /api/* каждые 3 секунды.
При необходимости можно расширить:
- WebSocket/SSE — стриминг событий без опроса
/api/summary— агрегированная статистика (средняя температура, пиковая нагрузка)- Авторизация (Basic Auth/OAuth) если дашборд не должен быть публичным
Примечания
- Chart.js загружается из CDN (jsDelivr) — под должен иметь доступ в интернет
- Тёмная тема — slate-палитра, адаптивная сетка
- При недоступности Redis дашборд показывает ошибку в JSON (не 500)
Languages
HTML
69.1%
JavaScript
30.9%