| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
| asso:si:si_garage [2026/10/12 21:37] – Remise du code du serveur (server.py, version actuelle, secrets masqués) et du script des badges, avec explications nrineau | asso:si:si_garage [2026/10/12 22:04] (Version actuelle) – La route locale est aussi appelée par le bouton garage du Pi de la porte (gatepi) nrineau |
|---|
| * **Badge RFID** : un badge de la liste ouvre le **garage** uniquement. | * **Badge RFID** : un badge de la liste ouvre le **garage** uniquement. |
| |
| <code> | {{ :asso:si:garage_archify.png?direct&900 |Architecture : ouverture du garage et de la porte arrière (Archify)}} |
| Framateam ──HTTP :4280──► nginx ──► server.py (Flask, 127.0.0.1:8001) ──USB série 9600──► Arduino ──► télécommande garage (D9) | |
| Badge ──► lecteur RFID USB ──► rfid.py ──► rfid.log ──► gate-service.sh (perm.list) ──┘ └──► télécommande serrure (D10 / D11) | //Schéma réalisé avec [[https://github.com/tt-a1i/archify|Archify]] ; source : ''docs/boitier-garage/archify/garage.architecture.json'' dans le dépôt AdminLova.// |
| </code> | |
| |
| ==== Électronique ==== | ==== Électronique ==== |
| |
| ^ Route ^ Déclenchée par ^ Action ^ Contrôle ^ | ^ Route ^ Déclenchée par ^ Action ^ Contrôle ^ |
| | ouverture locale (GET) | ''gate-service.sh'' (badge) | garage | aucun : réservé à l'usage local | | | ouverture locale (GET) | ''gate-service.sh'' (badge de l'atom) et bouton garage du [[asso:si:serrure|Pi de la porte]] | garage | aucun : réservé au réseau local | |
| | garage (POST) | commande slash Framateam | garage | canal garage ou canal porte | | | garage (POST) | commande slash Framateam | garage | canal garage ou canal porte | |
| | entrer (POST) | commande slash Framateam | ouvre la porte arrière + message « X a ouvert le local » | canal porte | | | entrer (POST) | commande slash Framateam | ouvre la porte arrière + message « X a ouvert le local » | canal porte | |
| Fonctionnement : | Fonctionnement : |
| * ''send_command(c)'' ouvre le port série de l'Arduino. L'ouverture **redémarre l'Arduino**, qui envoie sa bannière ''LOV garage opener v3'' : le serveur la lit pour vérifier qu'il parle bien au boîtier, envoie la lettre (''O'', ''E'' ou ''L'') puis lit la réponse (''opening …''). Compter environ 2 secondes par commande. | * ''send_command(c)'' ouvre le port série de l'Arduino. L'ouverture **redémarre l'Arduino**, qui envoie sa bannière ''LOV garage opener v3'' : le serveur la lit pour vérifier qu'il parle bien au boîtier, envoie la lettre (''O'', ''E'' ou ''L'') puis lit la réponse (''opening …''). Compter environ 2 secondes par commande. |
| * ''local_open'' (GET) : ouvre le garage **sans aucune vérification**. Elle n'est utilisée que par le lecteur de badges, sur l'atom lui-même. | * ''local_open'' (GET) : ouvre le garage **sans aucune vérification**. Elle est appelée par le lecteur de badges de l'atom et par le bouton garage du [[asso:si:serrure|Raspberry Pi de la porte]] (gatepi). |
| * ''open'', ''enter'', ''leave'' (POST) : appelées par les commandes slash de Framateam. Mattermost envoie ''user_name'' et ''channel_id'' ; la commande n'est acceptée que depuis les canaux prévus. | * ''open'', ''enter'', ''leave'' (POST) : appelées par les commandes slash de Framateam. Mattermost envoie ''user_name'' et ''channel_id'' ; la commande n'est acceptée que depuis les canaux prévus. |
| * ''enter'' et ''leave'' répondent en JSON : un message visible seulement par l'auteur (''ephemeral'') et une annonce publique « X a ouvert / fermé le local » dans le canal d'annonces. | * ''enter'' et ''leave'' répondent en JSON : un message visible seulement par l'auteur (''ephemeral'') et une annonce publique « X a ouvert / fermé le local » dans le canal d'annonces. |