meterN and 123solar su macchine diverse

Discussioni relative al software di monitoraggio energetico METERN
nicolbe
Messaggi: 5
Iscritto il: 22/01/2016, 9:15

meterN and 123solar su macchine diverse

Messaggioda nicolbe » 22/01/2016, 10:37

Innanzitutto grazie per questo forum per queste due applicazioni davvero utili :)

Riposto qui un utile script che avevo postato sul forum ufficiale di Metern.

La mia configurazione di rete (sia elettrica che di rete internet) mi ha impedito di poter gestire sia l'inverter (situato in cantina) che il contatore principale (situato all'ingresso dell'appartamento) con il medesimo raspberry, senza far passare cavi di controllo nei corrugati dell'impianto.
La soluzione più semplice è stata installare 2 differenti raspberry, uno vicino l'inverter e l'altro nei pressi della scatola dei magnetotermici.

Essendo 123solar e meterN studiati per lavorare insieme o dovuto elaborare uno script di un virtualmeter per meterN per poter interrogare 123solar e gestire la visualizzazione dei dati.

Lo script va modificato nei parametri $invtnum, $pathto123s, $METERID, $INVTmetnum
Una volta modificato lo script, poi, va creato, come di consueto, il link simbolico allo stesso nella cartella /usr/bin e va effettuata la configurazione del meter nelle pagine di amministrazione.

Codice: Seleziona tutto

#!/usr/bin/php
<?php
if (isset($_SERVER['REMOTE_ADDR']))
{
    die('Direct access not permitted');
}
// This script will output a 123solar counter into a meterN compatible format
// You'll need to setup the path to 123, your inverter number and your meter id
// Then ln -s /srv/http/metern/comapps/123solar.php /usr/bin/123solar
// Request Main command with '123solar energy' and live command '123solar power'

// 123solar config
$invtnum    = 1;
$pathto123s = 'http://hostname/123solar/programs/programlive.php?invtnum='.$invtnum;

// meterN config
$METERID    = 'solar';
$INVTmetnum = 1; // meter number

//
// Do not make changes beyond this line
//
// Global variables
$KWHT_tot = 0;
$GP = 0;

// No edit is needed below
if (isset($argv[1]))
{
    if ($argv[1] == 'power')
        {
            // create curl resource
            $ch = curl_init();

            // set url
            curl_setopt($ch, CURLOPT_URL, $pathto123s);

         //return the transfer as a string
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

            //decode the JSON into an array if hte second param is set to true otherwise the JSON will be decoded into an object
            $arrayDecodedFromJSON = json_decode(curl_exec($ch), true);

            // close curl resource to free up system resources
            curl_close($ch);

            $GP = $arrayDecodedFromJSON['G1P'] + $arrayDecodedFromJSON['G2P'] + $arrayDecodedFromJSON['G3P'];
         if ($GP > 1000)
         {
            $GP = round($GP, 0);
         }
         else
         {
            $GP = round($GP, 1);
         }
      }
    elseif ($argv[1] == 'energy')
        {
            // create curl resource
            $ch = curl_init();

            // set url
            curl_setopt($ch, CURLOPT_URL, $pathto123s);

            //return the transfer as a string
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

            //decode the JSON into an array if hte second param is set to true otherwise the JSON will be decoded into an object
            $arrayDecodedFromJSON = json_decode(curl_exec($ch), true);

            // close curl resource to free up system resources
            curl_close($ch);

         $awdate = $arrayDecodedFromJSON['awdate']; //test if inverter is up or not
         if ($awdate == "--:--")
         {
            $KWHT_tot = 0; // Inverter is off
         }
         else
         {
            $KWHT_tot = round(($arrayDecodedFromJSON['KWHT'] * 1000), 0); //in Wh
         }
      }

    if ($argv[1] == 'energy' && $KWHT_tot == 0)
        { // 123s ain't running at night retrieve the value in meterN csv
        $dir    = '../data/csv/';
        $output = array();
        $output = glob($dir . '*.csv');
        sort($output);
        $cnt = count($output);

        if ($cnt > 0)
        {
            $lines      = file($output[$cnt - 1]);
            $contalines = count($lines);

            $KWHT_tot = null;
            $j    = 0;
            while (!isset($KWHT_tot))
            {
                $j++;
                $array = preg_split('/,/', $lines[$contalines - $j]);
                $KWHT_tot  = trim($array[$INVTmetnum]);
                if ($KWHT_tot == '')
                {
                    $KWHT_tot = null;
                }
                if ($j == $contalines)
                {
                    $KWHT_tot = null; // No value found
                }
            }
        }
        else
        {
            die("Abording:no csv found\n");
        }
    }

    if ($argv[1] == 'power' && $GP == 0)
    { // 123s ain't running
        $GP = 0;
    }

    if ($argv[1] == 'power')
    {
        echo "$METERID($GP*W)\n";
    }
    elseif ($argv[1] == 'energy')
    {
        echo "$METERID($KWHT_tot*Wh)\n";
    }
   else
    {
        die("Abording: no valid argument given\n");
    }
}
else
{
    die("Usage: 123solar { power | energy }\n");
}
?>


Avatar utente
Flane
Messaggi: 2460
Iscritto il: 16/01/2016, 15:02

Re: meterN and 123solar su macchine diverse

Messaggioda Flane » 22/01/2016, 11:14

Grazie nicolbe per la tua interessante modifica.

Non c'è dubbio che le limitazioni fisiche ed impiantistiche possano portare ad adottare soluzione come la tua.
Bisogna però anche riconoscere come questo tipo di installazioni portino ad aumentare notevolmente le probabilità di incappare poi in problemi.

Secondo la mia esperienza ho notato che meno passaggi di dati fra dispositivi vari si fanno e meno collegamenti wireless si utilizzano, si riducono notevolmente le fonti di problemi.

Personalmente, quando possibile, preferisco sempre collegare il tutto via cavo e possibilmente utilizzare un'unico dispositivo (raspberry), sia per una convenienza economica che proprio per avere meno problemi successivamente


Ho allegato lo script per comodità ;)

Magari se hai voglia sarebbe meglio descrivere nel dettaglio il tuo sistema e chiarire con un esempio (anche con indirizzi IP e numerazione dei vari meter) come si utilizza lo script ....
Allegati
123solar.zip
(1.4 KiB) Scaricato 223 volte

SuxMario78
Messaggi: 8
Iscritto il: 22/02/2016, 13:50

Re: meterN and 123solar su macchine diverse

Messaggioda SuxMario78 » 22/02/2016, 13:57

ciao @nicoalbe, io sono nella tua stessa situazione, non sono riuscito a far passare i cavi... pensavo di implementare via rete un arduino master e uno slave per rilanciare il protocollo, o banalmente mettermi in parallelo sul RX dell'inverter...
Ovviamente la soluzione che hai adottato è sicuramente la più pulita, ma non sono ancora riuscito a far funzionare bene meterN.
Ho scaricato l'immagino di Walter62 con Jessie, ed aspetto a questo punto la guida di flane per poi integrare magari con quello che ti chiede Flane.

MARCIOBA
Messaggi: 54
Iscritto il: 22/10/2018, 17:57

Re: meterN and 123solar su macchine diverse

Messaggioda MARCIOBA » 09/08/2019, 17:20

Ciao nicolbe mi trovo nella stessa situazione non è che potresti descrivere meglio i passaggi necessari?


Torna a “MeterN”

Chi c’è in linea

Visitano il forum: Nessuno e 13 ospiti