ebusd Schlüsselanhänger mit ESP8266

Begonnen von frenchie71, 28 März 2016, 11:32:43

Vorheriges Thema - Nächstes Thema

frenchie71

Habe hier gestern ein kleines Projekt realisiert mit dem ESP8266 (Wifi Modul, Daumennagel-groß, ab 3 EUR in der Bucht), mit Hilfe dessen sich z.B. ein Schlüsselanhänger bauen läßt, der auf Knopfdruck mit LED-Blinken die Warmwassertemperatur anzeigt :



// Sketch für ESP8266 WIFI Board
// Verbindet zum WLAN-Access-Point (blaue LED leuchtet ständig)
// Nach Verbindung erlischt LED
// Verbindet sich zum eBus Dämon (DEINEBUSSERVER auf Port 8888)
// Fragt die Boilertemperatur ab (betrd boilertemp => kann je nach Kessel anders sein, gestestet mit Wolf COB20)
// und blinkt je nach Temperatur - 10-19°C - 1 mal, 20-29°C 2mal, 30-39°C - 3mal usw...
// Versuchsaufbau mit ESP8266 und 3 V Batterie, Taster zum Einschalten.


#include <ESP8266WiFi.h>

#undef SERIAL

/* ANPASSEN !!! */

const char* ssid1     = "SSID1";
const char* ssid2     = "SSID2";
const char* password = "T0p$€cr€tp4$$w0rd";
const int MaxTime = 3000;
char server[] = "DEINEBUSSERVER";

WiFiClient client;

unsigned long lastConnectionTime = 0;            // last time you connected to the server, in milliseconds
const unsigned long postingInterval = 10L * 1000L; // delay between updates, in milliseconds

void setup() {

#ifdef SERIAL
  Serial.begin(115200);
  delay(10);
#else
  pinMode(LED_BUILTIN, OUTPUT);     // Initialize the LED_BUILTIN pin as an output
  digitalWrite(LED_BUILTIN, LOW);   // Turn the LED on (Note that LOW is the voltage level
#endif

  int TimeElapsed =0;
   
  WiFi.begin(ssid1, password);

  while  ( (WiFi.status() != WL_CONNECTED) && (TimeElapsed < MaxTime) ) {
    delay(500);
    TimeElapsed += 500;
#ifdef SERIAL
    Serial.print(".");
#endif
  }

  TimeElapsed =0;
  if  (WiFi.status() != WL_CONNECTED)
  {
     WiFi.begin(ssid2, password);
     while  ( (WiFi.status() != WL_CONNECTED) && (TimeElapsed < MaxTime) ) {
       delay(500);
       TimeElapsed += 500;
    #ifdef SERIAL
       Serial.print(".");
    #endif
    }
  }

#ifdef SERIAL
  Serial.println("");
  Serial.println("WiFi connected"); 
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
#else
  digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH
  delay(500);                      // Wait for two seconds (to demonstrate the active low LED)
#endif
}

void ebusConnect() {
  // close any connection before send a new request.
  // This will free the socket on the WiFi shield
  client.stop();

  // if there's a successful connection:
  if (client.connect(server, 8888)) {
#ifdef SERIAL
    Serial.println("connecting...");
#endif
    // send the HTTP PUT request:
    client.println("");
    client.println("read betrd boilertemp");

    // note the time that the connection was made:
    lastConnectionTime = millis();
  } else {
    // if you couldn't make a connection:
#ifdef SERIAL
    Serial.println("connection failed");
#endif
  }
}

void loop() {
  // if there's incoming data from the net connection.
  // send it out the serial port.  This is for debugging
  // purposes only:
/* 
while (client.available()) {
    char c = client.read();
    Serial.write(c);
  }
*/
while(client.available()){
     String line = client.readStringUntil('\r');
     //Serial.print(line);

     float f = line.toFloat();
     if ( ( f>1 ) && (f<100) )
     {
        int i = int(f / 10);
        for (int j=0; j<i ; j++)
        {
#ifdef SERIAL
          Serial.print ("X");
#else
          digitalWrite(LED_BUILTIN, LOW);   // Turn the LED on (Note that LOW is the voltage level
          delay(200);                      // Wait for a second
          digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH
          delay(500);                      // Wait for two seconds (to demonstrate the active low LED)
#endif

        }
#ifdef SERIAL
        Serial.println("");
#endif
}   
     



   }

  // if ten seconds have passed since your last connection,
  // then connect again and send data:
  if (millis() - lastConnectionTime > postingInterval) {
    ebusConnect();
  }

}




MadMax-FHEM

Hi,

nette Idee!

Spiele auch schon einige Zeit mit dem ESP8266 rum...

...super was man für das Geld und der Größe bekommt.

Aber das mit dem Schlüsselanhänger wird so nicht funktionieren: Batteriebetrieb!

Ich sehe kein Power-Save Modus etc. (oder ich bin zu blind) und selbst mit (habe ich bereits getestet) halten Batterien nicht wirklich lange:

komme aktuell bei alle 10min für ca. 4-8sec wach (messen, bei mir Tankfüllstand und senden) auf ca. 1Monat...
...allerdings mit DeepSleep dazwischen bzw. schalte ich das ganze mit einem ATtiny, welcher meist im DeepSleep ist, direkt an der Batterie hängt und somit die ganzen StepUp/Down-Module etc. die (evtl.) noch nötig sind und die Sensoren etc. auch mit schlafen zu legen...

Wenn du eine Lösung für Batteriebetrieb hast: BITTE MITTEILEN!!!! DANKE!

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

frenchie71

#2
Hallo Joachim. Ja, sehr gut beobachtet - Batterielebensdauer ist ein Problem. Ich hatte das zunächst mal ganz naiv mit einer CR 2032 Zelle getestet, die war natürlich im Nu leer. Momentan läuft das ganze mit 2 AA Zellen und wird nur bei Bedarf mit einem Taster eingechaltet. Du musst also so lange auf dem Taster bleiben, bis die Init-Sequenz vorbei ist.

Ich habe (noch) keine Lösung für das Energie-Problem - meine versteckte Hoffnung war eigentlich, durch das Starten der Diskussion Hinweise und Erfahrungen anderer Benutzer zu erhalten.

LG
Marc

PS : Einschalten mit einem ATTiny ist ne coole Idee ;-)
PPS : Tankfüllstand abfragen ist Auch cool.

=> poste doch bitte mal Deine Sketche !

MadMax-FHEM

Hi Marc,

kein schlechter Gedanke!

Prinzipiell...

Aber ich musste leider fesstellen, dass die meisten Threads hier (zumindest die ich bislang finden konnte) sich nicht wirklich um Stromsparen/Batteriebetrieb kümmern...

Hier die wo ich schon unterwegs war:


https://forum.fhem.de/index.php/topic,50388.0.html



https://forum.fhem.de/index.php/topic,46205.msg416402.html#msg416402


Aber es gibt glaube ich mittlerweile auch ein eigenes ESP8266 Unterforum...

Allerdings habe ich schon so einiges versucht Strom zu sparen aber für meine Anwendung "Tankfüllstand für Balkonwassertank" mit Mindestlaufzeit 8Monate und ca. alle halbe Stunde/Stunde den Wasserstand komme ich wohl mit dem ESP nicht weiter.

Gut es gibt noch Möglichkeiten: statt 2AA 4AA oder LiIonAccu oder oder aber wenn der ESP an ist, braucht er halt schon ne Menge Saft ca. 500mA und das ist dann sehr viel für Batteriebetrieb, auch wenn er nur alle paar Minuten ein paar Sekunden läuft.

Evtl. für deine Anwendung ab und an mal (so 1-2-3-4 mal am Tag?) kurz aufwecken könnten 2AA schon ein Weilchen halten...

Viel Erfolg!

Aber ich werde jetzt erst mal in Richtung mySensors schauen...
...aber den ESP hab ich noch nicht ganz aufgegeben, macht einfach zu viel Spaß der kleine Käfer ;-)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)