# -*- coding: utf-8 -*- __title__ = "relay_test" __author__ = 'Mehmet Karatay & "Saraswati" (ChatGPT)' __purpose__ = "Röle pin eşlemesini ve brülör gruplarını sahada test aracı" __version__ = "0.1.0" __date__ = "2025-11-20" """ ebuild/tools/relay_test.py Revision : 2025-11-20 Authors : Mehmet Karatay & "Saraswati" (ChatGPT) Amaç ----- - config_statics.RELAY_GPIO ve BURNER_GROUPS'e göre röle sürücüsünü yüklemek, - Her kanalı sırayla açıp kapatarak kablolamanın doğru olup olmadığını sahada test etmek, - Brülör bazlı test: * Belirli bir burner_id için igniter kanalı, * default pompalar (circulation.default=1 olanlar) ayrı ayrı ON/OFF denemesi. Kullanım -------- Rasp2 üzerinde: cd /home/karatay/ebuild python3 -m ebuild.tools.relay_test UYARI: Bu test gerçek röleleri tetikler. Kazan/şebeke enerjisi bağlıysa dikkatli kullan. """ import time from typing import Optional from ..io.relay_driver import RelayDriver from .. import config_statics as cfg_s def _sleep(s: float) -> None: try: time.sleep(s) except KeyboardInterrupt: raise def test_all_channels(driver: RelayDriver, on_time: float = 1.0, off_time: float = 0.5) -> None: """ Tüm röle kanallarını sırayla: - ON (on_time saniye) - OFF (off_time saniye) yaparak test eder. """ print("\n=== Tüm kanalların sırayla test edilmesi ===") channels = sorted(driver.channels()) if not channels: print("⚠️ Tanımlı kanal yok (RELAY_GPIO boş?).") return for ch in channels: print(f"\n→ Kanal: {ch} -> ON") driver.set_channel(ch, True) _sleep(on_time) print(f"→ Kanal: {ch} -> OFF") driver.set_channel(ch, False) _sleep(off_time) print("\n✅ Kanal döngüsü tamamlandı.\n") def test_burner(driver: RelayDriver, burner_id: int, on_time: float = 1.0, off_time: float = 0.5) -> None: """ Belirli bir brülör grubunu test eder: - Igniter ON/OFF - default pompalar ON/OFF Burner grubu bilgisi config_statics.BURNER_GROUPS'tan gelir. """ burners = driver.burners() if burner_id not in burners: print(f"⚠️ Burner id {burner_id} tanımlı değil.") return info = burners[burner_id] name = info.get("name", f"Burner{burner_id}") loc = info.get("location", "-") print(f"\n=== Brülör Testi: #{burner_id} - {name} @ {loc} ===") # Igniter test print("\n→ Igniter ON") driver.set_igniter(burner_id, True) _sleep(on_time) print("→ Igniter OFF") driver.set_igniter(burner_id, False) _sleep(off_time) # Default pompalar enabled_pumps = driver.enabled_pumps(burner_id) if not enabled_pumps: print("⚠️ Bu brülör için default (default=1) pompa tanımlı değil.") else: print(f"\nDefault pompalar: {enabled_pumps}") for pname in enabled_pumps: print(f"\n→ Pompa {pname} ON") driver.set_pump(burner_id, pname, True) _sleep(on_time) print(f"→ Pompa {pname} OFF") driver.set_pump(burner_id, pname, False) _sleep(off_time) print(f"\n✅ Brülör #{burner_id} testi tamamlandı.\n") def main(burner_id: Optional[int] = 0) -> None: print("RelayDriver yükleniyor…") drv = RelayDriver() drv.summary() # Önce tüm kanalları hızlıca test et test_all_channels(drv, on_time=0.7, off_time=0.3) # Eğer config'te burner grubu varsa, onu da test et burners = getattr(cfg_s, "BURNER_GROUPS", {}) if burners and burner_id is not None and burner_id in burners: test_burner(drv, burner_id=burner_id, on_time=1.0, off_time=0.5) else: print("\nℹ️ BURNER_GROUPS boş veya burner_id geçersiz; brülör test atlandı.\n") print("Tüm röle testleri bitti. Tüm kanalları kapatıyorum…") drv.all_off() print("✅ Röleler güvenli moda alındı.") if __name__ == "__main__": try: main(burner_id=0) except KeyboardInterrupt: print("\nKullanıcı tarafından kesildi, röleler kapatılıyor…") try: drv = RelayDriver() drv.all_off() except Exception: pass print("Çıkış.")