Adattamento sistema su altra distribuzione linux

Discussioni relative a software necessario per il monitoraggio e il Raspberry
FaManY77
Messaggi: 74
Iscritto il: 24/10/2017, 12:20

Adattamento sistema su altra distribuzione linux

Messaggioda FaManY77 » 18/03/2022, 12:09

Buongiorno a tutti,
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

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

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?




Torna a “Software”

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti