Ana içeriğe geç

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

  1. ESP32 gateway cokmus veya yeniden baslamis (watchdog reset)
  2. WiFi baglantisi kopmus (RSSI cok dusuk, AP degismis)
  3. MQTT credential suresi dolmus veya degismis
  4. Modbus baglantisi kopmus (RS485 kablo, adres catismasi)
  5. Guc kesintisi — ESP32 veya bagli cihazlar enerjisiz
  6. 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