Ofis içecek makinesinde satışları sayma: her satışı mı yoksa toplam sayacı mı göndermeli?
Yapay zekâ tarafından English dilinden çevrildi ·
Eğlenceli bir yan proje. Early 80s’te ağ üzerinden stok bildiren üniversite Coke makinesinin eski hikayesini okudum ve aynı şeyi ofisteki içecek makinesi için de yapmak istedim (eski Sanden ünitesi, konuşmaya değer bir elektroniği yok).Her iki altı kolonun da boşaltma kanalına bir mikroswitch koydum ve bir Wemos D1 mini’ye bağladım. Düşüşleri sayıyor. Şimdi Hermetry’ye ne göndereceğimi bilmiyorum. Seçenek 1: her satışta {“col3”: 1} gönder. Seçenek 2: kolon başına çalışan bir toplam tut ve her 5 dakikada bir gönder. Günlük satış grafiği istiyorum ve bir kolonun muhtemelen ne zaman boşaldığını bilmek istiyorum (Pazartesileri dolduruyoruz, kolon başına 40 kutu).İnsanlar bunu genelde hangi yöntemle yapıyor?
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?
Yapay zekâ tarafından English dilinden çevrildi ·
Ne yaparsanız yapın, mikro anahtarın sıçramasını (debounce) önleyin. Bir teneke kutu bir oluktan aşağı zıplayarak size 3 sayım verebilir.
Whatever you do, debounce the microswitch. A can bouncing down a chute will give you 3 counts.
Yapay zekâ tarafından English dilinden çevrildi ·
Bu makinelerin bazılarında satışları düzgün raporlayan dahili bir MDB veri yolu bulunuyor; daha fazla delik açmadan önce bir bakmaya değer olabilir.
Some of those machines have an MDB bus inside that reports vends properly, might be worth a look before you drill more holes.
Yapay zekâ tarafından English dilinden çevrildi ·
Wemos yeniden başlatıldığında çalışan toplam ne olacak? Temizlikçiler fişi çektiğinde elektrik kesintisi olur, bahse girerim.
What happens to the running total when the Wemos reboots? Power cuts when the cleaners unplug it, I’d bet.
Yapay zekâ tarafından English dilinden çevrildi ·
Her seferinde sıfırdan başlıyor. Bunu hiç düşünmemiştim. Bu makinede MDB yok, kontrol ettim, benden daha eski.
It starts at zero again. I hadn’t thought about that. No MDB on this one, I checked, it’s older than me.
Yapay zekâ tarafından English dilinden çevrildi ·
Bunu iki binamızdaki çamaşır makineleri için (jeton sayımları) yaptım, bu yüzden programcı olmasam da bende işe yarayan yöntemi anlatayım.Her sütun için çalışan toplamı, birkaç dakikada bir, düz sayılar olarak gönderin:
{"vend.col1": 1834, "vend.col2": 977, "vend.col3": 2210, ...}
Sonra grafik kartında “increase” toplama işlevini seçin. Bu, sayaçlar için tasarlanmış: her aralık, sayacın ne kadar arttığını gösterir ve kart yeniden başlatma nedeniyle değer düşerse, devasa bir negatif değer yerine sıfırdan saymaya başlar. Yani aynı aralık içinde iki kez yeniden başlatıp eski değerin üzerine çıkmadığınız sürece yeniden başlatma bir şeye mal olmaz.Her satış için {“col3”: 1} göndermek de “sum” ile çalışır, ancak bir mesaj kaybolursa sayım kalıcı olarak gider. Toplamlarla bir sonraki mesaj eksiği kapatır.Beni şaşırtan bir nokta: gün aralıkları UTC günleridir. Biz Doğu saatine göre çalışıyoruz, bu yüzden “günlük” çubuklarım akşam 7 ya da 8’de bölündü. Yerel günler için saatlik aralıklar kullanın ve saatleri toplayın, ya da buna katlanın.”Muhtemelen boş” durumu için: ikmal anındaki toplamı saklayın (ben bunu Pazartesi günü cihaz sayfasından sütun başına bir sunucu özniteliği olarak yazıyorum) ve toplamın bundan farkı yaklaşık 38’i geçtiğinde uyarı verin. Bu kısmı bir akışta yapıyorum, çünkü bir alarm koşulu iki değer arasında aritmetik yapamaz.Sayfa: 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.
Yapay zekâ tarafından English dilinden çevrildi ·
5 dakikada bir çalışan toplamlara ve 1 saatlik gruplara göre “increase” kullanmaya geçtim. Bilerek iki kez fişi çektim ve grafik hiç oynamadı. Jason da haklıymış, 4. sütun 150 ms debounce ekleyene kadar üç kez sayıyordu. Boş sütun uyarısı gelecek haftasonunun işi.
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.
- Bu konuyu yanıtlamak için giriş yapmış olmalısınız.
Sohbete katılın
Soru sormak ve yanıtlamak, yararlı gönderileri beğenmek ve sorununuzu çözen yanıtı işaretlemek için oturum açın. Her katkı puan ve seviye kazandırır.

