Kod z obsługą 16 kanałów rolet, integracją z Supla Cloud i automatycznym odczytywaniem kodów z pilota Somfy RTS Telis 16
Code: Select all
import gui_generic as gui
import somfy_rts as somfy
import cc1101
import supla_cloud as supla
# Ustawienia
SOMFY_DEVICE_IDS = [] # Lista ID urządzeń Somfy (16 elementów)
SOMFY_RTS_KEYS = [] # Lista kluczy RTS Somfy (16 elementów)
SUPLA_DEVICE_IDS = [12345, 12346, ..., 12360] # Lista ID urządzeń Supla (16 elementów)
CC1101_SPI_MOSI = 23 # Numer pinu GPIO SPI MOSI
CC1101_SPI_MISO = 19 # Numer pinu GPIO SPI MISO
CC1101_SPI_SCLK = 18 # Numer pinu GPIO SPI SCLK
CC1101_SS = 5 # Numer pinu GPIO SS
# Definicja funkcji sterowania
def steruj_roleta(kanal, kierunek):
if kierunek == "góra":
somfy.send_command(SOMFY_DEVICE_IDS[kanal], somfy.SOMFY_RTS_UP)
supla.update_device_state(SUPLA_DEVICE_IDS[kanal], "position", 100)
elif kierunek == "dół":
somfy.send_command(SOMFY_DEVICE_IDS[kanal], somfy.SOMFY_RTS_DOWN)
supla.update_device_state(SUPLA_DEVICE_IDS[kanal], "position", 0)
elif kierunek == "stop":
somfy.send_command(SOMFY_DEVICE_IDS[kanal], somfy.SOMFY_RTS_STOP)
# Definicja funkcji odczytu kodu
def odczytaj_kod():
# Odbierz kod z pilota
kod = cc1101.receive_code()
# Zapisz kod w pamięci ESP32 lub wyślij do Supla Cloud
# Definicja funkcji programowania pilota
def programuj_pilota(kanal, kod_pilota):
# Ustaw kod pilota w module CC1101
cc1101.send_code(kod_pilota)
# Wyślij komendę programowania do urządzenia Somfy
somfy.send_command(SOMFY_DEVICE_IDS[kanal], somfy.SOMFY_RTS_PROGRAM)
# Definicja funkcji synchronizacji z pilotem
def synchronizuj_z_pilotem(kanal):
# Naciśnij przycisk programowania na pilocie Somfy
print("Naciśnij przycisk programowania na pilocie...")
while not cc1101.data_available():
time.sleep(0.1)
# Odbierz kod z modułu CC1101
kod_pilota = cc1101.receive_code()
# Zapisz kod pilota w pamięci ESP32
print("Kod pilota dla kanału", kanal, ":", kod_pilota)
gui.info("Kod pilota dla kanału {} zapisany.".format(kanal))
# Interfejs użytkownika
gui.Window("Sterowanie roletami Somfy RTS")
for kanal in range(16):
gui.Button("Kanał {} Góra".format(kanal + 1), command=lambda kanal=kanal: steruj_roleta(kanal, "góra"))
gui.Button("Kanał {} Dół".format(kanal + 1), command=lambda kanal=kanal: steruj_roleta(kanal, "dół"))
gui.Button("Kanał {} Stop".format(kanal + 1), command=lambda kanal=kanal: steruj_roleta(kanal, "stop"))
gui.Button("Synchronizuj z pilotem (kanał {})".format(kanal + 1), command=lambda kanal=kanal: synchronizuj_z_pilotem(kanal))
gui.show()