Contar ventas en la máquina de bebidas de la oficina: ¿enviar cada venta o un total acumulado?
Traducido del English por IA ·
Un proyecto paralelo divertido. Leí la vieja historia de la máquina de Coca-Cola de la universidad que informaba de su stock por red a principios de los 80 y quise hacer lo mismo con la máquina de bebidas de nuestra oficina (una vieja unidad Sanden, sin electrónica que valga la pena).He puesto un microinterruptor en el conducto de salida de cada una de las 6 columnas, conectado a un Wemos D1 mini. Cuenta las caídas. Ahora no sé qué enviar a Hermetry. Opción 1: en cada venta enviar {«col3»: 1}. Opción 2: mantener un total acumulado por columna y enviarlo cada 5 minutos. Quiero un gráfico de ventas por día y saber cuándo es probable que una columna esté vacía (reponemos los lunes, 40 latas por columna).¿Cómo lo hace la gente normalmente?
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?
Traducido del English por IA ·
Hagas lo que hagas, elimina el rebote del microinterruptor. Una lata que rebota por el conducto te dará 3 conteos.
Whatever you do, debounce the microswitch. A can bouncing down a chute will give you 3 counts.
Traducido del English por IA ·
Algunas de esas máquinas tienen un bus MDB interno que informa correctamente de las ventas; quizá merezca la pena echarle un vistazo antes de taladrar más agujeros.
Some of those machines have an MDB bus inside that reports vends properly, might be worth a look before you drill more holes.
Traducido del English por IA ·
¿Qué pasa con el total acumulado cuando el Wemos se reinicia? Apuesto a que se van los cortes de luz cuando los limpiadores lo desenchufan.
What happens to the running total when the Wemos reboots? Power cuts when the cleaners unplug it, I’d bet.
Traducido del English por IA ·
Vuelve a empezar desde cero. No lo había pensado. Esta no tiene MDB, lo comprobé, es más antigua que yo.
It starts at zero again. I hadn’t thought about that. No MDB on this one, I checked, it’s older than me.
Traducido del English por IA ·
Lo hice para las lavadoras de dos de nuestros edificios (recuentos de monedas), así que aquí está lo que me funcionó aunque no soy programador.Envíe un total acumulado por columna, cada pocos minutos, como números simples:
{"vend.col1": 1834, "vend.col2": 977, "vend.col3": 2210, ...}
Luego, en la tarjeta del gráfico, elija el agregado «increase». Está pensado para contadores: cada intervalo muestra cuánto aumentó el contador, y si el valor baja porque la placa se reinició, cuenta desde cero en lugar de mostrar un enorme valor negativo. Así que un reinicio no le cuesta nada, siempre que no reinicie dos veces dentro de un mismo intervalo y no supere el valor anterior.Enviar {«col3»: 1} por venta también funciona con «sum», pero si se pierde un mensaje, el recuento se pierde para siempre. Con totales, el siguiente mensaje se pone al día.Una cosa que me dio problemas: los intervalos diarios son días UTC. Estamos en hora del Este, así que mis barras «por día» se dividían a las 7 u 8 de la tarde. Para días locales use intervalos horarios y sume las horas, o simplemente conviva con ello.Para «probablemente vacía»: guarde el total en el momento del rellenado (yo escribo un atributo de servidor por columna los lunes desde la página del dispositivo) y genere una alerta cuando el total menos ese valor supere aproximadamente 38. Hago esa parte en un flujo porque una condición de alarma no puede hacer operaciones aritméticas entre dos valores.La página es 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.
Traducido del English por IA ·
Cambié a totales acumulados cada 5 min y a «increase» con intervalos de 1 h. La desconecté dos veces a propósito y el gráfico no se inmutó. Jason también tenía razón: la columna 4 se contaba tres veces hasta que añadí un debounce de 150 ms. La alerta de columna vacía es el trabajo del próximo fin de semana.
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.
- Debes estar registrado para responder a este debate.
Únete a la conversación
Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

