Files
vf-cuda-grid/controller
gx 543b7c9508 pipeline_monitor: 2 bug fixes — stall detection + lost MQTT event
Bug #1: _check_stall возвращался early если alive=False (pipeline ZMQ dead).
Но pipeline может hung без exit'а (ffmpeg process жив но encoder deadlock):
ZMQ не отвечает (alive=False), при этом encoder не emit'ит frames в
mediamtx. Wrapper script не retry'ит (process не exited), никто не
поднимает алерт. Fix: stall check работает ВНЕ зависимости от alive.

Bug #2: _check_stall возвращался early если /live publish session
отсутствует в mediamtx /v3/rtspsessions/list. Pipeline мог никогда
не подключиться (или TCP push session дропнулся). Treat as "frozen
at 0 bytes" — stall alert fire'ится через N polls.

Bug #3 (bonus): _check_instance логировал "lost" но не emit'ил MQTT
event. HA не видела алертов. Fix: добавлен on_event call для pipeline_lost
и pipeline_restored (paired с уже существующими pipeline_stalled /
pipeline_unstalled).

Verified на сегодняшнем incident: pipeline encoder hung 4 hours,
никто не реагировал. После fix monitor emit'ит lost+stalled события
через 12 секунд → MQTT-listener (HA automation) может сделать
docker restart cuda-grid-pipeline.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 15:57:21 +01:00
..

cuda-grid-controller

Control-plane sidecar для vf_cuda_grid FFmpeg filter. Transforms MQTT / HTTP REST commands от Home Assistant / Node-RED / custom apps в FFmpeg process_command через ZeroMQ. Publishes state + events наружу для bidirectional integration.

Статус: Phase 3 work-in-progress — basic skeleton + HA Discovery + ZMQ command bridge. Phase 4+ добавит overlays, audio orchestration.

Что умеет (Phase 3)

  • MQTT subscribe cuda_grid/cmd/<instance>/layout/set → ZMQ send → FFmpeg layout switch
  • MQTT publish cuda_grid/state/<instance>/layout (retained) + cuda_grid/event/.../layout_switched
  • HA MQTT Discovery — select.layout + sensor.current_layout + binary_sensor.online per instance
  • HTTP REST API: /health, /layouts, /state, POST /layout/{instance}/set
  • Multi-instance (несколько FFmpeg pipelines с разными ZMQ endpoints)
  • Auto-reconnect MQTT, LWT для availability tracking

Использование

pip install -e .

export MQTT_USERNAME=mqtt
export MQTT_PASSWORD=secret
cuda-grid-controller --config examples/controller.yaml

FFmpeg side — как подключить cuda_grid + zmq filter

ffmpeg -i cam1.mp4 -i cam2.mp4 -i cam3.mp4 -i cam4.mp4 \
  -filter_complex "
    [0:v][1:v][2:v][3:v]cuda_grid=layout=quad,
    zmq=bind_address=tcp\\\\://127.0.0.1\\\\:5555
  " \
  -c:v h264_nvenc out.mp4

(После этого controller с zmq_endpoint: tcp://127.0.0.1:5555 сможет переключать layout командой cuda_grid@... layout six_grid.)

HA dashboard

После startup controller'а — в Home Assistant появятся entities:

  • select.cuda_grid_<instance>_layout — dropdown с layouts
  • sensor.cuda_grid_<instance>_current_layout — текущий выбранный
  • binary_sensor.cuda_grid_controller_online — online/offline

Roadmap

Phase Что
3 (this) Basic skeleton + HA Discovery + ZMQ bridge для layout switching
4 Overlay API (rect/text/icon через side data)
5 Rich overlays (image/dim/graph/chat) + privacy filtering
6 Audio orchestration (state machine, domofon use case)

Полный design: docs/design.md.