Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1
RSS
Ошибка при добавлении Reolink RLC-520A, UniFi Protect
 
При попытке принять камеру, которую только что купил на Amazon, возникает ошибка "неверное имя пользователя или пароль". Согласно логам, фактическая ошибка – TypeError, вызванный тем, что поле serialNumber в JSON-ответе от камеры неожиданно имеет тип number, а должен быть string.

2024-11-26T20:45:15.821Z - info: Принятие камеры по адресу 10.0.0.149:8000 с информацией
{
  "device": {
    "manufacturer": "REOLINK",
    "model": "RLC-520A",
    "firmwareVersion": "v3.0.0.2417_23070501",
    "serialNumber": 10803021,
    "hardwareId": "IPC"
  },
...

2024-11-26T20:45:15.919Z - error: Не удалось принять камеру. Аргумент "data" должен быть строкой или экземпляром Buffer, TypedArray или DataView. Получен тип number (10803021).
TypeError: The "data" argument must be of type string or an instance of Buffer, TypedArray, or DataView. Received type number (10803021)
    at Hash.update (node:internal/crypto/hash:115:11)
    at generateMAC (/usr/share/unifi-protect/app/webpack:/unifi-protect/src/middleware/onvif/helpers/getMAC.ts:42:56)
    at mac (/usr/share/unifi-protect/app/webpack:/unifi-protect/src/middleware/onvif/helpers/getMAC.ts:28:23)
    at t.adopt (/usr/share/unifi-protect/app/webpack:/unifi-protect/src/middleware/thirdPartyCameras/subscribers/adopt.ts:70:13)
[metadata]: {
  "code": "ERR_INVALID_ARG_TYPE"
}
 
Заменяй только вот эту конкретную строчку кода. Оставшееся всё оставляй как есть. Ничего выше и ниже этой строки трогать не надо. Обязательно сделай резервную копию JavaScript-файла на всякий случай. Для прозрачности сообщаю, что я запускаю UNVR с консольной версией 4.2.12 и версией Protect 5.3.48.

Так что эта строка из твоего поста → `const t = e ? o.default.createHash("sha256").update(e).digest().slice(0, 6) : o.default.randomBytes(6);`

Должна быть изменена на → `const t = e ? o.default.createHash("sha256").update(e.toString()).digest().slice(0, 6) : o.default.randomBytes(6);`

Надеюсь, это поможет. Как уже говорилось, будущие обновления могут привести к перезаписи этого JavaScript-файла, если UI не обновит свой код, но камеры, которые уже были внедрены, должны оставаться в системе и переживут будущие обновления.
 
@vazoom, спасибо за дополнительную информацию. Я понимаю теорию, нужно скачать JSON-файл. Изменить переменную. Выгрузить файл обратно в NVR и перезагрузить. Но извините, мне всё ещё неясно, какие именно значения я меняю; вы приводите два разных вывода.

Удалить это:
```javascript
const u = (e) => {
   const t = e ? o.default.createHash("sha256").update(e).digest().slice(0, 6) : o.default.randomBytes(6);
   return (t[0] = (254 & t[0]) | 2), t.toString("hex").toUpperCase();
},
p = async (e) => {
   let t = await a.default.toMAC(e);
   return t || (await n.default.promise.probe(e), (t = await a.default.toMAC(e))), t;
};
```
И заменить на это:
```javascript
const t = e ? o.default.createHash("sha256").update(e).digest().slice(0, 6) : o.default.randomBytes(6);
```
Или это:
```javascript
const t = e ? o.default.createHash("sha256").update(e.toString()).digest().slice(0, 6) : o.default.randomBytes(6);
```
Спасибо за вашу помощь!
 
@CommitConfirmСкачай файл service.js с помощью WinSCP, а затем "разминифицируй" его с помощью инструмента вроде https://unminify.com, чтобы ты мог его прочитать, открыв, например, в Notepad++. Примерно на строке #71102 тебе нужно обновить эту строку кода до модифицированной версии, которая будет преобразовывать входные данные в строку перед хешированием... это нужно, потому что Reolink выдаёт числовое значение в качестве серийного номера.

```javascript
const t = e ? o.default.createHash("sha256").update(e).digest().slice(0, 6) : o.default.randomBytes(6);
```

Перед загрузкой файла обратно на NVR можно снова минифицировать JavaScript на сайте вроде https://minify-js.com/... Обязательно перезапусти NVR и попробуй снова добавить камеру ReoLink — и у тебя всё получится.

Строка кода должна быть изменена на:

```javascript
const t = e ? o.default.createHash("sha256").update(e.toString()).digest().slice(0, 6) : o.default.randomBytes(6);
```
 
Подтверждаю, удаляем компонент возврата из toSpring? return (t[0] = (254 & t[0]) | 2), t.toString("hex").toUpperCase();
 
Я создал новую тему Bug Report в форумах: "Ошибка при попытке добавить камеры ReoLink Onvif в Protect | Ubiquiti Community", чтобы команда UI могла рассмотреть это и добавить в свой список задач. Ссылаюсь на эту тему. Я заметил это после добавления комментария в другую тему о попытке добавления камеры ReoLink E1 Pro и совершенно новой Reolink RLC-811A. Интересно, является ли это той же проблемой, требующей изменения файла service.js.

(Оригинальная тема: https://community.ui.com/questions/Reolink-E1-Pro-not-detected/511c71a4-cadc-4561-b130-e31b303c75d9#answer/70bb8427-f0b2-4ebc-939f-82710f7b29c0)

Если кто-то хочет проверить, влияет ли эта ошибка на вашу камеру ReoLink, вы можете найти логи, подключившись по SSH к вашему устройству Protect и перейдя в следующую директорию: --> /srv/unifi-protect/logs

Затем можно выполнить команду `tail -f service.log`, и при попытке добавления вы увидите сообщения об ошибке, в которых указано, что Protect ожидает строку для серийного номера. Я могу подтвердить ту же проблему для новой камеры ReoLink RLC-811A ONVIF. Лог при попытке добавления...

2025-06-01T21:29:31.351Z - info: Добавление камеры по адресу 10.1.10.250:8000 с данными{ "name": "REOLINK RLC-811A", "device": {   "manufacturer": "REOLINK",   "model": "RLC-811A",   "firmwareVersion": "v3.1.0.4695_2503141930",   "serialNumber": 10110250,   "hardwareId": "IPC" },..........много текста и потом .. ошибка >2025-06-01T21:29:31.426Z - error: Не удалось добавить камеру. Аргумент "data" должен быть типа string или экземпляром Buffer, TypedArray или DataView. Получен тип number (10110250)TypeError: The "data" argument must be of type string or an instance of Buffer, TypedAr                                                     ­                                    ray, or DataView. Received type number (10110250)   at Hash.update (node:internal/crypto/hash:115:11)   at generateMAC (/usr/share/unifi-protect/app/webpack:/unifi-protect/src/middleware/                                     ­                                                    onvif/he­lpers/getMAC.ts:42:56)   at mac (/usr/share/unifi-protect/app/webpack:/unifi-protect/src/middleware/onvif/he                             ­                                                            ­lpers/getMAC.ts:28:23)   at t.adopt (/usr/share/unifi-protect/app/webpack:/unifi-protect/src/middleware/thir                                 ­                                                        dPar­tyCameras/subscribers/adopt.ts:54:13)[metadata]: { "code": "ERR_INVALID_ARG_TYPE"}2025-06-01T21:29:31.428Z - error: 2729 ms | 400 POST /api/third-party-cameras/adopt
 
const u = (e) => {
 const t = e ? o.default.createHash("sha256").update(e.toString()).digest().slice(0, 6) : o.default.randomBytes(6);
 return (t[0] = (254 & t[0]) | 2), t.toString("hex").toUpperCase();
},
p = async (e) => {
 let t = await a.default.toMAC(e);
 return t || (await s.default.promise.probe(e), (t = await a.default.toMAC(e))), t;
};

const t = e ? o.default.createHash("sha256").update(e.toString()).digest().slice(0, 6) : o.default.randomBytes(6);
Подтверждаю и я – уже несколько дней выдираю волосы клочьями, пытаясь подключить Reolink Duo 2 POE. Я получал ошибку "invalid credentials. please check and try again.", когда пытался добавить камеру. После обновления service.js и перезагрузки, она подключилась сразу. Как мы можем донести до UI эту ошибку?
 
Подтверждаю! После изменения /usr/share/unifi-protect/app/service.js (у меня прямо на месте) и перезапуска консоли камера добавляется и вроде как работает, как и ожидалось. Файл, скорее всего, будет перезаписан при следующем обновлении, но выглядит так, что добавленные камеры должны продолжать работать.

Требования:
*   Пароль должен быть установлен на камере (не может быть пустым, так как NVR не позволяет отправить запрос).
*   Стандартный порт ONVIF на этой камере должен быть 8000 (а не тот, что ожидает Protect), поэтому указывайте IP-адрес камеры:8000, например, 192.168.1.200:8000.
*   Нужно войти в камеру и включить ONVIF.
 
Я смог внедрить изменения в reolinks, используя scp для скачивания файла /usr/share/unifi-protect/app/service.js, деминифицировал его и обновил следующую функцию перед тем, как скопировать обратно на UNVR и перезагрузить:

```javascript
const u = (e) => {
     const t = e ? o.default.createHash("sha256").update(e.toString()).digest().slice(0, 6) : o.default.randomBytes(6);
     return (t[0] = (254 & t[0]) | 2), t.toString("hex").toUpperCase();
 },
 p = async (e) => {
     let t = await a.default.toMAC(e);
     return t || (await s.default.promise.probe(e), (t = await a.default.toMAC(e))), t;
};

The specific change was to toString the argument for the update() function const t = e ? o.default.createHash("sha256").update(e.toString()).digest().slice(0, 6) : o.default.randomBytes(6);
```

Конкретное изменение касалось преобразования аргумента в строку для функции update(): const t = e ? o.default.createHash("sha256").update(e.toString()).digest().slice(0, 6) : o.default.randomBytes(6);
 
Я могу подключить свои камеры Reolink к UDM SE, но на UNVR получаю ошибку 'неверные учетные данные'. Обе системы работают на Protect 5.1.57.
 
У меня та же ошибка, когда пытаюсь добавить камеру дверного звонка Reolink.
Страницы: 1
Читают тему (гостей: 1)