Ściemnij i rozjaśnij światło

Za pomocą kolegi udało mi się zbudować automatyzację, która umożliwia mi ściemnianie lub rozjaśnianie lampy.
Automatyzacja wygląda w następujący sposób:

- id: sypialnia
  alias: salon_sciemnij
  trigger:
    - platform: state
      entity_id: sensor.przelaczniksypialnia_click
      to: 'single'
  condition:
    condition: and
    conditions:
        condition: state
        entity_id: light.lampka_nocna
        state: "on"
  action:
    - service: light.turn_on
      entity_id: light.lampka_nocna
      data_template:
        brightness: >
            {% set suggested = states.light.lampka_nocna.attributes.brightness|int + 31 %}
            {% if suggested < 200 %}
            {{ suggested }}
            {% else %}
            200
            {% endif %}

- id: sypialnia_sciemnij
  alias: salon_sciemnij
  trigger:
    - platform: state
      entity_id: sensor.przelaczniksypialnia_click
      to: 'double'
  condition:
    condition: and
    conditions:
        condition: state
        entity_id: light.lampka_nocna
        state: "on"
  action:
    - service: light.turn_on
      entity_id: light.lampka_nocna
      data_template:
        brightness: >
            {% set suggested = states.light.lampka_nocna.attributes.brightness|int - 31 %}
            {% if suggested < 200 %}
            {{ suggested }}
            {% else %}
            200
            {% endif %}

Czy takie coś można zrobić w Node-RED?
Chciałbym mieć spójność w moim HA (teraz światłami zarządzam w NR)

Marcin

1 Like

Tak da się to zrobić. Rozumiem że rozjaśnianie działa na pojedyncze i podwójne naciśnięcie gdy lampka włączona?

Tak.
Dostaje w payload single lub double

no to nod switch który rozdziela te dwa zdarzenia i na każde z nich ustalasz jakąś jasność. Jeżeli ta jasność ma przyrastać za każdym naciśnięciem to przed jej ustawieniem odczytujesz aktualną i dodajesz ile tam chcesz :slight_smile:

A jak odczytać aktualna wartość a następnie dodać do niej np. 10

do odczytania używasz nodu current_state. następnie musisz znaleźć w obiekcie msg miejsce w którym trzymana jest wartość jasności (w tym celu użyj nodu debug). Pewnie będzie to gdzieś w data.attributes.brightness i wystarczy w np. nodzie function do tego dodać +10 i wywołać nod callservice

Skąd wiesz, że to atrybut “data.attributes.brightness” ?

Bo to najczęściej tak jest dla encji typu light. Jednak po to masz nod debug żeby sobie zawsze móc to sprawdzić.

Zrobiłem tak:

ale nic nie zwraca idzie to jakoś wywołać?

Jako pierwszy node dodaj inject i w debugu jako Output wybierz complete msg object. Po naciśnięciu timestamp dostaniesz coś takiego w debug message:

Dobra pobrałem wartość z lampy jak teraz ją sensownie podnieść i co najciekawsze jak ją wstrzelić do usługi call service w postaci

> {
>     "entity_id": "light.lampka_nocna",
>     "rgb_color": [
>         255,
>         194,
>         0
>     ],
>     "brightness": "30"
> }

W załączeniu proces który na każde wywołanie (przez nod inject) podnosi wartość jasności o 10.
Wystarczy w nim zmienić lampę z mojej na Twoją i będzie działać. Upewnij się jeszcze tylko czy atrybut brightness u Ciebie jest w tym samym miejscu co u mnie. Jak nie to zmień w nodzie funkcji lokalizację do atrybutu brightness.
Oczywiście zamiast nodu inject jako start możesz użyć swoich włączników.
jasnosc-marcin.json (1,5 KB) .

Przetestowane działa :slight_smile:

Działa Ci to jak chciałeś ? U mnie jakiś nie specjalnie dobrze. Gdy klikam kilka razy szybko np ściemnianie mam:

"Call-service API error. Error Message: expected int for dictionary value @ data['brightness']"

W debug:
{"_msgid":"1e5598b7.892377","payload":"unavailable","topic":"","data":{"entity_id":"light.floor_light","state":"unavailable","attributes":{"min_mireds":153,"max_mireds":588,"effect_list":["Strobe color","Police","Christmas","RGB","Random Loop","Fast Random Loop","LSD","Slowdown","Disco","Strobe epilepsy!","Alarm","Police2","WhatsApp","Facebook","Twitter","Slow Temp","Stop"],"friendly_name":"Floor Light","supported_features":63,"assumed_state":false},"last_changed":"2020-11-25T13:17:13.729444+00:00","last_updated":"2020-11-25T13:17:13.729444+00:00","context":{"id":"09a0bdb14c310061744ef066bff7b627","parent_id":null,"user_id":"5a38c343011c49fe8b19f57ceb3e401a"},"timeSinceChangedMs":40368,"original_state":"unavailable"}}

Nie nadąża odczytywać stanu ? Dobrze rozumiem ?
W pudełkowej automatyzacji jakoś to lepiej działa:

alias: ‘Włącz podłoga [jaśniej]’

description: ‘’
trigger:
- platform: device
domain: mqtt
device_id: 1dda5737cc11cc74d4ee18553140df6c
type: action
subtype: hold
discovery_id: 0x00158d000404d1f5 action_hold
condition: []
action:
- type: brightness_increase
device_id: 4acca3ab6cbbe4084579fcd0bf9d8a52
entity_id: light.floor_light
domain: light
mode: single

Jest w Node_RED jakis odpowiednik tego type: brightness_increase ?

Masz dodakowe palety :


1 Like

Cześć.
A jak w function node zrobić zmianę koloru?
Moja żarówka wygląda tak:
image

Gdzieś w czeluściach internetu znalazłem coś takiego, lecz niestety to nie działa:
image

Od razu zaznaczę, że nie ogarniam w ogóle tych funkcji.

Na razie wystarczy mi jeśli będę mógł zmienić na konkretny kolor. Bo zmiana na “kolejny” kolor chyba będzie level wyżej.