Developing a hardware plugin:修订间差异

来自Domoticz
 
(未显示同一用户的5个中间版本)
第15行: 第15行:
* hardware/SonosPlugin.h
* hardware/SonosPlugin.h


=Add the new hardware to the appropriate global files=
=在适当的全局文件中增加新的硬件=


Next we need to make domoticz aware of the new plugins existence.
接下来我们需要使 domotic 检测到新的插件存在。


'''main/RFXNames.h'''
'''main/RFXNames.h'''


Add HTYPE_SonosPlugin to _eHardwareTypes
增加 HTYPE_SonosPlugin _eHardwareTypes


'''main/RFXNames.cpp'''
'''main/RFXNames.cpp'''


Add HTYPE_SonosPlugin to Hardware_Type_Desc
增加 HTYPE_SonosPlugin Hardware_Type_Desc


'''main/mainworker.cpp'''
'''main/mainworker.cpp'''


Add #include "../hardware/SonosPlugin.h" to the end of the includes for hardware
为硬件增加 #include "../hardware/SonosPlugin.h" includes 文件末尾。


Add instantiation (new) of CSonosPlugin to case for AddHardwareFromParams method
为 AddHardwareFromParams 方法添加 CSonosPlugin 的实例化(new)


'''main/WebServer.cpp'''
'''main/WebServer.cpp'''


Add handling of HTYPE_SonosPlugin within Cmd_UpdateHardware to ensure that all required hardware settings have values.
通过 Cmd_UpdateHardware  增加 HTYPE_SonosPlugin 的操作,确保所有所需的硬件设置都有值。
When adding serial devices add the HTYPE to the IsSerialDevice in main/RFXNames.cpp.
在添加串行设备时,将HTYPE添加到 main/RFXNames.cpp 中的 IsSerialDevice 中。


=Add the UI to create the new hardware in the Hardware tab=
=在硬件选项卡中添加创建新硬件的 UI 界面=


'''www/app/HardwareController.js'''
'''www/app/HardwareController.js'''


Add the Hardware to the field verifications in UpdateHardware and AddHardware (look for text.indexOf("YourModelPlugin")).
UpdateHardware 和 UpdateHardware 中增加硬件验证字段(查找 text.indexOf("YourModelPlugin")).


Don't forget to also edit the RefreshHardwareTable function, where the hardware items are referred by numeric id!!!
不要忘记编辑 RefreshHardwareTable 函数,其中的硬件项目是由数字id引用的!!这里假设不需要额外的硬件配置数据。如果需要,其他插件可以重用数据库中可用的硬件字段:
I'm assuming here that no extra configuration data for hardware is needed. If you need it, other plugins reuse the hardware available fields from the database:


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


If you need to let the user edit this fields, create the corresponding Edit* function in HardwareController.js (use available ones as inspiration).
如果需要让用户编辑该字段,请在 HardwareController.js 中创建相应的 Edit* 函数。(使用已有的函数是一个好办法)


'''www/html5.appcache'''
'''www/html5.appcache'''


Increment the ref number on the second line so that the browser knows the js file has been updated and to force a refresh of the hardware list.
在第二行增加 ref 编号,以让浏览器知道 js 文件已经更新并强制刷新硬件列表。


=Change the makefile=
=修改 makefile=


'''CMakeLists.txt'''
'''CMakeLists.txt'''


Add hardware/SonosPlugin.cpp to Target - Trick: While debugging, add it close to the top (issues will arrive earlier); later add it as the last hardware code target.
增加 hardware/SonosPlugin.cpp 到编译目标 - 技巧: 在调试的时候,把它加在最上面(问题将更早的暴露); 然后添加最新的硬件代码到目标中。


Add the needed specific libraries for linking. In this case (in gcc you would use the -llibname syntax):
为链接增加必须的特定库。方法如下(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


Add the needed specific headers/includes.  
增加必须的特定的 headers/includes.


'''Build Makefile'''
'''Build Makefile'''


You change that modifying the CMakeLists.txt and then creating a makefile
修改 CMakeLists.txt 之后创建 makefile


<nowiki>
<nowiki>
第77行: 第76行:
</nowiki>
</nowiki>


You have to add to the makefile all the libraries and includes needed for your specific plugin. And maybe other compiler/linker options. (The syntax for CMake is tricky. I've just added what I needed in a quick and dirty way. There's for sure a better way to do that.)
必须在 makefile 中添加特定插件所需的所有的库和头文件。可能还包括其他编译/链接选项。(CMake 的语法很复杂,我刚刚以一种快速而糟糕的方式添加了我需要的东西,但是肯定有更好的办法。)


=Install any prerequisite packages=
=安装必须的软件包=


for raspbian: sudo apt-get install sometimes you need the -dev version, you never know!.
树莓派:通过 sudo apt-get install 命令安装,有时你需要 -dev 版本,你可能不知道。
 
在这种情况下,必须安装这些库。通过 "apt-cache search" 命令检查最新可用版本的名字。


In this case I had to install this libraries. Check the name of the latest available version using "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

Compile and have fun