|
|
@@ -286,7 +286,9 @@ def refresh_screen_panel(panel_id):
|
|
|
screen_display.send_cmd(f'g0.pco={0 if mqtt_connected else 63488}', delay_ms=delay_ms)
|
|
|
|
|
|
for port_id in range(1, 25):
|
|
|
- pic = _port_status_to_pic(ps.get(port_id, {}))
|
|
|
+ # 屏幕网口图片显示 LED 颜色状态
|
|
|
+ color = led_states.get(port_id, 0)
|
|
|
+ pic = LED_COLOR_TO_PIC.get(color, 0)
|
|
|
screen_display.send_cmd(f'p{port_id - 1}.pic={pic}', delay_ms=delay_ms)
|
|
|
|
|
|
logger.info(f"屏幕已刷新: {panel_id} (终端{idx + 1})")
|
|
|
@@ -306,6 +308,21 @@ def switch_screen_panel(direction):
|
|
|
return refresh_screen_panel(panel_id)
|
|
|
|
|
|
|
|
|
+def _refresh_current_screen_panel():
|
|
|
+ """LED 等状态变化后,触发当前屏幕 panel 刷新。"""
|
|
|
+ try:
|
|
|
+ panels = get_sorted_panels()
|
|
|
+ if not panels:
|
|
|
+ return
|
|
|
+ with screen_lock:
|
|
|
+ idx = screen_current_panel_index
|
|
|
+ if 0 <= idx < len(panels):
|
|
|
+ panel_id = panels[idx][0]
|
|
|
+ screen_refresh_queue.put((panel_id,))
|
|
|
+ except Exception as e:
|
|
|
+ logger.warning(f"触发屏幕刷新失败: {e}")
|
|
|
+
|
|
|
+
|
|
|
def screen_button_event_handler(page_id, comp_id, event):
|
|
|
"""处理屏幕按钮事件。"""
|
|
|
if event != 0x01:
|
|
|
@@ -1185,6 +1202,9 @@ def dtu_handle_control(topic, payload):
|
|
|
if 'error' in result:
|
|
|
response_payload['payload']['error_code'] = 1005
|
|
|
response_payload['payload']['error_message'] = result['error']
|
|
|
+ else:
|
|
|
+ led_states[int(port_id)] = color
|
|
|
+ _refresh_current_screen_panel()
|
|
|
|
|
|
elif command == 'QUERY_DTU_STATUS':
|
|
|
# 查询DTU状态
|
|
|
@@ -2702,6 +2722,7 @@ def modbus_set_rgb_led():
|
|
|
|
|
|
# 更新 LED 状态追踪
|
|
|
led_states[led_number] = color
|
|
|
+ _refresh_current_screen_panel()
|
|
|
|
|
|
return jsonify({
|
|
|
'success': True,
|
|
|
@@ -3000,6 +3021,11 @@ def get_panel_status():
|
|
|
# LED 状态追踪 (内存中跟踪每个灯的最后设置状态)
|
|
|
led_states = {i: 0 for i in range(1, 25)} # 0=off, 1=red, 2=green, 3=blue
|
|
|
|
|
|
+# Nextion 串口屏网口图片与 LED 颜色的映射关系
|
|
|
+# 屏幕图片定义: 0=灰(灭), 1=蓝, 2=红, 3=绿
|
|
|
+# 后端 LED 颜色定义: 0=灭, 1=红, 2=绿, 3=蓝
|
|
|
+LED_COLOR_TO_PIC = {0: 0, 1: 2, 2: 3, 3: 1}
|
|
|
+
|
|
|
|
|
|
@app.route('/api/modbus/led_status', methods=['GET'])
|
|
|
def get_led_status():
|
|
|
@@ -3036,6 +3062,7 @@ def set_all_leds():
|
|
|
results.append({'led': led_num, 'success': True})
|
|
|
led_states[led_num] = color
|
|
|
|
|
|
+ _refresh_current_screen_panel()
|
|
|
return jsonify({'success': True, 'results': results})
|
|
|
|
|
|
except Exception as e:
|