condivido con voi la mia esperienza in merito alla reinstallazione manuale di tutto il sistema su un'altra distribuzione linux senza raspberry con SDM630 e senza programma monitor di Garluk.
In seguito alla corruzione totale della scheda SD del mio Raspberry dove c'era tutto il sistema con SDM630, monitor di Garluk e virtmeter, ho deciso di riadattare tutto su un'altra distribuzione linux in quanto ho un serverino (su normale pc con scheda itx fanless) con una distribuzione CentOS 8, che è posizionato vicino all'inverter.
Il primo grande problema è stato quello di non poter utilizzare il programma monitor di Garluk in quanto lui rilasciò solamente il comando compilato per ARM (raspberry) senza codici sorgenti, di conseguenza può essere utilizzato solo su architettura ARM. A questo punto ho compilato e installato il programma mbmd:
https://github.com/volkszaehler/mbmd
è un demone che gira e crea un interfaccia http sulla porta 8080 che mette a disposizione delle API da poter utilizzare per prendere i valori necessari, da quì ho manipolato le api con output json per ricreare il file che creava il programma monitor, con questo script in python:
Codice: Seleziona tutto
#!/usr/bin/env python3
import os
import sys
import json
import requests
response = requests.get('http://localhost:8080/api/last/SDM1.111')
original_stdout = sys.stdout # Save a reference to the original standard output
with open('/dev/shm/metern2.txt', 'w') as f:
sys.stdout = f # Change the standard output to the file we created.
jsonResponse = response.json()
IE_Watt = jsonResponse["Sum"] * 1000
VR = jsonResponse["VoltageL1"]
VS = jsonResponse["VoltageL2"]
VT = jsonResponse["VoltageL3"]
print(f'2_VR({"{:.2f}".format(VR)}*V)')
print(f'2_VS({"{:.2f}".format(VS)}*V)')
print(f'2_VT({"{:.2f}".format(VT)}*V)')
print(f'2_PR({jsonResponse["PowerL1"]}*W)')
print(f'2_PS({jsonResponse["PowerL2"]}*W)')
print(f'2_PT({jsonResponse["PowerL3"]}*W)')
print(f'2_APR(0*VA)')
print(f'2_APS(0*VA)')
print(f'2_APT(0*VA)')
print(f'2_RPR(0*VAR)')
print(f'2_RPS(0*VAR)')
print(f'2_RPT(0*VAR)')
#print(f'2_PFR({jsonResponse["PowerL1"]}*W)')
#print(f'2_PFS({jsonResponse["PowerL2"]}*W)')
#print(f'2_PFT({jsonResponse["PowerL3"]}*W)')
print(f'2_PAR({jsonResponse["CosphiL1"]}*Dg)')
print(f'2_PAS({jsonResponse["CosphiL2"]}*Dg)')
print(f'2_PAT({jsonResponse["CosphiL3"]}*Dg)')
#print(f'2_AVN({jsonResponse[""]}*')
#print(f'2_ALC({jsonResponse[""]}*')
#print(f'2_SLC({jsonResponse["Sum"]}*A)')
#print(f'2_SLC({IE_Watt}*Wh)')
print(f'2_TP({jsonResponse["Power"]}*W)')
print(f'2_TAP({jsonResponse["ApparentPower"]}*VA)')
print(f'2_TRP({jsonResponse["ReactivePower"]}*VAR)')
#print(f'2_TPF({jsonResponse[""]}*')
print(f'2_TPA({jsonResponse["Cosphi"]}*Dg)')
print(f'2_F({jsonResponse["Frequency"]}*Hz)')
print(f'2_IE({IE_Watt}*Wh)')
print(f'2_EE({jsonResponse["Export"]}*Wh)')
#print(f'2_RIE({jsonResponse[""]}*')
#print(f'2_REE({jsonResponse[""]}*')
#print(f'2_VRS({jsonResponse[""]}*')
#print(f'2_VST({jsonResponse[""]}*')
#print(f'2_VTR({jsonResponse[""]}*')
#print(f'2_AVL({jsonResponse[""]}*')
#print(f'2_NC({jsonResponse[""]}*')
#print(f'2_TE({jsonResponse[""]}*')
#print(f'2_TRE({jsonResponse[""]}*')
sys.stdout = original_stdout
uid = 48
gid = 48
os.chown('/dev/shm/metern2.txt', uid, gid)
Ho chiamato questo script monitor e inserito in /usr/bin/monitor e produce il seguente output:
Codice: Seleziona tutto
[root@famany-server ~]# cat /dev/shm/metern2.txt
2_VR(235.79*V)
2_VS(238.19*V)
2_VT(233.92*V)
2_PR(511.87439*W)
2_PS(9.424373*W)
2_PT(0.0*W)
2_APR(0*VA)
2_APS(0*VA)
2_APT(0*VA)
2_RPR(0*VAR)
2_RPS(0*VAR)
2_RPT(0*VAR)
2_PAR(0.906385*Dg)
2_PAS(1.0*Dg)
2_PAT(-0.234561*Dg)
2_TP(536.070862*W)
2_TAP(592.390564*VA)
2_TRP(-232.240509*VAR)
2_TPA(0.918543*Dg)
2_F(50.007637*Hz)
2_IE(19833335.938*Wh)
2_EE(102.714996*Wh)
A questo punto si può procedere come nella guida di Garluk in quanto l'output che genera nel file /dev/shm/meter2.txt è più o meno lo stesso, molti valori non vengono utilizzati, quelli importanti sono 2_IE, 2_VR, 2_VS, 2_VT, 2_PR
Si può andare avanti poi con la guida di flane per le installazione manuele di 123solar, che funziona tranquillamente su qualsiasi sistema linux in quanto il programma aurora ha i codici sorgenti e può essere compilato su qualsiasi architettura e tutto funziona perfettamente, tranne per il fatto che sulla nuova versione di aurora non c'è più l'opzione -I che va semplicemente tolta e lasciata solo l'opzione -Y:
![Immagine](https://i.postimg.cc/fV5LyDks/123solar-screen.jpg)
Per la nuova versione di metern invece ho avuto un pò di problemi dati intanto da una versione molto nuova sul sistema di php, ho dovuto quindi aggiustare qualche errore quì e lì. Inoltre la nuova versione di metern ha un controllo su i comandi della comapps da abilitare, per un exploit di sicurezza che era uscito tempo fa. Anche la versione 2.4 di apache va configurata con dei parametri aggiuntivi per far funzionare l'area protetta da Basic Authentication:
Codice: Seleziona tutto
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
<Directory "/var/www/html/123solar/admin">
AuthType Basic
AuthName "123solar Password Protected Area"
# (Following line optional)
#AllowOverride All
AuthBasicProvider file
AuthUserFile /var/www/html/123solar/config/.htpasswd
Require valid-user
Order Allow,Deny
Deny from all
Satisfy Any
</Directory>
<Directory /var/www/html/meterN/admin>
AllowOverride All
AuthType basic
AuthName "meterN Password Protected Area"
AuthBasicProvider file
AuthUserFile /var/www/html/meterN/config/.htpasswd
Require valid-user
Order Allow,Deny
Deny from all
Satisfy Any
</Directory>
Sulla configurazione dei meter la nuova versione ha un problema (probabilmente dato dalla mia versione di php che è la 7.2.24), va modificato nel file admin/admin_meter.php:
Codice: Seleziona tutto
$cnta = count($ALLWDCMD);
//$cnta = count(array($ALLWDCMD));
Altrimenti non si crea correttamente la lista delle comapps che sono state abilitate dentro al file config/allowed_comapps.php.
Non sono riuscito ad utilizzare virtmeter in quanto mi dava per i valori di live sempre zero, ho provato a questo punto eflow, che andava bene per i grafici ma dava zero sui valori live.
Anzi per l'esattezza dava 0 su Autoconsumo e Prelievi, funzionavano solo le Immissioni ( il che è normale perchè è una "copia" dei valori live della produzione), ho dovuto riadattare il file eflowlive.php in questo modo, modificando la sezione consumi, commentando le linee in grassetto e aggiungendo quelle in giallo:
Codice: Seleziona tutto
// Consumo
$cnt = count($conslist);
for ($i = 0; $i < $cnt; $i++) {
$consmet = $conslist[$i];
// Now recupero valore consumo
[b]#$cmd = "more /dev/shm/metern$consmet.txt | egrep \"^$consmet\(\" | grep \"*W)\""; // Request Power values[/b]
[highlight=yellow]$cmd = "grep 2_TP\( /dev/shm/metern$consmet.txt | sed s/\"2_TP(\"//g | sed s/\"\*W)\"//g";[/highlight]
$datareturn = shell_exec($cmd);
$datareturn = trim($datareturn);
[b]#$datareturn = preg_replace("/^${'ID'.$consmet}\(/i", '', $datareturn); // VALUE*UNIT)
#$cons_val_live = preg_replace("/\*[a-z0-9]+\)$/i", '', $datareturn); // VALUE
#echo "$cons_val_live\n";
#$datareturn = $cons_val_live[/b]
[highlight=yellow]$cons_val_live = $datareturn;[/highlight]
settype($cons_val_live, 'float');
settype($housec, 'float');
$housec += $cons_val_live;
}
A questo punto tutto funziona correttamente:
![Immagine](https://i.postimg.cc/k2v1zhGD/metern-screen.jpg)
L'unica cosa che non ho capito è quella del tachimetro in alto a destra di metern. Ho impostato 6k in quanto la fornitura Enel è da 6Kw Trifase, ma la produzione del fotovoltaico risulta in maniera negativa e quindi il tachimetro è solo rosso anzichè partire da 0 a 3k di fotovoltaico in verde + la parte dei consumi in rosso.
Qualcuno sa il motivo?