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 . Obsługa Button w SuplaDevice też będzie rozwinięta o wykrywanie wieloklików, dłuższego przytrzymania itd. Na chwilę obecną tego jeszcze nie ma.
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