OScam EMM error: решение ошибок обновления ключей
Если у вас в логах OScam замелькали строки вроде EMM rejected или card not accepting emm — не паникуйте сразу. OScam: EMM error решение часто оказывается проще, чем выглядит, но сначала надо понять, что именно происходит. Иногда это реальная поломка, иногда — штатное поведение, которое люди принимают за ошибку. Разберём по шагам.
Что такое EMM в OScam и почему возникает ошибка
EMM — Entitlement Management Message. Это сообщения, которые провайдер рассылает для обновления прав доступа и ключей прямо на вашу карту. Без них карта рано или поздно перестаёт расшифровывать каналы — ключи устаревают.
ECM (Entitlement Control Message) — другое. Это запросы на расшифровку конкретного транспортного потока в реальном времени. ECM — то, что летит постоянно при просмотре. EMM — редкие обновления, которые меняют состояние самой карты.
EMM против ECM: в чём разница
ECM обрабатывается на лету: пришёл запрос, карта вернула ключ (CW), канал открылся. Это происходит каждые несколько секунд. EMM работает иначе — это команды провайдера, адресованные конкретной карте или группе карт, чтобы обновить права или поменять мастер-ключ.
Если ECM не работает — канал не открывается вообще. Если EMM не проходят — сначала всё нормально, но через некоторое время ключи устаревают и карта перестаёт отвечать на ECM. Вот почему люди иногда не замечают проблему сразу.
Как выглядит ошибка EMM в логах
Типовые строки, которые вы увидите в oscam.log:
EMM error— общая ошибка обработки пакетаemm filterилиskipped emm— EMM отфильтрован по настройкамEMM rejected— карта отклонила пакетcard not accepting emm— карта не принимает этот тип EMMEMM not written— запись не прошла
Каждая из этих строк означает разное. skipped emm — это часто нормально. EMM rejected с нулевым счётчиком успешных записей — уже повод копать глубже.
Глобальные и адресные (shared/unique) EMM
Провайдеры рассылают EMM трёх типов. Global — широковещательные, адресованы всем картам сразу. Shared — групповые, для части карт. Unique — персональные, адресованы конкретной карте по серийному номеру.
OScam по умолчанию может фильтровать некоторые типы. Параметры blockemm-g, blockemm-s, blockemm-u в конфиге reader как раз управляют тем, какие типы пропускать. Если у вас блокируются unique-EMM, а именно они несут обновление прав для вашей конкретной карты — ключи обновляться не будут.
Диагностика по логам oscam
Прежде чем лезть в конфиги и что-то менять — сначала нормально прочитайте лог. Это правило номер один, и большинство людей его игнорируют, а потом меняют параметры наугад и удивляются, что ничего не помогает.
Пути конфигов зависят от прошивки. На Enigma2/OpenATV это обычно /etc/tuxbox/config/oscam/ или /etc/oscam/. На старых прошивках типа OpenPLi иногда /var/etc/oscam/. Проверьте сами через find / -name oscam.server 2>/dev/null.
Включение детального лога EMM
В секции [global] файла oscam.conf добавьте или проверьте:
[global]
logfile = /var/log/oscam/oscam.log
maxlogsize = 500
debuglevel = 64
Debug-уровень 64 включает детальный вывод EMM. Можно также запустить OScam с ключом -d 64 вручную для тестирования. Через веб-интерфейс (обычно порт 8888) зайдите в раздел Logs → Live Log и включите фильтр по EMM — там видно всё в реальном времени без перезапуска.
Осторожно с maxlogsize: если включить saveemm-unknown и забыть — лог раздуется до нескольких гигабайт за сутки. На embedded-устройствах с маленьким разделом это убивает систему.
Чтение полей CAID, provid, serial
Типичная строка в логе выглядит примерно так:
2026/03/15 14:23:11 s [r] phoenix EMM: CAID=0500 provid=040810 serial=A1B2C3D4 len=0133 type=unique rejected
Здесь: CAID=0500 — это идентификатор системы условного доступа (Viaccess). provid=040810 — идентификатор провайдера. serial — серийник карты. Эти значения нужно сопоставить с тем, что прописано в вашем reader в oscam.server. Если provid в логе не совпадает с тем, что стоит в ident — EMM пройти не может.
Где смотреть: oscam.log, webif Live Log, debug-уровни
Есть три способа смотреть логи. Файл oscam.log — основной, пишется постоянно, удобен для анализа после факта. Live Log в webif — удобен для наблюдения в реальном времени, но при высоком debug-уровне браузер может тормозить. И прямой запуск oscam -d 255 в терминале — максимальный вывод, удобен для первичной диагностики на десктопе.
Сначала диагностика, потом правки. Не наоборот.
Настройка приёма EMM в oscam.server
Вот тут начинается самое интересное и где большинство конфигов сделано неправильно. Ключевые параметры reader в файле /etc/oscam/oscam.server:
[reader]
label = mycard
protocol = phoenix
device = /dev/ttyUSB0
caid = 0500
ident = 0500:040810,0500:032830
group = 1
emmcache = 1,3,2,1
blockemm-unknown = 1
blockemm-u = 0
blockemm-s = 0
blockemm-g = 1
saveemm-u = 1
saveemm-s = 1
mhz = 357
cardmhz = 357
Разберём каждый параметр по делу.
Параметр emmcache и его формат
Формат: emmcache = enabled,keeptime,count,save. Где enabled — 1 включает кэш. keeptime — время хранения в минутах (обычно 3). count — количество раз, которое один и тот же EMM должен прийти, прежде чем его запишут на карту. save — сохранять кэш на диск (1) или нет (0).
Значение emmcache = 1,3,2,1 — EMM кэшируется, хранится 3 минуты, записывается после 2-го появления, кэш сохраняется. Это разумные дефолты для большинства карт Viaccess и Nagravision. Для Conax иногда меняют count на 1.
disableserverfilter и blockemm/saveemm
Если ваш OScam работает как прокси и стоит между клиентами и картой, может мешать серверный фильтр. В oscam.conf в секции [global] добавьте:
disableserverfilter = 1
Это отключает глобальный фильтр EMM на уровне сервера. Без этого параметра EMM могут резаться ещё до того, как дойдут до reader, и вы будете видеть skipped emm даже при правильных настройках reader.
Параметры blockemm-u, blockemm-s, blockemm-g — блокировка unique, shared, global EMM соответственно. Значение 0 = пропускать, 1 = блокировать. Если блокируете всё подряд "от греха" — карта не обновляется. Логично.
ecmwhitelist и фильтры reader
Параметр ecmwhitelist фильтрует ECM, но косвенно влияет и на то, какие провайдеры считаются "своими" для reader. Если CAID/provid не попадает в белый список — EMM от этого провайдера могут игнорироваться ещё на этапе роутинга.
Проверьте, что в ident прописаны все нужные provid через запятую. Например: ident = 0500:040810,0500:032830,0500:032000. Лишние не мешают, но отсутствующие — ломают.
Разница для local карты и сетевого reader (cccam/newcamd)
И вот самое главное, что большинство руководств замалчивают. EMM принимает только local reader — физическая карта в картоприёмнике, подключённом к вашей машине напрямую. Протокол internal или phoenix/smargo.
Если у вас reader типа protocol = cccam или protocol = newcamd — через него EMM не придут. Вообще. Это не баг, это архитектура: cccam-протокол передаёт только ECM/CW, но не EMM. Удалённый сервер вашу карту не обновит.
Типовые причины EMM error и их устранение
После диагностики логов обычно причина становится очевидной. Вот четыре наиболее частых сценария, с которыми я сталкивался.
Неверный CAID/provid в reader
Самая частая причина. В логе видите EMM с provid=040810, а в oscam.server у вас прописано ident = 0500:032830. Несовпадение — EMM отклоняется ещё на уровне роутинга.
Решение: скопируйте точные значения CAID и provid из лога и пропишите в ident reader. Перезапустите OScam. Проверьте лог — строки rejected должны смениться на written или хотя бы found in cache.
Карта не принимает EMM (read-only / неподходящий пакет)
Иногда card not accepting emm — это не ошибка конфига, а нормальное поведение карты. Некоторые карты работают в read-only режиме в определённых регионах, или конкретный тип EMM (global) не предназначен для вашего пакета подписки.
Как отличить: если emmcache показывает ненулевой счётчик успешных записей хотя бы иногда — карта рабочая. Если счётчик всегда ноль, а каналы при этом вообще перестали открываться — либо ключи устарели, либо сама карта заблокирована провайдером.
Фильтрация EMM на стороне сервера
Если OScam настроен и как сервер (отдаёт ECM другим клиентам), серверный фильтр может резать входящие EMM до того, как они дойдут до карты. Включите disableserverfilter = 1 в [global] и пересмотрите значения blockemm-* в reader.
Проверка простая: временно выставьте все blockemm-* в 0 и посмотрите на лог. Если EMM пошли — значит проблема была в фильтрах. Потом уже настраивайте точнее под свои нужды.
Проблемы с картоприёмником и таймингами (mhz, cardmhz)
Это редкая, но коварная причина. Картоприёмник на неверной частоте отлично работает для ECM (простые короткие запросы), но сбоит именно на EMM, которые длиннее и требуют стабильной связи.
Типовые значения mhz и cardmhz для разных ридеров: Phoenix/Smargo — 357 или 368. Некоторые карты Viaccess работают лучше на 600. Начните с 357/357, если не работает — попробуйте 368/368, затем 600/600. Параметр mhz — частота интерфейса, cardmhz — частота самой карты.
mhz = 357
cardmhz = 357
Если после смены частот EMM стали проходить — вы нашли проблему.
Что НЕ помогает и частые ошибки настройки
Хочу отдельно написать про то, что не работает, потому что видел это в конфигах слишком часто.
Бессмысленное включение всех saveemm подряд
Люди включают saveemm-unknown = 1, saveemm-u = 1, saveemm-s = 1, saveemm-g = 1 — и думают, что это поможет. На самом деле saveemm-unknown пишет на диск все неизвестные EMM, которых может быть тысячи в час. Лог переполняется, диск забивается, система тормозит.
Включайте saveemm только для типов, которые реально нужны вашей карте. Определить это можно из логов с включённым debug-уровнем — смотрите, какие типы EMM (u/s/g) реально записываются успешно.
Попытка ловить EMM через сетевой шаринг
Повторю ещё раз, потому что это критично. Если у вас reader через cccam или newcamd — ждать обновления ключей бессмысленно. Эти протоколы не передают EMM. Никогда. OScam: EMM error решение через сетевой шаринг не существует в принципе — EMM должны обрабатываться локально на физической карте.
Есть редкие исключения: некоторые реализации CS378x или собственные серверные решения умеют пробрасывать EMM, но это нестандартно и требует специальной настройки на обоих концах. В 99% случаев — не рассчитывайте на это.
Слепое копирование чужих конфигов
Скопированный чужой oscam.server с другими CAID, другим provid и другими частотами — это почти гарантированные проблемы. Значения ident, mhz, cardmhz, emmcache зависят от конкретной карты, конкретного провайдера и конкретного железа.
Чужой конфиг можно использовать как отправную точку, но CAID и provid нужно взять из своих логов, а частоты — подбирать под своё железо. Иначе получите EMM error решение которого займёт часы, хотя проблема была в неверном ident с самого начала.
И да: часть строк EMM skipped в логах — это штатное поведение. OScam: EMM error решение не всегда означает что-то нужно менять. Если emmcache пишет успешные записи и каналы работают — не трогайте то, что работает.
Ошибка EMM в OScam всегда означает проблему?
Нет. Строки skipped emm или emm filtered часто штатны — карта или фильтр просто не принимает конкретный тип EMM. Реальная проблема только тогда, когда ключи реально не обновляются и каналы начинают отваливаться через несколько часов или дней. Смотрите на счётчик успешных записей в emmcache — он важнее, чем наличие строк rejected в логах.
Можно ли принимать EMM через cccam-сервер?
Как правило — нет. Протокол cccam передаёт только ECM (запросы на расшифровку) и CW (control words в ответ). EMM через этот протокол не передаются по дизайну. EMM должны приходить на local reader с физической картой напрямую через DVB-карту или картоприёмник. Редкое исключение — специализированные серверные решения с нестандартными расширениями протокола, но это не cccam в обычном понимании.
Какие параметры в oscam.server отвечают за EMM?
Основные: blockemm-unknown, blockemm-u, blockemm-s, blockemm-g — блокировка типов EMM (0 = пропускать). saveemm-u, saveemm-s, saveemm-g — сохранение на диск. emmcache — формат CAID,keeptime,count,save, например 1,3,2,1. ident — обязательно укажите правильный CAID:provid, иначе EMM не дойдут до reader вообще.
Почему карта не принимает EMM (card not accepting emm)?
Четыре основные причины: неверный provid или ident в конфиге reader; неподходящий тип EMM для данного пакета подписки; проблемы с частотами картоприёмника (параметры mhz/cardmhz — попробуйте 357, 368 или 600); либо карта действительно не имеет прав на это обновление у данного провайдера. Начинайте диагностику с проверки CAID/provid в логах.
Как включить подробный лог EMM для диагностики?
В oscam.conf в секции [global] установите debuglevel = 64 и укажите logfile = /var/log/oscam/oscam.log. Либо запустите OScam вручную с ключом -d 64. Через webif (порт 8888 по умолчанию) зайдите в раздел Logs → Live Log. В логах ищите строки EMM и сопоставляйте CAID/provid/serial с тем, что прописано в вашем reader.
Влияют ли частоты mhz и cardmhz на ошибки EMM?
Да, и это недооценённая причина проблем. Неверные mhz/cardmhz вызывают нестабильное чтение карты, причём ECM могут работать нормально (они короче), а EMM сбоить (они длиннее и требуют стабильной передачи). Типовые значения для Phoenix/Smargo: 357 или 368. Для некоторых карт Viaccess — 600. Подбирайте под своё железо опытным путём, начиная с 357/357.