# 自定义服务开发

该页面旨在指导开发者如何开发具有自定义服务功能的 AddOn 包。

请注意:

本章为入门教程,主要目的是使开发者了解自定义服务的基础知识与基本开发流程。

若需了解如何开发带有具体应用功能、应用于具体工艺场景的自定义服务 AddOn 包,请参考后续的完整案例章节。

# 关于自定义服务

# 自定义服务是什么

自定义服务是一种在后台执行任务的服务,用户不会直接感知其存在。

# 自定义服务的作用

自定义服务负责处理与用户交互无关的、后台数据处理和业务逻辑处理的部分。与 Http 节点配合,可以和前台界面进行数据交互,为自定义指令、自定义网页、或其他客户端提供接收、处理、存储、计算和分析数据等服务。

# 创建AddOn自定义服务包

在此处的示范中,我们将创建一个自定义服务类型的AddOn。该AddOn的功能是对外提供查询机器人电源状态的服务。

注:

下文中的 JAKA_Service 就是我们即将创建的 AddOn 自定义指令包的包名。

# 步骤一:创建 AddOn 文件夹

首先我们需要创建一个 AddOn 基本文件夹,该文件夹需包含一个 .ini 格式的配置文件和一个保存数据的 Json 文件。

您可以从头开始手动创建,也可以使用 AddOn 开发包仓库中 "Template" (opens new window) 目录下的AddOn模板进行修改。

目录结构

|——JAKA_Service
   |——AddOn.json
   |——JAKA_Service_config.ini

  • AddOn.json
    Json 文件内容为空即可,后面的步骤中会自动生成数据写入。
  • JAKA_Service_config.ini
    配置文件具体内容如下:
    [AddOnInfo]
    convention = 3.0
    name = JAKA_Service
    description = "JAKA AddOn Service Demo"
    version = 1.0
    type = 1
    portal = 10006
    url = http://localhost/myAddOnUi
    languagetype = node-red
    service = AddOn.json
    serviceenabled = 1
    

TIP

详细的配置项说明可参考:配置文件说明 [点击跳转] 👈

# 步骤二:打包&上传

接下来我们会将步骤一中创建好的文件夹打包,上传至控制器中进行指令块开发,打包的要求格式为.tar.gz

在 Windows 中您可以使用 7z 等打包工具进行二次压缩。

在 App 中附加管理程序页面上传 AddOn 。

小结

到此为止,我们完成了 AddOn 包的初始化工作,并打包为了 AddOn 的标准格式,上传至控制器。 接下来我们可以进一步制作 AddOn 的具体功能。

# 步骤三:开发自定义服务

  1. 运行 AddOn 并查看 AddOn 运行的端口号。
  1. 打开浏览器,在地址栏中输入机器人 IP + 端口号(IP:Portal)进入开发者界面。

小结

当 AddOn 运行后,控制器会基于该 AddOn 包中的 AddOn.json 文件启动一个 node-red 实例。 我们可以通过机器人的 IP 和 AddOn 当前运行的端口号访问这个 node-red 实例。

请注意:

AddOn 的运行端口不是固定不变的,系统会根据实际情况进行动态分配。因此每当你需要使用 AddOn 的端口号时, 都应该查询当前的端口号是多少。如果是你在代码需要用到这个端口号,最佳的实践方式是从 AddOn 的配置文件,xxx_config.ini 中查询。

  1. 在左侧节点栏 JAKA AddOn 目录中找到 获取机器人信息 节点, 双击打开编辑页面,设置名称“电源状态”,并依次选择“机器人状态”——“电源状态”。

TIP

获取机器人信息 节点的使用说明可以在 node-red 的节点帮助文档中查看。

  1. 添加 http in 节点,监听 Get 请求。

小结

使用 http in 节点连接,并定义了 URL 后,我们可以通过 Robot_IP:AddOn_Port/Your_URL 对我们的服务进行请求。 但无法收到响应,所以接下来需要制作响应消息对象,然会返回给请求。

  1. 生成响应消息,并使用 http response 响应请求。

提示

  • 一开始我们不确定查询结果的类型和数据结构,可以使用 inject 节点手动触发查询,用 debug 节点观察返回值。
  • 响应只能是字符串(String)或对象(Object)类型,因此需要将布尔值(Boolean) 放到一个对象中再返回。

# 测试

这里将使用 API 接口测试工具,对我们刚才制作的服务进行测试。

恭喜

🎉现在我们已经可以通过自定义服务查询机器人的电源状态了!

上次修改: 2024/2/21 07:49:44