Po długich namysłach kupiłem nową stację (trzeba się rozwijać) pn DP 1500 SmartHub wifi Gateway (za 50 EUR). Jest to konsola bez ekranu z czujnikiem temperatury/ciśnienia i wilgotności (na metrowym kablu); przedmiot wielkości dużego pudełka od zapałek. Do tego pudełka dokupiłem:
- czujnik temperatury i wilgotności powietrza HP3000 (aka DP 50)
- maszt z zestawem czujników ('WH4000SE All-in-One outdoor sensor) do pomiaru prędkości/kierunku wiatru, opadów, indeksu UV, promieniowania słonecznego (solar radiation)
- czujnik pyłów PM2.5 DP 200
Cenowo to wyszło tak (por www.froggit.de), że maszt + DP 1500 jest w zestawie za 135 EUR (czyli sam maszt kosztuje 85 EUR); czujnik DP 50 to następne 13 EUR (kupiłem dwa na wszelki wypadek); czujnik DP 200 aż 90 EUR. Razem wyszło około 250EUR czyli ponad 1100 PLN z wysyłką i płatnością przez PayPal, bo innej opcji nie ma (nikt nie mówił że będzie tanio)
Wszystko w niemieckiej firmie Froggit. BTW Froggit to klon produktów bardziej znanej firmy Ecowitt. To co Froggit sprzedaje jako DP1500 u Ecowitta nazywa się GW 1000. Są jeszcze inne firmy, które robią ten sprzęt pod inną marką.
W stacjach pogodowych standardem jest teraz wysyłanie danych w chmurę. Nie ma natomiast możliwości bezpośredniego pobierania danych z urządzenia. Co najwyżej można wysłać na własną chmurę. Do tego konfiguruje się urządzenie przez smartfona za pomocą dedykowanej aplikacji pn. WSView
. Ot tak to sobie branża wymyśliła. Średnio mi się to podoba, ale po prostu urządzeń, z których można pobrać bezpośrednio dane w starym stylu się nie produkuje (no nie do końca jest to prawdą: produkuje się to co mam od 10 lat, ale ja nie chę kupować jeszcze raz tej samej stacji). Skoro trzeba mieć własną chmurę, to trzeba ją założyć. Na szczęście ponieważ potrzeba jest matką wynalazków, to w tej sprawie inni ludzie już przygotowali stosowne rozwiązania.
Program weewx
, który tradycyjnie obsługiwał stacje, że tak powiem kablowe został uzupełniony o weewx-interceptor
, który przechwytuje dane wysyłane na (pseudo) własną chmurę.
No więc rozpakowałem to co przyszło z Niemiec. Skręciłem maszt z czujnikami wiatru/deszczu, nasłonecznienia. Czujnik PM2.5 przykręciłem do ściany we wnęce okiennej, żeby deszcz na niego nie kapał. Czujnik DP 50 wstawiłem do klatki meteo. Maszt umieściłem na dachu budynku 3 kondygnacyjnego (nie ma żadnych problemów z zasięgiem, a mieszkam na parterze.)
Ściągnąłem przez Google Play aplikację WSView
. Postępując zgodnie z procedurą (opisaną w podręczniku) połączyłem się z konsolą, która zaczęła pokazywać dane z czujników (na smartfonie). Uwaga: WSView
dość wolno się łączy i na dokładkę wysyła mylące komunikaty o odrzuconych połączeniach, co powoduje pewien niepokój. Nie należy w tym momencie wykonywać nerwowych ruchów, tylko poczekać...
Instalowanie weeWX
(na RaspberryPi)
Mając ustawione połączenie konsola-router można pójść dalej. Znowu jest to dokładnie opisane i co więcej opis jest zgodny ze stanem faktycznym (cf github.com/weewx/weewx/wiki/gw1000-recipe):
Instalujemy weeWX
(wybierając 'Simulator' jako 'station type'). Później należy zmienić 'station type' na 'Interceptor' uruchamiając wee_config --reconfigure
:
wget -qO - http://weewx.com/keys.html | sudo apt-key add - wget -qO - http://weewx.com/apt/weewx.list | sudo tee /etc/apt/sources.list.d/weewx.list sudo apt-get update sudo apt-get install weewx # shut down weeWX sudo /etc/init.d/weewx stop # install weewx-interceptor extension and enable the driver git clone https://github.com/matthewwall/weewx-interceptor.git sudo wee_extension --install weewx-interceptor sudo wee_config --reconfigure
Sprawdzenie czy interceptor
przechwytuje dane. W oknie terminala uruchamiamy interceptor.py
ze wskazaniem na port 8000:
PYTHONPATH=/usr/share/weewx python /usr/share/weewx/user/interceptor.py \ --device=fineoffset-bridge --port 8000 --debug
Uruchamiamy przeglądarkę, wpisujemy następujący URL (192.168.xx.xx to IP komputera z weeWXem):
http://192.168.xx.xx:8000/data/report?PASSKEY=XXX&stationtype=GW1000B_V1.5.5 &dateutc=2019-12-29+16:27:27&tempinf=67.1&humidityin=39 &baromrelin=30.138&baromabsin=30.138&freq=915M&model=GW1000
W oknie terminala z uruchomionym interceptor.py
powinno się pojawić:
raw data: PASSKEY=XXX&stationtype=GW1000B_V1.5.5&dateutc=2019-12-29+16:27:27&tempinf=67.1 &humidityin=39&baromrelin=30.138&baromabsin=30.138&freq=915M&model=GW1000 raw packet: {'humidity_in': 39.0, 'temperature_in': 67.1, 'barometer': 30.138, 'usUnits': 1, 'dateTime': 1577636847} mapped packet: {'inHumidity': 39.0, 'barometer': 30.138, 'inTemp': 67.1, 'usUnits': 1, 'dateTime': 1577636847}
Konfigurowanie GW1000
W aplikacji WSView
przechodzimy do strony 'Weather Services'. Klikamy 'Next' aż wyświetli się 'Customized'. Na tej stronie wpisujemy IP komputera z zainstalowanym weeWXem jako wartość pola 'Server IP/Hostname'. Wpisujemy '/' jako wartość pola 'Path' oraz 8000 jako wartość pola 'Port'. Domyślny upload jest ustawiony na 60 sekund (zmieniłem na 300).
Ustawienia weeWX są w pliku /etc/weewx/weewx.conf
. W szczególności sekcja Interceptor
powinna wyglądać następująco:
[Interceptor] driver = user.interceptor device_type = fineoffset-bridge port = 8000
Uruchamianie/zatrzymanie/sprawdzanie usługi:
# Start weewx (as daemon) sudo /etc/init.d/weewx start # Stop weewx # sudo /etc/init.d/weewx stop # Check status # /etc/init.d/weewx status # systemctl status -l weewx # ls -l /etc/rc2.d
WeeWX zapisuje dane do bazy /var/lib/weewx/weewx.sdb
. Można je oglądać uruchamiając:
sqlite3 /var/lib/weewx.sdb ## wyświetl wszystkie tabele .tables ## wyświetl schemat tabeli archive .schema archive PRAGMA table_info(archive); ## zawartość archive select * from archive; ## zakończ .q
Główną tabelą danych weeWXa
jest archive
:
sqlite> PRAGMA table_info(archive); select * from archive 0|dateTime|INTEGER|1||1 1|usUnits|INTEGER|1||0 2|interval|INTEGER|1||0 3|barometer|REAL|0||0 4|pressure|REAL|0||0 5|altimeter|REAL|0||0 6|inTemp|REAL|0||0 7|outTemp|REAL|0||0 8|inHumidity|REAL|0||0 9|outHumidity|REAL|0||0 10|windSpeed|REAL|0||0 11|windDir|REAL|0||0 12|windGust|REAL|0||0 13|windGustDir|REAL|0||0 14|rainRate|REAL|0||0 15|rain|REAL|0||0 16|dewpoint|REAL|0||0 17|windchill|REAL|0||0 18|heatindex|REAL|0||0 19|ET|REAL|0||0 20|radiation|REAL|0||0 21|UV|REAL|0||0 22|extraTemp1|REAL|0||0 23|extraTemp2|REAL|0||0 24|extraTemp3|REAL|0||0 25|soilTemp1|REAL|0||0 26|soilTemp2|REAL|0||0 27|soilTemp3|REAL|0||0 28|soilTemp4|REAL|0||0 29|leafTemp1|REAL|0||0 30|leafTemp2|REAL|0||0 31|extraHumid1|REAL|0||0 32|extraHumid2|REAL|0||0 33|soilMoist1|REAL|0||0 34|soilMoist2|REAL|0||0 35|soilMoist3|REAL|0||0 36|soilMoist4|REAL|0||0 37|leafWet1|REAL|0||0 38|leafWet2|REAL|0||0 39|rxCheckPercent|REAL|0||0 40|txBatteryStatus|REAL|0||0 41|consBatteryVoltage|REAL|0||0 42|hail|REAL|0||0 43|hailRate|REAL|0||0 44|heatingTemp|REAL|0||0 45|heatingVoltage|REAL|0||0 46|supplyVoltage|REAL|0||0 47|referenceVoltage|REAL|0||0 48|windBatteryStatus|REAL|0||0 49|rainBatteryStatus|REAL|0||0 50|outTempBatteryStatus|REAL|0||0 51|inTempBatteryStatus|REAL|0||0
Nie ma kolumny PM2.5 w szczególności.
Wysyłanie danych na ecowitt.net
To się samo robi. Trzeba tylko zarejestrować stację na ecowitt.net
podając MAC-adres urządzenia, ale ecowitt.net
nie udostępnia danych publicznie. Żeby oglądać zawartość ecowitt.net
trzeba się zalogować. No a żeby się zalogować, to trzeba mieć konto. Inna sprawa że nie trzeba mieć stacji, żeby mieć konto. Jest też stronka pod adresem www.weewx.com/stations.html z wykazem zarejestrowanych stacji obsługiwanych przez WeeWX. Żeby tam zaistnieć trzeba wstawić do /etc/weewx/weewx.conf
:
register_this_station = True station_url = http://pinkaccordions.homelinux.org/
Co jest opisane w dokumentacji WeeWXhttp://www.weewx.com/docs/usersguide.htm#station_registry
Dodanie czyjnika PM2.5
Nie ma kolumny PM2.5, ale interceptor.py
pobiera co trzeba bo na ecowitt.net
są dane dotyczące PM2.5 tylko lokalnie nie są rejestrowane w bazie. Wychodzi na to, że to WeeWx 'nie widzi' ekstra danych.
Jest oficjalny sposób na rozszerzenie schematu bazy (http://www.weewx.com/docs/customizing.htm#add_archive_type
) ale ja póki co zrobiłem to na szybko w ten sposób, że zmodyfikowałem działanie /usr/share/weewx/user/interceptor.py
, który nie tylko wypisuje co przechwycił (co zapewne przetwarza dalej weeWX), ale także zapisuje przechwycony rekord do pliku tekstowego. W tym celu dodałem takie coś:
def genLoopPackets(self): last_ts = 0 while True: try: data = self._device.get_queue().get(True, self._queue_timeout) logdbg('raw data: %s' % data) ## LOG every 15 minutes nowMM = time.strftime("%M", time.gmtime()) if (nowMM == '00' or nowMM == "15" or nowMM == "30" or nowMM == "45"): ffex = open("/var/log/weewx_exlog.txt", "a+") ffex.write ('[WEEWX#RAW] %s\n' % data) ffex.close() ##loginf('[WEEWX#RAW]: %s' % data)
Co 15 minut, a dokładniej w 15/30/45 oraz zerowej minucie każdej godziny zapisywany jest rekord danych do pliku /var/log/weewx_exlog.txt
.
cp interceptor.py interceptor_orig.py ## po zmodyfikowaniu interceptor.py w wyżej opisany sposób python -m py_compile interceptor.py
Prezentacja wyników
Standardowe raporty WeeWXa są w katalogu: /var/www/html/weewx
. W sumie z nich nie korzystam, robię raport po swojemu z pliku /var/log/weewx_exlog.txt
Dokładniej raport jest tworzony na komputerku bez dostępu do internetu a następnie co godzinę kopiowany na ten, który dostęp ma czyli na pinkaccordions.homelinux.org
W planach jest zakup ekranu LCD 5--7 cali do raspberry co będzie robił za wyświetlacz mojej stacji.
Różne rzeczy
Minimalizowanie liczby zapisów (przeciwdziałanie zużyciu się karty SDHC) https://github.com/weewx/weewx/wiki/Minimize-writes-on-SD-cards
.
Brak komentarzy:
Prześlij komentarz