--- created: '2026-09-22' namespace: family related: - '[[family/how-to/tv-luna-send]]' - '[[family/how-to/htpc-webos-luna]]' - '[[personal/tech/lampac-deployment]]' tags: - tv - webos - lampa - lampac - plugin - how-to title: tv-lampac-plugin — подключение плагина Lampa на LG TV по SSH type: how-to updated: '2026-09-22' --- # tv-lampac-plugin.sh — подключение плагина Lampa к Lampac на LG TV > Создан 2026-09-22. Проблема, которую решает: добавить плагин/источник в Lampa на ТВ > **без пульта**, автоматически по SSH. > Связано: [[family/how-to/tv-luna-send]], [[family/how-to/htpc-webos-luna]], [[personal/tech/lampac-deployment]]. ## Зачем Настройки Lampa хранятся в localStorage webOS-приложения. Пульта под рукой может не быть, а добавлять вручную (`Настройки → Плагины → ввести URL`) долго и неудобно. Данный скрипт прописывает плагин/источник прямо в localStorage приложения Lampa. ## Ключевые пути на ТВ | Что | Путь | |---|---| | Приложение Lampa | `/media/developer/apps/usr/palm/applications/com.lampac.tv/` | | localStorage (LevelDB) | `/media/developer/apps/usr/palm/applications/com.lampac.tv/.localstorage/` | | Настройки Lampa | ключ `lampac_settings` (JSON) в LevelDB | ## Как Lampa хранит настройки Lampa в webOS использует `localStorage`, который Chromium хранит в **LevelDB** (`.localstorage/leveldb/`). Прямая запись в LevelDB при работающем приложении **опасна**: приложение перезапишет значение из памяти при выходе. **Правильный порядок:** 1. Закрыть приложение Lampa (иначе перезапишет) 2. Записать значение в localStorage 3. Запустить приложение ## 🔴 НЕ СУЩЕСТВУЕТ пункта «Настройки → Источник» (проверено 2026-09-22) **Не повторять эту ошибку — Alex дважды сказал, что пункта нет.** В Lampa **нет** отдельного пункта меню для выбора источника каталога. Источник переключается **прямо из меню каталогов на главной**: 1. Открыть Lampa на главной странице 2. Встать на любой ряд каталога и нажать **влево** на пульте 3. Слева выедет **панель со списком источников** (Rezka, Kinobase, FilmixApp, VoKino, Eneyida, KinoUkr, «Мой список», …) 4. Выбрать **«Мой список»** и нажать OK 5. Каталог перестроится на watchlist Скриншота/подтверждения от Alex ещё нет — он не дошёл до этого шага. ## Как плагин `catalog.js` регистрирует источник (механика) Важно для диагностики — плагин **не добавляет новый пункт в главное меню**, он **подменяет существующие**: ```js // при старте / app ready: Lampa.Utils.account(Manifest.api_host + '/catalog', function(json){ Manifest.catalogs = json; // все каталоги с сервера keys.forEach(function(key){ Lampa.Params.values.source[key] = key; // регистрирует источник Lampa.Api.sources[key] = Api; // подменяет API if (Manifest.catalogs[key].search) Lampa.Search.addSource(Api.discovery(key)); // добавляет в поиск }); }); // хук на меню: клик по movie/tv/cartoon/anime/relise подменяется на URL из catalogs[key].menu Lampa.Listener.follow('menu', ...) ``` Отсюда следует: - Отдельного переключателя в настройках нет **by design** — источник выбирается панелью слева. - Плагин **подтягивает каталоги только при старте приложения**. Если добавить плагин и не перезапустить Lampa — каталоги не зарегистрируются. Нужен полный перезапуск (не сворачивание). - Заголовок каталога после переключения содержит имя источника в верхнем регистре: «Фильмы — МОЙ СПИСОК». ## Что должен отдавать сервер (проверено 2026-09-22) | Endpoint | Ответ | Значение | |---|---|---| | `/catalog.js` | 200, ~32 КБ | сам плагин, манифест с `api_host` | | `/catalog` | JSON, 7 ключей | список каталогов: Rezka, Kinobase, FilmixApp, VoKino, Eneyida, KinoUkr, **Мой список** | | `/catalog/list?plugin=watchlist&cat=films` | `{page, results, total_pages}` | 360 позиций, `total_pages: 1` | `api_host` подставляется по IP запроса → `http://192.168.1.14:9118` (не `localhost`), поэтому ТВ получает рабочие ссылки. **7 источников в `/catalog`** — нормальный минимум: модуль `Catalog` собирает их из bundled-плагинов плюс `watchlist`. «Мой список» идёт **первым** ключом. ## ⚠️ Ловушка диагностики: `plugins_add` в `lampainit.js` — НЕ то, что кажется `http://192.168.1.14:9118/lampainit.js` содержит: ```js var plugins_add = [ {"url":"http://192.168.1.14:9118/catalog.js","status":1,"name":"Альтернативные источники каталога", ...}, ... ]; ``` Это **серверный список плагинов, которые Lampac сам подсовывает** в UI. Клиент на ТВ (webOS-приложение `com.lampac.tv`) — **не отдельная Lampa**: он грузит `app.min.js` и `lampainit.js` **с сервера** (`loader.js` → `lampac_url` из localStorage, дефолт `http://192.168.1.14:9118`). Следствие: каталог watchlist работает через **серверный модуль `Catalog`**, а не через строку `plugins_add`. Не искать причину поломки в этом массиве. ## Питфоллы (проверено 2026-09-22) 1. **localStorage у webOS-приложений изолирован.** Файл в `.localstorage/` у сторонних (Homebrew) приложений **может отсутствовать** — Chromium держит стор в памяти и сбрасывает на диск не сразу. Если каталога нет, сначала запустить приложение один раз. 2. **`luna-send` через SSH молчит** — вывод в tty. Оборачивать в `script -q -c "..." /tmp/o.txt` и читать файл. См. [[family/how-to/tv-luna-send]]. 3. **LevelDB нельзя править на живом приложении.** Сначала `closeByAppId`, потом запись. 4. **`init.conf` лежит НЕ в корне каталога Lampac, а в `config-module/init.conf`** (монтируется в `/lampac/init.conf:ro`). Искать там, а не по `lampac/init.conf` — иначе получишь ложный «файл пропал». 5. **После добавления плагина обязательно полный перезапуск Lampa** — иначе `/catalog` не запрашивается, и источник не появляется (соединений с `:9118` будет **ноль**). 6. **Проще всего — через UI самого пульта**, если он доступен: Lampa → Настройки → Плагины → добавить URL. Скрипт нужен, когда пульта нет. ## Что должно быть прописано для Lampac | Настройка | Значение | |---|---| | Плагин (онлайн-источники) | `http://192.168.1.14:9118/online.js` | | Каталог (свой список) | `http://192.168.1.14:9118/catalog.js` | | TorrServer | `http://192.168.1.14:9118` (Настройки → TorrServer → «Использовать основную ссылку») | | Буфер плеера | 50–100 МБ | ## Скрипт Лежит на Mac: `~/Automation/tv-lampac-plugin.sh` (дописывается при первом реальном применении; пока не создан — см. «Статус»). ## Статус ⚠️ **На 2026-09-22 не проверялось на живом ТВ.** Подключение каталога сделано через UI (или требуется сделать). Скрипт-автоматизация — заготовка на будущее. Если понадобится — подход: `closeByAppId com.lampac.tv` → запись ключа в localStorage → `launch com.lampac.tv`. Учесть питфоллы 1–3.