piątek, 9 marca 2018

W działaniu


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