我对 Python 非常陌生,经过几周的学习和实践编程,我已经开始了我的家庭自动化项目。
我的目标是与在我的名为 C-Gate 的 Windows 机器上运行的基于 Java 的服务进行交互。然后,它会解释并与我的 Clipsal C-Bus 自动化系统发送和接收的更复杂的命令进行通信。
到目前为止,我已经设法使用 telnelib 和写/读命令创建了与 C-Gate 的连接。
一段时间以来,我一直试图弄清楚的是如何使用 C-Gate 给出的响应并提取特定值(例如光的级别)并将其转换为我可以使用的变量。
从那里我应该能够扩展我的理解并开始构建一个界面来使用/监控这些值。
到目前为止,这是我的代码:
import telnetlib
HOST = "localhost"
PORT = "20023"
def read_until(cue, timeout=2):
print tn.read_until(cue, timeout)
def tn_write(text):
tn.write(text)
tn = telnetlib.Telnet(HOST, PORT)
tn_write('project load MYHOUSE\r\n')
read_until('200 OK.')
tn_write('project use MYHOUSE\r\n')
read_until('200 OK.')
tn_write('net open 254\r\n')
read_until('200 OK: //MYHOUSE/254')
tn_write('project start\r\n')
read_until('200 OK.')
tn_write('get 254/56/1 level\r\n')
tn_write('get 254/56/2 level\r\n')
tn_write('get 254/56/3 level\r\n')
tn_write('get 254/56/4 level\r\n')
tn_write('get 254/56/5 level\r\n')
tn_write('get 254/56/6 level\r\n')
tn_write('get 254/56/7 level\r\n')
tn_write('get 254/56/8 level\r\n')
read_until('300 //MYHOUSE/254/56/1: level=0\r\n')
然后打印以下响应:
201 Service ready: Clipsal C-Gate Version: v2.9.5 (build 2460) #cmd-syntax=1.0
200 OK.
200 OK.
200 OK: //MYHOUSE/254
200 OK.
300 //MYHOUSE/254/56/1: level=100
300 //MYHOUSE/254/56/2: level=0
300 //MYHOUSE/254/56/3: level=0
300 //MYHOUSE/254/56/4: level=0
300 //MYHOUSE/254/56/5: level=0
300 //MYHOUSE/254/56/6: level=0
300 //MYHOUSE/254/56/7: level=0
300 //MYHOUSE/254/56/8: level=0