Привет сообщество ioBroker,
Чтобы достичь марки 30.000 активных установок несколько дней назад, мы хотели бы представить вам новый js-controller 2.0. Это теперь доступно в Последнем Репозитории и на npm.
Во внутреннем тесте и очень обширном бета-тестировании в сообществе мы уже очень интенсивно протестировали это большое обновление js-контроллера. Большое спасибо @Arteck, @ sigi234, @SBorg, @opossum, @ e-s, @ e-i-k-e, @Yetiberg, @ Jan1, @ Einstein67, @Dr. Бактерий и многие другие. Это было отличное сотрудничество!
Прежде всего, «под капотом», были внесены некоторые фундаментальные изменения, оправдывающие переход на новый основной номер выпуска. Подробнее ниже.
JS-контроллер 2.0, как правило, совместим со всеми существующими системами ioBroker. Его можно обновить с любой предыдущей версии до версии 2.0. Только версия Node.js должна быть поднята до обновления как минимум 8.x, еще лучше 10.x! Для Node.js 12 это пока слишком рано, так как некоторые адаптеры все еще не совместимы.
Кроме того, собственное файловое пространство ioBroke (обычно в <каталоге ioBroker> / iobroker-data / files / ...) теперь обрабатывается более строго и вручную, либо с помощью сценария (fs.write), где могут непосредственно храниться файлы / hinkopierte. больше не отображается в визуализациях! Сценарии должны быть адаптированы (использование writeFile) или файлы должны храниться в официально определенных базовых каталогах adpater (например, vis.0, iqontrol.meta и т. Д.). Также лучше использовать официальные загрузчики через Vis или iqontrol, чтобы эти файлы были зарегистрированы правильно. Это изменение также было реализовано для повышения безопасности! Положительным побочным эффектом также является то, что файлы попадают в резервную копию, которая ранее не была доступна!
Установка
Перед установкой Как и в случае любого такого обновления: сделайте резервную копию! Резервное копирование iobroker или копирование каталога iobroker-data также достаточны в случае сомнений (конечно, ioBroker остановится раньше). Пожалуйста, не копируйте каталог node_modules, в противном случае символические ссылки могут сломаться, что впоследствии приведет к большим проблемам.
Необходимые обновления адаптера
Следующие адаптеры должны быть обновлены до упомянутых минимальных номеров версий, иначе они не будут работать с js-controller 2.0. Лучше всего сначала запустить эти обновления, потому что все эти версии хорошо работают со старыми версиями js-controller.
- простой API 2.1.2 или выше
- электронная почта 1.0.5 или выше
- пушовер 1.1.1 или выше
- оттенок 1.2.4 или выше
- красный узел 1.10.1 или выше
- Vis 1.2.1 или выше
- iqontrol 0.2.6 или выше
- socketio 2.1.2 или выше
- radar2 1.0.9 (GitHub версии 1.2.0 необходимо настроить вручную, см. FAQ!)
- broadlink2 (см. FAQ)
*** ВНИМАНИЕ: РАБНАЯ СИСТЕМА ПЕРВЫЙ! ***
В случае системы с несколькими хостами при обновлении до версии 2.0 очень важно сначала обновить подчиненные системы. Мастер обновляется последним!
Если этот порядок не соблюдается, подчиненные системы не могут подключиться к ведущему устройству, и обновление должно выполняться вручную (подробности см. В разделе FAQ).
Windows
В системах, настроенных с помощью нового установщика Windows, js-контроллер не должен обновляться до npm. Появится новая версия установщика Windows, которая позволяет обновлять js-контроллер несколькими щелчками мыши. Мы обновляем здесь в теме.
Для всех «старых ручных» установок, как обычно, применяется та же команда ioBroker, что и для собственного обновления iobroker.
Linux
Как обычно, обновление будет выполнено через само обновление iobroker.
В случае ошибок: если установка Linux не удалась из-за отсутствия прав доступа, лучше всего использовать установщик и повторить установку.
curl -sL https://iobroker.net/fix.sh | bash -
Если после этого по-прежнему возникают ошибки, повторите попытку установки с помощью sudo -H -u iobroker npm install iobroker.js-controller. Пожалуйста, сообщайте о таких случаях здесь в теме.
После установки
После установки перезапустите ioBroker (например, через запуск iobroker).
Если все пойдет хорошо, вы не заметите никакой разницы, кроме более высокого номера версии в представлении администратора в админке. Все будет продолжать работать как прежде. Все экземпляры адаптера запускаются и работают. Если это так, все сработало. Большие изменения скрыты под капотом.
Кроме того, что приносит вам все нововведения, вы найдете ниже в этой текстовой информации. Новые функции в качестве основы для дальнейших разработок были тщательно интегрированы, и были решены конкретные проблемы.
С помощью iobroker отображается список возможных команд командной строки, который стал длиннее с версией 2.0.
Что изменилось, что посмотреть / проверить?
Одним из основных изменений является то, что собственные базы данных состояний и объектов ioBroker были полностью переписаны. В системе ioBroker для связи теперь используется TCP-совместимый и Redis-совместимый протокол. Особенно ошибки «Переподключение из БД» теперь должны быть в прошлом. Основываясь на этих изменениях, мы планируем некоторые интересные инновации на будущее.
Из-за этого изменения теперь в журналах частично "подключен к redis", хотя вы не используете Redis. Однако вы все равно можете обнаружить его в порту, если это база данных ioBroker (обычно это порты 9000 и 9001). Первые тесты показали, что загрузка процессора процессором и js-контроллером ниже, чем в старой версии, поскольку новый протокол намного тоньше. Это все еще более гибко и надежно - до тех пор, пока сетевое соединение не разрывается. Но даже в таком случае должно произойти автоматическое переподключение, и, если прерывание не слишком продолжительное, любые изменения со времени без подключений будут переданы повторно. Так что, если в прошлом вы страдали от сообщений и эффектов «Reconnect to DB», ваш отчет очень интересен для нас.
Аналогичным образом была улучшена пресловутая «Ошибка 7», которая появляется в журнале, если процесс адаптера уже запущен, но должен быть запущен новый. Если должен быть запущен новый процесс, процессы, которые все еще работают, должны автоматически завершать себя и генерировать одноразовое сообщение в журнале.
Как я уже сказал, за кулисами произошло много изменений. Вот для интересующего в качестве спойлера резюме:
2.0 - релиз Белла
Срочные изменения
Минимальное требование для js-controller 2.0 - это node.js 8.x Файлы в iobroker-data / files поддерживаются только в официально зарегистрированных каталогах. Новые пользовательские функции
- Добавить компактный режим и компактные группы (Technology Preview)
- Добавить встроенную обработку псевдонимов для объектов / состояний (Technology Preview)
- Добавить поддержку Redis для объектов и файлов
- Добавить поддержку Redis Sentinel
- Разрешить динамическое изменение уровня логики для процессов экземпляра адаптера и хостов js-controller
- Добавьте дополнительную миграцию для значений State и / или Objects при использовании пользовательских настроек
- Добавить мониторинг задержки цикла событий в качестве объектов хоста и адаптера.
- Добавить возможность проверки файлов резервных копий
- Поддержка команды "iobroker logs"
- Поддержка команды "Сертификат создания"
- Помните место установки для переустановок
- Используйте запомненное место установки для автоматической установки адаптера
- Идентификатор процесса регистрации для всех сообщений журнала адаптера
- Улучшить некоторые команды CLI, такие как статус iobroker.
- Новые возможности разработчика адаптера
Оптимизируйте редис по сравнению с обработкой файлов, которая была другой до контроллера 2.0:
- не установленные состояния теперь всегда будут возвращать ноль
- Штаты хотят полностью обнулить (а не только значение), когда они истекают
- Штаты хотят публиковаться в обработчиках изменений, когда они находятся в Redis
- Добавьте метод adapter.supportsFeature ('NAME'), чтобы проверить, существует ли определенная функция. # 244
- Возможность определять защищенные объекты в io-pack доступе только через собственный адаптер и админа. # 287
- Добавлены getObjectView и getObjectViewAsync на объект адаптера
- Добавлены getObjectList и getObjectListAsync для объекта адаптера
- Разрешить удаление нескольких объектов с подстановочными знаками
setObject / setObjectNotExists теперь устанавливает значение по умолчанию состояния после создания объекта
- Разрешить getPort проверять порт на определенном хосте / IP
Дальнейшие изменения
- Переписать базы данных InMem (States & Objects) по протоколу TCP (redis-совместимый) и отказаться от версии socket.io; хотят быть удалены ок. в v2.1
- Добавьте обработку адаптера для предотвращения «ошибки 7» (адаптеры остановятся сами, как только PID не будет таким, как ожидалось)
- обновить все зависимости
- не chmod 777 после обновления контроллера
- Рефакторинг многих команд консоли
- Добавить возможность вернуть zip-файл как ссылку, а не как base64
- стандартизировать коды ошибок
- Root всегда должен устанавливать npm с помощью --unsafe-perm
- Включить gzip для чтения репозиториев
- Прочтите хэш исходников .json онлайн перед загрузкой всего файла
- Добавить некоторую информацию о user-agent
- Проверьте версию node.js, запустив экземпляр
- Скрыть окно cmd на окнах
- Сначала включите создание сертификата в настройку
- Подавить предупреждение при установке npm
- Разрешить установку необязательных зависимостей
- Оптимизируйте настройку настраиваемой команды и добавьте дополнительные указания для пользователя.
- Добавить обзор функций в README
- Пересылка выходных данных консоли с подчиненного устройства на ведущее
- Обязательно загрузите и обновите все адаптеры
- Всегда обновляйте объекты экземпляра после успешной установки или обновления
- Оптимизируйте процессы запуска адаптера, особенно в сочетании с необходимыми автоматическими установками адаптеров.
- После 2 попыток установки с помощью «last-connectedFrom» используйте поле установленной версии, чтобы попытаться выполнить установку с npm.
- Hhosts теперь игнорирует изменения объекта, когда затронутые экземпляры молчат в installQueue
- Рефакторинг и оптимизация кода в разных местах
- рандомизировать серийный номер сертификата
- отложить параллельный запуск запланированных экземпляров для предотвращения сценариев перегрузки системы (те же правила, что и для запуска адаптера, в основном задержка 4 с)
Исправления ошибок
- Журнал запланированных перезапусков только как информация (исправления # 315)
- Исправлено # 340 для поддержания restartSchedule на обновлениях
Исправлена ошибка, при которой можно было установить «ack» на любое значение через cli
- Включите ESLint и исправьте большинство проблем
- Оптимизировать загрузку нескольких хостов
- Перезапустите остановленные адаптеры в конце загрузки, но не до обновления
- Усовершенствовать проверки для неудачных установок в Cli и контроллер
- обновлять статистические объекты экземпляра адаптера, когда instanceObejcts не определены
- Значения состояния «.alive» проверяются при запуске адаптера, если ack = true, чтобы разрешить запуск процесса, если он не запущен
- Исправлено обнаружение мутлихоста.
- Исправлено резервное копирование состояний
- Убедитесь, что глобальный CSS VIS включен в резервную копию и восстановлен
- еще много исправлений в разных местах
Более подробную информацию об изменениях и исправлениях ошибок можно найти в журнале изменений.
Как сообщить об ошибке?
Если вы не уверены, есть ли ошибка, лучше всего описать проблему здесь, в теме. Таким образом, мы все можем попытаться понять проблему и сузить при необходимости.
Как только возникает ошибка, которая заканчивается сообщением об ошибке или сбоем с подробными сведениями об ошибке в журнале или в командной строке, лучше всего непосредственно открыть проблему GitHub в проекте js-controller и дополнительно опубликовать ее в потоке здесь. Более подробная информация в выпуске (точные сообщения об ошибках / журналы, информация об используемой конфигурации БД (файл (file, file / redis, redis / redis ...), информация об ОС и среде Node.js, а также точные шаги к Воспроизведение проблемы), тем быстрее мы можем кружить и исправлять ошибки.
Обзор некоторых новых функций
1.Компактный режим и компактные группы
Одним из больших преимуществ ioBroker является то, что каждый адаптер работает как отдельный процесс. Это делает систему очень стабильной - в случае проблем они затрагивают только один адаптер, а не всю систему. С другой стороны, этот подход также требует немного больше оперативной памяти. Для систем с небольшим объемом доступной ОЗУ (таких как Raspi Nano или Raspi 1 с 512 МБ ОЗУ), которые часто используются в качестве подчиненных систем, количество адаптеров ограничено.
Компактный режим решает эту проблему, запуская несколько адаптеров вместе в одном процессе, значительно снижая требования к ОЗУ (экономя примерно 20-30 МБ на экземпляр адаптера). Однако это происходит за счет стабильности, поскольку неисправный адаптер также влияет на все остальные адаптеры в том же процессе, и это также может перезапускаться.
Экземпляры адаптера можно разделить на несколько групп, чтобы распределить риск. Каждая группа запускает свой собственный процесс, в котором затем выполняются все экземпляры этой группы. Группа 0 особенная. Членство здесь означает, что рассматриваемый адаптер работает в основном процессе js-контроллера. Это приводит к наибольшей экономии ОЗУ, но также и к наибольшему риску, поскольку неисправный адаптер может отрицательно повлиять на контроллер js. По умолчанию экземпляры в группе 1 выполняются, когда для соответствующего экземпляра включен компактный режим.
Поддержка адаптера компактным режимом зависит от адаптера. Эта информация все еще будет включена в список адаптеров в будущем. В настоящее время в компактном режиме запускаются только адаптеры, работающие в качестве демона (т.е. без запланированных адаптеров). Даже если адаптер обычно поддерживает компактный режим, использование должно быть активировано индивидуально для каждого экземпляра!
В настоящее время нет поддержки для настройки компактного режима в Admin. Конфигурация выполняется с помощью вызова из командной строки. Наиболее важные команды:
iobroker compact enable для общего включения режима Compact для текущего хоста контроллера js. ioBroker должен быть перезапущен, чтобы изменения вступили в силу.
iobroker list instances теперь также отображает состояние компактного режима экземпляров адаптера.
iobroker compact <adaptername>.<instance> status указывает состояние компактного режима экземпляра.
iobroker compact <adaptername>.<instance> enable 1 активирует выполнение в компактном режиме в группе «1». Только адаптер будет перезапущен. Эта конфигурация может быть выполнена во время работы ioBroker.
Если есть проблемы (например, адаптер не работает чистым или «зависает» во время остановки), пожалуйста, откройте проблему с адаптером. В противном случае, пожалуйста, напишите здесь в теме, чтобы мы увидели, что это такое.
2. Источник установки адаптеров сохранен
Адаптеры ioBroker обычно устанавливаются из последнего или стабильного репозитория npm. Если адаптер необходимо перенести на другой хост или систему необходимо переустановить, будет предпринята попытка снова установить ту же версию npm. Обычно это тоже работает. Однако, если адаптер был установлен GitHub на пробной основе, эта версия или версия может быть недоступна на npm. Таким образом, одна и та же версия не может быть переустановлена автоматически. Это меняется сейчас.
Для всех новых установок адаптера после обновления ioBroker запоминает точное состояние GitHub пользовательской установки и затем может установить эту версию снова.
Также при самой установке адаптера, загрузка и многое другое было пересмотрено и оптимизировано. Исправлены некоторые особые случаи, когда части логики загрузки выполнялись некорректно. Опять же, помогите с вашими тестами.
3. Поддержка Redis теперь также для объектов и файлов
По умолчанию объекты и состояния хранятся в базе данных хранилища ioBroker и хранятся в файлах JSON. Благодаря этому собственному решению дополнительное программное обеспечение не требуется.
В течение некоторого времени уже было возможно сохранять состояния в оптимизированной базе данных Redis. Начиная с определенного количества изменений состояния в секунду, Redis может снизить общую нагрузку системы или распределить ее по нескольким системам. Redis, однако, также приносит с собой дополнительные усилия, так как это программное обеспечение хочет быть установленным, управляемым и защищенным, чтобы не было потери данных в случае обновлений или проблем.
С помощью js-controller 2.0 ioBroker теперь также позволяет управлять объектами и файлами, которые в данный момент хранятся в основной системе в файловой системе, в базе данных Redis.
Важно: особенно передача файлов в базу данных может привести к тому, что она станет довольно большой (например, несколько сотен МБ). Поскольку Redis всегда хранит все данные в оперативной памяти, этот параметр подходит только для систем, в которых имеется достаточно ресурсов оперативной памяти. Аналогично, загрузка процессора будет выше для системы redis / redis, поскольку данные должны обрабатываться по-разному.
Перемещение файлов в базу данных обеспечивает большую гибкость. Из-за этого изменения в файловой системе практически нет локальных данных. В общем, база данных Redis становится центральной системой хранения данных системы ioBroker, поскольку она содержит все данные. Все контроллеры и адаптеры js затем подключаются к этой центральной базе данных.
С js-controller 2.x даже установка Redis-Sentinel может использоваться для повышения доступности системы (почти как кластер Redis HA). Это первая основа для обеспечения системы ioBroker высокой доступности, которая может компенсировать сбои отдельных компонентов сервера. Тем не менее, этот параметр в настоящее время должен быть протестирован, только если вы знаете, что делаете you В более поздних обновлениях больше.
С введением различных возможностей хранения файлов, объектов и состояний команда настройки iobroker была пересмотрена. С одной стороны, это показывает больше информации. Кроме того, он теперь также может переносить данные во всех направлениях при изменении управления данными. Таким образом, изменение возможно в любое время.
4. Функция "Псевдоним"
Одним из преимуществ ioBroker является то, что есть много адаптеров. Однако было обнаружено, что каждый адаптер, например, В зависимости от подключенных систем реализуются отдельные структуры для хранения предоставленных точек данных. Это связано с определенными сценариями, а также с визуализацией и облачными / iot-адаптерами. При замене устройств между различными производителями иногда необходимо настроить сценарии из-за изменений в точках данных. Адаптер визуализации и адаптер iot попробуйте, например, Определите тип устройств на основе ролей точек данных для правильного отображения или отправки отчетов в Amazon или Google. Адаптеры иногда теряются, потому что некоторые адаптеры имеют информацию о ролях и тому подобное. не может доставить - особенно MQTT, Modbus и т. д. затронуты здесь.
Функция псевдонима, привязанная непосредственно к контроллеру js, предоставляет новое пространство имен «alias.0» для объектов. Эта функция позволяет создавать устройства со стабильной структурой и чистыми ролями. Это делается сначала вручную, а затем, например, с использованием нового адаптера «Устройства», который находится в стадии разработки.
Также эта функция не имеет полной поддержки в админке, которая все же появится.
После определения объекта псевдонима новая область common.alias может использоваться для определения идентификатора исходного объекта в соответствующем адаптере. С этого момента все данные будут синхронизироваться в обоих направлениях между объектами. Кроме того, интересно, что функция чтения и записи может быть определена для выполнения простых преобразований (например, Wh <--> кВтч).
Дальнейшие (технические) подробности были опубликованы под Alias Information в js-controller README.