- C++ 61.7%
- Python 33.9%
- Nix 2.7%
- Makefile 1.2%
- Shell 0.5%
| .gitignore | ||
| default.nix | ||
| example.cc | ||
| example.py | ||
| hwdefs.hh | ||
| main.py | ||
| Makefile | ||
| PCF.ino | ||
| README.md | ||
| secrets_template.py | ||
| setup_serial.sh | ||
PCF
Presence Control Firmware
Le système de détection d'ouverture d'hackens, pour pouvoir recevoir des gens et ne pas devenir sourd à cause du baby :)
Design général
Il y a trois composants au système:
- La boîte de contrôle en arrière, avec le sketch arduino fourni dans le répo
- Une ESP-32 qui tourne proche de la porte de l'avant, qui allume et éteint l'indicateur en recevant des commandes du réseau local (*.py)
- Le software qui orchestre tout qui tourne sur hackens-milieu (example.cc)
Dans l'idée: L'ESP-32 est la plus stupide possible, c'est juste un actuateur.
Les deux composants qui restent implémentent une machine à état. On ne peut pas faire confiance à hackens-milieu de garder fidèlement un état -- les gens l'éteignent tout le temps, les services ça crashe. Donc, l'arduino garde un état X = (A, S). Ici A c'est l'état des senseurs (combien de fois on a appuyé sur l'override depuis le dernier switch, et est-ce que le loquet est inséré) et S c'est l'état de l'automate (qui est aussi reflété sur la LED)
Hackens-milieu peut récupérer X, et est notifié à chaque fois que A change. À chaque changement, c'est le job d'hackens-milieu de faire tourner la machine à état et renvoyer S' dans les 10 secondes. Si ce n'est pas le cas, l'Arduino default sur un état S déconnecté blanc. Ça permet à l'automate d'évoluer au fil des besoins, et donne du feedback utilisateur lorsque le système n'est pas fonctionnel.
L'autre boulot d'hackens-milieu est de commander l'ESP-32.
Configuration de l'ESP-32
L'ESP-32 est configuré avec une addresse IPv4 statique définie dans secrets.py,
et écoute en TCP sur le port défini dans secrets.py.
À la réception d'un paquet \x00, les LEDs s'éteignent.
À la réception de n'importe quel autre paquet, les LEDs s'allument.
Par défaut, à l'initialisation, les LEDs sont éteintes.
Le mot de passe et le SSID du WiFi local sont également définis dans
secrets.py.
TODOS
-> Pour l'instant y'a rien de proprement installé. Faut faire un package pour le software local, une unit qui l'appelle et une règle udev pour l'Arduino.
-> En vrai le soft local devrait être en python aussi. Je (Sel) l'ai fait en C car c'est ce que je connais mieux, mais ça nuit vraiment à la lisibilité.
-> Ça pourrait être bien d'intégrer un système similaire à l'indicateur KF sur le site d'HackENS. A priori il suffit de commander le serveur d'hackens comme l'ESP-32.