Na našo internet Lučko se oglasi kar nekaj obiskovalcev. Teh smo vedno veseli in se jim trudimo ponavadi tudi odpisat. Res pa je, da je lučko bolj opaziti v zimskem času, zdaj, poleti, jo velikokrat spregledamo. A nič zato, veseli smo je tako poleti kot tudi pozimi.
In ker sem danes nekam tehnično razpoložen, bom postopek prižiganja opisal. Vse skupaj ni prav nič zakomplicirano, vključuje pa nekaj dodatne opreme.
Najprej seveda lučka. To preprosto potrebujemo. Ampak brez transformatorja, direkt na 220V, halogenke, 12V, počasne, varčne, vse to odpade. Pravijo, da zaradi kapacitivnega oziroma uporovnega bremena. Res, da sem hodil na elektro, a zgleda, da ravno tega dela nisem najbolje odnesel. Se opravičujem. Sem pa preizkusil v praksi, ker nisem toliko teoretičen človek. Pri tistih 12v s tranformatorjem, res ne gre... Vse nekaj cvili in brenči.
Najbrž bi šlo še kako drugače, ampak pri nas je prižiganje izvedeno z X.10 napravami. Te so precej enostavne in kolikor toliko cenovno dostopne. Potrebujemo vsaj PC vmesnik CM11 ter en sprejemni modul. Najenostavnejši je LM12. Lahko pa si omislimo takega za direkt v dozo ali pa celo takega z dvosmerno komunikacijo. Ti so že dragi, a bomo vsaj vedeli ali se je lučka res prižgala ali ne.
To je vse glede strojne opreme, ostalo bo potrebno narediti programsko. Potrebujemo le en vmesnik, ki bo pobral zahtevo s spleta, jo posredoval modulu CM11, ta pa naprej po električni napeljavi do modula LM12. Enostavno, a kot vse stvari, se da tudi to zakomplicirati.
Sam se vedno lotim zadeve najenostavneje. Kar včasih ni najbolje, je pa... ja, no, najenostavneje. Šele nato začnem razmišljati še v kako drugo smer in če znam, se lotim nadgradenj.
Čisto najenostavneje bi bilo direktno iz asp spletne strani krmiliti CM11 vmesnik s pomočjo activex objekta. Ampak za to se nisem odločil, ker s CM11 krmilim še nekaj drugih stvari, torej zanj potrebujem poseben proces. Za kar je potrebno narediti izmenjavo med procesoma spletnega vmesnika ter vmesnika za CM11.
Izmenjava bi bila najlažja preko navadnih datotek ali preko baze podatkov. V asp-ju je to precej enostavno sprogramirati, pri datoteki uporabimo filesystem objekt, pri bazi pa adodb objekt. Z enim od objektom vpišemo podatek, pridobljen prek spletnih strani, v datoteko ali v bazo.
Proces, ki krmili CM11 pa mora znati te podatke prebrati, da bo potem lahko sprožil željeno akcijo. Proces je lahko vseskozi prisoten, lahko pa ga zaganjamo na določen interval. V tem primeru se bo lučka prižgala šele ob zagonu procesa in bo pravzaprav paketna obdelava. Interval se lahko poljubno zmanjša, naprimer na minuto, a vseeno bo vse le near-online prižiganje.
Pristop je enostaven, vendar prinese par težav. Kaj, če več uporabnikov prižge lučko, še preden se proces zažene? Prižgemo samo za zadnjega?
Od začetka sem imel za vse skupaj le en strežnik, spletni servis in hišna avtomatizacija sta tekla na istem računalniku. Ko pa je prišlo do povečanega prometa, je bilo potrebno ločiti obe storitvi. Kako zdaj poskrbeti za lučko? Spletna storitev naj bi obdelovala le spletno storitev, za krmiljenje CM11 pa naj bi skrbel računalnik za hišno avtomatizacijo. Kar pomeni, da sta procesa, ki ju potrebujem, zdaj ločena, na različnih računalnikih. Kako narediti to?
Izmenjava preko datotek? To bi še vedno šlo, vendar pa nastane milijon težav z mapiranjem diskov in to v obe smeri. Preveč stvari gre lahko narobe, napake se množijo kot zajci. Ni druge, kot da se implementira posebna komunikacija preko omrežja. Zanjo sem se moral kar precej potruditi, a na koncu se je izkazalo, da ni prav nič težko.
Za komunikacijo je potreben torej nek strežnik, ki ga lahko vpletemo že v kak obstoječ servis, ter klient. Klient bo na nivoju TCPja vzpostavljal povezavo s strežnikom in mu po določenem protokolu pošiljal podatke. Protokol sem določil najbolj enostavno, kot se da: pošiljanje določenih stringov. Klient to pošlje strežniku, ta pa se glede na string odloči, kaj mora narediti. Za tak enostaven namen mi je najbolj prav prišla kar MS Winsock knjižnica, s katero lahko v parih vrsticah kode v Vbju narediš spodobno delujoč strežnik. Poleg tega pa je knjižnica uporabna tudi v asp ter vbscriptu.
In to je to. V asp stran vpišeš svoje podatke in pritisneš Prižgi. Vsi podatki se vpišejo v datoteko, winsock pa odpre port do strežnika in mu pošlje določen string. Proces na strani strežnika ve, kaj je dobil in pošlje zahtevo za prižiganje CM11, ta pa naprej do LM12. In lučka se prižge, obiskovalcu pa se prek asp strani prikaže zahvala.
Zdajle mi je kapnilo, da bi seveda to lahko počel tudi prek celotnega spleta in tako hostal prižiganje naše lučke na katerikoli strani. No, za tako igranje bi bile bolj primerne že kake spletne storitve, soap, xml in podobno. S čimer ne bi bil omejen na winsock in Okna. Kar vse skupaj naredi požrešno, veliko, a hej, tja gre razvoj, kajne?
Naj le omenim, da se nimam za programerja. Striček google ve vse in, če ima človek voljo in nekaj časa, predvsem pa ga mora zanimati, se da vse. V začetku nisem znal ne hoditi, ne govoriti, kaj šele pisati. Vse sem se moral naučiti. In tako tudi to. Ko začneš, vidiš, da ni prav nič groznega. Seveda bi se kakšen pravi programer najbrž zgrozil ob mojih skropucalih, a me ne gane. Imel bi sicer čisto prav, a na svojem vrtu se lahko igram sam, brez omejitev v stilu error handlinga in bl**dy option explicit!
V računalništvu se moje pomanjkljivosti, kot so nemarnost in površnost lahko kar dobro skrijejo, saj lahko vse dodobra preizkusiš. Če bi bil pa mizar... hm, to bi bilo zanimivo...