Az első és a második részben odáig sikerült eljutnom, hogy megfejtettem milyen modulációval milyen üzenetet küld a termosztát a vevő egységnek. Mivel egy üzenetre alapoztam a teóriámat, így szükségesnek tűnt több mérést is végezni, illetve olyan vevő, illetve adó áramkört keresni, amivel a további elemzés, majd az adás is kivitelezhető. Következzen most ez a rész!
Második termosztát
Nekem a Q8RF-ből egy olyan kiszerelés van, ami 2 termosztátból és egy vevőből áll. Ez nekem tökéletesen meg is felel, az egyik a földszinti fűtéskört kapcsolgatja, a másik az emeletit. A második epizódban a földszinti termosztát jeleit elemeztem, adta magát az ötlet, hogy nézzük meg mit küldözget az emeleti egység. Nyilván való, hogy a két termosztát között csak a biztonsági kódnak nevezett azonosító lesz a különbség, ezt újra is lehet generáltatni, de ekkor a vevővel újra is kell taníttatni az új kódot. Így egyszerűbbnek tűnt inkább a másik termosztát jelét elemezni, aztán majd ha vége a fűtési szezonnak, akkor lehet agyba-főbe játszani a különböző kódokkal!
Ami érdekes, hogy ennek az egységnek a vivőfrekvenciája kicsit arréb volt: 868.275 MHz. (Itt is rengeteg időt sikerült elszórakoznom, mire megtaláltam az ideális frekit, de végül sikerült!)
Jól látható, hogy a magas és alacsony jelszinteket könnyű lesz elkülöníteni. Itt is sikerült egy be- és egy kikapcsolást is rögzítenem, az URH így könnyedén elboldogult a csomagokkal:
Ami érdekes, hogy itt nincs meg az a bizonyos 'A' csomag 'B' csomag rendszer, ugyanazt a csomagot küldi el az adó 8x, pontosabban 2x 8x. A be- és kikapcsolási üzenetek ugyanúgy különböznek mint a másik termosztát esetében, illetve a 0-kkal való feltöltés is megegyezik.
Látok rá esélyt, hogy a csomagok különbsége a földszinti termosztátnál abból adódott, hogy abban épp merülőben volt az elem, amikor próbálgattam a felvételt. Ez a dolog feltehetőleg úgy működik, mint a legtöbb elemes időjárás állomásnál: ha az elem feszültsége egy bizonyos szint alá esik, akkor megjelenik egy ikon a kijelzőn és ezt beleszövi az RF üzenetbe is a cucc. Még nem cseréltem ki az elemet a földszinti adóban, de ez most a lehető legjobb állapotban van épp: ha áll és naponta kell csak kiküldenie 2-2 üzenetet, akkor nem mutatja, hogy merül. Ha próbálgatom és 5 perc alatt kiküldetek vele 10 üzenetet, akkor megjelenik a kis ikonocska. Szóval ha lesz időm megpróbálok a napokban normál és merülő üzeneteket is felvenni, hátha megtalálom az összefüggést!
Hardver
Ugye az csak az első lépés hogy "elkapunk egy levelet", de azt tetszőleges időpontban meg kellene tudjuk ismételni ahhoz, hogy saját kezünkbe vegyük az irányítást. Ehhez indult el a megfelelő hardver felkutatása. Nos ez sokkal nehezebben ment, mint gondoltam! Ha 433 MHz-ről lett volna szó annyi adó és vevő van a piacon, hogy győzzön az ember válogatni! A 868-as sáv szerintem semmivel nem bonyolultabb, csupán kevésbé elterjedt - legalábbis ilyen célra használva.
3 féle eszköz létezik: transmitter (adó), receiver (vevő) és transceiver (adóvevő). Nekem a legfontosabb, hogy adni tudjak, az RTL segítségével tudom tesztelni hogy jó-e az adásom, de az se baj, ha adóvevőt találok, vagy adó és vevő párosát. Kezdetnek sikerült megtalálnom a CC1101-es típusú Texas Instruments gyártotta csipet és az erre épülő transceiver-eket. Papírón jól hangzott a dolog, tud nagyon sok frekvenciát, több féle modulációt, stb. Azonban eléggé úgy fest, hogy nem lesz jó arra amire nekem kell. Mint a legtöbb hasonló kütyü, ez is arra van kitalálva, hogy vesz az ember belőle kettőt és azt két egymástól távol levő kütyübe építve kommunikációs csatornát létesít velük. Ilyenkor a fő cél, hogy a modul saját magával legyen kompatibilis és tetszőleges, saját modulációt/kódolást is használhat, a lényeg hogy amit az ember az adó oldalon bead, az a vevő oldalon kijöjjön.
Ez sajna nekem nem jó, mert ugye itt az a cél, hogy egy általam definiált adássorozatot tudja küldeni az éterbe, ami a lehető legtökéletesebben hasonlít a termosztátom adására, olyannyira, hogy a vevő azt higgye a termosztát szólt neki. A CC1101 adatlapját tanulmányozva arra jutottam, hogy a legjobb, ha letöltöm a TI programját, amivel lehet a modul csipjét konfigurálni. Ez a program olyasmit tud csinálni, hogy sok sok paraméter beadása után megmondja, hogy a modul EEPROM-jában melyik címét mire kell állítani, hogy olyan üzemmódban kommunikáljon a modul, ahogy én szeretném. (értsd: pontos frekvencia, moduláció, sebesség, erősítés, stb.) Ám miközben kattogtattam a programban, rá kellett jönnöm, hogy ez nem lesz jó nekem: itt nem az lesz a működési elv, hogy egy lábat magas és alacsony állapotok között "rángatok" és ennek megfelelően fog adni, vagy nem adni a modul, hanem SPI buszon keresztül kell megmondanom a modulnak, hogy milyen adatot szeretnék átküldeni, mire ő maga állítja majd össze és küldi ki azt a morzejelet, amit a konfigurálás közben meghatározottak szerint kell küldeni az én adataim alapján. Viszont olyasmit nem lehet benne beállítani, hogy a sync jel-et 2x rakja az elejére, a végén hagyjon megadott ideig szünetet, majd ismételje meg, stb. Röviden ez a modul túl fejlett ahhoz amire nekem szükségem van.
Ezután találtam rá a HopeRF nevű méltán híres kínai cég RFM119W-868S1 típusú termékére. Freki stimmelt, leírásban benne volt, hogy OOK, mindössze egy adat lába van, szóval tökéletesnek tűnt. Meg is rendeltem a Farnell-től, 1700 + postaköltségért (sehol nem találtam olcsóbban) azaz 3700-ért. (shit, ez nem kínából jön, többe van a posta, mint a cucc). A Farnell-től még eddig nem rendeltem, de kifejezetten tetszett/szórakoztatott 1-2 érdekesen megfogalmazott státusz üzenetük (pl. "Jelenleg a rendelés gondos feldolgozása zajlik."). Telt-múlt az idő, még mindig dolgozták fel a megrendelést én meg gondoltam addig megnézem az adatlapját a kütyünek. Kiderült, hogy amit írnak az oldalon, az mind igaz és a modul is tudja amit vállalt, de ebben is van egy EEPROM, amit gondosan inicializálni kell hogy tudjuk például OOK-ban adni. Ez még rendben is lenne, de kiderült, hogy kínai barátaink fifikás módon nem adják ki azt a titkot, hogy a modul memóriájában milyen címen mit lehet állítgatni, hanem ajánlanak egy dev kitet, amiben a TI-jéhez hasonlóan az ember összekattogtatja a konfigurációját, majd a devkit saját hardvere ezt be is konfigurálja a rákapcsolt modulon. Ugye milyen jól hangzik? Hát persze, csak az apró betűs rész annyi, hogy a devkit 500 EUR! Na ennyit nem szánok a projektre, pláne hogy a devkitet feltehetőleg életemben egyszer használnám aztán mehetne is a szekrény mélyére!
Miután ezt realizáltam gyorsan le is mondtam a megrendelésemet, Farnell korrektül törölte is azt.Folytattam hát tovább a keresgélést. Nem tudom hogyan, de a Chipcad oldalára vetődtem, ahol találtam egy ígéretes alkatrészt. Ugyanennek a gyártónak egy feltehetőleg régebbi adó- és vevőcsaládját. Az RFM117W-868S1 és RFM217W-868S1 modulok kicsit primitívebbek, csak ASK/OOK modulációt ismernek és bár ezekben is van EEPROM, de pont arra a frekvenciára vannak hangolva, ami nekem kell! Vettem hát 1 adó és 1 vevő egységet is, személyes átvétel mellett így 1060 Ft-ból meg is voltam. Otthon koaxkábelből kihúzott rézdrótból csináltam nekik antennákat és forrasztottam mindkettőre lábakat is, hogy könnyebb legyen velük bánni.
Szoftver
Hogy életre tudjam kelteni a modulokat kell valamiféle mikrokontroller. Ami van itthon az vagy Arduino UNO (ebből van több fajta is) illetve ESP8266 (ebből most épp csak NodeMCU-t találtam a szekrényben, kell kell legyen D1 mini is valahol). Ezek különbségeiről már korábban írtam, a lényeg, hogy most az utóbbira esett a választás, mégpedig több okból kifolyólag is:
- A modulok 1.8 és 3.7 V között képesek működni, az UNO-knál jellemzően 5V rohangál. Ez nem jeletene leküzdhetetlen akadályt (feszültségosztó, szintillesztő, stb.) de...
- ...az ESP-nek lényegesen gyorsabb a procija (16 MHz vs 80 MHz),
- ... több a memóriája (1 kB vs 128kB) és
- ... van benne Wifi is, ami a végleges kivitelnél jól fog jönni!
Programozás szempontjából nincs jelentős különbség, Arduino környezetben fogok C kódot írni, a kész lib a végén mindkét hardveren működni fog (legalábbis remélem!).
Először megpróbáltam kész lib-ekből kiindulni: RC-switch jónak tűnt elsőre, de mélyebben beleásva magam kiderült, hogy annyi helyen kellene hozzányúlni, hogy inkább hagytam. Arra mindenesetre jó volt hogy merítettem belőle ötleteket, ugyanis ebben van adás és vétel is!
Amivel kezdtem foglalkozni, az a vétel és dekódolás lefejlesztése. Ehhez kell megszakításkezelés, pontos idő méricskélése és minimális számítás. Előkapartam pár évvel ezelőtti 433-as próbálkozásaimat, amikor a TFA időjárásállomás jeleit próbáltam visszafejteni. Annak a kódnak a lecsupaszítása és átszabása sokat segített, el is készült a forráskód. Tesztelni legalább annyira körülményes, mint az RTL-lel befogni az adást, de azért nem úrtechnika ez sem. Amire kíváncsi voltam:
- Képes-e befogni a vevő egység a gyári termosztát adását? (Elvileg ugyanazon a frekin dolgozik, ASK modulációval.)
- Az RTL-lel felvett és megfejtett morzesor időzítése helytálló-e a mikrokontroller mérései szerint?
Hogy ezekre választ kapjak először egy olyan kódot kellett összerakjak, ami csupán a magas és alacsony szintek váltakozásai közötti időket méri és írja ki nekem. Ha nem jön semmi amit mérhetne a vevő modulom DATA lábán a mikrokontroller, akkor szívás van. Vagy a modul szar, vagy a freki nem stimmel, vagy ki tudja... A frekvenciát elvileg lehet ezen a modulon állítani, de csak az 500 EUR-s devkittel, szóval az most úgy tűnik zsákutca. (Hacsak nem jön szembe valami orosz hekker, aki visszafejtette/lelopta a devkit-et és csinált hozzá programot/libet, amivel az EEPROM tartalmát lehet módosítani...)