Uživatelské nástroje

Nástroje pro tento web


tristar-mppt-60-pod-openwrt

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.conf
    BaseDir     "/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
    <Plugin "csv">        
      DataDir "/tmp/csv"  
      StoreRates true     
    </Plugin>
    
    # definice vyčítání dat z regulátoru, adresy dle dokumentace na stránkách výrobce
    <Plugin modbus>                                      
    <Data "voltage-input-1">                             
      RegisterBase 0x018                              
      RegisterType Uint16                             
      Type voltage                                    
      Instance "voltage-battery"                      
    </Data>                                           
                                                      
    <Data "voltage-input-2">                          
      RegisterBase 0x01b                              
      RegisterType Uint16                             
      Type voltage                                    
      Instance "voltage-array"                        
    </Data>                                           
                                                      
    <Data "current-input-1">                          
      RegisterBase 0x01c                              
      RegisterType Uint16                             
      Type voltage                                    
      Instance "current-battery"                      
    </Data> 
    
    <Data "kwh-input-1">                                 
      RegisterBase 0x039                                 
      RegisterType Uint16                                
      Type voltage                                    
      Instance "kwh-total"                            
    </Data>                                           
                                                      
    <Data "temp-input-1">                             
      RegisterBase 0x023                              
      RegisterType Uint16                             
      Type voltage                                    
      Instance "temp-chladic"                         
    </Data>                                           
                                                      
    <Data "temp-input-2">                             
      RegisterBase 0x025                              
      RegisterType Uint16                             
      Type voltage                                    
      Instance "temp-battery"                         
    </Data>        
    
    <Data "wh-input-1">                                  
      RegisterBase 0x044                                 
      RegisterType Uint16                                
      Type voltage                                    
      Instance "wh-daily"                             
    </Data>                                           
                                                      
    <Data "wh-input-2">                               
      RegisterBase 0x03A                              
      RegisterType Uint16                             
      Type voltage                                    
      Instance "power-output"                         
    </Data>                                           
                                                      
    <Data "charge-input-1">                           
      RegisterBase 0x032                              
      RegisterType Uint16                             
      Type voltage                                    
      Instance "charging-state"                       
    </Data>              
    
    <Data "charge-input-2">                              
      RegisterBase 0x033                                 
      RegisterType Uint16                                
      Type voltage                                    
      Instance "target-voltage"                       
    </Data>
    <Host "modbus">
       # IP adresa regulátoru                                   
       Address 192.168.1.100
       # interval ukládání                          
       Interval 60                                    
                                                      
       <Slave 0x01>                                   
          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"                           
       </Slave>                                       
    </Host>                                           
    </Plugin>
  • 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 gnuplot
    opkg 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 '<html lang="cs" xml:lang="cs" xmlns="http://www.w3.org/1999/xhtml">' > $WWW
    echo '<meta http-equiv="refresh" content="300;url=index.html">' >> $WWW
    echo '<head profile="http://gmpg.org/xfn/11">' >> $WWW
    echo '<title>Měření</title>' >> $WWW
    echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' >> $WWW
    echo "Napětí baterie: <b>$U_BATTERY V</b><br />" >> $WWW
    echo "Cílové napětí baterie: <b>$U_TARGET V</b><br />" >> $WWW
    echo "Nabíjecí proud baterie: <b>$I_BATTERY A</b><br />" >> $WWW
    echo "Napětí panelů: <b>$U_ARRAY V</b><br />" >> $WWW
    echo "Výkon aktuálně dodávaný z panelů: <b>$P_OUTPUT W</b><br />" >> $WWW
    echo "Dnes vyrobeno energie: <b>$WH_DAILY Wh</b><br />" >> $WWW
    echo "Celkově vyrobeno energie: <b>$KWH_TOTAL kWh</b><br /><small>Měřeno v $CAS</small>" >> $WWW
    echo '<p><img src="fv-napeti-proud.png"></p>' >> $WWW
    echo '<p><img src="teplota.png"></p>' >> $WWW
    echo '<p><img src="baterie-napeti-kapacita.png"></p>' >> $WWW
    echo '<p><img src="fv-energie.png"></p>' >> $WWW
    echo '</body></html>' >> $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/
tristar-mppt-60-pod-openwrt.txt · Poslední úprava: 2012/04/17 21:15 autor: drama