Skip to main content

Plan voor Home Assistant Lux sensor via MQTT

image.png


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.h
    • PubSubClient.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

heldenhome/sensor/esp8266_licht/lux

Sensor

RGB LED

heldenhome/light/esp8266_rgbled

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!