Worum geht’s hier? In Teil 1 beschreibe ich, wie ich meine Retro-Klingel mit einer Funkklingel erweitert habe. In Teil 2 geht’s dann darum, dass ich einen ESP-Microcontroller mit einem E-Zigaretten-Akku versorge und diesen mit an die Klingel hänge. Somit bekommt mein SmartHome mit, wenn es geklingelt hat und ich kann Automationen damit auslösen (z.B. Lichter blinken lassen, Benachrichtigung auf Handy,…).

Teil 1: Retro-Klingel mit Funk-Klingel erweitern
Die Klingel bei mir zu Hause ist einfacher geht’s nicht: Der Klingelknopf an der Haustür schließt den Kontakt, die Spule bei mir in der Wohnung bekommt eine Spannung und zieht den Metallbolzen entgegen der Feder nach links „DING“ und sobald die Klingeltaste wieder losgelassen wird, drückt die Feder den Bolzen nach rechts „DONG“.

Das heißt es klingelt einmal. Egal wie lange die Person den Klingelknopf betätigt. Das habe ich natürlich im Arbeitszimmer (wenn dann noch Musik läuft) oft nicht gehört.
Anforderungen an die Änderung:
- Möglichst günstig
- Originale Klingel darf nicht / nur minimal verändert werden (Mietwohnung)
- Kein extra Stromanschluss
Glücklicherweise hatte ich noch eine Funk-Klingel rumliegen, warum also nicht diese dafür missbrauchen. Also schnell ein Relais an den Klingelknopf angelötet und die Spule des Relais parallel an die Spule der Klingel.
Am Ende gibts nen Schaltplan mit allen Teilen 😉

Erster Test: Relais goes brrrrrrrrr. Oh, na dann ist das wohl Wechselspannung, was da von der Klingel kommt. Also noch schnell aus einer Diode und einem Kondensator den simpelsten aller Gleichrichter gelötet und vor das Relais gehangen.
Soweit meine Teil 1 Bastelei im Jahr 2022.
Teil 2.1: Blinkende Lichter wären cool
Ich hatte jetzt also auch eine Klingel im Arbeitszimmer. Das half aber nichts gegen laute Musik. Manchmal höre ich die Klingel trotzdem nicht. Da ich mittlerweile mein komplettes SmartHome über Home Assistant (HA) steuere, wäre es ein Leichtes einfach mal alle Lampen blinken zu lassen, wenn es geklingelt hat.
Das Problem dabei: wie teile ich meinem HA mit, dass es geklingelt hat. Bei meinem PV-Verbrauchsanzeige-Ding habe ich schon gelernt, dass der ESP8266 (ein Microcontroller mit WiFi) einen extrem energiesparenden Tiefschlaf hat. Wenn er denn ohne das USB-Programmierboard läuft. Wie ich das gelernt habe, könnt ihr in dem Verbrauchsanzeige-Bastelblog lesen.

Die Anforderung: kein extra Stromanschluss gilt nach wie vor, es muss also eine Akkulösung sein. Nach Möglichkeit aus einem 350mAh Wegwerf-Vape Akku, den ich am Straßenrand aufgesammelt habe.

Um zu testen, ob meine Idee einfach eine MQTT-Nachricht vom ESP an den HA zu schicken, programmierte ich mir schnell einen ESP auf einem Entwicklerboard, während ich auf meine bestellten „nackten“ ESP8266 (bzw. ESP12F) wartete. Den kompletten Code gibt es am Ende des Blogeintrags.

MQTT-Test auf dem Entwicklerboard erfolgreich. Also jetzt nur noch ein paar Widerstände zur Beschaltung des ESP und die Spannungsversorgung aus einem LiPo löten.
Die benötigte Beschaltung findet man im Datenblatt oder hier oder hier oder jeder KI der Wahl.
Wir sind im April 2025. Da habe ich das versucht. Und bin daran gescheitert, dass ich es nicht geschafft habe den ESP zu programmieren. Aufgrund von anderen Interessen, sprich Sport 👀 habe ich das dann erstmal gelassen.

Teil 2.2 – Jetzt aber wirklich
Ziemlich genau ein Jahr lag das Projekt jetzt rum. „Dank“ der Knie-OP hatte ich im April/Mai 2026 Zeit hier mal weiterzumachen. Ich kramte meinen alten ESP aus und versuchte es nochmal mit dem USB-Serial-Adapter anlöten. Es klappte nicht. Ich kaufte mir ein Programmierboard, wo man den nackten ESP einsteckt, programmiert und dann in seine Schaltung verbauen kann.

Durch wildes Drücken der Reset und Programmiertaste (nicht wie eigentlich gedacht), schaffte ich es, den ESP irgendwann in den Programmier-Bootmodus zu bekommen. Jetzt wieder zurück auf mein Board löten. Er will nicht booten. Mittlerweile hatte ich wieder mehr gelernt und konnte mir zumindest durch anlöten von RX und TX das Boot-Log des ESP ansehen (Baudrate 74880, dann kommt etwas wie […] boot mode:(3,6) die Zahlen sind ein binärcode ob die PINs richtig beschalten sind und welcher Bootmodus ausgewählt wird) und habe so gesehen, dass er mit der PIN-Belegung nicht glücklich ist und daher nicht von seinem eigenen Speicher bootet. Auch mit vielen manuellen Brücken, auf ein Entwicklerboard stecken, etc. habe ich es nicht geschafft, dass er ordentlich bootet.

Nach Stunden habe ich beschlossen, dass die Möglichkeit besteht, dass nicht ich zu doof bin, sondern der ESP einfach kaputt ist. Ich habe einen anderen probiert. Erster Versuch: klappt. AAAH. Und plötzlich funktioniert der Programmier-Button auf dem Programmierboard auch einwandfrei… Naja, immerhin Problem gelöst.
Also die Platine nochmal „sauber“ gelötet und alles mal an die Klingel angeschlossen. Erster Versuch: Es geht!

Und beim Nachmessen zeigen sich auch die ca. 25µA, die der ESP im Tiefschlaf nimmt. Rein rechnerisch komme ich so mit 300mAh nutzbarer Kapazität auf ca. 1,3 Jahre, realistisch dürfte also schon ein Jahr drin sein.

Teil 3 – MQTT in HomeAssistant abfangen und meine Automation
Das ist der einfachste Teil. Über Einstellungen –> Geräte und Dienste –> MQTT kann man in dem man auf das Zahnrad ⚙️ klickt ein Topic abonnieren und gucken, ob es ankommt.

Dann lässt sich daraus einfach eine Automation basteln:

Die Payload ist hier egal – in meinem Code sind payload und topic identisch.
Teil 4 – Mögliche Verbesserungen
Schneller
Wie ich jetzt gelernt habe, kann man die Bootgeschwindigkeit aus dem Tiefschlaf deutlich erhöhen, indem man eine statische IP und den WiFi-Kanal im Speicher des ESP fix speichert, somit würde es nicht ein paar Sekunden dauern, bis der ESP sich mit dem WiFi verbunden hat (ca. 5 Sek. bei mir).
Geht wohl mit (habe ich noch nie probiert):
WiFi.config(ip, gateway, subnet); //DHCP Zeit sparen
uint8_t bssid[6] = {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}; //BSSID als Array
WiFi.begin("YourWiFi", "YourPassword", 5, bssid); //5 ist der verwendete Channel
Akkustand einbringen
Es wäre noch ganz praktisch, wenn ich wüsste, wann der Akku der Klingel so langsam leer ist. Da könnte ich die Überwachung eigentlich so anlöten, wie schon im PV-Anzeige-Projekt und dann den Akkustand als z.B. Payload in die MQTT Nachricht packen.
Schaltbild

Vollständiger Code
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// WLAN-Konfiguration
const char* ssid = "YOUR_SSID";
const char* password = "PASSWORD";
// MQTT-Broker-Konfiguration
const char* mqtt_server = "IP-Adresse";
const char* mqtt_user = "USERNAME";
const char* mqtt_password = "PASSWORD";
const char* mqtt_topic = "klingel";
// MQTT-Client
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
// Serienmonitor starten
Serial.begin(115200);
// Mit WLAN verbinden
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("\nVerbunden mit WLAN. IP: ");
Serial.println(WiFi.localIP());
// MQTT-Server konfigurieren
client.setServer(mqtt_server, 1883);
// Mit MQTT-Broker verbinden
while (!client.connected()) {
Serial.print("Verbinde mit MQTT...");
if (client.connect("ESP8266Client", mqtt_user, mqtt_password)) {
Serial.println("verbunden!");
} else {
Serial.print("fehlgeschlagen, rc=");
Serial.print(client.state());
Serial.println(" in 5 Sekunden erneut versuchen...");
delay(5000);
}
}
// Nachricht senden
delay(100);
client.publish(mqtt_topic, "klingel");
Serial.println("Nachricht gesendet");
delay(100);
// In den Tiefschlaf wechseln
Serial.println("Wechsel in den Tiefschlaf...");
ESP.deepSleep(0); // Unbegrenzter Tiefschlaf
}
void loop() {
// Der Loop bleibt leer, da der ESP in den Tiefschlaf wechselt.
}
