HowTo: Node Red / Tasmota – Eine Facebook(*)-Icon-Lampe bauen

Nachdem ich vor kurzem einen Weg gefunden habe Benachrichtigungen von meinem Handy an mein SmartHome weiterzuleiten habe ich mir nun ein paar Möglichkeiten überlegt wie man dies möglich “sinnvoll” einsetzen kann. Zuerst hatte ich mit verschiedenen Blinkmustern der Lampen in meinem SmartHome experimentiert.

Blinkt meine Mini-Lichterkette also drei Mal ist dies ein Hinweis auf eine neue Whatsapp-Nachricht. Blinkt sie dagegen vier Mal habe ich eine neue Facebook(*) Benachrichtigung. Fünf Mal blinken bedeutet eine neue Instagram-Benachrichtigung, sechs Mal eine neue bei Twitter, sieben mal Pinterest. usw…

Ihr merkt selber: Das wird ganz schön chaotisch.
Zum ersten ist dieses System nicht sehr intuitiv. Man muss genau wissen welche Benachrichtigung hinter welcher Anzahl von Lichtimpulsen steckt. Außerdem muss man jedes Mal direkt mitzähen um das blinken der Lampe der korrekten Benachrichtigung zuzuordnen. Also wenig praktikabel das ganze.

Es musste also einen anderen Weg geben, eindeutig und für jeden Erkennbar über die jeweiligen Ereignisse Benachrichtigen zu können. Warum dazu nicht einfach die für jederfrau und -mann bekannten Icons benutzen?

Und da war er: der “ich falle vom Klo und habe die Vision vom Flux-Kompensator”-Moment (siehe https://www.youtube.com/watch?v=Or7P9jfhcZ0).

Als erstgeborene der “Icon-Lampen” entstand – nach einer kurzen 3D-Design-CAD-Session – die Facebook-Icon-SmartHome-Lampe. (Und die Instagram– und Whatsapp-Lampe)

Wie Ihr diese nachbauen könnt und was es dabei zu beachten gibt ist im folgenden Artikel erklärt.

(*)HINWEIS: Facebook® und das Facebook-Logo sind in den USA und anderen Ländern eingetragene Marken von Facebook, Inc.


Sicherheitshinweise

Ich weiß die folgenden Hinweise sind immer irgendwie lästig und wirken unnötig. Aber leider haben schon viele Menschen die es "besser" wussten aus Leichtsinnigkeit Augen, Finger oder anderes verloren bzw. sich verletzt. Im Vergleich dazu ist ein Datenverlust fast nicht der Rede Wert, aber auch diese können echt ärgerlich sein. Deswegen nehmt Euch bitte fünf Minuten Zeit um die Sicherheitshinweise zu lesen. Denn auch das coolste Projekt ist keine Verletzung oder anderen Ärger wert.
https://www.nerdiy.de/sicherheitshinweise/

Affiliatelinks/Werbelinks

Die hier in aufgeführten Links zu Online-Shops sind sogenannte Affiliate-Links. Wenn Du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekommt Nerdiy.de von dem betreffenden Online-Shop oder Anbieter eine Provision. Für Dich verändert sich der Preis nicht. Falls Du Deine Einkäufe über diese Links tätigst unterstützt Du Nerdiy.de dabei auch in Zukunft weitere nützliche Projekte anbieten zu können. 🙂 


Voraussetzungen

Hilfreiche Artikel:
Bevor ihr mit diesem Artikel startet solltet Ihr euch mit den Grundlagen des Lötens beschäftigt haben. Informationen dazu findet Ihr in dem folgenden Artikel.
Elektronik – Mein Freund der Lötkolben

Benötigtes Material:

In der folgenden Liste findet Ihr alle Teile die Ihr zur Umsetzung dieses Artikels benötigt.

Benötigtes Werkzeug:

In der folgenden Liste findet Ihr alle Werkzeuge die Ihr zur Umsetzung dieses Artikels benötigt.


Benötigten Teile sammeln

Im folgenden Bild seht Ihr die benötigten Teile um Euer eigene Facebook(*)-Icon-Lampe zu bauen.

Auf dem Bild fehlt lediglich der Papierstreifen mit dem Ihr im letzten Schritt die LED’s verdeckt. Durch diesen wird das Licht später auch besser verteilt und wirkt “flächiger”.

Die benötigten 3D-Teile drucken

Download aller benötigten STL-Dateien: NodeRedTasmota – Eine Facebook-Icon-Lampe bauen

Basis:

Ihr könnt die 3D-Ansicht der STL-Datei mit gedrückter Maustaste rotieren. Rein- und Raus-Zoomen könnt Ihr mit dem Mausrad.


Schaltplan

Hier findet Ihr die Schaltpläne die angeben wie die Lampe im Prinzip aufgebaut ist.

Normaler Schaltplan.
Fritzing Ansicht.

Den ersten LED-Streifen vorbereiten

Für eine Lampe essenziell sind natürlich die Bauteile die leuchten. In diesem Fall sind es zwei WS812B LED Streifen die entsprechend vorbereitet in das Lampengehäuse eingeklebt werden müssen.

Trennt dazu ein ca. 6cm langes Stück der 3-Adrigen Leitung ab und entfernt die Isolierung an den Enden ca. 5mm weit mit einem Seitenschneider oder einer Abisolierzange.
Damit die einzelnen Drähte der abisolierten Leitungen zusammen bleiben, müsst ihr die jeweiligen Leitungsenden nun noch mit etwas Lötzinn verzinnen.
Nun geht es an den ersten LED-Streifen: Dieser sollte 5 LED’s “lang” sein.
Um das anlöten der Anschlussleitung vorzubereiten verzinnt Ihr nun die Anschluss-pads mit etwas Lötzinn. Achtet dabei darauf, dass Ihr das Ende des LED-Streifens vorbereitet an dem der schwarze Pfeil auf dem LED-Streifen von euch weg zeigt. Dieser kennzeichnet die “Eingangsseite” für die Steuersignale die später an den LED-Streifen gesendet werden.
Da Ihr sowohl die Leitungsenden als auch die Lötpads an dem LED-Streifen zuvor verzinnt habt sollte es nun leicht fallen die Leitung an den LED-Streifen – wie abgebildet – anzulöten.
…dies sollte dann in etwa so aussehen. Kontrolliert hier nochmal, ob Ihr der schwarze Pfeil auf dem LED-Streifen von Euch weg, in Richtung der LED’s zeigt.

Den ersten LED-Streifen anbringen

Habt Ihr den ersten LED-Streifen vorbereitet so kann dieser auch schon in die Lampe eingeklebt werden. Der erste (kleinere) LED-Streifen beleuchtet in Eurer Facebook-Icon-Lampe das “F” von Innen heraus. So ist der Kontrast vom restlichen blauen Licht später etwas deutlicher.

Zum andrücken des LED-Streifens benötigt Ihr an dieser Stelle etwas längliches das dünn genug ist um in dem “F” (der Lampe) den LED-Streifen andrücken zu können. Ein Schraubendreher ist an dieser Stelle zum Beispiel ein praktisches Werkzeug. 🙂
Entfernt nun die Schutzfolie von der Rückseite des LED-Streifens und tragt etwas Heißkleber auf.
Nun müsst ihr schnell sein und den LED-Streifen auf die rückwärtige Innenseite des Facebook(*)-“-F’s” auflegen…
…und mit dem Schraubendreher etwas andrücken. Achtet dabei darauf, dass Ihr den LED-Streifen “zärtlich” andrückt. Gerade soviel, dass der Kleber auf dem LED-Streifen über die ganze Länge Kontakt mit dem Gehäuse hat. Die LED’s auf dem Streifen sind nämlich recht empfindlich und könnten bei zuviel Druck an der falschen Stelle beschädigt werden.
Das ganze sollte dann in etwa…
…so aussehen.

Den zweiten LED-Streifen vorbereiten

Der zweite (längere) LED-Streifen ist in der Lampe für die aus dem umlaufenden Rahmen ausgestrahlte blaue “Hintergrundbeleuchtung” zuständig. Dieser besteht aus 20 WS2812B LED’s.

Um den Anschluss des LED-Streifens vorzubereiten, müsst Ihr ein ca. 9cm langes Stück der 3-Adrigen Leitung abtrennen, die Enden (wie bei dem vorherigen Kabel) ca. 5mm abisolieren und mit etwas Lötzinn verzinnen.
An dem LED-Streifen müsst Ihr dann noch die Kontakte vorbereiten indem…
…Ihr die Kontaktflächen – wie beim vorherigen LED-Streifen – mit etwas Lötzinn verzinnt. Dieses Mal verzinnt Ihr die Kontakt-pads an beiden Enden des LED-Streifens.
Danach könnt Ihr die vorbereitete Leitung wieder mit dem LED-Streifen verlöten.
Dies sollte dann in etwa so aussehen.

Den zweiten LED-Streifen anbringen

Der zuvor vorbereitete zweite LED-Streifen wird nun in den äußeren Rahmen der Facebook(*)-Lampe wie abgebildet eingelegt. WICHTIG: Er wird erst später – nachdem er mit dem anderen LED-Streifen verbunden ist – endgültig positioniert und eingeklebt.

Entfernt nun die Schutzfolie auf der Klebeseite des LED-Streifens und fädelt diesen dann wie abgebildet in den Rahmen der Lampe.
Wichtig ist dabei, dass das Ende des LED-Streifens an dem keine Anschlussleitung angelötet ist, wie abgebildet aus dem Gehäuse guckt. hier muss im nächsten Schritt der andere LED-Streifen angelötet werden.
Der LED-Streifen kann nun erst mal provisorisch angedrückt werden, damit er für die folgenden Arbeiten zumindest…
…Grob in Position ist.
Die endgültige Positionierung und Fixierung erfolgt dann sobald die beiden LED-Streifen miteinander verbunden sind.

LED-Streifen verlöten

Damit später beide LED-Streifen angesteuert werden können müssen diese noch miteinander verbunden werden.

Dazu lötet Ihr die kurze Anschlussleitung des kurzen LED-Streifens an das noch “freie” Ende des langen LED-Streifens. Falls Ihr die abisolierten Leitungsenden noch nicht verzinnt habt, solltet Ihr dies nun tun.
Auch die Lötpads des LED-Streifens sollten – falls noch nicht geschehen – mit…
…etwas Lötzinn verzinnt werden.
Sind sowohl die Lötpads als auch die abisolierten Leitungsenden verzinnt, sollte das Anlöten der Leitung kein Problem sein. Achtet dabei wieder darauf, dass Ihr die weiße Leitung an GND, die grüne Leitung an DO und die rote Leitung an 5V anlötet.
Ansicht der angelöteten Leitung in der Übersicht…
…und Nahaufnahme.
Sind die LED-Streifen verbunden sollte das ganze in etwa so aussehen.

LED-Streifen ordentlich befestigen

Der provisorisch befestigte LED-Streifen kann nun exakt ausgerichtet und korrekt eingeklebt werden.

Das ist am einfachsten indem Ihr euch von dem einen Ende des LED-Streifens zum anderen “vorarbeitet”. Drückt den LED-Streifen also überall ordentlich an bis…
…Ihr am anderen Ende des LED-Streifens angekommen seid. Achtet dabei darauf, dass der LED-Streifen gerade in den Rundungen des Rahmens korrekt anliegt.
Die Leitung zwischen den LED-Streifen sollte dann auch genau in das freie Profil der Aussparung am Boden der Lampe passen.
Prüft nun nochmal ob der LED-Streifen überall ordentlich sitzt und korrekt ausgerichtet ist. Ist dies der Fall könnt Ihr den LED-Streifen mit etwas Heißkleber wie abgebildet fixieren. Dies ist nötig, weil der Kleber auf der doppelseitig klebenden Rückseite des LED-Streifens leider nicht sehr gut klebt und sich sonst mit der Zeit wieder ablösen würde.
Nahaufnahme des mit Heißkleber fixierten LED-Streifens.
Nahaufnahme des mit Heißkleber fixierten LED-Streifens.
Nahaufnahme des mit Heißkleber fixierten LED-Streifens.

ESP8266-Adapterboard anschließen

neben den LED-Streifen ist das zweite “Herzstück” der Lampe das ESP8266-Adapterboard. Auf diesem sitzt der Mikrocontroller der später die Lampe steuern und über WLAN Steuerungsbefehle entgegen nehmen wird. Es gibt unterschiedliche Adapterboards. Meiner Meinung nach am besten geeignet ist das “Wemos D1 Mini”.

Außerdem empfiehlt es sich an dieser Stelle auch die LED des ESP8266-Adapterboards zu deaktivieren. Dies ist im Artikel ESP8266 – LED entfernen/deaktivieren beschrieben.

Um den LED- Streifen an das Adapterboard anschließen zu können, werden zunächst wieder die entsprechenden Kontakte vorbereitet.
Verzinnt dazu die Kontakte “5V”, “GND” und “D4” (im unteren linken Bereich auf der abgebildeten Platine) wie abgebildet mit etwas Lötzinn.
Nun könnt Ihr die Leitung des LED-Streifens mit dem Adapterboard verlöten. hierbei wird die rote Leitung mit dem Kontakt “5V”, die weiße Leitung mit dem Kontakt “GND” und die grüne Leitung mit dem Kontakt “D4” des Adapterboards wie abgebildet verlötet. Achtet dabei darauf, dass zwischen den jeweiligen Kontakten keine Kurzschlüsse (=Verbindungen) entstehen.
Nahaufnahme der angelöteten Leitung am Adapterboard.

ESP8266-Adapterboard einkleben

Das fertig verbundene Adapterboard kann nun in den Sockel der Lampe eingeklebt werden. Falls Ihr Euch unsicher seid ob Ihr alles richtig gemacht habt ist es sinnvoll diesen Schritt zunächst auszulassen und die Lampe zuerst mit der benötigten Firmware zu programmieren (Siehe nächste Schritte). Das Adapterboard kann dann auch später eingeklebt werden.

Damit die Lampe später auch gerade steht und nicht wackelt muss das Adapterboard nun so eingeklebt werden, dass es komplett im Sockel der Lampe verschwindet. Knickt dazu die zuvor angelötete Leitung etwas ab und achtet dabei darauf, dass keine Kontakte kurzgeschlossen (=verbunden) werden. Außerdem solltet Ihr das Adapterboard relativ mittig einkleben um noch genug Platz für den Stecker des USB-Kabels zu haben, über welches die Lampe später mit Strom und Daten (zum programmieren) versorgt wird.
Nahaufnahme des eingeklebten Adapterboards.
Wenn Ihr nun von der Seite auf die Lampe guckt sollte nichts über die Außenkanten hervorstehen.
Nahaufnahme des eingeklebten Adapterboards.
Habt Ihr alles richtig gemacht sollte die Lampe nun ohne zu kippeln stehen können und sowohl das Adapterboard als auch das USB-kabel im Sockel verschwinden.

Papierblenden aufkleben

Eure Facebook(*)-Lampe ist nun fast fertig. Das einzige was noch ein bisschen die Optik stört ist, dass man die “nackten” LED-Streifen direkt sehen kann. Um diese etwas zu verstecken werden nun zwei Papierstreifen mit den Abmessungen 32x160mm in den Rahmen geklebt.

Die Papierstreifen solltet Ihr wie beim andrücken des LED-Streifens, von dem einen Ende beginnend in den Rahmen kleben und Schrittweise andrücken, bis der Papierstreifen korrekt sitzt.
Der zweite Papierstreifen wird dann nach dem gleichen Muster in den Rahmen geklebt bis der LED-Streifen komplett bedeckt ist.

Vor der Inbetriebnahme solltet Ihr nun noch die Tipps aus dem Artikel Elektronik – Inbetriebnahme einer neuen Schaltung beachten.


Tasmota Firmware flashen

Nun ist es an der zeit die Tasmota-Firmware auf die Lampe zu übertragen. Programmiert dazu die Tasmota-Firmware auf das ESP9266-Adapterboard. Wie dies geht ist im Artikel Tasmota – Firmware flashen  erklärt.

Im Folgenden eine Konfiguration wie ich sie für meine Facebook(*)-Lampe genutzt habe. In dieser müsst Ihr natürlich noch die Zugangsdaten zu Eurem WLAN und ggf. die Zugangsdaten zu Eurem MQTT-Server konfigurieren.

/*
  user_config.h - user specific configuration for Sonoff-Tasmota

  Copyright (C) 2018  Theo Arends

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef _USER_CONFIG_H_
#define _USER_CONFIG_H_

/*********************************************************************************************
 * This file consists of TWO sections.
 *
 * SECTION 1:
 * The first section contains PARAMETERS overriding flash settings if define CFG_HOLDER is CHANGED.
 * All parameters can be persistent changed online using commands via MQTT, WebConsole or Serial.
 *   Corresponding MQTT/Serial/Console commands are shown in [brackets]
 *
 * SECTION 2:
 * The second section contains Enabled and Disabled FEATURES allowing different program size.
 *   Changes in this section do NOT need a change of define CFG_HOLDER.
 *
 * ATTENTION:
 * Users are advised to use the user_config_override.h file for most changes.
*********************************************************************************************/

//#define USE_CONFIG_OVERRIDE                      // Uncomment to use user_config_override.h file. See README.md

/*********************************************************************************************
 * SECTION 1
 * - After initial load any change here only take effect if CFG_HOLDER is changed too
*********************************************************************************************/

// -- Master parameter control --------------------
#define CFG_HOLDER             4617              // [Reset 1] Change this value (max 32000) to load SECTION1 configuration parameters to flash

// -- Project -------------------------------------
#define PROJECT                "FacebookLampe"          // PROJECT is used as the default topic delimiter
#define MODULE                 WEMOS      // [Module] Select default model from sonoff_template.h (Should not be changed)

#define SAVE_DATA              1                 // [SaveData] Save changed parameters to Flash (0 = disable, 1 - 3600 seconds)
#define SAVE_STATE             1                 // [SetOption0] Save changed power state to Flash (0 = disable, 1 = enable)

// -- Wifi ----------------------------------------
#define WIFI_IP_ADDRESS        "0.0.0.0"         // [IpAddress1] Set to 0.0.0.0 for using DHCP or IP address
#define WIFI_GATEWAY           "192.168.0.1"   // [IpAddress2] If not using DHCP set Gateway IP address
#define WIFI_SUBNETMASK        "255.255.255.0"   // [IpAddress3] If not using DHCP set Network mask
#define WIFI_DNS               "192.168.0.1"    // [IpAddress4] If not using DHCP set DNS IP address (might be equal to WIFI_GATEWAY)

#define STA_SSID1              ""                // [Ssid1] Wifi SSID
#define STA_PASS1              ""                // [Password1] Wifi password
#define STA_SSID2              ""                // [Ssid2] Optional alternate AP Wifi SSID
#define STA_PASS2              ""                // [Password2] Optional alternate AP Wifi password
#define WIFI_CONFIG_TOOL       WIFI_MANAGER         // [WifiConfig] Default tool if wifi fails to connect
                                                 //   (WIFI_RESTART, WIFI_SMARTCONFIG, WIFI_MANAGER, WIFI_WPSCONFIG, WIFI_RETRY, WIFI_WAIT, WIFI_SERIAL)
#define WIFI_CONFIG_NO_SSID    WIFI_WPSCONFIG    // Default tool if wifi fails to connect and no SSID is configured
                                                 //   (WIFI_SMARTCONFIG, WIFI_MANAGER, WIFI_WPSCONFIG, WIFI_SERIAL)
                                                 //   *** NOTE: When WPS is disabled by USE_WPS below, WIFI_WPSCONFIG will execute WIFI_MANAGER ***
                                                 //   *** NOTE: When WIFI_MANAGER is disabled by USE_WEBSERVER below, WIFI_MANAGER will execute WIFI_SMARTCONFIG ***
                                                 //   *** NOTE: When WIFI_SMARTCONFIG is disabled by USE_SMARTCONFIG below, WIFI_SMARTCONFIG will execute WIFI_SERIAL ***

// -- Syslog --------------------------------------
#define SYS_LOG_HOST           ""                // [LogHost] (Linux) syslog host
#define SYS_LOG_PORT           514               // [LogPort] default syslog UDP port
#define SYS_LOG_LEVEL          LOG_LEVEL_NONE    // [SysLog] (LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE)
#define SERIAL_LOG_LEVEL       LOG_LEVEL_DEBUG    // [SerialLog] (LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE)
#define WEB_LOG_LEVEL          LOG_LEVEL_INFO    // [WebLog] (LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE)

// -- Ota -----------------------------------------
#define OTA_URL                "http://sonoff.maddox.co.uk/tasmota/sonoff.bin"  // [OtaUrl]

// -- MQTT ----------------------------------------
#define MQTT_USE               1                 // [SetOption3] Select default MQTT use (0 = Off, 1 = On)

#define MQTT_HOST              "---"                // [MqttHost]
#define MQTT_FINGERPRINT1      "A5 02 FF 13 99 9F 8B 39 8E F1 83 4F 11 23 65 0B 32 36 FC 07"  // [MqttFingerprint1]
#define MQTT_FINGERPRINT2      "A5 02 FF 13 99 9F 8B 39 8E F1 83 4F 11 23 65 0B 32 36 FC 07"  // [MqttFingerprint2]
#define MQTT_PORT              1883              // [MqttPort] MQTT port (10123 on CloudMQTT)
#define MQTT_USER              "DVES_USER"       // [MqttUser] MQTT user
#define MQTT_PASS              "DVES_PASS"       // [MqttPassword] MQTT password

#define MQTT_BUTTON_RETAIN     0                 // [ButtonRetain] Button may send retain flag (0 = off, 1 = on)
#define MQTT_POWER_RETAIN      0                 // [PowerRetain] Power status message may send retain flag (0 = off, 1 = on)
#define MQTT_SWITCH_RETAIN     0                 // [SwitchRetain] Switch may send retain flag (0 = off, 1 = on)

#define MQTT_STATUS_OFF        "OFF"             // [StateText1] Command or Status result when turned off (needs to be a string like "0" or "Off")
#define MQTT_STATUS_ON         "ON"              // [StateText2] Command or Status result when turned on (needs to be a string like "1" or "On")
#define MQTT_CMND_TOGGLE       "TOGGLE"          // [StateText3] Command to send when toggling (needs to be a string like "2" or "Toggle")
#define MQTT_CMND_HOLD         "HOLD"            // [StateText4] Command to send when button is kept down for over KEY_HOLD_TIME * 0.1 seconds (needs to be a string like "HOLD")

// -- MQTT topics ---------------------------------
  // Example "tasmota/bedroom/%topic%/%prefix%/" up to 80 characers
#define MQTT_FULLTOPIC         "%prefix%/%topic%/" // [FullTopic] Subscribe and Publish full topic name - Legacy topic

// %prefix% token options
#define SUB_PREFIX             "cmnd"            // [Prefix1] Sonoff devices subscribe to %prefix%/%topic% being SUB_PREFIX/MQTT_TOPIC and SUB_PREFIX/MQTT_GRPTOPIC
#define PUB_PREFIX             "stat"            // [Prefix2] Sonoff devices publish to %prefix%/%topic% being PUB_PREFIX/MQTT_TOPIC
#define PUB_PREFIX2            "tele"            // [Prefix3] Sonoff devices publish telemetry data to %prefix%/%topic% being PUB_PREFIX2/MQTT_TOPIC/UPTIME, POWER and TIME
                                                 //   May be named the same as PUB_PREFIX
// %topic% token options (also ButtonTopic and SwitchTopic)
#define MQTT_TOPIC             PROJECT           // [Topic] (unique) MQTT device topic, set to 'PROJECT "_%06X"' for unique topic including device MAC address
#define MQTT_GRPTOPIC          "sonoffs"         // [GroupTopic] MQTT Group topic
#define MQTT_BUTTON_TOPIC      "0"               // [ButtonTopic] MQTT button topic, "0" = same as MQTT_TOPIC, set to 'PROJECT "_BTN_%06X"' for unique topic including device MAC address
#define MQTT_SWITCH_TOPIC      "0"               // [SwitchTopic] MQTT button topic, "0" = same as MQTT_TOPIC, set to 'PROJECT "_SW_%06X"' for unique topic including device MAC address
#define MQTT_CLIENT_ID         "DVES_%06X"       // [MqttClient] Also fall back topic using Chip Id = last 6 characters of MAC address

// -- MQTT - Telemetry ----------------------------
#define TELE_PERIOD            300               // [TelePeriod] Telemetry (0 = disable, 10 - 3600 seconds)

// -- MQTT - Domoticz -----------------------------
#define DOMOTICZ_UPDATE_TIMER  0                 // [DomoticzUpdateTimer] Send relay status (0 = disable, 1 - 3600 seconds)

// -- MQTT - Home Assistant Discovery -------------
#define HOME_ASSISTANT_DISCOVERY_ENABLE   0      // [SetOption19] Home Assistant Discovery (0 = Disable, 1 = Enable)

// -- HTTP ----------------------------------------
#define WEB_SERVER             2                 // [WebServer] Web server (0 = Off, 1 = Start as User, 2 = Start as Admin)
#define WEB_PASSWORD           ""                // [WebPassword] Web server Admin mode Password for WEB_USERNAME (empty string = Disable)
#define FRIENDLY_NAME          "FacebookLampe"          // [FriendlyName] Friendlyname up to 32 characters used by webpages and Alexa
#define EMULATION              EMUL_NONE         // [Emulation] Select Belkin WeMo (single relay/light) or Hue Bridge emulation (multi relay/light) (EMUL_NONE, EMUL_WEMO or EMUL_HUE)

// -- Time - Up to three NTP servers in your region
#define NTP_SERVER1            "pool.ntp.org"       // [NtpServer1] Select first NTP server by name or IP address (129.250.35.250)
#define NTP_SERVER2            "nl.pool.ntp.org"    // [NtpServer2] Select second NTP server by name or IP address (5.39.184.5)
#define NTP_SERVER3            "0.nl.pool.ntp.org"  // [NtpServer3] Select third NTP server by name or IP address (93.94.224.67)

// -- Time - Start Daylight Saving Time and timezone offset from UTC in minutes
#define TIME_DST_HEMISPHERE    North              // [TimeDst] Hemisphere (0 or North, 1 or South)
#define TIME_DST_WEEK          Last               // Week of month (0 or Last, 1 or First, 2 or Second, 3 or Third, 4 or Fourth)
#define TIME_DST_DAY           Sun                // Day of week (1 or Sun, 2 or Mon, 3 or Tue, 4 or Wed, 5 or Thu, 6 or Fri, 7 or Sat)
#define TIME_DST_MONTH         Mar                // Month (1 or Jan, 2 or Feb, 3 or Mar, 4 or Apr, 5 or May, 6 or Jun, 7 or Jul, 8 or Aug, 9 or Sep, 10 or Oct, 11 or Nov, 12 or Dec)
#define TIME_DST_HOUR          2                  // Hour (0 to 23)
#define TIME_DST_OFFSET        +120               // Offset from UTC in minutes (-780 to +780)

// -- Time - Start Standard Time and timezone offset from UTC in minutes
#define TIME_STD_HEMISPHERE    North              // [TimeStd] Hemisphere (0 or North, 1 or South)
#define TIME_STD_WEEK          Last               // Week of month (0 or Last, 1 or First, 2 or Second, 3 or Third, 4 or Fourth)
#define TIME_STD_DAY           Sun                // Day of week (1 or Sun, 2 or Mon, 3 or Tue, 4 or Wed, 5 or Thu, 6 or Fri, 7 or Sat)
#define TIME_STD_MONTH         Oct                // Month (1 or Jan, 2 or Feb, 3 or Mar, 4 or Apr, 5 or May, 6 or Jun, 7 or Jul, 8 or Aug, 9 or Sep, 10 or Oct, 11 or Nov, 12 or Dec)
#define TIME_STD_HOUR          3                  // Hour (0 to 23)
#define TIME_STD_OFFSET        +60                // Offset from UTC in minutes (-780 to +780)

// -- Location ------------------------------------
#define LATITUDE               48.858360         // [Latitude] Your location to be used with sunrise and sunset
#define LONGITUDE              2.294442          // [Longitude] Your location to be used with sunrise and sunset

// -- Application ---------------------------------
#define APP_TIMEZONE           1                 // [Timezone] +1 hour (Amsterdam) (-13 .. 14 = hours from UTC, 99 = use TIME_DST/TIME_STD)
#define APP_LEDSTATE           LED_POWER         // [LedState] Function of led
                                                 //   (LED_OFF, LED_POWER, LED_MQTTSUB, LED_POWER_MQTTSUB, LED_MQTTPUB, LED_POWER_MQTTPUB, LED_MQTT, LED_POWER_MQTT)
#define APP_PULSETIME          0                 // [PulseTime] Time in 0.1 Sec to turn off power for relay 1 (0 = disabled)
#define APP_POWERON_STATE      POWER_ALL_SAVED   // [PowerOnState] Power On Relay state
                                                 //   (POWER_ALL_OFF, POWER_ALL_ON, POWER_ALL_SAVED_TOGGLE, POWER_ALL_SAVED, POWER_ALL_ALWAYS_ON, POWER_ALL_OFF_PULSETIME_ON)
#define APP_BLINKTIME          10                // [BlinkTime] Time in 0.1 Sec to blink/toggle power for relay 1
#define APP_BLINKCOUNT         10                // [BlinkCount] Number of blinks (0 = 32000)
#define APP_SLEEP              0                 // [Sleep] Sleep time to lower energy consumption (0 = Off, 1 - 250 mSec)

#define KEY_DEBOUNCE_TIME      50                // [ButtonDebounce] Number of mSeconds button press debounce time
#define KEY_HOLD_TIME          40                // [SetOption32] Number of 0.1 seconds to hold Button or external Pushbutton before sending HOLD message
#define SWITCH_DEBOUNCE_TIME   50                // [SwitchDebounce] Number of mSeconds switch press debounce time
#define SWITCH_MODE            TOGGLE            // [SwitchMode] TOGGLE, FOLLOW, FOLLOW_INV, PUSHBUTTON, PUSHBUTTON_INV, PUSHBUTTONHOLD, PUSHBUTTONHOLD_INV, PUSHBUTTON_TOGGLE (the wall switch state)
#define WS2812_LEDS            25                // [Pixels] Number of WS2812 LEDs to start with (max is 512)

#define TEMP_CONVERSION        0                 // [SetOption8] Return temperature in (0 = Celsius or 1 = Fahrenheit)
#define TEMP_RESOLUTION        1                 // [TempRes] Maximum number of decimals (0 - 3) showing sensor Temperature
#define HUMIDITY_RESOLUTION    1                 // [HumRes] Maximum number of decimals (0 - 3) showing sensor Humidity
#define PRESSURE_RESOLUTION    1                 // [PressRes] Maximum number of decimals (0 - 3) showing sensor Pressure
#define ENERGY_RESOLUTION      3                 // [EnergyRes] Maximum number of decimals (0 - 5) showing energy usage in kWh

/*********************************************************************************************
 * END OF SECTION 1
 *
 * SECTION 2
 * - Enable a feature by removing both // in front of it
 * - Disable a feature by preceding it with //
*********************************************************************************************/

// -- Localization --------------------------------
  // If non selected the default en-GB will be used
//#define MY_LANGUAGE            bg-BG           // Bulgarian in Bulgaria
//#define MY_LANGUAGE            cs-CZ           // Czech in Czech
#define MY_LANGUAGE            de-DE           // German in Germany
//#define MY_LANGUAGE            el-GR           // Greek in Greece
//#define MY_LANGUAGE            en-GB           // English in Great Britain. Enabled by Default
//#define MY_LANGUAGE            es-AR           // Spanish in Argentina
//#define MY_LANGUAGE            fr-FR           // French in France
//#define MY_LANGUAGE            hu-HU           // Hungarian in Hungary
//#define MY_LANGUAGE            it-IT           // Italian in Italy
//#define MY_LANGUAGE            nl-NL           // Dutch in the Netherlands
//#define MY_LANGUAGE            pl-PL           // Polish in Poland
//#define MY_LANGUAGE            pt-BR           // Portuguese in Brazil
//#define MY_LANGUAGE            pt-PT           // Portuguese in Portugal
//#define MY_LANGUAGE            ru-RU           // Russian in Russia
//#define MY_LANGUAGE            tr-TR           // Turkish in Turkey
//#define MY_LANGUAGE            uk-UK           // Ukrainian in Ukrain
//#define MY_LANGUAGE            zh-CN           // Chinese (Simplified) in China
//#define MY_LANGUAGE            zh-TW           // Chinese (Traditional) in Taiwan

// -- Wifi Config tools ---------------------------
//#define USE_WPS                                  // Add support for WPS as initial wifi configuration tool (+33k code, 1k mem (5k mem with core v2.4.2+))
//#define USE_SMARTCONFIG                          // Add support for Wifi SmartConfig as initial wifi configuration tool (+23k code, +0.6k mem)

// -- OTA -----------------------------------------
#define USE_ARDUINO_OTA                          // Add optional support for Arduino OTA (+13k code)

/*-------------------------------------------------------------------------------------------*
 * Select ONE of possible three MQTT library types below
*-------------------------------------------------------------------------------------------*/
  // Default MQTT driver for both non-TLS and TLS connections. Blocks network if MQTT server is unavailable.
#define MQTT_LIBRARY_TYPE      MQTT_PUBSUBCLIENT   // Use PubSubClient library
  // Alternative MQTT driver does not block network when MQTT server is unavailable. No TLS support
//#define MQTT_LIBRARY_TYPE      MQTT_TASMOTAMQTT    // Use TasmotaMqtt library (+4k4 code, +4k mem) - non-TLS only
  // Alternative MQTT driver does not block network when MQTT server is unavailable. No TLS support
//#define MQTT_LIBRARY_TYPE      MQTT_ESPMQTTARDUINO // Use (patched) esp-mqtt-arduino library (+4k8 code, +4k mem) - non-TLS only

// -- MQTT ----------------------------------------
#define MQTT_TELE_RETAIN     0                   // Tele messages may send retain flag (0 = off, 1 = on)

// -- MQTT - Domoticz -----------------------------
//#define USE_DOMOTICZ                             // Enable Domoticz (+6k code, +0.3k mem)
  #define DOMOTICZ_IN_TOPIC    "domoticz/in"     // Domoticz Input Topic
  #define DOMOTICZ_OUT_TOPIC   "domoticz/out"    // Domoticz Output Topic

// -- MQTT - Home Assistant Discovery -------------
//#define USE_HOME_ASSISTANT                       // Enable Home Assistant Discovery Support (+2k code)
  #define HOME_ASSISTANT_DISCOVERY_PREFIX "homeassistant"  // Home Assistant discovery prefix

// -- MQTT - TLS ----------------------------------
  // !!! TLS uses a LOT OF MEMORY so be careful to enable other options at the same time !!!
//#define USE_MQTT_TLS                             // Use TLS for MQTT connection (+53k code, +15k mem)

// -- KNX IP Protocol -----------------------------
//#define USE_KNX                                  // Enable KNX IP Protocol Support (+9.4k code, +3k7 mem)
//  #define USE_KNX_WEB_MENU                       // Enable KNX WEB MENU (+8.3k code, +144 mem)

// -- HTTP ----------------------------------------
#define USE_WEBSERVER                            // Enable web server and Wifi Manager (+66k code, +8k mem)
  #define WEB_PORT             80                // Web server Port for User and Admin mode
  #define WEB_USERNAME         "admin"           // Web server Admin mode user name
  #define USE_EMULATION                          // Enable Belkin WeMo and Hue Bridge emulation for Alexa (+16k code, +2k mem)

// -- mDNS ----------------------------------------
#define USE_DISCOVERY                            // Enable mDNS for the following services (+8k code, +0.3k mem)
  #define WEBSERVER_ADVERTISE                    // Provide access to webserver by name .local/
  #define MQTT_HOST_DISCOVERY                    // Find MQTT host server (overrides MQTT_HOST if found)

// -- Time ----------------------------------------
#define USE_TIMERS                               // Add support for up to 16 timers (+2k2 code)
  #define USE_TIMERS_WEB                         // Add timer webpage support (+4k5 code)
  #define USE_SUNRISE                            // Add support for Sunrise and sunset tools (+16k)
    #define SUNRISE_DAWN_ANGLE DAWN_NORMAL       // Select desired Dawn Angle from (DAWN_NORMAL, DAWN_CIVIL, DAWN_NAUTIC, DAWN_ASTRONOMIC)

// -- Rules ---------------------------------------
#define USE_RULES                                // Add support for rules (+4k4 code)

// -- Internal Analog input -----------------------
//#define USE_ADC_VCC                              // Display Vcc in Power status. Disable for use as Analog input on selected devices

// -- One wire sensors ----------------------------
                                                 // WARNING: Select none for default one DS18B20 sensor or enable one of the following two options for multiple sensors
//#define USE_DS18x20                              // Optional for more than one DS18x20 sensors with id sort, single scan and read retry (+1k3 code)
//#define USE_DS18x20_LEGACY                       // Optional for more than one DS18x20 sensors with dynamic scan using library OneWire (+1k5 code)

// -- I2C sensors ---------------------------------
#define USE_I2C                                  // I2C using library wire (+10k code, 0k2 mem, 124 iram)

#ifdef USE_I2C
//  #define USE_SHT                                // Enable SHT1X sensor (+1k4 code)
//  #define USE_HTU                                // Enable HTU21/SI7013/SI7020/SI7021 sensor (I2C address 0x40) (+1k5 code)
    #define USE_BMP                                // Enable BMP085/BMP180/BMP280/BME280 sensor (I2C address 0x76 or 0x77) (+4k code)
//  #define USE_BME680                           // Enable support for BME680 sensor using Bosch BME680 library (+4k code)
//  #define USE_BH1750                             // Enable BH1750 sensor (I2C address 0x23 or 0x5C) (+0k5 code)
//  #define USE_VEML6070                           // Enable VEML6070 sensor (I2C addresses 0x38 and 0x39) (+0k5 code)
//  #define USE_ADS1115                            // Enable ADS1115 16 bit A/D converter (I2C address 0x48, 0x49, 0x4A or 0x4B) based on Adafruit ADS1x15 library (no library needed) (+0k7 code)
//  #define USE_ADS1115_I2CDEV                     // Enable ADS1115 16 bit A/D converter (I2C address 0x48, 0x49, 0x4A or 0x4B) using library i2cdevlib-Core and i2cdevlib-ADS1115 (+2k code)
//  #define USE_INA219                             // Enable INA219 (I2C address 0x40, 0x41 0x44 or 0x45) Low voltage and current sensor (+1k code)
//  #define USE_SHT3X                              // Enable SHT3x (I2C address 0x44 or 0x45) or SHTC3 (I2C address 0x70) sensor (+0k7 code)
//  #define USE_TSL2561                            // Enable TSL2561 sensor (I2C address 0x29, 0x39 or 0x49) using library Joba_Tsl2561 (+2k3 code)
//  #define USE_MGS                                // Enable Xadow and Grove Mutichannel Gas sensor using library Multichannel_Gas_Sensor (+10k code)
//  #define MGS_SENSOR_ADDR    0x04              // Default Mutichannel Gas sensor i2c address
//  #define USE_SGP30                              // Enable SGP30 sensor (I2C address 0x58) (+1k1 code)
//  #define USE_SI1145                             // Enable SI1145/46/47 sensor (I2C address 0x60) (+1k code)
//  #define USE_LM75AD                             // Enable LM75AD sensor (I2C addresses 0x48 - 0x4F) (+0k5 code)
//  #define USE_APDS9960                           // Enable APDS9960 Proximity Sensor (I2C address 0x39). Disables SHT and VEML6070 (+4k7 code)
//  #define USE_MCP230xx                           // Enable MCP23008/MCP23017 for GP INPUT ONLY (I2C addresses 0x20 - 0x27) providing command Sensor29 for configuration (+4k7 code)
//    #define USE_MCP230xx_OUTPUT                  // Enable MCP23008/MCP23017 OUTPUT support through sensor29 commands (+1k5 code)
//    #define USE_MCP230xx_DISPLAYOUTPUT           // Enable MCP23008/MCP23017 to display state of OUTPUT pins on Web UI (+0k2 code)
  #define USE_MPR121                             // Enable MPR121 controller (I2C addresses 0x5A, 0x5B, 0x5C and 0x5D) in input mode for touch buttons (+1k3 code)
//  #define USE_CCS811                             // Enable CCS811 sensor (I2C address 0x5A) (+2k2 code)
//  #define USE_MPU6050                            // Enable MPU6050 sensor (I2C address 0x68 AD0 low or 0x69 AD0 high) (+2k6 code)
#endif  // USE_I2C

// -- SPI sensors ---------------------------------
//#define USE_SPI                                  // SPI using library TasmotaTFT

#ifdef USE_SPI

#endif  // USE_SPI

// -- Serial sensors ------------------------------
#define USE_MHZ19                                // Add support for MH-Z19 CO2 sensor (+2k code)
#define USE_SENSEAIR                             // Add support for SenseAir K30, K70 and S8 CO2 sensor (+2k3 code)
  #define CO2_LOW              800               // Below this CO2 value show green light (needs PWM or WS2812 RG(B) led and enable with SetOption18 1)
  #define CO2_HIGH             1200              // Above this CO2 value show red light (needs PWM or WS2812 RG(B) led and enable with SetOption18 1)
#define USE_PMS5003                              // Add support for PMS5003 and PMS7003 particle concentration sensor (+1k3 code)
#define USE_NOVA_SDS                             // Add support for SDS011 and SDS021 particle concentration sensor (+0k7 code)
#define USE_PZEM004T                             // Add support for PZEM004T Energy monitor (+2k code)
#define USE_SERIAL_BRIDGE                        // Add support for software Serial Bridge (+0k8 code)
//#define USE_SDM120                               // Add support for Eastron SDM120-Modbus energy meter (+1k7 code)
  #define SDM120_SPEED         9600              // SDM120-Modbus RS485 serial speed (default: 2400 baud)
//#define USE_SDM630                               // Add support for Eastron SDM630-Modbus energy meter (+2k code)
  #define SDM630_SPEED         9600              // SDM630-Modbus RS485 serial speed (default: 9600 baud)

// -- Low level interface devices -----------------
//#define USE_IR_REMOTE                            // Send IR remote commands using library IRremoteESP8266 and ArduinoJson (+4k code, 0k3 mem, 48 iram)
//  #define USE_IR_HVAC                            // Support for HVAC system using IR (+2k code)
//  #define USE_IR_RECEIVE                         // Support for IR receiver (+5k5 code, 264 iram)

#define USE_WS2812                               // WS2812 Led string using library NeoPixelBus (+5k code, +1k mem, 232 iram) - Disable by //
  #define USE_WS2812_CTYPE     NEO_GRB           // WS2812 Color type (NEO_RGB, NEO_GRB, NEO_BRG, NEO_RBG, NEO_RGBW, NEO_GRBW)
//  #define USE_WS2812_DMA                         // DMA supports only GPIO03 (= Serial RXD) (+1k mem). When USE_WS2812_DMA is enabled expect Exceptions on Pow

//#define USE_ARILUX_RF                            // Add support for Arilux RF remote controller (+0k8 code, 252 iram (non 2.3.0))

//#define USE_SR04                                 // Add support for HC-SR04 ultrasonic devices (+1k code)

//#define USE_TM1638                               // Add support for TM1638 switches copying Switch1 .. Switch8 (+1k code)

#define USE_RF_FLASH                             // Add support for flashing the EFM8BB1 chip on the Sonoff RF Bridge. C2CK must be connected to GPIO4, C2D to GPIO5 on the PCB (+3k code)

/*********************************************************************************************
 * Debug features are only supported in development branch
*********************************************************************************************/

//#define USE_DEBUG_DRIVER                         // Use xdrv_99_debug.ino providing commands CpuChk, CfgXor, CfgDump, CfgPeek and CfgPoke

/*********************************************************************************************
 * Optional firmware configurations
 * Select none or just one for optional features and sensors as configured in sonoff_post.h
 * See RELEASENOTES.md for selected features
*********************************************************************************************/

//#define USE_CLASSIC                              // Create sonoff-classic with initial configuration tools WPS, SmartConfig and WifiManager
//#define USE_SENSORS                              // Create sonoff-sensors with useful sensors enabled
//#define USE_KNX_NO_EMULATION                     // Create sonoff-knx with KNX but without Emulation
//#define BE_MINIMAL                               // Create sonoff-minimal as intermediate firmware for OTA-MAGIC

/*********************************************************************************************
 * No user configurable items below
*********************************************************************************************/

#if defined(USE_MQTT_TLS) && defined(USE_WEBSERVER)
  #error "Select either USE_MQTT_TLS or USE_WEBSERVER as there is just not enough memory to play with"
#endif

#endif  // _USER_CONFIG_H_

Tasmota-Firmware konfigurieren

Damit die frisch programmierte aber noch unkonfigurierte Firmware der Lampe auch korrekt funktioniert, muss nun noch eingestellt werden wo der LED-Streifen an das ESP8266-Adapterboard angeschlossen ist.

Gebt dazu die IP Adresse Eurer Facebook(*)-Lampe in die Adressleiste Eures Browsers ein und wartet bis Ihr von der Startseite der Tasmota-Firmware begrüßt werdet. Wie Ihr die IP-Adresse Eurer Geräte im Netzwerk herausfindet ist im Artikel IP-Adresse der Geräte im Netzwerk anzeigen/herausfinden.
Dort klickt Ihr nun auf “Einstellungen”…
…und auf “Gerät konfigurieren”.
In der Drop-Down Liste des GPIO02 bzw. “D4” stellt Ihr nun “07 WS2812” ein, was der Tasmota Firmware sagt, dass nun am GPIO02 ein WS2812 LED-Streifen angeschlossen ist.
Habt Ihr die Konfiguration wie abgebildet eingestellt klickt Ihr auf “Speichern”.
Die Firmware wird dann neu gestartet und sollte nach ca. einer Minute wieder verfügbar sein.

Steuerung der Lampe

Wie Ihr die Lampe dann steuern könnt – um unter anderem die passenden Facebook(*)-Farben einzustellen – ist im folgenden Artikel beschrieben NodeRed – Facebook-Lampe ansteuern.


Hat alles geklappt sollte Eure Facebook(*)-Lampe dann letztendlich so aussehen.


Viel Spaß mit dem Projekt

Ich hoffe bei euch hat alles wie beschrieben funktioniert. Falls nicht oder ihr Fragen oder Anregungen habt lasst es mich in den Kommentaren bitte wissen. Ich trage dies dann ggf. in den Artikel nach.
Auch Ideen für neue Projekte sind immer gerne willkommen. 🙂

P.S. Viele dieser Projekte - besonders die Hardwareprojekte - kosten viel Zeit und Geld. Natürlich mache ich das weil ich Spaß daran habe, aber wenn Du es cool findest, dass ich die Infos dazu mit Euch teile, würde ich mich über eine kleine Spende an die Kaffeekasse freuen. 🙂

Buy Me a Coffee at ko-fi.com       

Kommentar hinterlassen

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

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