Developing a hardware plugin:修订间差异
(未显示同一用户的4个中间版本) | |||
第38行: | 第38行: | ||
在添加串行设备时,将HTYPE添加到 main/RFXNames.cpp 中的 IsSerialDevice 中。 | 在添加串行设备时,将HTYPE添加到 main/RFXNames.cpp 中的 IsSerialDevice 中。 | ||
= | =在硬件选项卡中添加创建新硬件的 UI 界面= | ||
'''www/app/HardwareController.js''' | '''www/app/HardwareController.js''' | ||
在 UpdateHardware 和 UpdateHardware 中增加硬件验证字段(查找 text.indexOf("YourModelPlugin")). | |||
不要忘记编辑 RefreshHardwareTable 函数,其中的硬件项目是由数字id引用的!!这里假设不需要额外的硬件配置数据。如果需要,其他插件可以重用数据库中可用的硬件字段: | |||
Address VARCHAR(20), Port INTEGER, Username VARCHAR(100), Password VARCHAR(100), Mode1 - Mode5 CHAR | Address VARCHAR(20), Port INTEGER, Username VARCHAR(100), Password VARCHAR(100), Mode1 - Mode5 CHAR | ||
如果需要让用户编辑该字段,请在 HardwareController.js 中创建相应的 Edit* 函数。(使用已有的函数是一个好办法) | |||
'''www/html5.appcache''' | '''www/html5.appcache''' | ||
在第二行增加 ref 编号,以让浏览器知道 js 文件已经更新并强制刷新硬件列表。 | |||
= | =修改 makefile= | ||
'''CMakeLists.txt''' | '''CMakeLists.txt''' | ||
增加 hardware/SonosPlugin.cpp 到编译目标 - 技巧: 在调试的时候,把它加在最上面(问题将更早的暴露); 然后添加最新的硬件代码到目标中。 | |||
为链接增加必须的特定库。方法如下(gcc 需要使用 -llibname 语法): | |||
pthread gupnp-1.0 gssdp-1.0 gupnp-av-1.0 glib-2.0 gobject-2.0 gthread-2.0 | pthread gupnp-1.0 gssdp-1.0 gupnp-av-1.0 glib-2.0 gobject-2.0 gthread-2.0 | ||
增加必须的特定的 headers/includes. | |||
'''Build Makefile''' | '''Build Makefile''' | ||
修改 CMakeLists.txt 之后创建 makefile | |||
<nowiki> | <nowiki> | ||
第77行: | 第76行: | ||
</nowiki> | </nowiki> | ||
必须在 makefile 中添加特定插件所需的所有的库和头文件。可能还包括其他编译/链接选项。(CMake 的语法很复杂,我刚刚以一种快速而糟糕的方式添加了我需要的东西,但是肯定有更好的办法。) | |||
= | =安装必须的软件包= | ||
树莓派:通过 sudo apt-get install 命令安装,有时你需要 -dev 版本,你可能不知道。 | |||
在这种情况下,必须安装这些库。通过 "apt-cache search" 命令检查最新可用版本的名字。 | |||
libgupnp-1.0-dev libgupnp-av-1.0-dev libgssdp-1.0-dev libsoup2.4-dev libxml2 // libg glib | libgupnp-1.0-dev libgupnp-av-1.0-dev libgssdp-1.0-dev libsoup2.4-dev libxml2 // libg glib | ||
=Compile and have fun= | =Compile and have fun= |
2018年8月2日 (四) 16:44的最新版本
我应该创建一个 C++ 硬件插件吗?
可能不需要.
Domoticz 支持 Python 插件框架,无论从保证 Domoticz 核心系统更小还是更专注等方面都应该使用 Python.
细节请参考这里: Developing a Python plugin
只有不能被 Python 框架很好兼容的硬件才需要增加 C++ 插件.
在硬件目录创建一个 .cpp 和一个 .h 文件
通过查看其他插件作为一个好的例子,重命名这些文件和这些文件中的类和定义。例如:Sonos 硬件插件,我修改了这些文件:
- hardware/SonosPlugin.cpp
- hardware/SonosPlugin.h
在适当的全局文件中增加新的硬件
接下来我们需要使 domotic 检测到新的插件存在。
main/RFXNames.h
增加 HTYPE_SonosPlugin 到 _eHardwareTypes
main/RFXNames.cpp
增加 HTYPE_SonosPlugin 到 Hardware_Type_Desc
main/mainworker.cpp
为硬件增加 #include "../hardware/SonosPlugin.h" 到 includes 文件末尾。
为 AddHardwareFromParams 方法添加 CSonosPlugin 的实例化(new)。
main/WebServer.cpp
通过 Cmd_UpdateHardware 增加 HTYPE_SonosPlugin 的操作,确保所有所需的硬件设置都有值。 在添加串行设备时,将HTYPE添加到 main/RFXNames.cpp 中的 IsSerialDevice 中。
在硬件选项卡中添加创建新硬件的 UI 界面
www/app/HardwareController.js
在 UpdateHardware 和 UpdateHardware 中增加硬件验证字段(查找 text.indexOf("YourModelPlugin")).
不要忘记编辑 RefreshHardwareTable 函数,其中的硬件项目是由数字id引用的!!这里假设不需要额外的硬件配置数据。如果需要,其他插件可以重用数据库中可用的硬件字段:
Address VARCHAR(20), Port INTEGER, Username VARCHAR(100), Password VARCHAR(100), Mode1 - Mode5 CHAR
如果需要让用户编辑该字段,请在 HardwareController.js 中创建相应的 Edit* 函数。(使用已有的函数是一个好办法)
www/html5.appcache
在第二行增加 ref 编号,以让浏览器知道 js 文件已经更新并强制刷新硬件列表。
修改 makefile
CMakeLists.txt
增加 hardware/SonosPlugin.cpp 到编译目标 - 技巧: 在调试的时候,把它加在最上面(问题将更早的暴露); 然后添加最新的硬件代码到目标中。
为链接增加必须的特定库。方法如下(gcc 需要使用 -llibname 语法):
pthread gupnp-1.0 gssdp-1.0 gupnp-av-1.0 glib-2.0 gobject-2.0 gthread-2.0
增加必须的特定的 headers/includes.
Build Makefile
修改 CMakeLists.txt 之后创建 makefile
cmake CMakeLists.txt (raspberry) or cmake -DCMAKE_BUILD_TYPE=Release . (cubieboard)
必须在 makefile 中添加特定插件所需的所有的库和头文件。可能还包括其他编译/链接选项。(CMake 的语法很复杂,我刚刚以一种快速而糟糕的方式添加了我需要的东西,但是肯定有更好的办法。)
安装必须的软件包
树莓派:通过 sudo apt-get install 命令安装,有时你需要 -dev 版本,你可能不知道。
在这种情况下,必须安装这些库。通过 "apt-cache search" 命令检查最新可用版本的名字。
libgupnp-1.0-dev libgupnp-av-1.0-dev libgssdp-1.0-dev libsoup2.4-dev libxml2 // libg glib