DuodooBMS源码解读之 odoo_phoenix_alarm模块
Odoo18 扩展模块声光报警器用户使用手册
一、模块概述
本扩展模块是基于 Odoo18 原生系统进行开发的,主要用于实现与上位声光报警设备的通讯功能。通过该模块,用户可以方便地向设备发送指令,控制设备的声音、灯光等操作。本手册将详细介绍该扩展模块的功能及使用方法。
二、模块功能介绍
(一)设备连接功能
模块提供了连接到指定上位声光报警设备的功能,用户需要输入设备的 IP 地址和端口号,模块将尝试与设备建立连接。
(二)指令发送功能
模块预设了一些指令,如打开声音和灯光、关闭声光、音量调为 1 级等,用户可以根据需要选择相应的指令发送给设备,并且可以接收到设备的响应信息。
(三)界面显示功能
在 Odoo 的看板视图中,用户可以清晰地看到指令的相关信息,包括指令名称、操作代码等,方便用户进行操作。
三、操作步骤
(一)设备信息配置
- 进入设备信息配置页面
- 登录 Odoo18 系统,进入相关模块的主界面。
- 在左侧导航栏中找到“Phoenix Audible Address”(上位声光报警设备地址)模块。
- 配置设备信息
- 在设备信息列表中,找到“指定声光设备地址”对应的记录,如果没有则点击“创建”按钮新建一条记录。
- 在记录的编辑页面中,填写或确认以下信息:
- 设备名称:默认为“指定声光设备地址”,可根据实际情况修改。
- 设备地址(IP):输入上位声光报警设备的 IP 地址,默认为“192.168.0.100”。
- 接口端口:输入设备的端口号,默认为“8101”。
- 启用:勾选该选项表示启用该设备记录。
- 公司:选择该设备所属的公司。
- 点击“保存”按钮保存配置信息。
(二)查看指令信息
- 进入指令看板视图
- 在左侧导航栏中找到“485 通讯协议指令集”对应的看板视图。
- 查看指令信息
- 在看板视图中,会显示一系列的指令卡片,每个卡片包含指令的相关信息,如指令名称、操作代码等。
- 将鼠标悬停在卡片上,可以查看更详细的信息。
(三)发送指令
- 选择要发送的指令
- 在指令看板视图中,找到需要发送的指令卡片。
- 点击“下发指令”按钮
- 在指令卡片上,点击“下发指令”按钮,该按钮图标为“fa-tags”。
- 指令发送过程及结果
- 点击按钮后,系统会自动获取之前配置的设备信息,尝试与设备建立连接。
- 如果连接成功,系统将发送相应的指令给设备,并在控制台输出“已发送指令: [指令代码]”的信息。
- 设备接收到指令后会返回响应信息,系统会接收并在控制台输出“接收到设备的响应:[响应代码]”的信息。
- 如果在发送指令过程中出现异常,系统会在控制台输出“发送指令时发生异常: [异常信息]”的信息。
- 无论指令发送是否成功,最终系统都会关闭与设备的连接,并在控制台输出“连接已关闭”的信息。
(四)代码实现原理(供开发者参考)
1. 连接设备
在 connect_to_device
函数中实现了与设备的连接功能,代码如下:
def connect_to_device(ip, port):
"""
连接到设备
:param ip: 设备的 IP 地址
:param port: 设备的端口号
:return: 连接对象或 None
"""
try:
# 创建 Socket 对象
socket_server = socket.socket()
# 绑定 IP 地址和端口
socket_server.bind((ip, port))
# 监听端口
socket_server.listen(1)
print(f"正在监听 {ip}:{port}...")
# 等待客户端连接
conn, address = socket_server.accept()
print(f"接收到了客户端的连接,客户端的信息是:{address}")
return conn, socket_server
except Exception as e:
print(f"连接设备时发生异常: {e}")
return None, None
该函数首先创建一个 Socket 对象,然后绑定指定的 IP 地址和端口号,开始监听该端口,等待客户端连接。如果连接成功,返回连接对象和 Socket 服务器对象;如果出现异常,返回 None
。
2. 发送指令
在 send_command_to_device
函数中实现了向设备发送指令的功能,代码如下:
def send_command_to_device(conn, command):
"""
向设备发送指令
:param conn: 连接对象
:param command: 要发送的指令
"""
try:
# 发送指令
conn.send(command)
print(f"已发送指令: {command.hex()}")
# 接收设备的响应
response = conn.recv(1024)
if response:
print(f"接收到设备的响应:{response.hex()}")
except Exception as e:
print(f"发送指令时发生异常: {e}")
该函数接收一个连接对象和要发送的指令作为参数,首先将指令发送给设备,然后接收设备的响应信息并输出。如果发送或接收过程中出现异常,会输出异常信息。
3. 发送指令的主函数
在 send_value_to_socket
函数中实现了获取设备信息、连接设备、发送指令的完整流程,代码如下:
def send_value_to_socket(self):
# 设备的 IP 地址和端口号
device_obj = self.env['phoenix.audible.address']
device_record = device_obj.search([('name', '=', '指定声光设备地址')])
ip = device_record.ip
port = int(device_record.port)
# 连接到设备
conn, socket_server = self.connect_to_device(ip, port)
if conn and socket_server:
try:
# 发送指令
self.send_command_to_device(conn, bytes.fromhex(self.name))
except KeyboardInterrupt:
print("用户手动中断程序")
finally:
# 关闭连接
conn.close()
socket_server.close()
print("连接已关闭")
该函数首先从数据库中获取设备的 IP 地址和端口号,然后调用 connect_to_device
函数连接设备,如果连接成功,调用 send_command_to_device
函数发送指令,最后关闭连接。
四、注意事项
- 确保设备的 IP 地址和端口号配置正确,否则无法与设备建立连接。
- 在发送指令时,要确保设备处于正常工作状态,否则可能无法接收到设备的响应信息。
- 如果在使用过程中出现异常信息,可根据控制台输出的异常信息进行排查和解决。
五、常见问题及解决方法
(一)无法连接到设备
- 问题描述:点击“下发指令”按钮后,控制台输出“连接设备时发生异常”的信息。
- 可能原因:
- 设备的 IP 地址或端口号配置错误。
- 设备未开启或网络不通。
- 解决方法:
- 检查设备的 IP 地址和端口号是否正确,可通过设备的管理界面或相关文档获取正确信息。
- 检查设备是否开启,网络是否正常。
(二)发送指令无响应
- 问题描述:控制台输出“已发送指令”信息,但没有接收到设备的响应信息。
- 可能原因:
- 设备未正确配置或出现故障。
- 指令格式错误。
- 解决方法:
- 检查设备的配置是否正确,可参考设备的说明书进行配置。
- 检查指令格式是否正确,确保发送的指令符合设备的要求。
六、总结
本扩展模块为用户提供了方便的上位声光报警设备控制功能,通过简单的配置和操作,用户可以轻松地向设备发送指令,实现对设备的控制。在使用过程中,用户需要注意设备信息的配置和设备的状态,遇到问题时可根据本手册中的常见问题及解决方法进行排查和解决。