js-controller 2.0 已经可以更新了

js-controller 2.0 已经可以更新了

在大佬们不断地努力更新下,ioBroker的核心js-controller迎来了2.0版本的更新。首先让我们感谢他们的努力。

新版的js-controller2.0 和大部分插件都可以兼容,基本上所有的系统都可以升级到js-controller2.0

更新内容

对iobroker-data管理更严格

对于使用ioBroker的用户,这个文件夹一定不会陌生。
在新的js-controller2.0版本中,对插件保存文件的方式和保存文件的路径有了严格的规定,必须保存到插件程序自己的文件夹中(比如vis.0, iqontrol.meta)。
这样做的好处是在备份ioBroker的时候,用户个性化文件也可以被备份。

对状态和对象数据库进行重构

新的js-controller将使用基于TCP的和redis兼容的协议方式进行通信。新的架构彻底解决了之前系统遇到的“Reconnection from DB”错误。
所以在新的js-controller系统中,细心的你可能会发现,及时你没有配置Redis数据库,仍然在log中会看到“connected to redis”相关的字眼。
新的架构比之前的架构在CPU负载上有明显改善,而且系统鲁棒性会更强。
在旧的系统中,有时会遇到一个运行的程序实例重复启动的“Error 7”错误。这个问题在新的系统中也有完美的修复。程序实例重复启动的情况发生时,旧进程会自动退出。

增加兼容模式

ioBroker系统的一个很大的优势在于每一个程序都是独立的进程执行的,这样可以保证系统整体不会因为个别程序异常而导致不稳定。但是,这样也会消耗更多的内存。
兼容模式将多个程序运行在一个进程中,这样可以减少内存的消耗(大约每一个程序将减少20-30MB),但是请注意,这个是以牺牲系统稳定性换来的。
也可以通过创建多个兼容模式的组,将稳定的程序和不稳定的程序放在不同的组中,降低不稳定程序带来的副作用。请注意,0号组是js-controller运行的进程,请不要将不稳定的程序分到这个组中,因为如果程序崩溃会直接导致ioBroker系统完全崩溃。
应用插件是否支持兼容模式启动是插件作者自行决定的。而且无法在admin界面中设置程序已兼容模式启动,必须通过命令行方式启动,常用命令如下:

iobroker compact enable #使能兼容模式,执行命令后必须手动重启ioBroker。
iobroker list instances #列出当前的所有程序,这里会标注程序是否已兼容模式运行。
iobroker compact <adaptername>.<instanz> status #获得某程序是否已兼容模式运行。
iobroker compact <adaptername>.<instanz> enable 1 #将某程序放在兼容模式组1中运行。

如果设置某程序进入兼容模式后,程序出现异常,请在github上给作者提issue。

完善了插件安装逻辑

如果应用插件是通过github链接安装的,新的系统将会记录此信息,并且在迁移此插件至其他主机,或者重新安装此插件的时候,将安装github的版本。
同时,也优化了安装完插件后的上传等操作,修复了旧系统的一些问题。

支持将对象数据库保存到Redis数据库

之前系统,只支持将状态数据库保存到Redis数据库。新的系统支持同时将对象和状态数据库保存到Redis数据库。
请注意:因为Redis数据库都在内存中加载,所以全部将状态和对象数据库保存到Redis数据库后,需要数百MB的内存占用。
将对象和状态数据库都保存到Redis数据库后,ioBroker系统将变得十分纯粹,所有的数据都在外部Redis数据库中,而系统只有程序和部分程序需要的外部文件。
对于熟悉此数据库的用户,可以基于这样的情况,搭建出更多高级的系统。

“别名”功能

ioBroker有众多的应用插件,可以支持各种设备和系统的接入。但是每一个插件的对象结构都是相对独立的,缺乏统一的标准。这样给UI显示,云端服务,智能音箱接入等方便带来了很大挑战。
ioBroker有一套基于角色和数据类型的设备识别工具,但是并不是所有的插件都遵守了此规则。而且对于MQTT,modbus等插件,数据点本身更加灵活,结构多变。
别名功能的设计初衷是将各种各样的数据点,统一映射为标准的数据点。用户只需要做一次此操作,就可以让许多应用插件自动识别到设备。
这个功能还无法在admin页面直接设置,用户可以使用测试版本的iobroker.deices插件配置设备的别名功能。

更多技术细节的信息可以从js-controller的README中获得。

更新条件

nodejs版本

js-controller 2.0 要求nodejs版本最低为 8.x,更推荐使用10.x版本的nodejs。

更新部分插件的版本

下面的这些插件,如果已经在使用的话,请更新版本大于最低要求的版本

插件名称 最低版本
simple-api 2.1.2
email 1.0.5
pushover 1.1.1
hue 1.2.4
node-red 1.10.1
vis 1.2.1
iqontrol 0.2.12
socketio 2.1.2
radar2 1.2.0(需要手动从github更新)
broadlink2 (请参考FAQ)
sonos 2.0.0

更新方式

1. 务必做好备份

使用iobroker stop命令停止ioBroker系统,并且使用ioBroker backup备份系统。
如果还是不放心,就备份整个iobroker-data目录,作为最后一道防线。

2. 更新从主机

请注意,如果之前已经使用了多主机系统,请务必首先更新从主机的js-controller到最新2.0版本

3. 安装更新

Windows主机

使用新的安装程序](),通过标准的window安装流程,即可完成安装。

Linux主机

  • 停止ioBroker程序,通过执行命令iobroker stop
  • 检查是否所有的ioBroker进程都停止运行了,通过执行命令ps auxww|grep io,确定屏幕不会显示ioBroker的进程。
  • 执行js-controller更新的命令iobroker upgrade self,等待程序结束。
  • 重新启动ioBroker,通过执行命令iobroker start

如果ioBroker正常的启动了,你不会发现你的系统有什么不同。因为所有大的变化都隐藏在系统内部。但是,如果很不幸你发现系统无法运行,或者有一些插件有异常了,请尝试下面的修复方式。

错误处理

对于Linux主机,可能会因为没有文件访问权限而出错。ioBroker为大家准备了自动修复权限的脚本,只需要将下面的命令复制到命令行中即可。

curl -sL https://iobroker.net/fix.sh | bash -

如果执行了上述修复脚本,ioBroker仍然无法启动,请再通过执行下面的命令,重新安装js-controller

sudo -H -u iobroker npm install iobroker.js-controller

上报问题

如果在更新系统后,你遇到了奇怪的情况,但是也不知道是否是一个真正的问题,请在此帖中留言,描述清楚发生问题前后做了哪些操作,遇到了什么问题。如果我们无法解决,也会寻求大佬们的帮助。
当然更直接的方式就是在js-controller的github项目中提issue。请尽可能的详细描述你的问题,尽可能提供更多的日志和数据库信息。

FAQ

  1. Q:上面文章太长了。。。

    A: 总结如下:

    1. Nodejs 8.x是最低要求。
    2. 文件将被更好的管理。请使用标准方式上传文件。
    3. 多主机系统必须要先更新从机的js-controller,最后更新主机。
    4. 使用iobroker upgrade self更新系统。
  2. Q: 更新系统后,log中出现pids.txt could not be written
    A: 文件权限问题,请使用上面章节中提到的权限修复脚本修复问题。或者在ioBroker系统停止的情况下,手动删除没有访问权限的文件。

  3. Q: 如何回退到旧版本?
    A: 首先如果是系统有问题,请在Github上创建一个issue,描述你的问题,这样有助于系统更加完善。

    版本回退步骤:

    • 停止ioBroker
    • 如果已经将对象数据库迁移到了Redis数据库,请不要回退版本了,因为Redis对象数据库无法在旧版本中访问。
    • 保险起见,请手动备份iobroker-data路径。或者使用命令行命令备份系统。
    • 进入ioBroker路径下,执行sudo -u iobroker -H npm install iobroker.js-controller@1.5.14
    • 重新启动ioBroker系统。
  4. Q: I have iobroker setup custom migrated data despite the warnings on a slave and now nothing works. What can I do?
    A: The migration creates a backup. This is backupsstored on the master host in the directory and has “-migration” appended to the end of the name. To restore the data from the master migration, this backup must be iobroker restore re-recorded.
    Then change all slave hosts and finally iobroker upload allexecute on the master .

  5. Q: I have copied files into a separate directory in iobroker-data / files and now they are no longer displayed. What can I do?
    A: For security reasons, ioBroker’s own storage is now treated a bit more tightly. Nut officially known in ioBroker directories may be used and only official ways to copy the file purely. The best way to use the upload tools from adapters like vis or iqontrol. Alternatively, there are CLI commands.

  6. Q: How do I have to rewrite a script that was written directly in iobroker-data / files? How can I upload files via JavaScript?
    A: The script should use the writeFile method. Details also https://forum.iobroker.net/post/307537 or https://forum.iobroker.net/post/310177

  7. Q: Broadlink2 is not working anymore. What can I do?
    A: The developer is working on an update. Currently, the function can be manually restored by changing:
    The file myAdapter.js is located in the ioBroker directory in node_modules / @ frankjoke / myAdapter OR node_modules/iobroker.broadlink2/node_modules/@frankjoke/myAdapter. This must be replaced by this version ( myAdapter.js .

  8. Q: I’m using the GitHub version of Radar2 and it does not work anymore. What can I do?
    A: Exactly the same as Broadlink in the article above.

  9. Q: Uups, I updated my master first, and now the slaves can not connect anymore. What now?
    A: Everything is so wild, the slaves have to be updated slightly different: