Hardware des Projekts: Wie wir einen Raum mit einer Hacker-Quest gebaut haben



Vor ein paar Wochen haben wir eine Online-Suche nach Hackern durchgeführt : Wir haben einen Raum gebaut, ihn mit intelligenten Geräten gefüllt und eine YouTube-Sendung gestartet. Spieler können IoT-Geräte von der Spieleseite aus steuern. Das Ziel war es, die im Raum versteckte Waffe (einen leistungsstarken Laserpointer) zu finden, sie zu hacken und den Raum kurzzuschließen.



Um eine aufregende Handlung hinzuzufügen, haben wir einen Aktenvernichter in den Raum gestellt, in den wir 200.000 Rubel geladen haben: Der Aktenvernichter hat eine Rechnung pro Stunde gegessen. Nach dem Gewinn des Spiels war es möglich, den Aktenvernichter anzuhalten und das gesamte verbleibende Geld zu nehmen.



Wir haben bereits den Verlauf des Spiels sowie die Erstellung des Backends des Projekts beschrieben. Es ist Zeit, Ihnen etwas über die Hardware und deren Funktionsweise zu erzählen.





Es gab viele Anfragen, den Moment der Zimmerreinigung zu zeigen - wir zeigen, wie wir ihn zerlegen



Eisenarchitektur: Raumsteuerung



Wir begannen mit dem Entwurf der Hardwarelösung, als das Szenario bereits annähernd klar war, das Backend fertig war und wir einen leeren Raum für die Installation der Geräte bereit hatten.



Unter Hinweis auf den alten Witz "Das S in IoT steht für Sicherheit" ("Der Buchstabe S in der Abkürzung IoT steht für Sicherheit") haben wir beschlossen, dass die Spieler im Spielszenario diesmal nur mit dem Front-End und dem Back-End der Site interagieren, aber nicht die Möglichkeit haben, direkt darauf zuzugreifen zur Drüse.



Dies geschah aus Gründen der Sicherheit und Unterhaltung der Vorgänge auf dem Bildschirm: Mit dem direkten Zugriff der Spieler auf die Hardware wäre es viel schwieriger, sichere und potenziell gefährliche Aktionen zu isolieren, z. B. die Beschleunigung des Aktenvernichters oder die Steuerung der Pyrotechnik.



Bevor wir mit dem Design begannen, formulierten wir verschiedene Prinzipien zur Steuerung von Spielgeräten, die die Grundlage des Designs bildeten:



Verwenden Sie keine drahtlosen Lösungen



Der gesamte Spielraum befindet sich in einem Frame, von dem Sie jede Ecke erreichen können. Es gab keine wirkliche Notwendigkeit für drahtlose Verbindungen und sie würden nur zu einem weiteren Fehlerpunkt werden.



Verwenden Sie keine speziellen Geräte aus dem Smart Home



Hauptsächlich aus Gründen der Anpassungsflexibilität. Es ist klar, dass es möglich ist, viele Boxed-Versionen von Smart-Home-Systemen mit einem vorgefertigten Admin-Panel und einer Steuerung für unsere Aufgabe anzupassen. Die Arbeitskosten wären jedoch vergleichbar mit der Erstellung einer eigenen einfachen Lösung.



Außerdem mussten Geräte entwickelt werden, die deutlich machen, was genau die Spieler an ihrem Status ändern: Ein- / Ausschalten oder ein bestimmtes Licht auf die Buchstaben FALCON setzen.



Wir haben alle Elemente aus öffentlich verfügbarem Eisen gesammelt, das in regulären Radioteileläden erhältlich ist: Zwischen der Lieferung von Pizza und Diet Coke kamen ständig die Kuriere Chip und Deep und Leroy auf die Baustelle.



Die Entscheidung, alles selbst zusammenzustellen, vereinfachte das Debuggen und die Skalierbarkeit, erforderte jedoch mehr Genauigkeit bei der Installation.



Alle Relais und Arudino sollten nicht im Rahmen sichtbar sein



Wir haben uns entschlossen, alle steuerbaren Elemente an einem Ort zusammenzuführen und hinter den Kulissen zu verstecken, um die Leistung kontrollieren zu können und gegebenenfalls vorsichtig aus dem Sichtfeld der Kamera herauszukriechen und die ausgefallene Einheit auszutauschen.





Infolgedessen wurde alles unter dem Tisch versteckt und die Kamera wurde so installiert, dass unter dem Tisch nichts zu sehen war. Dies war unser "blinder



Fleck " für das Kriechen des Ingenieurs. Aus Hardware-Sicht kontrollierte dieses Gerät 6 Elemente:



  1. Mehrere Tischlampen haben einen Ein / Aus-Zustand und werden von den Spielern gesteuert
  2. Buchstaben an der Wand, können sie auf Befehl der Spieler ihre Farbe ändern
  3. Lüfter, die das Flipchart drehen und öffnen, wenn der Server unter Last steht
  4. PWM-gesteuerter Laser
  5. Der Aktenvernichter, der nach einem Zeitplan Geld gegessen hat
  6. Eine Rauchmaschine, die vor jedem Laserschuss losging




Wir testen die Rauchmaschine zusammen mit dem Laser.



Später wurde ein Bühnenlicht hinzugefügt, das hinter dem Rahmen stand und genau wie die Lampen von Punkt 1 aus gesteuert wurde. Das Bühnenlicht wurde in zwei Fällen ausgelöst: Es beleuchtete den Laser, wenn Strom an ihn angelegt wurde, und beleuchtete das Gewicht, bevor der Laser im Kampf gestartet wurde Modus.



Was war das für ein intelligentes Gerät?







Wir haben tatsächlich ein intelligentes Gerät erhalten: Es hat den Status jedes seiner Teile vom Backend empfangen und mit dem entsprechenden Befehl geändert.



Es wurde angenommen, dass auf dem Computer ein einfaches Skript ausgeführt wird, das json mit dem Status der Geräte empfängt und an die über USB verbundene Arduinka sendet. Später wurde dieser Computer durch Rasberry ersetzt, er wurde wegen nat mit dem Backend verbunden.



Verbunden mit Ports:



  • 16 konventionelle Relais (sie waren diejenigen, die das im Video zu hörende Klickgeräusch erzeugt haben. Wir haben sie hauptsächlich wegen dieses Geräusches ausgewählt)
  • 4 Halbleiterrelais zur Steuerung von PWM-Kanälen wie Lüftern,
  • separater PWM-Ausgang für Laser
  • Ausgang, der ein Signal an den LED-Streifen bildet


Hier ist ein Beispiel für einen json-Befehl, der vom Server an das Relay gesendet wurde



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


Und dies ist ein Beispiel für die Funktion, mit der das Team nach Arudino kam




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


Um den Moment zu verfolgen, in dem der Laser das Seil endgültig verbrennt und das Gewicht zum Aquarium fliegt, haben wir einen kleinen Knopf gedrückt, der das Abfallen des Gewichts auslöste und dem System ein Signal gab.





Knopfüberwachung der Kettlebell-Bewegung



Bei diesem Signal sollten Rauchbomben aus Tischtennisbällen angezündet haben. Wir haben 4 Rauchkanäle direkt in das Servergehäuse gesteckt und einen Nichromfaden zu ihnen gebracht, der sich erwärmen und wie eine Sicherung funktionieren sollte.





Körper mit Rauchbomben und chinesischer Girlande







Arduino



Auf der Arduinka fanden nach dem ursprünglichen Plan zwei Aktionen statt.



Wenn eine neue Anfrage empfangen wurde, wurde die Anfrage zunächst mithilfe der ArduinoJson-Bibliothek analysiert. Ferner war jedes gesteuerte Gerät mehreren seiner Eigenschaften zugeordnet:



  • «» «» ( )
  • , ( JSON , , )
  • PWM ,
  • , . 587 . , , , . .


Das letzte Mal wurde festgelegt, als der entsprechende Parameter in JSON empfangen wurde, aber nicht übertragen werden konnte. Dann wurde der Wert auf 0 gesetzt und es trat keine Nullung auf.



Die zweite Aktion, die die Arduinka in jedem Zyklus durchführte, war die Aktualisierung der Zustände, dh die Überprüfung, ob etwas eingeschaltet werden musste oder ob es Zeit war, ein Gerät auszuschalten.



Laserpointer - der gleiche Megatron 3000







Dies ist ein herkömmliches Lasermodul zum Schneiden und Markieren von LSMVR450-3000MF 3000mW 450nm mit manuellem Fokus.



Falke Buchstaben



Ganz einfach gemacht - wir haben einfach die Buchstaben aus dem Logo kopiert, sie aus Pappe ausgeschnitten und dann mit LED-Klebeband überklebt. In diesem Fall war es notwendig, Klebebandstücke zusammenzulöten, 4 Kontakte an jeder Naht, aber das Ergebnis war es wert. Unser Backend Pasha zeigte Wunder der Geschicklichkeit und tat dies in weniger als ein paar Stunden.





Erste Tests des iot-Geräts und Fertigstellung



Wir haben die ersten Tests gemacht und gleichzeitig neue Probleme bekommen. Tatsache ist, dass sich mitten im Prozess ein echter Filmproduzent und Kameramann von VGIK, Ilya Serov, dem Team anschloss - er baute den Rahmen, fügte zusätzliche Filmbeleuchtung hinzu und veränderte das Szenario des Spiels leicht, so dass die Handlung emotionaler und das Bild dramatischer und theatralischer war.



Dies erhöhte die Qualität erheblich, aber es gab Elemente, die ebenfalls an das Relais angeschlossen werden mussten, und der Betriebsalgorithmus wurde vorgeschrieben.



Der Laser stellte sich als ein weiteres Problem heraus: Wir haben mehrere Experimente mit verschiedenen Arten von Seilen und Lasern mit unterschiedlichen Leistungen durchgeführt. Für den Test haben wir die Last einfach senkrecht an ein Seil gehängt.



Beim Start mit einem Test-Token betrug die durch die PWM einstellbare Leistung weniger als 10% und das Seil beschädigte auch nach längerer Exposition nicht.



Für den Kampfmodus wurde der Laser auf ungefähr einen Punkt mit einem Durchmesser von 10 mm defokussiert und brannte mit einer Last aus einer Entfernung von ungefähr einem Meter sicher durch das Seil.





Der Laser funktionierte also perfekt bei Tests.



Als wir bereits damit begannen, alles direkt im Raum mit einem schwebenden Gewicht zu testen, stellte sich heraus, dass es nicht so einfach war, den Laser sicher zu befestigen. Wenn das Seil brennt, schmilzt es, streckt sich und verschiebt sich unter dem ursprünglichen Fokus.





Aber so funktionierte es nicht mehr: Das Seil wurde verschoben.



Ilya bewegte den Laser zum Ende des Raums gegenüber dem Seil, so dass der Laserstrahl durch die gesamte Szene ging und im Rahmen schön aussah, was die Entfernung verdoppelte.



Nachdem wir bereits im Kampf einige weitere Experimente mit brennendem Seil durchgeführt hatten, beschlossen wir, das Schicksal nicht zu quälen und das Schneiden des Seils mit Nichromdraht zu versichern. Sie zerstörte den Faden 120 Sekunden nach dem Einschalten des Lasers im Kampfmodus. Dies sowie das Trennen des Kabels und die Zündschnur der Rauchbomben beim Auslösen des Abreißkontakts haben wir beschlossen, direkt in der Hardware des Mikrocontrollers fest zu codieren.





Der Faden, der schließlich das Seil außerhalb des Bildschirms verbrannte.



So erschien eine dritte Aufgabe, die die Arduinka löste - die mit der Ausführung dieser Befehle verbundenen Sequenzen zu erarbeiten.



Wir haben uns auch für Himbeere entschieden, die früher einfach Ad-hoc-JSON vom Backend gesendet hat, und die Notwendigkeit, das Geld im Fernsehen zu verfolgen und den Aktenvernichter zu betreiben. Zunächst wurde davon ausgegangen, dass das Backend dies tun würde und der aktuelle Kontostand auf der Website sichtbar sein würde. Im Fernsehen würden wir Kommentare von YouTube als zusätzliches interaktives Element anzeigen, das die Zuschauer dazu veranlasst, dass Ereignisse im Raum in Echtzeit stattfinden.



Aber während des Testlaufs beobachtete Ilya die Szene und schlug vor, die Spielbilanz auf dem größten Bildschirm anzuzeigen: wie viel Geld noch übrig war, wie viel gegessen wurde und der Countdown bis zum nächsten Start des Shredders.



Wir haben Himbeere an die aktuelle Zeit gebunden: Jede volle Stunde wurde der Aktenvernichter gestartet. Das Bild wurde mit Hilfe der Himbeere auf dem Fernseher angezeigt, die zu diesem Zeitpunkt bereits Anfragen vom Server empfing und zur Ausführung an die Arduinka schickte. Bilder mit monetären Indikatoren wurden mit dem Fim-Konsolen-Dienstprogramm wie diesem gezeichnet.



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



Es wurde basierend auf der erforderlichen Menge oder Zeit erstellt.



Wir haben die Bilder im Voraus generiert: Wir haben gerade das fertige Video mit einem Timer aufgenommen und 200 Bilder exportiert.



Dies ist die Mechanik, die in der Quest programmiert wurde. Als der letzte Countdown begann, fuhren wir alle zur Baustelle, bewaffneten uns mit Feuerlöschern und setzten uns, um auf das Feuer zu warten (das nur in Zwietracht mit Macht und Hauptbrand brannte).



So erstellen Sie eine Sendung, die eine Woche lang funktioniert: Wählen Sie eine Kamera



Für die Suche brauchten wir eine kontinuierliche Sendung auf YouTube für 7 Tage - so viel haben wir als maximale Dauer des Spiels festgelegt. Es gab zwei Dinge, die uns behindern könnten:



  1. Überhitzung der Kammer durch Dauerbetrieb
  2. Internetschnitt


Die Kamera musste mindestens ein Full-HD-Bild liefern, um den Raum bequem abspielen und beobachten zu können.



Zunächst haben wir in Richtung Webcams geschaut, die für Streamer freigegeben sind. Wir haben das Budget gekürzt, deshalb wollten wir keine Kamera kaufen, aber wie sich herausstellte, können sie nicht gemietet werden. Im selben Moment fanden wir auf wundersame Weise die Xbox Kinect-Kamera in meinem Haus, stellten sie in den Raum und starteten eine Woche lang eine Testsendung.



Die Kamera kam gut zurecht und überhitzte nicht, aber Ilya bemerkte fast sofort, dass es an Einstellungen mangelte, insbesondere war es unmöglich, die Belichtung einzustellen.



Ilya versuchte, die Art der Sendung näher an die Standards der Film- und Videoproduktion heranzuführen: eine sich dynamisch ändernde Lichtszene mit hellen Lichtquellen, einem abgedunkelten Hintergrund und Objekten im Rahmen zu vermitteln. Gleichzeitig wollte ich die Ausarbeitung des Bildes sowohl in Lichtern als auch in Schatten mit minimalem digitalem Rauschen beibehalten.



Obwohl sich der Kinect in Tests als zuverlässig erwies und keine Videoaufnahmekarte benötigte (ein weiterer Fehlerpunkt), haben wir uns entschlossen, ihn aufzugeben. Nach drei Tagen des Testens verschiedener Kameras entschied sich Ilya für den Sony FDR-AX53 - einen kleinen, zuverlässigen Camcorder, der zu vermieten ist, aber gleichzeitig über ausreichende Zuverlässigkeit und visuelle Eigenschaften verfügt.



Wir haben eine Kamera gemietet, sie für eine Woche in Verbindung mit einer Videoaufnahmekarte eingeschaltet und festgestellt, dass wir damit auf die kontinuierliche Übertragung während der gesamten Suche zählen können.



:



Die Arbeit an der Beleuchtung erforderte eine gewisse Anmut. Wir mussten mit minimalen Mitteln eine Lichtbewertung erstellen:



1. Beleuchtung von Objekten, wenn sie von Spielern gefunden werden (Laser, Gewicht), sowie konstantes Licht auf dem Aktenvernichter. Hier verwendeten sie dedolight 150 - zuverlässige und kompakte Kinobeleuchtungsgeräte mit Niedervolt-Halogenlampen, mit denen Sie den Strahl auf ein bestimmtes Motiv fokussieren können, ohne den Hintergrund und andere Objekte zu berühren.



2. Praktisches Spiellicht - Tischlampe, Stehlampe, Stern, Girlande. Das gesamte praktische Licht wurde harmonisch im Rahmen verteilt, um den Bildbereich zu beleuchten. Im Inneren befanden sich LED-Lampen mit einer Farbtemperatur von 3200 K, die Lampe in der Stehlampe war mit einem Rosco-Rot-Foliumfilter bedeckt, um einen ungewöhnlichen Farbakzent zu erzeugen.





Ich bin Ingenieur bei meiner Mutter oder starte morgen



Wie wir Internet und Strom gesichert haben



Das Problem der Fehlertoleranz wurde fast wie in einem Rechenzentrum angegangen: Sie entschieden sich, nicht von den Grundprinzipien abzuweichen, und reservierten nach dem üblichen N + 1-Schema.



Wenn die Übertragung auf YouTube beendet wird, ist es unmöglich, die Verbindung über denselben Link wiederherzustellen und den Stream fortzusetzen. Es war ein kritischer Moment, und der Raum befand sich in einem regulären Büro.



Dazu haben wir einen OpenWRT-basierten Router und das mwan3-Paket verwendet. Es testete automatisch alle 5 Sekunden die Kanalverfügbarkeit und wechselte im Falle einer Unterbrechung von Yota zum Backup-Modem. Infolgedessen dauerte das Umschalten auf den Sicherungskanal weniger als eine Minute.



Ebenso wichtig war es, Stromausfälle auszuschließen, da selbst ein kurzfristiger Stromstoß dazu führen würde, dass alle Computer neu gestartet werden.



Aus diesem Grund haben wir die unterbrechungsfreie Stromversorgung ippon innova g2 3000 verwendet, die alle Spielgeräte gesichert hätte: Der Gesamtstromverbrauch unseres Systems betrug rund 300 Watt. Es würde für 75 Minuten ausreichen, für unsere Zwecke völlig ausreichend.



Wir haben beschlossen, zusätzliche Beleuchtung zu opfern, falls der Strom im Raum ausfällt - er war nicht an eine unterbrechungsfreie Stromversorgung angeschlossen.



Danksagung



  • An das gesamte RUVDS- Team , das das Spiel erfunden und implementiert hat.
  • Für RUVDS-Administratoren war die Last für die Überwachung der Arbeit der Server akzeptabel und alles funktionierte normal wie gewohnt.
  • Zum besten Chef Ntsaplinfür die Tatsache, dass als Antwort auf den Anruf "es gibt eine Idee: Wir werden einen Server nehmen, ein Aquarium darauf stellen und ein Gewicht darüber hängen, Boom, Knall, alles ist mit Wasser überflutet, ein Kurzschluss, ein Feuer!" er sagt immer zuversichtlich "mach es!"
  • Tilda Publishing , - , .
  • S_ILya , , , , , .
  • zhovner , , , , .
  • samat , , .
  • daniemilk .
  • delfphe .
  • Dodo Pizza Engineering .


Und die größte Dankbarkeit gilt den Spielern für all die Emotionen, die wir erlebt haben, als Sie die Suche zwei Tage lang ohne Schlaf gestürmt und sogar die Arbeit verschoben haben.



Weitere Artikel über die Suche nach der Zerstörung des Servers








All Articles