Агуулгын хүснэгт:

WebApp-ийн хяналттай хаалганы операторын нэмэлт (IoT): 20 алхам (зурагтай)
WebApp-ийн хяналттай хаалганы операторын нэмэлт (IoT): 20 алхам (зурагтай)

Видео: WebApp-ийн хяналттай хаалганы операторын нэмэлт (IoT): 20 алхам (зурагтай)

Видео: WebApp-ийн хяналттай хаалганы операторын нэмэлт (IoT): 20 алхам (зурагтай)
Видео: MJC School. We are ready to help you become a programmer. 2024, Долдугаар сарын
Anonim
WebApp-ийн хяналттай хаалганы операторын нэмэлт (IoT)
WebApp-ийн хяналттай хаалганы операторын нэмэлт (IoT)
WebApp-ийн хяналттай хаалганы операторын нэмэлт (IoT)
WebApp-ийн хяналттай хаалганы операторын нэмэлт (IoT)
WebApp-ийн хяналттай хаалганы операторын нэмэлт хэрэгсэл (IoT)
WebApp-ийн хяналттай хаалганы операторын нэмэлт хэрэгсэл (IoT)

Надад олон хүн ирж, явах шаардлагатай хаалгатай талбайтай үйлчлүүлэгч бий. Тэд гадна талд товчлуур ашиглахыг хүсээгүй бөгөөд цөөн тооны Keyfob дамжуулагчтай байв. Нэмэлт түлхүүр фобс хийх боломжийн эх үүсвэр олоход хэцүү байсан. Энэхүү Liftmaster хаалганы операторыг IoT -ийг өөрчлөн тохируулсан техник хангамж, вэб API, вэб апп интерфэйстэй нийцүүлэн сайжруулах нь маш сайн боломж гэж би бодсон. Энэ нь олон нийтийн хандалтын асуудлыг шийдээд зогсохгүй нэмэлт функцийг нээж өгсөн юм!

Дээрх сүүлийн зурган дээр миний бүтэн жилийн турш цахилгаан товчтой цүнхэнд ажиллуулсан туршилтын хэсэг байна. Шинэчлэх цаг нь болсон гэж би бодсон!

Энэ бол энд бичигдсэн бүх код, техник хангамжийн мэдээлэл, дизайн бүхий бүрэн ажиллагаатай шийдэл юм.

Төслийн бүх файлыг GitHub дээр байрлуулсан болно: github.com/ThingEngineer/IoT-Gate-Operator-Addon

CodeIgniter WebApp интерфэйсийн жишээг энд байрлуулсан болно: projects.ajillion.com/gate Энэ жишээ нь шууд хаалгад холбогдоогүй боловч хаалган дээр ажилладаг яг интерфэйс, код юм (зарим хамгаалалтын функцуудыг хассан).

--

Илүү их интеграцчлахын тулд IFTTT номын санг Цахилгаан имп -д ашиглаж болно.

Алхам 1: эд ангиудыг цуглуулах

Эд ангиудыг цуглуул
Эд ангиудыг цуглуул
  • Танд дор хаяж 4 GPIO боломжтой Цахилгаан IMP хэрэгтэй болно, би IMP001 -ийг 4 -р сарын таслах самбартай ашиглаж байна.
  • Эх үүсвэрийн хүчдэлийг 5 В хүртэл бууруулах зохицуулагч. Би DC-DC Buck Converter Step Down модулийг ашиглаж байна. eBoot -ийн Amazon15 -аас гаргасан MP1584EN хувилбар.
  • IMP -ийн гаралттай ажиллах хос (эсвэл түүнээс дээш) реле модуль эсвэл түүнтэй төстэй шилжүүлэгч төхөөрөмж. Би үүнийг Amazon -аас авсан JBtek 4 суваг DC 5V реле модулийг ашиглаж байна.
  • 4 утастай шураг терминал. Би үүнийг Amazon -аас авсан 5Pcs 2 Rows 12P Wire Connector Screw Terminal Barrier Block 300V 20A блокыг ашиглаж байна.

Алхам 2: хангамж

Хангамж
Хангамж

Танд бас хэрэгтэй болно:

  • 3D принтер эсвэл жижиг төслийн хайрцагт хандах
  • Хэргийн тагны хувьд 4мм х 6мм хэмжээтэй 4 жижиг эрэг
  • Холбох утас
  • Утас таслагч
  • Утас хуулагч
  • Жижиг халив
  • Гагнуурын төмөр
  • Халуун цавуу эсвэл силикон
  • Зип зангиа

Алхам 3: Хэргийн хэмжээг томруулна уу

Хэргийг томруулах
Хэргийг томруулах

Танд ямар хэмжээтэй хайрцаг хэрэгтэй болохыг тодорхойлохын тулд эд ангиудыг байрлуул. Зураг дээр үзүүлсэн шиг надад 140 мм өргөн, 70 мм гүн, 30 мм өндөр хайрцаг хэрэгтэй болно.

Алхам 4: DC-DC хөрвүүлэгч утсыг холбоно уу

Утас DC-DC хөрвүүлэгч
Утас DC-DC хөрвүүлэгч

DC-DC хөрвүүлэгч самбараас цахилгаан гаралтын холболт хийх зориулалттай улаан, хар өнгийн 3 хос утсыг хайчилж ав.

  • Оролт: 100 мм
  • IMP -ийн гаралт: 90 мм
  • Реле модулийн гаралт: 130 мм

Зурагт үзүүлсэн шиг тэдгээрийг самбар дээрээ гагнана.

Алхам 5: Эрчим хүчийг төхөөрөмжид холбоно уу

Төхөөрөмжид цахилгаан дамжуулах
Төхөөрөмжид цахилгаан дамжуулах
  • DC-DC хөрвүүлэгчийн оролтыг шураг терминал блок дээрх хоёр цэг рүү холбоно уу.
  • Богино 5В гаралтын утсыг IMP руу гагнана.
  • Урт 5В гаралтын утсыг релей модульд гагнана.

Алхам 6: Утасны реле модулийн оролт

Утасны реле модулийн оролт
Утасны реле модулийн оролт
  • Релей модулийн оролтын холболтын хувьд 4х90 мм хэмжээтэй утсыг хайчилж ав. Би кодлохдоо дараа нь хялбархан ашиглахын тулд 4 тусдаа өнгийг ашигласан.
  • Утасыг реле модулийн 1-4 оролттой холбож дараа нь IMP GPIO-ийн эхний 4 цэг (Pin1, 2, 5, & 7) тус тус оруулна.

Алхам 7: IMP Power Jumper

IMP Power Jumper
IMP Power Jumper

Та IMP -ээ програмчилж, туршиж байхдаа USB хүчийг ашиглах шаардлагатай болж магадгүй юм. Дуусгахдаа цахилгаан холбогчийг BAT тал руу шилжүүлэхээ мартуузай.

Алхам 8: Утасны хаалганы статусын оролт

Утасны хаалганы статусын оролт
Утасны хаалганы статусын оролт
  • Статусын оролтын хувьд 2х80 мм хэмжээтэй утсыг хайчилж ав.
  • Үлдсэн 2 эрэг хавчаартай утсыг холбоно уу.
  • Гагнуурын утас нь IMP GPIO цэгүүдийн хажууд (Pin8 & 9) тус тус байна.

Алхам 9: Кейс хэвлэх эсвэл худалдаж авах

Кейс хэвлэх эсвэл худалдаж авах
Кейс хэвлэх эсвэл худалдаж авах

Та энэ тохиолдолд миний. STL эсвэл. F3D -ийг GitHub эсвэл Thingiverse дээрээс татаж авч болно

Хэрэв танд 3D принтер ашиглах боломж байхгүй бол жижиг ерөнхий төслийн хэрэг ажиллах болно.

Алхам 10: Хэргээ чимэглээрэй

Хэргийг чимэглээрэй
Хэргийг чимэглээрэй

Учир нь!

Би хэдэн догол мөртэй текстийг миний дээр тавиад зүгээр л хар үзүүрээр будлаа. Хэрэв та адал явдалтай байгаа бол нийлэг будаг, хумсны будаг эсвэл өөр зүйл хэрэглэж, өнгөлөг болгоно.

Алхам 11: Утасны цооног өрөмдөх

Утасны өрөмдлөгийн цооног
Утасны өрөмдлөгийн цооног

Бүх утаснууд хоорондоо нийлдэг дунд хэсгийн ойролцоо 10-15 мм хэмжээтэй жижиг нүх гарга.

Би Unibit -ийг ашиглан хуванцар доторх цэвэр, гөлгөр нүхийг ашигласан.

Алхам 12: Hookup Wires бэлтгэж, суулгана уу

Холбох утсыг бэлтгэх, суурилуулах
Холбох утсыг бэлтгэх, суурилуулах
Холбох утсыг бэлтгэх, суурилуулах
Холбох утсыг бэлтгэх, суурилуулах

Манай төхөөрөмжийг хаалганы операторын самбар дээр холбохын тулд 9 x 5-600 мм хэмжээтэй утас хайчилж ав.

  • 24V хүчдэлийн оролтын хувьд 2
  • Хаалганы статусын хувьд 3 (2 оролт ба нийтлэг газар)
  • Нээлттэй хаалганы дохионы хувьд 2
  • Хаалга хаагдах дохионы хувьд 2

Дээр дурдсан бүлгүүд тус бүрийг өрөм ашиглан мушгина. Энэ нь бүх зүйлийг илүү хялбар болгож, илүү сайхан харагдах болно.

Зураг дээр үзүүлсэн шиг утас бүрийг холбогдох терминалуудад хуулж, холбоно уу.

Алхам 13: Холболтын утсыг чиглүүлэх

Маршрут холбох утас
Маршрут холбох утас

Холбогдсон утаснуудыг зураг дээрх шиг нүхээр дамжуулна.

Алхам 14: Бүрэлдэхүүн хэсгүүдийг холбох

Бүрэлдэхүүн хэсгүүдийг холбох
Бүрэлдэхүүн хэсгүүдийг холбох

Бүрэлдэхүүн хэсгүүдийг халуун цавуу эсвэл силиконоор хийсэн жижиг ирмэгээр байрлуулж, холбоно. Хэрэв та хэсгийг салгах шаардлагатай бол хэт их бүү ашиглаарай.

Би уг хэргийг самбаруудыг байрлуулахын тулд хавчаар/хавчуургаар хэвлэхийг хүсч байсан боловч үүнийг суулгах шаардлагатай байсан ч цаг зав гараагүй. Таны хайрцагт самбарын хавчаар нэмэх нь үнэхээр сайхан санагдах болно.

Алхам 15: Холбох утсыг битүүмжлэх

Холбох утсыг битүүмжлэх
Холбох утсыг битүүмжлэх

Холбох утсыг халуун цавуу эсвэл силиконоор битүүмжилнэ.

Алхам 16: Хэргийг хаах

Хэргийг хаах
Хэргийг хаах

Би энэ 3D хэвлэсэн хайрцагны жагсаалтад ~ 4мм хэмжээтэй жижиг эрэг ашигласан. Хэрэв та шороо, чийгийн талаар санаа зовж байгаа бол тагийг нь таглахын өмнө силикон эсвэл халуун цавуу ирмэгийг тойруулан байрлуулна.

Алхам 17: Хаалганы операторт суулгана уу

Хаалганы оператор дээр суулгана уу
Хаалганы оператор дээр суулгана уу
Хаалганы оператор дээр суулгана уу
Хаалганы оператор дээр суулгана уу

Үндсэн самбар дээр:

  • 1 реле гаралттай холбогдсон хоёр утсыг Open Gate терминал руу залга. (зураг дээрх улаан/хүрэн)
  • 2 реле гаралттай холбогдсон хоёр утсыг Close Gate терминал руу залгаарай. (зураг дээрх шар/цэнхэр)
  • DC-DC хөрвүүлэгчийн оролттой холбогдсон хоёр утсыг 24V дагалдах хэрэгслийн цахилгаан шураг терминал руу залгаарай (зураг дээрх улаан/хар)

Өргөтгөх самбар дээр

  • Релений нийтлэг шураг терминалуудыг жижиг утсаар холбоно уу
  • Нийтлэг газардуулгыг релений нийтлэг шураг терминалуудын аль нэгэнд холбоно уу (зураг дээрх ногоон)
  • Хаалганы статусын 2 оролтыг (IMP Pin8 & 9) реле хэвийн нээлттэй (NO) шураг терминалуудтай холбоно уу (зураг дээрх саарал/шар)

Утаснуудаа чиглүүлж, цэвэрхэн харагдуулахын тулд зип уяж, хайрцгийг бэхлэх эсвэл тохируулах газрыг хайж олоорой.

GitHub репозиторид байрлуулсан нэмэлт, бүрэн нягтралтай зургууд байдаг.

Алхам 18: Aux Relay горимыг тохируулна уу

Aux Relay горимыг тохируулна уу
Aux Relay горимыг тохируулна уу

Зураг дээр үзүүлсэн шиг туслах реле унтраалгыг тохируулна уу.

Энэ нь IMP -д хаалга хаагдсан, нээгдэж, нээгдэж эсвэл хаагдаж байгааг тодорхойлоход шаардлагатай дохиог өгөх болно.

Алхам 19: IMP агент ба төхөөрөмжийн код

IMP агент ба төхөөрөмжийн код
IMP агент ба төхөөрөмжийн код

Цахилгаан импресс агент код:

  • Цахилгаан имп IDE дээр шинэ загвар үүсгэх:
  • Сервер рүүгээ чиглүүлэхийн тулд URL хаягийг солино уу

// HTTP зохицуулагчийн функц

функц httpHandler (req, resp) {оролдох {local d = http.jsondecode (req.body); //server.log(d.c); хэрэв (d.c == "btn") {//server.log(d.val); device.send ("btn", d.val); resp.send (200, "OK"); }} catch (ex) {// Хэрэв алдаа гарсан бол түүнийг хариу server.log руу илгээнэ үү ("алдаа:" + ex); resp.send (500, "Дотоод серверийн алдаа:" + ex); }} // HTTP зохицуулагчийг бүртгүүлэх http.onrequest (httpHandler); // GateStateChange зохицуулагчийн функцийн функц gateStateChangeHandler (өгөгдөл) {// вэб үйлчилгээний URL хаягийн дотоод url = "https://projects.ajillion.com/save_gate_state"; // Content-Type толгойг json local headers болгон тохируул = {"Content-Type": "application/json"}; // Хүлээн авсан өгөгдлийг кодлох ба локал биед бүртгүүлэх = http.jsonencode (өгөгдөл); server.log (үндсэн хэсэг); // Өгөгдлийг өөрийн вэб үйлчилгээ рүү илгээнэ үү http.post (url, headers, body).sendsync (); } // gateStateChange handler device.on дээр бүртгүүлэх ("gateStateChange", gateStateChangeHandler);

Цахилгаан импресс агент код:

  • Загвартаа Imp төхөөрөмжийг оноож өг
  • Тоног төхөөрөмжийн тээглүүрийг холбогдож байгаа эсэхийг шалгаарай

// Debouce номын сан

#require "Button.class.nut: 1.2.0" // gateOpen GPIO pin (идэвхтэй бага) gateOpen <- hardware.pin2; // Хаалгад зориулсан aliasClose control GPIO pin (active low) gateClose <- hardware.pin7; // 'gateOpen' -ийг дижитал 1 (өндөр) gateOpen.configure (DIGITAL_OUT, 1) эхлэх утга бүхий дижитал гаралт болгон тохируулах; // 'gateClose' -ийг дижитал 1 (өндөр) gateClose.configure (DIGITAL_OUT, 1) эхлэх утга бүхий дижитал гаралт болгон тохируулах; // Хаалга хөдөлж байгааг илтгэдэг GPIO зүүний нэр (N. O.) gateMovingState <- Button (hardware.pin8, DIGITAL_IN_PULLUP); // Хаалга бүрэн нээлттэй байгааг илтгэдэг GPIO зүүний нэр (N. O.) gateOpenState <- Button (hardware.pin9, DIGITAL_IN_PULLUP); // Хаалганы төлөвийг хадгалах дэлхийн хувьсагч (Open = 1 / Closed = 0) local lastGateOpenState = 0; // Latch Timer обьект локал latchTimer = null agent.on ("btn", функц (өгөгдөл) {switch (data.cmd) {case "open": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer)); latchTimer = imp.wakeup (1, releaseOpen); server.log ("Нээлттэй тушаалыг хүлээн авсан"); "latch30m" завсарлагаа: gateOpen.write (0); хэрэв (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1800, releaseOpen); server.log ("Latch30m команд хүлээн авлаа"); "latch8h" завсарлагааны тохиолдол: gateOpen.write (0); хэрэв (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (28800, releaseOpen); server.log ("Latch8h тушаалыг хүлээн авсан"); таслах "таслах": хэрэв (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); gateClose.write (0); latchTimer = imp.wakeup (1, releaseClose); server.log ("Одоо хаах тушаал хүлээн авсан"); анхдагчаар таслах: server.log ("Товчлуурын команд танигдаагүй");}}); function releaseOpen () {if (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); //server.log("Timer гаргасан gateOpen switch contact "); } function releaseClose () {if (latchTimer) imp.cancelwakeup (latchTimer); gateClose.write (1); //server.log("Timer гаргасан gateClose switch contact "); } gateMovingState.onPress (function () {// Реле идэвхжсэн, хаалга хөдөлж байна //server.log("Gate нээгдэж байна "); локал өгөгдөл = {" gatestate ": 1," timer ": hardware.millis ()}; agent.send ("gateStateChange", өгөгдөл);}). onRelease (function () {// Реле суллагдсан, хаалга амарч байна //server.log("Gate хаалттай байна "); орон нутгийн өгөгдөл = {"gatestate": 0, "timer": hardware.millis ()}; agent.send ("gateStateChange", өгөгдөл);}); gateOpenState.onPress (function () {// Реле идэвхжсэн, хаалга бүрэн нээлттэй байна //server.log("Gate is open "); local data = {" gatestate ": 2," timer ": hardware.millis ()}; agent.send ("gateStateChange", өгөгдөл);}). onRelease (function () {// Реле суллагдсан, хаалга бүрэн нээгдээгүй байна //server.log("Gate хаалттай байна "); орон нутгийн өгөгдөл = {"gatestate": 3, "timer": hardware.millis ()}; agent.send ("gateStateChange", өгөгдөл);});

Алхам 20: Вэб үйлчилгээний PHP код

Вэб үйлчилгээний PHP код
Вэб үйлчилгээний PHP код

Би энэ кодыг CodeIgniter тогтолцоонд зориулж бичсэн, учир нь би үүнийг хуучин байгаа төсөл дээр нэмсэн. Хянагч ба харах кодыг таны сонгосон хүрээнд хялбархан тохируулж болно.

Энгийн байлгахын тулд би JSON өгөгдлийг өгөгдөл хадгалах хавтгай файлд хадгалсан. Хэрэв танд бүртгэл хийх эсвэл өгөгдөлтэй холбоотой илүү төвөгтэй функц хэрэгтэй бол мэдээллийн санг ашиглана уу.

Миний энэ төсөлд ашиглаж, бичсэн ajax номын санг GitHub репозитороос татаж авах боломжтой: ThingEngineer/Codeigniter-jQuery-Ajax

PHP хянагчийн код:

  • апп/хянагч/төсөл.php
  • Өгөгдлийн зам нь таны PHP скриптээр, байршил, унших/бичих давуу эрхээр хандах боломжтой эсэхийг шалгаарай.

load-> туслагч (массив ('файл', 'огноо'));

$ data = json_decode (read_file ('../ app/logs/gatestate.data'), ҮНЭН); шилжүүлэгч ($ data ['gatestate']) {тохиолдол 0: $ view_data ['gatestate'] = 'Хаалттай'; завсарлага; тохиолдол 1: $ view_data ['gatestate'] = 'Нээгдэж байна …'; завсарлага; тохиолдол 2: $ view_data ['gatestate'] = 'Нээлттэй'; завсарлага; тохиолдол 3: $ view_data ['gatestate'] = 'Хааж байна …'; завсарлага; } $ last_opened = json_decode (read_file ('../ app/logs/projects/gateopened.data'), ҮНЭН); $ view_data ['last_opened'] = цаг хугацаа ($ last_opened ['last_opened'], time ()). 'өмнө'; // View View $ t ['data'] = $ view_data; $ this-> load-> view ('gate_view', $ t); } function save_gate_state () {$ this-> load-> helper ('file'); $ data = file_get_contents ('php: // input'); write_file ('../ app/logs/projects/gatestate.data', $ data); $ өгөгдөл = json_decode ($ өгөгдөл, ҮНЭН); if ($ data ['gatestate'] == 1) {$ last_opened = массив ('last_opened' => time ()); write_file ('../ app/logs/projects/gateopened.data', json_encode ($ last_opened)); }} функц get_gate_state () {$ this-> load-> helper (массив ('файл', 'огноо')); $ this-> load-> номын сан ('ajax'); $ data = json_decode (read_file ('../ app/logs/projects/gatestate.data'), ҮНЭН); $ last_opened = json_decode (read_file ('../ app/logs/projects/gateopened.data'), ҮНЭН); $ data ['last_opened'] = цаг хугацаа ($ last_opened ['last_opened'], time ()). 'өмнө'; $ this-> ajax-> output_ajax ($ data, 'json', FALSE); // json өгөгдөл илгээх, ajax хүсэлтийг биелүүлэхгүй}}/ * Файлын төгсгөлийн төслүүд.php *// * Байршил:./application/controllers/projects.php */

PHP харах код:

Би Bootstrap-ийг урд хэсэгт нь ашигласан, учир нь энэ нь хурдан, хялбар бөгөөд хариу үйлдэл сайтай байдаг. Та үүнийг эндээс татаж авах боломжтой: https://getbootstrap.com (jQuery багтсан болно)

  • апп/хянагч/gate_view.php
  • YOUR-AGENT-CODE-г өөрийн Electric Imp агент кодоор солино уу

IoT Gate Opperator Addon IoT Gate Opperator Addon

  • Гэр
  • админ

Нээлтийн хаалганы түгжээ 30 минутын турш нээгдэнэ 8 цагийн турш нээгдэнэ Одоо хаах Хаалганы байдал: Хамгийн сүүлд нээгдсэн $ (document).ready (function () {resetStatus ();}) функц sendJSON (JSONout) {var url = 'https:// agent.electricimp.com/YOUR-AGENT-CODE '; $.post (url, JSONout); } $ ("#open_gate"). дарна уу (function () {var JSONout = '{"c": "btn", "val": {"cmd": "open"}}'; sendJSON (JSONout); $ ("#байдал"). текст ("Нээгдэж байна …");}); $ ("#latch30m_gate"). дарна уу (function () {var JSONout = '{"c": "btn", "val": {"cmd": "latch30m"}}}; sendJSON (JSONout); $ ("#байдал").. текст ("Нээлт …");}); $ ("#latch8h_gate"). дарна уу (function () {var JSONout = '{"c": "btn", "val": {"cmd": "latch8h"}}}; sendJSON (JSONout); $ ("#байдал").. текст ("Нээлт …");}); $ ("#close_gate"). дарна уу (function () {var JSONout = '{"c": "btn", "val": {"cmd": "close"}}'; sendJSON (JSONout); $ ("#байдал"). текст ("Хаах …");}); function resetStatus () {// Target url var target = 'https://projects.ajillion.com/get_gate_state'; // Var data хүсэх = {agent: 'app'}; // ajax шуудангийн хүсэлт илгээх $.ajax ({url: target, dataType: 'json', type: 'POST', data: data, амжилт: function (data, textStatus, XMLHttpRequest) {switch (data.gatestate) {case 0: $ ("#статус"). Текст ('Хаалттай'); завсарлага; 1 -р тохиолдол: $ ("#төлөв"). Текст ('Нээлтийн …'); завсарлага; 2 -р тохиолдол: $ ("#төлөв").text ('Нээлттэй'); завсарлага; 3 -р тохиолдол: $ ("#статус"). текст ('Хааж байна …'); завсарлага; анхдагч: $ ("#төлөв"). текст ('Алдаа');} $ ("#last_opened"). текст (data.last_opened);}, алдаа: функц (XMLHttpRequest, textStatus, errorThrown) {// Алдааны мэдэгдэл $ ("#төлөв"). текст ('Серверийн алдаа');}}); setTimeout (resetStatus, 3000); }

Зөвлөмж болгож буй: