Smart geyser automation with a timer in India is one of the highest-ROI home automation projects you can build. A standard 15-litre 2kW storage geyser running 2 hours daily costs approximately Rs 3,600/year at MSEDCL rates. Automating it with ESP8266, a timer, and a temperature sensor reduces that to 45-60 minutes of actual heating, cutting your geyser electricity bill by 50-60% and paying back the Rs 500 project cost in under two months.
Table of Contents
- Energy and Cost Analysis for Indian Geysers
- Hardware: SSR, Temperature Sensor, and ESP8266
- Circuit and Safety Wiring for 230V 2kW Load
- ESP8266 Firmware: Timer + Temperature Control
- IST-Aware Schedules and Holiday Modes
- App Integration: Blynk, Home Assistant, and Alexa
- Safety Features: Overheat Protection and Dry Run Prevention
- Frequently Asked Questions
Energy and Cost Analysis for Indian Geysers
Most Indian homes have 15-25 litre storage geysers (Racold, Bajaj, AO Smith, Havells) rated 2kW. Without automation:
- Average usage pattern: switch on 30-45 min before bath, but family forgets to switch off
- Actual running time: 2-3 hours/day (Rs 9.60-14.40/day at Rs 4.80/unit BESCOM rate)
- Annual cost: Rs 3,500-5,200/year just for the geyser
With smart timer automation (heat to 60 degrees C, maintain with 5-minute cycles):
- Initial heat-up from 20 degrees C to 60 degrees C in a 15L geyser: ~30 minutes (1 kWh)
- Standby/maintain for 1 hour at 60 degrees C: ~10-15 minutes per hour (0.17-0.25 kWh)
- Annual savings: Rs 1,800-2,600/year
Recommended: UNO WiFi R3 (ATmega328P + ESP8266)
The UNO WiFi R3 with built-in ESP8266 is the perfect geyser controller brain. It handles NTC temperature sensor readings, SSR control, WiFi connectivity, and MQTT reporting all on one board.
Hardware: SSR, Temperature Sensor, and ESP8266
Components (India prices 2025):
- SSR-40DA Solid State Relay: Rs 280-350 – rated 40A 380V AC, handles 2kW geyser easily (SSR preferred over mechanical relay for silent, spark-free operation on high-current AC loads)
- NTC 10k thermistor with waterproof probe: Rs 80 – epoxy-sealed probe fits in geyser thermostat well or inlet pipe
- DS18B20 waterproof temperature sensor: Rs 120 – more accurate than NTC, single-wire digital interface
- HLK-PM03 (230V to 3.3V): Rs 140 – powers ESP8266 directly from mains with isolation
- ESP-12E module: Rs 180
Circuit and Safety Wiring for 230V 2kW Load
WARNING: 2kW at 230V draws ~8.7A. Ensure all wiring uses 2.5 sq mm wire rated for 16A minimum. Use a 10A MCB upstream.
Mains 230V Live -> 10A MCB -> SSR-40DA Input+ (3-32VDC)
Geyser element -> SSR-40DA Output (AC Load side)
Neutral -> SSR Output neutral
ESP8266 GPIO5 -> SSR Control Input+ (via 330ohm)
GND -> SSR Control Input-
DS18B20 (in geyser dip tube or pipe):
VCC -> 3.3V
GND -> GND
Data -> GPIO4 (with 4.7kohm pullup to 3.3V)
Mount the SSR on an aluminium heatsink (100mm x 60mm minimum). At 40A rated current with 8.7A load, the SSR dissipates approximately 4-5W as heat.
ESP8266 Firmware: Timer + Temperature Control
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <TimeLib.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#define SSR_PIN 5 // GPIO5 = D1
#define ONE_WIRE_BUS 4 // GPIO4 = D2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float targetTemp = 60.0; // degrees C
float hysteresis = 2.0; // ON below (target - hysteresis)
bool geyserOverride = false;
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "in.pool.ntp.org", 19800, 3600); // UTC+5:30 IST
void controlGeyser() {
sensors.requestTemperatures();
float temp = sensors.getTempCByIndex(0);
// Overheat protection
if (temp >= 70.0) {
digitalWrite(SSR_PIN, LOW); // FORCE OFF above 70C
return;
}
if (!geyserOverride) {
// Temperature-based control
if (temp < (targetTemp - hysteresis)) digitalWrite(SSR_PIN, HIGH);
else if (temp >= targetTemp) digitalWrite(SSR_PIN, LOW);
}
// Publish status via MQTT
char buf[64];
snprintf(buf, sizeof(buf), "{"temp":%.1f,"state":%d}", temp, digitalRead(SSR_PIN));
mqttClient.publish("home/geyser/status", buf);
}
Recommended: Mega WiFi R3 (ATmega2560 + ESP8266)
Expand your smart geyser project into a full bathroom automation hub with the Mega WiFi R3. Add bathroom exhaust fan automation, LED night light control, and occupancy detection alongside geyser control.
IST-Aware Schedules and Holiday Modes
// Get current IST time from NTP
timeClient.update();
int hour = timeClient.getHours();
int minute = timeClient.getMinutes();
int weekday = timeClient.getDay(); // 0=Sunday, 6=Saturday
// Weekday schedule (Monday-Friday)
bool isWeekday = (weekday >= 1 && weekday <= 5);
bool morningSlot = (hour == 6 && minute >= 15) || (hour == 7 && minute < 15); // 6:15-7:15 AM
bool eveningSlot = (hour == 18 && minute >= 30) || (hour == 19 && minute < 30); // 6:30-7:30 PM
// Weekend: allow extra 30 minutes
bool isWeekend = (weekday == 0 || weekday == 6);
bool weekendMorning = (hour >= 7 && hour < 9); // 7:00-9:00 AM
bool scheduleActive = (isWeekday && (morningSlot || eveningSlot)) ||
(isWeekend && weekendMorning);
if (!geyserOverride) {
if (!scheduleActive) digitalWrite(SSR_PIN, LOW); // Off outside schedule
}
Add MQTT topics for holiday mode (home/geyser/mode: holiday = always OFF, home = schedule, manual = override), so a single Alexa/Home Assistant command switches modes when you travel.
App Integration: Blynk, Home Assistant, and Alexa
Home Assistant MQTT sensor and switch configuration:
# configuration.yaml
mqtt:
sensor:
- name: Geyser Temperature
state_topic: home/geyser/status
value_template: "{{ value_json.temp }}"
unit_of_measurement: "C"
switch:
- name: Geyser
command_topic: home/geyser/override
payload_on: "ON"
payload_off: "OFF"
state_topic: home/geyser/status
value_template: "{{ 'ON' if value_json.state == 1 else 'OFF' }}"
With Alexa via Home Assistant Cloud (Nabu Casa): “Alexa, turn on geyser” triggers the MQTT override for 45 minutes, then auto-reverts to schedule mode.
Safety Features: Overheat Protection and Dry Run Prevention
- Overheat cutoff: Firmware cuts SSR at 70 degrees C (geyser thermostat typically trips at 60-65 degrees C, but thermostat failure is possible). Hardware backup: install a thermal fuse (Rs 15) rated 85 degrees C in series with the SSR.
- Dry run protection: If temperature sensor reads maximum ADC value (open circuit) or drops below ambient (shorted), immediately disable SSR and send MQTT alert.
- MQTT watchdog: If ESP8266 loses MQTT connection for >10 minutes, reboot via watchdog timer. This prevents stuck-ON state due to software crash.
- Earth leakage: Ensure the geyser circuit has an ELCB/RCCB (Residual Current Circuit Breaker) rated 30mA. Standard in new Indian electrical installations per IS 3043 but often missing in older homes.
Recommended: 12V 1-Channel Relay Module (RS485/Modbus)
For homes needing multiple controlled loads (geyser + washing machine + AC pre-cooling), this relay module adds additional switching channels to your geyser automation system with proper optocoupler isolation.
Frequently Asked Questions
- Can I use this with an instant (tankless) geyser?
- No. Instant geysers (3kW-4.5kW) have flow-activated switches and cannot be controlled by simply switching the power. Use smart scheduling only for storage geysers (15L, 25L, 35L). For instant geysers, smart home integration requires flow sensor triggering logic.
- Will SSR be damaged by the geyser heating element?
- No, if correctly rated. A 15L 2kW geyser draws 8.7A at 230V. The SSR-40DA (40A rated) runs cool at this load. Ensure adequate heatsinking and do not confine the SSR in an unventilated enclosure.
- How do I handle multiple geysers (master bathroom + guest bathroom)?
- Use two separate SSRs controlled from the same ESP8266 on GPIO5 and GPIO12. Set staggered schedules to prevent simultaneous high-current draw from the same phase of your home distribution board.
- Can I control this via SMS when internet is down?
- Yes, replace ESP8266 WiFi with a SIM800L GSM module (Rs 280). Parse incoming SMS commands (ON/OFF/STATUS) via AT commands. This is useful as a backup for rural Indian areas with unreliable broadband.
- Does IST NTP sync work reliably in India?
- Yes. Use
in.pool.ntp.org(Indian NTP pool servers) with UTC offset +19800 seconds (+5:30). BSNL and Jio typically have excellent NTP connectivity. Store last-sync time in EEPROM in case of extended internet outages.
Add comment