128 lines
3.8 KiB
Python
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")
|