150 lines
4.2 KiB
Python
150 lines
4.2 KiB
Python
# -*- 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ış.")
|