Zapisanie stanu encji pod zmienną

Witam Wszystkich bardzo serdecznie.

Siedzę nad tym problemem 3 dzień - obejrzałem cały poradnik dotyczący Node-Red, szczególnie lekcję 9 a nadal jestem głupi jak but.
Chciałem zrobić sobie prosty przycisk na dashboardzie który zapisywałby po przyciśnięciu aktualną temperaturę do jakiejś zmiennej która następnie definiowałaby mi ustawienia alarmu na tej podstawie. Do tej pory udało mi się wykonać przycisk i uzyskać poprzez kontrolki event_state oraz current state zrzucenie aktualnej temp na debuga. Niestety nie mam pomysłu jak zapisać to do zmiennej - próbowałem sklecić jakąś funkcję ale mnie to przerasta. Próbowałem przez pomocników itp.
Poszukiwania na necie flow.get przynoszą same śmieci, nie znalazłem przykładu który pozwoliłby mi zapisać stan encji - może ktoś ma jakiś pomysł.

P.S. W wyniku dalszych poszukiwać udało mi się za pomocą kontrolki change przyporządkować payload z termometru do zmiennej globalnej (Mitemp).
Więc teraz kolejne pytanie - jeśli mam już zmienną globalną Mitemp jak dodać do niej np stałą wartość (np. Mitem +3) i jak ją potem wyświetlić na dashboardzie ??

Spróbuj prosto, w HA utwórz pomocnika “input_button” i “input_number” a w NR “events:state” → “current_state” → “function” → “input_number”
Coś takiego jak dobrze zrozumiałem
l2

PS. Sprawdziłem na temperaturze z OWM więc w funkcji spróbuj tak

var str = msg.payload;
msg.num = parseFloat((parseFloat(str) + 5).toFixed(2));
return msg;

… dodaje liczbę tu 5 i zaokrągla do 2 miejsc.

Bardzo dziękuję za wskazówki.

Gdybyś jeszcze mógł pokazać kontrolkę call_service bo cały czas mam komunikat “Call-service error. required key not provided @ data[‘value’]”

flows (8).json (3,2 KB)

Bardzo dziękuję - dzięki Twojej podpowiedzi problem rozwiązałem, choć analizowałem swój flow we wszystkich elementach i nie znalazłem błędu w rozumowaniu - oczywiście składni { “value”: num } to bym się w życiu nie domyślił a na necie pomimo wielu godzin nie znalazłem takiej wartości. Wychodzą brak znajomości programowania - niby to wszystko logiczne ale jak zawsze człowiek się na składni wywala.

Ja do zmiennej flow (można do global) zapisuje przez change (tu pokazywałem - MQTT których nodów używacie? - #11 przez gregusz), a potem w funkcji wywołuję flow i dodaje wartość. Mogę to pokazać, ale później, bo teraz jestem w pracy.

Super - jestem bardzo ciekaw, jak możesz wrzuć później to rozwiązanie, fajnie będzie operwoać na zmiennej global.

To ta sama metoda. Zmieniasz tylko flow na global. Mechanizm działania jest ten sam, tylko zasięg się zmienia. U mnie to idzie we flow od ogrzewania.


@zebaczpl mam taki kod w function:

var temp = flow.get("temp_duzy_set");

msg.payload =
{
  "current_heating_setpoint": temp+3,
  "system_mode": "heat",
}
return msg;

W tym linku wcześniej w change ustawiam daną wartość do flow, a flow.get to odczytuje. Daje do zmiennej i potem mozesz sobie na tym operować, dodawać itd.

Dziękuję.

Przy okazji natrafiłem na drobny problem przy porównywaniu wyników encji.
Wychodzi na to że problemem przy dodawaniu był źle interpretowany przecinek w wyniku (zamiast kropki) np.: ND pobierał z wyniku 25,3 tylko 25 i do niego dodawał 0,3 - wychodziło 25,3 zamiast 25,6 - pomogło użycie prostej funnkcji konwersji znaków:

var str = msg.payload;
str = str.replace(",",".");
msg.num = parseFloat(parseFloat(str));
return msg;

1 polubienie