Go to file
2026-03-25 23:55:49 +03:00
@eaDir Initial commit 2026-03-25 13:49:13 +03:00
assets - 2026-03-25 23:55:49 +03:00
config - 2026-03-25 16:47:18 +03:00
custom_components/wall_panel - 2026-03-25 23:55:49 +03:00
lib - 2026-03-25 16:47:18 +03:00
storage - 2026-03-25 23:55:49 +03:00
wall_panel - 2026-03-25 23:55:49 +03:00
.dockerignore Initial commit 2026-03-25 13:49:13 +03:00
.gitignore Initial commit 2026-03-25 13:49:13 +03:00
api.php Initial commit 2026-03-25 13:49:13 +03:00
Dockerfile Initial commit 2026-03-25 13:49:13 +03:00
favicon.ico Initial commit 2026-03-25 13:49:13 +03:00
index.php - 2026-03-25 16:47:18 +03:00
README.md - 2026-03-25 15:01:44 +03:00
repository.yaml - 2026-03-25 16:47:18 +03:00
run.sh - 2026-03-25 15:57:53 +03:00
wallpanell.code-workspace Initial commit 2026-03-25 13:49:13 +03:00

Wall Panel

Таблет-ориентированная панель для Home Assistant на PHP + HTML + JS. Основной HA-способ запуска теперь Home Assistant Add-on с ingress и отдельным портом.

Запуск

php -S 0.0.0.0:8080

Откройте http://localhost:8080.

Конфиг

Основной файл:

В него кладутся:

  • home_assistant.base_url
  • home_assistant.token
  • camera.rtsp_url
  • camera.stream_url
  • camera.poster_url
  • rooms

Если base_url и token пустые, панель работает в demo mode с тестовыми карточками.

Home Assistant Add-on

Для HA теперь рекомендован add-on-режим:

  • запускает тот же PHP-интерфейс внутри Supervisor;
  • открывается через ingress;
  • доступен через отдельный порт;
  • хранит конфиг в add-on volume;
  • не зависит от custom_components.

Файлы add-on лежат в папке:

Как использовать

  1. Добавьте Git URL репозитория в Home Assistant как add-on repository.
  2. Установите add-on.
  3. Запустите его.
  4. Откройте панель через ingress или через проброшенный порт 8099/tcp.

Конфигурация

Add-on использует persistent config file:

  • /homeassistant/wall_panel/wall_panel_config.json внутри контейнера
  • на хосте Home Assistant это будет /config/wall_panel/wall_panel_config.json

Этот файл является runtime source of truth для панели в HA-режиме и переживает рестарт add-on.

Настройки, внесённые через add-on UI Home Assistant, используются только как bootstrap при первом создании файла. Дальше редактируйте именно этот файл.

Частые настройки можно менять прямо из UI add-on в Home Assistant:

  • app.title
  • app.poll_interval_ms
  • app.main_room_name
  • app.main_room_icon
  • app.edit_mode
  • app.battery_history_hours
  • home_assistant.base_url
  • home_assistant.token
  • home_assistant.verify_ssl
  • home_assistant.weather_entity_id
  • camera.rtsp_url
  • camera.stream_url
  • camera.stream_mode
  • camera.poster_url
  • camera.popup_timeout_minutes

Сложные структуры, вроде rooms, по-прежнему удобнее держать в JSON.

Внутренний runtime cache add-on хранит в /data/wall_panel.

Если Home Assistant открыт по https://, custom component ждёт ingress URL add-on и встраивает его только после того, как add-on сам его зарегистрирует. Это убирает mixed content и не требует внешнего http://-доступа.

Старый embed-режим

Отдельный PHP-доступ по-прежнему работает:

http://YOUR_PANEL_HOST/index.php?embed=1

Это полезно, если вы запускаете панель вне HA или хотите iframe-карточку вручную.

Popup камеры

Для браузера нужен не прямой rtsp://, а bridge, который отдаёт HLS или WebRTC.

Popup открывается через endpoint:

POST /api.php?action=popup
{
  "sensor_entity_id": "binary_sensor.doorbell_all_occupancy",
  "state": "on"
}

Закрытие:

POST /api.php?action=popup
{
  "sensor_entity_id": "binary_sensor.doorbell_all_occupancy",
  "state": "off"
}

Room overrides

Для комнаты можно сохранять overrides через:

POST /api.php?action=save-entity-override
{
  "room_id": "living_room",
  "entity_id": "light.living_room_main",
  "visible": true,
  "order": 10,
  "card_type": "toggle",
  "title": "Основной свет",
  "icon": "mdi:ceiling-light"
}

Empty room slots

Для desktop-раскладки можно создавать пустые слоты:

POST /api.php?action=create-room-layout-item
{
  "room_id": "living_room"
}

Перемещение:

POST /api.php?action=save-room-layout-item
{
  "room_id": "living_room",
  "layout_item_id": "slot_xxx",
  "order": 120
}

Удаление:

POST /api.php?action=delete-room-layout-item
{
  "room_id": "living_room",
  "layout_item_id": "slot_xxx"
}