[CZ] Davis Vantague Vue, Arduino a RaspBerry PI 3

Domaci meteostanice se staly nedolnou soucasti “chytre” domaconosti. Jednou z nejlepsich na trhu, aspon co se tyce venkovnich senzoru, je Davis Vantage Vue. Pokud ale data chceme uchovat, musime si priplatit za “data logger”, ktery stoji skoro to, co samotna meteostanice.

Ale pozor!

Meteostanici Davis Vantage Vue je mozne odposlouchavat primo ze vzduchu s pomoci par chytrych udelatek a sikovnyma rukama.

Pro ty netrpelive:

Postaci:

  • Zdroj 3.3V
  • a / nebo Zdroj 5V
  • C1101 modul – povesti o nem se siri rychle. Nicmene je celkem slozite ho najit a jeste tezsi pajet. Vypada celkem mile, dokud nezacnete na nej veset draty. Pozor, roztec der je jina nez standardni piny! Mensi.

    Piny vlevo zvrchu -> kam je zapojit na Arduino UNO (pro otrle a trpelive, mozno zmenit v zdrojacich):

    CC1101    |  Arduino
    -------------------
    1 – Vcc   |  3.3V
    2 – GND   |  GND
    3 – MISO  |  PIN11
    4 – SCLK  |  PIN13
    5 – MOSI  |  PIN12
    6 – GDO2  |  PIN03
    7 – GDO0  |  PIN02
    8 – SCN   |  PIN10
    
  • Arduino Uno
  • Linux box, treba Raspi 3.na ktere bezi Python a umi se seriove pripojit k Arduinu.
  • Na Arduino nahrat tohle (S velkym podekovanim Ray H. Dees, ale bohuzel jsem nenasel kdo a kde je, mam jen zdrojaky, lehce upravene pro EU):
  • Pak na linux hoste koukat na nejakou seriovou konzoli (treba minicom, samozrejme po tom, co ho pripojime pomoci USB), co se deje se stanici. Ma to ale par hacku, i kdyz pro netrpelive ale nebudou zadny problem a tak se tady nebudu rozepisovat.

Beta verze vypada nejak takhle A samozrejme z toho leze…

 1509706589, Index: 00 Packet: 80 06 F7 1E 89 0B 9F CC FF FF RSSI: -67 LQI: 2B Error: 7 Next: 64 Packets: 1
 1509706594, Index: 01 Packet: E0 06 F4 17 01 08 67 CB FF FF RSSI: -68 LQI: 2C Error: 7 Next: 64 Packets: 2
 1509706596, Index: 02 Packet: 50 05 E6 FF 71 0D D5 16 FF FF RSSI: -68 LQI: 2E Error: 7 Next: 64 Packets: 3
 1509706599, Index: 03 Packet: 80 05 F0 1E 8B 05 A7 9F FF FF RSSI: -68 LQI: 2C Error: 7 Next: 64 Packets: 4
 1509706601, Index: 04 Packet: A0 04 DF E9 2B 0E 11 B1 FF FF RSSI: -68 LQI: 28 Error: 7 Next: 64 Packets: 5
 1509706604, Index: 00 Packet: E0 04 EB 17 01 0D BC A4 FF FF RSSI: -67 LQI: 2D Error: 0 Next: 64 Packets: 6
 1509707858, Index: 04 Packet: 50 06 04 FF 73 08 64 81 FF FF RSSI: -66 LQI: 31 Error: 0 Next: 64 Packets: 40
 1509707872, Index: 00 Packet: 90 06 F0 0D 21 2F 3E 67 FF FF RSSI: -66 LQI: 2E Error: 7 Next: 64 Packets: 1
 1509707875, Index: 01 Packet: E0 06 ED 17 03 03 58 12 FF FF RSSI: -67 LQI: 2F Error: 7 Next: 64 Packets: 2

 

Ted ta dlouha verze

Kde začít.

Asi tím, že jsem začal koketovat s domácí automatizací a u vysvětlování co vše dokáže pár mikroprocesorů své drahé polovině, nečekaně jsem odhalil i její vánoční dárek, tedy meteostanici Vantage Vue.

Po letmém prozkoumání internetu bylo jasno. Ušetrit pár peněz za originální datalogger a pokoumat to na vlastní pěst. Začátek vypadal velice slibně, stačilo se napíchnout na sériovou konzoli meteo konzole, kterou si normálně dáváme doma na zeď. Pár příkazů a data se začnou sypat.

Následující řádky jsou o tom, jak strastiplná cesta se to ukázala být, jak moc už toho zjistili ostatní, jak moc předražená je originální logovací hračička a kolik vlastně dat dokážeme vzduchem vycucat přímo z meteostanice.

1. Krok: seznámení a slepá ulička sériové konzole

Dorazila meteostanice. Bez data loggeru, jak bylo planovano. Myslel jsem, ze rozbehnuti sberu dat je otazkou nekolika minut a podle predbeznych pruzkumu internetu stacilo pripojit Tx a Rx dratky ze zadu do konzole, pustit emulator v pocitaci a nechat se zaplavit informacema primo z Davis konzole. Postupoval jsem dle navodu na http://madscientistlabs.blogspot.cz/2011/01/davis-weatherlink-software-not-required.html a za nedlouho prislo prvni zklamani. Zapojil jsem vysilani i prijimani serioveho prenosu, pripojil arduino a zadal prikaz TEST.

NIC.

Nestalo se vubec nic.

Po nekolika pokusech a snaze o odcerveni zapojeni (debugging, cili odchybovani) bylo zjisteno, ze dane piny nejsou vubec aktivni.

Nasledovaly tedy hodiny hledani informaci, po kterych bylo zjisteno, ze dany navod podle ktereho jsem postupoval byl z 23.1.2011 od kdy uplynulo mnoho casu, ale co je dulezitejsi, taky spousta verzi firmwaru od Davisu (2.xx az 3.15). V jedne z verzi kolem r 2012 (3.00, take ji nazyvaji verze se zelenou teckou) zkomplikovali pripojeni touto cestou natolik, ze prestala byt zajimava.

Stal jsem tedy na zacatku a musel najit jinou cestu k datum. Jedna z moznosti byla stejna, jak to dela ona konzole od Davisu, vzduchem.

2. Krok: Cesta vede vzduchem, i kdyz…

Začal jsem tím, co by se dalo čekat. Rozebrat, co rozebrat jde a zkusit udělat něco podobného vlastníma silama. Bylo mi jasné, že ona konzole, jenž zobrazuje aktuální hodnoty a průběh počasí musí mít nějaký způsob dekódování dat přímo ze vzduchu.

Tedy hurá na šroubovák a pojď ho do konzole. Po pár povolených šroubkách se ukázalo, že obvod zodpovědný za chytání bezdrátového signálu není nijak zvlášť jedinečný CC1101 a dokonce se moduly se stejným čipem dají sehnat i přímo na vývojový kit Arduino k němuž se připojí přes mě nic neříkající rozhrani SPI (Serial Peripheral Interface).

(Obr konzole a chipu uvnitř)

První naivní pokusy o zachycení signálu bez toho, abych věděl kde co a jak byly samozřejmě neúspěšné. I když jsem byl vybaven vědomostma lidu internetového, byl to lid Americko-internetový. I ejhle, frekvence povolené v Americe nejsou tytéž jako V EU, což se dalo čekat.

Tedy, par kroku zpatky, zamyslet se a…

3. Krok. Znovu, lepe, radostneji.

Ani nebudu zminovat, ze jsem opravdu premyslel o porizeni frekvencniho analyzatoru za zhruba 50 tisic a vic, spousty dalsich cest, az jsem narazil na TLR-SDR. Vlastne se jedna o softwarove udelatko, ktere se da velice rychle preladovat a chytat neskutecne mnoho informaci za skoro nula penez. Konkretne za $23 i s postovnym. Umi toho opravdu hodne, doporucuji poridit, i kdyz se dal zaobejdeme i bez toho.

Mne bylo jasne, ze v Evrope se bezne kolem internetu veci vysila na 868MHz (915MHz v US). Naladil jsem tedy na 868MHz tohle softwarove radio a cekal, co se stane. Opravdu. Kazde ~2.5s se objevil neprijemne vypadajici kopecek na nasledujicich frekvencich: (Snazil jsem se byt opravdu peclivy v co nejlepsim naladeni a zaznamenani dane frekvence)

  • 868,042900
  • 868,163100
  • 868,283290
  • 868,403500
  • 868,523300

Tedy 5 frekvenci, ktere se pravidelne menily v nasledujicim poradi:

  1. 868,042900
  2. 868,283290
  3. 868,523300
  4. 868,163100
  5. 868,403500
  6. a zas od 1, 868,042900

Bingo, EU je nastesti tak plna signalu, ze to nemame tak komplikovane jak v US, kde je pocet kanalu 50! U nas jen 5, prace tedy bude mnohem jednodussi. Navic, dle tvaru kopecku a zachycenem signalu po blizsi inspekci jsem odhadl prenos na GFSK modulaci, tedy Gaussian Freqency Schift Keying. Frekvencni modulace s gausovskym posunem frekvence.

Zni to desive, ale podle specifikace by to mel bez problemu zvladnout uz zmineny obvod CC1101, pokud mu nastavime spravne parametry (coz se ukazalo ponekud ehm, zajimave a porad je) Samozrejme jsem veskere otazky na moje odpovedi (ci opacne) nasel casem na internetu, ale to uz bylo pozde a mel jsem protoyp hotovy

4. Krok – Cim to vlastne budu chytat? V podstate rychle rozhodnuti: 

  1. CC1101 (https://arduino-shop.cz/arduino/1401-cc1101-bezdratovy-modul-868mhz-m115-pro-prenos-na-dlouhe-vzdalenosti-plus-antena-1474446179.html) – stejny obvod, jenz pouzil Davis ve sve konzoli
  2. Arduino UNO (https://arduino-shop.cz/arduino/1511-original-arduino-uno-rev3-1485165418.html) – k necemu tu vec (CC1101) musim pripojit s
  3. Raspi 3 (https://arduino-shop.cz/arduino/1385-raspberry-pi-3-model-b-quad-core-1-2-ghz-64bit-cpu-1gb-ram-wifi-bluetooth-4-1-1473147122.html) – Tak nejak mam rad linux a tohle je idealni na programovani, zpracovani a posilani dat. Ukladani samozrejme taky.

5. Krok. Zapojeni toho pekelneho obvodu a Arduina.

Funguje jak s platformou UNO, tak i silene malou Nano. Ja pouzil UNO, ale chtelo by to “zNanovat”. Z leva, ma pekelny modul CC1101 zapojeni k arduinu nasledovne

CC1101    |  Arduino
-------------------
1 – Vcc   |  3.3V
2 – GND   |  GND
3 – MISO  |  PIN11
4 – SCLK  |  PIN13
5 – MOSI  |  PIN12
6 – GDO2  |  PIN03
7 – GDO0  |  PIN02
8 – SCN   |  PIN10

Nemusim ani rikat, ze pajkovani tyhle nadhery vytvorilo par vrasek na mem cele, nicmene to chce lehce zkusene ruce na pajeni. Coz jsem rychle nabyl , obnovil sve davno ztracene dovednosti a pak to slo hrave.

5a, finish s pripojenim – arduino a Raspi

Pak staci strcit USB kabel mezi Arduino UNO a Raspberry Pi. Tohle je taky napajeni arduina. Napajeni Raspberry PI je zatim u mne reseno laboratornim zdrojem, ale do budoucna bude napajen z baterii, tady pozor, odbery jsou kolem 500-600mA a muzou byt vetsi, podle nastaveni Raspberry PI a bezna nabijecka na telefon nemusi mnohdy stacit.

6. Krok. Dekodovani a zpracovani signalu. Upload pro arduino:

Tady je to kousek slozitejsi a doplnim casem, ale zatim: (Narvat vse do jedneho adresare a poslat na Arduino pres arduino IDE – www.arduino.cc) http://www.spoton.cz/public/davis_receiver/davis_receiver.ino http://www.spoton.cz/public/davis_receiver/CC1101.h http://www.spoton.cz/public/davis_receiver/Davis.h http://www.spoton.cz/public/davis_receiver/Davis.cpp

 

Raspberry PI kod (tady bych to spis videl jako navedeni, kod sam o sobe bez casti na serveru fungovat nebude): http://www.spoton.cz/public/raspi_davis/davis_collect_public.py    

7. Krok, stabilita a “monkey patching”

Jelikoz se ukazalo, ze signal ne vzdy dostatecne pokryje 

 

8. Krok, vzdalena sprava

Pro ucely vzdalene spravy jsem vyuzil RaspberryPi coby reverzni proxy brany. Samozrejme, k tomu je potreba mit nekde na internetu server k tomu urceny. Virtualni bohate postaci.

Taky clovek musi byt lehce obeznamen s problemy v oblasti Linuxu / Unixu. 

Reverzni proxy, resp tunel na svobodu

Jelikoz pouzivam vodafone pro pripojeni k internetu, jenz je znacne omezen, na RasPi je Debian, resp. Raspbian, jenz pouziva SystemD pro sluzby, bylo jen samozrejme zvolit SystemD i pro osvobozeni pristupu zvenci k celemu tomuhle ensamblu.

Samozrejme, neni to nutnost pro spolehlivy prenos dat z meteostanice, ale kdyz clovek chce psat programy i na cestach, ve vlaku, na zachode 4. cenove (nebo v praci), hodi se to.  

 

9. Krok – grafy, data, DB a vse kolem

Nez to poupratuju, tak se podivejte na alfa verzi

http://www.spoton.cz/weather

 

Zdroje z EN, US, FR atd:

http://www.raydees.com/uploads/Davis.zip – mnou upraven pro EU frekvence. Verze je dost stara, nicmene jedina, co fungovala. Pracuji na lepsi verzi. Kdo mate dost casu a vladnete anglictinou, tak podrobne se vse rozebira tady: https://www.wxforum.net/index.php?topic=10739.0 Prubezne budu doplnovat obrazky a detaily, prace je jak na kostele. Zdroje z nichz jsem cerpal a nakopli me neskutecne rychlym zlusobem a spravnym smerem: http://madscientistlabs.blogspot.cz/2010/12/davis-weather-station-hacking.html http://madscientistlabs.blogspot.cz/2014/02/build-your-own-davis-weather-station_17.html http://madscientistlabs.blogspot.cz/2012/03/first-you-get-sugar.html http://www.raydees.com/uploads/Davis.zip https://github.com/dekay/DavisRFM69 https://github.com/davidjenni/KiloMakani https://github.com/SpaceTeddy/CC1101 https://www.carluccio.de/    

Leave a Reply

Your email address will not be published. Required fields are marked *