TKK_E32231503/backend/test-control-topic.ps1

207 lines
8.5 KiB
PowerShell
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# =====================================================
# Script Test Control Topic di Railway
# =====================================================
param(
[Parameter(Mandatory=$false)]
[string]$RailwayUrl = ""
)
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " TEST CONTROL TOPIC" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
# Minta URL jika tidak diberikan
if ([string]::IsNullOrWhiteSpace($RailwayUrl)) {
$RailwayUrl = Read-Host "Masukkan URL Railway (contoh: https://your-app.up.railway.app)"
}
# Remove trailing slash
$RailwayUrl = $RailwayUrl.TrimEnd('/')
Write-Host "🔗 Railway URL: $RailwayUrl" -ForegroundColor Cyan
Write-Host ""
# =====================================================
# 1. HEALTH CHECK
# =====================================================
Write-Host "1⃣ Testing Health Check..." -ForegroundColor Yellow
try {
$response = Invoke-RestMethod -Uri "$RailwayUrl/" -Method Get
Write-Host " ✅ Status: $($response.status)" -ForegroundColor Green
Write-Host " 📦 Version: $($response.version)" -ForegroundColor Cyan
Write-Host " ⏱️ Uptime: $([math]::Round($response.uptime, 2))s" -ForegroundColor Cyan
} catch {
Write-Host " ❌ Failed: $_" -ForegroundColor Red
exit 1
}
Write-Host ""
# =====================================================
# 2. STATS CHECK
# =====================================================
Write-Host "2⃣ Testing Stats API..." -ForegroundColor Yellow
try {
$response = Invoke-RestMethod -Uri "$RailwayUrl/api/stats" -Method Get
Write-Host " ✅ Stats retrieved successfully" -ForegroundColor Green
Write-Host " 🔌 MQTT Connected: $($response.stats.mqttConnected)" -ForegroundColor Cyan
Write-Host " 📊 Sensor Data: $($response.stats.sensorDataCount)" -ForegroundColor Cyan
Write-Host " 📝 Status History: $($response.stats.statusHistoryCount)" -ForegroundColor Cyan
Write-Host " 🎛️ Control Commands: $($response.stats.controlCommandsCount)" -ForegroundColor Cyan
if ($response.stats.controlCommandsCount -eq $null) {
Write-Host " ⚠️ WARNING: controlCommandsCount is null!" -ForegroundColor Yellow
Write-Host " Kemungkinan table control_commands belum ada atau kosong" -ForegroundColor Yellow
}
} catch {
Write-Host " ❌ Failed: $_" -ForegroundColor Red
}
Write-Host ""
# =====================================================
# 3. TEST CONTROL COMMANDS
# =====================================================
Write-Host "3⃣ Testing Control Commands..." -ForegroundColor Yellow
$commands = @("HEATER_ON", "FAN_ON", "EXHAUST_ON", "HEATER_OFF", "FAN_OFF", "EXHAUST_OFF")
foreach ($cmd in $commands) {
Write-Host " 📤 Sending: $cmd" -ForegroundColor Cyan
try {
$body = @{
command = $cmd
} | ConvertTo-Json
$response = Invoke-RestMethod -Uri "$RailwayUrl/api/control" -Method Post -Body $body -ContentType "application/json"
if ($response.success) {
Write-Host " ✅ Success" -ForegroundColor Green
} else {
Write-Host " ❌ Failed: $($response.message)" -ForegroundColor Red
}
} catch {
Write-Host " ❌ Error: $_" -ForegroundColor Red
}
Start-Sleep -Milliseconds 500
}
Write-Host ""
# =====================================================
# 4. CHECK STATS AGAIN
# =====================================================
Write-Host "4⃣ Checking Stats After Commands..." -ForegroundColor Yellow
try {
$response = Invoke-RestMethod -Uri "$RailwayUrl/api/stats" -Method Get
Write-Host " ✅ Stats retrieved" -ForegroundColor Green
Write-Host " 🎛️ Control Commands Count: $($response.stats.controlCommandsCount)" -ForegroundColor Cyan
if ($response.stats.controlCommandsCount -gt 0) {
Write-Host " ✅ Control commands berhasil tersimpan!" -ForegroundColor Green
} else {
Write-Host " ⚠️ Control commands masih 0" -ForegroundColor Yellow
}
} catch {
Write-Host " ❌ Failed: $_" -ForegroundColor Red
}
Write-Host ""
# =====================================================
# 5. TEST INVALID COMMAND
# =====================================================
Write-Host "5⃣ Testing Invalid Command..." -ForegroundColor Yellow
try {
$body = @{
command = "INVALID_COMMAND"
} | ConvertTo-Json
$response = Invoke-RestMethod -Uri "$RailwayUrl/api/control" -Method Post -Body $body -ContentType "application/json"
Write-Host " ⚠️ Invalid command accepted (should be rejected)" -ForegroundColor Yellow
} catch {
$errorResponse = $_.ErrorDetails.Message | ConvertFrom-Json
if ($errorResponse.message -like "*Invalid command*") {
Write-Host " ✅ Invalid command correctly rejected" -ForegroundColor Green
} else {
Write-Host " ❌ Unexpected error: $($errorResponse.message)" -ForegroundColor Red
}
}
Write-Host ""
# =====================================================
# 6. GET DATA HISTORY
# =====================================================
Write-Host "6⃣ Getting Data History..." -ForegroundColor Yellow
try {
$response = Invoke-RestMethod -Uri "$RailwayUrl/api/data/history?limit=5" -Method Get
Write-Host " ✅ Retrieved $($response.count) records" -ForegroundColor Green
if ($response.count -gt 0) {
$latest = $response.data[0]
Write-Host " 📊 Latest Data:" -ForegroundColor Cyan
Write-Host " Suhu: $($latest.suhu)°C" -ForegroundColor White
Write-Host " Berat: $($latest.berat)g" -ForegroundColor White
Write-Host " Relay1 (Heater): $($latest.relay1)" -ForegroundColor White
Write-Host " Relay2 (Fan): $($latest.relay2)" -ForegroundColor White
Write-Host " Relay3 (Exhaust): $($latest.relay3)" -ForegroundColor White
Write-Host " Status: $($latest.status)" -ForegroundColor White
Write-Host " Timestamp: $($latest.timestamp)" -ForegroundColor White
}
} catch {
Write-Host " ❌ Failed: $_" -ForegroundColor Red
}
Write-Host ""
# =====================================================
# 7. GET STATUS HISTORY
# =====================================================
Write-Host "7⃣ Getting Status History..." -ForegroundColor Yellow
try {
$response = Invoke-RestMethod -Uri "$RailwayUrl/api/status/history?limit=10" -Method Get
Write-Host " ✅ Retrieved $($response.count) records" -ForegroundColor Green
if ($response.count -gt 0) {
Write-Host " 📝 Recent Status Messages:" -ForegroundColor Cyan
foreach ($status in $response.data | Select-Object -First 5) {
Write-Host " - $($status.message)" -ForegroundColor White
}
}
} catch {
Write-Host " ❌ Failed: $_" -ForegroundColor Red
}
Write-Host ""
# =====================================================
# SUMMARY
# =====================================================
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " 📋 TEST SUMMARY" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
Write-Host "✅ Checklist:" -ForegroundColor Yellow
Write-Host " [ ] Health check berhasil" -ForegroundColor White
Write-Host " [ ] Stats API menampilkan controlCommandsCount" -ForegroundColor White
Write-Host " [ ] Control commands berhasil dikirim" -ForegroundColor White
Write-Host " [ ] Control commands tersimpan di database" -ForegroundColor White
Write-Host " [ ] Invalid command ditolak" -ForegroundColor White
Write-Host " [ ] Data history dapat diambil" -ForegroundColor White
Write-Host " [ ] Status history dapat diambil" -ForegroundColor White
Write-Host ""
Write-Host "📚 Next Steps:" -ForegroundColor Yellow
Write-Host " 1. Cek Railway logs untuk melihat MQTT messages" -ForegroundColor White
Write-Host " 2. Upload ESP32 code dan test dengan hardware" -ForegroundColor White
Write-Host " 3. Monitor database Railway untuk memastikan data masuk" -ForegroundColor White
Write-Host ""
Write-Host "🔗 Useful URLs:" -ForegroundColor Yellow
Write-Host " Health: $RailwayUrl/" -ForegroundColor Cyan
Write-Host " Stats: $RailwayUrl/api/stats" -ForegroundColor Cyan
Write-Host " Control: $RailwayUrl/api/control" -ForegroundColor Cyan
Write-Host " History: $RailwayUrl/api/data/history" -ForegroundColor Cyan
Write-Host ""