import time import toml import re import uuid import hashlib import subprocess from flask import Flask, request, render_template import threading app = Flask(__name__) mac_address = uuid.getnode() mac_hash = hashlib.md5(str(mac_address).encode()).hexdigest() mac_decimal = int(mac_hash, 16) % (10 ** 13) start_password = None govern_password = None print(mac_decimal) def password_config(): global start_password global govern_password # 读取密码 with open('/var/www/html/password_config.toml', 'r', encoding='utf-8') as f: passwordconfig = toml.load(f) start_password = passwordconfig['password']['start'] govern_password = passwordconfig['password']['govern'] def update_network_config(device_ip, gateway): # 更新IP地址和网关到网络配置文件 with open('/etc/netplan/01-netcfg.yaml', 'r') as f: network_config = f.read() network_config = re.sub(r'addresses:\s*\[.*?\]', f'addresses: [{device_ip}/24]', network_config, count=1) network_config = re.sub(r'via:\s*\d+\.\d+\.\d+\.\d+', f'via: {gateway}', network_config, count=1) with open('/etc/netplan/01-netcfg.yaml', 'w') as f: f.write(network_config) # 应用网关配置文件 subprocess.run(['netplan', 'apply']) time.sleep(120) subprocess.run(['sudo', 'reboot']) @app.route('/') def index(): global start_password global govern_password # 加载文件中的数据到字典 with open('/usr/local/gateway/src/config.toml', 'r', encoding='utf-8') as f: config = toml.load(f) return render_template('test.html', mac_decimal=mac_decimal, govern_password=govern_password, start_password=start_password, broker=config['mqtt']['broker'], client_id=config['mqtt']['client_id'], device_id=config['mqtt']['device_id'], windfarm=config['mqtt']['windfarm'], fansnum=config['mqtt']['fansnum'], ch0_measurpoint=config['mqtt']['ch0_measurpoint'], ch1_measurpoint=config['mqtt']['ch1_measurpoint'], ch2_measurpoint=config['mqtt']['ch2_measurpoint'], ch3_measurpoint=config['mqtt']['ch3_measurpoint'], ch4_measurpoint=config['mqtt']['ch4_measurpoint'], ch5_measurpoint=config['mqtt']['ch5_measurpoint'], ch6_measurpoint=config['mqtt']['ch6_measurpoint'], ch7_measurpoint=config['mqtt']['ch7_measurpoint'], ch0_measurpointdirection=config['mqtt']['ch0_measurpointdirection'], ch1_measurpointdirection=config['mqtt']['ch1_measurpointdirection'], ch2_measurpointdirection=config['mqtt']['ch2_measurpointdirection'], ch3_measurpointdirection=config['mqtt']['ch3_measurpointdirection'], ch4_measurpointdirection=config['mqtt']['ch4_measurpointdirection'], ch5_measurpointdirection=config['mqtt']['ch5_measurpointdirection'], ch6_measurpointdirection=config['mqtt']['ch6_measurpointdirection'], ch7_measurpointdirection=config['mqtt']['ch7_measurpointdirection'], ch0_sensorparameters=config['mqtt']['ch0_sensorparameters'], ch1_sensorparameters=config['mqtt']['ch1_sensorparameters'], ch2_sensorparameters=config['mqtt']['ch2_sensorparameters'], ch3_sensorparameters=config['mqtt']['ch3_sensorparameters'], ch4_sensorparameters=config['mqtt']['ch4_sensorparameters'], ch5_sensorparameters=config['mqtt']['ch5_sensorparameters'], ch6_sensorparameters=config['mqtt']['ch6_sensorparameters'], ch7_sensorparameters=config['mqtt']['ch7_sensorparameters'], ch0_samplingtime=config['mqtt']['ch0_samplingtime'], ch1_samplingtime=config['mqtt']['ch1_samplingtime'], ch2_samplingtime=config['mqtt']['ch2_samplingtime'], ch3_samplingtime=config['mqtt']['ch3_samplingtime'], ch4_samplingtime=config['mqtt']['ch4_samplingtime'], ch5_samplingtime=config['mqtt']['ch5_samplingtime'], ch6_samplingtime=config['mqtt']['ch6_samplingtime'], ch7_samplingtime=config['mqtt']['ch7_samplingtime'], ch0_samplingfrequency=config['mqtt']['ch0_samplingfrequency'], ch1_samplingfrequency=config['mqtt']['ch1_samplingfrequency'], ch2_samplingfrequency=config['mqtt']['ch2_samplingfrequency'], ch3_samplingfrequency=config['mqtt']['ch3_samplingfrequency'], ch4_samplingfrequency=config['mqtt']['ch4_samplingfrequency'], ch5_samplingfrequency=config['mqtt']['ch5_samplingfrequency'], ch6_samplingfrequency=config['mqtt']['ch6_samplingfrequency'], ch7_samplingfrequency=config['mqtt']['ch7_samplingfrequency'] # 其他需要传递的值 ) @app.route('/submit', methods=['POST']) def submit(): ppassword = request.form.get('newPassword') broker = request.form.get('broker') client_id = request.form.get('client_id') windfarm = request.form.get('windfarm') fansnum = request.form.get('fansnum') ch0_measurpoint = request.form.get('ch0_measurpoint') ch1_measurpoint = request.form.get('ch1_measurpoint') ch2_measurpoint = request.form.get('ch2_measurpoint') ch3_measurpoint = request.form.get('ch3_measurpoint') ch4_measurpoint = request.form.get('ch4_measurpoint') ch5_measurpoint = request.form.get('ch5_measurpoint') ch6_measurpoint = request.form.get('ch6_measurpoint') ch7_measurpoint = request.form.get('ch7_measurpoint') ch0_measurpointdirection = request.form.get('ch0_measurpointdirection') ch1_measurpointdirection = request.form.get('ch1_measurpointdirection') ch2_measurpointdirection = request.form.get('ch2_measurpointdirection') ch3_measurpointdirection = request.form.get('ch3_measurpointdirection') ch4_measurpointdirection = request.form.get('ch4_measurpointdirection') ch5_measurpointdirection = request.form.get('ch5_measurpointdirection') ch6_measurpointdirection = request.form.get('ch6_measurpointdirection') ch7_measurpointdirection = request.form.get('ch7_measurpointdirection') ch0_sensorparameters = request.form.get('ch0_sensorparameters') ch1_sensorparameters = request.form.get('ch1_sensorparameters') ch2_sensorparameters = request.form.get('ch2_sensorparameters') ch3_sensorparameters = request.form.get('ch3_sensorparameters') ch4_sensorparameters = request.form.get('ch4_sensorparameters') ch5_sensorparameters = request.form.get('ch5_sensorparameters') ch6_sensorparameters = request.form.get('ch6_sensorparameters') ch7_sensorparameters = request.form.get('ch7_sensorparameters') ch0_samplingtime = request.form.get('ch0_samplingtime') ch1_samplingtime = request.form.get('ch1_samplingtime') ch2_samplingtime = request.form.get('ch2_samplingtime') ch3_samplingtime = request.form.get('ch3_samplingtime') ch4_samplingtime = request.form.get('ch4_samplingtime') ch5_samplingtime = request.form.get('ch5_samplingtime') ch6_samplingtime = request.form.get('ch6_samplingtime') ch7_samplingtime = request.form.get('ch7_samplingtime') ch0_samplingfrequency = request.form.get('ch0_samplingfrequency') ch1_samplingfrequency = request.form.get('ch1_samplingfrequency') ch2_samplingfrequency = request.form.get('ch2_samplingfrequency') ch3_samplingfrequency = request.form.get('ch3_samplingfrequency') ch4_samplingfrequency = request.form.get('ch4_samplingfrequency') ch5_samplingfrequency = request.form.get('ch5_samplingfrequency') ch6_samplingfrequency = request.form.get('ch6_samplingfrequency') ch7_samplingfrequency = request.form.get('ch7_samplingfrequency') device_id = request.form.get('device_id') print("password:", ppassword) # 加载文件中的数据到字典 with open('/usr/local/gateway/src/config.toml', 'r', encoding='utf-8') as f: config = toml.load(f) # 修改密码 if ppassword: with open('/var/www/html/password_config.toml', 'r', encoding='utf-8') as f: passwordconfig = toml.load(f) passwordconfig['password']['start'] = ppassword with open('/var/www/html/password_config.toml', 'w', encoding='utf-8') as f: toml.dump(passwordconfig, f) # 修改字典中的值 config['mqtt']['broker'] = broker config['mqtt']['client_id'] = client_id config['mqtt']['windfarm'] = windfarm config['mqtt']['fansnum'] = fansnum config['mqtt']['ch0_measurpoint'] = ch0_measurpoint config['mqtt']['ch1_measurpoint'] = ch1_measurpoint config['mqtt']['ch2_measurpoint'] = ch2_measurpoint config['mqtt']['ch3_measurpoint'] = ch3_measurpoint config['mqtt']['ch4_measurpoint'] = ch4_measurpoint config['mqtt']['ch5_measurpoint'] = ch5_measurpoint config['mqtt']['ch6_measurpoint'] = ch6_measurpoint config['mqtt']['ch7_measurpoint'] = ch7_measurpoint config['mqtt']['ch0_measurpointdirection'] = ch0_measurpointdirection config['mqtt']['ch1_measurpointdirection'] = ch1_measurpointdirection config['mqtt']['ch2_measurpointdirection'] = ch2_measurpointdirection config['mqtt']['ch3_measurpointdirection'] = ch3_measurpointdirection config['mqtt']['ch4_measurpointdirection'] = ch4_measurpointdirection config['mqtt']['ch5_measurpointdirection'] = ch5_measurpointdirection config['mqtt']['ch6_measurpointdirection'] = ch6_measurpointdirection config['mqtt']['ch7_measurpointdirection'] = ch7_measurpointdirection config['mqtt']['ch0_sensorparameters'] = ch0_sensorparameters config['mqtt']['ch1_sensorparameters'] = ch1_sensorparameters config['mqtt']['ch2_sensorparameters'] = ch2_sensorparameters config['mqtt']['ch3_sensorparameters'] = ch3_sensorparameters config['mqtt']['ch4_sensorparameters'] = ch4_sensorparameters config['mqtt']['ch5_sensorparameters'] = ch5_sensorparameters config['mqtt']['ch6_sensorparameters'] = ch6_sensorparameters config['mqtt']['ch7_sensorparameters'] = ch7_sensorparameters config['mqtt']['ch0_samplingtime'] = ch0_samplingtime config['mqtt']['ch1_samplingtime'] = ch1_samplingtime config['mqtt']['ch2_samplingtime'] = ch2_samplingtime config['mqtt']['ch3_samplingtime'] = ch3_samplingtime config['mqtt']['ch4_samplingtime'] = ch4_samplingtime config['mqtt']['ch5_samplingtime'] = ch5_samplingtime config['mqtt']['ch6_samplingtime'] = ch6_samplingtime config['mqtt']['ch7_samplingtime'] = ch7_samplingtime config['mqtt']['ch0_samplingfrequency'] = ch0_samplingfrequency config['mqtt']['ch1_samplingfrequency'] = ch1_samplingfrequency config['mqtt']['ch2_samplingfrequency'] = ch2_samplingfrequency config['mqtt']['ch3_samplingfrequency'] = ch3_samplingfrequency config['mqtt']['ch4_samplingfrequency'] = ch4_samplingfrequency config['mqtt']['ch5_samplingfrequency'] = ch5_samplingfrequency config['mqtt']['ch6_samplingfrequency'] = ch6_samplingfrequency config['mqtt']['ch7_samplingfrequency'] = ch7_samplingfrequency config['mqtt']['device_id'] = device_id device_ip = request.form.get('device_IP') gateway = request.form.get('gateway') # 保存修改后的字典回文件 with open('/usr/local/gateway/src/config.toml', 'w', encoding='utf-8') as f: toml.dump(config, f) # 在后台异步处理网络配置的更改操作 threading.Thread(target=update_network_config, args=(device_ip, gateway)).start() return '提交成功!' if __name__ == '__main__': password_config() app.run(host='0.0.0.0')