本扩展模块是基于 Odoo18 原生系统进行开发的,主要用于实现与上位声光报警设备的通讯功能。通过该模块,用户可以方便地向设备发送指令,控制设备的声音、灯光等操作。本手册将详细介绍该扩展模块的功能及使用方法。
模块提供了连接到指定上位声光报警设备的功能,用户需要输入设备的 IP 地址和端口号,模块将尝试与设备建立连接。
模块预设了一些指令,如打开声音和灯光、关闭声光、音量调为 1 级等,用户可以根据需要选择相应的指令发送给设备,并且可以接收到设备的响应信息。
在 Odoo 的看板视图中,用户可以清晰地看到指令的相关信息,包括指令名称、操作代码等,方便用户进行操作。
在 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
。
在 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}")
该函数接收一个连接对象和要发送的指令作为参数,首先将指令发送给设备,然后接收设备的响应信息并输出。如果发送或接收过程中出现异常,会输出异常信息。
在 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
函数发送指令,最后关闭连接。
本扩展模块为用户提供了方便的上位声光报警设备控制功能,通过简单的配置和操作,用户可以轻松地向设备发送指令,实现对设备的控制。在使用过程中,用户需要注意设备信息的配置和设备的状态,遇到问题时可根据本手册中的常见问题及解决方法进行排查和解决。