UWAGA: Strona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.
W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉
Za niedogodności z góry przepraszam, admin
Witam.
Pewnie dla użytkowników HA mój problem jest prosty do rozwiązania, ale ja dopiero zaczynam uczyć się obsługi i natrafiłem na problem, które nie jestem w stanie sam rozwiązać. Wszystkie rozwiązania znalezione w sieci są bardzo podobne, ale nie jestem w stanie ich przerobić tak aby działały u mnie.
Mam wgrane do NodeMCU ESPEasy a w nim zdefiniowane dwa wejścia jako Input. Pod jedno z nich mam podpięty przycisk a pod drugie przekaźnik. W samym esp mam wpis w zakładce "Rules", dzięki któremu każde wciśnięcie przełącznika powoduje zmianę stanu przekaźnika. Oczywiście stany są przekazywane do HA i to działa poprawnie, ale nie mogę utworzyć kodu, który działał by tak jak chcę. Poniżej zrzut z Esp.
A tutaj z HA
Poniżej definicje dla tej tablicy.
Jak zamiast tych dwóch przełączników "Button" i "Button monostabile" uzyskać tylko jeden przycisk "monostabile".
Nie potrafię przerobić kodu z tego przycisku monostabilnego tak aby on załączał się po kliknięciu na chwilę i podawał impuls na Esp, czyli symulował wciśnięcie teko przycisku na ESP.
Może ktoś z doświadczonych użytkowników mógł by pokazać jak taki kod powinien wyglądać w tym moim układzie.
sensor: # stan ESP 033 / Button - platform: mqtt name: "Stan Button" state_topic: "ESP_Easy_033_7/Button/State" # stan ESP 033 / Relay - platform: mqtt name: "Stan Relay" state_topic: "ESP_Easy_033_7/Relay/State" switch: - platform: mqtt name: "Relay" state_topic: "ESP_Easy_033_7/Relay/State" command_topic: "ESP_Easy_033_7/Relay/State/cmd" payload_on: "GPIO,12,1" payload_off: "GPIO,12,0" optimistic: true qos: 0 retain: true value_template: "{{ value.x }}" - platform: mqtt name: "Button" state_topic: "ESP_Easy_033_7/Button/State" command_topic: "ESP_Easy_033_7/Button/State/cmd" payload_on: "GPIO,14,1" payload_off: "GPIO,14,0" optimistic: true qos: 0 retain: true value_template: "{{ value.x }}" - platform: template switches: skylight: friendly_name: "Button monostabile" value_template: "{{ is_state('sensor.skylight', 'on') }}" turn_on: service: switch.turn_on data: entity_id: switch.skylight_open turn_off: service: switch.turn_on data: entity_id: switch.skylight_close
Czyli potrzebujesz po prostu jeden switch:
<code> - platform: mqtt unique_id: Przelacznik name: "Przekaznik" state_topic: "ESP_Easy_033_7/Relay/State" command_topic: "ESP_Easy_033_7/Relay/State/cmd" availability_topic: "ESP_Easy_033_7/lwt" payload_available: "connected" payload_not_available: "disconnected" payload_on: "GPIO,12,1" payload_off: "GPIO,12,0" state_on: "on" state_off: "off" qos: 0 retain: true </code>
Powstawiałem to co mi mniej wiecej pasowało , trzeba zweryfikować topic lwt ( i jakie podaje informacje) , komendy sterowania .itd.
@marcingajda
Dziękuję za odpowiedź, niestety z moim poziomem wiedzy nie jestem w stanie tego kodu dopasować. Po wpisaniu kodu dostałem nieaktywny przycisk. Co trzeba zrobić aby uzyskać z tego kodu aktywny przycisk, który po kliknięciu przekazywał impuls do Esp i po sekundzie się znowu wyłączał.
No availability_topic i związane z nim payload_available i payload_not_available są do sprawdzenia. To temat ,gdzie ESPEasy po podłączeniu do MQTT podaje tzw lwt. Trzeba go podać , i podać co podaje jak ESPEasy jest podłączone , i jaka wiadomość pozostaje , jak ESPEasy się rozłącza.
Tak wygląda konfiguracja przycisku
- platform: mqtt name: "Button" state_topic: "ESP_Easy_033_7/Button/State" command_topic: "ESP_Easy_033_7/Button/State/cmd" qos: 0 payload_on: "GPIO,14,1" payload_off: "GPIO,14,0" state_on: "1" state_off: "0" retain: true
Wyłączenie przycisku musisz dodać timer w regułach espeasy
@marcingajda
Sprawdziłem lwt. Poniżej zrzut wyników.
i kod, który mam teraz. Przycisk jest już aktywny i się włącza na chwilę a potem wyłącza, tylko nie przekazuje polecenia. Chciałbym zachować ten pierwszy przycisk, który bezpośrednio załącza lub wyłącza przekaźnik, ale też dodać ten drugi przycisk, który ma podać tylko na chwilą stan niski a potem znów wyłączyć. "Button" w ESPEasy jest podciągnięty do plusa więc tam cały czas powinien być stan 1 a tylko na chwilę wciśnięcia przycisku powinien się pokazywać stan 0 (jak wyłączę podciągnięcie do 1 też nie dziła podanie impulsu). Z poziomu samego ESP działa poprawnie, czyli każde wciśnięcie powoduje przełączenie stanu przekaźnika (dokładniej jak puszczam przycisk i o takie działanie mi chodzi).
Obserwuję w MQTT Explorer na wartości i widzę, że przychodzi s HA cały czas wartość 1. Powinno być przesłane 0 a potem 1. Czy tego nie da się zrobić bez automatyzacji ? (Dopiero będę się tego uczył, na razie mam problem z uruchomieniem Node-RED, cały czas mam niedostęny serwer HA. Muszę poszukać jak to skonfigurować).
switch: - platform: mqtt name: "Relay" state_topic: "ESP_Easy_033_7/Relay/State" command_topic: "ESP_Easy_033_7/Relay/State/cmd" payload_on: "GPIO,12,1" payload_off: "GPIO,12,0" optimistic: true qos: 0 retain: true value_template: "{{ value.x }}" - platform: mqtt unique_id: Przelacznik name: "Przekaznik" state_topic: "ESP_Easy_033_7/Button/State" command_topic: "ESP_Easy_033_7/Button/State/cmd" availability_topic: "ESP_Easy_033_7/status/LWT" payload_available: "Connected" payload_not_available: "Connection Lost" payload_on: "GPIO,14,1" payload_off: "GPIO,14,0" state_on: "on" state_off: "off" qos: 0 retain: true
Ok , mam nadzieję ,że ESPEasy reaguje na sterowanie przyciskiem przez MQTT ( a nie tylko fizyczną zmianę stanu). Może trzeba sterować bezpośrednio stycznikiem , tak jak to @lukas121 pisał.
Skoro stan 0 GPIO14 powoduje załączenie przycisku , to zamień odpowiednie linie:
payload_on: "GPIO,14,0" payload_off: "GPIO,14,1"
Dodatkowo widzę ,że topic ESP_Easy_033_7/Button/State ma wartości albo 0 albo pewnie 1 ,więc to też trzeba zmienić:
state_on: "1" state_off: "0"
@marcingajda
Na razie zostawię tak jak poniżej. Polecenie jest przekazywane, tylko trzeba kliknąć dwa razy na przełącznik i wtedy działa poprawnie. Niezależnie of stanów tych przełączników gdy kliknę na przycisk w ESP to przełączy się stan na przeciwny. Do testów, które chcę robić, to mi na razie wystarczy.
- platform: mqtt unique_id: Przelacznik name: "Przekaznik" state_topic: "ESP_Easy_033_7/Button/State" command_topic: "ESP_Easy_033_7/Button/State/cmd" availability_topic: "ESP_Easy_033_7/status/LWT" payload_available: "Connected" payload_not_available: "Connection Lost" payload_on: "GPIO,14,1" payload_off: "GPIO,14,0" state_on: "1" state_off: "0" qos: 0 retain: true