To już ostatni "stary" element ze starej biblioteki, który doczekał się nowej odsłony

Rolety są w dwóch wariantach "RollerShutter" oraz "BistableRollerShutter". Ten drugi pewnie nie będzie miał wielu fanów

W kodzie dodajemy odpowiedniego includea:
Code: Select all
#include <supla/control/roller_shutter.h>
// lub
#include <supla/control/bistable_roller_shutter.h>
Code: Select all
Supla::Control::RollerShutter *rs1 = new Supla::Control::RollerShutter(PIN_UP, PIN_DOWN, true);
Dodajemy fizyczne przyciski:
Code: Select all
Supla::Control::Button *buttonOpen = new Supla::Control::Button(PIN_BUTTON_OPEN, true, true);
Supla::Control::Button *buttonClose = new Supla::Control::Button(PIN_BUTTON_CLOSE, true, true);
buttonOpen->willTrigger(*rs1, Supla::ON_PRESS, Supla::OPEN_OR_STOP);
buttonClose->willTrigger(*rs1, Supla::ON_PRESS, Supla::CLOSE_OR_STOP);
CLOSE_OR_STOP, OPEN_OR_STOP - najbardziej typowa konfiguracja dla sterowania dwoma przyciskami - wciśnięcie przycisku powoduje ruch w określonym kierunku lub zatrzymanie rolety, jeśli jest w ruchu.
CLOSE, OPEN - powoduje ruch w określonym kierunku. Jeśli roleta porusza się w tym samym kierunku, to kontynuuje ruch, jeśli porusza się w przeciwnym kierunku, to się zatrzymuje i zaczyna poruszać w zadanym kierunku
STOP - zatrzymuje roletę
STEP_BY_STEP - do sterowania roletą przy pomocy jednego przycisku - działa na podobnej zasadzie jak automaty do bram, kolejne wciśnięcia powodują: ruch w dół -> zatrzymanie -> ruch w górę -> zatrzymanie -> itd.
COMFORT_UP_POSITION, COMFORT_DOWN_POSITION - powoduje ustawienie rolety we wcześniej skonfigurowanych pozycjach komfortowych górnej i dolnej. Przykładowo możemy sobie ustawić górną pozycję na 20%, a dolną na 70% i te akcje nam ustawią tak rolety. Czasy komfortowe są ustawiane w programie:
Code: Select all
rs1->configComfortUpValue(20);
rs1->configComfortDownValue(70);
Nie rozmawiałem o tym jeszcze z nikim, ale może takie coś mogłoby być dodane do wszystkich rolet. W połączeniu z obsługą "action trigger" można by np. dłuższym przytrzymaniem przycisku w dół, ustawiać pozycję "komfortowa dół" itd. Jeśli nie, to można to sobie ustawić w programie i może ktoś dorobi do tego GUI

BistableRollerShutter działa identycznie, tylko pracuje na przekaźnikach bistabilnych (podobnie jak BistableRelay). Więc zamiast dawać stały sygnał na przekaźnik, daje krótki impuls na początek ruchu i krótki impuls, aby wyłączyć przekaźnik. Nie wiem czy ktoś ma takie przekaźniki przy roletach, nastomiast ja planuję z tego zrobić "nakładkę" na moje 16 standardowych sterowników do rolet (SRM-10) i udawać przyciski chwilowe do sterowania tym sterownikiem. Trochę na około, ale nie chcę wszystkiego wymieniać.
Ostatnia ważna rzecz: rolety potrzebują pamięci, aby sensownie działały. Bez pamięci gubią przy resecie informację o konfiguracji czasów otwierania/zamykania oraz o aktualnej pozycji. Dlatego pojawiła się wstępna obsługa pamięci EEPROM/Flash oraz FRAM SPI (wymaga zewnętrznej biblioteki Adafruit FRAM SPI).
Dodajemy includey:
Code: Select all
#include <supla/storage/fram_spi.h>
// lub
#include <supla/storage/eeprom.h>
Code: Select all
#define SUPLA_STORAGE_OFFSET 0
#define FRAM_CS 43 // pin for FRAM CS
// Hardware SPI
Supla::FramSpi fram(FRAM_CS, SUPLA_STORAGE_OFFSET);
// Software SPI
Supla::FramSpi fram(24, 22, 23, FRAM_CS, SUPLA_STORAGE_OFFSET); // <- sofrware spi, piny (SCK, MISO, MOSI, CS)
// EEPROM / Flash
Supla::Eeprom eeprom(SUPLA_STORAGE_OFFSET);

W tej chwili zapis do EEPROM/Flash jest robiony co 10 s, ale zapisuje tylko, gdy jest taka potrzeba. Ten domyślny czas będzie wydłużony (pewnie na 3 min - tak jak to wcześniej robiłem na liczniku impulsów). EEPROM/Flash trzeba oszczędzać, bo z reguły działa do około 100 000 zapisów. Dlatego wszystkim polecam doinstalować sobie pamięć FRAM (aktualnie wspieramy Adafruit FRAM SPI - jeśli ktoś ma inną kostkę, to dajcie znać). FRAM jest praktycznie niezniszczalny i bardzo szybki. Dlatego tutaj zapis jest realizowany co 1 s (o ile jest taka potrzeba).
Także testując resety, miejcie na uwadze te czasy. Jak za szybko zresetujecie, to może być stan jeszcze nie zapisany