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.
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.
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).
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
ale nie możesz modyfikować tego zdalnego kodu, bo to nie twoje repozytorium
masz 2 możliwości
albo kod przygotować jako lokalny (co spróbuję zaraz zrobić - poczekaj na komentarz, że to gotowe, ale eksperymentować już na nim będziesz sam)
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
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…)
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.
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.
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.