WebApp Controlled Gate Operator Add-on (IoT): 20 Steps (with Pictures)
WebApp Controlled Gate Operator Add-on (IoT): 20 Steps (with Pictures)

Video: WebApp Controlled Gate Operator Add-on (IoT): 20 Steps (with Pictures)

Video: WebApp Controlled Gate Operator Add-on (IoT): 20 Steps (with Pictures)
Video: Become An Electrical Lineworker 2025, Leden
Anonim
WebApp Controlled Gate Operator Add-on (IoT)
WebApp Controlled Gate Operator Add-on (IoT)
WebApp Controlled Gate Operator Add-on (IoT)
WebApp Controlled Gate Operator Add-on (IoT)
WebApp Controlled Gate Operator Add-on (IoT)
WebApp Controlled Gate Operator Add-on (IoT)

Mám klienta, který měl uzavřenou oblast, kam muselo přijít a odejít mnoho lidí. Nechtěli používat klávesnici zvenčí a měli jen omezený počet vysílačů ovladačů. Bylo obtížné najít cenově dostupný zdroj pro další ovladače. Říkal jsem si, že by byla skvělá příležitost upgradovat tento pohon brány Liftmaster tak, aby byl IoT kompatibilní s vlastním hardwarem, webovým API a rozhraním webové aplikace. To nejen vyřešilo problém s hromadným přístupem, ale také otevřelo další funkce!

Na poslední fotografii výše je testovací jednotka, kterou jsem nechal běžet téměř rok v tašce na ziplock. Myslel jsem, že je čas na upgrade!

Toto je plně funkční řešení se všemi zde uvedenými kódy, hardwarovými informacemi a návrhy.

Všechny soubory projektů jsou také hostovány na GitHub: github.com/ThingEngineer/IoT-Gate-Operator-Addon

Zde je umístěn příklad rozhraní CodeIgniter WebApp: projects.ajillion.com/gate Tato instance není připojena k živé bráně, ale je přesným rozhraním a kódem, který běží na bráně (minus některé funkce zabezpečení).

--

Pro ještě větší integraci můžete použít knihovnu IFTTT pro Electric Imp.

Krok 1: Shromážděte součásti

Shromážděte díly
Shromážděte díly
  • Budete potřebovat elektrický IMP s minimálně 4 dostupnými GPIO, já používám IMP001 s dubnovou odpočinkovou deskou.
  • Regulátor pro snížení napětí zdroje až na 5V. Používám krokový modul převaděče DC-DC. Verze eBoot MP1584EN od Amazonu.
  • Duální (nebo více) reléový modul nebo podobné spínací zařízení, které bude pracovat s výstupem IMP. Používám tento 4kanálový reléový modul JBtek DC 5V od Amazonu.
  • 4vodičový šroubový terminál. Používám tento 5pcs 2 řádky 12P drátový konektor šroubovací svorkovnice 300V 20A od Amazonu.

Krok 2: Spotřební materiál

Zásoby
Zásoby

Budete také potřebovat:

  • Přístup k 3D tiskárně nebo malému projektovému boxu
  • 4 malé šrouby asi 4 mm x 6 mm pro víko pouzdra
  • Propojovací drát
  • Nůžky na drát
  • Odstraňovače drátů
  • Malé šroubováky
  • Páječka
  • Horké lepidlo nebo silikon
  • Kravaty na zip

Krok 3: Zvětšete pouzdro

Zvětšete pouzdro
Zvětšete pouzdro

Rozvržením dílů určete, jaký případ velikosti budete potřebovat. S rozložením podle obrázku budu potřebovat pouzdro široké asi 140 mm, hluboké 70 mm a vysoké 30 mm.

Krok 4: Wire DC-DC Converter

Drátový měnič DC-DC
Drátový měnič DC-DC

Odřízněte 3 páry červeného a černého propojovacího vodiče pro připojení napájení dovnitř a ven z desky převodníku DC-DC.

  • Vstup: 100 mm
  • Výstup na IMP: 90 mm
  • Výstup na reléový modul: 130 mm

Připájejte je k desce podle obrázku.

Krok 5: Připojte napájení k zařízením

Napájení vodičů k zařízením
Napájení vodičů k zařízením
  • Připojte vstup měniče DC-DC ke dvěma bodům na šroubové svorkovnici.
  • Pájejte krátké 5V výstupní vodiče k IMP.
  • Připojte delší 5V výstupní vodiče k reléovému modulu.

Krok 6: Vstupy modulu drátového relé

Vstupy modulu drátového relé
Vstupy modulu drátového relé
  • Odřízněte 4 x 90 mm vodiče pro vstupní připojení reléového modulu. Použil jsem 4 oddělené barvy pro snadnou orientaci později při kódování.
  • Pájejte vodiče na vstupy reléových modulů 1-4 a poté na první 4 IMP GPIO body (Pin1, 2, 5 a 7).

Krok 7: IMP Power Jumper

IMP Power Jumper
IMP Power Jumper

Během počátečního programování a testování IMP bude možná nutné použít napájení USB. Až skončíte, přesuňte propojku napájení na stranu BAT.

Krok 8: Vstupy stavu brány Wire

Vstupy stavu brány Wire
Vstupy stavu brány Wire
  • Odřízněte 2 x 80 mm dráty pro stavové vstupy.
  • Připojte vodiče ke zbývajícím 2 šroubovým svorkám.
  • Pájejte vodiče k místům IMP GPIO (Pin8 a 9).

Krok 9: Vytiskněte nebo zakupte pouzdro

Vytiskněte nebo zakupte pouzdro
Vytiskněte nebo zakupte pouzdro

Můj. STL nebo. F3D pro tento případ si můžete stáhnout na GitHub nebo Thingiverse

Pokud nemáte přístup k 3D tiskárně, bude fungovat malý obecný projektový případ.

Krok 10: Ozdobte svůj případ

Ozdobte si pouzdro
Ozdobte si pouzdro

Protože!

Vložil jsem na svůj odsazený text a jen jej vybarvil černým ostřím. Pokud se cítíte dobrodružně, můžete použít akrylovou barvu, lak na nehty nebo něco jiného, aby byl ještě hladší.

Krok 11: Vyvrtejte otvor pro dráty

Vrtná díra pro dráty
Vrtná díra pro dráty

Vyvrtejte malý otvor 10–15 mm na straně blízko středu místa, kde se všechny dráty spojí.

Použil jsem Unibit pro čistý, hladký otvor v plastu.

Krok 12: Příprava a instalace připojovacích vodičů

Příprava a instalace připojovacích vodičů
Příprava a instalace připojovacích vodičů
Příprava a instalace připojovacích vodičů
Příprava a instalace připojovacích vodičů

Odřízněte 9 x 5-600 mm dráty pro zavěšení našeho zařízení na desku pohonu brány.

  • 2 pro 24V napájecí vstup
  • 3 pro stav brány (2 vstupy a společná zem)
  • 2 pro signál otevřené brány
  • 2 pro signál zavření brány

Twist dohromady každou ze skupin uvedených výše pomocí vrtačky. Díky tomu bude vše snazší a bude vypadat lépe.

Odizolujte a připojte každý z vodičů k příslušným svorkám podle obrázku.

Krok 13: Propojte dráty pro připojení

Propojovací dráty
Propojovací dráty

Propojovací vodiče veďte otvorem podle obrázku.

Krok 14: Namontujte součásti

Namontujte součásti
Namontujte součásti

Umístěte a namontujte součásti pomocí malého korálku horkého lepidla nebo silikonu. Nepoužívejte příliš mnoho v případě, že potřebujete odebrat součást, použijte jen tolik, abyste je zajistili.

Původně jsem chtěl vytisknout pouzdro sponami/záložkami, aby desky držely na svém místě, ale potřeboval jsem to nainstalovat a neměl jsem čas. Bylo by hezké přidat klipy na desku do pouzdra.

Krok 15: Utěsněte připojovací vodiče

Utěsněte připojovací dráty
Utěsněte připojovací dráty

Zapojte připojovací vodiče horkým lepidlem nebo silikonem.

Krok 16: Zavřete případ

Zavřete pouzdro
Zavřete pouzdro

V seznamu tohoto 3D tištěného pouzdra jsem použil malé ~ 4 mm šrouby. Pokud vám dělá starosti špína nebo vlhkost, před uzavřením spoje víčka umístěte kolem silikonového nebo horkého lepidla.

Krok 17: Instalace v Gate Operator

Nainstalujte si do Gate Operator
Nainstalujte si do Gate Operator
Nainstalujte si do Gate Operator
Nainstalujte si do Gate Operator

Na hlavní desce:

  • Připojte dva vodiče připojené k reléovému výstupu 1 ke svorce Open Gate. (na fotkách červená/hnědá)
  • Zahákněte dva vodiče připojené k reléovému výstupu 2 ke svorce Close Gate. (na fotkách žlutá/modrá)
  • Připojte dva vodiče připojené ke vstupu převodníku DC-DC k napájecím šroubovacím svorkám příslušenství 24 V (na fotografiích červená/černá)

Na rozšiřující desce

  • Propojte společné šroubové svorky relé s malým kouskem drátu
  • Připojte společnou zem k jedné ze společných šroubových svorek relé (na fotografiích zelená)
  • Připojte 2 vstupy stavu brány (IMP Pin8 a 9) ke šroubovým svorkám normálně otevřeného relé (NO) (na fotkách šedá/žlutá)

Veďte dráty, zavažte je na zip, aby vypadaly úhledně, a najděte místo pro montáž nebo nastavení pouzdra.

V úložišti GitHub jsou hostovány další fotografie v plném rozlišení.

Krok 18: Nastavte režim Aux Relay

Nastavte režim Aux Relay
Nastavte režim Aux Relay

Nastavte spínače pomocných relé, jak je znázorněno na fotografii.

To poskytne IMP signály, které potřebuje k určení, zda se brána zavírá, otevírá, otevírá nebo zavírá.

Krok 19: IMP Agent a kód zařízení

IMP Agent a kód zařízení
IMP Agent a kód zařízení

Kód elektrického impaktního agenta:

  • Vytvořte nový model v IDE Electric Imp:
  • Nahraďte adresu URL tak, aby směřovala na váš server

// Funkce obsluhy

funkce httpHandler (req, resp) {try {local d = http.jsondecode (req.body); //server.log(d.c); if (d.c == "btn") {//server.log(d.val); device.send ("btn", d.val); resp. odeslat (200, „OK“); }} catch (ex) {// Pokud došlo k chybě, odešlete ji zpět do odpovědi server.log ("chyba:" + ex); resp.odeslat (500, "Interní chyba serveru:" + ex); }} // Registrace obsluhy HTTP http.onrequest (httpHandler); // Funkce obslužné funkce GateStateChange funkce gateStateChangeHandler (data) {// URL na webovou službu místní url = "https://projects.ajillion.com/save_gate_state"; // Nastavit hlavičku Content-Type na místní hlavičky json = {"Content-Type": "application/json"}; // Zakódujte přijatá data a protokolujte místní tělo = http.jsonencode (data); server.log (tělo); // Odeslání dat do vaší webové služby http.post (URL, hlavičky, tělo).sendsync (); } // Registrace obslužného programu gateStateChange device.on ("gateStateChange", gateStateChangeHandler);

Kód elektrického impaktního agenta:

  • Přiřaďte svému modelu zařízení Imp
  • Ověřte, zda jsou hardwarové piny spojeny jako připojené

// Knihovna Debouce

#require "Button.class.nut: 1.2.0" // Alias pro gateOpen GPIO pin (aktivní low) gateOpen <- hardware.pin2; // Alias pro gateClose ovládání GPIO pin (aktivní low) gateClose <- hardware.pin7; // Nakonfigurujte 'gateOpen' na digitální výstup s počáteční hodnotou digital 1 (high) gateOpen.configure (DIGITAL_OUT, 1); // Nakonfigurujte 'gateClose' jako digitální výstup s počáteční hodnotou digital 1 (high) gateClose.configure (DIGITAL_OUT, 1); // Alias pro pin GPIO, který indikuje, že se brána pohybuje (N. O.) gateMovingState <- Button (hardware.pin8, DIGITAL_IN_PULLUP); // Alias pro pin GPIO, který indikuje, že brána je plně otevřená (N. O.) gateOpenState <- Button (hardware.pin9, DIGITAL_IN_PULLUP); // Globální proměnná pro udržení stavu brány (Open = 1 / Closed = 0) local lastGateOpenState = 0; // Objekt Latch Timer local 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 ("Open command receive"); break case "latch30m": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1800, releaseOpen); server.log („příkaz Latch30m přijat“); případ přerušení „latch8h“: gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (28800, releaseOpen); server.log („Příkaz Latch8h přijat“); případ přerušení „zavřít“: if (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); gateClose.write (0); latchTimer = imp.wakeup (1, releaseClose); server.log („Příkaz Zavřít nyní přijat“); výchozí nastavení: server.log („Příkaz tlačítka nebyl rozpoznán“)}}); funkce releaseOpen () {if (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); //server.log("Timer uvolněn gateOpen switch contact "); } function releaseClose () {if (latchTimer) imp.cancelwakeup (latchTimer); gateClose.write (1); //server.log("Timer uvolněn gateClose spínač kontaktu "); } gateMovingState.onPress (funkce () {// Relé je aktivováno, brána se pohybuje //server.log("Gate is opening "); local data = {" gatestate ": 1," timer ": hardware.millis ()}; agent.send ("gateStateChange", data);}). onRelease (funkce () {// Relé je uvolněno, brána je v klidu //server.log("Gate is closed "); local data = {"gatestate": 0, "timer": hardware.millis ()}; agent.send ("gateStateChange", data);}); gateOpenState.onPress (funkce () {// Relé je aktivováno, brána je plně otevřená //server.log("Gate is open "); local data = {" gatestate ": 2," timer ": hardware.millis ()}; agent.send ("gateStateChange", data);}). onRelease (funkce () {// Relé je uvolněno, brána není plně otevřená //server.log("Gate is closeing "); lokální data = {"gatestate": 3, "timer": hardware.millis ()}; agent.send ("gateStateChange", data);});

Krok 20: Webový kód PHP

Webová služba PHP kód
Webová služba PHP kód

Tento kód jsem napsal pro framework CodeIgniter, protože jsem ho přidal do starého existujícího projektu. Řadič a zobrazovací kód lze snadno přizpůsobit rámci podle vašeho výběru.

Aby to bylo jednoduché, uložil jsem data JSON do plochého souboru pro ukládání dat. Pokud potřebujete protokolování nebo složitější funkce související s daty, použijte databázi.

Knihovnu ajax, kterou jsem napsal a použil v tomto projektu, lze stáhnout z úložiště GitHub: ThingEngineer/Codeigniter-jQuery-Ajax

Kód ovladače PHP:

  • aplikace/řadiče/projects.php
  • Zajistěte přístup k datové cestě pomocí skriptu PHP, umístění i oprávnění ke čtení/zápisu.

load-> helper (pole ('soubor', 'datum'));

$ data = json_decode (read_file ('../ app/logs/gatestate.data'), PRAVDA); switch ($ data ['gatestate']) {case 0: $ view_data ['gatestate'] = 'Zavřeno'; přestávka; případ 1: $ view_data ['gatestate'] = 'Otevírá se …'; přestávka; případ 2: $ view_data ['gatestate'] = 'Otevřít'; přestávka; případ 3: $ view_data ['gatestate'] = 'Zavírání …'; přestávka; } $ last_opened = json_decode (read_file ('../ app/logs/projects/gateopened.data'), PRAVDA); $ view_data ['last_opened'] = timespan ($ last_opened ['last_opened'], time ()). 'před'; // Načíst pohled $ t ['data'] = $ view_data; $ this-> load-> view ('gate_view', $ t); } funkce save_gate_state () {$ this-> load-> helper ('file'); $ data = file_get_contents ('php: // vstup'); write_file ('../ app/logs/projects/gatestate.data', $ data); $ data = json_decode ($ data, PRAVDA); if ($ data ['gatestate'] == 1) {$ last_opened = array ('last_opened' => time ()); write_file ('../ app/logs/projects/gateopened.data', json_encode ($ last_opened)); }} funkce get_gate_state () {$ this-> load-> helper (pole ('soubor', 'datum')); $ this-> load-> library ('ajax'); $ data = json_decode (read_file ('../ app/logs/projects/gatestate.data'), TRUE); $ last_opened = json_decode (read_file ('../ app/logs/projects/gateopened.data'), TRUE); $ data ['last_opened'] = timespan ($ last_opened ['last_opened'], time ()). 'před'; $ this-> ajax-> output_ajax ($ data, 'json', FALSE); // odeslat data json, nevynucovat požadavek ajax}}/ * Konec souboru projects.php *// * Umístění:./application/controllers/projects.php */

PHP Zobrazit kód:

Jako front-end jsem použil Bootstrap, protože je rychlý, snadný a citlivý. Můžete si jej stáhnout zde: https://getbootstrap.com (jQuery je součástí balení)

  • aplikace/ovladače/gate_view.php
  • Vyměňte SVŮJ KÓD AGENTA za kód svého agenta Electric Imp

Doplněk IoT Gate Opperator Addon IoT Gate Opperator Addon

  • Domov
  • Admin

Západka otevřené brány Otevřená 30 minut Západka otevřená 8 hodin Zavřít Nyní Stav brány: Poslední otevřená $ (document).ready (function () {resetStatus ();}) funkce sendJSON (JSONout) {var url = 'https:// agent.electricimp.com/YOUR-AGENT-CODE '; $.post (url, JSONout); } $ ("#open_gate"). klikněte (funkce () {var JSONout = '{"c": "btn", "val": {"cmd": "open"}}'; sendJSON (JSONout); $ („#status“). text („Otevírá se…“);}); $ ("#latch30m_gate"). klikněte (funkce () {var JSONout = '{"c": "btn", "val": {"cmd": "latch30m"}}'; sendJSON (JSONout); $ ("#status"). text ("Otevírá se …");}); $ ("#latch8h_gate"). klikněte (funkce () {var JSONout = '{"c": "btn", "val": {"cmd": "latch8h"}}'; sendJSON (JSONout); $ ("#status"). text ("Otevírá se …");}); $ ("#close_gate"). klikněte (funkce () {var JSONout = '{"c": "btn", "val": {"cmd": "close"}}'; sendJSON (JSONout); $ ("#status"). text ("Zavírání …");}); funkce resetStatus () {// Target url var target = 'https://projects.ajillion.com/get_gate_state'; // Žádost var data = {agent: 'app'}; // Odeslat žádost o příspěvek ajax $.ajax ({url: target, dataType: 'json', type: 'POST', data: data, success: function (data, textStatus, XMLHttpRequest) {switch (data.gatestate) {case 0: $ ("#status"). Text ('Closed'); break; case 1: $ ("#status"). Text ('Opening …'); break; case 2: $ ("#status").text ('Open'); break; case 3: $ ("#status"). text ('Closing …'); break; default: $ ("#status"). text ('Error');} $ ("#last_opened"). text (data.last_opened);}, chyba: funkce (XMLHttpRequest, textStatus, errorThrown) {// Chybová zpráva $ ("#status"). text ('Chyba serveru');}}); setTimeout (resetStatus, 3000); }