开机自启脚本 + 手机网页控制端

一、开机自启脚本(启动控电程序.bat)

1. 新建文本文件,重命名为 启动控电程序.bat(后缀改成 .bat)

2. 粘贴以下内容(记得修改「你的用户名」):

@echo off
chcp 65001 >nul 2>&1
echo ======================================
echo      棋牌室分房控电程序 - 启动脚本
echo ======================================
echo 正在切换到程序目录...
cd /d C:\Users\你的用户名\Desktop\棋牌室控电

echo 正在启动控电程序...
python relay_control.py

echo 程序已退出,按任意键关闭窗口...
pause >nul

3.使用方法

• 把这个 .bat 文件放到 棋牌室控电 文件夹里

• 双击即可启动程序(不用手动输命令)

• 要设置开机自启:按 Win+R → 输入 shell:startup → 把 .bat 复制到启动文件夹

二、手机网页控制端(room_control.html)

1.新建文本文件,重命名为 room_control.html

2. 粘贴以下内容(已适配你的 EMQX 配置):

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>棋牌室分房控电系统</title>
    <style>
        * { margin: 0; padding: 0; box-sizing: border-box; }
        body { 
            font-family: "微软雅黑", sans-serif; 
            background: #f5f5f5; 
            padding: 20px; 
        }
        .header { 
            text-align: center; 
            margin-bottom: 30px; 
            color: #333;
        }
        .room-list { 
            display: grid; 
            grid-template-columns: repeat(2, 1fr); 
            gap: 15px; 
        }
        .room-card { 
            background: white; 
            border-radius: 10px; 
            padding: 20px; 
            box-shadow: 0 2px 8px rgba(0,0,0,0.1); 
            text-align: center; 
        }
        .room-name { 
            font-size: 20px; 
            font-weight: bold; 
            margin-bottom: 15px; 
            color: #2c3e50;
        }
        .btn-group { 
            display: flex; 
            gap: 10px; 
        }
        button { 
            flex: 1; 
            padding: 12px 0; 
            border: none; 
            border-radius: 6px; 
            font-size: 18px; 
            color: white; 
            cursor: pointer; 
            transition: all 0.2s;
        }
        .btn-on { background: #27ae60; }
        .btn-on:hover { background: #219653; }
        .btn-off { background: #e74c3c; }
        .btn-off:hover { background: #c0392b; }
        .status { 
            margin-top: 10px; 
            font-size: 14px; 
            color: #666; 
        }
        .connect-status {
            text-align: center;
            margin-bottom: 20px;
            font-size: 16px;
            padding: 10px;
            border-radius: 6px;
        }
        .connected { background: #d5f5e3; color: #27ae60; }
        .disconnected { background: #fadbd8; color: #e74c3c; }
    </style>
</head>
<body>
    <div class="header">
        <h1>棋牌室分房控电系统</h1>
    </div>
    
    <div id="connectStatus" class="connect-status disconnected">
        未连接到服务器
    </div>

    <div class="room-list">
        <!-- 1号房 -->
        <div class="room-card">
            <div class="room-name">九局(1号房)</div>
            <div class="btn-group">
                <button class="btn-on" onclick="controlRoom('r1', '九局', 0, 'on')">打开电源</button>
                <button class="btn-off" onclick="controlRoom('r1', '九局', 0, 'off')">关闭电源</button>
            </div>
            <div class="status" id="status_r1">未操作</div>
        </div>

        <!-- 2号房(可复制新增) -->
        <div class="room-card">
            <div class="room-name">二局(2号房)</div>
            <div class="btn-group">
                <button class="btn-on" onclick="controlRoom('r2', '二局', 1, 'on')">打开电源</button>
                <button class="btn-off" onclick="controlRoom('r2', '二局', 1, 'off')">关闭电源</button>
            </div>
            <div class="status" id="status_r2">未操作</div>
        </div>

        <!-- 3号房(可复制新增) -->
        <div class="room-card">
            <div class="room-name">三局(3号房)</div>
            <div class="btn-group">
                <button class="btn-on" onclick="controlRoom('r3', '三局', 2, 'on')">打开电源</button>
                <button class="btn-off" onclick="controlRoom('r3', '三局', 2, 'off')">关闭电源</button>
            </div>
            <div class="status" id="status_r3">未操作</div>
        </div>

        <!-- 4号房(可复制新增) -->
        <div class="room-card">
            <div class="room-name">四局(4号房)</div>
            <div class="btn-group">
                <button class="btn-on" onclick="controlRoom('r4', '四局', 3, 'on')">打开电源</button>
                <button class="btn-off" onclick="controlRoom('r4', '四局', 3, 'off')">关闭电源</button>
            </div>
            <div class="status" id="status_r4">未操作</div>
        </div>
    </div>

    <!-- 引入MQTT库 -->
    <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
    <script>
        // 配置(和你的程序一致)
        const EMQX_WS_URL = 'ws://43.137.8.230:8083/mqtt';
        const EMQX_USER = 'wmjk';
        const EMQX_PWD = '88888888';
        const MQTT_TOPIC = 'cashier/power/set/1';
        
        // 初始化MQTT客户端
        let client;
        initMQTT();

        // 连接MQTT服务器
        function initMQTT() {
            client = mqtt.connect(EMQX_WS_URL, {
                username: EMQX_USER,
                password: EMQX_PWD,
                keepalive: 60,
                reconnectPeriod: 1000
            });

            // 连接成功
            client.on('connect', () => {
                document.getElementById('connectStatus').className = 'connect-status connected';
                document.getElementById('connectStatus').innerText = '已连接到服务器,可控制房间';
                console.log('✅ MQTT连接成功');
            });

            // 连接失败
            client.on('error', (err) => {
                document.getElementById('connectStatus').className = 'connect-status disconnected';
                document.getElementById('connectStatus').innerText = '连接失败:' + err.message;
                console.error('❌ MQTT连接失败', err);
            });
        }

        // 控制房间电源
        function controlRoom(roomId, roomName, coil, power) {
            // 构造JSON指令(和你的程序解析格式一致)
            const cmd = {
                roomId: roomId,
                roomName: roomName,
                power: power,
                timestamp: new Date().toLocaleString(),
                slaveId: 1,
                coil: coil
            };

            // 发送指令
            client.publish(MQTT_TOPIC, JSON.stringify(cmd), (err) => {
                const statusEl = document.getElementById('status_' + roomId);
                if (err) {
                    statusEl.innerText = '发送失败:' + err.message;
                    alert(`${roomName} → ${power === 'on' ? '打开' : '关闭'}电源失败!`);
                } else {
                    statusEl.innerText = `${new Date().toLocaleTimeString()} → ${power === 'on' ? '打开' : '关闭'}成功`;
                    alert(`${roomName} → ${power === 'on' ? '打开' : '关闭'}电源成功!`);
                }
            });
        }
    </script>
</body>
</html>

3.使用方法

• 把这个 .html 文件放到 棋牌室控电 文件夹里

• 用手机浏览器打开这个文件(可以通过微信 / QQ 传文件,或共享文件夹)

• 点击「打开 / 关闭电源」按钮,就能直接控制对应房间,不用输任何指令!

三、最终文件清单(全部放 棋牌室控电 文件夹)

文件名称作用
relay_control.py核心控电程序(带重试 + JSON 解析)
启动控电程序.bat一键启动脚本(双击即可运行)
room_control.html手机网页控制端(不用装 APP)

✨ 最后说明

  1. 新增房间:复制网页里的 <div class="room-card"> 模块,修改房间名和 coil 地址即可
  2. 网页依赖:需要 EMQX 服务器开启 8083 端口(WebSocket),如果没开,联系服务器管理员放行
  3. 脚本适配:.bat 里的 你的用户名 要改成新电脑的实际用户名(比如 ASUS
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容