# Presence Control Firmware Le sketch qui tourne sur la boîte de contrôle de l'indicateur HackENS :)
  • C++ 61.7%
  • Python 33.9%
  • Nix 2.7%
  • Makefile 1.2%
  • Shell 0.5%
Find a file
2026-02-16 14:46:08 +01:00
.gitignore It's alive! 2026-02-12 09:43:32 +01:00
default.nix Converted example.cc to python, added nix shell 2026-02-16 14:46:08 +01:00
example.cc It's alive! 2026-02-12 09:43:32 +01:00
example.py Converted example.cc to python, added nix shell 2026-02-16 14:46:08 +01:00
hwdefs.hh Bug fixes, further testing 2026-01-13 18:36:39 +01:00
main.py It's alive! 2026-02-12 09:43:32 +01:00
Makefile It's alive! 2026-02-12 09:43:32 +01:00
PCF.ino Working firmware(?) Added debounce and reply logic 2026-01-15 09:59:13 +01:00
README.md It's alive! 2026-02-12 09:43:32 +01:00
secrets_template.py It's alive! 2026-02-12 09:43:32 +01:00
setup_serial.sh Added example automaton 2026-01-16 10:13:07 +01:00

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.