ebuild_rasp2/ebuild/tools/relay_test.py

150 lines
4.2 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- 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ış.")