Älyohjausta halvalle rgb-ledinauhalle
Olipa kerran tarjouksessa kymmenen metriä rgb-ledvalonauhaa Lidlissä kohtuulliseen hintaan. No, sieltä se sitten kotiutui, parin muun jo olemassa olleen vastaavanlaisen nauhan kanssa kotiin väriä tuomaan.
Pitkään olin kuitenkin haaveillut jonkinlaisesta älykkyydestä kodin valaistuksen ja sensoreiden kesken. Pitkään olen myös kauhistellut kaikenlaisia aukkoja, joita valmiit äly-IoT-vempaimet tuovat kotiverkkoihin. Siis täydellinen projekti löytyi: yritetäänpä viritellä halpis-ledvalonauhalle lähiverkon kautta toteutettava ohjaus! Sitä voi sitten myöhemmin liittää vaatehuoneserverillä hostattavaan automaatioviritelmään.
Ja mikä parasta, kun kaiken koodaa itse, ei voi ainakaan syyttää ketään tai mitään muuta tahoa niistä IoT-aukoista.
Sukellus infrapunan maailmaan
Jos et ole koskaan nähnyt tai omistanut oheisen kuvan mukaista värikästä kaukosäädintä, olet näkökulmastani poikkeuksellinen tapaus. Näitä nimittäin on meidän nurkissa pyörinyt useita: ainakin kolmelle eri ledinauhalle sekä vanhemmille rgb-lampuille, joista on jo aika jättänyt.
Tässä vaiheessa todettakoon myös tärkeä vahingossa tehty huomio: mikä tahansa pöydällä lojuneesta kolmesta vastaavasta värikkäästä nappiläpyskästä toimii Lidlin halvalle ledinauhalle. Ja Normalin vastaavalle. Ja vähän paremmalle silikonihökötykselle. Siispä voitto kotiin: ehkä näille on jokin halpisledinauhainfrapunaprotokolla?
Kovin paljoa ei sisuksista saa irti; halvalla tehtyä, jokin tiivis MCU ilmeisesti roikkuu namiskojen mukaan ir-lediä vilkuttelemassa. Taitaa siis olla fiksumpaa lähteä tutkimaan asiaa interwebsin syövereistä – ehkä joku muukin on yrittänyt samaa joskus (...kunhan ensin takavarikoidaan tästä kaukosäädinyksilöstä pian tarvittava infrapunavalodiodi).
Kas kummaa: interwebsin syövereistä löytyy kuin löytyykin suoria arvauksia näiden geneeristen kaukosäädinten namiskojen välkyntäkomennoille.
#define IR_BPLUS 0xF700FF
#define IR_BMINUS 0xF7807F
#define IR_OFF 0xF740BF
#define IR_ON 0xF7C03F
#define IR_R 0xF720DF
#define IR_G 0xF7A05F
#define IR_B 0xF7609F
#define IR_W 0xF7E01F
#define IR_B1 0xF710EF
#define IR_B2 0xF7906F
#define IR_B3 0xF750AF
#define IR_FLASH 0xF7D02F
#define IR_B4 0xF730CF
#define IR_B5 0xF7B04F
#define IR_B6 0xF7708F
#define IR_STROBE 0xF7F00F
#define IR_B7 0xF708F7
#define IR_B8 0xF78877
#define IR_B9 0xF748B7
#define IR_FADE 0xF7C837
#define IR_B10 0xF728D7
#define IR_B11 0xF7A857
#define IR_B12 0xF76897
#define IR_SMOOTH 0xF7E817
Nämä siis suoraan vastaisivat tuon väriläpyskämukakaukosäätimen namiskoja.
Siis kokeillaan! Nopeasti laatikosta hyppysiin ESP8266-breakoutti (jokin halpa D1-klooni), siihen kiinni kaukosäätimestä leikelty ir-ledi jonkun summanmutikassa lasketun etuvastuksen kanssa, ja ei muuta kuin IR-kirjasto laulamaan:
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
#define IR_OFF 0xF740BF
#define IR_ON 0xF7C03F
const uint16_t kIrLed = 4;
IRsend irsend(kIrLed);
void setup() {
irsend.begin();
Serial.begin(9600);
}
void loop() {
irsend.sendNEC(IR_ON, 32);
delay(1000);
irsend.sendNEC(IR_OFF, 32);
delay(1000);
}
...ja kappas kehveliä: ledinauha yllättäen vilkkuu komentojen tahtiin! Siis kaukosäädin juttelee NEC-muotoisia komentoja nauhan kontrollerille, joka sitten tekee ohjaustaikansa. Siis perusosat älyohjaukseen ovat kunnossa! Oheisella klipillä testissä eri värinappien komentojen lähettäminen loopissa eräällä toisella lednauhahukkapätkällä.
Kotelointi ja kaukosäätöserveri
Sitten pitäisi vielä alkaa rakentamaan sitä älyä. No, tämä ESP8266 on siitä hieno vempain, että sen saa aika pienellä vaivalla kiinni wifiin – tai luomaan sellaisen (ja onpa niillä mahdollista jonkinlainen wifi-mesh-verkkokin kai rakentaa).
Koodinakutusinspiraatio laulamaan, tuloksena askeettinen käyttöliittymä ja polut, joita http:llä tökkimällä saa ir-komennot ilmoille. Tulos: alkeellisesta käyttöliittymästä saa kännykällä ohjattua ledinauhaa! Koska kaikki namiskat tiedetään etukäteen, ja serveriä ajetaan erittäin pienimuistisella IoT-vekottimella, on koodi käytännössä staattista dataa, ja namiskojen polut miltei kovakoodattu ajamaan tietyt IR-komennot.
Kaukosäädinserverin koodi on saatavilla Gistinä. Kovin kummoisia virheensietoja tai kutsutarkistuksia ei tässä ole, koska mokoma pyörii meillä suljetussa ja salatussa IoT-wlanissa, johon ei ole pääsyä ulkoverkosta. Käytännössä ko. mutikka siis tarjoilee esivalmistellun veppisivun kenelle tahansa kutsujalle, ja emuloi eri napinpainalluksia huudoilla osoitteisiin /button/00
- /button/23
, eli ohjausta voi toteuttaa suoraan selaimella, tai huutamalla espille GET-pyyntöjä.
Tässä vaiheessa voidaankin valmistella ja "koteloida" (lue: sulkea pois pölyltä) lopullinen ohjainpurkki. Siis inkiväärishottipullo hyötykäyttöön, IR-ledi roikkumaan Bilteman hälytinjohdon nokkaan ledinauhan ohjaimen lähettyville, ja valmista tulee!
Tämän "koteloinnin" tarkoitus on lähinnä suojata mokomaa pölyltä – se kun elää television takana olkkarinurkkauksessa. IR-ledi pitkän piuhan päässä kulkee siis Ikeahyllyjen tv-tason takaa nurkasta ylös nauhan kontrollerille ja osoittelee säteitään sitä kohti. Ehkä jokin fiksumpi kotelointi on syytä toteuttaa viimeistään siinä vaiheessa, kun led-nauhakontrollin on tarkoitus laajeta makuuhuoneen valaistuksen puolelle toisella ir-ledillä.
(Toim. huom. Artikkeli sisälsi aiemmin kuvan tästä "koteloinnista", mutta yleisen järjestyksen säilymisen kannalta lienee oleellista sensuroida se pois.)
Myöhemmin tämän voikin sitten valjastaa http-pyyntöjen pohjalta osaksi kokonaisvaltaisempaa kodin älykästä (älytöntä?) valaistusta. Ehdin jo asentaa vaatehuoneserverille avointa sorsaa olevan Home Assistantin, mutta sen setuppaaminen kotikäyttöön vaatii hitusen enemmän perehtymistä.
Toiveena olisi löytää käytettynä halvalla jo käytössä olevien Ikean Trådfri-lamppujen kontrollointiin sopiva gateway. Näin voisi toteuttaa esimerkiksi automaagisesti vaihtuvia päivä- ja yövalaistustilanteita, tai vaikkapa kotiintulovalaistuksen.
...mutta sitä jäätäneen odottamaan!
Kommentit
Ei vielä yhtään kommenttia!
Jätä kommentti
Kommentoidessasi ip-osoitteesi ja nimimerkkisi tallennetaan systeemiin.