Odoo 12开发者指南第二十四章 IoT盒子

Odoo Alan 6年前 (2019-05-19) 10411次浏览 2个评论 扫描二维码

全书完整目录请见:Odoo 12开发者指南(Cookbook)第三版

在版本12中,Odoo加入了对物联网(IoT)的支持。Odoo使用名为IoT盒子的硬件,用于连接打印机、卡尺和脚踏开关等设备。本章中,你将学习如何设置和配置IoT盒子。这里,我们将讲解如下课题:

  • 为树莓派(Raspberry Pi)闪存IoT盒子镜像
  • 通过网络连接IoT盒子
  • 向Odoo添加IoT盒子
  • 加载驱动及列出已连接设备
  • 从设备接收输入
  • 通过SSH访问IoT盒子
  • 配置 POS(销售点)

ℹ️IoT盒子是一个基于树莓派的设备。本章中的各小节基于Raspberry Pi 3 Model B+,可通过https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/进行购买。IoT是企业版部分的功能,因此你需要有企业版来完成本章中的操作。注意本章的止的是安装和配置IoT盒子。开发硬件驱动不在本书的讨论范围。如果你想要深入地学习IoT盒子,请认真研究企业版中的iot模块。

技术准备

本章的技术准备包含在线Odoo平台。

本章中的所有代码可在如下GitHub仓库中进行下载:https://github.com/PacktPublishing/Odoo-12-Development-Cookbook-Third-Edition/tree/master/Chapter24/r5_take_device_inputs/my_library。

观看如下视频查看代码实时操作:‘

为树莓派(Raspberry Pi)闪存IoT盒子镜像

本节中,你将学习如何通过IoT例子的镜像闪存microSD卡。注意本节仅适用于那些购买了空的树莓派的人。如果你不是从Odoo官方购买的IoT盒子,请跳过这一节,因为它已经预载了IoT例子镜像。

准备工作

树莓派3 Model B+使用microSD卡,因此本节中我们使用了microSD卡。你需要将microSD卡连接到电脑上。

如何实现…

执行如下步骤来在SD卡上安装IoT盒子镜像:

  1. 将microSD卡插入你的电脑(如果电脑上没卡槽请使用适配器)。
  2. 从Odoo的nightly构建上下载IoT例子镜像。镜像地址为https://nightly.odoo.com/master/iotbox/。
  3. 下载并在电脑上安装Balena Etcher。下载地址为https://www.balena.io/etcher/。
  4. 打开Balena Etcher,选择IoT例子镜像,并选择闪存你的microSD卡。你可以参见如下截图:
    TODO
  5. 点击Flash!按钮并等待处理完成。
  6. 退出microSD卡放到树莓派中。

在完成了给定的步骤后,你的microSD卡中就载入了IoT例子镜像,并已准备好在IoT例子中使用了。

运行原理…

在本节中,我们在microSD卡中安装了IoT盒子镜像。在第2步中,我们从Odoo nightly下载了从IoT盒子镜像。在nightly页面上,我们可以找到针对IoT盒子的不同镜像。你需要从Odoo nightly选择最新的镜像。在写本书时,我们使用了最新镜像otboxv18_12.zip。IoT盒子镜像基于Raspbian Stretch Lite OS并且镜像加载时带有集成到Odoo实例中IoT盒子所需的库和模块。

在第3步中,我们下载了Balena Etcher 工具用于闪存microSD卡。在这一部分中,我们使用Balena Etcher来闪存microSD卡,但你也可以使用其它工具来闪存microSD卡。

在第4步中,我们通过IoT盒子镜像闪存了microSD卡。注意这个过程可能需要好几分钟。在完成这一过程后,microSD就可供使用了。

如果你想要验证闪存是否成功可执行如下步骤:

  1. 将microSD卡挂载到树莓派中。
  2. 通上电源然后通过HDMI线连接到外部显示器(在实例使用中,外部显示设置并非必须的,这里我们使用它来作验证)。
  3. 系统会启动并显示如下页面:
    Odoo 12开发者指南第二十四章 IoT盒子

扩展知识…

在之前的Odoo版本中,PosBox用于销售点(POS)应用。IoT盒子支持PosBox的所有功能,所以如果你使用Odoo社区版而又想要集成设备,可以使用IoT镜像来通过不同设备连接Odoo实例。参见配置 POS(销售点)一节来获取更多信息。

通过网络连接IoT盒子

IoT盒子通过网络与Odoo实例进行通讯。连接IoT盒子是很关键的一步,如果出现了错误,你会在使用Odoo连接IoT盒子时碰到报错。

准备工作

使用IoT盒子镜像将microSD卡挂载到树莓派中,然后通过电源连接连接树莓派。

如何实现…

树莓派3 Model B+支持两种类型的网络连接 – 通过以太网或WiFi。通过以太网连接IoT盒子非常简单,只需要将IoT盒子通过RJ45网线进行连接即可,这时就可以开始使用IoT盒子了。通过WiFi连接IoT盒子会复杂些,因为你可能没有连接的显示设备。执行如下步骤来通过WiFi连接IoT盒子:

  1. 为IoT盒子接电源通电(如果插上了网线,请拔掉网线并重启IoT盒子)
  2. 打开电脑并连接名为IoTBox的WiFi网络,如下图所示(无需密码):
    Odoo 12开发者指南第二十四章 IoT盒子
  3. 在连接了WiFi之后,你会看到弹出的IoT盒子主页,如下图所示(如未弹出,请在浏览器中输入盒子的 IP 地址)
    Odoo 12开发者指南第二十四章 IoT盒子
  4. 设置IoT盒子名称并保留服务令牌为空,然后点击Next。这会跳转一个能够看到WiFi网络列表的页面:
    Odoo 12开发者指南第二十四章 IoT盒子
  5.  选择你想要连接的WiFi网络并填入密码。然后,点击Connect按钮。如果你填写了正确的信息,会跳转到最终页面:
    Odoo 12开发者指南第二十四章 IoT盒子

在执行了这些步骤之后,你的IoT盒子就已成功连接网络并可以开始与Odoo实例进行集成了。

运行原理…

通过以太网来定连接Odoo实例与IoT盒子非常的简单,只需通过RJ45网线连接IoT盒子,即可开始使用IoT盒子了。但通过WiFi连接IoT盒子则不同,它的困难之处在于IoT盒子并没有显示器或图形界面。你没有输入WiFi网络密码的界面。因此,解决这一问题的方法是拔掉IoT盒子的网线(如已连接)并进行重启。在这种情况下,IoT盒子盒子会创建其自己的WiFi热点,名为 IoTBox,参见第2步。你需要连接名为 IoTBox的WiFi,所幸无需密码。一旦连接了名为 IoTBox的WiFi,就会弹出第3步中所示的页面。这里你可以将IoT盒子命名为Assembly-line IoT Box等名称。现在保留服务令牌为空格,我们会在向Odoo添加IoT盒子一节中进行相关学习。然后点击Next按钮。

点击Next按钮之后,会显示一个WiFi网络列表,如第4步所示。此处你可以将IoT盒子连接到你自己的WiFi网络。确保选择正确的网络。你需要将IoT盒子连接到与Odoo实例所运行电脑连接的相同WiFi上。IoT盒子与Odoo实例之间在局域网(LAN)中进行通讯。也就是说如果两者连接到不同的网络上,IoT盒子就无法正常运作。

在选择了正确的WiFi网络后,点击Connect。然后IoT盒子会关闭它自己的执行,重新连接上所配置的WiFi网络。这样IoT盒子就准备好供下一步使用了。

向Odoo添加IoT盒子

我们的IoT盒子已连接上本地网络,可供Odoo使用了。在本节中,我们将通过Odoo实例连接IoT盒子。

准备工作

确保IoT盒子是开启的并已连接到Odoo实例所运行电脑连接的相同的WiFi网络上。

ℹ️需要注意以下几点,否则IoT盒子无法与 Odoo进行连接。

  • 如果你在本地实例上测试IoT盒子,需要使用http://192.168.1.*:8069(本地 IP)来代替http://localhost:8069。如果使用localhost,IoT盒子会无法连接到Odoo实例。
  • 你需要通过 Odoo 实例所运行电脑使用的相同WiFi或以太网连接IoT盒子。否则IoT盒子会无法连接到Odoo实例。
  • 如果你的Odoo实例运行着多数据库。IoT盒子不会与Odoo实例进行自动连接。使用–db-filter参数来避免这一情况。

如何实现…

为建立IoT盒子与Odoo的连接,首先你需要在Odoo实例中安装iot模块。需要进入Apps菜单并搜索Internet of Things模块来进行安装。该模块如下图所示。安装好模块就可以进行后续操作了:

Odoo 12开发者指南第二十四章 IoT盒子

在安装了iot模块之后,你可以建立实例与IoT盒子之间的连接。有两种方式来建立连接:自动连接或手动连接。我们先来学习自动连接。

自动连接IoT盒子

执行如下步骤来将IoT盒子与Odoo实例进行自动的连接:

  1. 打开IoT菜单。
  2. 在控制面板中点击Connect按钮。这时会显示如下弹窗。点击SCAN按钮:
    Odoo 12开发者指南第二十四章 IoT盒子
  3. 它会自动扫描所有本地IP来查找 IoT盒子。如果Odoo找到了IoT盒子,就会在右侧进行显示,参见前述截图。
  4. 关闭弹窗。此时你会看到IoT盒子已添加到列表中了:
    Odoo 12开发者指南第二十四章 IoT盒子

手动连接IoT盒子

执行如下步骤来手动建立IoT盒子与Odoo实例之间的连接:

  1. 打开IoT菜单。
  2. 在控制面板中点击Connect按钮。此时会显示如下弹窗。复制令牌:
    Odoo 12开发者指南第二十四章 IoT盒子
  3. 以8069端口打开IoT盒子的IP。这会显示IoT盒子的首页。点击Name 输入框后的Configure按钮
    Odoo 12开发者指南第二十四章 IoT盒子
  4. 设置IoT盒子名称并粘贴服务令牌。然后点击Connect按钮。这会开启对IoT盒子的配置。等待这一过程的结束:
    Odoo 12开发者指南第二十四章 IoT盒子
  5. 查看Odoo实例中的IoT菜单。你会看到新的IoT盒子:
    Odoo 12开发者指南第二十四章 IoT盒子

运行原理…

在安装了Internet of Things模块之后,会显示一个新的IoT菜单,通过它可以建立IoT盒子与Odoo的连接。在本节中,我们首先使用了自动化的方法连接了IoT盒子。这一方法会扫描本地的IP范围来查找可能为IoT盒子的设备。如果查找到了IoT盒子,Odoo会将其添加为IoT盒子。注意如果你的网络中有多个IoT盒子的话,这一方法会添加所有设备。如果IoT盒子已被连接,Odoo不会重复连接该IoT盒子。

第二种方法是手动的方式。这一方法对于网络中存在多个IoT盒子且仅希望添加部分设备时会非常有用,你需要从IoT盒子的弹窗中获取令牌。然后需要访问IoT盒子的 IP并将令牌添加到配置中。这会将IoT盒子添加到你的Odoo实例中。

如果你想要在WiFi配置的过程中将IoT盒子添加到Odoo实例中,也完全可能。在通过网络连接IoT盒子一节中,我将保留了服务令牌字段为空。仅需在该步中添加服务令牌即可:

Odoo 12开发者指南第二十四章 IoT盒子

ℹ️在使用IoT盒子时避免使用DHCP网络。这是因为IoT盒子的网络配置是基于IP地址进行添加的。如果你使用DHCP网络,那么IP地址就是动态分配的。那么就有可能会因IoT盒子被分配新的 IP 地址而无法响应。要避免这一问题,你可以将IoT盒子的MAC地址与固定的 IP 地址建立一个映射。

扩展知识…

一旦通过Odoo实例连接了某个IoT盒子,就不可以将其连接到其它Odoo实例上了。如果你尝试扫描已配置的IoT盒子,会显示一个警告图标:

Odoo 12开发者指南第二十四章 IoT盒子

如果希望将已有IoT盒子与Odoo实例进行连接,你会需要清楚该配置。你可以在IoT盒子的Odoo服务配置页通过 Clear 按钮清除这一IoT盒子配置:

Odoo 12开发者指南第二十四章 IoT盒子

加载驱动及列出已连接设备

IoT盒子需要加载设备驱动来连接硬件设备。本节中,我们将来学习如何加载驱动并获取所连接设备的列表。

准备工作

确保IoT盒子已开启并已将其连接到Odoo实例运行电脑所连接的相同WiFi网络。

如何实现…

执行如下步骤来将设备驱动载入IoT盒子:

  1. 打开IoT盒子主页并点击底部的drivers list按钮:
    Odoo 12开发者指南第二十四章 IoT盒子
  2. drivers list按钮会将你重定向到Drivers list页面,这里会有一个Load drivers 按钮。点击该按钮来载入驱动:
    Odoo 12开发者指南第二十四章 IoT盒子
  3. 返回IoT盒子首页。这里你会看到一个已连接设备的列表:
    Odoo 12开发者指南第二十四章 IoT盒子

在执行了这些步骤之后,该IoT盒子对你所指定的设备就准备就绪了,你可以开始在应用中使用这些设备了。

运行原理…

IoT盒子并不是仅局限于企业版。也可以在社区版中作为PoSBox来使用。设备的集成是企业版的一部分,因此IoT盒子并不带有设备驱动器,需要手动进行加载 。也可以从IoT盒子的首页加载驱动。可以通过底部的Load drivers按钮进行实现。注意这仅在通过企业版的Odoo实例连接IoT盒子时才能进行实现。在加载完驱动后,你就可以在IoT盒子的首页里看到一个设备列表。也可以通过IoT > Devices菜单查看Odoo实例中所连接的设备。在这个菜单中,你会看到每个IoT盒子所连接的一组设备:

Odoo 12开发者指南第二十四章 IoT盒子

现在,IoT盒子仅支持有限制的硬件设备,如摄像头、脚踏开关、打印机和卡尺。Odoo所推荐的设备列表请见https://www.odoo.com/page/iot-hardware。如果尚未支持你的设备,可以付费来进行驱动开发。

从设备接收输入

IoT盒子仅支持有限的设备。现在这些硬件设备与制造应用相集成。但如果需要,可以在你的模块中集成所支持的设备。本节中,我们将通过IoT盒子来从摄像头抓取图片。

准备工作

我们将使用第二十三章 在Odoo中管理email在聊天器中记录用户修改一节的my_library模块。本节中,我们将新增一个在借阅者归还图书时捕获和存储图像的字段。确保打开了IoT盒子并且通过它连接了可支持的摄像头设备。

如何实现…

执行如下步骤来通过IoT盒子从摄像头捕获图片:

  1. 在声明文件中添加依赖:
  2. 在library.book.rent模型中新增字段:
  3. 在library.book.rent模型的表单视图中添加这些字段:

更新my_library模块来应用这些修改。在更新后,就会出现捕获图片的按钮:

Odoo 12开发者指南第二十四章 IoT盒子

运行原理…

在第1步中,我们在声明文件中添加了对quality_mrp_iot模块的依赖。quality_mrp_iot模块属于企业版,包含通过IoT盒子来使用摄像头请求图像的组伯。这会安装mrp模块,但为进行简化,我们将使用quality_mrp_iot来作为依赖。如果你不想要使用这个依赖,可以创建自己的字段组件。参见第十六章 网页客户端开发来学习有关组件的更多知识。

第2步中,我们添加了请求通过摄像头捕获图像的字段。捕获图像需要两个东西:设备标识符和IoT盒子的IP地址。我们希望用户能够选取摄像头,因此添加了一个device_id字段。用户会选择捕获图片的摄像头,并且基于所选择的摄像头设备,我们通过关联字段提取出IP和设备标识符信息。基于这个字段,在有多个IoT盒子时Odoo就知道使用哪个设备来捕获图像。我们还添加了一个二进制字段picture来保存图像。

第3步中,我们在表单视图中添加了字段。注意我们对picture字段使用了iot_picture组件。我们以隐藏字段添加了ip和identifier字段,因为不希望对用户显示这些字段;而在picture字段的选项又需要使用它们。该组件会在表单视图中添加按钮,点击按钮时,Odoo会对IoT盒子进行请求来捕获图像。IoT盒子会以响应数据返回图像。这个响应会在picture二进制字段中进行保存。

扩展知识…

Odoo IoT盒子支持蓝牙卡尺。如果想要在模块中进行测试,可以使用iot_take_measure_button组件来在Odoo中进行获取 。这时需要使用<widget>标签,如下面的代码所示。注意类似iot_picture,这里也需要在表单视图中以隐藏字段添加ip和identifier字段。

通过SSH访问IoT盒子

IoT运行于Raspbian OS之上,可以通过SSH来访问IoT盒子。本节中,我们将学习如何通过SSH来连接IoT盒子。

准备工作

确保已打开IoT盒子,并且IoT盒子通过WiFi与Odoo实例所在电脑相同的网络进行连接。

如何实现…

为通过SSH来连接IoT盒子,你将需要IoT盒子的IP地址。可以在它的表单视图中查看到IP地址。作为示例,本节中将使用192.168.43.6来作为IoT盒子的IP地地。执行如下步骤来通过SSH访问IoT盒子:

  1. 打开Terminal并执行如下命令:
  2. 在终端中会询问命令,输入raspberry来作为密码。
  3. 如果你填写了正确的密码,即可通过shell进行访问。执行如下命令来查看目录:

运行原理…

我们使用了一个密码为raspberry的用户pi来通过SSH访问IoT盒子。SSH连接可在需要对IoT盒子进行问题调试时使用。SSH无需进行解释,但让我们来看看IoT盒子中Odoo的运行方式。

如下信息可能会有助于调试问题:

  • IoT盒子内部运行一些Odoo模块。这些模块的名称通常以hw_开头,在社区版中也有。可以在/home/pi/odoo/addon目录下查找到这些模块。
  • 如果想要查看Odoo服务蝴蝶刀 ,可以通过/var/log/odoo/odoo-server.log文件进行访问。
  • Odoo通过名为odoo的服务运行,可以使用如下命令来启动、停止或重启该服务:
  • 大多数客户会通过直接断电来关闭IoT盒子。在这种情况下IoT盒子的操作系统并没有正常关闭。为避免系统的崩溃,IoT盒子的文件系统是只读的。

扩展知识…

注意IoT盒子仅与本地机器进行了连接。因此,无法通过互联网直接远程访问它的shell。如果希望远程访问IoT盒子,可以在IoT盒子的远程调试页面中粘贴ngrok认证Token,参见下图。这会在IoT盒子中启用TCP通道,这样就可以在任何地方通过SSH来连接IoT盒子了。可通过https://ngrok.com/学习更多有关ngrok的知识。

Odoo 12开发者指南第二十四章 IoT盒子

配置 POS(销售点)

Odoo 12中,IoT盒子可用于MRP和Point of Sale 应用。本节中,我们将学习如何对销售点应用配置IoT盒子。

准备工作

确保IoT盒子已打开并且通过与Odoo实例所处的电脑相同的WiFi网络进行了连接。同时如未安装 POS 应用请进行安装。

如何实现…

执行如下步骤来对POS 应用配置IoT盒子:

  1. 打开POS 应用,并通过POS会话下拉打开Settings:
    Odoo 12开发者指南第二十四章 IoT盒子
  2. 点击Settings按钮。会被重定向到Settings页面。搜索IotBox / Hardware Proxy(硬件代理) 怎并勾选PosBox。这会启用更多选项:
    Odoo 12开发者指南第二十四章 IoT盒子
  3.  选择想要在 POS 会话中使用的IoT盒子。如果需要使用硬件、条码扫描器,请进行对应的勾选。
  4. 通过在控制面板中点击Save按钮来保存修改。

在配置之后,你就能够在POS应用中使用IoT盒子了。

运行原理…

在Odoo之前的版本中,PosBox用于将 POS 应用与硬件进行集成。在版本12中,引入了IoT盒子,并且它可以类似PosBox那样用于 POS 应用。为了在POS 应用中使用IoT盒子,需要通过Odoo实例连接IoT盒子。如果不知道如何连接IoT盒子,请参见向Odoo添加IoT盒子一节。一旦通过Odoo连接了IoT盒子,就可以像第2步那样在POS 应用中选择IoT盒子。

这里可以选择在POS会话中使用的硬件。在保存修改之后,如果打开了POS会话,就可以在POS中使用启用了的硬件。如果通过设置启用了对应的硬件,但其并未连接IoT盒子,就会在顶栏中看到如下的警告:

Odoo 12开发者指南第二十四章 IoT盒子

扩展知识…

POS 应用属于社区版。如果你使用的是社区版,在 POS 设置中看到的不是IoT盒子选区而是IP地址字段:

Odoo 12开发者指南第二十四章 IoT盒子

如果想要在社区版集成硬件,需要在该字段中使用IoT盒子的IP地址。

喜欢 (6)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. 你好,我的树莓烧录后,odoo 找不到
    g69822019-10-07 21:21 回复
  2. 不明觉厉
    etclij2019-09-03 23:39 回复