Files
2025-12-02 16:27:21 +00:00

128 lines
3.8 KiB
Python

#!/usr/bin/env python3
import json
import uuid
# Read flows.json
with open('/home/mdares/.node-red/flows.json', 'r') as f:
flows = json.load(f)
# Find the main flow tab ID (first tab)
main_tab_id = None
for node in flows:
if node.get('type') == 'tab':
main_tab_id = node['id']
break
# Find the Machine cycles node to get its position
machine_cycles_node = None
work_order_buttons_node = None
db_config_id = None
for node in flows:
if node.get('id') == '0d023d87a13bf56f':
machine_cycles_node = node
elif node.get('id') == '9bbd4fade968036d':
work_order_buttons_node = node
elif node.get('type') == 'MySQLdatabase':
db_config_id = node['id'] # Use existing DB config
print(f"Main tab ID: {main_tab_id}")
print(f"Machine cycles position: x={machine_cycles_node['x']}, y={machine_cycles_node['y']}")
print(f"Work Order buttons position: x={work_order_buttons_node['x']}, y={work_order_buttons_node['y']}")
print(f"DB config ID: {db_config_id}")
# Generate unique IDs for new nodes
state_backup_mysql_id = str(uuid.uuid4()).replace('-', '')[:16]
anomaly_mysql_id = str(uuid.uuid4()).replace('-', '')[:16]
session_mgmt_mysql_id = str(uuid.uuid4()).replace('-', '')[:16]
# Create new MySQL nodes for Machine cycles outputs
state_backup_mysql = {
"id": state_backup_mysql_id,
"type": "mysql",
"z": main_tab_id,
"mydb": db_config_id,
"name": "State Backup DB",
"x": machine_cycles_node['x'] + 200,
"y": machine_cycles_node['y'] + 60,
"wires": [[]]
}
anomaly_mysql = {
"id": anomaly_mysql_id,
"type": "mysql",
"z": main_tab_id,
"mydb": db_config_id,
"name": "Anomaly Tracker DB",
"x": machine_cycles_node['x'] + 200,
"y": machine_cycles_node['y'] + 120,
"wires": [[]]
}
# Create new MySQL node for Work Order buttons session management
session_mgmt_mysql = {
"id": session_mgmt_mysql_id,
"type": "mysql",
"z": main_tab_id,
"mydb": db_config_id,
"name": "Session Manager DB",
"x": work_order_buttons_node['x'] + 200,
"y": work_order_buttons_node['y'] + 100,
"wires": [[]]
}
# Add new nodes to flows
flows.append(state_backup_mysql)
flows.append(anomaly_mysql)
flows.append(session_mgmt_mysql)
# Update wiring for Machine cycles node (4 outputs)
if machine_cycles_node:
# Output 1: existing wire (work_orders update)
# Output 2: existing wire (state messages)
# Output 3: NEW - state backup
# Output 4: NEW - anomaly detection
existing_wires = machine_cycles_node.get('wires', [])
# Ensure we have 4 output arrays
while len(existing_wires) < 4:
existing_wires.append([])
# Wire output 3 to state backup MySQL
existing_wires[2] = [state_backup_mysql_id]
# Wire output 4 to anomaly MySQL
existing_wires[3] = [anomaly_mysql_id]
machine_cycles_node['wires'] = existing_wires
# Update wiring for Work Order buttons node (5 outputs)
if work_order_buttons_node:
# Output 1-4: existing wires
# Output 5: NEW - session management
existing_wires = work_order_buttons_node.get('wires', [])
# Ensure we have 5 output arrays
while len(existing_wires) < 5:
existing_wires.append([])
# Wire output 5 to session management MySQL
existing_wires[4] = [session_mgmt_mysql_id]
work_order_buttons_node['wires'] = existing_wires
# Write updated flows
with open('/home/mdares/.node-red/flows.json', 'w') as f:
json.dump(flows, f, indent=4)
print("\n✅ Added 3 new MySQL nodes:")
print(f" - State Backup DB (ID: {state_backup_mysql_id})")
print(f" - Anomaly Tracker DB (ID: {anomaly_mysql_id})")
print(f" - Session Manager DB (ID: {session_mgmt_mysql_id})")
print("\n✅ Updated wiring:")
print(" - Machine cycles output 3 → State Backup DB")
print(" - Machine cycles output 4 → Anomaly Tracker DB")
print(" - Work Order buttons output 5 → Session Manager DB")