Encja niedostępna obejście w NR

…a jest jakiś problem z użyciem noda get history ?

object
_msgid: "390f90d831f21ce1"
payload: array[4]
0: object
entity_id: "sensor.temperatura_inwertera"
state: "35"
attributes: object
last_changed: "2023-12-12T12:34:42.575000+00:00"
last_updated: "2023-12-12T12:34:42.575000+00:00"
1: object
entity_id: "sensor.temperatura_inwertera"
state: "34"
attributes: object
last_changed: "2023-12-12T12:34:55.249369+00:00"
last_updated: "2023-12-12T12:34:55.249369+00:00"
2: object
entity_id: "sensor.temperatura_inwertera"
state: "35"
attributes: object
last_changed: "2023-12-12T12:35:25.809139+00:00"
last_updated: "2023-12-12T12:35:25.809139+00:00"
3: object
entity_id: "sensor.temperatura_inwertera"
state: "34"
attributes: object
last_changed: "2023-12-12T12:38:25.514810+00:00"
last_updated: "2023-12-12T12:38:25.514810+00:00"
topic: ""
startdate: "2023-12-12T12:34:42.575Z"
enddate: "2023-12-12T12:54:42.575Z"
entity_id: "sensor.temperatura_inwertera"

Mam właśnie zamiar go użyć (choć w moim przypadku ostatni state mam “” (pusty), przedostatni “unknown” o dopiero trzeci od końca zawiera wartość liczbową - ale to pryszcz, ogarnę. Pytanie do Ciebie - jak wywołać (nie używając niebieskiego noda) te obiekty - jak odnieść się do nich bezpośrednio z kodu?

Tego jeszcze nie wiem, bo temat świeży :slight_smile: ale nie stanowi to problemu chyba?

…musisz przeszukiwać tablicę od końca, do czasu aż trafisz na wartość liczbową.

Tego jeszcze nie wiem, bo temat świeży :slight_smile: ale nie stanowi to problemu chyba?

Ok, może szkoda czasu, myślałem że Tak właśnie je Odczytujesz (z kodu). Ale chyba szkoda czasu na specjalne szukanie - wystawię po prostu w funkcji dedykowane wyjścia , które o ile zajdzie taka konieczność wyzwolą niebieskie nody z odpowiednim zakresem historii, przetworze tą historię, wyłuskam odpowiednie dane i wyjście wrzucę do mqtt, tym samym encje te objawią sie w cache i będą już dostępne dla “ogółu” :slight_smile: .
Chmmm - a może samo wywołanie historii spowoduje że dane pojawią się w cache? tak by wskazywała logika - sprawdzę i dam znać.

Sprawdziłem - niestety - dane się nie pojawiły.
Ok, ostatecznie zrobię to tak:

wartosc=0;
var test=-1
for(var i=ile-1;i>-1;i--){
test=parseFloat(msg.payload[i].state)
    if (!isNaN(parseFloat(test))) {
        i=-1
        wartosc=test
    }
}

pętla zatrzyma się po znalezieniu pierwszej (a w zasadzie ostatniej z historycznego punktu widzenia) wartości którą da się sparsowac do liczby zmiennoprzecinkowej. JAk nie znajdzie to zmienna wartosc pozostanie “zerem”.
Oczywiście można zastosować inną pętlę (np do…while) ale zastosowałem taką :slight_smile:

Zero nie jest dobrym wskaźnikiem niepoprawności danych liczbowych, ponieważ może należeć do zbioru poprawnych wartości.

Zero nie jest dobrym wskaźnikiem niepoprawności danych liczbowych, ponieważ może należeć do zbioru poprawnych wartości.

Tak, ale w tym przypadku przyjmuję, ze jak nie znajdę wartości, to zaczynam od zera. Poza tym nawet ostatnia wartość będąca zerem (np poprzedni init, który później nie został nadpisany przez kolejne rosnące wartości) po prostu nadpisze tutaj “świeżutko” zainicjowane zero. W zbiorze wyników będę miał ciąg zer. Ale oczywiście, w takich przypadkach należy użyć wartości, która nigdy nie wystąpi, jest to po prostu zwykła obsługa wyjątku. W moim konkretnym przypadku - przyjęcie wartości która ma zostać użyta jeżeli nie znajdę sensownej.
Ale wróćmy jaszcze do tego co zrobiłem z tą “wyłuskaną” wartością - wrzuciłem do mqtt i zgodnie z oczekiwaniem - nowy state encji pojawił się w “globalu”. zastanawiałem się czy można zamiast tego kroku po prostu w kodzie użyć:

global.set('homeassistant.homeAssistant.states["sensor.energia_hp_peak2_standby"].state', mojaWyluskanaWartosc)

ale nie udało się, system nie zwrócił też żadnego błędu.

@rafkan - edytor podpowiada, ze w związku z tym ze jest to trzecia odpowiedź do Robinl30, mogę wysłać mu wiadomość priv. Ale co by to wniosło do dyskusji, którą ktoś kiedyś może odnaleźć … oczywiście nie ma tu jakichś mega odkryć, ale w całości może komuś pomóc

global.set('homeassistant.homeAssistant.states["sensor.energia_hp_peak2_standby"].state', mojaWyluskanaWartosc)

ale nie udało się, system nie zwrócił też żadnego błędu.

Pokaż cały wycinek kodu.

Cześć, dzięki za zainteresowanie.
Nie mam tego w głównym kodzie - to był test odpalany z przycisku. W funkcji wpisałem jakąś wartość do zmiennej mojaWyluskanaWartosc, powiedzmy że była to wartość 1 i dalej - tak jak napisałem w poście czyli global.set …
nie udało się i system nie zwrócił błędu. Pytasz dlatego, aby upewnić się że sprawdziłem czy zmienna którą chcę zapisać do zmiennej globalnej istnieje? Tak, istnieje.
Jak wspomniałem,robiłem to w momencie restartu konfiguracji, czyli kiedy ta zmienna globalna jeszcze nie istniała w context (a dokładnie w tym momencie jest mi to potrzebne). Uznałem, że użyję mechanizmu, który na pewno “skonkretyzuje” tą zmienną - czyli mqtt (nie ma w tym specjalnego narzutu, bo te dane z liczników i tak publikuję przez mqtt). Oczywiście mam to zdefiniowane w głównej konfiguracji jako sensor.

O ile dobrze zrozumiałem?
Bezpośredni zapis do zmiennej homeassistant. może być nieskuteczny z powodu tego, że nie oddziaływuje na stan HA. Zapis może być krótkotrwały ponieważ natychmiast nadpisywany jest przez stan faktyczny HA. Zmienna synchronizowana jest jednokierunkowo. Aby to było trwałe trzeba by zrobić to przez usługę.

Zapis może być krótkotrwały ponieważ natychmiast nadpisywany jest przez stan faktyczny HA

No i tu jest sensowna myśl. System nie zwrócił błędu - bo zapisał, ale jednocześnie zaraz ta zapisana wartość została zmieniona przez HA. Jednak trochę to dziwne, - wychodzi na to ze te zmienne sa “jednokierunkowe” :slight_smile: na logikę - po co byłby dostępny set z poziomu NR?, Dobra, myślę że to wyczerpuje potrzebę dalszego drążenia

Można użyć w automatyzacjach

automation:
  trigger:
    - platform: homeassistant
      # Event can also be 'shutdown'
      event: start

MQTT trigger

automation:
  trigger:
    - platform: mqtt
      topic: "living_room/switch/ac"
      # Optional
      payload: "on"
      encoding: "utf-8"

Przykłady

 trigger:
    - platform: homeassistant
      event: start
  action:
    - service: system_log.write
      data:
        logger: "{{ this.entity_id }}"
        level: critical
        message: "**** HOME ASSISTANT START ****"

    - service: persistent_notification.create
      data:
        title: "Automation Startup"
        message: "Waiting for startup to complete."
        notification_id: hass_restart

https://www.home-assistant.io/docs/automation/trigger/

To jest funkcja właściwa dla “całego” NR i jak wiesz służy o operacji na zmiennych kontekstowy - nie wie kto jest faktycznym “właścicielem” zmiennej. Nie ma żadnego związku z tym, czy używasz lub nie paczki HA

To jest funkcja właściwa dla “całego” NR i jak wiesz służy o operacji na zmiennych kontekstowy - nie wie kto jest faktycznym “właścicielem” zmiennej.

No tak, racja.
@artur - dziękuję za podpowiedzi, na pewno wykorzystam.