====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/