Skoro mamy już skonfigurowane połączenie między kotłem a Raspberry Pi, pora zająć się jego praktycznym wykorzystaniem. Pierwszym krokiem będzie monitorowanie i prezentacja temperatur oraz innych parametrów pracy kotła Vaillant ecoTEC plus VC.
Do kominikacji z ebusd użyjemy skryptu php, który pobrane dane będzie odkładał w bazie danych narzędzia RRDtool, które było już wielokrotnie wykorzystywane przeze mnie do zbierania i prezentowania danych (choćby przy prezentacji komunikacji z systemem Bero czy opisie termometru wifi). Skrypt php będzie wywoływał program ebusctl, który służy do komunikacji z deamonem ebusd (w moim wypadku zdalnej komunikacji, co ostatnio opisałem). Zebrane dane będą gromadzone w bazie rrd z użyciem polecenia rrdtool update. Skrypt będzie wywoływany cyklicznie, co minutę, dzięki linuksowemu mechanizmowi crontab.
Wybór parametrów
W pierwszej kolejności trzeba wybrać dane, które będą nas interesować. Wybór jest duży, ale kilka rejestrów wydaje się najbardziej interesujących na początek.
- FlowTemp – temperatura obiegu, czyli temperatura na wyjściu z kotła (do centralnego ogrzewania lub obiegu bojlera, zależnie od aktualnego ustawienia zaworu)
- FlowTempDesired – oczekiwana temperatura obiegu centralnego ogrzewania, wynikająca przede wszystkim z krzywej grzewczej przy sterowaniu pogodowym
- StorageTemp – temperatura w zasobniku ciepłej wody użytkowej
- ReturnTemp – temperatura powrotu do kotła
- OutdoorsTempSensor – temperatura zewnętrzna
- Flame – informacja o obecności płomienia (czy kocioł aktualnie podgrzewa wodę)
- WaterPressure – ciśnienie wody w instalacji
- ModulationTempDesired – zadana aktualna moc kotła w procentach, czyli informacja z jaką aktualnie mocą pracuje palnik, o ile pracuje
- PumpPower – moc, z jaką pracuje aktualnie pompa; od tego zależy prędkość przepływu wody w instalacji oraz zużycie prądu
- RemainingBoilerblocktime – pozostały czas blokady czasowej ogrzewania
- PositionValveSet – pozycja zaworu przełączającego między ogrzewaniem zasobnika ciepłej wody a centralnym ogrzewaniem
- PrEnergy… – rejestry liczników zużycia prądu i gazu
Przygotwanie baz danych
Teraz należy przygotować pliki, w których będziemy gromadzić dane. Służy do tego polecenie rrdtool create. Zdefiniujemy liczniki typu gauge, najbardziej pasujące do rodzaju zbieranych danych, z domyślnym krokiem co 60 sekund. Dla temperatur i pozostałych danych użyjemy dwóch osobnych plików.
rrdtool create /tmp/ecotec-temperatures.rrd -s 60 DS:flowtemp:GAUGE:180:U:U DS:flowtempdesired:GAUGE:180:U:U DS:returntemp:GAUGE:180:U:U DS:storagetemp:GAUGE:180:U:U DS:outsidetemp:GAUGE:180:U:U RRA:AVERAGE:0.5:1:44640 rrdtool create /tmp/ecotec-params.rrd -s 60 DS:power:GAUGE:180:U:U DS:pumppower:GAUGE:180:U:U DS:blocktime:GAUGE:180:U:U DS:valve:GAUGE:180:U:U DS:pressure:GAUGE:180:U:U RRA:AVERAGE:0.5:1:44640
Poza plikami rrd będziemy na razie tworzyć także log tekstowy z najważniejszymi parametrami i dodatkowo co godzinę zapiszemy stan liczników zużycia.
Test odczytu
Na wszelki wypadek sprawdzimy, czy rejesrrdtool create /sciezka/rrd/kociol-parametry.rrd -s 60 DS:moc:GAUGE:180:U:U DS:mocpompy:GAUGE:180:U:U DS:blokada:GAUGE:180:U:U DS:zawor:GAUGE:180:U:U DS:cisnienie:GAUGE:180:U:U RRA:AVERAGE:0.5:1:44640try są odczytywane poprawnie przez ebusctl.
techniczny@raspberrypi /dom $ ebusctl -s 192.168.10.132 read -m 20 PrEnergySumHwc1 56702574
Przy odczycie lokalnym należałoby pominąć opcję -s oraz IP zdalnego serwera. Ja jednak nie zbieram danych na Raspberry Pi, na którym działa ebus. Opcja -m 20 zapobiega odczytowi starych danych z pamięci podręcznej.
Skrypt php do odczytu danych
Kluczową funkcją skryptu będzie odczyt rejestru wg podanej nazwy. Nic skompikowanego, wykorzystamy po prostu funkcję exec, czyli wywołanie polecenia systemu operacyjnego:
function getregister( $reg ) { global $ip; exec("/usr/bin/ebusctl -s $ip read -m 30 $reg", $output, $retcode); if($retcode==0 && substr($output[0],0,3)!="ERR" && substr($output[0],0,3)!="err" ) return($output[0]); else return("error"); }
Będzie to podstawa do odczytu wszystkich potrzebnych danych. Do wywołania rrdtool i zapisu danych do pliku tekstowego dla wygody także będziemy używać exec.
Cały skrypt umieściłem w repozytorium github, gdzie można go obejrzeć lub pobrać.
Zbieranie danych
W pierwszej kolejności warto wywołać skrypt ręcznie komendą php -f ebusget.php dla sprawdzenia czy wszystko jest w porządku. Jeżeli test wypadnie poprawnie, można poleceniem crontab -e zaplanować wykonywanie skryptu co minutę, dodając linię:
* * * * * php -f /dom/ebusget.php
To co powinno dać się łatwo zaobserwować, to zmiany zmiany czasu ostatniej modyfikacji plików *.rrd. Powinien też pojawić się plik vaillant-ecotec.log, a o pełnej godzinie dodatkowo vaillant-prenergy.log.
Prezentacja danych
Zaletą pakietu rrd jest łatwa prezentacja zebranych danych w postaci szeroko parametryzowalnych wykresów. Służy do tego polecenie rrdtool graph. W naszym przypadku, dla zachowania przejrzystości, warto podzielić dane na dwa wykresy. Na jednym przedstawione będą wszystkie zebrane temperatury, a na drugim – pozostałe parametry. Potrzebne komendy zostały zebrane w skrypcie draw-graphs.sh. Każdy z wykresów obejmuje ostatnie 6 godzin pracy kotła.
O tym, co można wyczytać z wykresów, powiemy już następnym razem…
Witam. Swietny material. Jest szansa na priv? Widze ze ma pan doswiadczenie , mam kilka pytan.
Witam.
Jestem elektronikiem, a nie informatykiem i widzę, że temat zobrazowania danych z kotła po prostu mnie przerasta. Czy mógłbym prosić o kontakt mailowy, bo w oparciu o opublikowany wyżej materiał nie jestem w stanie dobrnąć do szczęśliwego końca?
Pozdrawiam.
Krzysztof