www.fotovallescrivia.it
Foto viste: 2359553    Oggi: 29
Login

Installare 123solar su Arch Linux (simile a PogoPlug) con USB / EZL70 / USR-TCP232-300 RS232 RS485 to Ethernet 

Hardware necessario:
- un convertitore TCP/RS485 o USB/RS485 
- collegamento ethernet tra macchina virtuale e convertitore
- un pc su cui far girare la macchian virtuale. 

Software necessario:
Ho deciso di installare 123solar per monitorare il mio inverter Aurora PowerOne pvi-6000-outd, e tra le varie possibilità ho scelto di usare una macchina virtuale (VirtualBox)  su cui installare ArchLinux.

- Immagine di ArchLinux https://www.archlinux.org/download/ (io ho scelto 32 bit)
- software aurora http://www.curtronics.com/Solar/AuroraData.html#GetIt
- software 123solar http://123solar.org/downloads/123solar


Scelte hardware:
- La mia scelata per il convertitore è ricaduta su USR-TCP232-300 RS232 RS485 (http://www.ebay.com/itm/281570690355, 34$ con trasforamtore e cavi), per il basso prezzo, il fatto che fosse dentro un case, e per la presenza del trasformatore. Arrivata in 18 giorni direttamente dalla cina, e configurata e collegata in 20 minuti.
- Se nelle vicinanze dell'inverter non è possibile far arrivare un cavo ethernet, una soluzione può essere usare un adattatore PowerLine per fare passare il segnale sulla rete ellettrica. Io ho utilizzato Netgear XAVB5221-100PES http://www.amazon.it/gp/product/B00P7GSGV2?psc=1&redirect=true&ref_=oh_aui_detailpage_o00_s00 24€
- Il pc da me utilizzato è un Pentium 4 2.4Ghz con 2Gb di ram, SO lubuntu 12.04 e virtual box headless installato. Si può usare direttamente un pc fisico, oppure un raspberry o simile. Nel caso del raspberry saltare la parte di configurazione del sistema operativo. La successiva parte dovrebbe essere sostanzialmente identica.

Hardware:
- Configurazione del convertitore RS485/TCP(se utilizzato): Indipendentemente dal modello, va impostato per funzionare i modalità tcp server, su un indirizzo (nella maggior parte dei casi) del tipo 192.168.x.yyy, dove x dipende dalla rete a cui appartiene il pc da cui effettuare i monitoraggi (spesso x=1), e yy si può scegliere a caso tra gli indirizzi IP non utilizzati e non assegnati dal dhcp (200 potrebbe andar bene). nella mia esperienza, l'unica velocità di trasferimento funzionante è 19200 baud.
- Collegamenti: per collegare i cavi all'inverter (RS485) io ho aspettato il tramonto, spento inverter e disconnesso l'inverter da rete, aperto il pannello frontale e inserito i cavetti nell'apposita morsettiera a pressione. ho usato un banale doppino di rame non twisted lungo circa 1.5m facendolo passare in un foro praticato con il trapano in uno dei "tappi" di plastica. Per collegamenti più lunghi meglio usare cavi schermati e twisted con 3 fili (schermatura collegata a terra, e RTN convertitore collegato a RTN inverter ). Nel mio convertitore i due morsetti si chiamavano A e B, collegati rispettivamente a T+ e T- dell'inverter, e RTN esternamente non era presente (sulla scheda nel box c'è un morsetto)

Software:
Installazione sistema operativo: Ho seguito passo passo la guida http://www.linuxveda.com/2015/04/20/arch-linux-tutorial-manual/ evitando di installare l'ambiente grafico, così a regime il sistema gira occupando circa 30mb di memoria (più 100 di cache) e impostando un indirizzo ip fisso (no dhcp). Potrebbe girare con 128mb di ram, io ne ho assegnati 256. 7GB di disco +1GB di swap.
Alla fine ci si ritrova con un sistema operativo quasi identico a quello del PogoPlug, spesso usato per fare questo genre di monitoraggi. Quindi è possibile seguire una guida come questa  http://www.energeticambiente.it/tecnica-componentistica-e-installazione/14747948-pogoplug-e02-come-datalogger-107.html#post119478263
Riassunta qui di seguito:


 - impostazioni preliminari
Loggarsi via SSH (precedentemente installato) sul server e digitare i seguenti comandi
timedatectl set-timezone Europe/Rome 
timedatectl set-time "2015-07-26 10:17:16"  (usare ora giusta)

- Installazione pacchetti richiesti:
pacman -Sy rrdtool python python2 php php-cgi make gcc base-devel lighttpd
pacman -Sy wget 

- configurare php.ini
nano /etc/php/php.ini 

togliere il ; davanti alle righe
extension=calendar.so
extension=shmop.so 

per salvare e uscire
ctrl+o
ctrl+x



- scaricare aurora,compilarlo e metterlo nella cartella http (crearla se non c'è)
cd /home
wget ;http://www.curtronics.com/Solar/ftp/aurora-1.8.8.tar.gz
tar -xzvf aurora-1.8.8.tar.gz 
cd aurora-1.8.8 
make
make install
cp aurora /srv/http


- scaricare 123solar e metterlo in /srv/http
cd /srv
wget http://123solar.org/downloads/123solar/123solar1.5.5.tar.gz
tar -xzvf 123solar1.5.5.tar.gz
cd 123solar
mv *.* /srv/http 
mv * /srv/http 

- scaricare e configurare il servizio 123solar
cd /etc/systemd/system
wget http://123solar.googlecode.com/files/123solar.service
systemctl enable 123solar

- configurare server web
nano /etc/lighttpd/lighttpd.conf

sostituire il contenuto con il seguente:
# test with lighttpd -t -f /etc/lighttpd/lighttpd.conf
### Load server modules
server.modules = (
"mod_alias",
"mod_access",
"mod_status",
"mod_proxy",
"mod_compress",
"mod_accesslog"
)
server.port = 80
server.username = "http"
server.groupname = "http"
server.document-root = "/srv/http"
server.errorlog = "/var/log/lighttpd/error.log"
dir-listing.activate = "enable"
status.status-url = "/status"
#tunning
server.max-connections = 128
server.max-keep-alive-idle = 5
server.max-keep-alive-requests = 16
server.max-read-idle = 60
server.max-write-idle = 360
## PHP
include "fastcgi.conf"
## Compressing
compress.cache-dir = "/tmp/lighttpd/"
compress.filetype = ("text/plain","text/css","text/xml","text/javascript")
index-file.names = ( "index.php","index.html" )
# mimetype mapping
mimetype.assign = (
".sig" => "application/pgp-signature",
".spl" => "application/futuresplash",
".class" => "application/octet-stream",
".ps" => "application/postscript",
".torrent" => "application/x-bittorrent",
".dvi" => "application/x-dvi",
".pac" => "application/x-ns-proxy-autoconfig",
".dat" => "application/x-ns-proxy-autoconfig",
".swf" => "application/x-shockwave-flash",
".tgz" => "application/x-tgz",
".mp3" => "audio/mpeg",
".m3u" => "audio/x-mpegurl",
".wma" => "audio/x-ms-wma",
".wax" => "audio/x-ms-wax",
".ogg" => "application/ogg",
".wav" => "audio/x-wav",
".xbm" => "image/x-xbitmap",
".xpm" => "image/x-xpixmap",
".xwd" => "image/x-xwindowdump",
".asc" => "text/plain",
".c" => "text/plain",
".h" => "text/plain",
".cc" => "text/plain",
".cpp" => "text/plain",
".hh" => "text/plain",
".hpp" => "text/plain",
".conf" => "text/plain",
".log" => "text/plain",
".text" => "text/plain",
".txt" => "text/plain",
".diff" => "text/plain",
".patch" => "text/plain",
".ebuild" => "text/plain",
".eclass" => "text/plain",
".rtf" => "application/rtf",
".bmp" => "image/bmp",
".tif" => "image/tiff",
".tiff" => "image/tiff",
".ico" => "image/x-icon",
".mpeg" => "video/mpeg",
".mpg" => "video/mpeg",
".mov" => "video/quicktime",
".qt" => "video/quicktime",
".avi" => "video/x-msvideo",
".asf" => "video/x-ms-asf",
".asx" => "video/x-ms-asf",
".wmv" => "video/x-ms-wmv",
".tbz" => "application/x-bzip-compressed-tar",
".tar.bz2" => "application/x-bzip-compressed-tar",
".tar.gz" => "application/x-tgz",
".bz2" => "application/x-bzip",
".gz" => "application/x-gzip",
".tar" => "application/x-tar",
".zip" => "application/zip",
".jpeg" => "image/jpeg",
".jpg" => "image/jpeg",
".png" => "image/png",
".gif" => "image/gif",
".xhtml" => "text/html",
".html" => "text/html",
".htm" => "text/html",
".dtd" => "text/xml",
".xml" => "text/xml",
".css" => "text/css",
".js" => "text/javascript",
".deb" => "application/x-deb",
".php" => "application/x-httpd-php",
"" => "text/plain",
) 

ctrl+o per salvare 
ctrl+x per uscire 

nano /etc/lighttpd/fastcgi.conf
incollare il seguente testo:
 #####################################################################
server.modules += ( "mod_fastcgi" )
#index-file.names += ( "index.php" )
fastcgi.server = ( ".php" =>
 ( "php-local" =>
 (
 "socket" => "/run/lighttpd/php-fastcgi.socket",
 "bin-path" => "/usr/bin/php-cgi",
 "max-procs" => 2,
 "bin-environment" => (
 "PHP_FCGI_CHILDREN" => "1",
 "PHP_FCGI_MAX_REQUESTS" => "64"
 ),
 "bin-copy-environment" => ( "PATH", "SHELL", "USER" ),
 "broken-scriptfilename" => "enable"
 )
 )
 )
#######################################################################
    
- Abilitare ed eseguire il servizio
systemctl enable lighttpd 
systemctl start lighttpd

e verificare che sia in esecuzione:
systemctl status lighttpd.service

- entrare nel sito web
 digitare:
123solar admin 
accedere a   http://192.168.x.yyyy/123solar/config/index.php
usare la password generata da "123solar admin " per entrare nel sito http://192.168.x.yyy/config/index.php 

- mappare una finta seriale a uno stream tcp usando socat (da fare SOLO se si usa un convertitore RS485/TCP)
pacman -Sy socat
nano /srv/http/scripts/EZL.sh
incollare 
#!/bin/bash
# avvio servizio socat su convertitori EZL, CSW, ecc
while true; do socat pty,link=/dev/ttyEZL0 tcp:192.168.x.yyy:zzz; done
exit

ctrl+o
ctrl+x

- impostare permessi esecuzione per lo script
cd /srv/http/scripts/ 
chmod +x EZL.sh 
nano /etc/systemd/system/123solar.service 

nella sezione [service] inserire la riga:
ExecStart=/srv/http/scripts/EZL.sh 

ctrl+o
ctrl+x

NB (192.168.x.yyy:zzz è l''indirizzo:porta del convertitore) il fatto di NON avere un convertitore Ezl70 ma un usr-tcp232-300 o altro non comporta nessun problema. L'importante è che sia impostato come TCP server, e velocità 19200 baud e con indirizzo sulla stessa rete del pc con il software di monitoraggio, ad es 192.168.x.kkk. 

NB Se si usa il convertitore, nella pagina web di configurazione di 123solar si dovrà usare come device /dev/ttyEZL0 invece di /dev/ttyUSB0


- Finite prove,verifiche, e configurazione via web di 123solar, attivare l'avvio automatico del servizio:
systemctl enable 123solar.service
systemctl start 123solar.service


Note

- Messaggio di warning eseguendo "make" del codice aurora;  make produceva un warning, e l'eseguibile generato (aurora) non funzionava correttamente, dando spesso errori di "Segmentation Fault". Se dovesse capitare, la soluzione è la seguente:
editare il file comm.c estratto dal pacchetto aurora.1.x.y.z.tar.gz

1) cambiare la signature della funzione static float *szCvrtFloat(char *Buffer); in static float szCvrtFloat(char *Buffer);
2) cambiare tutte le chiamate a *szCvrtFloat(..) in szCvrtFloat(..)
3) modificare la funzione static float szCvrtFloat(char *Buffer) come segue:

float szCvrtFloat(char *Buffer)
{
    unsigned char cValue[4];
    float *value;

    if (! bSwapEndian) {
        cValue[0] = Buffer[aParam4];
        cValue[1] = Buffer[aParam3];
        cValue[2] = Buffer[aParam2];
        cValue[3] = Buffer[aParam1];
    } else {
        cValue[0] = Buffer[aParam1];
        cValue[1] = Buffer[aParam2];
        cValue[2] = Buffer[aParam3];
        cValue[3] = Buffer[aParam4];
    }

    value = (float *)cValue;
    if (bVerbose) fprintf(stderr, "szCvrtFloat %12.6f 0x%02x%02x%02x%02x\n",*value,cValue[3],cValue[2],cValue[1],cValue[0]);

    float valF = *value;
    return(valF);
}

4) salavare e ricompilare, e ricopiare  aurora in http.(vedi passi dettagliati nella guida qui sopra)

- configurando pvoutput, avevo dei porblemi nel salvataggio delle impostazioni; questo ha risolto
sudo chmod 666 /srv/http/123solar/config/config_pvoutput.php

- per aggiungere la potrnza massima istantanea alla mail giornaliera di report, modificare il file 123solar.php aggiungendo/modificando la zona dove viene comparata la produzione corrente a quella di picco (linea circa 150)
$maxDate=date('H:i', $nowUTC);
$stringVal= $GP2[$invt_num] . '@'. $maxDate;
$maxFile=$DATADIR . '/max.txt';
file_put_contents($maxFile, $stringVal);

e la zona dove viene mandato il report giornaliero (linea circa 244)
$maxFile = $DATADIR . '/max.txt';
$maxVal = file_get_contents($maxFile);
$msg = "$date1\t$production kWh ($kwhkc kWh/kWp)\r\n Max $maxVal \r\n";