Przypisanie wartości encji w funkcji

Witam.

Mam problem z przypisaniem wartości do encji która została sztucznie stworzona jako Pomocnik w Konfiguracji.

Dla rozjaśnienia aktualny fragment Funkcji:

// Deklaracje czujniki temperatury (*0,1);
var t = [];
var tHa = [];
t[0] = msg.payload.response.ia7[0]; // Piec zasilanie
tHa[0]=input_number.tempcopieczasilanie;
t[1]=msg.payload.response.ia8[0]; // CO zasilanie;
tHa[1]=input_number.tempcozasilanie;
t[2]=msg.payload.response.ia9[0]; // CO powrót;
tHa[2]=input_number.tempcopowrot;
t[3]=msg.payload.response.ia6[0]; // CWU góra;
tHa[3]=input_number.tempcwugora;

for (let i=0; i<t.length; i++) {
tHa[i] =(t[i]/10);
}

tablica t - zawiera wartości do wpisania do encji pomocnika
tablica tHa - zawiera nazwy encji do których chce przypisać wartość.

błąd który wywala mi debuger to:
ReferenceError: input_number is not defined (line 5, col 8)

Wstawienie nazwy encji w apostrofy też nic nie daje.

zanim spróbuje doradzić jak zapisać wartość do encji to mam pytanie czy ta wartość, którą chcesz zapisać do encji jest Tobie potrzebna w HA? Czy to tylko po to aby użyć tej wartości w innym procesie?

Natomiast teraz pomoc w samym zapisie wartości do encji.
Nie możesz do encji odwoływać się bezpośrednio z funkcji bo NR nic nie wie o istnieniu takiej encji. Aby zapisać wartość do encji musisz użyć nodu “call service” dedykowanego dla HA. Np może to wyglądać tak:
image
i teraz np w nodzie function poprzedzającym wywołanie call service podajesz dane jakie chcesz przekazać do encji. W zależności jaki rodzaj pośrednika wybrałeś takie będziesz miał możliwości np dla listy z przykładu powyżej musisz uzupełnić parametr options, który odpowiada za pozycję listy.

Dziękuję, wypróbuję jak wrócę do domu.
Mam zewnętrzne urządzenie pod które podpięte są czujniki temperatury, i liczniki energii. Dostęp do niego jest przez wywołanie adresu URL metodą GET. Zwraca rejestr przechowywanych parametrów w postaci pliku XML.

Chce te dane przekazać do HA i mieć rejestr ich zmian, bo dotyczą instalacji centralnego ogrzewania i wody użytkowej (temperatur). Urządzenie docelowo będzie sterowało całym Centralnym Ogrzewaniem, a HA ma sterować tym urządzeniem i służyć jako rejestrator.

Gdzieś poełniam blad i nie moge znaleść miejsca…

wypróbowałem dwie opcje:
Pierwsza łączy się z serwerem ale nie aktualizuje wartości encji

2020-07-08 11_54_25-Node-RED - Home Assistant

Druga na podstawie Twojego screenshota:


w tym przypadku występuje API Error

home-assistant.log:

Traceback (most recent call last):
File “/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py”, line 130, in handle_call_service
connection.context(msg),
File “/usr/src/homeassistant/homeassistant/core.py”, line 1222, in async_call
processed_data = handler.schema(service_data)
File “/usr/local/lib/python3.7/site-packages/voluptuous/validators.py”, line 208, in call
return self._exec((Schema(val) for val in self.validators), v)
File “/usr/local/lib/python3.7/site-packages/voluptuous/validators.py”, line 287, in _exec
raise e if self.msg is None else AllInvalid(self.msg, path=path)
File “/usr/local/lib/python3.7/site-packages/voluptuous/validators.py”, line 283, in _exec
v = func(v)
File “/usr/local/lib/python3.7/site-packages/voluptuous/schema_builder.py”, line 272, in call
return self._compiled(, data)
File “/usr/local/lib/python3.7/site-packages/voluptuous/schema_builder.py”, line 817, in validate_callable
return schema(data)
File “/usr/local/lib/python3.7/site-packages/voluptuous/schema_builder.py”, line 272, in call
return self._compiled(, data)
File “/usr/local/lib/python3.7/site-packages/voluptuous/schema_builder.py”, line 594, in validate_dict
return base_validate(path, iteritems(data), out)
File “/usr/local/lib/python3.7/site-packages/voluptuous/schema_builder.py”, line 432, in validate_mapping
raise er.MultipleInvalid(errors)
voluptuous.error.MultipleInvalid: required key not provided @ data[‘value’]

Na razie próbuję wstawić wartość na sztywno, aby uniknąć błędów z typami danych.

Po kilku próbach i przeanalizowaniu dokumentu: HA INPUT NUMBER dziś jak wrócę z pracy zdefiniuje encje bezpośrednio w pliku configuration.yaml, a nie sekcji Pomocnicy w Konfiguracji - zobaczymy czy to zrobi różnice.


tak narazie jest ona widoczna w narzędziach deweloprskich.

Dziękuje za pomoc i poświęcony czas.

To nic nie zmieni. To musi działać nawet gdy dodasz encję w GUI. Jutro przygotuje konkretny proces i Tobie wyślę bo dzisiaj zero czasu.

Problem rozwiązany dzięki lekcji nr 5 n YT :slight_smile:
Wielkie podziękowania dla @artur za jego poświęcony czas w tworzenie społeczności HA i tworzenie Tutoriali.


a4

@Marcin_Domański dziękuję bardzo i cieszę się że pomogło. Oby reszta materiałów była równie przydatna :smiley:

Cześć, Ja amator NR walczę od dłuższego czasu z tematem zapisem wartości encji typu sensor do HA. Jak używam encji typu Input Number to działa poprawnie. Wartości sensora nie mogę zapisać.

flows.json (1,3 KB)

Jakie to sensory w NR i do czego chcesz to zapisać w HA?

Mowa o sensorze stworzonym przez pomocnika - Template Sensor, zatem żadna integracja nie steruje wartościami tego sensora. Generalnie - chodzi o obliczanie współczynnika COP dla przeróbki klimatyzatora na pompę ciepła (na podstawie pobranej energii elektrycznej i wytworzonej energii termicznej).



flows_COP.json (5,0 KB)

Skoro to tylko prezentacja wartości wystarczy pomocnik typu text.
Dobrze byłoby zobaczyć jeszcze co wychodzi z funkcji obliczającej COP.

To co widać w Debug messages. Dodałem pomocnika “input_text.cop_text” ale on nie zmienia wartości, a będąc bardziej precyzyjnym - ma cały czas status “unknown”. O dziwo - o czym wspominałem wcześniej, encja “input_number.cop_day” poprawnie przypisuje wartości w nodzie Call Service. Też dziwne bo Debug_55 za Call Service zawsze zwraca zero.
Mam też wrażenie że nie widzę wszystkich informacji w oknie Debug messages, ale nie potrafię tego zmienić… mówiłem - amator :wink:


w Call service pole Data powinna być ustawiona jako typ JSON i

{"value": "{{payload}}"}

Serdeczne dzięki za pomoc :slight_smile:

Kombinowałem w ten sposób wcześniej, jednak nie przyniosło to spodziewanych rezultatów - generalnie Call Service w żaden sposób nie zapisuje encji typu sensor. Gdy wykorzystałem encje typu “input_text”, czy też wcześniej “input_number” - to jest OK, Call Service przypisuje wartości. Dla encji SENSOR - nie przypisuje. Generalnie osiągnąłem cel wykorzystując “input_number”, chyba nie ma co wałkować tematu dalej.


COP_Text1

Screenshot - 08.09.2024 , 08_36_55

Dzięki Artur,

Zdaje się że muszę coś doinstalować… no to do roboty…
Edist_Sensor_Node_1

Ok…nie doczytałem istoty Twojego problemu. :slight_smile:
Nie da się bezpośrednio z NR w łatwy sposób ustawić wartości template sensor.
Ten pomocnik, swoją wartość template value tworzy na podstawie stanu innych encji.
Mógłbyś wtedy przenieść obliczenia COP z NR do HA
@artpc … skąd wytrzasnąłeś te nody entities ? :thinking: … edit - nie było pytania :laughing:

Inny sposób - jeśli używasz mqtt - wartość zapisać w mqtt i dodać w HA taką encję.

Dzięki @artpc ale nie mogę ogarnąć tematu - jestem cinki jak PolSilver…

Zainstalowałem dodatek NR Companion ale podczas edycji sensora ciągle dostaje komunikat że potrzebny jest owy dodatek. Oczywiście Restart HA x 2, nawet po dodaniu encji. Póki co efekt taki że encje stworzone w NR są widoczne w HA ale nie zmieniają stanu.

@RobinI30 - tak używam MQTT.




Jęśli używasz i cokolwiek kumasz to zamiast call service wstaw nod mqtt_out.
Opublikuj payload w temacie (topic) np.COP.
Następnie ręcznie w HA utwórz wymaganą encję sensor, który będzie swój stan ustawiał z tego co zapisałeś wcześniej w topic.
Niestety na tą chwilę nie jestem w stanie zamieścić żadnego przykładu.

Tak naprawdę do obliczenia i wyświetlenia COP nie potrzebujesz NR i MQTT.:grinning:
Wystarczy, opanujesz template sensor gdzie bezpośrednio da się obliczyć value cop z sensorów thermal i electric.