piątek, 31 sierpnia 2018

UPSa dostałem... Jakbym miał za dużo czasu i się nudził ;)

Pojawił się w domu nowy kolega... Trochę już wiekowy, może niezbyt piękny, ale po wymianie baterii działający bardzo dobrze. UPS APC CS 350. Problematyczne było znalezienie kabla transmisyjnego (specjalna, 10 żyłowa 'RJotka' -> USB), ale i z tym sobie poradziłem, za co bardzo dziękuję kolegom.

Dążymy do tego:


A sam UPS wygląda tak :)


Skoro zadziałał grzechem byłoby:
- pozostawienie go samemu sobie,
- odpuszczenie monitorowania
- i oczywiście dodaniu do naszego Smart home ;)

Co prawda w przypadku Raspberry Pi zmieniłem miejsce systemu na HDD, ale poprawienie bezpieczeństwa i stabilności zawsze jest dobrym pomysłem. A do tego - jeżeli braknie prądu to dzieci zawsze będą mogły lekcje odrobić przy lampce, z czego na pewno będą się bardzo cieszyć. Lampka z żarówką 7W wytrzymuje na nim ponad dwie godziny, także czasu będą miały sporo...

Bez zbędnych dyskusji zabieramy się do pracy.

Najpierw odświeżenie repozytorium i instalacja NUT (Network UPS Tools). NUT jest serwisem monitorującym pracę UPS, dbającym o przesyłanie komunikatów do systemu w przypadku przejścia na zasilanie bateryjne, pozwalającym zamknąć system w przypadku spadku poziomu naładowania baterii, itp.

sudo apt-get update && sudo apt-get install nut nut-client nut-server

Po zainstalowaniu wykonujemy komendę

lsusb

i sprawdzamy czy nasz UPS jest widoczny.


Działa, jest widoczny. Świetnie!

Warto na stronie http://www.networkupstools.org/stable-hcl.html sprawdzić czy nasz UPS jest obsługiwany i jaki jest do niego najlepszy sterownik. Szczerym będąc, z APC problemu nie miałem, ale już UPS firmy Eaton nie udało mi się zmusić do podłączenia i zaraportowania statusu. Chociaż sam UPS działał bez problemu.

Ok, jedziemy dalej. Dobrze by było powiedzieć systemowi jaki to jest ten nasz UPS i jakim sterownikiem się do niego dostaniemy.

W przypadku NUT, pliki które zaraz będziemy edytować są bardzo dobrze udokumentowane. Przy każdej opcji mamy kilka przykładów, wyjaśnienia, itp. W Waszym przypadku UPS zapewne będzie inny, może inny model, musicie wybrać odpowiednie sterowniki i podejście. Z tego co widzę w sieci - APC sprawia najmniej problemów.

W tym celu, edytujemy

sudo nano /etc/nut/ups.conf

Na samym końcu pliku dodajemy/edytujemy:

[apc350]
        driver = usbhid-ups
        port = auto
        desc = "APC"

WAŻNE jest zapamiętanie tego, co wpisaliśmy w nawias kwadratowy, ponieważ tej nazwy będziemy używać w kolejnych krokach.


Jak widać - eksperymentowałem z kilkoma różnymi.

Kolejny krok - deklarujemy w konfiguracji nut jaki będzie nasz sposób pracy UPSa. W moim przypadku serwer i klient NUT jest na tym samym Raspberry Pi, dlatego wybrałem opcję Standalone.

sudo nano /etc/nut/nut.conf

MODE=standalone


Następnie

sudo upsdrvctl start


Dobrze jest - mamy komunikację.

Być może potrzebne będzie wykonanie:

sudo service nut-server restart


sudo service nut-client restart

Przed

sudo service nut-server status

Serwer wystartował, jest w porządku.


Komenda jak poniżej (UWAGA, używamy nazwy, którą zdefiniowaliśmy w konfiguracji!) poda nam parametry i status UPSa.

upsc apc350


So far so good, jak to mówią. Teraz musimy skonfigurować monitor, który w razie braku prądu zamknie komputer, gdy serwer NUT mu rozkaże.

Użytkownicy (tam gdzie XXXXX podajecie swoje hasło. W sumie to i XXXXX możecie zostawić ;) ):

sudo nano /etc/nut/upsd.users

[admin]
        password = XXXXX
        actions = SET
        instcmds = ALL
[upsmon]
        password  = XXXXX
        upsmon master


I później przechodzimy do wieeeelkiego pliku

sudo nano /etc/nut/upsmon.conf

Ale na szczęście interesują nas w nim wyłącznie dwie sekcje:

MONITOR apc350@localhost 1 upsmon XXXXX master

Zamiast XXXXX oczywiście Wasze hasło

I dla testów możemy włączyć powiadamianie na ekranie. Będziemy widzieć co się dzieje:

NOTIFYFLAG ONLINE      SYSLOG+WALL
NOTIFYFLAG ONBATT      SYSLOG+WALL


A tutaj komenda, która wykona się, gdy będzie już trzeba zamknąć system, ponieważ bateria już ledwo zipie:


Później uprawnienia do plików:

sudo chown nut:nut /etc/nut/*
sudo chmod 640 /etc/nut/upsd.users /etc/nut/upsmon.conf

W sumie jesteśmy już gotowi, z ciekawostek, po wpisaniu komendy jak poniżej dostaniecie listę komend Waszego UPS. Jak widać - wyłączenie głośnika, wyciszenie, restart UPSa, testowanie baterii, itp.

sudo upscmd -l apc350


Na przykład wyłączenie pikania po przejściu na baterię (już rodzinę raz obudził gdy zabrakło prądu) to:

upscmd apc350 beeper.mute

Po tym wszystkim restart serwera i klienta. UWAGA - możliwe, że i wcześniej będziecie musieli wykonać sudo reboot, aby UPS był widoczny i serwisy wstały.

sudo service nut-server restart
sudo service nut-client restart

Po brutalnym wyjęciu kabla zasilającego testy wypadły pozytywnie :)


Jeszcze tylko

sudo nano /etc/nut/upsd.conf

Aby serwis wiedział gdzie ma nasłuchiwać:


 LISTEN 127.0.0.1 3493
 LISTEN 192.168.1.200 3493

192.168.1.200 to adres mojego Raspberry Pi.

Cudownie! Wszystko skonfigurowane, działa!

No to teraz Domoticz, żeby jeszcze było wizualnie pięknie (chociaż zdania są podzielone, ale co tam ;) )

Z poziomu konsoli i folderu Domoticz wykonujemy co następuje:

cd plugins
mkdir NUT_UPS
sudo apt-get update
sudo apt-get install git
git clone https://github.com/999LV/NUT_UPS.git NUT_UPS
cd NUT_UPS
sudo chmod +x plugin.py
sudo /etc/init.d/domoticz.sh restart

W sekcji Hardware pojawił mi się plugin UPS Monitor. Konfigurujemy go podając nasze parametry (IP, port, oraz nazwę w serwerze NUT, którą skonfigurowaliśmy - u mnie apc350)


I mamy:


Po chwili w zakładce Devices zaczną nam się pojawiać dane z UPSa:


I już później w Domoticz:


Kolejna wykonana praca! Teraz mogę spać jeszcze spokojniej, mniej obawiając się o to, że Raspberry Pi nie wstanie przy kolejnym braku/zaniku/chwilowej przerwie prądu.

poniedziałek, 27 sierpnia 2018

Smart home, Domoticz, Raspberry - z czym się to je

Czytając swojego bloga (serio - czytam czasem co naskrobałem dwa lata temu, aby poprawiać 'warsztat') doszedłem do wniosku, że nie zrobiłem nawet małego wstępu dla amatorów tematów Smart house i Raspberry Pi. Odgórnie przyjąłem, że wszyscy już wiedzą o co chodzi i od razu, 'z grubej rury' przystąpiłem do opisywania tematów. Czasem dość trudnych.

Przy okazji rozpoczęcia strony na Facebook, dotarło do mnie, że nie mam co wrzucić jako początek, jak zainteresować ludzi, wytłumaczyć podstawy. Temu właśnie posłuży ten wpis.

Zaczynamy!


Designed by Freepik

Smart home, smart home, IoT, IoT. Bardzo głośne ostatnio tematy. Czyli tak zwane 'Inteligentne domy'. Osobiście wolę termin 'Sterowane', 'Odpowiednio sterowane' lub 'Automatyczne'. Inteligencję rezerwuję dla tworów żywych.

Dom taki na podstawie czujników czy też informacji z zewnątrz (na przykład pogodowych) potrafi odpowiednio się 'dostosować' do naszych potrzeb.

Dość często wymienia się tutaj przykłady:
- uruchomienia podlewania gdy prognozowany jest brak opadów przez kilka dni,
- automatyczne otwieranie rolet/markiz o poranku
- czy też domykanie ich, gdy słońce świeci akurat w konkretne okno,
- sterowanie ogrzewaniem w domu gdy nas nie ma
- lub ustawianie zadanej temperatury, bo akurat wcześniej wracamy z pracy/wyjazdu,
- inteligentne monitorowanie posesji - jeżeli kurier dzwoni wideofonem przy bramie - wyślij zdjęcie i jeżeli potrzeba - otwórz mu furtkę aby nie bawił się w ogrodową koszykówkę przesyłką,
- ustawianie natężenia świateł w zależności od potrzeb - czytanie/oglądanie filmu/pełna jasność
- łączenie powyższych elementów w sceny - jeżeli wybieram tryb Kino - rozwiń ekran, włącz amplituner, wyłącz światła
- sterowanie głosowe
- powiadamianie głosowe/sms/e-mail

Wszystkie te elementy można zrealizować 'na bogato' zlecając je wyspecjalizowanej firmie, lub hobbystycznie. Temu drugiemu podejściu dedykowany jest blog. Niestety, podczas budowy domu popełniłem kilka błędów, jednym z nich było pociągnięcie zbyt małej ilości kabli do przesyłania danych, 'bo przecież teraz wszystko po WiFi'. Wymusiło to (na ponowne kucie ścian i remonty nie mam ochoty) ustawienie zainteresowania na transmisję bezprzewodową.

Nie jestem profesjonalistą w tym temacie. Cały czas mnóstwo się uczę i wiele tematów jeszcze przede mną. Jeżeli coś jednak zaczynam i mnie wciągnie - 'nie ma zmiłuj' - nie będę spał, ale temat muszę rozgryźć a problemy usunąć. Kropka.

Dlatego zainteresowały mnie platformy Raspberry Pi, Wemos, Arduino. Stąd już krok do komunikacji 433MHz, WiFi, ZigBee, Z-Wave. Czujniki temperatury, wilgotności, zalania, dymu, monitorowanie zużycia energii. Internetowe prognozy pogody, dane w formacie JSON. Temat jest niesamowicie rozległy i ciężko powiedzieć: 'To jest jedyne dobre rozwiązanie'.

Są systemy płatne, kompleksowo zamykające temat przez autoryzowanych instalatorów - Fibaro, Grenton to tylko przykłady polskich rozwiązań, na rynku jest ich mnóstwo. Oferują sterowanie światłem, ogrzewaniem, bezpieczeństwem, czujnikami. Są jednak relatywnie drogie (oczywiście punkt widzenia każdej osoby będzie się różnił) oraz zamknięte, jeżeli chodzi o sposób zaimplementowanych rozwiązań.

Osobiście szukałem systemu darmowego aby sprawdzić, czy Smart home się w ogóle u mnie przyjmie, czy jest sensowny. Patrząc z perspektywy czasu - jak najbardziej tak! Do tego przydałoby się oprogramowanie, które to wszystko zepnie, odczyta dane z czujników, prześle do przekaźników, zapisze do bazy danych, umożliwi analizy, reakcję.

Mój wybór padł na Domoticz. Trzy lata temu 'próg wejścia' w jego przypadku był niższy niż w Home assistant. Aktualnie coraz częściej rozważam opuszczenie Domoticz, albo chociaż na pewien czas równoległe sprawdzenie Home assistant. Wydaje się platformą stabilniejszą, bardziej rozwojową ze względu na sposób jego budowy. Aktualnie jednak - Domoticz!

Dla osób początkujących ważna jest również kolejna informacja - oba systemy są darmowe, możliwe do zainstalowania na Raspberry Pi, komputerach/serwerach obsługujących Linux, Windows, MacOS. Nie nie ryzykujecie zaczynając przygodę ze Smart home.


Dlaczego akurat on?
- po zainstalowaniu na Raspberry Pi (i nie tylko) można go od razu używać, bez dodatkowych skryptów
- dla początkujących praktycznie wszystko da się wyklikać
- bogaty zbiór urządzeń, które są obsługiwane
- na tamten czas dość ładny interface użytkownika

Porównując koszty, są od 5 do 10 razy mniejsze niż przy rozwiązaniach dedykowanych, nadmieniam jednak, że spędziłem mnóstwo czasu ucząc się, dostrajając elementy do swoich potrzeb, instalując, testując. Nie każdy ma ochotę na takie hobby. Mnie akurat wciągnęło.

Kilka przykładów:


Dashboard (czyli główny pulpit). Z tego miejsca mogę sprawdzić status tego co się dzieje w domu - kamery, gniazdka, włączone urządzenia.


Przełączniki - światła, sterowanie IR (TV, wzmacniacz), gniazdka zdalnie włączane, LEDy, system audio multi room


Sceny - połączenie kilku elementów w łańcuch zdarzeń. Jeżeli oglądamy film, to wyłącz światła, włącz amplituner, subwoofer...


Temperatura - dane z każdego z czujników. Łącznie z wilgotnością.


Elementy użytkowe - status użycia Raspberry Pi, szybkość łącza internetowego, nawodnienie kwiatów, pobór prądu w domu


Domoticz umożliwia również robienie raportów w formie graficznej. Tutaj - wykres temperatury na zewnątrz


Ustawianie warunków włączenia/wyłączenia. Tutaj - Włącz światła przed domem godzinę po zachodzie słońca i wyłącz zawsze o 22:00.


Warunki powiadamiania. Tutaj - Jeżeli włączy się światło przed domem - wyślij e-mail na żądany adres

Jeżeli prezentacja danych w Domoticz nam nie odpowiada, zawsze można doinstalować dodatkowe systemy zbierające i prezentujące dane. Na przykład InfluxDB i Grafana.


Zachęcam do przeczytania poprzednich wpisów, postarałem się ułożyć opisane już tematy w pewne pakiety tematyczne:

- Przede wszystkim - Domoticz
- Systemy audio multi-room - Logitech media server, Max2Play
- Zdalny dostęp do Raspberry i Domoticz - Dataplicity
- Czujniki otwarcia/zamknięcia drzwi - Kerui
- Centralki obsługujące różne transmisje: RFLink, Xiaomi Mijia Smart Home
- Prezentacja danych/sterowania elementami domu: Dashticz, aplikacja Pilot, aplikacja MiHome
- Monitorowania zużycia energii: Owl Micro +
- Sterowanie głosem - Amazon Alexa - Echo Dot, Skille, Kalendarze
- Chipy ESP8266 - Wemos D1 Mini
- Instalacja, konfiguracja: Raspberry, Domoticz
- BLE - Bluetooth Low Energy - Mi flora
- Przełączniki Sonoff - Basic, POW, S20
- Sterowanie oświetleniem - włączniki Xiaomi, Milight
- Piloty uniwersalne IR - Broadlink
- czujnik smogu
- Zdarzenia, powiadamianie - bezpośrednio w interface Domoticz, skrypty
- pourlopowe wnioski

Nie twierdzę, że moja ścieżka jest jedyną dobrą. Ile osób, tyle możliwych rozwiązań, pomysłów, różnorakich podejść. Eksperymentujcie, sprawdzajcie!

Pozdrawiam, życząc miłej i przyjemnej lektury
Cezar

P.S. Życzę również dużo myślenia, potu, zastanawiania się czemu nie działa, szukania rozwiązań problemów.

wtorek, 21 sierpnia 2018

A a a a a, Ataaaari. Wspomnień czar.

Ehhh... Nostalgia człowieka dopadła. Odebrałem właśnie z serwisu moje Atari 65XE. Przeszło z moich rąk do kuzyna, później wróciło do mnie. Przeleżało dość długo na strychu, później okazało się, że padł ROM i RAM. Na szczęście są jeszcze ludzie, którzy zajmują się reanimowaniem takich sprzętów (pozdrawiam Pana Jacka Zimę o pseudonimie Winter). Wymienił szybko, bezboleśnie dla pacjenta.

Z pewną dozą obawy podłączyłem go do telewizora...


Ale komputer ruszył bez problemu, mogłem się również wykazać w kwestii zdolności programistycznych ;)


Kultowy (jak dla mnie przynajmniej) Self test również zagrał znaną muzyczkę, przypomniał kolory.

To też ciekawa kwestia, bo nie każdy zapewne pamięta, że:
1. Nie wszyscy wtedy jeszcze mieli kolorowe telewizory
2. Jeżeli nawet mieli, to okupowali go często domownicy i nie można było sobie pograć w kolorze, bo rodzice przeganiali...
3. Miałem do niego dedykowany monitor monochromatyczny, także gry i dema raczyły mnie odcieniami ZIELENI. Do tego - czasem mu 'padała synchronizacja' i trzeba było go mocno walnąć od góry, aby zaczął poprawnie działać.

O, chyba taki miałem:






Powyżej komplet wraz z joystickiem Megaboard. Był takim moim marzeniem, które długo pielęgnowałem po zobaczeniu reklamy w Bajtku albo Top Secret. Długo zbierałem na niego pieniądze, kupiłem na giełdzie w Katowicach. Miał licznik czasu 'w dół', 'w górę', slow motion i auto fire. Które nigdy się nie przydały, ale co tam - chciałem go mieć. Okazał się niezbyt ergonomiczny, ale co tam - się grało!


Powyżej kolejny 'znak czasu' - składanki na kasetach. To akurat 'Zestaw programisty'. Polecam zwrócić uwagę na 'profesjonalne' opisy do nich. I mityczne: 'Więcej informacji znajdziesz w opisach programów'. Ciekawe czy była w Polsce osoba, która takie opisy wtedy miała...


Kolejna domena komputerów Atari i Commodore - cartridge. Czyli karty, na których wgrane 'na sztywno' były gry czy też programy użytkowe. Dzięki temu uruchamiały się błyskawicznie. Starsi zapewne pamiętają, że szybkość magnetofonu Atari była dramatyczna - 600 bodów (czyli bitów) na sekundę. Przez co niektóre gry 'wgrywały się' i ponad 20 minut. Z tego to powodu montowano 'Turbo', czyli sprzętowe przeróbki magnetofonu. Ja miałem Blizzard. W początkowej fazie należało najpierw załadować loader do 'Turbo' w 'Normalu' i dopiero później grę w 'Turbo'. Pamiętam, że miałem kasetę z kilkudziesięcioma jednostkami na taśmie (wtedy gry liczyło się na jednostki obrotów licznika magnetofonu) i na niej wyłącznie same loadery. Cartridge eliminował tą uciążliwość - miałem po prostu wtedy loadery zapisane na nim. Z tego co kojarzę - Universal loader ładował zdecydowaną większość. Commodore miał swojego Black box'a, ale to był przeciwny front barykady ;)

Kultowe 'ciszej, bo się nie wgra' uderzy mnie zapewne jesienią, kiedy mam ochotę przejrzeć zawartość kaset, bo 'zgubił się' zeszyt z opisem ich wszystkich...

niedziela, 19 sierpnia 2018

Dzisiaj śledzimy niebo i to co nad nami lata... A do tego nawet to wyświetlimy!

Wczoraj w nocy bawiłem się w detektywa ;) Śledziłem samoloty... Czyli nic nielegalnego, można powiedzieć - niestety. 

Łukasz Jokiel z zaprzyjaźnionego bloga opisywał sposób budowy swojego odbiornika ADS-B. Pomysł świetny, czemu nie. Ale kolega (ponownie pozdrowienia dla Macieja), zasugerował mi inny projekt - zdecydowanie prostszy w realizacji.

Postanowiłem dodać kolejny bardzo długi post. Love it or hate it, ale będzie dużo czytania. Wydaje mi się jednak, że czasem nawet warto przejść po raz kolejny pewne zebrane w innych miejscach tematy dla przypomnienia.

Nad moją miejscowością lata dużo samolotów, co często podziwiamy z dzieciakami. Kolejnym gadżetem z serii 'Nie jest mi to do niczego potrzebne, ale warto to zrobić' jest informacja o przelatujących nad nami samolotach z wykorzystaniem Wemos D1 Mini oraz wyświetlacza OLED SSD1306. Przy okazji nauczymy się wiele rzeczy! Wstyd się przyznać, ale sam kilka tematów robiłem po raz pierwszy w życiu.

W tym wpisie przewiną się między innymi:
- Wemos D1 Mini
- OLED SSD1306
- pakiet Arduino IDE do obsługi Arduino i innych platform
- GitHUB
- ładowanie sketch'y (i co to w ogóle jest)
- kompilacja
- wgrywanie skompilowanego kodu na docelową platformę

Czyli dużo tematów. Gdzie nie sięgniesz tam sprawa zaczyna mieć zawsze jakieś głębokie korzenie :)

Efekt finalny będzie wyglądał jak na zdjęciu poniżej:

Oczywiście wiem, że jest FlightRadar24. Trzeba jednak siedzieć z komórką, albo otwartym komputerem, a my będziemy mieli informację na bieżąco wyświetloną na ekranie. No i zrobimy coś sami, dużo się przy okazji ucząc.

Wemos D1 Mini (i jego klony) jest już bardzo popularnym urządzeniem, do tego tanim. 
2-3 dolary za platformę:
- opartą o ESP-8266, 
- kompatybilną z Arduino, NodeMCU, MicroPython, 
- posiadającą WiFi i 
- posiadającą dużą bazę 'shieldów' (czyli 'nakładek' rozszerzających funkcjonalność) 
jest ceną naprawdę niską, nawet dla samej zabawy i poznania nowych możliwości.

Wyświetlacz to już kwestia 20 PLN, to również jednak moim zdaniem nie jest wielką barierą.

Zaczniemy od czegoś prostszego - wyświetlimy tekst na ekranie.

Podłączamy jak poniżej:

 


Jak widać, jest to banalnie proste:
GND -> GND
VCC -> 3.3V
SCL -> D1
SDA -> D2 

I to tyle jeżeli chodzi o Hardware. Super!

Przechodzimy do oprogramowania. Zaczynamy od Arduino IDE: https://www.arduino.cc/en/Main/Software. Alternatywą jest PlatformIO, nawet w przypadku tego projektu jest to ciut prostsze, ale skupmy się na ten moment na Arduino IDE.

Po pierwsze podłączamy D1 Mini to komputera. I teraz UWAGA - już kilka razy przekonałem, się, że dużo zależy od kabla USB -> Micro USB. Ileż razy kląłem, gdy sprzęt nie chciał się pojawić na liście, a wystarczyło wymienić kabel na porządny. Gdy już pojawi się nam nowy port COM, wypełniamy w sekcji Tools w Arduino IDE następujące parametry:


Chcemy połączyć się z ekranem OLED, a do tego będą nam potrzebne dodatkowe biblioteki. Przechodzimy do Sketch -> Include Library -> Manage Libraries.


Wyszukujemy dwie z pakietu Adafruit:
- Adafruit GFX
- Adafruit SSD1306
wybieramy je i instalujemy. Opcja będzie dostępna po ich zaznaczeniu.

Trzecia jaka jest konieczna to:
- ESP8266 OLED driver for SSD1306 autorstwa Daniela Eichhorna



Świetnie, brawo! Jesteśmy gotowi.

Czym jest sketch? Niczym więcej jak programem, który musimy napisać, później skompilować na język maszynowy i wgrać do naszego modułu.

Otwórzcie nowy plik i wklejcie poniższe. Nie wgłębiamy się w każdą z bibliotek, bo to mogłoby nam zająć miesiące ;), na ten moment wykorzystamy tylko to, czego potrzebujemy.


#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 0  // GPIO0
Adafruit_SSD1306 OLED(OLED_RESET);

void setup()   {
  OLED.begin();
  OLED.clearDisplay();

  //Dodajemy elementy do 'display listy'
  OLED.setTextWrap(false);
  OLED.setTextSize(1);
  OLED.setTextColor(WHITE);
  OLED.setCursor(0,0);
  OLED.println("Cezarowy blogspot");

  OLED.display(); //wyświetl zawartość pamięci ekranu na ekran 
  OLED.startscrollleft(0x00, 0x0F); //make display scroll 


void loop() {
}

Można wybrać Verify/Compile, co wyłącznie skompiluje nasz program, można od razu Upload, co wymusi kompilację i załaduje skompilowany sketch do D1 Mini.


Cierpliwie czekamy na zakończenie kompilacji...

I załadowanie programu do D1 Mini...


I od razu efekt!


Skoro proste tematy mamy za sobą, ruszamy od razu z czymś trudniejszym. A co! Do odważnych świat należy!

Po pierwsze, kolejne dwie biblioteki do pobrania. WiFiManager i biblioteka do parsowania (czyli czytania i przetwarzania) plików JSON.



Od razu piszę, że pomysł i kod nie jest mój, dostosowałem znaleziony przez Macieja kod do swoich potrzeb.

Zacznijmy od tego, że skorzystaliśmy z biblioteki Weather Station opracowanej przez zespół ThingPulse. W ramach dostępnych w niej przykładów znajduje się kod PlaneSpotterDemo, który przerobimy na nasze potrzeby.

Ze strony https://github.com/ThingPulse/esp8266-weather-station pobieramy ZIP z biblioteką, którą trzeba rozpakować do folderu jak poniżej.



Restart Arduino IDE i już mamy w Examples dostępny kod PlaneSpotterDemo.


U mnie potrzebny był 'delikatny' tuning.

W parametrach wywołania strony, która pokazuje JSON trzeba podać promień okręgu jaki mamy sprawdzać, oraz jeżeli chcecie - wysokość graniczną samolotów Od/Do.

Przy okazji dowiecie się jak wyglądają pliki JSON, które można później obrabiać, czytać i zapisywać na przykład w Domoticz.

Na przykład:
https://public-api.adsbexchange.com/VirtualRadar/AircraftList.json?lat=LATZDomoticz&lng=LongZDomoticz&fDstL=0&fDstU=12, gdzie fDstL i fDstU oznacza odległość Od/Do jaka nas interesuje.

Kolejny: fDstL=0&fDstU=12&fAltL=5000&fAltU=45000 interesują nas samoloty, które są w odległości od zera do 12 kilometrów, na wysokości od 5 do 45 tysięcy stóp.

Aby zobaczyć co lata obok lotniska na Balicach, wystarczy sprawdzić adres: https://public-api.adsbexchange.com/VirtualRadar/AircraftList.json?lat=50.0769780&lng=19.7881190&fDstL=0&fDstU=100

W ogóle - nazwy parametrów to jak widać fDst, L oraz U oznacza limit dolny oraz górny, S - zaczynający się od - jeżeli szukacie konkretnych modeli samolotów. Itd., itp. Dokładna dokumentacja wszystkich parametrów znajduje się pod adresem: http://www.virtualradarserver.co.uk/Documentation/Formats/AircraftList.aspx

Aplikacja o której tutaj mówimy pobiera właśnie dane z tej strony, przetwarza je, zapisuje w odpowiednich zmiennych i wyświetla na ekranie OLED.

Aby być pewnym, że moje parametry są poprawne, uruchamiam na jednym ekranie https://global.adsbexchange.com/VirtualRadar/desktop.html z moją okolicą, na drugim odświeżam wyniki https://public-api.adsbexchange.com/VirtualRadar/AircraftList.json?lat=50.0769780&lng=19.7881190&fDstL=0&fDstU=100 (podajecie oczywiście swoje współrzędne). Wtedy wiem, że to co mam na mapie pokrywa się z tym, co zawierają dane w formacie JSON.




Aby program zadziałał musimy prowadzić kilka zmian.

Po pierwsze, mam ekran SSD1306, także usuwam komentarz (czyli //) z jednej linii i komentuję tą z SH1106.

#include "SSD1306Wire.h"
//#include "SH1106Wire.h"

const String QUERY_STRING = "lat=LatZDomoticz&lng=19.562571&fDstL=0&fDstU=12";

Autor podłącza piny trochę inaczej niż ja, również musiałem to zmienić.

//const int SDA_PIN = D3;
//const int SDC_PIN = D4;
const int SDA_PIN = D2;
const int SDC_PIN = D1;

SSD1306Wire     display(I2C_DISPLAY_ADDRESS, SDA_PIN, SDC_PIN);
//SH1106Wire      display(I2C_DISPLAY_ADDRESS, SDA_PIN, SDC_PIN);

Autor korzysta z biblioteki WiFiManager i stara się automatycznie podłączyć do dostępnej, otwartej, sieci. Ja musiałem się podłączyć do swojej, opatrzyłem więc komentarzem następujące linie i podałem w funkcji WiFi.begin swoje dane sieci - nazwę i hasło.

//  WiFiManager wifiManager;
// Uncomment for testing wifi manager
//wifiManager.resetSettings();
//  wifiManager.setAPCallback(configModeCallback);

//or use this for auto generated name ESP + ChipID
//  wifiManager.autoConnect();

//Manual Wifi
  WiFi.begin("WiFiID", "Password");
//  String hostname(HOSTNAME);
//  hostname += String(ESP.getChipId(), HEX);
//  WiFi.hostname(hostname);

  // Setup OTA
//  Serial.println("Hostname: " + hostname);
//  ArduinoOTA.setHostname((const char *)hostname.c_str());
//  ArduinoOTA.onProgress(drawOtaProgress);
//  ArduinoOTA.begin();

Kompilacja powinna przejść bez problemu, ładowanie identycznie jak w przypadku pierwszego przykładu również.

TADAM! Mamy, działa, pokazuje!

Tak w sumie posiadając ekran otwierają się przed nami nowe możliwości eksperymentowania - z samych przykładów można się mnóstwo nauczyć i robić swoje małe (albo i duże) projekty.

Postaram się rozszerzyć ten wpis o kolejny, w którym dane wylądują w Domoticz, ale tak prawdę mówiąc, to muszę się tego najpierw sam nauczyć :D




Powodzenia! Pozdrawiam serdecznie!