Athom E14 Color Bulb komponent WLED efekt w ESPHome

Witam. Przybywam z kolejnym problem dla większości z Was pewnie błahym ale dla kogoś kto się tym nie zajmował to czarna magia.

Mianowicie zaopatrzyłem się w żarówkę E14 Color Bulb for ESPHome | athom i chiałbym aby mogła korzystać z efektów wled ( który już siedzi na esp32). Próbowałem oczywiście sam z różnymi poradnikami i instrukcjami ale można je sobie w … wsadzić i życzenie pomyśleć, aby wkońcu zadziałało. Światło dodane do esp home na HA. Można włączyć, wyłączyć, kolor zmienić i jasność. I co trzeba dalej, żebt to z UDP zadziałało?

Zaraz, zaraz, ale ESPHome nie ma nic wspólnego z WLED…
trzeba było kupić z firmware WLED jeśli chcesz używać WLED

być może crossflash jest możliwy ale robisz to na własne ryzyko

ten YAML jest przestarzały

ale w ogóle pokaż jakiego YAMLa Adoptowałeś do IDE

pokaż w sensie wklej jako kod (NIE chcemy oglądać samego screenshota)

edit
Producent ma własne forum - może tam jest gotowy opis jak przeflaszować żarówkę z ESPHome na WLED, a jeśli nie ma to zapytaj, najlepsza jest odpowiedź u źródła, przy okazji spytaj ich czy zamierzają zaktualizować YAMLe w repozytorium

edit2
i pokaż też YAMLa z tego ESP32 to może pytanie zacznie być bardziej zrozumiałe.

Pokaże jak wrócę do domu. Ale ja nie chcę używać wleda na żarówce bo wleda głównego mam na esp32. Esphome ma tylko przekazywać efekty przez UDP do esphome.

Napisałeś jak wyżej, a następnie piszesz:

Ciężko zrozumieć co chcesz z czym łączyć. Musisz dokładnie wyjaśnić w szczegółach jaką masz konfigurację i co chcesz osiągnąć. Na razie wiemy, że masz żarówkę z ESPHome i ESP32 z WLED ale ostatnie zdanie jest nielogiczne, nie rozumiem co ESPHome ma przekazywać do ESPHome i o jakie miejsce może chodzić.

Light Component — ESPHome. na dole jest WLED effects. Chodzi o to, że światełko kontrolowane przez esphome może odbierać pakiety UDP w czasie rzeczywistym. Esphome może mieć jako efekt świetlny wled, i wtedy takie światełko robi to co wled każe. https://youtu.be/Ap-WQ9-sDNY?si=ZDI3bBzbEWlmXEL2 robiłem z tego filmy między innymi ale kod żarówki po adaptacji to większość linków do githuba. Próbowałem też go użyć jako szablonu i coś podłubać ale to się nawet nie chce wgrywać. Tak więc utknąłem. Kod wstawię jak wrócę z pracy.

1 polubienie

No i tak trzeba było zacząć wątek. (zmieniłem nieco tytuł by było to nieco bardziej jasne o czym tu mowa)

Gdzie jest twój YAML? ten po adopcji
(nie ważne, że są w nim linki do githuba, bo jeśli to ten zdalny kod który linkowałem to jest on obecnie do bani, bo jest nieaktualny i w dodatku pewnie nie pasuje do twojej żarówki!!)
muszę mieć jakiś materiał wyjściowy - najpierw zdalny kod musisz zmienić w całkowicie lokalny, a następnie go uzdatnić do swoich potrzeb.

Koleś (autor podlinkowanego wideo) z tego komponentu korzysta na ESP32, jesteś pewnien że ESP8285/8266 to udźwignie?

sugerowałbym testy na płytce prototypowej ESP8285 zanim się weźmiesz za nierozbieralną żarówkę


trochę offtopic (po dostarczeniu danych co chcesz uzyskać)

Oprócz tego na githubie jest opisane jak zrobić crossflash na tak cieniutkim sprzęcie jak siedzi w żarówkach (opis dotyczy przejścia z ESPHome na Tasmota, ale tą samą drogą powinno się dać przejść na WLED) oczywiście jak zwykle nie biorę odpowiedzialności za uwalenie sprzętu.

(przy modyfikacjach YAMLa w ESPHome też nie biorę żadnej odpowiedzialności - to jest ESP8285 o bardzo biednych zasobach, stosując lokalny YAML odcinasz się od przyszłych aktualizacji YAMLa przez producenta, więc będziesz musiał samodzielnie śledzić najnowsze jego ulepszenia i samodzielnie je wprowadzać, ale nie ma innej drogi dodania komponentów których nie przewidział producent).

substitutions:
  name: athom-rgbct-light-99403f-99403f
  friendly_name: Witryna
packages:
  Athom Technology.Athom RGBCCT Bulb: github://athom-tech/athom-configs/athom-rgbct-light.yaml
esphome:
  name: ${name}
  name_add_mac_suffix: false
  friendly_name: ${friendly_name}
api:
  encryption:
    key: ZcykGbSWS669alG2RBtHq9foF2wSIgqSIFtSmumISzU=


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

Ale wgranie wleda na żarówkę będzie oznaczało, że podstawowe czynności jak włączenie/wyłączenie itd. będzie musiało się odbywać przez wleda. to bez sensu i generuje dodatkowy ruch. a tak w razie potrzeby wled przejmował by kontrolę do efektów a po wyłączeniu oddawał by władzę HA. Tak to rozumiem. Tak ten kod jest niekompletny, ale jak mówiłem, próbowałem to zrobić jak należy, ale nie umiem.

Teraz nie mam WLED (konstrukcje poszły do przeróbki, bo miałem zbyt biedne MCU - na bazie modułu ESP-01 i czeka na swoją kolej), ale jeśli mnie pamięć nie myli WLED się normalnie integruje z HA, więc można na poziomie HA zintegrować z czymkolwiek choćby z pilotami Zigbee automatyzując to na poziomie HA.

Ten kod jest kompletny - zawiera odpowiednik include do zdalnego kodu

github://athom-tech/athom-configs/athom-rgbct-light.yaml

czyli tego

ale nie możesz modyfikować tego zdalnego kodu, bo to nie twoje repozytorium

masz 2 możliwości

  1. albo kod przygotować jako lokalny (co spróbuję zaraz zrobić - poczekaj na komentarz, że to gotowe, ale eksperymentować już na nim będziesz sam)
  2. albo na własnym repozytorium stworzyć sobie zmodyfikowany YAML i do niego się odwoływać (nie chce mi się opisywać jak to zrobić, ale nie jest to jakaś straszna filozofia)
substitutions:
  name: athom-rgbct-light-99403f-99403f
  friendly_name: Witryna
  # Allows ESP device to be automatically linked to an 'Area' in Home Assistant. Typically used for areas such as 'Lounge Room', 'Kitchen' etc
  room: ""
  # Description as appears in ESPHome & top of webserver page
  device_description: "athom 15w rgbcct light bulb"
  # Project Name
  project_name: "Athom Technology.Athom RGBCCT Bulb modified"
  # Projection version denotes the release version of the yaml file, allowing checking of deployed vs latest version
  project_version: "v1.1.3 by szo"
   # Restore the light (GPO switch) upon reboot to state:
  light_restore_mode: RESTORE_DEFAULT_ON
  # Define a domain for this device to use. i.e. iot.home.lan (so device will appear as athom-smart-plug-v2.iot.home.lan in DNS/DHCP logs)
  dns_domain: ""
  # Set timezone of the smart plug. Useful if the plug is in a location different to the HA server. Can be entered in unix Country/Area format (i.e. "Australia/Sydney")
  timezone: "Europe/Warsaw"
  # Set the duration between the sntp service polling ntp.org servers for an update
  sntp_update_interval: 1h
  # Network time servers for your region, enter from lowest to highest priority. To use local servers update as per zones or countries at: https://www.ntppool.org/zone/@
  sntp_server_1: "0.pl.pool.ntp.org"
  sntp_server_2: "1.pl.pool.ntp.org"
  sntp_server_3: "2.pl.pool.ntp.org"
  # Enables faster network connections, with last connected SSID being connected to and no full scan for SSID being undertaken
  wifi_fast_connect: "false"
  # Define logging level: NONE, ERROR, WARN, INFO, DEBUG (Default), VERBOSE, VERY_VERBOSE
  log_level: "DEBUG"
  # Enable or disable the use of IPv6 networking on the device
  ipv6_enable: "false"
  color_interlock: "true"

# to wywalam bo zamiast packages, czyli tego include niżej będzie kod lokalny
# packages:
#   Athom Technology.Athom RGBCCT Bulb: github://athom-tech/athom-configs/athom-rgbct-light.yaml

globals:
  - id: fast_boot
    type: int
    restore_value: yes
    initial_value: '0'

  - id: restore_mode
    type: int
    restore_value: yes
    initial_value: "1"

select:
  - platform: template
    name: "Power On State"
    id: "power_mode"
    optimistic: true
    options:
      - Always Off
      - Always On
      - Restore Power Off State
    on_value:
      then:
        - lambda: |-
            id(restore_mode)=i+1;

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  name_add_mac_suffix: false
  comment: "${device_description}"
  area: "${room}"
  min_version: 2024.6.0
  project:
    name: "${project_name}"
    version: "${project_version}"
  on_boot:
      then:
        - script.execute: fast_boot_script
        - select.set_index:
            id: power_mode
            index: !lambda |-
                    return id(restore_mode)-1;
        - lambda: |-
              switch(id(restore_mode))
              {
              case 1:{
                      auto call = id(rgbct_light).turn_off();
                      call.perform();
                      break;
                      }
              case 2:{
                      auto call = id(rgbct_light).turn_on();
                      call.set_color_mode(ColorMode::WHITE);
                      call.set_brightness(1.0);
                      call.perform();
                      break;
                      }
              default:{
                      break;
                      }
              }

esp8266:
  board: esp8285
  restore_from_flash: true

preferences:
  flash_write_interval: 1min

api:
  encryption:
    key: ZcykGbSWS669alG2RBtHq9foF2wSIgqSIFtSmumISzU=

ota:
  - platform: esphome

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # This spawns an AP with the device name and mac address with no password.
  ap: {}
  # Allow rapid re-connection to previously connect WiFi SSID, skipping scan of all SSID
  fast_connect: "${wifi_fast_connect}"
  # Define dns domain / suffix to add to hostname
  domain: "${dns_domain}"

captive_portal:

logger:
  level: ${log_level}
  baud_rate: 115200

mdns:
  disabled: false

web_server:
  port: 80

network:
  enable_ipv6: ${ipv6_enable}

binary_sensor:
  - platform: status
    name: "Status"
    entity_category: diagnostic

sensor:
  - platform: uptime
    name: "Uptime Sensor"
    id: uptime_sensor
    entity_category: diagnostic
    internal: true

  - platform: wifi_signal
    name: "WiFi Signal dB"
    id: wifi_signal_db
    update_interval: 60s
    entity_category: "diagnostic"

  - platform: copy
    source_id: wifi_signal_db
    name: "WiFi Signal Percent"
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "Signal %"
    entity_category: "diagnostic"
    device_class: ""

button:
  - platform: restart
    name: "Restart"
    entity_category: config

  - platform: factory_reset
    name: "Factory Reset"
    id: Reset
    entity_category: config

  - platform: safe_mode
    name: "Safe Mode"
    internal: false
    entity_category: config

output:
  - platform: esp8266_pwm
    id: red_output
    pin: GPIO4
    min_power: 0.000499
    max_power: 1
    zero_means_zero: true
  - platform: esp8266_pwm
    id: green_output
    pin: GPIO12
    min_power: 0.000499
    max_power: 1
    zero_means_zero: true
  - platform: esp8266_pwm
    id: blue_output
    pin: GPIO14
    min_power: 0.000499
    max_power: 1
    zero_means_zero: true
  - platform: esp8266_pwm
    id: white_output
    pin: GPIO5
    min_power: 0.01
    max_power: 0.9
    zero_means_zero: true
  - platform: esp8266_pwm
    id: ct_output
    inverted: true
    pin: GPIO13
    min_power: 0.01
    max_power: 0.9
    zero_means_zero: true

light:
  - platform: rgbct
    id: rgbct_light
    name: "RGBCCT_Bulb"
    restore_mode: ${light_restore_mode}
    red: red_output
    green: green_output
    blue: blue_output
    white_brightness: white_output
    color_temperature: ct_output
    cold_white_color_temperature: 153 mireds
    warm_white_color_temperature: 500 mireds
    color_interlock: ${color_interlock}

text_sensor:
  - platform: wifi_info
    ip_address:
      name: "IP Address"
      entity_category: diagnostic
    ssid:
      name: "Connected SSID"
      entity_category: diagnostic
    mac_address:
      name: "Mac Address"
      entity_category: diagnostic

  #  Creates a sensor showing when the device was last restarted
  - platform: template
    name: 'Last Restart'
    id: device_last_restart
    icon: mdi:clock
    entity_category: diagnostic
#    device_class: timestamp

  #  Creates a sensor of the uptime of the device, in formatted days, hours, minutes and seconds
  - platform: template
    name: "Uptime"
    entity_category: diagnostic
    lambda: |-
      int seconds = (id(uptime_sensor).state);
      int days = seconds / (24 * 3600);
      seconds = seconds % (24 * 3600);
      int hours = seconds / 3600;
      seconds = seconds % 3600;
      int minutes = seconds /  60;
      seconds = seconds % 60;
      if ( days > 3650 ) {
        return { "Starting up" };
      } else if ( days ) {
        return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else if ( hours ) {
        return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else if ( minutes ) {
        return { (String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else {
        return { (String(seconds) +"s").c_str() };
      }
    icon: mdi:clock-start

time:
  - platform: sntp
    id: sntp_time
  # Define the timezone of the device
    timezone: "${timezone}"
  # Change sync interval from default 5min to 6 hours (or as set in substitutions)
    update_interval: ${sntp_update_interval}
  # Set specific sntp servers to use
    servers:
      - "${sntp_server_1}"
      - "${sntp_server_2}"
      - "${sntp_server_3}"
  # Publish the time the device was last restarted
    on_time_sync:
      then:
        # Update last restart time, but only once.
        - if:
            condition:
              lambda: 'return id(device_last_restart).state == "";'
            then:
              - text_sensor.template.publish:
                  id: device_last_restart
                  state: !lambda 'return id(sntp_time).now().strftime("%a %d %b %Y - %I:%M:%S %p");'

script:
  - id: fast_boot_script
    then:
      - if:
          condition:
            lambda: return ( id(fast_boot) >= 3 );
          then:
            - lambda: |-
                ESP_LOGD("athom-rgbct-light.yaml", "Now the counter is greater than or equal to 3, perform reset device and reboot");
                id(fast_boot) = 0;
                fast_boot->loop();
                global_preferences->sync();
                auto call = id(rgbct_light).turn_on();
                call.set_transition_length(500);
                call.set_brightness(1.0);
                call.set_color_mode(ColorMode::RGB);
                call.set_rgb(0.0, 0.0, 1.0);
                call.perform();
            - delay: 5s
            - button.press: Reset
      - lambda: |-
          id(fast_boot) += 1;
          fast_boot->loop();
          global_preferences->sync();
          ESP_LOGD("athom-rgbct-light.yaml", "Now the counter is %d.  Reset the device when the counter is greater than or equal to 3", id(fast_boot));
      - delay: 10s
      - lambda: |-
          ESP_LOGD("athom-rgbct-light.yaml", "Reset counter");
          id(fast_boot) = 0;
          fast_boot->loop();
          global_preferences->sync();

powyżej gotowe - to jest wstępny kod bez obsługi UDP (wyszło 325 linii)
musisz go wkleić w IDE zamiast dotychczasowego kodu, następnie skompilować (aktualizując przez OTA - Install i pierwsza opcja u góry)

Jak dasz znać, że się wszystko świetnie udało (bo: zwalidowałem - OK, skompilowałem - OK, ale nie mam sprzętu by to przetestować w praktyce) przejdziemy do próby dołożenia UDP
wersja softu ESPHome w integracji powinna się zmienić

EDIT
Dobra, moja robota w kubeł, możesz też sobie darować, no chyba, że chcesz uczyć się ESPHome, niestety myślałem, że czytałeś dokumentację którą podlinkowałeś - “efekt WLED” wymaga platformy światła neopixelbus a w tej żarówce masz platformę rgbct

koleżka z filmiku też oczywiście ma neopixelbus

No bez jaj. Jak wybierałem żarówkę to wszędzie pisało, że hop siup działa świetnie itd. Za co się nie spróbuję to piachem w ryj. Czyli najsensowniej byłoby przeflashować (jak się da a powinno) na wled-a, i tam go dodać wnioskuję.

A nie działa świetnie?
Wprawdzie to jakaś tania chińszczyzna, którą sprzedawcy udało się użyć z otwartym oprogramowaniem.

Nie mam bladego pojęcia czy użyjesz tej żarówki w sposób jaki sobie wymarzyłeś, ale widzę, że w innych ofertach mietli prawdopodobnie identyczne (ale tego nie jestem w stanie stwierdzić) z firmware WLED.

Moje WLEDy DIY nie miały takich opcji, bo utknąłem z nimi na jakiejś archaicznej wersji WLED (bo użyłem za cienki sprzęt - niedoszacowaniem jak wzrosną wymagania sprzętowe projektu WLED, więc ja nawet nigdy nie miałem możliwości uruchomienia UDP, jakkolwiek… hmm w mojej konstrukcji mógłbym użyć tego o czym marzysz, bo to jest na WS2812).


Przy migracji na WLED teoretycznie możesz uwalić żarówkę!
(tzn. jest to stosunkowo dość mocno prawdopodobne, ale skoro to co masz Cię nie zadowala… to nie będzie tragedii gdy ją ewentualnie uceglisz)

Moim zdaniem ruch jest prosty - najpierw robisz OTA (z webserwera żarówki) do tego softu tzw. przejściowego, bo ESP8285 ma drastycznie małe zasoby
https://github.com/athom-tech/athom-configs/raw/refs/heads/main/ESP8266_MINI.bin
a z niego do docelowego WLED (ale oczywiście na repo nie ma tego zorganizowanego po bożemu…)

link wzięty ze sklepu… z ofert ze świecową E14
https://github.com/athom-tech/WLED/releases/download/0.14.4/Athom_15W_RGBCCT.bin.gz

Haha, czytałeś to?
https://kno.wled.ge/basics/compatible-controllers/#controllers-with-wled-pre-installed

Transparency Notice

Warning Products listed below under the name “Athom” are offered by the company ATHOM Technology Co., Ltd., based in China, which is not affiliated in any way with the European company Athom B.V., makers of the Homey smart home platform. There is an ongoing legal process against ATHOM Technology Co., Ltd. for possible trademark infringement.

A więc kod działa. Teraz mogę przynajmniej wstrzyknąć jakieś efekty. Co do udp, to albo przeróbki albo zakup wersji wled na co się zdecyduję. Jednak taką na esphome dokupię jeszcze jedną i do klopa będzie komplet. :slight_smile:
Diękuję za poświęcony czas. Nie wiem czemu tak jest, robię ogromny research, miliony prób, potem pokornie zwracam się o pomoc byle by już to zakończyć, żeby się okazało, że to nie mogło działać od samego początku. Z E1.31 rozumiem ta sama sytuacja.

Wydaje mi się, że zbyt optymistycznie podchodzisz do możliwości, one z upływem czasu się rozwijają, ale często jakimś ograniczeniem jest sprzęt.

Tak z innej beczki nie spotkałem jeszcze jutubera czy blogera, który byłby w stanie przedstawić wszelkie aspekty tego typu rozwiązań…

Dlatego trzeba czytać dokumentację dogłębnie i niestety akurat ESPHome ma dokumentację trudną dla początkujących, ale gdybyś przeczytał dokumentację platformy światła od początku, to byś zauważył, że najpierw w niej masz efekty działające z dowolną platformą sprzętową, potem tylko te dla adresowalnych LEDów, a na koniec tylko neopixelbus, a w przykładach YAMLi masz tam zawsze zawarte tylko elementy obowiązkowe.

nie rozumiem o czym mówisz…

e1.31 to protokół oparty na udp ale tak już wiem, ze ta sama sytuacja. Gdybym nie był świeży w temacie HA to bym bardziej rozumiał budowę yaml i te opisy popełniając mniej oczywistych błędów. Ale że jestem osobą która jak nie zrobi sama to się nie nauczy, i nie ważne ile wcześniej przeczytamto co jak co ale dzisiaj wciągnąłem dużą dawkę wiedzy.

1 polubienie