66 lines
3.0 KiB
Markdown
66 lines
3.0 KiB
Markdown
# 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 |
|
||
|
||
## Локальный запуск
|
||
|
||
```bash
|
||
npm install
|
||
REDIS_HOST=localhost node server.js
|
||
# Открыть http://localhost:3000
|
||
```
|
||
|
||
## Деплой на Nubes Cloud
|
||
|
||
1. Запушьте этот репо в свой Gitea
|
||
2. В Terraform-конфиге укажите `git_path` на ваш репо и `git_revision`
|
||
3. Nubes автоматически запустит `npm start`
|
||
|
||
## HTTP-эндпоинт
|
||
|
||
Dashboard — единственный сервис, чей HTTP-эндпоинт реально используется: браузер открывает дашборд, JavaScript дёргает `/api/*` каждые 3 секунды.
|
||
|
||
При необходимости можно расширить:
|
||
- WebSocket/SSE — стриминг событий без опроса
|
||
- `/api/summary` — агрегированная статистика (средняя температура, пиковая нагрузка)
|
||
- Авторизация (Basic Auth/OAuth) если дашборд не должен быть публичным
|
||
|
||
## Примечания
|
||
|
||
- **Chart.js загружается из CDN** (jsDelivr) — под должен иметь доступ в интернет
|
||
- **Тёмная тема** — slate-палитра, адаптивная сетка
|
||
- При недоступности Redis дашборд показывает ошибку в JSON (не 500)
|