Add adaptive FPS and honest device reachability during streaming
DDP uses fire-and-forget UDP, so when a WiFi device becomes overwhelmed by sustained traffic, sends appear successful while the device is actually unreachable. This adds: - HTTP liveness probe (GET /json/info, 2s timeout) every 10s during streaming, exposed as device_streaming_reachable in target state - Adaptive FPS (opt-in): exponential backoff when device is unreachable, gradual recovery when it stabilizes — finds sustainable send rate - Honest health checks: removed the lie that forced device_online=true during streaming; now runs actual health checks regardless - Target editor toggle, FPS display shows effective rate when throttled, health dot reflects streaming reachability, red highlight when unreachable - Auto-backup scheduling support in settings modal Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -169,6 +169,7 @@
|
||||
"device.metrics.device_fps": "Device refresh rate",
|
||||
"device.health.online": "Online",
|
||||
"device.health.offline": "Offline",
|
||||
"device.health.streaming_unreachable": "Unreachable during streaming",
|
||||
"device.health.checking": "Checking...",
|
||||
"device.tutorial.start": "Start tutorial",
|
||||
"device.tip.metadata": "Device info (LED count, type, color channels) is auto-detected from the device",
|
||||
@@ -912,6 +913,8 @@
|
||||
"targets.brightness_vs.none": "None (device brightness)",
|
||||
"targets.min_brightness_threshold": "Min Brightness Threshold:",
|
||||
"targets.min_brightness_threshold.hint": "Effective output brightness (pixel brightness × device/source brightness) below this value turns LEDs off completely (0 = disabled)",
|
||||
"targets.adaptive_fps": "Adaptive FPS:",
|
||||
"targets.adaptive_fps.hint": "Automatically reduce send rate when the device becomes unresponsive, and gradually recover when it stabilizes. Recommended for WiFi devices with weak signal.",
|
||||
|
||||
"search.open": "Search (Ctrl+K)",
|
||||
"search.placeholder": "Search entities... (Ctrl+K)",
|
||||
@@ -943,5 +946,25 @@
|
||||
"settings.restore.error": "Restore failed",
|
||||
"settings.restore.restarting": "Server is restarting...",
|
||||
"settings.restore.restart_timeout": "Server did not respond. Please refresh the page manually.",
|
||||
"settings.button.close": "Close"
|
||||
"settings.button.close": "Close",
|
||||
|
||||
"settings.auto_backup.label": "Auto-Backup",
|
||||
"settings.auto_backup.hint": "Automatically create periodic backups of all configuration. Old backups are pruned when the maximum count is reached.",
|
||||
"settings.auto_backup.enable": "Enable auto-backup",
|
||||
"settings.auto_backup.interval_label": "Interval",
|
||||
"settings.auto_backup.max_label": "Max backups",
|
||||
"settings.auto_backup.save": "Save Settings",
|
||||
"settings.auto_backup.saved": "Auto-backup settings saved",
|
||||
"settings.auto_backup.save_error": "Failed to save auto-backup settings",
|
||||
"settings.auto_backup.last_backup": "Last backup",
|
||||
"settings.auto_backup.never": "Never",
|
||||
|
||||
"settings.saved_backups.label": "Saved Backups",
|
||||
"settings.saved_backups.hint": "Auto-backup files stored on the server. Download to save locally, or delete to free space.",
|
||||
"settings.saved_backups.empty": "No saved backups",
|
||||
"settings.saved_backups.restore": "Restore",
|
||||
"settings.saved_backups.download": "Download",
|
||||
"settings.saved_backups.delete": "Delete",
|
||||
"settings.saved_backups.delete_confirm": "Delete this backup file?",
|
||||
"settings.saved_backups.delete_error": "Failed to delete backup"
|
||||
}
|
||||
|
||||
@@ -169,6 +169,7 @@
|
||||
"device.metrics.device_fps": "Частота обновления устройства",
|
||||
"device.health.online": "Онлайн",
|
||||
"device.health.offline": "Недоступен",
|
||||
"device.health.streaming_unreachable": "Недоступен во время стриминга",
|
||||
"device.health.checking": "Проверка...",
|
||||
"device.tutorial.start": "Начать обучение",
|
||||
"device.tip.metadata": "Информация об устройстве (кол-во LED, тип, цветовые каналы) определяется автоматически",
|
||||
@@ -912,6 +913,8 @@
|
||||
"targets.brightness_vs.none": "Нет (яркость устройства)",
|
||||
"targets.min_brightness_threshold": "Мин. порог яркости:",
|
||||
"targets.min_brightness_threshold.hint": "Если итоговая яркость (яркость пикселей × яркость устройства/источника) ниже этого значения, светодиоды полностью выключаются (0 = отключено)",
|
||||
"targets.adaptive_fps": "Адаптивный FPS:",
|
||||
"targets.adaptive_fps.hint": "Автоматически снижает частоту отправки, когда устройство перестаёт отвечать, и постепенно восстанавливает её при стабилизации. Рекомендуется для WiFi-устройств со слабым сигналом.",
|
||||
|
||||
"search.open": "Поиск (Ctrl+K)",
|
||||
"search.placeholder": "Поиск... (Ctrl+K)",
|
||||
@@ -943,5 +946,25 @@
|
||||
"settings.restore.error": "Ошибка восстановления",
|
||||
"settings.restore.restarting": "Сервер перезапускается...",
|
||||
"settings.restore.restart_timeout": "Сервер не отвечает. Обновите страницу вручную.",
|
||||
"settings.button.close": "Закрыть"
|
||||
"settings.button.close": "Закрыть",
|
||||
|
||||
"settings.auto_backup.label": "Авто-бэкап",
|
||||
"settings.auto_backup.hint": "Автоматическое создание периодических резервных копий конфигурации. Старые копии удаляются при превышении максимального количества.",
|
||||
"settings.auto_backup.enable": "Включить авто-бэкап",
|
||||
"settings.auto_backup.interval_label": "Интервал",
|
||||
"settings.auto_backup.max_label": "Макс. копий",
|
||||
"settings.auto_backup.save": "Сохранить настройки",
|
||||
"settings.auto_backup.saved": "Настройки авто-бэкапа сохранены",
|
||||
"settings.auto_backup.save_error": "Не удалось сохранить настройки авто-бэкапа",
|
||||
"settings.auto_backup.last_backup": "Последний бэкап",
|
||||
"settings.auto_backup.never": "Никогда",
|
||||
|
||||
"settings.saved_backups.label": "Сохранённые копии",
|
||||
"settings.saved_backups.hint": "Файлы авто-бэкапа на сервере. Скачайте для локального хранения или удалите для освобождения места.",
|
||||
"settings.saved_backups.empty": "Нет сохранённых копий",
|
||||
"settings.saved_backups.restore": "Восстановить",
|
||||
"settings.saved_backups.download": "Скачать",
|
||||
"settings.saved_backups.delete": "Удалить",
|
||||
"settings.saved_backups.delete_confirm": "Удалить эту резервную копию?",
|
||||
"settings.saved_backups.delete_error": "Не удалось удалить копию"
|
||||
}
|
||||
|
||||
@@ -169,6 +169,7 @@
|
||||
"device.metrics.device_fps": "设备刷新率",
|
||||
"device.health.online": "在线",
|
||||
"device.health.offline": "离线",
|
||||
"device.health.streaming_unreachable": "流传输期间不可达",
|
||||
"device.health.checking": "检测中...",
|
||||
"device.tutorial.start": "开始教程",
|
||||
"device.tip.metadata": "设备信息(LED 数量、类型、颜色通道)从设备自动检测",
|
||||
@@ -912,6 +913,8 @@
|
||||
"targets.brightness_vs.none": "无(设备亮度)",
|
||||
"targets.min_brightness_threshold": "最低亮度阈值:",
|
||||
"targets.min_brightness_threshold.hint": "当有效输出亮度(像素亮度 × 设备/源亮度)低于此值时,LED完全关闭(0 = 禁用)",
|
||||
"targets.adaptive_fps": "自适应FPS:",
|
||||
"targets.adaptive_fps.hint": "当设备无响应时自动降低发送速率,稳定后逐步恢复。推荐用于信号较弱的WiFi设备。",
|
||||
|
||||
"search.open": "搜索 (Ctrl+K)",
|
||||
"search.placeholder": "搜索实体... (Ctrl+K)",
|
||||
@@ -943,5 +946,25 @@
|
||||
"settings.restore.error": "恢复失败",
|
||||
"settings.restore.restarting": "服务器正在重启...",
|
||||
"settings.restore.restart_timeout": "服务器未响应。请手动刷新页面。",
|
||||
"settings.button.close": "关闭"
|
||||
"settings.button.close": "关闭",
|
||||
|
||||
"settings.auto_backup.label": "自动备份",
|
||||
"settings.auto_backup.hint": "自动定期创建所有配置的备份。当达到最大数量时,旧备份会被自动清理。",
|
||||
"settings.auto_backup.enable": "启用自动备份",
|
||||
"settings.auto_backup.interval_label": "间隔",
|
||||
"settings.auto_backup.max_label": "最大备份数",
|
||||
"settings.auto_backup.save": "保存设置",
|
||||
"settings.auto_backup.saved": "自动备份设置已保存",
|
||||
"settings.auto_backup.save_error": "保存自动备份设置失败",
|
||||
"settings.auto_backup.last_backup": "上次备份",
|
||||
"settings.auto_backup.never": "从未",
|
||||
|
||||
"settings.saved_backups.label": "已保存的备份",
|
||||
"settings.saved_backups.hint": "存储在服务器上的自动备份文件。下载到本地保存,或删除以释放空间。",
|
||||
"settings.saved_backups.empty": "没有已保存的备份",
|
||||
"settings.saved_backups.restore": "恢复",
|
||||
"settings.saved_backups.download": "下载",
|
||||
"settings.saved_backups.delete": "删除",
|
||||
"settings.saved_backups.delete_confirm": "删除此备份文件?",
|
||||
"settings.saved_backups.delete_error": "删除备份失败"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user