[PYTHON] Die Geschichte, dass der Wachmann eingesperrt war, als das Labor auf IoT umgestellt wurde

Dieser Artikel ist der 20. Tag des Retty Adventskalenders 2019. Gestern hat Herr Hirano "Retty Data Analysis Team-Rückblick auf das zweite Jahr der Einführung der Datenplattform / Datendemokratisierung / Statistisches Modell- / 190000) ”.

Freut mich, dich kennenzulernen. Ich bin Koda, ein 20-jähriger Ingenieur, der derzeit bei Retty praktiziert.

Vorläufig habe ich mich gefragt, was ich nach der Registrierung für die Teilnahme schreiben soll, aber da ich im Labor der Universität, an der ich studiere, ein eigenes Ein- / Ausstiegsverwaltungssystem (elektronisches Schloss) eingerichtet habe, werde ich darüber sprechen.

Ergänzung

Wir haben viele Meinungen von Hatena Bookmark und so weiter erhalten. Vielen Dank. Wie einige Leute betont haben, war die Reaktion auf Slack, als das Problem "Ich konnte nachts nicht aus dem Raum raus" auftrat, unangemessen, also habe ich es gelöscht. Ich bedauere, dass es nicht angebracht war, solche Inhalte im Blog aufzunehmen. Da wir im Falle einer unerwarteten Situation wie einem Erdbeben oder einem Brand keine Maßnahmen ergriffen haben, möchten wir auch einen Mechanismus in Betracht ziehen, der im Notfall entsperrt werden kann.

Hintergrund

Unmittelbar nachdem ich dem Labor zugewiesen worden war, wurde ich gefragt, was ich mit dem Zimmerschlüssel machen soll.

Wenn es darum geht, doppelte Schlüssel für die Anzahl der Personen zu erstellen, kostet dies viel und es ist schwierig, die Schlüssel für die Anzahl der Personen zu verwalten. Wenn die Gesamtzahl der Schüler im dritten Jahr etwa 20 erreicht, verlieren einige Menschen sie.

Als nächstes dachte ich darüber nach, ein intelligentes Schloss wie Qrio einzuführen, aber die Tür unseres Labors war nicht mit der Daumenumdrehung "Typ mit Türknauf" kompatibel. qrio (Weitere unterstützte Daumenumdrehungen sind auf dieser Seite ausführlich zusammengefasst.)

Soweit ich weiß, gibt es für diesen Typ kein Smart-Lock-Produkt, das die Messlatte für Tür-IoT erheblich höher legt.

Ich hatte keine andere Wahl, als es selbst zu machen, also beschloss ich, es zu machen. [^ 1] 

Gesamtzusammensetzung

Die endgültige Komposition sieht so aus. Ich habe es mit der Technologie gemacht, die ich verwenden möchte. slide1

Elektronisches Schloss

Das elektronische Schlossgehäuse ist ein RaspberryPi3 Model B + mit angeschlossenem Servomotor, Bleischalter und Kartenleser. Das Programm zur Steuerung des Servomotors wurde in Python geschrieben. Es werden zwei Kartenleser verwendet, und durch Anbringen an der Innen- und Außenseite der Tür wird der Zustand "im Raum" oder "ausgehen" verwaltet. Ich werde später erklären, warum ich es schaffe.

Um es ** automatisch zu verriegeln **, ist ein Leitungsschalter angebracht, um den Öffnungs- / Schließstatus der Tür zu erfassen.

Schlüsselkarte

Der Studentenausweis und ICOCA idm, die jeder hat, sind in der Datenbank registriert und werden als Schlüssel für die Authentifizierung verwendet. Wir haben es noch nicht unterstützt, aber wenn Sie es unterstützen, können Sie es auch mit einer bei Apple Pay registrierten Karte entsperren.

Als sekundärer Vorteil: "** Sie können das Risiko des Verlusts Ihres Schlüssels verringern **". Dies liegt daran, dass Sie mit dieser Karte nicht ein- oder aussteigen können, wenn Sie die Zieldaten aus der Datenbank löschen.

Derjenige, der zu erkennen ist

Es war maddox / dasher, das oft verwendet wurde, als der Amazon Dash Button-Hack beliebt war, aber als ich zum ersten Mal seit einiger Zeit in das Repository schaute, Nekmo / amazon-dash wurde erwähnt.

Alle Einstellungen können im Yaml-Format geschrieben werden, und ein Docker-Image ist ebenfalls verfügbar.

Raumverwaltung

Die in Universitätslabors bekannte "** Anzeigetafel im Zimmer (weiße Tafel) **" scheint durch die Verwendung elektronischer Schlösser gut zu sein, also habe ich sie gut gemacht.

Dies wird in der nächsten Funktionseinführung erläutert.

Funktionseinführung

Ich möchte es vorstellen, weil es einige Funktionen hat und nicht nur als "elektronisches Schloss" fungiert.

Webverwaltungsbildschirm

Ich habe mit Flask einen einfachen Verwaltungsbildschirm erstellt, um Mitglieder zu registrieren / bearbeiten / löschen. Jeder liebt die Rezeption "Bootstrap + jQuery".

Übrigens müssen Sie "idm" selbst nachschlagen und dann manuell eingeben. Wenn Sie "WebUSB" oder etwas anderes verwenden, können Sie einen Felica-Reader anschließen, von dort aus lesen und registrieren, aber ich habe ihn noch nicht implementiert.

Dashboard-Funktion

Wir haben es möglich gemacht, den Belegungsstatus online anzuzeigen, damit Sie sehen können, wer von überall kommt. Am Eingang ist ein Monitor mit einem Monitorarm installiert, und mit einem anderen RaspberryPi wird ein Kiosk-Terminal für die Anzeige erstellt. Dies ist praktisch, da Sie den Magneten auf dem Whiteboard nicht bewegen müssen.

Slack-Integrationsfunktion

Wenn Sie den Knopf an der Tür drücken, hören Sie diese Meldung auf dem Benachrichtigungskanal von Slack. notification1 Es ist mit Slacks Interaktiven Komponenten verknüpft. Durch Drücken von "Entsperren" können Sie entsperren, ohne zum Eingang gehen zu müssen. Ich werde. notification2 In diesem Fall werden Sie übrigens gebeten, die Tür selbst zu öffnen und mit lauter Stimme von Ihrem Sitzplatz aus zu schreien: „Schlüssel ist offen!“.

Sie können sich fernhalten, indem Sie auf "Ignorieren" klicken. notification3

Wie im Bild gezeigt, bleibt ein Protokoll von "wer hat geantwortet". Es ist auch schön zu sehen, dass das Slack-Benachrichtigungsabzeichen verschwindet, wenn jemand antwortet, weil die Nachricht überschrieben wird.

Wo ich es mir ausgedacht habe

Ich habe mir ein wenig ausgedacht, um den Entsperrknopf von Slack und RaspberryPi zu verbinden. Insbesondere wenn die Slack-Taste gedrückt wird, sendet Slack eine POST-Anforderung an den hier angegebenen Endpunkt, und es geht darum, wo dieser Endpunkt abgelegt werden soll.

Das Einstellen des Endpunkts direkt auf dem RaspberryPi scheint schnell zu sein, aber ich wollte das elektronische Schloss nicht für das Internet verfügbar machen, deshalb habe ich beschlossen, ein MQTT dazwischen zu setzen. Für MQTT- und MQTT-Broker ist "First MQTT" leicht zu verstehen, daher werde ich es veröffentlichen.

スクリーンショット 2019-12-16 14.56.02.png Richten Sie zunächst eine API ein, um Anforderungen von Slack zu empfangen, und wenn Sie die Anforderung erhalten, dass "die Schaltfläche zum Entsperren gedrückt wurde", "Veröffentlichen" im Zielthema. Durch "Abonnieren" des gleichen Themas auf der RaspberryPi-Seite ist es möglich, das Auftreten eines Ereignisses zu erkennen, ohne es dem Internet auszusetzen.

Ich dachte, das Entsperren würde einige Zeit dauern, aber ist es praktisch, da es nach dem Drücken der Slack-Taste in etwa 1 Sekunde entsperrt wird? Es war in Reichweite.

Eines Tages ...

Eines Tages gegen 20:00 Uhr, als ich zu Hause arbeitete, erhielt ich eine Besuchsbenachrichtigung über die Ruftaste im Labor.

Anscheinend blieb der Lehrer an diesem Tag und ging für eine Weile mit eingeschalteten Lichtern aus. Die meisten Besuche in dieser Zeit sind Wachen und kommen, wenn die Lichter an sind. ~~ Ich werde zu einem späteren Zeitpunkt wütend, wenn niemand mehr da ist. ~~

In dem Moment, als ich die Besuchsbenachrichtigung erhielt, dachte ich "Ah" und schaltete das Licht aus der Ferne aus. [^ 2] slack2

Danach ereignete sich der Titelvorfall.

** Es scheint, dass ich das Licht ausgeschaltet habe, als der Wachmann das Labor betrat und den Raum überprüfte ** und er in Panik geriet ... Außerdem ** wurde es durch automatische Sperre gesperrt, während der Raum überprüft wurde **.

Ich hatte einen Knopf, der für eine Weile aus dem Raum entsperrt werden konnte, aber er schien nicht notwendig zu sein, also passierte er sofort, nachdem ich ihn entfernt hatte.

schließlich

Herr Mamoru, es tut mir wirklich leid, dass ich Ihnen Angst gemacht habe.

[^ 1]: Es war NG von Seiten der Universität, den gesamten Türknauf zu ersetzen. [^ 2]: Beleuchtung ist auch IoT. Ursprünglich ist es eine Funktion, die sich zu einem festgelegten Zeitpunkt automatisch ausschaltet, falls Sie vergessen, sie auszuschalten.

Recommended Posts

Die Geschichte, dass der Wachmann eingesperrt war, als das Labor auf IoT umgestellt wurde
Die Geschichte, dass die Version von Python 3.7.7 nicht an Heroku angepasst wurde
Die Geschichte, dass die Homebrew-Umgebung bei der Installation von Anaconda umgehauen wurde
Die Geschichte, dass XGBoost endlich installiert wurde
Eine Geschichte, der ich nach der SFTP-Kommunikation mit Python verfallen war
Eine Geschichte, die praktisch war, als ich versuchte, das Python-IP-Adressmodul zu verwenden
Eine Geschichte, die fehlgeschlagen ist, als versucht wurde, das Suffix mit rstrip aus einem String zu entfernen
Eine Geschichte, die beim Versuch, die Python-Version mit GCE zu aktualisieren, hängen blieb
Ich habe versucht, das Telefon klingeln zu lassen, als es auf dem IoT-Post veröffentlicht wurde
Eine Geschichte, von der ich bei np.where süchtig war
Die Geschichte, dass der Rückgabewert von tape.gradient () None war
Die Geschichte, die Japan ausgab, wurde mit Django verwechselt
Eine Geschichte, nach der ich süchtig war, als ich in Go nil als Funktionsargument angab
Die Geschichte, dass meine Pull-Anfrage in Scipy aufgenommen wurde
Die Geschichte, dass die neue Zeichnungsbibliothek "HiPlot" ziemlich gut war
Die Geschichte, den privaten Schlüssel mit chmod auf 600 zu setzen
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
Eine Geschichte, die ich süchtig danach war, Lambda von AWS Lambda anzurufen.
Die Platte, von der ich süchtig war, als ich MeCab in Heroku einsetzte
Eine Geschichte, die Schwierigkeiten hatte, 3 Millionen ID-Daten in einer Schleife zu verarbeiten
Als ich versuchte, Python auszuführen, wurde ich zum Microsoft Store übersprungen
Die Geschichte, dass die asynchrone API, die API-Gateway- und Schrittfunktionen kombinierte, die stärkste war
Der Tag, an dem die Grundzertifizierung zu dem von flask betriebenen Service hinzugefügt wurde
Die Geschichte, mit der ich mich befasst habe, weil Apache bei AH00144 war
Eine Geschichte, die unter einem Unterschied im Betriebssystem litt, als sie versuchte, ein Papier zu implementieren
Die Geschichte, die nichts mit der Partition zu tun hatte, als ich zum ersten Mal eine Festplatten-Sicherung mit dd durchführte