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,…).

Das alles wird an die Klingel in der Wohnung angeschlossen.

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“.

linkes Blech DING, rechtes Blech 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 😉

oben der Klingelknopf der Funk-Klingel

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.

Das war dieses Projekt

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.

Einmal-E-Zigaretten – liegen auf Festivals oder Straßenrändern einfach am Boden….

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.

ESP8266 Entwicklerboard (ESP-Chip + USB-Serial Converter + Lötfrei nutzbare GPIO Pins)

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.

irgendwie so sah das zu dem Zeitpunkt aus

 

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.

da kann man einen nackten ESP aufstecken – die nötige Beschaltung zum Betrieb und Programmieren ist dann gegeben

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.

Irgendwann wurde manuell gesteckt…

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!

meine Klingel sieht jetzt aus wie eine Bombe ;D

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.

die Datenblätter lügen nicht – die ca. 25µA stimmen

 

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.

Es kommt an!

Dann lässt sich daraus einfach eine Automation basteln:

***So könnte Ihre Automation aussehen!***

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

sieht im Schaltplan gar nicht so wild aus wie in echt 😉

 

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.
}

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.