Verkäufe am Getränkeautomaten im Büro zählen: jeden Verkauf senden oder eine laufende Summe?
Von English mit KI übersetzt ·
Ein spaßiges Nebenprojekt. Ich habe die alte Geschichte vom Coke-Automaten der Universität gelesen, der Anfang der 80er seinen Bestand über das Netzwerk meldete, und wollte dasselbe für unseren Getränkeautomaten im Büro machen (alter Sanden-Automat, keine Elektronik, mit der sich reden lässt).Ich habe an der Ausgaberutsche jeder der 6 Spalten einen Mikroschalter angebracht, verdrahtet mit einem Wemos D1 mini. Er zählt die Ausgaben. Jetzt weiß ich nicht, was ich an Hermetry senden soll. Option 1: bei jedem Verkauf {„col3“: 1} senden. Option 2: pro Spalte eine laufende Summe führen und alle 5 Minuten senden. Ich möchte ein Diagramm der Verkäufe pro Tag und wissen, wann eine Spalte wahrscheinlich leer ist (wir füllen montags nach, 40 Dosen pro Spalte).Wie machen die Leute das üblicherweise?
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?
Von English mit KI übersetzt ·
Was auch immer Sie tun, entprellen Sie den Mikroschalter. Eine Dose, die im Schacht hinunterprallt, erzeugt Ihnen 3 Zählimpulse.
Whatever you do, debounce the microswitch. A can bouncing down a chute will give you 3 counts.
Von English mit KI übersetzt ·
Einige dieser Automaten haben einen internen MDB-Bus, der Verkäufe korrekt meldet. Es lohnt sich vielleicht, einen Blick darauf zu werfen, bevor du weitere Löcher bohrst.
Some of those machines have an MDB bus inside that reports vends properly, might be worth a look before you drill more holes.
Von English mit KI übersetzt ·
Was passiert mit der laufenden Summe, wenn der Wemos neu startet? Stromausfälle, wenn die Reinigungskräfte den Stecker ziehen, wette ich.
What happens to the running total when the Wemos reboots? Power cuts when the cleaners unplug it, I’d bet.
Von English mit KI übersetzt ·
Er fängt jedes Mal wieder bei null an. Daran hatte ich nicht gedacht. Hier gibt es kein MDB, ich habe nachgesehen, das Gerät ist älter als ich.
It starts at zero again. I hadn’t thought about that. No MDB on this one, I checked, it’s older than me.
Von English mit KI übersetzt ·
Ich habe das für die Waschmaschinen in zwei unserer Gebäude gemacht (Münzzählungen), daher hier das, was bei mir funktioniert hat, obwohl ich kein Programmierer bin.Senden Sie pro Spalte alle paar Minuten einen laufenden Gesamtwert als einfache Zahlen:
{"vend.col1": 1834, "vend.col2": 977, "vend.col3": 2210, ...}
Wählen Sie dann auf der Diagrammkarte die Aggregation „increase“. Sie ist für Zähler gedacht: Jeder Zeitabschnitt zeigt, wie stark der Zähler gestiegen ist, und wenn der Wert wegen eines Neustarts der Steuerung sinkt, wird ab null gezählt, anstatt einen riesigen negativen Wert anzuzeigen. Ein Neustart kostet Sie also nichts, solange Sie nicht zweimal innerhalb eines Abschnitts neu starten und dabei über den alten Wert kommen.Das Senden von {„col3“: 1} pro Verkauf funktioniert ebenfalls mit „sum“, aber wenn eine Nachricht verloren geht, ist die Zählung endgültig weg. Bei Gesamtwerten holt die nächste Nachricht den Rückstand auf.Eine Sache hat mich irritiert: Tagesabschnitte sind UTC-Tage. Wir sind in der Ostzeit, deshalb wurden meine „Tages“-Balken um 19 oder 20 Uhr geteilt. Für lokale Tage verwenden Sie stündliche Abschnitte und addieren die Stunden oder leben einfach damit.Für „wahrscheinlich leer“: Speichern Sie den Gesamtwert zum Zeitpunkt der Befüllung (ich schreibe montags pro Spalte ein Serverattribut über die Geräteseite) und lösen Sie einen Alarm aus, wenn die Differenz zum Gesamtwert etwa 38 überschreitet. Diesen Teil mache ich in einem Flow, weil eine Alarmbedingung keine Rechenoperationen zwischen zwei Werten durchführen kann.Seite: 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.
Von English mit KI übersetzt ·
Ich habe auf laufende Summen alle 5 Min. und „increase“ mit 1h-Intervallen umgestellt. Ich habe den Stecker absichtlich zweimal gezogen, und das Diagramm hat nicht gezuckt. Jason hatte auch recht, Spalte 4 wurde dreifach gezählt, bis ich ein Debounce von 150 ms hinzugefügt habe. Der Alarm für leere Spalten kommt nächstes Wochenende dran.
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.
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.
Mitdiskutieren
Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

