Projektový hardvér: ako sme postavili miestnosť s úlohou hackerov

Projektový hardvér: ako sme postavili miestnosť s úlohou hackerov
Pred pár týždňami sme strávili online pátranie po hackeroch: postavili miestnosť, ktorú zaplnili smart zariadeniami a spustili z nej YouTube vysielanie. Hráči mohli ovládať zariadenia internetu vecí z webovej stránky hry; Cieľom bolo nájsť zbraň ukrytú v miestnosti (výkonné laserové ukazovátko), hacknúť ju a spôsobiť skrat v miestnosti.

Aby to nebolo málo, umiestnili sme do miestnosti skartovačku, do ktorej sme naložili 200 000 rubľov: skartovačka zjedla jednu bankovku za hodinu. Po víťazstve v hre môžete zastaviť skartovačku a vziať si všetky zvyšné peniaze.

Už sme to povedali návoda ako bol vytvorený backend projektu. Je čas porozprávať sa o hardvéri a o tom, ako bol zostavený.


Bolo veľa žiadostí o zobrazenie momentu upratovania miestnosti – ukazujeme, ako to rozoberáme

Architektúra hardvéru: Ovládanie miestnosti

Začali sme navrhovať hardvérové ​​riešenie, keď už bol scenár zhruba pochopený, backend pripravený a mali sme pripravenú prázdnu miestnosť na inštaláciu zariadenia.

Pamätajúc na starý vtip „S v IoT znamená bezpečnosť“ („Písmeno S v skratke IoT znamená bezpečnosť“) sme sa rozhodli, že tentoraz hráči v hernom scenári interagujú iba s front-endom a back-endom. stránky, ale nedostanú príležitosť dostať sa priamo k žehličke.

Stalo sa tak z bezpečnostných dôvodov a pre predstavu toho, čo sa deje na obrazovke: s priamym prístupom hráčov k hardvéru by bolo oveľa ťažšie izolovať bezpečné a potenciálne nebezpečné akcie, napríklad rýchle posúvanie skartovačky alebo ovládanie. pyrotechnika.

Pred začatím návrhu sme sformulovali niekoľko princípov ovládania herných zariadení, ktoré sa stali základom návrhu:

Nepoužívajte bezdrôtové riešenia

Celý hrací priestor je v jednom ráme, ktorého každý roh sa dá dosiahnuť. Bezdrôtové pripojenia neboli skutočne potrebné a jednoducho by sa stali ďalším bodom zlyhania.

Nepoužívajte žiadne špeciálne zariadenia pre inteligentnú domácnosť

Hlavne z dôvodu flexibility prispôsobenia. Je jasné, že mnohé krabicové verzie systémov pre inteligentnú domácnosť vieme prispôsobiť našej úlohe s hotovým adminom a ovládacími prvkami, no mzdové náklady by boli porovnateľné s vytvorením vlastného jednoduchého riešenia.

Okrem toho bolo potrebné vymyslieť zariadenia, ktoré by jasne ukázali, že to boli hráči, ktorí zmenili jeho stav: zapínali/vypínali ho alebo na písmená FALCON dali špecifické svetlo.

Zhromaždili sme všetky prvky z verejne dostupného hardvéru, ktorý sa dá kúpiť v bežných obchodoch s rádiovými súčiastkami: medzi doručovaním pizze a diétnej koly neustále prichádzali na stránku kuriéri Chip a Dip a Leroy.

Voľba zostaviť si všetko sami zjednodušila ladenie, škálovateľnosť si však vyžadovala väčšiu opatrnosť pri inštalácii.

Všetky relé a arudín by nemali byť viditeľné v ráme

Rozhodli sme sa dať všetky ovládateľné prvky na jedno miesto a schovať ich do zákulisia, aby sme mohli sledovať ich výkon a v prípade potreby sa opatrne odplaziť z dohľadu kamery a vymeniť zlyhanú jednotku.

Projektový hardvér: ako sme postavili miestnosť s úlohou hackerov
Nakoniec sa všetko schovalo pod stôl a kamera bola nainštalovaná tak, že pod stolom nebolo nič vidieť. Toto bolo naše „slepé miesto“, aby sa inžinier vyšplhal

V dôsledku toho sme vlastne dostali jedno inteligentné zariadenie: prijímalo stav každej zo svojich častí z backendu a menilo ho príslušným príkazom.

Z hľadiska hardvérovej implementácie toto zariadenie ovládalo 6 prvkov:

  1. Niekoľko stolových lámp, majú stav zapnutia/vypnutia a ovládajú ich hráči
  2. Písmená na stene, môžu zmeniť svoju farbu na príkaz hráčov
  3. Ventilátory, ktoré sa otáčajú a otvárajú flipchart, keď je server zaťažený
  4. Laserové ovládanie pomocou PWM
  5. Skartovač, ktorý zjedol peniaze podľa plánu
  6. Dymový stroj, ktorý sa spustil pred každým výstrelom lasera


Testovanie dymovnice laserom

Neskôr pribudlo javiskové svetlo, ktoré stálo za rámom a ovládalo sa presne ako lampy z bodu 1. Javiskové svetlo fungovalo v dvoch prípadoch: osvetľovalo laser, keď naň bolo napájané, a osvetľovalo závažie pred laser bol spustený v bojovom režime.

Čo to bolo za inteligentné zariadenie?

Projektový hardvér: ako sme postavili miestnosť s úlohou hackerov

Celú cestu sa Yura, náš hardvérový chlapík, snažil veci nekomplikovať a vymyslieť čo najjednoduchšie, minimalistické riešenie.

Predpokladalo sa, že VPS jednoducho spustí skript, ktorý prijme json so stavom zariadení a pošle ho do Arduina pripojeného cez USB.

Pripojené k portom:

  • 16 bežných relé (to boli tie, ktoré vydávali klikavý zvuk, ktorý bolo počuť vo videu. Vybrali sme ich hlavne kvôli tomuto zvuku)
  • 4 polovodičové relé na ovládanie kanálov PWM, ako sú ventilátory,
  • samostatný PWM výstup pre laser
  • výstup, ktorý generuje signál do LED pásu

Tu je príklad príkazu json, ktorý prišiel do relé zo servera

{"power":false,"speed":0,"period":null,"deviceIdentifier":"FAN"}

A toto je príklad funkcie, s ktorou sa príkaz dostal do Arudina

def callback(ch, method, properties, body):    
request = json.loads(body.decode("utf-8"))    
print(request, end="n")     
send_to_serial(body)

Aby sme mohli sledovať moment, kedy laser konečne prepáli lano a závažie letí na akvárium, vytvorili sme malé tlačidlo, ktoré sa spustilo, keď závažie spadlo a dalo signál do systému.

Projektový hardvér: ako sme postavili miestnosť s úlohou hackerov
Tlačidlo na sledovanie pohybu závažia

Na tento signál sa mali rozsvietiť dymovnice vyrobené z pingpongových loptičiek. Priamo do serverovej skrine sme vložili 4 dymové svetlice a prepojili ich nichrómovým závitom, ktorý sa mal zahrievať a fungovať ako zapaľovač.

Projektový hardvér: ako sme postavili miestnosť s úlohou hackerov
Bývanie s dymovými bombami a čínskou girlandou

Projektový hardvér: ako sme postavili miestnosť s úlohou hackerov

Arduino

Podľa pôvodného plánu sa na Arduine uskutočnili dve akcie.

Po prvé, keď bola prijatá nová požiadavka, žiadosť bola analyzovaná pomocou knižnice ArduinoJson. Ďalej sa každému spravovanému zariadeniu priradili jeho dve vlastnosti:

  • stav napájania "zapnuté" alebo "vypnuté" (štandardný stav)
  • doba, počas ktorej je zariadenie zapnuté - čas v mikrosekundách od začiatku dosky, kedy je čas ho vypnúť, to znamená uviesť stav do štandardu

Naposledy bol nastavený pri prijatí zodpovedajúceho parametra v JSON, ale nebolo možné ho preniesť, potom bola hodnota nastavená na 0 a nenastal žiadny reset.

Druhou akciou, ktorú Arduino vykonávalo každý cyklus, bola aktualizácia stavov, teda kontrola, či nie je potrebné niečo zapnúť alebo či je čas vypnúť nejaké zariadenie.

Laserové ukazovátko - rovnaký Megatron 3000

Projektový hardvér: ako sme postavili miestnosť s úlohou hackerov

Ide o bežný LSMVR450-3000MF 3000mW 450nm modul na manuálne zaostrovanie laserom na rezanie a značenie.

Listy Falcon

Boli vyrobené veľmi jednoducho - písmená z loga sme jednoducho skopírovali, vyrezali z kartónu a potom prelepili LED páskou. V tomto prípade som musel kusy pásky spájať, 4 kontakty na každom šve, ale výsledok stál za to. Náš backender Pasha ukázal zázraky zručnosti a dokázal to za menej ako pár hodín.

Prvé testy iot zariadenia a dokončovanie

Urobili sme prvé testy a zároveň k nám dorazili nové úlohy. Faktom je, že uprostred procesu sa k tímu pripojil skutočný filmový producent a kameraman z VGIK Ilya Serov - postavil rám, pridal ďalšie osvetlenie kina a mierne zmenil herný scenár, aby bol dej emotívnejší a obraz dramatickejší a divadelnejší.

To výrazne zvýšilo kvalitu, ale objavili sa prvky, ktoré bolo tiež potrebné pripojiť k relé a predpísaný prevádzkový algoritmus.

Ďalším problémom bol laser: robili sme niekoľko experimentov s rôznymi typmi lán a lasermi rôznych výkonov. Na skúšku sme jednoducho zavesili závažie vertikálne na lano.

Pri behu s testovacím žetónom bol výkon regulovaný cez PWM menší ako 10% a nepoškodil lano ani pri dlhom vystavení.

Pre bojový režim bol laser rozostrený približne na bod s priemerom 10 mm a suverénne prepálil lano so záťažou zo vzdialenosti asi metra.

Projektový hardvér: ako sme postavili miestnosť s úlohou hackerov
Takže laser fungoval v testoch perfektne

Keď sme začali všetko testovať priamo v miestnosti na zavesenom závaží, ukázalo sa, že bezpečné zaistenie lasera nebolo také jednoduché. Potom, keď lano zhorí, roztopí sa, natiahne a posunie sa mimo pôvodného ohniska.

Projektový hardvér: ako sme postavili miestnosť s úlohou hackerov
Ale už to tak nefungovalo: lano sa posunulo

Ilya posunul laser na koniec miestnosti oproti lanu, aby laserový lúč prechádzal cez celé pódium a vyzeral krásne v ráme, čím sa vzdialenosť zdvojnásobila.

Po vykonaní niekoľkých ďalších experimentov so spálením lana už v boji sme sa rozhodli netrápiť osud a zabezpečiť prerezanie lana pomocou nichrómového drôtu. Zničilo vlákno 120 sekúnd po zapnutí lasera v bojovom režime. Toto sme sa rozhodli natvrdo zakódovať, rovnako ako odpojenie vodiča a zapálenie dymovnice pri spustení separačného kontaktu, priamo do hardvéru mikrokontroléra.

Projektový hardvér: ako sme postavili miestnosť s úlohou hackerov
Vlákno, ktoré nakoniec prepálilo lano mimo obrazovky

Objavila sa teda tretia úloha, ktorú Arduino vyriešilo – vypracovať sekvencie spojené s vykonávaním týchto príkazov.

Rozhodli sme sa tiež dať Arduinu potrebu počítať peniaze na TV a spustiť skartovačku. Pôvodne sa predpokladalo, že to urobí backend a aktuálny zostatok bude viditeľný na webovej stránke a v televízii budeme zobrazovať komentáre z YouTube ako ďalší interaktívny prvok, ktorý divákom povie, že udalosti v miestnosti sa odohrávajú v skutočnosti. čas.

Počas testovacej prevádzky sa však Ilya pozrel na scénu a navrhol ukázať rovnováhu hry na najväčšej obrazovke: koľko peňazí ešte zostáva, koľko sa zjedlo a odpočítavanie do ďalšieho spustenia skartovačky.

Arduino sme spojili s aktuálnym časom: každú celú hodinu sa spustil skartovač. Obraz sa na televízore zobrazil pomocou rasberry, ktorá v tom momente už prijímala požiadavky zo servera a posielala ich do arduina na vykonanie. Obrázky s peňažnými ukazovateľmi boli nakreslené tak, že sa konzolová utilita nazvala asi takto

image = subprocess.Popen(["fim", "-q", "-r", "1920×1080", fim_str]), где fim_str

A tvoril sa na základe požadovaného množstva alebo času.

Obrázky sme vygenerovali vopred: jednoducho sme urobili hotové video s časovačom a exportovali 200 obrázkov.

Toto je mechanika, ktorá bola naprogramovaná do kríža. Keď začalo posledné odpočítavanie, všetci sme išli na miesto, vyzbrojili sme sa hasiacimi prístrojmi a posadili sme sa, aby sme čakali na oheň (ktorý bol v plnom prúde len v nezhode)

Ako urobiť vysielanie, ktoré bude fungovať týždeň: výber kamery

Na tento quest sme potrebovali nepretržité vysielanie na YouTube počas 7 dní – presne to sme nastavili ako maximálne trvanie hry. Dve veci nás mohli zastaviť:

  1. Prehrievanie fotoaparátu v dôsledku nepretržitej prevádzky
  2. Výpadok internetu

Kamera musela poskytovať aspoň Full HD obraz, aby bolo hranie a sledovanie miestnosti pohodlné.

Spočiatku sme sa zamerali na webové kamery, ktoré sa vyrábajú pre streamerov. Znižovali sme rozpočet, takže sme nechceli kupovať fotoaparát, ale ako sa ukázalo, nepožičiavajú ho. V tom istom momente sme zázračne našli kameru Xbox Kinect ležiacu v mojom dome, nainštalovali ju v mojej izbe a spustili testovacie vysielanie na týždeň.

Fotoaparát fungoval dobre a neprehrieval sa, no Ilya si takmer okamžite všimol, že mu chýbajú nastavenia, najmä sa nedala nastaviť expozícia.

Ilya sa snažil priblížiť typ vysielania štandardom filmovej a video produkcie: sprostredkovať dynamicky sa meniacu svetelnú scénu s jasnými svetelnými zdrojmi, stmaveným pozadím a objektmi v zábere. Zároveň som chcel zachovať prepracovanosť obrazu vo svetlách aj v tieňoch, s minimálnym digitálnym šumom.

Preto, hoci sa Kinect v testoch ukázal ako spoľahlivý a nevyžadoval kartu na zachytávanie videa (ďalší bod zlyhania), rozhodli sme sa od neho upustiť. Po troch dňoch testovania rôznych fotoaparátov si Ilya vybral Sony FDR-AX53 - malú spoľahlivú videokameru, ktorá je lacná na prenájom, no zároveň má dostatočnú spoľahlivosť a vizuálne vlastnosti.

Prenajali sme si kameru, zapli ju na týždeň v spojení s kartou na zachytávanie videa a uvedomili sme si, že s ňou môžeme počítať s nepretržitým vysielaním počas celej výpravy.

Tvorba filmu: inscenácia javiska a osvetlenie

Práca na osvetlení si vyžadovala určitú gráciu; potrebovali sme vytvoriť svetelné skóre s minimálnymi prostriedkami:

1. Osvetlenie predmetov, keď ich hráči nájdu (laser, závažie), ako aj neustále svetlo na skartovačke. Tu sme použili dedolight 150 - spoľahlivé a kompaktné filmové osvetľovacie zariadenia s nízkonapäťovými halogénovými žiarovkami, ktoré umožňujú zamerať lúč na konkrétny objekt bez ovplyvnenia pozadia a iných objektov.

2. Praktické hracie svetlo - stolná lampa, stojaca lampa, hviezda, girlanda. Všetko praktické svetlo bolo v ráme harmonicky rozložené pre osvetlenie obrazovej plochy, vo vnútri boli LED lampy s farebnou teplotou 3200K, lampa v stojacej lampe bola pokrytá červeným fóliovým filtrom Rosco pre vytvorenie nezvyčajného farebného akcentu.

Projektový hardvér: ako sme postavili miestnosť s úlohou hackerov
Som inžinier u svojej mamy alebo štart je zajtra

Ako sme si rezervovali internet a elektrinu

K problematike odolnosti voči poruchám pristúpili takmer ako v dátovom centre: rozhodli sa neodchýliť sa od základných princípov a vyhradili sa podľa zaužívanej schémy N+1.

Ak sa vysielanie na YouTube zastaví, znamená to, že nebude možné sa znova pripojiť pomocou rovnakého odkazu a pokračovať v streame. Bol to kritický moment a miestnosť sa nachádzala v bežnej kancelárii.

Na tento účel sme použili smerovač založený na OpenWRT a balík mwan3. Každých 5 sekúnd automaticky testoval dostupnosť kanálu a v prípade prestávky prepol na záložný modem s Yotou. Výsledkom bolo prepnutie na záložný kanál za menej ako minútu.
Projektový hardvér: ako sme postavili miestnosť s úlohou hackerov
Rovnako dôležité bolo odstrániť výpadky prúdu, pretože aj krátkodobý výpadok prúdu by spôsobil reštart všetkých počítačov.

Zobrali sme preto neprerušiteľný zdroj ippon innova g2 3000, ktorý by zálohoval všetky herné zariadenia: celková spotreba nášho systému bola okolo 300 Wattov. Trvalo by to 75 minút, čo je na naše účely dosť.

Rozhodli sme sa obetovať dodatočné osvetlenie pre prípad, že by v miestnosti vypadla elektrina – nebola napojená na neprerušiteľný zdroj energie.

Poďakovanie

  • Celému tímu RUVDS, ktorý hru vymyslel a zrealizoval.
  • Samostatne, správcom RUVDS za monitorovanie práce serverov bola záťaž prijateľná a všetko fungovalo ako obvykle.
  • Pre najlepšieho šéfa ntsaplin za to, že v reakcii na výzvu: „Mám nápad: vezmeme server, postavíme naň akvárium a zavesíme naň závažie, bum, bum, všetko je zaplavené vodou, skrat, oheň !“ vždy s istotou hovorí "urob to!"
  • Vďaka Vydavateľstvo Tilda a zvlášť Michailovi Karpovovi za to, že sa nielen stretol na polceste a umožnil nám porušiť Podmienky používania, ale dokonca nám dal na rok podnikateľský účet, keď sme hovorili o projekte.
  • Iľja Serov S_ILya za to, že som sa pridal a stal sa koproducentom projektu, pripraveným plaziť sa pol noci, lepiť LED pásik, hľadať technické riešenia a robiť všetko preto, aby sme dostali skutočný film.
  • zhovner za to, že bol vždy pripravený zachrániť situáciu, keď ostatní rozhodili rukami, borščom, morálnou podporou a rozhovormi až do rána.
  • samat za spojenie s najlepším pentesterom v krajine, ktorý nám poradil a pomohol s úlohami.
  • danimilk za skvelú video produkciu všetkých videí.
  • delphe za pevnú ruku a ochotu pracovať do posledného.
  • dobre Dodo Pizza Engineering na takmer vždy teplú pizzu.

A najväčšia vďaka patrí hráčom za všetky tie emócie, ktoré sme zažili, keď ste sa dva dni bez spánku a dokonca odkladania práce búrili v pátraní.

Ďalšie články o snahe zničiť server

Projektový hardvér: ako sme postavili miestnosť s úlohou hackerov

Zdroj: hab.com

Pridať komentár