PySerial Benq 投影仪通讯

问题描述 投票:0回答:1

我正在尝试用 Python3 编写小脚本来启动并设置我的 Benq 投影仪中的源,该源将从通过 USB 转串行连接器连接到投影仪的 Home Assistant 服务器启动。

我已经编写了该脚本:

import serial
ser = serial.Serial('/dev/ttyUSB0', baudrate=115200, bytesize=8, timeout=none, parity=PARITY_NONE, stopbits=STOPBITS_ONE, xonxoff=False, rtscts=False)

for i in range(1,20):
    ser.write("*pow=?#\r\n")
    sleep (1)
    ans = ser.readline()
    if ans == "ON"
    
    for j in range(1,3):
        ser.write("*sour=?#\r\n")
        sleep (1)
        ans = ser.readline()
        if ans == HDMI2:
            exit
        else
            ser.write("*sour=HDMI2#\r\n")
            sleep (1)
    
    else
        sleep (3)

ser.flush()
ser.close()

基本上我想要实现的是脚本通过串行命令 *pow=?# 询问投影仪投影仪已打开。投影仪可以返回关闭或打开。对于第一个答案脚本,应等待 3 秒并再次询问。从投影仪读取脚本后,第二个查询应开始询问当前源(命令 *sour=?# )。答案可以是 HDMI、HDMI2 或 HDMI3。因为投影仪会记住最后选择的源,所以我不想向垃圾邮件端口发送垃圾邮件,并且如果已经选择了正确的源,则不会触摸源。

或者,最后一部分可以稍微修改一下,整个代码可以是这样的:

import serial
ser = serial.Serial('/dev/ttyUSB0', baudrate=115200, bytesize=8, timeout=none, parity=PARITY_NONE, stopbits=STOPBITS_ONE, xonxoff=False, rtscts=False)

for i in range(1,20):
    ser.write("*pow=?#\r\n")
    sleep (1)
    ans = ser.readline()
    if ans == "ON"
       ser.write("*sour=HDMI2#\r\n")
        sleep (1)
        ans = ser.readline()
        if ans == HDMI2:
            exit
        else
            ser.write("*sour=HDMI2#\r\n")
            sleep (1)
    
    else
        sleep (3)

ser.flush()
ser.close()

不确定我的理解是否正确。有人可以查看我的代码来检查它是否正确吗?

pyserial
1个回答
0
投票

或者您使用 HACS 中提供的我的 BenQ 投影仪集成: https://github.com/rrooggiierr/homeassistant-benqprojector

© www.soinside.com 2019 - 2024. All rights reserved.