====Ukládání a vizualizace dat z regulátoru Morningstar Tristar MPPT 60 pod OpenWRT==== ===Požadavky na hardware=== * regulátor Morningstar Tristar MPPT 60 * router, na kterém běží Linuxová distribuce OpenWRT (nejlépe s USB a rozumným množstvím paměti např. Linksys WRT 160-NL) - viz http://wiki.openwrt.org/toh/start ===Instalace a konfigurace ukládání dat=== * nejprve nainstalujeme na router OpenWRT (např. upgrade přes webové rozhraní, nebo tftp klientem), více informací lze nalézt na http://wiki.openwrt.org/doc/howto/generic.flashing * zprovozníme na routeru síť a to jak přístup na internet tak v lokální síti (tj. přístup na Morningstar Tristar MPPT 60) * pokud budeme data ukládat na USB, zprovozníme USB storage dle http://wiki.openwrt.org/doc/howto/usb.storage * nainstalujeme collectd démona společně s modulem pro modbus a ukládání do CSV (samozřejmě můžeme nainstalovat jakýkoliv jiný backend např. collectd-mod-mysql): opkg update opkg install collectd collectd-mod-modbus collectd-mod-csv * upravíme konfigurační soubor /etc/collectd.confBaseDir "/var/lib/collectd" PIDFile "/var/run/collectd.pid" # data ukládat každých 120 sekund, není-li specifikováno jinak Interval 120 ReadThreads 2 # nahrajeme používáné moduly LoadPlugin modbus LoadPlugin csv # kam ukládat data, v tomto případě do /tmp/csv DataDir "/tmp/csv" StoreRates true # definice vyčítání dat z regulátoru, adresy dle dokumentace na stránkách výrobce RegisterBase 0x018 RegisterType Uint16 Type voltage Instance "voltage-battery" RegisterBase 0x01b RegisterType Uint16 Type voltage Instance "voltage-array" RegisterBase 0x01c RegisterType Uint16 Type voltage Instance "current-battery" RegisterBase 0x039 RegisterType Uint16 Type voltage Instance "kwh-total" RegisterBase 0x023 RegisterType Uint16 Type voltage Instance "temp-chladic" RegisterBase 0x025 RegisterType Uint16 Type voltage Instance "temp-battery" RegisterBase 0x044 RegisterType Uint16 Type voltage Instance "wh-daily" RegisterBase 0x03A RegisterType Uint16 Type voltage Instance "power-output" RegisterBase 0x032 RegisterType Uint16 Type voltage Instance "charging-state" RegisterBase 0x033 RegisterType Uint16 Type voltage Instance "target-voltage" # IP adresa regulátoru Address 192.168.1.100 # interval ukládání Interval 60 Collect "voltage-input-1" Collect "voltage-input-2" Collect "current-input-1" Collect "kwh-input-1" Collect "temp-input-1" Collect "temp-input-2" Collect "wh-input-1" Collect "wh-input-2" Collect "charge-input-1" Collect "charge-input-2" Instance "tsmppt" * nakonec restartujeme collectd démona a podíváme se, zda se data ukládají tam kam mají * jakmile máme data, je třeba z nich vytvořit grafy např. pomocí gnuplotu * nainstalujeme gnuplotopkg install gnuplot * vytvoříme gnuplot skript a uložíme jej jako /root/grafy.gpt (jedná se o grafy pro 24V systém)TZ=7200 set terminal png size 700, 450 set style fill solid 1.0 noborder set style function filledcurves y1=0 set clip two set key top left Left reverse set output '/tmp/www/fv-napeti-proud.png' set xdata time set xlabel " " set ylabel "Napeti [V]" set y2label "Proud [A]" unset grid set grid set datafile separator "," set ytics nomirror set y2tics set timefmt "%s" set yrange [0:45] set y2range [0:45] plot "modbus/modbus-tsmppt/voltage-voltage-array-".DATUM using ($1+TZ):($2/182.04) with lines title "Napeti panelu" axis x1y1, "modbus/modbus-tsmppt/voltage-voltage-battery-".DATUM using ($1+TZ):($2/182.04) with lines title "Napeti baterie" axis x1y1, "modbus/modbus-tsmppt/voltage-current-battery-".DATUM using ($1+TZ):($2 < 50000 ? $2/409.6 : 1/0 ) with lines title "Proud do baterie" axis x1y2 set output '/tmp/www/baterie-napeti-kapacita.png' unset y2tics unset y2range set y2range [23.8:29.7] set yrange [23.8:29.7] set y2label "Kapacita baterie" set y2tics ("100%%" 25.4, "90%%" 25.16, "80%%" 24.9, "70%%" 24.72 , "60%%" 24.56, "50%%" 24.4, "25%%" 24.0) set grid y2tics plot "modbus/modbus-tsmppt/voltage-voltage-battery-".DATUM using ($1+TZ):($2/182.04) with lines title "Napeti baterie" axis x1y1, "modbus/modbus-tsmppt/voltage-target-voltage-".DATUM using ($1+TZ):($2 > 20 ? ($2/182.04)+0.015 : 1/0) with lines title "Cilove napeti baterie" set output '/tmp/www/fv-energie.png' unset y2tics unset yrange unset grid set grid set y2label "Vykon [W]" set y2tics set ylabel "Energie [Wh]" set yrange [*: *] set y2range [*: *] plot "modbus/modbus-tsmppt/voltage-power-output-".DATUM using ($1+TZ):($2/9.1007) with lines title "Vykon dodavany z FV" axis x1y2, "modbus/modbus-tsmppt/voltage-wh-daily-".DATUM using ($1+TZ):2 with lines title "Energie dodana z FV za den" axis x1y1 * grafy se vytvoří v /tmp/www (viz definice výše) zavoláním ze skriptu#!/bin/sh cd /tmp/csv/ DATE=$(date "+%s") if [ $DATE -lt 1300860001 ]; then exit; fi gnuplot -e "DATUM=\"$DATUM\"" /root/grafy.gpt 2>/dev/null * výše uvedený skript můžeme rozšířit o generování jednoduché HTML stránky (opět příklad pro 24V systém) WWW=/tmp/www/index.html CAS=$(date +%H.%M) DATUM=$(date "+%Y-%m-%d") WH_DAILY=$(tail -1 /tmp/csv/modbus/modbus-tsmppt/voltage-wh-daily-$DATUM | sed 's/.*,\(.*\)\.0000.*/\1/g') KWH_TOTAL=$(tail -1 /tmp/csv/modbus/modbus-tsmppt/voltage-kwh-total-$DATUM | sed 's/.*,\(.*\)\.0000.*/\1/g') CHRG_STATE=$(tail -1 /tmp/csv/modbus/modbus-tsmppt/voltage-charging-state-$DATUM | sed 's/.*,//g') CHRG_STATE=$(tail -1 /tmp/csv/modbus/modbus-tsmppt/voltage-charging-state-$DATUM | sed 's/.*,\(.*\)\.0000.*/\1/g') U_BAT=$(tail -1 /tmp/csv/modbus/modbus-tsmppt/voltage-voltage-battery-$DATUM | sed 's/.*,//g') I_BAT=$(tail -1 /tmp/csv/modbus/modbus-tsmppt/voltage-current-battery-$DATUM | sed 's/.*,//g') U_TAR=$(tail -1 /tmp/csv/modbus/modbus-tsmppt/voltage-target-voltage-$DATUM | sed 's/.*,//g') P_OUT=$(tail -1 /tmp/csv/modbus/modbus-tsmppt/voltage-power-output-$DATUM | sed 's/.*,//g') U_ARR=$(tail -1 /tmp/csv/modbus/modbus-tsmppt/voltage-voltage-array-$DATUM | sed 's/.*,//g') U_ARRAY=$(echo "scale=2; $U_ARR / 182.04" | bc | sed 's/^\./0./g') U_TARGET=$(echo "scale=2; $U_TAR / 182.04" | bc) U_BATTERY=$(echo "scale=2; $U_BAT / 182.04" | bc) I_BATTERY=$(echo "scale=2; $I_BAT / 409.6" | bc) P_OUTPUT=$(echo "scale=2; $P_OUT / 9.10" | bc) echo '' > $WWW echo '' >> $WWW echo '' >> $WWW echo 'Měření' >> $WWW echo '' >> $WWW echo "Napětí baterie: $U_BATTERY V
" >> $WWW echo "Cílové napětí baterie: $U_TARGET V
" >> $WWW echo "Nabíjecí proud baterie: $I_BATTERY A
" >> $WWW echo "Napětí panelů: $U_ARRAY V
" >> $WWW echo "Výkon aktuálně dodávaný z panelů: $P_OUTPUT W
" >> $WWW echo "Dnes vyrobeno energie: $WH_DAILY Wh
" >> $WWW echo "Celkově vyrobeno energie: $KWH_TOTAL kWh
Měřeno v $CAS" >> $WWW echo '

' >> $WWW echo '

' >> $WWW echo '

' >> $WWW echo '

' >> $WWW echo '' >> $WWW
* výsledek pak zpřístupníme pomocí HTTP serveru např. nginx nebo lighttpd, více informací lze najít na http://wiki.openwrt.org/doc/howto/http.lighttpd * příklad funkčního řešení http://postolka.klikva.net/