Cihaz Offline
Semptomlar
- Cihaz durumu dashboard'da "offline" olarak goruyor
- Son veri zamani (last seen) dakikalar veya saatler oncesini gosteriyor
- Belirli bir gateway'e bagli tum cihazlar ayni anda offline olmus
- Cihaz listesinde baglanti ikonu kirmizi/gri
Olasi Sebepler
- ESP32 gateway cokmus veya yeniden baslamis (watchdog reset)
- WiFi baglantisi kopmus (RSSI cok dusuk, AP degismis)
- MQTT credential suresi dolmus veya degismis
- Modbus baglantisi kopmus (RS485 kablo, adres catismasi)
- Guc kesintisi — ESP32 veya bagli cihazlar enerjisiz
- Firmware hatasi — OTA sonrasi cihaz boot donguye girmis
Teshis Adimlari
1. MQTT Broker'da Client Durumunu Kontrol Et
# Cihazin MQTT broker'a bagli olup olmadigini kontrol et
curl -s -u admin:public "http://localhost:18083/api/v5/clients?clientid=zeus-gw-{gateway_id}" \
| python3 -m json.tool
# Tum bagli client'larin listesi
curl -s -u admin:public "http://localhost:18083/api/v5/clients?_page=1&_limit=100" \
| python3 -c "
import json, sys
data = json.load(sys.stdin)
for c in data.get('data', []):
status = 'ONLINE' if c['connected'] else 'OFFLINE'
print(f\"{c['clientid']:40} {status:8} IP:{c.get('ip_address','?'):15}\")
"
2. Son MQTT Mesajini Kontrol Et
# Cihazin son mesajini retained topic'ten oku
mosquitto_sub -h localhost -p 1883 -t "zeus/{tenant_id}/{gateway_id}/+/status" -v -C 1 --retained-only
# Gateway status topic'ini dinle (60 saniye bekle)
timeout 60 mosquitto_sub -h localhost -p 1883 -t "zeus/{tenant_id}/{gateway_id}/status" -v
3. Backend Uzerinden Cihaz Durumu Sorgula
# API uzerinden cihaz durumunu kontrol et
curl -s -H "Authorization: Bearer {TOKEN}" \
"http://localhost:8000/api/v1/devices/{device_id}" \
| python3 -m json.tool
# Son olcum zamanini kontrol et
curl -s -H "Authorization: Bearer {TOKEN}" \
"http://localhost:8000/api/v1/measurements/{device_id}/latest" \
| python3 -m json.tool
4. ESP32 Seri Port Loglarini Kontrol Et
Eger fiziksel erisim varsa:
# ESP32 seri port ciktisini oku (USB bagli ise)
# Linux/macOS
screen /dev/ttyUSB0 115200
# veya
minicom -D /dev/ttyUSB0 -b 115200
# Beklenen log ciktilari:
# [WiFi] Connected, RSSI: -45
# [MQTT] Connected to broker
# [Modbus] Polling device 1...
5. Veritabaninda Cihaz Gecmisini Kontrol Et
# PostgreSQL'de cihazin son durumunu sorgula
docker exec -it zeus-postgres psql -U zeus -d zeus_db -c "
SELECT d.id, d.name, d.status, d.last_seen,
NOW() - d.last_seen AS offline_suresi
FROM devices d
WHERE d.id = '{device_id}'
OR d.serial_number = '{serial_number}';
"
# Son 10 baglanti olayini kontrol et
docker exec -it zeus-postgres psql -U zeus -d zeus_db -c "
SELECT event_type, created_at, metadata
FROM device_events
WHERE device_id = '{device_id}'
ORDER BY created_at DESC
LIMIT 10;
"
6. Gateway Uzerinden Modbus Baglanti Testi
# Gateway'in Modbus cihazlarini tarayip taramayacagini kontrol et
# (Gateway API endpoint'i varsa)
curl -s "http://{gateway_ip}:80/api/modbus/scan" | python3 -m json.tool
# Backend uzerinden Modbus polling durumunu kontrol et
docker logs --tail 100 zeus-modbus-poller 2>&1 | grep -i "{device_id}\|error\|timeout"
Cozum Adimlari
ESP32 Uzaktan Reset
# MQTT uzerinden reset komutu gonder
mosquitto_pub -h localhost -p 1883 \
-t "zeus/{tenant_id}/{gateway_id}/cmd" \
-m '{"action": "reboot", "ts": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}'
# Reset sonrasi status topic'ini dinle (120 saniye bekle)
timeout 120 mosquitto_sub -h localhost -p 1883 \
-t "zeus/{tenant_id}/{gateway_id}/status" -v
WiFi Ayarlarini Guncelle
# WiFi konfigurasyonunu MQTT uzerinden gonder
mosquitto_pub -h localhost -p 1883 \
-t "zeus/{tenant_id}/{gateway_id}/cmd" \
-m '{"action": "wifi_config", "ssid": "YeniAg", "password": "****"}'
Gateway Firmware Kontrolu
# Cihazin mevcut firmware versiyonunu kontrol et
curl -s -H "Authorization: Bearer {TOKEN}" \
"http://localhost:8000/api/v1/gateways/{gateway_id}/firmware" \
| python3 -m json.tool
# En son firmware versiyonunu kontrol et
curl -s -H "Authorization: Bearer {TOKEN}" \
"http://localhost:8000/api/v1/firmware/latest?device_type=gateway" \
| python3 -m json.tool
Modbus Baglanti Kontrolu
# Modbus poller loglarinda ilgili cihazi ara
docker logs --tail 500 zeus-modbus-poller 2>&1 | grep -i "{device_id}"
# Modbus poller'i yeniden baslat
docker compose restart modbus-poller
# Modbus konfigurasyonunu dogrula
docker exec zeus-backend python3 -c "
from app.features.modbus.service import ModbusService
# Cihaz konfigurasyon kontrol
"
Cihaz Durumunu Manuel Guncelle
# Veritabaninda cihaz durumunu kontrol amacli guncelle
docker exec -it zeus-postgres psql -U zeus -d zeus_db -c "
UPDATE devices
SET status = 'unknown', updated_at = NOW()
WHERE id = '{device_id}';
"
Eskalasyon
Asagidaki durumlarda ilgili ekiplere eskalasyon yapin:
- Fiziksel erisim gerekiyorsa (ESP32 reset butonu, kablo kontrolu) — saha ekibine bildirin
- Toplu offline — ayni bolgedeki 5+ cihaz ayni anda offline ise ag altyapisi ekibine bildirin
- Firmware boot dongusu — OTA sonrasi cihaz surekli resetleniyorsa firmware ekibine bildirin
- Modbus donanim arizasi — RS485 donusturucu veya kablo hasari suphesinde saha ekibine bildirin
- Sorun 1 saatten fazla suruyorsa ve uzaktan cozulemiyorsa saha mudahale planlayin