Apprendre à une Arduino Uno à deviner l'occupation des chambres – peut-elle apprendre seule ou dois-je d'abord sortir mes données ?
Traduit de English par IA ·
Responsable des installations d’un hôtel de 90 chambres, je ne suis pas programmeur mais je bricole. Nous avons de petites cartes dans 12 chambres (Arduino Uno + un ESP-01 pour le Wi-Fi, un capteur de CO2 SCD40, un PIR) qui envoient le CO2, la température et le mouvement à Hermetry toutes les 2 minutes.Un prestataire nous a proposé, pour beaucoup d’argent, une « IA en périphérie qui apprend quand les chambres sont occupées ». J’ai pensé : ne pourrais-je pas simplement entraîner un petit réseau de neurones directement sur l’Uno pour qu’il apprenne tout seul ? Le service d’étage aimerait savoir quelles chambres sont vraiment vides. Est-ce insensé ? Par où commencer ?
Facility manager at a 90-room hotel, I’m not a programmer but I’ve been tinkering. We have small boards in 12 rooms (Arduino Uno + an ESP-01 for Wi-Fi, SCD40 CO2 sensor, a PIR) sending CO2, temperature and motion to Hermetry every 2 minutes.
A vendor pitched us « AI on the edge that learns when rooms are occupied » for a lot of money. I thought, could I just train a small neural network on the Uno itself so it learns by itself? Housekeeping would love to know which rooms are really empty. Is this crazy? Where would I even start?
Traduit de English par IA ·
Entraîner un modèle sur un Uno : fou, oui. 2 Ko de RAM. Exécuter un petit modèle entraîné ailleurs : tout à fait faisable.
Training on an Uno: crazy, yes. 2 KB of RAM. Running a tiny model that was trained somewhere else: very doable.
Traduit de English par IA ·
Pourquoi l’entraînement est-il tellement moins bon que l’exécution ? Ce sont pourtant les mêmes mathématiques, non ?
Why is training so much worse than running it? Isn’t it the same maths?
Traduit de English par IA ·
L’entraînement nécessite que tous les poids, leurs gradients et une grande quantité de données d’exemple soient en mémoire en même temps, sur de nombreuses passes. L’inférence est une seule passe, multiplication et addition, et les poids peuvent résider en flash.
Training needs every weight, its gradient and a pile of example data in memory at once, many passes. Inference is one pass, multiply and add, and the weights can sit in flash.
Traduit de English par IA ·
Donc la vraie première étape, c’est un jeu de données. Tu as déjà des semaines de relevés dans Hermetry, il te manque juste des étiquettes : les heures d’arrivée et de départ notées par le service d’entretien suffiraient.
So the real first step is a dataset. You already have weeks of readings in Hermetry, you just need labels: housekeeping’s check-in/check-out times would do.
Traduit de English par IA ·
Megan a raison. Voici ce que je ferais :1. Continuez à envoyer co2, temperature et motion sous forme de nombres (motion en 0/1, et non true/false, afin qu’il y ait un historique).2. Extrayez les données brutes avec l’API d’historique, un jour par appel est confortable :
curl -s -H "Authorization: Bearer $KEY" "https://$HOST/tenant/$TENANT/api/telemetry/series?kind=iot_device&entityId=$ROOM&keys=co2,temperature,motion&from=$FROM&to=$TO&bucket=raw"
Si une clé renvoie 10 000 points, redemandez à partir du dernier ts + 1.3. Joignez-les à l’export de l’accueil sur un ordinateur portable, entraînez une régression logistique ou un réseau à 3 entrées et 8 neurones en Python. C’est largement suffisant pour la pente du CO2 + le nombre de mouvements.4. Quantifiez les poids en int8, collez-les sous forme de tableau const int8_t w[] PROGMEM, et l’Uno n’exécute que la passe avant. Envoyez le résultat sous la forme occupied_p (0-100) avec les autres clés.Honnêtement, pour l’occupation, la hausse du CO2 sur 20 minutes plus « tout mouvement au cours des 30 dernières minutes » vous mène déjà loin, avant même un réseau de neurones. Commencez par cela comme référence afin de savoir si le modèle en vaut la peine. Côté API, voici la documentation : L’API d’historique.
Megan’s right. What I’d do:
1. Keep sending co2, temperature and motion as numbers (motion as 0/1, not true/false, so it has a history).
2. Pull the raw data out with the history API, one day per call is comfortable:
curl -s -H "Authorization: Bearer $KEY" "https://$HOST/tenant/$TENANT/api/telemetry/series?kind=iot_device&entityId=$ROOM&keys=co2,temperature,motion&from=$FROM&to=$TO&bucket=raw"
If a key comes back with 10,000 points, ask again from the last ts + 1.
3. Join it with the front desk export on a laptop, train a logistic regression or a 3-input, 8-neuron net in Python. That is plenty for CO2 slope + motion count.
4. Quantise the weights to int8, paste them as a const int8_t w[] PROGMEM array, and the Uno only runs the forward pass. Send the result as occupied_p (0-100) alongside the other keys.
Honestly, for occupancy the CO2 rise over 20 minutes plus « any motion in the last 30 min » gets you most of the way before any neural net. Start with that as a baseline so you know if the model is worth it. API side is here: The history API.
Traduit de English par IA ·
Si vous scriptez cette exportation, donnez à la clé API le préréglage Lecture seule et restreignez-la au réseau de votre ordinateur portable. J’ai vu bien trop de clés avec accès administrateur complet dans des notebooks Python.
If you script that export, give the API key the Read-only preset and restrict it to your laptop’s network. Seen too many full-admin keys in Python notebooks.
Traduit de English par IA ·
Mise à jour après deux semaines : mon neveu m’a aidé pour la partie Python. La règle simple (hausse du CO2 + mouvement dans les 30 dernières minutes) était juste à 87 % par rapport au registre de l’accueil, le petit modèle à 91 %. Il tourne sur l’Uno, 24 poids. Nous n’achetons pas la solution du fournisseur. Et oui, j’ai créé une clé en lecture seule comme Brian l’avait dit, ma première était une clé administrateur…
Update after two weeks: my nephew helped with the Python part. The simple rule (CO2 rising + motion in last 30 min) was right 87% of the time against the front desk log, the tiny model 91%. It runs on the Uno, 24 weights. We’re not buying the vendor thing. And yes, I made a Read-only key like Brian said, my first one was an admin key…
- Vous devez être connecté pour répondre à ce sujet.
Rejoignez la discussion
Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

