OScam no cw: причины и решение проблемы декодирования

Если вы ищете OScam: no cw решение — значит сервер запущен, клиент подключён, ECM-запрос уходит, но канал не открывается. Строчка в логе выглядит безобидно, но за ней может скрываться с десяток разных причин: от опечатки в caid до мёртвого source на другом конце. Разберём всё по порядку — от разбора лога до реальных правок в конфиге.

Что означает «no cw» в логах OScam

ECM (Entitlement Control Message) — это зашифрованный пакет от тюнера, который уходит на reader в поисках контрольного слова (CW, control word). Если reader получил ECM, отправил его на источник, но ответ пришёл пустым — в логе появляется no cw. Не «нет карты», не «отказ» — именно пустой ответ.

Это важно: no cw означает, что цепочка до источника работает, но сам источник либо не может, либо не хочет отдать слово.

Расшифровка строки лога: ECM, caid, provid, time

Типичная строка в oscam.log выглядит так:

2026/06/30 14:22:11 c (ecm) username: no cw (ecm time: 312 ms, hop: 1, caid: 0500, provid: 032830, srvid: 06A4)

Что здесь читать:

  • caid: 0500 — система условного доступа (Viaccess, Irdeto, Nagra и т.д.)
  • provid: 032830 — идентификатор провайдера внутри системы
  • srvid: 06A4 — ID сервиса/канала
  • ecm time: 312 ms — время ожидания ответа
  • hop: 1 — сколько серверов прошёл запрос

Если ecm time есть и ненулевое — запрос дошёл до source и вернулся. Просто без CW. Если time равен нулю или строки ECM вообще нет — проблема локальная, на уровне фильтрации.

Чем «no cw» отличается от «rejected», «not found», «timeout»

not found или card not found — нет reader, который вообще берётся обслуживать этот caid/provid. Это другая ветка диагностики.

rejected — reader нашёлся, но отказал явно: не та подписка, блок по services, несовпадение ident. timeout — source не ответил вовремя. А no cw — ответил, но пусто. Три разных сценария, три разных исправления.

Где смотреть: oscam.log, веб-интерфейс (порт 8888), статус reader

WebIF по умолчанию висит на порту 8888 — открываем http://<ip>:8888. Вкладка Readers показывает статистику ECM по каждому reader: сколько успешных, сколько no cw, среднее время ответа. Вкладка Services — фильтрацию по каналам.

Для детального лога: в oscam.conf поднимаем loghistorysize = 4096, а для дампа самих CW добавляем cwlogdir = /var/log/oscam/cw/ в секцию [global]. После этого видно не только факт no cw, но и что именно приходит в ответе.

Пошаговая диагностика причины no cw

Алгоритм простой: сначала выясняем, уходит ли ECM вообще — и если да, на каком этапе теряется CW. Это сужает круг подозреваемых с десяти до одного-двух.

Проверка соответствия caid/provid в oscam.server и oscam.user

Открываем /etc/oscam/oscam.server и смотрим секцию [reader]. Там должен быть параметр caid с нужным значением. Потом смотрим /etc/oscam/oscam.user — у пользователя в параметре caid тоже должен быть этот caid, иначе сервер его просто не пустит к нужному reader.

Частая ошибка: в oscam.server прописан caid = 0500, а в логе ECM приходит с caid = 0D05. Это разные системы — Viaccess vs Nagra. Тюнер иногда сигнализирует один и тот же канал под разными caid (симулкрипт), и OScam может запрашивать не тот.

Проверка ident и блоков чтения (chid, services)

Параметр ident в oscam.server задаёт, какие provid обслуживает reader. Если написано ident = 0500:032830, а запрос идёт с provid = 032840 — reader молча игнорирует ECM. В логе это выглядит как no cw или отсутствие ECM-строки.

То же с services и chid: если у reader прописан блок services = !HBO,!MTV — конкретные каналы режутся на уровне фильтрации ещё до отправки на source. Проверить можно через WebIF → Readers → конкретный reader → Services.

Анализ времени ответа и hop в логах

Если в логе видим ecm time: 280 ms, hop: 2 и при этом no cw — запрос прошёл через два сервера и вернулся пустым. Проблема на стороне source или промежуточного hop. Если ecm time: 0 ms или строки ECM вообще нет для конкретного reader — OScam не отправлял туда запрос, значит мешает локальная фильтрация.

При hop > 1 с no cw стоит временно выставить cccmaxhops = 1 в oscam.server для диагностики — если source работает только через ретрансляцию, это подтвердит гипотезу.

Проверка ECM-длины и нестандартных пакетов

Некоторые провайдеры используют нестандартные ECM-пакеты длиннее обычных ~184 байт. Часть reader-реализаций обрезает или отклоняет их без явной ошибки, возвращая пустой ответ. В cwlogdir это видно: ECM пришёл, ушёл, а CW в дампе нет.

После смены ключей провайдером могут появиться изменённые ECM-структуры — тогда source отдаёт пустой ответ, пока не обновит ключи через EMM/AU. Это один из случаев, когда проблема не в конфиге вообще.

Настройка reader и протоколов для устранения no cw

Здесь концентрируется большинство исправимых причин. Секция [reader] в oscam.server — главное место для правок.

Параметры [reader] для cccam: protocol, device, cccversion

Минимально корректная секция для CCcam-reader:

[reader]
label = my_cccam_reader
protocol = cccam
device = 192.168.1.100,12000
user = myuser
password = mypassword
caid = 0500,1830
ident = 0500:032830
group = 1
cccversion = 2.3.0
cccmaxhops = 2

Параметр cccversion — не декоративный. Если source ожидает версию 2.2.1, а вы шлёте 2.3.0, рукопожатие может пройти, но CW будет идти криво. Попробуйте 2.0.11 или 2.1.4 если стабильное no cw на конкретном source.

Параметры newcamd/cs378x и порты

Для newcamd порт указывается индивидуально в конфиге source (обычно что-то в диапазоне 10000–15000). Для cs378x/camd35 протокол работает по TCP или UDP, порт аналогично задаётся на стороне source. Секция:

[reader]
label = newcamd_reader
protocol = newcamd
device = 10.0.0.5,15050
key = 0102030405060708091011121314
user = client1
password = secret
caid = 1830
group = 2

Параметр key (newcamd DES key) должен совпадать с тем, что прописано на server-стороне. Несовпадение ключа даёт no cw или обрыв соединения без внятной ошибки.

Опции lb_weight, lb_force_fallback и distributed cache

Loadbalance в oscam.conf секция [loadbalance] влияет на то, какой reader получит ECM-запрос. При lb_mode = 1 (weight mode) OScam отдаёт предпочтение reader с лучшей статистикой. Но если статистика не накоплена или reader временно не отвечал — сервер может выбрать плохой источник.

Параметр lb_force_fallback = 1 заставляет OScam попробовать следующий reader, если первый вернул no cw. Без него при lb_mode != 0 сервер может зациклиться на мёртвом источнике. Ещё полезен lb_nbest_percaid = 0500:2 — держать минимум 2 активных reader на данный caid.

Корректные cccmaxhops и reshare для многоуровневых share

cccmaxhops = 0 означает «только локальные карты», cccmaxhops = 1 — один уровень шаринга. При глубокой цепочке серверов иногда нужно 2–3, но каждый hop добавляет задержку и риск timeout. Повышать стоит с осторожностью, проверяя ecm time в логах.

reshare = 1 в секции reader разрешает OScam раздавать полученные CW своим клиентам дальше. Если reshare = 0, CW используется только локально. При неверном значении — клиенты ниже по цепочке получают no cw.

Когда проблема на стороне источника, а не конфига

Часть случаев, где нужно OScam: no cw решение, не лечится правкой конфигов вообще. ECM уходит, time нормальное — например, 200–350 мс — но CW стабильно пустой именно на конкретном caid. Локальный конфиг тут ни при чём.

Признаки нерабочей подписки или истёкшей карты на source

Если у source истекла подписка под конкретный пакет каналов — карта физически есть, соединение установлено, ECM принимается, но decrypt невозможен. Ответ пустой. В WebIF → Readers смотрим колонку % OK: если на конкретном reader 0% успешных CW на нужном caid при нормальном времени ответа — карта на source не работает под этот пакет.

После смены ключей провайдером карта требует обновления через EMM. Если au (auto-update) не включён — au = 1 в секции [reader] — карта устаревает и перестаёт отдавать CW на обновлённых каналах.

Hop > 1 и потеря cw на промежуточных серверах

При hop: 2 и no cw промежуточный сервер мог получить CW, но не передать дальше — например, из-за ошибки reshare или ограничения на стороне relay. Диагностировать снаружи сложно: единственный способ — попробовать подключиться к source напрямую, минуя промежуточный узел, и сравнить результат.

Нестабильный source: интервальные no cw и idle disconnect

Интервальные no cw — например, только в прайм-тайм с 19:00 до 23:00 — классический симптом перегруженного source. В остальное время канал открывается нормально, а в пиковые часы source не успевает обрабатывать очередь ECM и возвращает пустые ответы.

Ещё один паттерн: no cw появляется после 10–15 минут простоя. Это idle disconnect — source разрывает неактивное соединение, OScam не замечает разрыва сразу, и первые ECM после паузы уходят в никуда. Лечится параметром keepalive = 1 в секции [reader] и правкой reconnecttimeout.

Как объективно оценить качество источника по логам

WebIF → Readers → конкретный reader показывает три ключевых метрики: процент успешных CW (% OK), среднее время ответа (avg time) и количество reconnect. Хороший source: % OK выше 95%, avg time стабильно в диапазоне 150–400 мс, reconnect близко к нулю за период наблюдения.

Если reconnect растёт — source нестабилен или разрывает соединение по idle. Если % OK низкий при нормальном time — карта неработоспособна под нужный caid. Это объективные данные, никакие слова о «стабильности» source не заменят эти цифры из лога.

Частые ошибки конфигурации, вызывающие no cw

Большинство случаев, где требуется OScam: no cw решение, упирается в элементарные ошибки в конфигах. Разберём самые распространённые.

Неверные права и пути: oscam.server, oscam.user, oscam.conf

OScam читает конфиги из директории, заданной при запуске ключом -c. Обычно это /etc/oscam/, на некоторых образах — /var/keys/ или /usr/keys/. Если файл oscam.server лежит не там — reader просто не загрузится, и в логе будет no reader found или тихий no cw.

Права доступа: файлы конфигов должны читаться пользователем, под которым запущен oscam. Командой ls -la /etc/oscam/ проверяем владельца и права. chmod 640 + правильный chown решают.

Конфликт group между reader и user

Это одна из самых неочевидных ошибок. В oscam.server у reader прописан group = 1, а в oscam.user у клиента group = 2. Результат: reader физически есть, соединение с source есть, но OScam не предоставляет этому клиенту доступ к reader — и возвращает no cw.

Правило: значения group у reader и у user должны пересекаться. Если у reader group = 1,2, а у user group = 1 — всё работает. Проверяем через WebIF → Users → конкретный user → Readers: там видно, какие reader доступны пользователю.

Ошибки в caid/ident, лишние пробелы и регистр

OScam чувствителен к формату. caid = 0500 и caid= 0500 с пробелом перед значением — не одно и то же в некоторых версиях. Лишний пробел в ident = 0500:032830 (после последней цифры) может сломать парсинг.

Особенно коварны hex-значения: 0D05 и 0d05 OScam обычно воспринимает одинаково, но D05 без ведущего нуля — уже другой caid. Всегда использовать четырёхзначный формат с ведущими нулями.

Проблемы фаервола и NAT для сетевых reader

Сетевой reader не поднимается молча: в логе при старте видим reader my_reader: connected или failed to connect. Но если фаервол блокирует пакеты после установки соединения — ECM уходит, а ответ не возвращается. Классика для NAT с асимметричной маршрутизацией.

Проверка: iptables -L -n | grep PORT и netstat -an | grep PORT. Для CCcam порт обычно 12000 (задаётся на source), для newcamd — индивидуальный, смотреть в конфиге source. Временно отключить фаервол и проверить — если no cw исчезает, причина в iptables/NAT правилах.

После любых правок в конфигах — перезапуск или reload через WebIF → Restart, иначе изменения не применятся. И обязательно смотреть лог при старте: если reader не загрузился — в первых строках будет ошибка.

Чем отличается «no cw» от «card not found» в OScam?

no cw — ECM дошёл до reader и ушёл на source, но контрольное слово вернулось пустым. Цепочка работает, проблема на уровне расшифровки. card not found — OScam вообще не нашёл reader, который берётся обслуживать данный caid/provid: либо нет подходящего reader, либо группы не совпадают. Это разные ветки диагностики — начинать надо с чтения точной строки лога.

Почему один канал даёт no cw, а остальные работают?

Чаще всего на source нет локальной карты под конкретный provid этого канала, или канал режется блоком services/chid в oscam.server. Ещё вариант — канал использует другой caid (симулкрипт), и OScam запрашивает не тот. Смотрим srvid и provid в строке лога для этого канала и сверяем с тем, что разрешено на reader.

Влияет ли loadbalance на появление no cw?

Да, и довольно существенно. При lb_mode = 1 или lb_mode = 2 OScam выбирает reader по статистике, и если у плохого reader накоплена «хорошая» история — он будет получать запросы даже при реальных проблемах. Включайте lb_force_fallback = 1 и задавайте lb_nbest_percaid для нужных caid, чтобы сервер автоматически переключался на рабочий источник.

Как понять, что проблема в source, а не в моём конфиге?

Признак чёткий: ECM уходит на reader (строка в логе есть), time нормальное — скажем, 250–350 мс — но no cw стабильно на конкретном caid при правильных caid/ident/group. В WebIF → Readers видим % OK = 0% на этом caid. Это пустой ответ от удалённого источника, конфиг здесь ни при чём.

Какие порты и протоколы проверить при no cw на сетевом reader?

Первым делом: device = host,port в oscam.server — правильный ли IP и порт. Потом совпадение protocol (cccam/newcamd/cs378x) с тем, что слушает source. Проверить открытость порта: telnet host port или nc -zv host port. Для CCcam — cccversion должна совпадать или быть совместимой. Для newcamd — правильный DES key.

Помогает ли увеличение cccmaxhops при no cw?

Иногда да — если нужная карта доступна только через ретрансляцию, и при cccmaxhops = 1 она не видна. Но рост hops прямо увеличивает задержку: каждый дополнительный hop добавляет 100–300 мс, и при лимите timeout декодер может не успеть. Повышать с шагом 1, отслеживая ecm time в логах. Выше 3 — практически никогда не нужно.

Итого: OScam: no cw решение начинается с точного чтения строки лога — caid, provid, ecm time, hop. Эти четыре поля сразу делят проблему на «локальная фильтрация», «source не отвечает» и «source отвечает пустым». Каждый сценарий лечится по-своему, и смешивать их в одно «проверьте всё» — пустая трата времени. Используйте WebIF, смотрите % OK по reader, и проблема становится очевидной за 5–10 минут.

Практические советы для стабильного просмотра

Даже самая стабильная линия CCCam или OSCam требует пары простых подготовительных шагов. Обновляйте прошивку ресивера, раз в неделю очищайте ECM‑кеш и держите 15–20% свободного места на USB‑накопителе или во встроенной памяти, чтобы кардридер записывал ключи без задержек.

При настройке антенны оставляйте запас по MER/BER: смещение на два градуса или ослабленный F‑коннектор чаще становится причиной “фризов”, чем сам кардшаринг. Держите под рукой короткий патч‑корд для проверки другого роутера и сохраните два профиля в OSCam — под TCP и под UDP — чтобы мгновенно переключиться, если провайдер начнёт фильтровать протокол.

Utgard.tv следит за каждым хабом 24/7, однако вы можете ускорить диагностику, если будете вести небольшой журнал действий. Записывайте время переключения канала, активный CAID и то, использовали ли вы Wi‑Fi или Ethernet. Такой мини‑отчёт позволит инженерам воспроизвести вашу конфигурацию в лаборатории и предложить решение не за часы, а за минуты.

  • Держите активными две линии: если первый сервер уходит на обслуживание, второй тут же подхватывает поток без повторного ввода логина.
  • Раз в месяц делайте замер скорости и задержек. Стабильных 1–2 Мбит/с при пинге до 80 мс достаточно для SD/HD, но если джиттер превышает 20 мс — переведите роутер на провод.
  • Сохраните в закладки страницу статуса Utgard.tv и Telegram‑бота @utgard_tv_bot — там появляются уведомления о работах раньше, чем успеют среагировать SEMrush или внешние мониторы.