Orodha ya maudhui:

Programu-jalizi ya Operesheni ya Lango la WebApp (IoT): Hatua 20 (na Picha)
Programu-jalizi ya Operesheni ya Lango la WebApp (IoT): Hatua 20 (na Picha)

Video: Programu-jalizi ya Operesheni ya Lango la WebApp (IoT): Hatua 20 (na Picha)

Video: Programu-jalizi ya Operesheni ya Lango la WebApp (IoT): Hatua 20 (na Picha)
Video: Leap Motion SDK 2024, Novemba
Anonim
Programu-jalizi ya Operesheni ya Lango la WebApp (IoT)
Programu-jalizi ya Operesheni ya Lango la WebApp (IoT)
Programu-jalizi ya Operesheni ya Lango la WebApp (IoT)
Programu-jalizi ya Operesheni ya Lango la WebApp (IoT)
Programu-jalizi ya Operesheni ya Lango la WebApp (IoT)
Programu-jalizi ya Operesheni ya Lango la WebApp (IoT)

Nina mteja ambaye alikuwa na eneo lenye lango ambalo watu wengi walihitaji kuja na kwenda. Hawakutaka kutumia keypad kwa nje na walikuwa na idadi ndogo ya vipitishaji vya keyfob. Kupata chanzo cha bei rahisi cha nyongeza za vitufe ilikuwa ngumu. Nilidhani itakuwa fursa nzuri ya kuboresha mwendeshaji wa lango la Liftmaster kuwa IoT inayoendana na vifaa vya kawaida, API ya wavuti, na kiolesura cha programu ya wavuti. Hii haikutatua tu shida ya ufikiaji wa watu wengi ilifungua utendaji wa ziada pia!

Katika picha ya mwisho hapo juu ni kitengo cha majaribio ambacho nilikuwa nikifanya kwa karibu mwaka katika mfuko wa ziplock. Nilidhani ni wakati wa kuboresha!

Hili ni suluhisho linalofanya kazi kikamilifu na msimbo wote, habari ya vifaa, na miundo iliyoorodheshwa hapa.

Faili zote za miradi pia zinashikiliwa kwenye GitHub: github.com/ThingEngineer/IoT-Gate-Operator-Addon

Mfano wa kiolesura cha CodeIgniter WebApp kimehifadhiwa hapa:

--

Kwa ujumuishaji mkubwa zaidi unaweza kutumia maktaba ya IFTTT ya Imp ya Umeme.

Hatua ya 1: Kusanya Sehemu

Kukusanya Sehemu
Kukusanya Sehemu
  • Utahitaji IMP ya Umeme na angalau 4 GPIO zinazopatikana, ninatumia IMP001 na bodi ya kuzuka ya Aprili.
  • Mdhibiti wa kuacha voltage ya chanzo hadi 5V. Ninatumia Moduli ya DC-DC Buck Converter Module. Toleo la MP1584EN la eBoot kutoka Amazon.
  • Moduli ya kupeleka mbili (au zaidi) au kifaa sawa cha kubadilisha ambacho kitatumika na pato la IMP. Ninatumia Moduli hii ya JBtek 4 Channel DC 5V Relay kutoka Amazon.
  • Kituo cha waya 4 cha waya. Ninatumia hii 5Pcs 2 Mistari 12P waya Connector Screw Terminal Barrier Block 300V 20A kutoka Amazon.

Hatua ya 2: Vifaa

Vifaa
Vifaa

Utahitaji pia:

  • Ufikiaji wa printa ya 3D au kisanduku kidogo cha mradi
  • Screw 4 ndogo juu ya 4mm x 6mm kwa kifuniko cha kesi
  • Kuunganisha waya
  • Wakata waya
  • Vipande vya waya
  • Bisibisi ndogo
  • Chuma cha kulehemu
  • Gundi moto au silicone
  • Mahusiano ya Zip

Hatua ya 3: Ukuza kesi hiyo

Ukubwa wa kesi
Ukubwa wa kesi

Mpangilio wa sehemu zako ili kuamua ni saizi gani utahitaji. Na mpangilio kama picha nitahitaji kesi ambayo ina urefu wa 140mm, 70mm kirefu, na 30mm mrefu.

Hatua ya 4: Waya DC-DC Converter

Waya DC-DC Kubadilisha
Waya DC-DC Kubadilisha

Kata jozi 3 za waya mwekundu na mweusi wa kushona kwa unganisho la umeme ndani na nje ya bodi ya kubadilisha DC-DC.

  • Ingizo: 100mm
  • Pato kwa IMP: 90mm
  • Pato kwa Moduli ya Kupokea: 130mm

Wauze kwa bodi yako kama inavyoonyeshwa.

Hatua ya 5: Nguvu ya waya kwa Vifaa

Nguvu ya waya kwa Vifaa
Nguvu ya waya kwa Vifaa
  • Unganisha pembejeo ya kibadilishaji cha DC-DC kwa alama mbili kwenye kizuizi cha terminal.
  • Weka waya mfupi wa pato la 5V kwa IMP.
  • Solder waya mrefu zaidi wa pato la 5V kwenye moduli ya kupeleka tena.

Hatua ya 6: Pembejeo za Moduli ya Kupeleka waya

Pembejeo za Moduli ya Relay ya Waya
Pembejeo za Moduli ya Relay ya Waya
  • Kata waya 4 x 90mm kwa viunganisho vya kuingiza moduli. Nilitumia rangi 4 tofauti kwa kumbukumbu rahisi baadaye wakati wa kuweka alama.
  • Weka waya kwa pembejeo za moduli ya kupeleka 1-4 kisha kwa matangazo 4 ya kwanza ya IMP GPIO (Pin1, 2, 5, & 7) mtawaliwa.

Hatua ya 7: Jumper ya Nguvu ya IMP

Jumper ya Nguvu ya IMP
Jumper ya Nguvu ya IMP

Unaweza kuhitaji kutumia nguvu ya USB wakati unapoandaa programu na kujaribu IMP yako. Unapomaliza, hakikisha kusogeza jumper ya nguvu upande wa BAT.

Hatua ya 8: Pembejeo za Hali ya Lango la Waya

Pembejeo ya Hali ya Lango la Waya
Pembejeo ya Hali ya Lango la Waya
  • Kata waya 2 x 80mm kwa pembejeo za hali ya sate.
  • Unganisha waya kwenye vituo 2 vilivyobaki vya screw.
  • Solder waya kwa karibu na matangazo ya IMP GPIO (Pin8 & 9) mtawaliwa.

Hatua ya 9: Chapisha au Nunua Kesi

Chapisha au Nunua Kesi
Chapisha au Nunua Kesi

Unaweza kupakua. STL yangu au. F3D kwa kesi hii kwenye GitHub au Thingiverse

Ikiwa huna ufikiaji wa printa ya 3D kesi ndogo ya mradi wa generic itafanya kazi.

Hatua ya 10: Pamba Kesi yako

Pamba Kesi yako
Pamba Kesi yako

Kwa sababu!

Niliweka maandishi yaliyowekwa ndani yangu na niliipaka rangi na mkali mweusi. Ikiwa unahisi kupendeza unaweza kutumia rangi ya akriliki, kucha ya kucha au kitu kingine kuifanya iwe nyepesi.

Hatua ya 11: Piga Hole kwa waya

Piga Hole kwa waya
Piga Hole kwa waya

Piga shimo ndogo 10-15mm upande karibu na katikati ya ambapo waya zote zitakutana.

Nilitumia Unibit kwa shimo safi, laini kwenye plastiki.

Hatua ya 12: Andaa na usakinishe waya zinazounganishwa

Andaa na Sakinisha waya za Kuunganika
Andaa na Sakinisha waya za Kuunganika
Andaa na Sakinisha waya za Kuunganika
Andaa na Sakinisha waya za Kuunganika

Kata waya 9 x 5-600mm kwa kuunganisha kifaa chetu hadi bodi ya mwendeshaji wa lango.

  • 2 kwa uingizaji wa umeme wa 24V
  • 3 kwa hadhi ya lango (pembejeo 2 na ardhi ya kawaida)
  • 2 kwa ishara wazi ya lango
  • 2 kwa ishara ya lango la karibu

Pindisha pamoja kila moja ya vikundi vilivyoorodheshwa hapo juu kwa kutumia kuchimba visima. Hii itafanya kila kitu kuwa rahisi na kuonekana bora.

Kanda na unganisha kila waya kwenye vituo husika kama inavyoonyeshwa.

Hatua ya 13: Njia za Kuunganisha Njia

Njia za Kuunganisha Njia
Njia za Kuunganisha Njia

Tumia waya wa kushikamana kupitia shimo kama inavyoonyeshwa.

Hatua ya 14: Vipengee vya Mlima

Vipengee vya Mlima
Vipengee vya Mlima

Weka na weka vipengee na shanga ndogo ya gundi moto au silicone. Usitumie mengi ikiwa unahitaji kuondoa sehemu, tumia ya kutosha kuilinda.

Awali nilitaka kuchapisha kesi hiyo na klipu / tabo kushikilia bodi mahali lakini nilihitaji kupata hii imewekwa na sikuwa na wakati. Kuongeza klipu za bodi kwenye kesi yako itakuwa kugusa mzuri.

Hatua ya 15: Funga waya za Kuunganisha

Funga nyaya za kuunganisha
Funga nyaya za kuunganisha

Funga waya za kushikamana na gundi moto au silicone.

Hatua ya 16: Funga Kesi

Funga Kesi
Funga Kesi

Nilitumia screws ndogo ~ 4mm kwenye orodha ya kesi hii iliyochapishwa ya 3D. Ikiwa una wasiwasi juu ya uchafu au unyevu weka shanga ya silicone au gundi moto karibu na kifuniko pamoja kabla ya kuifunga.

Hatua ya 17: Sakinisha katika Opereta wa Lango

Sakinisha katika Opereta wa Lango
Sakinisha katika Opereta wa Lango
Sakinisha katika Opereta wa Lango
Sakinisha katika Opereta wa Lango

Kwenye bodi kuu:

  • Hook waya mbili zilizounganishwa na kupeleka pato 1 kwa kituo cha Open Gate. (nyekundu / hudhurungi kwenye picha)
  • Hook waya mbili zilizounganishwa na kupeleka pato la 2 kwa kituo cha Karibu cha Lango. (njano / bluu kwenye picha)
  • Hook waya mbili zilizounganishwa na pembejeo ya DC-DC ya ubadilishaji kwenye vituo vya nguvu vya nyongeza ya 24V (nyekundu / nyeusi kwenye picha)

Kwenye bodi ya upanuzi

  • Jumper vituo vya kawaida vya screw pamoja na kipande kidogo cha waya
  • Unganisha ardhi ya kawaida kwa mojawapo ya vituo vya kupokezana vya kawaida (kijani kwenye picha)
  • Unganisha pembejeo za hali ya lango 2 (IMP Pin8 & 9) kwenye vituo vya kawaida vya wazi (HAPANA) vya visu (kijivu / manjano kwenye picha)

Peleka waya, zip kuzifunga ili kuonekana nadhifu na upate mahali pa kuweka au kuweka kesi yako.

Kuna picha za ziada, zenye azimio kamili, zilizowekwa kwenye hazina ya GitHub.

Hatua ya 18: Weka Njia ya Kupokea Aux

Weka Njia ya Kupokea Aux
Weka Njia ya Kupokea Aux

Weka swichi za upitishaji msaidizi kama inavyoonekana kwenye picha.

Hii itampa IMP ishara inazohitaji kuamua ikiwa lango limefungwa, kufungua, kufunguliwa au kufungwa.

Hatua ya 19: Wakala wa IMP na Msimbo wa Kifaa

Wakala wa IMP na Msimbo wa Kifaa
Wakala wa IMP na Msimbo wa Kifaa

Nambari ya Wakala wa Umeme:

  • Unda Mfano mpya katika IDE ya Umeme:
  • Badilisha URL ili uelekeze kwenye seva yako

// kazi ya kushughulikia

kazi httpHandler (req, resp) {jaribu {local d = http.jsondecode (req.body); //server.log (d.c); ikiwa (d.c == "btn") {//server.log (d.val); tuma kifaa ("btn", d.val); tuma (tuma 200, "Sawa"); }} kukamata (ex) {// Ikiwa kulikuwa na hitilafu, irudishe kwenye seva ya majibu.log ("kosa:" + ex); resp.send (500, "Kosa la Seva ya Ndani:" + ex); }} // // Kusajili mshughulikiaji wa HTTP http.onrequest (httpHandler); // GateStateChange kazi ya mshughulikiaji wa kazi gateStateChangeHandler (data) {// URL kwa huduma ya wavuti url = "https://projects.ajillion.com/save_gate_state"; // Weka kichwa cha Aina ya Yaliyomo kwa vichwa vya ndani vya json = {"" Type-Type ":" application / json "}; // Encode ilipokea data na ingia mwili wa ndani = http.jsonencode (data); seva.log (mwili); // Tuma data kwenye huduma ya wavuti yako http.post (url, vichwa, mwili).sendync (); } // Kusajili kifaa cha kushughulikia lango laStateChange.on ("gateStateChange", gateStateChangeHandler);

Nambari ya Wakala wa Umeme:

  • Peana kifaa cha Imp kwa mfano wako
  • Thibitisha pini za vifaa zimetengwa kama zimeunganishwa

// Maktaba ya Debouce

#hitaji "Kitufe.class.nut: 1.2.0" // Jina la lango Fungua pini ya GPIO (chini chini) langoFungua <- hardware.pin2; // Jina la lango Funga kudhibiti GPIO pini (chini ya kazi) langoFunga <- hardware.pin7; // Sanidi 'langoFungua' kuwa pato la dijiti na thamani ya kuanzia ya dijiti 1 (juu) langoOpen.configure (DIGITAL_OUT, 1); // Sanidi 'langoFunga' kuwa pato la dijiti na thamani ya kuanzia ya dijiti 1 (ya juu) langoClose.configure (DIGITAL_OUT, 1); // Alias ya pini ya GPIO inayoonyesha lango linahamia (NO) langoMovingState <- Button (hardware.pin8, DIGITAL_IN_PULLUP); // Jina la pini ya GPIO inayoonyesha lango limefunguliwa kikamilifu (NO) langoOpenState <- Button (hardware.pin9, DIGITAL_IN_PULLUP); // Kubadilika kwa ulimwengu kushikilia hali ya lango (Open = 1 / Closed = 0) localGateOpenState = 0; // kitu cha kipima muda cha latchTimer = null agent.on ("btn", function (data) {switch (data.cmd) {case "open": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer) latchTimer = imp.wakeup (1, releaseOpen); server.log ("Fungua amri imepokea"); kesi ya kuvunja "latch30m": gateOpen.write (0); ikiwa (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1800, releaseOpen); server.log ("Amri ya Latch30m imepokea"); kesi ya kuvunja "latch8h": gateOpen.write (0); ikiwa (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (28800, kutolewaOpen); server.log ("Amri ya Latch8h imepokea"); kesi ya kuvunja "karibu": ikiwa (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); gateClose.write (0); latchTimer = imp..wakeup (1, releaseClose); server.log ("Funga sasa amri imepokea"); vunja chaguo-msingi: server.log ("Amri ya kitufe haijatambuliwa");}}); kutolewa kwa kaziFungua () {if (latchTimer) imp.cancelwakeup (latchTimer); langoFungua. andika (1); //server.log ("Timer iliyotolewa lango Fungua mawasiliano ya kubadili"); } kutolewa kwa kaziFunga () {if (latchTimer) imp.cancelwakeup (latchTimer); langoFunga.andika (1); //server.log ("Timer iliyotolewa lango Funga kubadili mawasiliano"); } gateMovingState.onPress (kazi () {// Relay imeamilishwa, lango linahamia //server.log ("Gate linafunguliwa"); data ya ndani = {"gatestate": 1, "timer": hardware.millis (wakala.send ("gateStateChange", data);})) onRelease (kazi () {// Relay imetolewa, lango limepumzika //server.log ("Gate imefungwa"); data ya ndani = {"gatestate": 0, "timer": hardware.millis ()}; wakala.send ("gateStateChange", data);}); gateOpenState. wakala.send ("gateStateChange", data);})) onRelease (kazi () {// Relay imetolewa, lango halijafunguliwa kabisa //server.log ("Gate linafungwa"); data ya hapa = {"gatestate": 3, "timer": hardware.millis ()}; wakala.send ("gateStateChange", data);});

Hatua ya 20: Nambari ya Huduma ya Wavuti ya PHP

Huduma ya Wavuti PHP Code
Huduma ya Wavuti PHP Code

Niliandika nambari hii kwa mfumo wa CodeIgniter kwa sababu niliiongeza kwenye mradi wa zamani uliopo. Msimamizi na nambari ya kutazama inaweza kubadilishwa kwa urahisi kwa mfumo wa chaguo lako.

Ili kuweka mambo rahisi nilihifadhi data ya JSON kwenye faili tambarare ya kuhifadhi data. Ikiwa unahitaji magogo au kazi ngumu zaidi zinazohusiana na data tumia hifadhidata.

Maktaba ya ajax niliyoandika na kutumia katika mradi huu inaweza kupakua kutoka kwa ghala la GitHub: ThingEngineer / Codeigniter-jQuery-Ajax

Nambari ya Mdhibiti wa PHP:

  • programu / watawala / miradi.php
  • Hakikisha njia ya data inapatikana kwa hati yako ya PHP, eneo na nafasi za kusoma / kuandika.

mzigo-> msaidizi (safu ('faili', 'tarehe'));

data ya data = json_decode (kusoma_file ('../ app / logs / gatestate.data'), KWELI); kubadili ($ data ['gatestate']) {kesi 0: $ view_data ['gatestate'] = 'Ilifungwa'; kuvunja; kesi 1: $ view_data ['gatestate'] = 'Inafunguliwa…'; kuvunja; kesi 2: $ view_data ['gatestate'] = 'Fungua'; kuvunja; kesi 3: $ view_data ['gatestate'] = 'Kufunga…'; kuvunja; } $ last_opened = json_decode (read_file ('../ app / logs / projects / gateopened.data'), KWELI); $ view_data ['last_opened'] = muda wa saa ($ last_opened ['last_opened'], time ()). 'iliyopita'; // Tazama Mzigo $ t ['data'] = $ view_data; $ this-> load-> view ('gate_view', $ t); } kazi save_gate_state () {$ this-> load-> msaidizi ('file'); $ data = file_get_contents ('php: // input'); andika_file ('../ app / logs / projects / gatestate.data', $ data); data ya data = json_decode (data ya data, KWELI); ikiwa ($ data ['gatestate'] == 1) {$ last_opened = array ('last_opened' => time ()); andika_file ('../ app / logs / projects / gateopened.data', json_encode ($ last_opened)); }} kazi get_gate_state () {$ hii-> mzigo-> msaidizi (safu ('faili', 'tarehe')); $ this-> mzigo-> maktaba ('ajax'); data ya data = json_decode (kusoma_file ('../ app / logs / projects / gatestate.data'), TRUE); $ last_opened = json_decode (read_file ('../ app / logs / projects / gateopened.data'), KWELI); data ya data ['last_opened'] = muda wa saa ($ last_opened ['last_opened'], time ()). 'iliyopita'; $ this-> ajax-> output_ajax (data data, 'json', UONGO); // tuma data ya json, usitekeleze ombi la ajax}} / * Mwisho wa miradi ya faili.php * / / * Mahali:./application/controllers/projects.php * /

Nambari ya Kuangalia ya PHP:

Nilitumia Bootstrap kwa mwisho wa mbele kwa sababu ni haraka, rahisi na msikivu. Unaweza kuipakua hapa: https://getbootstrap.com (jQuery imejumuishwa)

  • programu / watawala / gate_view.php
  • Badilisha nafasi ya WAKALA-WAKALA wako na nambari yako ya wakala wa Umeme

Opereta ya lango la IoT Addon

  • Nyumbani
  • Usimamizi

Fungua Latch ya Lango Fungua kwa dakika 30 Latch Fungua kwa masaa 8 Funga sasa Hali ya Lango: Ilifunguliwa mwisho $ (hati). Tayari (kazi () {resetStatus ();}) kazi sendJSON (JSONout) {var url = 'https:// wakala.electricimp.com/YOUR-AGENT-CODE '; $.chapisho (url, JSONout); } $ ("# open_gate"). bonyeza (function () {var JSONout = '{"c": "btn", "val": {"cmd": "open"}}'; sendJSON (JSONout); $ ("#status"). maandishi ("Kufungua…");}); $ ("# latch30m_gate"). bonyeza (function () {var JSONout = '{"c": "btn", "val": {"cmd": "latch30m"}}'; sendJSON (JSONout); $ ("#status"). maandishi ("Kufungua…");}); $ ("# latch8h_gate"). bonyeza (function () {var JSONout = '{"c": "btn", "val": {"cmd": "latch8h"}}'; tumaJSON (JSONout); $ ("#status"). maandishi ("Kufungua…");}); $ ("# karibu_lango"). bonyeza (function () {var JSONout = '{"c": "btn", "val": {"cmd": "close"}}'; sendJSON (JSONout); $ ("#status"). maandishi ("Kufunga…");}); kazi resetStatus () {// Lengo url var target = 'https://projects.ajillion.com/get_gate_state'; // Omba var data = {wakala: 'programu'}; // Tuma ombi la posta ya ajax $.ajax ({url: target, dataType: 'json', aina: 'POST', data: data, mafanikio: kazi (data, textStatus, XMLHttpRequest) {switch (data.gatestate) {kesi 0: $ ("# status"). Maandishi ('Imefungwa'); kuvunja; kesi 1: $ ("# status"). Maandishi ('Kufungua …'); kuvunja; kesi 2: $ ("# status") maandishi ('Open'); kuvunja; kesi 3: $ ("# status"). maandishi ('Kufunga…'); kuvunja; chaguomsingi: $ ("# status"). maandishi ('Kosa');} $ ("#last_opened"). maandishi (data.last_opened);}, makosa: kazi (XMLHttpRequest, textStatus, errorThrown) {// Kosa la ujumbe $ ("# status"). maandishi ('Kosa la Seva');}}})); kuwekaTimeout (resetStatus, 3000); }

Ilipendekeza: