当前位置: 首页 > article >正文

DuodooBMS源码解读之 odoo_phoenix_alarm模块

Odoo18 扩展模块声光报警器用户使用手册

一、模块概述

本扩展模块是基于 Odoo18 原生系统进行开发的,主要用于实现与上位声光报警设备的通讯功能。通过该模块,用户可以方便地向设备发送指令,控制设备的声音、灯光等操作。本手册将详细介绍该扩展模块的功能及使用方法。

二、模块功能介绍

(一)设备连接功能

模块提供了连接到指定上位声光报警设备的功能,用户需要输入设备的 IP 地址和端口号,模块将尝试与设备建立连接。

(二)指令发送功能

模块预设了一些指令,如打开声音和灯光、关闭声光、音量调为 1 级等,用户可以根据需要选择相应的指令发送给设备,并且可以接收到设备的响应信息。

(三)界面显示功能

在 Odoo 的看板视图中,用户可以清晰地看到指令的相关信息,包括指令名称、操作代码等,方便用户进行操作。

三、操作步骤

(一)设备信息配置

  1. 进入设备信息配置页面
    • 登录 Odoo18 系统,进入相关模块的主界面。
    • 在左侧导航栏中找到“Phoenix Audible Address”(上位声光报警设备地址)模块。
  2. 配置设备信息
    • 在设备信息列表中,找到“指定声光设备地址”对应的记录,如果没有则点击“创建”按钮新建一条记录。
    • 在记录的编辑页面中,填写或确认以下信息:
      • 设备名称:默认为“指定声光设备地址”,可根据实际情况修改。
      • 设备地址(IP):输入上位声光报警设备的 IP 地址,默认为“192.168.0.100”。
      • 接口端口:输入设备的端口号,默认为“8101”。
      • 启用:勾选该选项表示启用该设备记录。
      • 公司:选择该设备所属的公司。
    • 点击“保存”按钮保存配置信息。

(二)查看指令信息

  1. 进入指令看板视图
    • 在左侧导航栏中找到“485 通讯协议指令集”对应的看板视图。
  2. 查看指令信息
    • 在看板视图中,会显示一系列的指令卡片,每个卡片包含指令的相关信息,如指令名称、操作代码等。
    • 将鼠标悬停在卡片上,可以查看更详细的信息。

(三)发送指令

  1. 选择要发送的指令
    • 在指令看板视图中,找到需要发送的指令卡片。
  2. 点击“下发指令”按钮
    • 在指令卡片上,点击“下发指令”按钮,该按钮图标为“fa-tags”。
  3. 指令发送过程及结果
    • 点击按钮后,系统会自动获取之前配置的设备信息,尝试与设备建立连接。
    • 如果连接成功,系统将发送相应的指令给设备,并在控制台输出“已发送指令: [指令代码]”的信息。
    • 设备接收到指令后会返回响应信息,系统会接收并在控制台输出“接收到设备的响应:[响应代码]”的信息。
    • 如果在发送指令过程中出现异常,系统会在控制台输出“发送指令时发生异常: [异常信息]”的信息。
    • 无论指令发送是否成功,最终系统都会关闭与设备的连接,并在控制台输出“连接已关闭”的信息。

(四)代码实现原理(供开发者参考)

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 函数发送指令,最后关闭连接。

四、注意事项

  1. 确保设备的 IP 地址和端口号配置正确,否则无法与设备建立连接。
  2. 在发送指令时,要确保设备处于正常工作状态,否则可能无法接收到设备的响应信息。
  3. 如果在使用过程中出现异常信息,可根据控制台输出的异常信息进行排查和解决。

五、常见问题及解决方法

(一)无法连接到设备

  • 问题描述:点击“下发指令”按钮后,控制台输出“连接设备时发生异常”的信息。
  • 可能原因
    • 设备的 IP 地址或端口号配置错误。
    • 设备未开启或网络不通。
  • 解决方法
    • 检查设备的 IP 地址和端口号是否正确,可通过设备的管理界面或相关文档获取正确信息。
    • 检查设备是否开启,网络是否正常。

(二)发送指令无响应

  • 问题描述:控制台输出“已发送指令”信息,但没有接收到设备的响应信息。
  • 可能原因
    • 设备未正确配置或出现故障。
    • 指令格式错误。
  • 解决方法
    • 检查设备的配置是否正确,可参考设备的说明书进行配置。
    • 检查指令格式是否正确,确保发送的指令符合设备的要求。

六、总结

本扩展模块为用户提供了方便的上位声光报警设备控制功能,通过简单的配置和操作,用户可以轻松地向设备发送指令,实现对设备的控制。在使用过程中,用户需要注意设备信息的配置和设备的状态,遇到问题时可根据本手册中的常见问题及解决方法进行排查和解决。


http://www.kler.cn/a/556365.html

相关文章:

  • Redis数据结构-String字符串
  • npm/pnpm软链接
  • JUC并发—8.并发安全集合二
  • 安全运维,等保测试常见解决问题。
  • HarmonyOS学习第2天: 解锁语言与框架的无限可能
  • 抓包工具 wireshark
  • Python项目源码34:网页内容提取工具1.0(Tkinter+requests+html2text)
  • Java集合框架之List接口详解
  • 新数据结构(12)——代理
  • 使用 deepseek实现 go语言,读取文本文件的功能,要求支持 ascii,utf-8 等多种格式自适应
  • 客服系统自动化方案:揭秘全渠道智能服务解决方案 vx: haotsh
  • deepseek linux本地化部署
  • ROM(固态硬盘)与RAM(内存,缓存)
  • Fluent M3U8 v0.5 一款开源免费的m3u8文件下载工具,由B站大佬 @呆唯男友 开发
  • 【NLP】注意力机制
  • buu-[OGeek2019]babyrop-好久不见41
  • Mac arm架构使用 Yarn 全局安装 Vue CLI
  • Brave132编译指南 Linux篇 - Brave简介(一)
  • SkyWalking快速入门
  • ubuntu追加path环境变量