准备工作

确保电脑上有一下软件:

巴法云

创建设备

  1. 点击TCP创客云
  2. 在右侧来填写 设备名+002 如: monitor002

主题名字 后三位数字用来表示设备类型:
| 001 插座 | 002 灯泡 | 003 风扇 | 004 传感器 | 005 空调 | 006 开关 | 009 窗帘 |

创建设备

修改昵称

  1. 点击 设备卡片 左下角的昵称进行修改成 显示器,方便以后的使用以及小爱同学对设备的称呼。
    修改昵称

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**************************" # 此处填写32位巴法云私钥
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()
# 每30秒发送一次心跳
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**************************" # 此处填写32位巴法云私钥
device = "monitor002" # 此处填写设备名

运行代码进行测试

如果是VSCode、PyCharm的用户直接点击右上角的运行既可。

如果是使用txt保存的代码,则需要在py文件所在的目录地址栏中输入cmd并回车
地址栏输入cmd
打开CMD后输入python Monitor.py
如果配置一切正常则会显示收到消息: cmd=1&res=1

正常情况下CMD中显示的内容

此时打开 巴法云 设备卡片应该会显示 订阅者: 在线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

自启动文件夹

接入米家

小米手环小爱同学控制显示器