Średnia temperatura dobowa - ważona (z dokładnością do sekundy)

Projekt planuje zrealizować w Node-Red, na bazie odczytu historii czujnika temperatury z poprzedniej doby, a temperaturę “zważyć” czasem w jakim obowiązywała z dokładnością do sekundy. Myślę że to jedyny właściwy sposób na określenie faktycznej średniej temperatury dobowej :slight_smile:

Ja przyjąłem następującą metodykę:

  1. Uruchomienie skryptu raz na dobę.
  2. Określenie dat ograniczających zakres obliczeń średniej temperatury (w moim przypadku od poprzedni dzień godzina 00:00 do dzisiejszy dzień 00:00 z uwzględnieniem strefy czasowej)
  3. Pobranie historii z czujnika temperatury w zdefiniowanym przedziale czasowym.
  4. Wygenerowanie tablicy z danymi niezbędnymi do przeprowadzenia obliczeń (wartość temperatury, data z godziną zmiany stanu czujnika)
  5. Obliczenia średniej ważonej temperatury dobowej z dokładnością pomiarową do jednej sekundy
  6. Zapisanie danych do dalszej analizy. (w moim przypadku w arkuszach google).

Aktualnie jestem na etapie 5 - zwrot Średniej Temperatury Ważonej z czujnika odbywa się poprzez msg.payload.

Gdyby ktoś chciał wykorzystać w swoim projekcie w załączeniu plik JSON
swtd.json (4,4 KB)

EDIT: 2023-06-04

Projekt przeszedł ewolucje i obecnie spełnia wszystkie założenia.


całość upubliczniam (oprócz linku do stworzonej ankiety w Formularze Google :slight_smile: z wiadomych przyczyn.

w function są zmienione dwa wiersze:

var formularz ="https://docs.google.com/forms/d/e/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/formResponse?";
var dane = "entry.XXXXXXXXXX=" + d1 + "&entry.XXXXXXXXXX=" + d2 + "&entry.XXXXXXXXXX=" + d3 + "&entry.XXXXXXXXXX=" + d4 + "&entry.XXXXXXXXXX=" + d5 + "&entry.XXXXXXXXXX=" + d6 + "&entry.XXXXXXXXXX=" + d7 + "&submit=Submit"

gdzie zaiksowane są właściwe dane.

swtd v2 forum.json (11,1 KB)
– zawiera bugi – czytaj dalej

UPDATE - 01-07-2023
Okazało się że w funkcji obsługi daty były błędne algorytmu obliczające zakres pobrania historii - dotyczyło to dat z przełomu miesiąca.


-błąd naprawiony

Drugi błąd w algorytmie to brak weryfikacji wartości zwracanej przez czujnik temperatury. W przypadku pojawienia się w historii wartości “unavitable” lub “unknown” (co często ma miejsce po aktualizacji Z2M) - to widać na powyższej grafice - wartości NaN
-błąd naprawiony

poprawiony algorytm:
swtd v3 forum.json (11,8 KB)

1 polubienie

Pytania, które mi się nasuwają:
Dlaczego chcesz robić pomiar temperatury co sekundę, czemu to służy?
Jakiego fizycznego medium temperaturę mierzysz aby zmieniała się ona w czasie dwóch sekund?

Nie wiem czy powinienem wypowiadać się w imieniu autora? :wink:
Kluczem jest tu średnia ważona, gdzie wagą jest czas. Czas pomiędzy zarejestrowanymi zmianami temperatury - z dokładnością co do sekundy (nie pomiar co sek).
Przykład: dla uproszczenia - przez 22h w ciągu doby utrzymywała się temp. 30C, a pozostałe 2h temp 10C. Ze zwykłej średniej otrzymasz Tśr 20C, a z ważonej Tśr coś około 28C (nie chce min się dokładnie liczyć).

Mi się nasuwa inne pytanie: po co kopać w historii, a nie liczyć tego na bieżąco?

1 polubienie

Ja nie dokonuje pomiaru, tylko korzystam z historii czujnika, nie tworze nowych danych, “nie zwiększam rozmiaru bazy danych HA”. Bazując na rejestrach dokonuje kalkulacji w celu otrzymania jednego wyniku. Ponadto oszczędzam zasoby obliczeniowe, bo nie angażuje HA do cyklicznych obliczeń uruchamianych co określony czas, tylko jednorazowo na dobę - tworze dane statystyczne, nie pomiarowe.

Na chwile obecna to dane z czujnika temperatury z zewnętrznego serwisu, który docelowo zastąpię własnym czujnikiem.

Znacznik czasowy zapisanych danych jest z dokładnością do milisekund, ja się zdecydowałem na sekundy, bo to najmniejsza jednostka czasu na która się zwraca uwagę. Przyjąłem wagę obliczeń na wartość jednej sekundy (punkt odniesienia).

Przyjęta metodyka “pomiarów” jest dla stwierdzenia faktycznej średniej temperatury dobowej. Jeśli poczytamy jak to obliczają instytucje to okaże się ze bazują albo na granicznych wartościach temperatury które mogą wystąpić przez chwile w danym dniu, albo na okresach (interwalach) czasowych i dokonywaniu odczytów w określonych interwalach.
HA sam w sobie ma mechanizm który śledzi zmiany stanów czujników, dlaczego nie wykorzystać tego do uzyskania precyzyjnych danych statystycznych i nie powiedzieć “sprawdzam” instytucjom które maja na to monopol.

Dla zaoszczędzenia zasobów jakie oferuje nam HA, i wykorzystania jego wbudowanych mechanizmów dla zwiększenia precyzji wyniku.