Dzień dobry.
Na wstępie chciałbym się przywitać ze wszystkimi, ponieważ jestem nowy i dopiero dołączyłem do forum.
Moja przygoda z HA zaczęła się dzięki temu forum jakieś 2 lata i trwa do dziś. Do tej pory radziłem sobie sam z mniejszymi bądź większymi problemami, aż do teraz, kiedy nie mogę rozwiązać problemu.
Przechodząc do sedna postaram się najlepiej jak będę umiał nakreślić problem.
Problem dotyczy integracji esphome z płytką led&digits na TM1638, na wyświetlaczu wyświetlam godzinę i temperaturę zewnętrzną. Dioda nr 8 pokazuje stan przekaźnika (domofonu) z innego esp, a przy podwójnym kliknięciu przycisku nr 8 zmienia się stan przekaźnika.
Założenie było takie, aby po wciśnięciu przycisku nr 1 na wyświetlaczu pojawiła się na 10 sekund informacja z temperaturą CWU, a po upływie czasu wyświetlacz wrócił do stanu poprzedniego tj. zegar z temperaturą zewnętrzną.
zamieszczę fragmenty kodu który zmodyfikowałem z filmu na YT:
#####################
...
captive_portal:
sensor:
- platform: homeassistant
id: temp_cwu
entity_id: sensor.temp_cwu
time:
- platform: homeassistant
id: homeassistant_time
globals:
- id: led_disp
type: std::string
restore_value: no
initial_value: ""
- id: led_disp_current
type: std::string
restore_value: no
initial_value: ""
display:
- platform: tm1638
id: led_disp_actual
stb_pin: 0
clk_pin: 2
dio_pin: 3
intensity: 1
update_interval: 1s
lambda: |-
if (strlen(id(led_disp).c_str()) == 0) {
id(led_disp_current).clear();
it.print(" ");
it.printf("%s %.1f", id(homeassistant_time).now().strftime("%H.%M").c_str(), id(temp_zewnetrzna).state);
}
else {
if (strcmp(id(led_disp).c_str(), id(led_disp_current).c_str()) != 0) {
id(led_disp_current).clear();
id(led_disp_current).append(id(led_disp));
// Clear the display and then print.
it.print(" ");
it.print(id(led_disp).c_str());
}
}
binary_sensor:
- platform: homeassistant
id: domofon
entity_id: switch.domofon
publish_initial_state: true
on_state:
- if:
condition:
- binary_sensor.is_on: domofon
then:
- logger.log: "LED8 on"
- output.turn_on: led8
else:
- logger.log: "LED8 off"
- output.turn_off: led8
- platform: tm1638
name: "TM1638 Button 1"
id: tm1638Button1_p2
key: 0
on_click:
then:
- lambda: |-
#chodzi mi dokładnie o tą linikę:
id(led_disp) = "cwu " + esphome::to_string(temp_cwu);
- delay: 10
- lambda: |-
id(led_disp) = "Disabled";
- delay: 1s
- lambda: |-
id(led_disp).clear();
- platform: tm1638
name: "TM1638 Button 8"
id: tm1638Button8_p2
key: 7
on_double_click:
- if:
condition:
- binary_sensor.is_on: domofon
then:
- logger.log: "domofon autolock disabled"
- homeassistant.service:
service: "switch.toggle"
data:
entity_id: "switch.domofon"
- lambda: |-
id(led_disp) = "domofon";
- delay: 1s
- lambda: |-
id(led_disp) = "Disabled";
- delay: 1s
- lambda: |-
id(led_disp).clear();
else:
- logger.log: "domofon autolock enabled"
- homeassistant.service:
service: "switch.toggle"
data:
entity_id: "switch.domofon"
- lambda: |-
id(led_disp) = "domofon";
- delay: 1s
- lambda: |-
id(led_disp) = "Enabled";
- delay: 1s
- lambda: |-
id(led_disp).clear();
output:
- platform: tm1638
id: led8
led: 7
############### K O N I E C ################
Jeżeli pozostawię samo
id(led_disp) = "cwu ";
jest OK, tylko nie wiem jak zapisać żeby esp odczytał wartość temp_cwu z HA i ją wyświetlił za napisem cwu. Z góry dziękuję za wszystkie sugestie i mam nadzieję, że nikogo nie zanudziłem, jak tak to przepraszam
Pozdrawiam
Macio