« Tüm yayınlar

Modbus Proxy'de Sessiz Veri Bayatlamasına Karşı 3 Katmanlı Çözüm

Huawei SDongle için yazılmış bir Modbus önbellek proxy'sinin gece çökmelerine, donan okumalara ve sessizce bayatlayan verilere karşı nasıl dayanıklı hale getirildiği anlatılıyor.

Bir geliştiricinin kendi yazdığı Modbus önbellek proxy'si, Huawei SUN2000 inverterinin SDongle donanımıyla haftalarca sorunsuz çalıştıktan sonra, gece inverter uykuya geçtiğinde asenkron okuma işleminin sonsuza dek donduğunu ve proxy'nin saatlerce eski verileri gerçekmiş gibi sunduğunu ortaya çıkarıyor. En tehlikeli arıza modu çökme değil, sessizce yanlış veri servis etmeye devam etmek olarak tanımlanıyor.

Çözüm üç katmandan oluşuyor: her okuma işlemine asyncio.wait_for ile sert bir zaman aşımı ve SDongle'ın gereksinim duyduğu 50 milisaniyelik bekleme eklenmesi; TimeoutError ile gerçek bağlantı hatalarının ayırt edilerek yalnızca ölü bağlantılarda döngüden çıkılması; ve önbellek 120 saniyeden eski kaldığında bunu açıkça loglayarak Home Assistant tarafında görünür hale getirilmesi. Ayrıca istemci tarafında 7 baytlık MBAP başlığı için 60 saniyelik bir boşta kalma zaman aşımı, ölü istemci bağlantılarının kaynak sızdırmasını engelliyor.

Aylarca süren gerçek kullanımdan elde edilen bu eşik değerler (50ms aralık, 10 saniyelik yoklama, 120 saniyelik bayatlama sınırı, 60 saniyelik istemci zaman aşımı) donanıma özgü olsa da, kavramsal olarak herhangi bir önbellekleyici proxy için geçerli. Yazı ayrıca hazır ha-modbusproxy eklentisi yerine neden kendi çözümünü yazdığını ve Home Assistant'ta bayatlamış veriye nasıl otomasyon kurulacağını da açıklıyor.