rrd4j + wykresy w O...
 
Powiadomienia
Wyczyść wszystko

rrd4j + wykresy w OpenHab2

17 Wpisów
4 Użytkownicy
3 Likes
2,880 Wyświetleń
(@eathan)
Wpisów: 52
Kontrybutor Donator 2K18
Autor tematu
 

Hej, 

Im dłużej przeglądam to forum tym więcej pomysłów przychodzi do głowy. Ostatnim z nich jest wykres historii zapisanej temperatury. Ogarnąłem tutoriale w sieci, ustawiłem poszczególne elementy. 

  1. Zainstalowałem RRD4j Persistence z poziomu PaperUI. 
  2. W pliku addonces.cfg zmieniłem: persistence = rrd4j
  3. W ustawieniach PaperUI przypisałem rrd4j dla ustawienia Persistence
  4. Wprowadziłem zmiany w kolejnych plikach wg wzorów poniżej:

rrd4j.cfg

dht_temperature.def=GAUGE,120,-50,100,60
dht_temperature.archives=AVERAGE,0.5,1,10080:AVERAGE,0.5,60,89280
dht_temperature.items=dht_temperature

rrd4j.persists

// persistence strategies have a name and a definition and are referred to in the "Items" section
Strategies {
// for rrd charts, we need a cron strategy
everyMinute : "0 * * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"

default = everyMinute
}
Items {
// which data to be stored
dht_temperature : strategy = everyMinute
}

W katalogu openHAB\userdata\persistence\rrd4j powstał plik dht_temperature.rrd. Jak rozumiem to właśnie tutaj zapisywane są odczyty temperatury. Data pliku to 4.03.2018 godzina 19:10. 

Mój czujnik temperatury ma taki item:

Number dht_temperature "Temperatura [%.1f °C]" {mqtt="<[broker:/biuro/lampa/temperature:state:default]"}

Najwyraźniej o czymś zapomniałem ponieważ po wejściu na poniższy adres dostaję pustą siatkę wykresu (w załączniku). 

 http://192.168.1.4:8080/rrdchart.png ?items=dht_temperature&period=8h

Zmiany w wykresach wprowadziłem w sobotę. Na ile zrozumiałem poradniki to odczytuję co minutę wartości temperatury. Zakładam, że jakieś dane powinny się zebrać do teraz. 

Będę wdzięczny za wskazanie braków 😉

rrdchart
 
Dodane : 05/03/2018 8:40 am
(@7keys)
Wpisów: 49
Kontrybutor
 

rrd4j.persist:

Strategies {
everyMinute : "0 * * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"

default = everyChange, everyMinute.
}

Items {
HomeTemp* : strategy = everyChange, everyMinute, everyDay, restoreOnStartup
}

// vim: syntax=Xtend syntax=openhab

Możesz stworzyć sobie np item z grupą do której będziesz dodawał różne czujniki które będą na jednym wykresie:
Group HomeTemp "Wykres Temperatury" <chart>
Wtedy Twój item będzie wyglądać np

Number dht_temperature "Temperatura [%.1f °C]" (HomeTemp) {mqtt="<[broker:/biuro/lampa/temperature:state:default]"}

Oczywiście jak chcesz dodać tylko jeden item do wykresu to w pliku rrd4j.persist,'
wpisujesz tylko nazwę item bez "*"

Najważniejsze to zakomentuj :

#dht_temperature.def=GAUGE,120,-50,100,60
#dht_temperature.archives=AVERAGE,0.5,1,10080:AVERAGE,0.5,60,89280
#dht_temperature.items=dht_temperature

I restart Openhab tak dla spokoju....

 
Dodane : 05/03/2018 9:44 am
eathan and adrian reacted
(@eathan)
Wpisów: 52
Kontrybutor Donator 2K18
Autor tematu
 

Wprowadziłem podane powyżej zmiany. Wybrałem wersję uproszczoną dla jednego czujnika. Chcę to najpierw odpalić a potem będę dodawać kolejne. Po zmianach nadal nie widzę efektu. Zastanawia mnie kwestia braku zmian w dacie modyfikacji pliku: dht_temperature.rrd

Jak rozumiem odczyty nie są zapisywane do bazy danych... 

 
Dodane : 05/03/2018 10:14 am
(@7keys)
Wpisów: 49
Kontrybutor
 

rozumie że odczytujesz wykres bezpośrednio czy też z sitemap ?

w każdym razie przy jednym czujniku trzeba będzie poczekać na jakiś efekt...

pytanie co jaki czas robisz odczyt z czujnika....

możesz jeszcze zatrzymac serwis openhab...wywalić bazę dht_temperature.rrd

 

i wystartować openhab na nowo... baza zostanie utworzona od nowa. i wtedy za 30 minut zobacz..( przy założeniu że np odczyt z czujnika następuje co np..5 minut)

 

niestety jak się sam przekonałem zmiana w pliku rrd4j.persist powoduje całkowite przekonfigurowanie zapisu do baz...- jedyny sposó jaki znalazłem na powrót do poprzednich ustawień to ten opisany powyżej...

(aczkolwiek teraz przeszedłem na influxdb i wykresy w grafanie..)

 
Dodane : 05/03/2018 10:40 am
(@eathan)
Wpisów: 52
Kontrybutor Donator 2K18
Autor tematu
 

Odpalam wykres z linka:

192.168.1.4:8080/rrdchart.png?items=dht_temperature&period=h

Usunąłem plik dht_temperature.rrd, zrobiłem restart OpenHaba. Po chwili założył się nowy plik. 

Po zmianach o których mowa powyżej sytuacja wygląda tak:

rrd4j.persist

Strategies {
everyMinute : "0 * * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"

default = everyChange, everyMinute.
}

Items {
HomeTemp : strategy = everyChange, everyMinute, everyDay, restoreOnStartup
}

// vim: syntax=Xtend syntax=openhab

rrd4j.cfg

#dht_temperature.def=GAUGE,120,0,30,60
#dht_temperature.archives=AVERAGE,0.5,1,10080:AVERAGE,0.5,60,89280
#dht_temperature.items=dht_temperature

Co do częstotliwości odczytu to wg. mnie jest to zdefiniowane w rrd4j.cfg. Mówi o tym pierwszy wiersz i ostatnia wartość. U mnie to 60 sekund. Tyle, że zgodnie z poleceniem zakomentowałem to... Nie bardzo rozumiem natomiast zapisy w drugim wierszu - AVERAGE. 

 

 
Dodane : 05/03/2018 11:19 am
(@7keys)
Wpisów: 49
Kontrybutor
 
HomeTemp ?? Czy item z którego czytasz nie nazywa się przypadkiem :
dht_temperature 

Items {
dht_temperature : strategy = everyChange, everyMinute, everyDay, restoreOnStartup
}

 
Dodane : 05/03/2018 11:34 am
eathan reacted
(@eathan)
Wpisów: 52
Kontrybutor Donator 2K18
Autor tematu
 

Ok, poprawiłem. Nic to nie zmieniło. Zastanawia mnie dlaczego plik dht_temperature.rrd nie jest aktualizowany. Moim zdaniem co zapis nowych odczytów powinna się zmieniać data modyfikacji. 

 
Dodane : 05/03/2018 12:51 pm
(@7keys)
Wpisów: 49
Kontrybutor
 

Mówi o tym pierwszy wiersz i ostatnia wartość. U mnie to 60 sekund. Tyle, że zgodnie z poleceniem zakomentowałem to... Nie bardzo rozumiem natomiast zapisy w drugim wierszu - AVERAGE.

Te wszystkie funkcje miałeś zakomentować ponieważ są Ci nie  potrzebne .

W regułach rrd4j masz już co ma robić.

Powyższe funkcje służą uśrednianiu wyników i ich grupowaniu.

Plik bazy miałeś skasować po to aby po zakomentowaniu tamtych ustawień baza tworzyła się w oparciu o reguły zawarte w rrd4j.persist.

Aby to zadziałało najlepiej zatrzymać OH , skasować bazę i odpalić OH.

 
Dodane : 05/03/2018 1:16 pm
(@7keys)
Wpisów: 49
Kontrybutor
 

U mnie to 60 sekund

Chodziło mi tu o to co jaki czas czujnik wysyła dane do brokera mqtt.. też co 60 sek ?

Możesz zrobić tak:

Zatrzymać OH, zmienić nazwę plików rrd4j.persist na rrd4j.persist_old i rrd4j.cfg na rrd4j.cfg_old.

Skasować plik dht_temperature.rrd

Wystartować OH.

(Chodzi o to że miałem podobnie po kombinacjach z rd4j.cfg i tworzenie średnich ważonych 🙂 ale po stwierdzeniu że jednak jest to za mało skalowane chciałem wrócić do domyślnych ustawień i był problem...)

Jak OH wystartuje to znów robisz stop i i zmieniasz nazwy plików na oryginalne...

I znów start OH. Powinien zapisywać już normalnie...

Pamiętaj że to masz mieć zakomentowane !

#dht_temperature.def=GAUGE,120,0,30,60
#dht_temperature.archives=AVERAGE,0.5,1,10080:AVERAGE,0.5,60,89280
#dht_temperature.items=dht_temperature

W innym przypadku nadal rrd4j będzie używał Twoich ustawień 🙂

 
Dodane : 05/03/2018 1:17 pm
(@eathan)
Wpisów: 52
Kontrybutor Donator 2K18
Autor tematu
 

Ustawienia czujnika w AFE to 60 sekund. 

Ok, teraz rozumiem i chyba znalazłem błąd. U mnie plik nazywał się rrd4j.persists a nie rrd4j.persist (chodzi o s na końcu) Zmieniłem nazwę, wyłączyłem OH skasowałem bazę, odpaliłem od nowa. Czekam od kilku minut i nie założył się plik dht_temperature.rrd. W logu mam:

2018-03-05 12:48:04.706 [ERROR] [4j.internal.charts.RRD4jChartServlet] - Error generating graph: {}
java.io.FileNotFoundException: Could not open /volume1/@appstore/openHAB/userdata/persistence/rrd4j/dht_temperature.rrd [non existent]

 

 

 
Dodane : 05/03/2018 1:49 pm
(@7keys)
Wpisów: 49
Kontrybutor
 

Skasowałeś bazę ale chyba nie wyłączyłeś OH.. To teraz daj restart OHi powinno gadać

 
Dodane : 05/03/2018 2:02 pm
(@eathan)
Wpisów: 52
Kontrybutor Donator 2K18
Autor tematu
 

Zgłupiałem kompletnie. Teraz działa - plik rrd się aktualizuje do chwilę. Generuje się wykres. Zmieniłem dwie rzeczy:

1) rrd4j.persist

Strategies {
everyMinute : "0 * * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"

default = everyChange, everyMinute
}

Items {
dht_temperature : strategy = everyChange, everyMinute, everyDay, restoreOnStartup
}

// vim: syntax=Xtend syntax=openhab

 

W wierszu default = everyChange, everyMinute na końcu była kropka. Wywaliłem ją. 

2) Zrobiłem kopię pliku rrd4j.persist i zmieniłem nazwę na rrd4j.persists

I teraz nie wiem co pomogło ale ważne, że działa. 

7keys dzięki za cierpliwość i pomoc. 

 

 

 
Dodane : 05/03/2018 3:30 pm
(@eathan)
Wpisów: 52
Kontrybutor Donator 2K18
Autor tematu
 

A to jeszcze jedna rzecz. Sam wykres ładnie działa pod linkiem:

 http://192.168.1.4:8080/rrdchart.png ?items=dht_temperature&period=D

W związku z tym do sitemap dodałem:

Chart item=dht_temperature service="dht_temperature" period=D

I nie pojawia się obrazek... Zamiast niego jest ikona wyświetlana jak nie ma obrazka... 

 
Dodane : 05/03/2018 4:20 pm
(@eathan)
Wpisów: 52
Kontrybutor Donator 2K18
Autor tematu
 

Ok już wiem co było źle:

Chart item=dht_temperature period=D
 
Dodane : 05/03/2018 4:29 pm
adrian
(@adrian)
Wpisów: 3981
Szefu Admin Zasłużony dla Forum, Patron Strony
 

@eathan, zastanawiam się co chcesz osiągnąć tą strategią zbieranie danych z czujnika

strategy = everyChange, everyMinute, everyDay, restoreOnStartup

teraz zapisujesz

  • każdą zmianę wartości z czujnika,
  • dodatkowo zapisujesz co 1 minute wartość, którą masz dla dht_temperature item w openHab, niezależnie od pkt powyżej
  • dodatkowo zapisujesz wartość per day dla dht_temperature, czyli jedną wartość na 24h - to zupełnie do wykresów nic nie wnosi.

Ja osobiście zbieram tylko zmiany temperatury. W czujnikach mam wysyłanie temperatury co 1min, ale do bazy wysyłam tylko dane tylko kiedy temperatur się zmieniła - nie wysyłam do bazy info, że temperatura jest taka sam jak minute temu.

To oszczędza trochę miejsca na dysku - przy tradycyjnych dyskach to pewnie żaden problem ze względu na ich duży rozmiar. Ale większy problem to zwiększająca się ilość danych, które silnik do wykresów musi przetworzyć, żeby wyświetlić wykres. Tak na oko przy Twoich ustawieniach będziesz generował lekko 2000 wpisów na dobę. Miesięcznie 60tys. 

Moja sugestia; 

  • jeśli chcesz zapisywać co minute zostaw tylko; everyMinute, będziesz miał równe interwały danych
  • jeśli chcesz tylko zmieniająca się temperaturę, zostaw tylko: everyChange
  • jeśli chcesz zapisywać wartości z taką sama częstotliwością, jaką przychodzą z czujnika to OH2 to zrób: everyUpdate

no i restoreOnStartup na końcu ma sens.

pozdrawiam

 

 
Dodane : 05/03/2018 5:35 pm
(@eathan)
Wpisów: 52
Kontrybutor Donator 2K18
Autor tematu
 

adrian masz rację. Skopiowałem z propozycji kolegi powyżej. U mnie nie ma aż takiej potrzeby. Zależy mi wyłącznie na tym by mieć wgląd w to jak wygląda rozkład temperatury w pomieszczeniu. Zapis zmiany zupełnie wystarczy. 

 
Dodane : 05/03/2018 5:47 pm
(@pasta20)
Wpisów: 32
Kontrybutor
 

Witam gdzie zapisują się pliki temperature.rrd

Chodzi mi o pliki .rrd czyli pliki temperatury.

U mnie niema w openhab2 Persistence. W openhabian tworzył się plik ale nie dodawało danych wiec zainstalowałem rasbian + openhab2.

 
Dodane : 28/06/2019 5:48 am
Udostępnij: