<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: SaSiEzhilmani</title>
    <description>The latest articles on Forem by SaSiEzhilmani (@sasiezhilmani).</description>
    <link>https://forem.com/sasiezhilmani</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3908622%2Ff50479ab-5c4b-4f11-b64b-a3230f8b5124.png</url>
      <title>Forem: SaSiEzhilmani</title>
      <link>https://forem.com/sasiezhilmani</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sasiezhilmani"/>
    <language>en</language>
    <item>
      <title>I built a free automated bell system for schools using Python and a $6 USB relay — here's how and why</title>
      <dc:creator>SaSiEzhilmani</dc:creator>
      <pubDate>Sat, 02 May 2026 07:58:48 +0000</pubDate>
      <link>https://forem.com/sasiezhilmani/i-built-a-free-automated-bell-system-for-schools-using-python-and-a-6-usb-relay-heres-how-and-10p0</link>
      <guid>https://forem.com/sasiezhilmani/i-built-a-free-automated-bell-system-for-schools-using-python-and-a-6-usb-relay-heres-how-and-10p0</guid>
      <description>&lt;h2&gt;
  
  
  The Problem I Watched Every Day
&lt;/h2&gt;

&lt;p&gt;I am Ezhilmani — System Administrator from &lt;br&gt;
Tamil Nadu, India.&lt;/p&gt;

&lt;p&gt;Every single working day I watched a staff member &lt;br&gt;
walk to the school bell, ring it manually, walk back.&lt;/p&gt;

&lt;p&gt;Ten times a day. Every working day.&lt;/p&gt;

&lt;p&gt;One missed ring meant late classes.&lt;br&gt;
One wrong timing meant confusion across the campus.&lt;br&gt;
It was 2026 and we were still doing this by hand.&lt;/p&gt;

&lt;p&gt;I decided to fix it.&lt;/p&gt;


&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SaSiE Bell System&lt;/strong&gt; — a free, open source Windows &lt;br&gt;
desktop application that automates school bell &lt;br&gt;
scheduling completely using Python and a $6 USB &lt;br&gt;
HID relay module.&lt;/p&gt;

&lt;p&gt;No expensive hardware. No proprietary software. &lt;br&gt;
No monthly subscription. Just Python and a &lt;br&gt;
₹500 relay module connected to your existing bell.&lt;/p&gt;


&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Python 3.8+&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tkinter&lt;/strong&gt; — GUI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HID library&lt;/strong&gt; — USB relay control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pillow&lt;/strong&gt; — logo/image display&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON&lt;/strong&gt; — schedule storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hardware: USB HID Relay Module&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vendor ID: 0x16C0&lt;/li&gt;
&lt;li&gt;Product ID: 0x05DF&lt;/li&gt;
&lt;li&gt;Cost: approximately ₹500 / $6&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Scheduling&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set bell times in HH:MM format&lt;/li&gt;
&lt;li&gt;Multiple named schedules — Regular Day, 
Exam Week, Special Events&lt;/li&gt;
&lt;li&gt;Smart mid-day start — skips past bells 
automatically when app opens mid-session&lt;/li&gt;
&lt;li&gt;30-second on-screen countdown warning 
before every bell&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hardware Control&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;USB HID relay — direct Python control&lt;/li&gt;
&lt;li&gt;Customisable bell duration 1 to 9 seconds&lt;/li&gt;
&lt;li&gt;Manual override — ring bell anytime, 
available even without login&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dual password system — Admin and User roles&lt;/li&gt;
&lt;li&gt;Session-based — no re-prompting once logged in&lt;/li&gt;
&lt;li&gt;Guest mode — only manual bell visible, 
everything else locked behind overlay&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Logging&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every bell ring logged with date and time&lt;/li&gt;
&lt;li&gt;View, clear, or auto-clean logs older than 7 days&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Customisation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Institute name and logo in app header&lt;/li&gt;
&lt;li&gt;HTML-based header — edit with any text editor&lt;/li&gt;
&lt;li&gt;Supports h1 through h6, bold, paragraph tags&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  The Relay Control Code
&lt;/h2&gt;

&lt;p&gt;The core hardware interaction is surprisingly simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;hid&lt;/span&gt;

&lt;span class="n"&gt;VENDOR_ID&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x16c0&lt;/span&gt;
&lt;span class="n"&gt;PRODUCT_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x05df&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;relay_on&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;device&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;device&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;VENDOR_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PRODUCT_ID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_feature_report&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x01&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x01&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;relay_off&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;device&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;device&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;VENDOR_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PRODUCT_ID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_feature_report&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x01&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ring_bell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;relay_on&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;relay_off&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is it. Three functions. &lt;br&gt;
A ₹500 module. A school bell that now rings itself.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Smart Scheduler
&lt;/h2&gt;

&lt;p&gt;The most useful technical feature — when you start &lt;br&gt;
the app at 10 AM, it does not ring the 8:30 and &lt;br&gt;
9:30 bells that already passed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Pre-mark all past times as already triggered
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;time_value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;bell_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strptime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time_value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%H:%M&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;bell_time&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="n"&gt;triggered_today&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time_value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simple. But genuinely useful in real deployment.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deployment Results
&lt;/h2&gt;

&lt;p&gt;Deployed at an educational institution &lt;br&gt;
in Tamil Nadu, India.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10 bells automated per day&lt;/li&gt;
&lt;li&gt;Schedule: 08:00 AM to 03:00 PM&lt;/li&gt;
&lt;li&gt;System uptime: 07:00 AM to 04:00 PM&lt;/li&gt;
&lt;li&gt;Previously: fully manual&lt;/li&gt;
&lt;li&gt;Result: zero missed bells since deployment&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What I Learned Building This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Real problems make better software.&lt;/strong&gt;&lt;br&gt;
Every feature in this app came from watching &lt;br&gt;
a real problem happen in real life.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Simple hardware is powerful.&lt;/strong&gt;&lt;br&gt;
A $6 relay module + Python = full industrial &lt;br&gt;
bell automation. You do not need expensive &lt;br&gt;
proprietary systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Ship it.&lt;/strong&gt;&lt;br&gt;
I am a System Admin, not a professional developer.&lt;br&gt;
I built this anyway. It works. It is deployed.&lt;br&gt;
It is helping real people.&lt;br&gt;
That is enough.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get It Free
&lt;/h2&gt;

&lt;p&gt;Everything is open source under MIT License.&lt;br&gt;
Your name goes on nothing. My name stays on everything.&lt;br&gt;
That is the deal.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;GitHub:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/SaSiEzhilmani/SaSiE-BellSystem" rel="noopener noreferrer"&gt;https://github.com/SaSiEzhilmani/SaSiE-BellSystem&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If your school or institution is still ringing &lt;br&gt;
bells manually — this is for you.&lt;br&gt;
Any Windows PC. A $6 relay. Done.&lt;/p&gt;




&lt;h2&gt;
  
  
  Support
&lt;/h2&gt;

&lt;p&gt;If this helped you, a small contribution means a lot.&lt;/p&gt;

&lt;p&gt;💳 &lt;strong&gt;UPI:&lt;/strong&gt; sasie@scb&lt;br&gt;
📧 &lt;strong&gt;Email:&lt;/strong&gt; &lt;a href="mailto:sasiezhilmani@gmail.com"&gt;sasiezhilmani@gmail.com&lt;/a&gt;&lt;br&gt;
📞 &lt;strong&gt;Phone:&lt;/strong&gt; +91 9092 566 569&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with Python. Deployed in Tamil Nadu. &lt;br&gt;
Free for every school on earth.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;— சசி எழில்மணி (SaSi Ezhilmani / SaSiE)&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Tamil Nadu, India 🇮🇳&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Cite this work:&lt;/strong&gt;&lt;br&gt;
SaSi Ezhilmani (SaSiE). SaSiE Bell System.&lt;br&gt;
Zenodo. &lt;a href="https://doi.org/10.5281/zenodo.19972626" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.19972626&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>automation</category>
      <category>hardware</category>
    </item>
  </channel>
</rss>
