准备工作
确保电脑上有一下软件:
巴法云
创建设备
- 点击TCP创客云
- 在右侧来填写 设备名+002 如:
monitor002
主题名字 后三位数字用来表示设备类型:
| 001 插座 | 002 灯泡 | 003 风扇 | 004 传感器 | 005 空调 | 006 开关 | 009 窗帘 |
修改昵称
- 点击 设备卡片 左下角的昵称进行修改成 显示器,方便以后的使用以及小爱同学对设备的称呼。
Twinkle Tray
安装部分
下载地址在 准备工作 有写。
下载完成后安装时候一直点下一步既可,默认位置安装既可以,没有特别需要注意的地方。
设置界面
安装成功后打开Twinkle Tray的设置界面将 开机时启动 与 启动时调整亮度 都设置为打开状态。
热知识:Twinkle Tray 的任务栏图标可以通过鼠标滚轮来实现屏幕亮度的变化。
代码部分
创建文件
首先创建一个文件夹,在里面创建一个文件命名为Monitor.py
编辑代码
将下面代码Copy到Monitor.py
中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| import os import socket import subprocess import threading import time
uid = "52c849**************************" device = "monitor002"
def connect_tcp(): global tcp_socket tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_ip = 'bemfa.com' server_port = 8344 try: tcp_socket.connect((server_ip, server_port)) subscribe_command = f'cmd=1&uid={uid}&topic={device}\r\n' tcp_socket.send(subscribe_command.encode("utf-8")) except socket.error as e: print(f"连接失败: {e}") time.sleep(2) connect_tcp()
def send_heartbeat(): try: heartbeat = 'ping\r\n' tcp_socket.send(heartbeat.encode("utf-8")) except socket.error as e: print(f"心跳发送失败: {e}") time.sleep(2) connect_tcp() threading.Timer(30, send_heartbeat).start()
def adjust_monitor_brightness(cmd): username = os.environ['USERNAME'] if "on" in cmd and cmd != "on": brightness = cmd.split("#")[-1] command = ( rf'"C:\Users\{username}\AppData\Local\Programs\twinkle-tray\Twinkle Tray.exe"' r' --MonitorNum=1 --Set=' + brightness ) elif "off" in cmd: command = ( rf'"C:\Users\{username}\AppData\Local\Programs\twinkle-tray\Twinkle Tray.exe"' r' --MonitorNum=1 --VCP=0xD6:5' ) else: return
try: with subprocess.Popen(command, shell=True, creationflags=subprocess.CREATE_NO_WINDOW) as process: process.wait() except subprocess.SubprocessError as e: print(f"命令执行失败: {e}")
connect_tcp() send_heartbeat()
while True: try: received_data = tcp_socket.recv(1024) if received_data: message = received_data.decode('utf-8') for segment in message.split("&"): if "msg" in segment: status = segment[4:] adjust_monitor_brightness(status) break
if "cmd=0" not in message: print('收到消息:', message) else: print("连接错误,重新连接") connect_tcp() except socket.error as e: print(f"接收数据时发生错误: {e}") time.sleep(3)
|
更改配置
将第7行的 uid
更改为自己巴法云的私钥
将第8行的 device
更改为在巴法云的注册的设备
1 2 3 4 5 6 7 8
| import os import socket import subprocess import threading import time
uid = "52c849**************************" device = "monitor002"
|
运行代码进行测试
如果是VSCode、PyCharm的用户直接点击右上角的运行既可。
如果是使用txt保存的代码,则需要在py文件所在的目录地址栏中输入cmd并回车
打开CMD后输入python Monitor.py
如果配置一切正常则会显示收到消息: cmd=1&res=1
此时打开 巴法云 设备卡片应该会显示 订阅者: 在线1
若显示 python 不是内部或外部命令,也不是可运行的程序或批处理文件。
在 确定安装Python 的情况下,则需要去配置一下环境变量,将 Python路径 的添加进环境变量。
什么? 你问我没有安装Python怎么办? .......去开头自己看一下
在 结尾 显示 [Errno 2] No such file or directory
需要注意是不是文件名拼写错误
测试亮度控制
在巴法云的设备卡片的消息处输入on#20后,显示器应会接着降低亮度。
代码打包
用上面同样的方法打开cmd
在cmd内输入pip install pyinstaller
安装完成后输入pyinstaller -F -w .\Monitor.py
运行成功后应该会出现|build|dist|
两个文件夹 和 Monitor.spec
打包完的 Monitor.exe 程序就在dist
设置开机自启动
将dist文件夹中的 Monitor.exe 程序放到下面的路径里就可以实现开机自启了
注意将用户名更改成自己的
C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
接入米家
[{"url":"https://s1.imagehub.cc/images/2024/09/11/70701b8b924f293a0fba5c871e081edd.png","alt":"Img"},{"url":"https://s1.imagehub.cc/images/2024/09/11/5742be1dd39e3fad874b20711e07fc52.png","alt":"Img"},{"url":"https://s1.imagehub.cc/images/2024/09/11/61658b961ef5fa677744a30f683e8f8a.png","alt":"Img"},{"url":"https://s1.imagehub.cc/images/2024/09/11/13a12de5fdb5d4525888539aa5f0a110.png","alt":"Img"},{"url":"https://s1.imagehub.cc/images/2024/09/11/21b82945bc675c01c432b4f7b94a493c.png","alt":"Img"}]