The Problem I Watched Every Day
I am Ezhilmani — System Administrator from
Tamil Nadu, India.
Every single working day I watched a staff member
walk to the school bell, ring it manually, walk back.
Ten times a day. Every working day.
One missed ring meant late classes.
One wrong timing meant confusion across the campus.
It was 2026 and we were still doing this by hand.
I decided to fix it.
What I Built
SaSiE Bell System — a free, open source Windows
desktop application that automates school bell
scheduling completely using Python and a $6 USB
HID relay module.
No expensive hardware. No proprietary software.
No monthly subscription. Just Python and a
₹500 relay module connected to your existing bell.
Tech Stack
- Python 3.8+
- Tkinter — GUI
- HID library — USB relay control
- Pillow — logo/image display
- JSON — schedule storage
Hardware: USB HID Relay Module
- Vendor ID: 0x16C0
- Product ID: 0x05DF
- Cost: approximately ₹500 / $6
Key Features
Scheduling
- Set bell times in HH:MM format
- Multiple named schedules — Regular Day, Exam Week, Special Events
- Smart mid-day start — skips past bells automatically when app opens mid-session
- 30-second on-screen countdown warning before every bell
Hardware Control
- USB HID relay — direct Python control
- Customisable bell duration 1 to 9 seconds
- Manual override — ring bell anytime, available even without login
Security
- Dual password system — Admin and User roles
- Session-based — no re-prompting once logged in
- Guest mode — only manual bell visible, everything else locked behind overlay
Logging
- Every bell ring logged with date and time
- View, clear, or auto-clean logs older than 7 days
Customisation
- Institute name and logo in app header
- HTML-based header — edit with any text editor
- Supports h1 through h6, bold, paragraph tags
The Relay Control Code
The core hardware interaction is surprisingly simple:
import hid
VENDOR_ID = 0x16c0
PRODUCT_ID = 0x05df
def relay_on():
device = hid.device()
device.open(VENDOR_ID, PRODUCT_ID)
device.send_feature_report([0x00, 0xFF, 0x01, 0x01])
device.close()
def relay_off():
device = hid.device()
device.open(VENDOR_ID, PRODUCT_ID)
device.send_feature_report([0x00, 0xFD, 0x01, 0x00])
device.close()
def ring_bell(duration):
relay_on()
time.sleep(duration)
relay_off()
That is it. Three functions.
A ₹500 module. A school bell that now rings itself.
The Smart Scheduler
The most useful technical feature — when you start
the app at 10 AM, it does not ring the 8:30 and
9:30 bells that already passed.
# Pre-mark all past times as already triggered
for time_value, _ in schedule:
bell_time = datetime.strptime(time_value, "%H:%M")
if bell_time <= datetime.now():
triggered_today.add(time_value)
Simple. But genuinely useful in real deployment.
Deployment Results
Deployed at an educational institution
in Tamil Nadu, India.
- 10 bells automated per day
- Schedule: 08:00 AM to 03:00 PM
- System uptime: 07:00 AM to 04:00 PM
- Previously: fully manual
- Result: zero missed bells since deployment
What I Learned Building This
1. Real problems make better software.
Every feature in this app came from watching
a real problem happen in real life.
2. Simple hardware is powerful.
A $6 relay module + Python = full industrial
bell automation. You do not need expensive
proprietary systems.
3. Ship it.
I am a System Admin, not a professional developer.
I built this anyway. It works. It is deployed.
It is helping real people.
That is enough.
Get It Free
Everything is open source under MIT License.
Your name goes on nothing. My name stays on everything.
That is the deal.
🔗 GitHub:
https://github.com/SaSiEzhilmani/SaSiE-BellSystem
If your school or institution is still ringing
bells manually — this is for you.
Any Windows PC. A $6 relay. Done.
Support
If this helped you, a small contribution means a lot.
💳 UPI: sasie@scb
📧 Email: sasiezhilmani@gmail.com
📞 Phone: +91 9092 566 569
Built with Python. Deployed in Tamil Nadu.
Free for every school on earth.
— சசி எழில்மணி (SaSi Ezhilmani / SaSiE)
Tamil Nadu, India 🇮🇳
Cite this work:
SaSi Ezhilmani (SaSiE). SaSiE Bell System.
Zenodo. https://doi.org/10.5281/zenodo.19972626
Top comments (0)