[PYTHON] L'histoire selon laquelle le gardien était confiné lorsque le laboratoire a été converti à l'IoT

Cet article est le 20e jour du calendrier de l'Avent Retty 2019. Hier, M. Hirano "Retty Data Analysis Team-Review of the Second Year of Launch-Data Platform / Data Democratization / Statistical Model- / 190000) ».

Ravi de vous rencontrer. Je suis Koda, un ingénieur de 20 ans actuellement stagiaire chez Retty.

Pour le moment, je me demandais quoi écrire après m'être inscrit pour participer, mais comme j'ai fait mon propre système de gestion des entrées / sorties (serrure électronique) opéré dans le laboratoire de l'université que je fréquente, j'en parlerai.

Supplément

Nous avons reçu beaucoup d'avis de Hatena Bookmark et ainsi de suite. Merci beaucoup. Comme certains l'ont souligné, la réaction sur Slack lorsque le problème "Je ne pouvais pas sortir de la pièce la nuit" se produisait était inappropriée, alors je l'ai supprimée. Je regrette qu'il n'était pas approprié de reprendre de tels contenus dans le blog. De plus, nous n'avons pas pris de mesures en cas de situation imprévue comme un tremblement de terre ou un incendie, nous aimerions donc envisager un mécanisme qui peut être déverrouillé en cas d'urgence.

Contexte

Immédiatement après avoir été affecté au laboratoire, on m'a demandé quoi faire avec la clé de la chambre.

Lorsqu'il s'agit de créer des clés en double pour le nombre de personnes, cela coûte cher et il est difficile de gérer les clés pour le nombre de personnes. Lorsque le nombre total d'étudiants de troisième année atteint environ 20, certaines personnes le perdront.

Ensuite, j'ai pensé à introduire une serrure intelligente comme Qrio, mais la porte de notre laboratoire n'était pas compatible avec le tour de pouce "type avec bouton de porte". qrio (Les autres tours de pouce pris en charge sont résumés en détail sur cette page.)

Pour autant que je sache, il n'existe pas de produit de verrouillage intelligent pour ce type, ce qui élève considérablement la barre pour l'IoT de porte.

Je n'avais pas d'autre choix que de le faire moi-même, alors j'ai décidé de le faire. [^ 1] 

Composition générale

La composition finale ressemble à ceci. Je l'ai fait comme j'aime avec la technologie que je souhaite utiliser. slide1

Serrure électronique

Le corps de la serrure électronique est un «RaspberryPi3 Model B +» avec un servomoteur, un interrupteur et un lecteur de carte connectés. Le programme qui contrôle le servomoteur a été écrit en Python. Deux lecteurs de cartes sont utilisés, et en les fixant à l'intérieur et à l'extérieur de la porte, l'état «dans la pièce» ou «sortie» est géré. J'expliquerai pourquoi je le gère plus tard.

Afin de le rendre ** auto-verrouillage **, un interrupteur principal est attaché pour acquérir l'état ouvert / fermé de la porte.

Clé de la carte

L'ID étudiant et l'ICOCA ʻidm` que chacun possède sont enregistrés dans la base de données, et ils sont utilisés comme clé pour l'authentification. Nous ne l'avons pas encore rendu compatible, mais si vous le rendez compatible, vous pouvez le déverrouiller même avec une carte enregistrée auprès d'Apple Pay.

Comme avantage secondaire, "** Vous pouvez réduire le risque de perdre votre clé **". En effet, si vous supprimez les données cibles de la base de données, vous ne pourrez pas entrer ou sortir avec cette carte.

Celui à détecter

C'était maddox / dasher qui était souvent utilisé lorsque le piratage d'Amazon Dash Button était populaire, mais quand j'ai regardé dans le référentiel après un long moment, Nekmo / amazon-dash a été mentionné.

Tous les paramètres peuvent être écrits au format yaml, et une image Docker est également disponible.

Gestion de la salle

Le "** tableau d'affichage dans la chambre (tableau blanc) **" qui est familier dans les laboratoires universitaires semble être bon en utilisant des serrures électroniques, donc je l'ai fait bien.

Cela sera expliqué dans la prochaine introduction des fonctions.

Introduction de la fonction

Je voudrais l'introduire car il a certaines fonctions, pas seulement en tant que "serrure électronique".

Écran de gestion Web

J'ai créé un écran de gestion simple avec Flask pour enregistrer / modifier / supprimer des membres. Tout le monde aime la réception, «Bootstrap + jQuery».

Au fait, vous devez rechercher vous-même «idm» et le saisir manuellement. Si vous utilisez WebUSB ou quelque chose du genre, vous pouvez connecter un lecteur Felica, le lire à partir de là et l'enregistrer, mais je ne l'ai pas encore implémenté.

Fonction tableau de bord

Nous avons rendu possible la visualisation du statut d'occupation en ligne afin que vous puissiez voir qui vient de n'importe où. Un moniteur est installé à l'entrée avec un bras de moniteur, et un autre RaspberryPi est utilisé pour créer un terminal kiosque pour l'affichage. C'est pratique car vous n'avez pas à déplacer l'aimant sur le tableau blanc.

Fonction d'intégration Slack

Lorsque vous appuyez sur le bouton de la porte, vous entendrez ce message sur le canal de notification de Slack. notification1 Il est lié aux [Composants interactifs] de Slack (https://api.slack.com/interactive-messages), et en appuyant sur «Déverrouiller», vous pouvez déverrouiller sans avoir à vous rendre à l'entrée pour récupérer. Je vais. notification2 D'ailleurs, dans ce cas, il vous sera demandé d'ouvrir la porte vous-même et d'entrer en criant «La clé est ouverte!» De votre siège à haute voix.

Vous pouvez rester à l'écart en appuyant sur "Ignorer". notification3

Comme le montre l'image, un journal de «qui a répondu» reste. Il est également agréable de voir le badge de notification Slack disparaître lorsque quelqu'un répond car le message est écrasé.

Où j'ai conçu

J'ai conçu un petit peu pour connecter le bouton de déverrouillage de Slack et RaspberryPi. Plus précisément, lorsque vous appuyez sur le bouton Slack, Slack envoie une requête POST au point de terminaison spécifié ici, et il s'agit de savoir où placer ce point de terminaison.

Il semble rapide de définir le point final directement sur le RaspberryPi, mais je ne voulais pas exposer la serrure électronique à Internet, alors j'ai décidé de mettre un MQTT entre les deux. Pour les courtiers MQTT et MQTT, "First MQTT" est facile à comprendre, je vais donc le poster.

スクリーンショット 2019-12-16 14.56.02.png Tout d'abord, configurez une API pour recevoir les demandes de Slack, et lorsque vous recevez une demande indiquant que «le bouton de déverrouillage a été enfoncé», «publier» sur le sujet «cible». En "souscrivant" le même "sujet" du côté RaspberryPi, il est possible de détecter l'occurrence d'un événement sans l'exposer à Internet.

Je pensais que le déverrouillage prendrait un certain temps, mais est-ce pratique car il sera déverrouillé environ 1 seconde après avoir appuyé sur le bouton Slack? C'était dans la fourchette.

Un jour ...

Un jour vers 20h00, alors que je travaillais à la maison, j'ai reçu une notification de visite du bouton d'appel du laboratoire.

Apparemment, le professeur est resté ce jour-là, et il est sorti un moment avec les lumières allumées. La plupart des visites pendant cette période sont des gardiens, et elles viennent lorsque les lumières sont allumées. ~~ Je me mettrai en colère à une date ultérieure s'il ne reste personne. ~~

Au moment où j'ai reçu la notification de visite, j'ai pensé "Ah" et j'ai éteint les lumières à distance. [^ 2] slack2

Après cela, l'incident du titre s'est produit.

** Il semble que j'ai éteint les lumières lorsque le gardien est entré dans le laboratoire et a vérifié la pièce **, et il paniquait ... De plus, ** il a été verrouillé par verrouillage automatique lors de la vérification de la chambre **.

J'avais un bouton qui peut être déverrouillé de la pièce pendant un certain temps, mais cela ne semblait pas nécessaire, donc cela s'est produit immédiatement après l'avoir retiré.

à la fin

M. Mamoru, je suis vraiment désolé de vous avoir fait peur.

[^ 1]: C'était NG du côté de l'université pour remplacer tout le bouton de porte. [^ 2]: l'éclairage est également IoT. À l'origine, c'est une fonction qui s'éteint automatiquement à une heure fixe au cas où vous oublieriez de l'éteindre.

Recommended Posts

L'histoire selon laquelle le gardien était confiné lorsque le laboratoire a été converti à l'IoT
L'histoire selon laquelle la version de python 3.7.7 n'était pas adaptée à Heroku
L'histoire selon laquelle l'environnement Homebrew a été époustouflé lors de l'installation d'Anaconda
L'histoire que XGBoost a finalement été installé
Une histoire à laquelle j'étais accro après la communication SFTP avec python
Une histoire qui était pratique lorsque j'ai essayé d'utiliser le module d'adresse IP python
Une histoire qui a échoué lors de la tentative de suppression du suffixe d'une chaîne avec rstrip
Une histoire bloquée lors de la tentative de mise à niveau de la version Python avec GCE
J'ai essayé de faire sonner le téléphone lorsqu'il a été publié sur le poste IoT
Une histoire à laquelle j'étais accro chez np.where
L'histoire selon laquelle la valeur de retour de tape.gradient () était None
L'histoire de la confusion entre la production japonaise et Django
Une histoire à laquelle j'étais accro en spécifiant nil comme argument de fonction dans Go
L'histoire selon laquelle ma pull request a été intégrée à Scipy
L'histoire selon laquelle la nouvelle bibliothèque de dessins "HiPlot" était plutôt bonne
L'histoire de la définition de la clé privée à 600 avec chmod
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
Une histoire à laquelle j'étais accro à appeler Lambda depuis AWS Lambda.
Le record auquel j'étais accro en mettant MeCab dans Heroku
Une histoire qui avait du mal à traiter en boucle 3 millions de données d'identification
Lorsque j'ai essayé d'exécuter Python, j'ai été ignoré dans le Microsoft Store
L'histoire selon laquelle l'API asynchrone qui combinait API Gateway et Step Functions était la plus forte
Le jour où la certification de base a été ajoutée au service opéré par flask
L'histoire que j'ai traitée parce qu'Apache était en panne à AH00144
Une histoire qui a souffert d'une différence de système d'exploitation lors de la tentative d'implémentation d'un article
L'histoire qui n'avait rien à voir avec la partition lorsque j'ai fait une sauvegarde de disque avec dd pour la première fois