Forum: Haus & Smart Home ESP8266 Klingel MQTT - Batterie dauernd alle


von Hans-Dieter M. (Firma: Privat) (spitfire4all)



Lesenswert?

Hi,

ich bin Microcontroller Neuling und habe diese Schaltung ESP Klingel 
hier nachgebaut, Anbindung an Fritzbox und MQTT:

https://www.reichelt.de/magazin/how-to/smarte-tuerklingel/

oder in etwas wie hier:

https://github.com/tIsGoud/Doorbell-via-Wemos-and-optocoupler/blob/master/README.md

Die Spannungsversorgung des D1 macht eine 3,6 Volt Batterie.

Die Klingel macht das was Sie soll, leider geht der D1 irgendwie nicht 
in den deep sleep und meine Batterie ist nach kurzer Zeit leer.
Habe den D1 schon ausgetauscht und auch mit der Original Firmware 
geflasht.

Ich habe versucht mein Messgerät zwichen die Batterie und dem D1 zu 
hängen, leider sind die Messergebnisse irgendwie alle mist, eventuell 
mache ich da etwas falsch, ist schon eine weile her das ich mich mit 
Elektronik beschäfftigt habe.

Wie messe ich den Srom richtig und was muss ich dabei beachten ?
Warum geht der D! nicht in den deep sleep ?

Gruß
HDM

Hier einmal der Sketch den ich verwendet habe:

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <tr064.h>
#include <WiFiClient.h>

const char WIFI_SSID[] = "";   // <-- ändern
const char WIFI_PASSWORD[] = ""; // <-- ändern
const char USER[] = ""; // <-- Fritzbox User
const char PASSWORD[] = ""; // Fritzbox User Kennwort <-- ändern
const char FRITZBOX_IP[] = "";
const int FRITZBOX_PORT = 49000;
const char* IOBROKER = ""; // <-- ändern auf ioBroker-IP
const int IOBROKER_PORT = 8087;
String IOBROKER_DP = "/set/javascript.0.ESP_Klingel?value=";
int KLINGELDAUER = 10;                                // wieviel 
Sekunden sollen die Telefone klingeln

TR064 tr064_connection(FRITZBOX_PORT, FRITZBOX_IP, USER, PASSWORD);

const IPAddress STATIC_IP(192, 168, 168, 140);
const IPAddress GATEWAY(192, 168, 168, 1);
const IPAddress SUBNET(255, 255, 255, 0);
const IPAddress DNS(GATEWAY);

const char DEVICE_NAME[] = "ESP-Klingel";

void setup() {
  WiFi.hostname(DEVICE_NAME);
  WiFi.config(STATIC_IP, SUBNET, GATEWAY, DNS);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  WiFi.mode(WIFI_STA);

  while (WiFi.status() != WL_CONNECTED) {
   delay(50);
  }

  tr064_connection.init();

  String tr064_service = "urn:dslforum-org:service:X_VoIP:1";

  // Die Telefonnummer **9 ist der Fritzbox-Rundruf.
  String call_params[][2] = {{"NewX_AVM-DE_PhoneNumber", "**612"}};
  tr064_connection.action(tr064_service, "X_AVM-DE_DialNumber", 
call_params, 1);

   //ioB-Part Datenpunkt per Simple-API setzen##############
   // Use WiFiClient class to create TCP connections
      WiFiClient client;
      if (!client.connect(IOBROKER, IOBROKER_PORT)) {
         Serial.println("connection failed");
      return;
      }
  client.print(String("GET ") + IOBROKER_DP + "true HTTP/1.1\r\n" +
               "Host: " + IOBROKER + "\r\n" +
               "Connection: close\r\n\r\n");

  client.stop();
  //#######################################################

  // Warte x Sekunden bis zum auflegen
  delay(KLINGELDAUER*1000);
  tr064_connection.action(tr064_service, "X_AVM-DE_DialHangup");

  //ioB-DP löschen
  client.connect(IOBROKER, IOBROKER_PORT);
  if (!client.connect(IOBROKER, IOBROKER_PORT)) {
     Serial.println("connection failed");
  return;
  }
  client.print(String("GET ") + IOBROKER_DP + "false HTTP/1.1\r\n" +
           "Host: " + IOBROKER + "\r\n" +
           "Connection: close\r\n" +
           "\r\n"
          );
  client.stop();

  ESP.deepSleep(0);
}

void loop() {}

von Plaste-Router (Gast)


Lesenswert?

> void loop() {}

Da würde ich auch ein ESP.deepSleep(0); reinsetzen.

Warum? Wenn du oben einmal per "Connection failed" aus der Setup 
springst, läuft die Loop bis die Batterie leer ist.

Ansonsten: Ruhestromaufnahme von deinem ESP-Modul gemessen? Ist da eine 
LED oder ein Linearregler mit 5mA Iq drauf?

von Andre K. (andre1980)


Lesenswert?

Damit der DeepSleep Fehlerfrei funktioniert wird ein delay(100); danach 
empfohlen. Irgendwie braucht der ESP das.

Der D1 Mini ansich verbraucht sehr viel Ruhestrom durch den nicht 
optimalen verbauten Spannungsregler und der USB-UART Wandeler. 
Hardwareanpassung hilft da Strom zu sparen.

Sehr empfehlenswerte Seite in Sachen ESP8266:
http://stefanfrings.de/esp8266/index.html#deepsleep

: Bearbeitet durch User
von Hans-Dieter M. (Firma: Privat) (spitfire4all)


Lesenswert?

Hi,

Danke euch beiden für die Antwort.

Ich werde eure Tippsin den nächsten Tagen einmal umsetzten und dann 
berichten ob es funktioniert.

Gruß
HDM

von Hans-Dieter M. (Firma: Privat) (spitfire4all)


Lesenswert?

Noch einmal Danke für die Hilfe, die Klingel funktioniert jetzt.
Noch einmal vielen Dank.

von Chris (Gast)


Lesenswert?

Hallo,
wie sollte jetzt das komplette Programm aussehen?
Das obrige Skript ist ja noch nicht angepasst, oder ?
Danke
CU

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.