Smarte LED Deckenlampe mit Ventilator von der Tuya Cloud befreien mit ESPHome

rgb deckenlampe ventilator
Raspberry Pi 7-Zoll-Touchscreen-Display mit Gehäuse Rahmen - 1024x600 Unterstützung, Type-C, IPS 178° Ultra-Weitwinkel-Monitor mit Kühlungslüfter, 10 Finger Capacitive Touch
Raspberry Pi 7-Zoll-Touchscreen-Display mit Gehäuse Rahmen - 1024x600 Unterstützung, Type-C, IPS 178° Ultra-Weitwinkel-Monitor mit Kühlungslüfter, 10 Finger Capacitive Touch
--

Als Felix bei mir zu Besuch war, haben wir die Zeit genutzt um eine Tuya Deckenlampe von der Cloud zu befreien und sie mit Hilfe von ESPHome lokal in Home Assistant zu integrieren.


BKZO moderne Smart-LED-Deckenleuchte mit Ventilator, Deckenventilator mit Lampe, 24 Lüftungsgeschwindigkeiten, mühelose Lichtdimmung, 3000-5500 K, Weiß, 60CM
Bei Amazon ansehen * --
Stand von: 21. November 2024 09:50 - Details
BKZO moderne Smart-LED-Deckenleuchte mit Ventilator, Deckenventilator mit Lampe,... *
(* = Affiliate-Link / Bildquelle: Amazon-Partnerprogramm)
×
Produktpreise und -verfügbarkeit sind zum angegebenen Datum / Uhrzeit korrekt und können sich ändern. Alle Preis- und Verfügbarkeitsinformationen auf https://www.amazon.de/ zum Zeitpunkt des Kaufs gelten für den Kauf dieses Produkts.


Die Lampe besitzt von Haus aus nur warm- und kaltweiße LEDs. Da ich persönlich die Lampe für mein Büro einsetzen möchte und ich da eigentlich ausschließlich RGB-Beleuchtung nutze, mussten wir hier natürlich auch noch eine RGB-Beleuchtung nachrüsten. Die RGB-LEDs werden aktuell leider noch vom Ventilator und den weißen LEDs gestört, heist ich muss mich entscheiden, nutze ich die nachgerüstete RGB-Beleuchtung oder möchte ich den Ventilator und/oder die weißen LEDs verwenden.
Damit kann ich aber vorerst ganz gut leben. Ich werde aber bei Gelegenheit noch einmal versuchen, auch das noch in den Griff zu bekommen.

Das ganze Projekt habe ich in einem kurzen Video natürlich auch kurz zusammengefasst.

YouTube

Mit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.
Mehr erfahren

Video laden

https://youtu.be/bJquXPVMaDg


ESPHome Code:

substitutions:
  device_name: "buro-lampe-venti"
  friendly_name: "Bürolampe mit Ventilator" 

  wifi_ssid: !secret wifi_ssid
  wifi_password: !secret wifi_password


# --------------------------------------------
# --------------------------------------------
  led_cw_pin: GPIO4
  led_ww_pin: GPIO5
  fan_direction_pin: GPIO14
  fan_speed_pin: GPIO12
  buzzer_pin: GPIO15
  rgb_led_pin: GPIO13

  led_count: "81"
  last_led_index: "80"     # immer 1 kleiner als led_count!

  min_fan_frequency: "30"
  max_fan_frequency: "200"

# --------------------------------------------
# --------------------------------------------

esphome:
  name: ${device_name}
  friendly_name: ${friendly_name}
# Wer möchte, kann hier noch einen Boot-Sound aktivieren
#  on_boot:
#    priority: -100
#    then:
#      - rtttl.play: 'MissionImp:d=16,o=6,b=95:32d,32d#,32d,32d#,32d,32d#,32d,32d#,32d,32d,32d#,32e,32f,32f#,32g,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,a#,g,2d,32p,a#,g,2c#,32p,a#,g,2c,a#5,8c,2p,32p,a#5,g5,2f#,32p,a#5,g5,2f,32p,a#5,g5,2e,d#,8d'


esp8266:
  board: esp01_1m

logger:

api:

ota:

wifi:
  ssid: ${wifi_ssid}
  password: ${wifi_password}
  ap:
    ssid: ${device_name}_AP
    password: ${wifi_password}

captive_portal:


rtttl:
  output: rtttl_out


fan:
  - platform: speed
    output: fan_cw
    direction_output: fan_clk  
    name: ${device_name} Ventilator
    restore_mode: ALWAYS_OFF
    id: my_fan
    on_speed_set:
      - output.esp8266_pwm.set_frequency:
          id: fan_cw
          frequency: !lambda |
            int min = ${min_fan_frequency};
            int max = ${max_fan_frequency};
            return map(id(my_fan).speed, 0, 100, min, max );


light:
  - platform: neopixelbus
    name: ${device_name} RGB Licht
    type: GRB
    variant: WS2812
    pin: ${rgb_led_pin}
    num_leds: ${led_count}
    restore_mode: ALWAYS_OFF
    default_transition_length: 1s
    internal: true
    id: led_stripe

  - platform: cwww
    name: ${device_name} Lampe
    gamma_correct: 2.8
    cold_white: cold_white
    warm_white: warm_white
    restore_mode: ALWAYS_OFF
    cold_white_color_temperature: 6200 K
    warm_white_color_temperature: 2800 K
    id: cwww_light
    on_turn_on:
      - light.turn_on: 
          id: cwww_light
          cold_white: 30%
          warm_white: 80%
  

  - platform: partition
    name: "Lüfter LEDs"
    segments:
      # Use first 10 LEDs from the light with ID light1
      - id: led_stripe
        from: 0
        to: 11
    id: fan_leds
    effects:
      - addressable_rainbow:
          name: Rainbow
          speed: 7
          width: 25
      - addressable_color_wipe:
      - random:

  - platform: partition
    name: ${device_name} RGB Lampe
    segments:
      - id: led_stripe
        from: 12
        to: 80
    id: rgb_leds   
    effects:
      - addressable_rainbow:
          name: Rainbow
          speed: 15
          width: 35
      - addressable_color_wipe:
      - random:


output:
  - platform: esp8266_pwm
    id: cold_white_int
    pin: ${led_cw_pin}
    max_power: 85%

  - platform: esp8266_pwm
    id: warm_white_int
    pin: ${led_ww_pin}
    max_power: 85%

  - platform: esp8266_pwm
    pin: ${buzzer_pin}
    id: rtttl_out

  - platform: gpio
    pin: ${fan_direction_pin}
    id: fan_clk

  - platform: esp8266_pwm
    pin: ${fan_speed_pin}
    max_power: 85%
    id: fan_cw
    frequency: 50Hz

  # lässt die weißen LEDs nicht aktivieren, wenn RGB-LEDs aktiv sind (um Störungen zu vermeiden)
  - platform: template
    id: cold_white
    type: float
    write_action:
      - output.set_level:
          id: cold_white_int
          level: !lambda |
            if(id(led_stripe).current_values.is_on() || id(rgb_leds).current_values.is_on()) {
              return 0;
            } else {
              return state;
            }

  # lässt die weißen LEDs nicht aktivieren, wenn RGB-LEDs aktiv sind (um Störungen zu vermeiden)
  - platform: template
    id: warm_white
    type: float
    write_action:
      - output.set_level:
          id: warm_white_int
          level: !lambda |
            if(id(led_stripe).current_values.is_on() || id(rgb_leds).current_values.is_on()) {
              return 0;
            } else {
              return state;
            }

ESPHome Tutorial Serie

Falls Ihr noch mehr über ESPHome wissen wollt, werft doch einfach mal einen Blick in meine ESPHome Tutorial Serie auf YouTube:

Playlist:
https://www.youtube.com/playlist?list=PLtEjuZQyAkqGAvHjsM6G295CsKXetm-_Z


Ansonsten findet Ihr auch jede Menge Informationen rund um ESPHome hier im Wiki: