Cześć,
Może ktoś mógłby pomóc w rozwiązaniu następującego problemu. Mam włącznik, tylko wyjście GPIO z przekaźnikiem, sterowane czujnikiem binarnym (również GPIO z przyciskiem).
Chciałbym uzyskać następującą funkcjonalność w esphome:
Naciśnięcie włącza światło na jakiś określony czas np. 2 minuty, a po tym czasie wyłącza je.
Jeżeli w tym czasie ktoś naciśnie przycisk, czas wydłuża się o kolejne 2 minuty.
Moja obecna konfiguracja esp8266 niestety nie działa poprawnie, po naciśnięciu przycisku odlicza poprawnie 2 minuty i wyłączą światło, niestety wcześniejsze wciśnięcie przycisku w czasie do 2 minut wyłącza światło.
Całość chciałbym uruchomić tylko na esphome, bez dodatkowych scen w home assistant.
Moja konfiguracja:
na początek spróbowałbym najprościej (nie wiem czy to wystarczy, ale nie mam czasu na zabawę) czas się z pewnością nie wydłuży o 2 min. tylko co najwyżej do 2 min. (jeśli chcesz dodawać to trzeba wprowadzić jakąś zmienną)
@szopen
Dzięki, działa przez 5 minut, w tym czasie naciśnięcie przycisku nie zmienia stanu. Jest jakaś reguła by naciśnięcie przycisku w czasie tych 5 minut przedłużyło działanie tej funkcji o następne x minut?
script:
- id: hallway_light_script
mode: restart # Light will be kept on during 1 minute since
# the latest time the script is executed
then:
- light.turn_on: hallway_light
- delay: 1 min
- light.turn_off: hallway_light
...
on_...: # can be called from different wall switches
- script.execute: hallway_light_script
Użyłem NodeMCU v3 i przekaźnik z optoizolacją zasilany 5V.
Przekaźnik wejście IN1 podpięte pod ESP8266 PIN D7 (GPIO13)
Przycisk dzwonkowy podpiety pod ESP8266 PIN D1 (GPIO5).
Kod działa wyśmienicie, po zwarciu pinu D1 do masy włącza przekaźnik na 2 minuty.
Każde naciśnięcie przycisku D1 przedłuża do 2 minut działanie przekaźnika.
Wg powyższego kody ESPHome tak to nie działa, naciśnięcie przycisku wydłuża jednorazowo (tylko raz) czas do 2 minut, jeżeli naciśniesz 4 razy pokolei, czas nie wydłuży się o kolejne 4x 2 minuty (w sumie 8 minut), tylko ustawi czas na 2 minuty.
Próbuję zrobić oświetlenie automatyczne jak w przykładzie wyżej, ale zamiast przekaźnika 0n/off chciałbym wykorzystać PWM i w momencie wykrycia ruchu Led miałby się rozjaśnić i po danym czasie bez ruchu ściemnić płynnie do zera.
Próbowałem przerobić kod pod ESP32 LEDC Output
Naruszenie wejścia uruchamia skrypt, ale nie wysterowuje output
Próbowałem na różne sposoby, możecie podpowiedzieć jak to zrobić?
# Example configuration entry
output:
- platform: ledc
pin: GPIO19
id: gpio_19
# Example usage in a light
light:
- platform: monochromatic
output: gpio_19
name: "Led kuchnia"
#skrypt czasowka przekaznik
script:
- id: timer_script
mode: restart # Przekaznik bedzie wlaczony przez 2 minuty
# od ostatniego nacisniecia przycisku
then:
- output.turn_on: gpio_19
- delay: 1 min
- output.turn_off: gpio_19
# przycisk na pinie D1
binary_sensor:
- platform: gpio
pin:
number: 18
mode:
input: true
pullup: true
name: "Motion sensor"
on_press:
then:
- output.turn_on: gpio_19
- script.execute: timer_script
device_class: opening
To z pewnością nie możesz “na bezczelnego” próbować wysterować pinów wyjściowych (no nie tak działa PWM i to w ogóle nie jest metoda na uruchomienie jakiegoś zaawansowanego trybu wyjścia).
Pobaw się definiując wyjście jako światło light - wtedy będziesz miał dostępne takie funkcje jak ściemnianie i czas przejścia tego światła (a nie steruj GPIO)