Files
gx 0e9a353d75 controller: jinja2 template для chat overlays + UI marker для icon/text
dynamic_overlays.ChatCfg.template (опц.) — Jinja2 шаблон применяется к
incoming MQTT payload. Доступны переменные payload (raw str) и payload_json
(parsed JSON dict если valid). Используется для извлечения отдельного поля
из JSON, например temperature из z2m sensor.

Применение в controller.yaml:
  chats:
    - id: temp_outside
      source_topic: "zigbee2mqtt/Температура на улице"
      template: "{{ '%+.1f' | format(payload_json.temperature | float) }}°C"

Если template не задан — payload используется как есть (backwards compat
с alerts_chat и подобными).

UI editor static/index.html: для icon/text overlays вместо коробки показываем
точечный маркер 14×14 (синий circle). Причина: filter render_overlay_icon
использует native PNG dimensions, frontend не знает реальный размер
(w_px/h_px хранятся в ChatCfg на server-side). Показ size=10% как было —
вводил в заблуждение. Resize handle тоже скрыт для marker'ов.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 20:55:35 +01:00

50 lines
1.5 KiB
Docker

# cuda-grid-controller — Python sidecar для vf_cuda_grid filter.
FROM python:3.11-slim AS base
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1
WORKDIR /app
# ffmpeg для snapshot endpoint — нужен basic CPU build (RTSP read + PNG output).
# Размер: ~120 MB additional (ffmpeg + libs); приемлемо для controller image.
RUN apt-get update && apt-get install -y --no-install-recommends \
ffmpeg \
&& rm -rf /var/lib/apt/lists/*
# Install deps первым layer — пересборка только при изменении pyproject.toml
COPY pyproject.toml ./
RUN pip install --no-cache-dir \
fastapi \
"uvicorn[standard]" \
pydantic \
pydantic-settings \
aiomqtt \
pyzmq \
pyyaml \
structlog \
typer \
sse-starlette \
pillow \
httpx \
jinja2 \
playwright
# Playwright headless Chromium для browser-rendered overlays (Grafana, чаты).
# install-deps добавляет system libs (libnss3, libxkbcommon0, libgbm1...).
# Chromium ~170 MB + system deps ~150 MB. Можно отключить если dashboards
# не нужны: убрать `playwright` из pip и закомментировать ниже.
RUN playwright install --with-deps chromium
# Source code
COPY cuda_grid_controller ./cuda_grid_controller
COPY examples ./examples
RUN pip install --no-cache-dir -e .
EXPOSE 8080
ENTRYPOINT ["cuda-grid-controller"]
CMD ["--config", "/app/controller.yaml"]