Compter les ventes de la machine à boissons du bureau : envoyer chaque vente ou un total cumulé ?
Traduit de English par IA ·
Petit projet annexe amusant. J’ai lu l’ancienne histoire de la machine à Coca de l’université qui signalait son stock sur le réseau au début des années 80, et j’ai voulu faire la même chose pour notre machine à boissons du bureau (vieille unité Sanden, aucune électronique digne de ce nom).J’ai placé un microrupteur sur la goulotte de sortie de chacune des 6 colonnes, relié à un Wemos D1 mini. Il compte les distributions. Maintenant, je ne sais pas quoi envoyer à Hermetry. Option 1 : à chaque vente, envoyer {« col3 »: 1}. Option 2 : garder un total cumulé par colonne et l’envoyer toutes les 5 minutes. Je veux un graphique des ventes par jour et savoir quand une colonne est probablement vide (nous remplissons le lundi, 40 canettes par colonne).Comment les gens font-ils généralement ?
Fun side project. I read the old story of the university Coke machine that reported its stock over the network in the early 80s and wanted to do the same for our office drinks machine (old Sanden unit, no electronics worth talking to).
I’ve put a microswitch on the drop chute of each of the 6 columns, wired to a Wemos D1 mini. It counts drops. Now I don’t know what to send to Hermetry. Option 1: on each vend send {« col3 »: 1}. Option 2: keep a running total per column and send it every 5 minutes. I want a chart of vends per day and I’d like to know when a column is probably empty (we refill on Mondays, 40 cans per column).
Which way do people do this?
Traduit de English par IA ·
Quoi que vous fassiez, éliminez les rebonds du micro-interrupteur. Une canette qui rebondit dans le goulotte vous donnera 3 comptages.
Whatever you do, debounce the microswitch. A can bouncing down a chute will give you 3 counts.
Traduit de English par IA ·
Certaines de ces machines disposent d’un bus MDB interne qui signale correctement les ventes, cela vaut peut-être le coup de regarder avant de percer d’autres trous.
Some of those machines have an MDB bus inside that reports vends properly, might be worth a look before you drill more holes.
Traduit de English par IA ·
Que devient le total cumulé quand le Wemos redémarre ? Des coupures de courant quand les agents d’entretien le débranchent, je parie.
What happens to the running total when the Wemos reboots? Power cuts when the cleaners unplug it, I’d bet.
Traduit de English par IA ·
Il repart de zéro à chaque fois. Je n’y avais pas pensé. Pas de MDB sur celle-ci, j’ai vérifié, elle est plus vieille que moi.
It starts at zero again. I hadn’t thought about that. No MDB on this one, I checked, it’s older than me.
Traduit de English par IA ·
J’ai fait cela pour les machines à laver de deux de nos bâtiments (comptages de pièces), donc voici ce qui a fonctionné pour moi, même si je ne suis pas programmeur.Envoyez un total cumulé par colonne, toutes les quelques minutes, sous forme de nombres simples :
{"vend.col1": 1834, "vend.col2": 977, "vend.col3": 2210, ...}
Ensuite, sur la carte du graphique, choisissez l’agrégat « increase ». Il est conçu pour les compteurs : chaque intervalle indique de combien le compteur a augmenté, et si la valeur baisse parce que la carte a redémarré, il recommence à compter depuis zéro au lieu d’afficher une énorme valeur négative. Un redémarrage ne vous coûte donc rien, tant que vous ne redémarrez pas deux fois dans le même intervalle et ne dépassez pas l’ancienne valeur.Envoyer {« col3 »: 1} à chaque distribution fonctionne aussi avec « sum », mais si un message est perdu, le comptage est définitivement perdu. Avec des totaux, le message suivant rattrape le retard.Un point m’a piégé : les intervalles journaliers sont des jours UTC. Nous sommes à l’heure de l’Est, donc mes barres « par jour » étaient coupées à 19 h ou 20 h. Pour des jours locaux, utilisez des intervalles horaires et additionnez les heures, ou acceptez-le simplement.Pour « probablement vide » : enregistrez le total au moment du réapprovisionnement (j’écris un attribut serveur par colonne le lundi depuis la page de l’appareil) et déclenchez une alerte lorsque le total moins cette valeur dépasse 38 environ. Je fais cette partie dans un flux, car une condition d’alarme ne peut pas effectuer de calcul entre deux valeurs.La page est Aggregates and rollups.
I did this for the laundry machines in two of our buildings (coin counts), so here’s what worked for me even though I’m no programmer.
Send a running total per column, every few minutes, as plain numbers:
{"vend.col1": 1834, "vend.col2": 977, "vend.col3": 2210, ...}
Then on the chart card pick the aggregate « increase ». It’s made for counters: each bucket shows how much the counter went up, and if the value goes down because the board rebooted, it counts from zero instead of showing a huge negative. So a reboot costs you nothing as long as you don’t reboot twice inside one bucket and land above the old value.
Sending {« col3 »: 1} per vend also works with « sum », but if a message is lost the count is gone for good. With totals the next message catches up.
One thing that tripped me: day buckets are UTC days. We’re on Eastern time, so my « per day » bars were split at 7 or 8 pm. For local days use hourly buckets and add up the hours, or just live with it.
For « probably empty »: store the total at refill time (I write a server attribute per column on Monday from the device page) and alert when total minus that passes 38 or so. I do that part in a flow because an alarm condition can’t do arithmetic between two values.
Page is Aggregates and rollups.
Traduit de English par IA ·
Je suis passé à des totaux cumulés toutes les 5 min et à « increase » avec des intervalles de 1 h. Je l’ai débranchée deux fois volontairement et le graphique n’a pas bronché. Jason avait aussi raison, la colonne 4 était comptée trois fois jusqu’à ce que j’ajoute un debounce de 150 ms. L’alerte colonne vide, c’est pour le week-end prochain.
Switched to running totals every 5 min and « increase » with 1h buckets. Unplugged it twice on purpose and the chart didn’t flinch. Jason was right as well, column 4 counted triple until I added a 150 ms debounce. Empty-column alert is next weekend’s job.
- 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.

