A jak całość działa i w gdzie jest przydatna(?)
Te urządzenia w domu które dało się podłączyć są wpięte w sterownik: oświetlenia zewnętrzne i wewnętrzne, akwarium, alarm, siłowniki bramy, sygnalizacje, itd. Tam gdzie przewodów wcześniej nie przewidziałem użyta jest transmisja 2.4GHz i dostęp przez mysensors.
Możliwość kontrolowania całości skryptem pozwala na sporą elastyczność... według potrzeb. Przykładowo oświetlenie zewnętrzne działa wg:
- włączone zawsze między 23 a 5 rano
- oraz dodatkowo jeżeli poziom oświetlenia spadnie poniżej 20% (czujnik natężenia światła na fotorezystorze jest wyskalowany od 0-100%) również jest zapalone
Bardziej złożona jest np. kontrola zasilania. Pod sterownik podłączony jest kontroler obsługi paneli fotowoltaicznych (PV - 4x85W) z niedużym buforem w postaci akumulatorów żelowych (6 x 7.2Ah 12V). Kontroler oprócz odczytu prądów (ładowania, poboru, PV) i napięć ma również:
- przełączać urządzenia z sieci elektrycznej na PV w zależności od naładowania bufora i ew. nadwyżki z PV
- odłączać kolejne urządzenia (zaczynając od tych z najmniejszym priorytetem) w chwili sytuacji braku prądu w sieci (tak by te najważniejsze mogły pracować na podtrzymaniu)
- wykorzystać maksymalnie prąd z PV - w sytuacji, gdy wszystkie urządzenia są podłączone pod PV i jest nadwyżka energii, załączane są kolejne LEDy w akwarium
![]() |
| (kontroler PV pomimo, że jest blisko komunikuje się za pomocą NRF24 i mysensors) |
Do części urządzeń jest dostęp za pomocą SMS'ów, w skrypcie jest to zrealizowane w taki sposób:
# Polecenie GSM
sms_polecenie = gsmreceive(1)
sms_telefon = gsmgetnr(1)
# (...)
if (wej_alarm_uzbr)
{
if (wyj_alarm_ster)
wyj_alarm_ster = wyj_alarm_ster ^ sms_polecenie == "alarm"
else
{
# (...)
A wysyłanie sms'ów dla konkretnych zdarzeń w sposób następujący:
# (...)
if (czy_godzina_9_dnia_powszedniego_licznik == 0)
{
czy_godzina_9_dnia_powszedniego_licznik = 1
gsmsend("Przypomnienie - alarm nie jest uzbrojony", "")
}
# (...)
I tak za pomocą telefonu jest dostęp do sterownika:
SMSy nie są zbyt wygodne przy wysyłaniu długich raportów i do nich użyłem maila. Każdy mail oprócz opisu zdarzenia przekazuje statystykę:
- z wejść analogowych za dzień bieżący oraz poprzedni
- "zrzut" wszystkich zmiennych skryptu (zarówno "pamięciowe" jak i fizyczne)
- dla każdego fizycznego wejścia/wyjścia 10 ostatnich wartości wraz z czasem
Statystyka SQL jest tak zrealizowana by można było dokładać kolejne tabelki bez konieczności restartu sterownika. Każde wysłanie maila weryfikuje czy w katalogu aplikacji jest plik SQL o odpowiedniej budowie:
- w pierwszej linii ma komentarz /*STAT*/
- w drugiej linii jest tytuł, który pojawi się w mailu
- od drugiej linii jest zapytanie SQL
I tak dla statystyki dziennej plik ma taką zawartość:
/*STAT*/
/*Minimalne i maksymalne wartości portów analogowych - dzień bieżący*/
select dt.*
,(select time(min(wmin.czas)) from Wartosc wmin {...} minczas
,(select time(max(wmax.czas)) from Wartosc wmax {...} maxczas
from
(
select p.nazwa
,p.PortId
,min(w.wartosc) minwart
,max(w.wartosc) maxwart
,round(avg(w.wartosc), 2) srwart
from Wartosc w
inner join Port p
on p.PortId = w.PortId
where p.typ = 'AN'
and w.czas between date('now') and date('now', '1 days', '-1 seconds')
group by p.nazwa, p.PortId
) dt




Brak komentarzy:
Prześlij komentarz