smarthome-tricks.de

ioBroker ESP8266 Button

In diesem Artikel zeige ich Dir, wie ich für ioBroker eine Button-Schaltung realisiert habe, mit der ich beliebige Aktoren ein- bzw. ausschalten kann. Nach den ersten Versuchen mit den Amazon Dash Buttons dachte ich mir, eine solche Funktionalität kann man doch auch relativ einfach über den ESP8266-Mikrocontroller sowie die ioBroker Middleware abbilden und damit viel einfacher in das eigene Smart-Home integrieren.

Nach langen Überlegungen habe ich mich für folgendes Design entschieden:

Der ESP8266 (ESP-01) wird per DeepSleep Funktion in den Ruhezustand versetzt. Nach dem der Button gedrückt wurde, wird der ESP8266 aufgeweckt und setzt einen HTTP Request an der ioBroker Simple.API Schnittstelle ab, bei dem via toggle der definierte Datenpunkt getoggelt (State getauscht wird). Somit haben wir die Grundschaltung für einen einfachen Button, mit dem wir beliebige Aktoren oder andere Skripte mit steuern können (einschalten -> ausschalten -> einschalten …)

Im ersten Schritt hier die Liste der benötigten Materialien:

Weitere Kleinteile:

Vorbereitungen in ioBroker

Im ersten Schritt schaffen wir die Voraussetzungen in ioBroker. Dazu wechseln wir auf den Bereich „Objekte“ und erstellen uns für den Button einen eigenen Datenpunkt. Ich nutze dazu in meinen eigenen Datenpunkten „Datenpunkte.0“ den Bereich Sensordata. Hier habe ich für den Button „ButtonA“ das ActiveState als logischen State angelegt.

Für den ersten Aufruf müssen wir dem Datenpunkt ActiveState zudem als Wert „false“ mitgeben, ansonsten funktioniert der toggle nicht.

http://192.168.2.90:8087/toggle/Datenpunkte.0.Sensordata.ButtonA.ActiveState

Aufbau der Schaltung

Da war die Schaltung mit einer 18650 Batterie betreiben möchten, benötigen wir einen Spannungsregler, mit dem wir die Spannung auf 3,3V regulieren können.

Sketch

#include <ESP8266WiFi.h>
#include "user_interface.h"

const char* ssid = "WLAN_SSID";
const char* password = "WLAN_PWD";

void setup()
{
  initWifi();

  struct rst_info *rtc_info = system_get_rst_info();
  int reason=rtc_info->reason;

  if ( reason == REASON_DEEP_SLEEP_AWAKE )
  {
    makeSimpleApiRequest();
  }

  ESP.deepSleep(0);
}

void loop() { }

void initWifi()
{
  WiFi.begin(ssid, password);

  int timeout = 10 * 4;
  while(WiFi.status() != WL_CONNECTED && (timeout-- > 0))
  {
    delay(250);
  }
}

void makeSimpleApiRequest()
{
  String host = "192.168.2.90";
  int Port = 8087;

  WiFiClient client;
  if (client.connect(host, Port))
  {
    // URL die aufgerufen werden soll generieren
    String url = "/toggle/Datenpunkte.0.Sensordata.ButtonA.ActiveState";

    client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
    delay(10);

    while(client.available())
    {
      String line = client.readStringUntil('\r');
    }
  }
}

Im Sketch verbinden wir uns zunächst in der Setup-Methode mit unserem WLAN. Im nächsten Schritt wird geprüft ob der Bootup aus dem DeepSleep oder dem normalen Systemstart erfolgt. Der SimpleAPI-Request soll nur erfolgen, wenn der ESP aus dem DeepSleep aufwacht. In der makeSimpleApiRequest() Methode wird der Datenpunkt „getoggelt“ und somit der Status getauscht. Im Anschluss wird wieder der DeepSleep(0) ausgeführt.

Ich hoffe Dir gefällt dieser Artikel. Über Kommentare unterhalb des Artikels oder per E-Mail freue ich mich wie immer 🙂

Die mobile Version verlassen