Plan voor Home Assistant Lux sensor via MQTT
Uiteraard! Hieronder is het volledige projectplan, inclusief de Arduino-code zoals in je oorspronkelijke tekst. De code is netjes opgemaakt in een codeblok en voorzien van commentaar:
🌟 Projectplan: ESP8266 RGB LED & Lichtsensor met MQTT-integratie in Home Assistant
🧰 Hardware
Onderdeel | Specificatie / Functie |
|---|---|
ESP8266 Module | Witty Cloud ESP-12F (met onboard RGB LED & fotodiode) |
Sensoren | - LDR (lichtsensor)- RGB LED |
Voeding | Micro-USB of via UART header |
Communicatie | MQTT via WiFi |
🛠️ Firmware & Configuratie
📦 Firmware
- Basis: Eigen firmware geschreven in Arduino IDE
- Bibliotheken:
ESP8266WiFi.hPubSubClient.h
📄 Arduino Code
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// Netwerkgegevens
const char* ssid = "jouw_ssid";
const char* password = "jouw_wachtwoord";
// MQTT broker
const char* mqtt_server = "mqtt_broker_ip";
const int mqtt_port = 1883;
const char* mqtt_user = "mqtt_gebruiker"; // indien van toepassing
const char* mqtt_password = "mqtt_wachtwoord";
// MQTT topics
const char* licht_topic = "heldenhome/sensor/esp8266_licht/lux";
const char* rgb_topic = "heldenhome/light/esp8266_rgbled/set";
// RGB LED pinnen
const int redPin = 15;
const int greenPin = 12;
const int bluePin = 13;
// LDR pin
const int ldrPin = A0;
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
}
void callback(char* topic, byte* payload, unsigned int length) {
String json = "";
for (unsigned int i = 0; i < length; i++) {
json += (char)payload[i];
}
StaticJsonDocument<256> doc;
DeserializationError error = deserializeJson(doc, json);
if (error) return;
if (String(topic) == rgb_topic) {
if (doc["state"] == "OFF") {
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
} else {
int brightness = doc["brightness"] | 255;
JsonObject color = doc["color"];
int r = color["r"] | 0;
int g = color["g"] | 0;
int b = color["b"] | 0;
analogWrite(redPin, map(r * brightness / 255, 0, 255, 0, 1023));
analogWrite(greenPin, map(g * brightness / 255, 0, 255, 0, 1023));
analogWrite(bluePin, map(b * brightness / 255, 0, 255, 0, 1023));
}
}
}
void reconnect() {
while (!client.connected()) {
if (client.connect("ESP8266Client", mqtt_user, mqtt_password)) {
client.subscribe(rgb_topic);
} else {
delay(5000);
}
}
}
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
int lichtWaarde = analogRead(ldrPin);
char msg[8];
dtostrf(lichtWaarde, 1, 2, msg);
client.publish(licht_topic, msg);
delay(10000); // elke 10 seconden verzenden
}🔧 Let op: Voeg de juiste WiFi- en MQTT-gegevens in vóór gebruik. Zorg ook dat de JSON-library (
ArduinoJson) is geïnstalleerd via de Library Manager.
📡 MQTT Topics
Functie | Topic | Type |
|---|---|---|
Lichtintensiteit |
| Sensor |
RGB LED |
| Actuator |
🏠 Home Assistant Configuratie (configuration.yaml)
🧭 MQTT Sensor
sensor:
- platform: mqtt
name: "Lichtniveau ESP8266"
state_topic: "heldenhome/sensor/esp8266_licht/lux"
unit_of_measurement: "lux"
device_class: illuminance
unique_id: esp8266_lichtsensor_1🎨 MQTT Light (RGB LED)
light:
- platform: mqtt
name: "ESP8266 RGB LED"
command_topic: "heldenhome/light/esp8266_rgbled/set"
state_topic: "heldenhome/light/esp8266_rgbled/state"
schema: json
brightness: true
rgb: true
unique_id: esp8266_rgb_led_1📈 Voorbeeld MQTT Payloads
💡 RGB LED Aanzetten (geelachtig licht)
Topic: heldenhome/light/esp8266_rgbled/set
Payload:
{
"state": "ON",
"brightness": 200,
"color": { "r": 255, "g": 255, "b": 100 }
}🔴 Uitschakelen
{
"state": "OFF"
}🚀 Uitbreidingsideeën
Idee | Beschrijving |
|---|---|
🔴 Individuele kleurkanalen via MQTT | Losse topics voor R, G en B |
🌙 Deep sleep | Energiebesparing met GPIO16 ↔ RST |
📉 Lux-calibratie | Empirische of logaritmische aanpassing |
📲 Systeemstatus via MQTT | WiFi signaalsterkte, uptime enz. |
✅ Status
Onderdeel | Status |
|---|---|
Hardware aangesloten | ✔️ |
Firmware werkend | ✔️ |
MQTT-verbinding actief | ✔️ |
Home Assistant setup | ✔️ |
Laat me weten als je dit wilt als PDF of Markdown-bestand, of als je het wilt omzetten naar een poster, presentatie of GitHub README!
