บทที่ 11 Daily Runbook
Pre-flight Checklist
ก่อนรัน script ทุกวัน ตรวจสอบ:
- ETABS เปิดอยู่ + โมเดลเปิดอยู่
- Save โมเดลก่อนรัน (หรือ Save As สำเนา)
- venv เปิดอยู่ (
(.venv)ขึ้นที่ terminal) - Units ตั้งถูกต้อง (ตรวจจากสคริปต์)
ขั้นตอนรันจริง
%%{init: {
"theme": "base",
"flowchart": {
"curve": "basis",
"htmlLabels": true,
"nodeSpacing": 42,
"rankSpacing": 56,
"padding": 16
}
}}%%
flowchart LR
A["1. เปิด ETABS"] --> B["2. เปิดโมเดล"]
B --> C["3. เปิด Terminal"]
C --> D["4. activate venv"]
D --> E["5. python main.py"]
E --> F["6. ตรวจ output"]
1. Command Line
cd C:\Projects\MyEtabsApp
# เปิด venv.venv\Scripts\Activate.ps1
# รัน scriptpython main.py2. ตรวจ Output
# ตรวจไฟล์ที่ exportdir output\
# ดู CSV ใน terminalGet-Content output\frame_forces.csv | Select-Object -First 5Automation Scripts
Batch File (.bat)
สร้างไฟล์ run_etabs.bat:
@echo offecho [%DATE% %TIME%] Starting ETABS extraction...
cd /d C:\Projects\MyEtabsAppcall .venv\Scripts\activate.batpython main.py
if %ERRORLEVEL% neq 0 ( echo ❌ Script failed! pause exit /b 1)
echo ✅ Done!pausePowerShell Script (.ps1)
สร้างไฟล์ run_etabs.ps1:
$ErrorActionPreference = "Stop"$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm"
Write-Host "[$timestamp] Starting ETABS extraction..." -ForegroundColor Cyan
Set-Location "C:\Projects\MyEtabsApp"& ".venv\Scripts\Activate.ps1"
try { python main.py Write-Host "✅ Done!" -ForegroundColor Green} catch { Write-Host "❌ Failed: $_" -ForegroundColor Red exit 1}Jupyter Notebook Workflow
ติดตั้งและเริ่มใช้
pip install jupyter
# เปิด Jupyter Notebookjupyter notebookตัวอย่าง Notebook Cells
Cell 1 — Connect:
import comtypes.clientimport pandas as pd
etabs = comtypes.client.GetActiveObject("CSI.ETABS.API.ETABSObject")sap_model = etabs.SapModelprint(f"✅ Connected: {sap_model.GetModelFilename()}")Cell 2 — Explore frames:
ret, count, names = sap_model.FrameObj.GetNameList()print(f"Frames: {count}")for n in names[:10]: print(f" • {n}")Cell 3 — Analyze and get results:
sap_model.Analyze.RunAnalysis()sap_model.Results.Setup.DeselectAllCasesAndCombosForOutput()sap_model.Results.Setup.SetCaseSelectedForOutput("DEAD", True)
ret, nr, *data = sap_model.Results.FrameForce("B1", 0)print(f"Results: {nr} rows")Cell 4 — Cleanup (สำคัญ!):
import gcdel sap_modeldel etabsgc.collect()print("🧹 Cleanup done")Task Scheduler (ตั้งเวลารันอัตโนมัติ)
ขั้นตอน
- เปิด Task Scheduler (ค้น “Task Scheduler” จาก Start)
- เลือก Create Basic Task…
- ตั้งค่า:
- Name:
ETABS Daily Export - Trigger: Daily, 8:00 AM (หรือตามต้องการ)
- Action: Start a program
- Program:
C:\Projects\MyEtabsApp\.venv\Scripts\python.exe - Arguments:
main.py - Start in:
C:\Projects\MyEtabsApp
- Name:
Batch Processing: หลายโมเดลพร้อมกัน
"""Process หลายโมเดล ETABS ผ่าน CreateObject"""import comtypes.clientimport gcfrom pathlib import Path
model_files = [ r"C:\Models\Building_A.EDB", r"C:\Models\Building_B.EDB", r"C:\Models\Building_C.EDB",]
for model_path in model_files: etabs = None sap_model = None try: print(f"\n{'═' * 50}") print(f"Processing: {Path(model_path).name}") print(f"{'═' * 50}")
# สร้าง ETABS instance ใหม่ etabs = comtypes.client.CreateObject( "CSI.ETABS.API.ETABSObject" ) etabs.ApplicationStart() sap_model = etabs.SapModel
# เปิดโมเดล ret = sap_model.File.OpenFile(model_path) if ret != 0: print(f"❌ Cannot open: {model_path}") continue
# Analyze + Export sap_model.SetPresentUnits(6) sap_model.Analyze.RunAnalysis() sap_model.Results.Setup.DeselectAllCasesAndCombosForOutput() sap_model.Results.Setup.SetCaseSelectedForOutput("DEAD", True)
# ... export results ...
print(f"✅ Done: {Path(model_path).name}")
except Exception as e: print(f"❌ Error: {e}") finally: if sap_model: del sap_model if etabs: del etabs gc.collect()Log Output
บันทึก log สำหรับ tracking:
import loggingfrom pathlib import Pathfrom datetime import datetime
# ตั้งค่า logginglog_dir = Path("logs")log_dir.mkdir(exist_ok=True)
log_file = log_dir / f"run_{datetime.now():%Y%m%d_%H%M}.log"logging.basicConfig( level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s", handlers=[ logging.FileHandler(log_file, encoding="utf-8"), logging.StreamHandler(), ],)
logger = logging.getLogger(__name__)logger.info("Starting ETABS extraction...")Checklist — Daily Run
| ขั้นตอน | ✅ |
|---|---|
| เปิด ETABS + โมเดล | |
| Save ก่อนรัน | |
| Activate venv | |
รัน python main.py | |
| ตรวจ output CSV/Excel | |
| Cleanup (script ทำให้อัตโนมัติ) | |
| git commit output (ถ้ามี) |