-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
129 lines (100 loc) · 3.89 KB
/
app.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import json
from flask import Flask, jsonify, render_template, request
from flask_socketio import SocketIO, emit
from wlm import WavelengthMeter, get_wavemeter_data
app = Flask(__name__)
socketio = SocketIO(app)
# Instantiate WavelengthMeter (set debug=True for dummy data)
wlm = WavelengthMeter(debug=False)
def load_config():
with open('config.json') as config_file:
return json.load(config_file)
# Load the config.json file once when the app starts
load_config()
def save_config(config):
with open('config.json', 'w') as config_file:
json.dump(config, config_file, indent=4)
# Routes
@app.route('/')
def index():
return render_template('home.html')
@app.route('/wave')
def wave():
data = get_wavemeter_data(wlm)
return render_template('index.html', channels=config["channels"], wavelengths=data['wavelengths'], precision=config["precision_wave"])
@app.route('/freq')
def freq():
data = get_wavemeter_data(wlm)
return render_template('index.html', channels=config["channels"], frequencies=data['frequencies'], precision=config["precision_freq"])
@app.route('/detuning')
def detuning():
detuning_values = [1]
return render_template('index.html', channels=config["channels"], detunings=detuning_values, precision=config["precision_freq"])
@app.route('/freq/graph/<int:channel_id>')
def graph_freq(channel_id):
return render_template('graph_freq.html', channel_id=channel_id-1)
@app.route('/wave/graph/<int:channel_id>')
def graph_wave(channel_id):
return render_template('graph_wave.html', channel_id=channel_id-1)
@app.route('/detuning/graph/<int:channel_id>')
def graph_detuning(channel_id):
return render_template('graph_detuning.html', channel_id=channel_id-1)
# API routes
# API route to get all wavelengths
@app.route('/api/', methods=['GET'])
def get_data():
data = get_wavemeter_data(wlm)
return jsonify(data)
# API route to get all wavelengths
@app.route('/api/wave', methods=['GET'])
def get_wavelengths():
data = get_wavemeter_data(wlm)
return jsonify(data['wavelengths'])
# API route to get all frequencies
@app.route('/api/freq', methods=['GET'])
def get_frequencies():
data = get_wavemeter_data(wlm)
return jsonify(data['frequencies'])
# API route to get a specific channel's wavelength
@app.route('/api/wave/<int:channel>', methods=['GET'])
def get_wavelength_channel(channel):
data = get_wavemeter_data(wlm)
return jsonify(data['wavelengths'][channel])
# API route to get a specific channel's frequency
@app.route('/api/freq/<int:channel>', methods=['GET'])
def get_frequency_channel(channel):
data = get_wavemeter_data(wlm)
return jsonify(data['frequencies'][channel])
@app.route('/api/config', methods=['GET'])
def get_config():
return jsonify(config)
@app.route('/api/config', methods=['POST'])
def update_config():
new_config = request.json
save_config(new_config)
global config
config = new_config # Update the global config
return jsonify({"message": "Config updated successfully!"})
@app.route('/config')
def edit_config():
return render_template('edit_config.html')
@app.route('/api/reload_config', methods=['POST'])
def reload_config():
global config
# Reload the configuration from the file
config = load_config()
return jsonify({"message": "Config reloaded successfully!"}), 200
config = load_config()
# WebSocket handler for real-time updates
@socketio.on('request_update')
def handle_request_update():
wavemeter_data = get_wavemeter_data(wlm)
detunings = []
for i, channel in enumerate(config["channels"]):
reference_frequency = channel["reference_frequency"]
detuning = wavemeter_data["frequencies"][i] - reference_frequency
detunings.append(detuning)
wavemeter_data["detunings"] = detunings
emit('update_channels', wavemeter_data)
if __name__ == '__main__':
socketio.run(app, host="0.0.0.0", port=config["port"], debug=False)