io sto cercando di far leggere a metern o meglio al pooller 123solar la produzione da due inverter secondo le dritte di ninodifranco usando cioè questo file eflow:
#!/usr/bin/php
if (isset($_SERVER['REMOTE_ADDR'])) {
die('Direct access not permitted');
}
// This script will output --virtuals and estimated-- Wh in/out and self-consumption counters into a meterN compatible format
// It is simply based on your household's production and consumption real meters. The values will be averaged during a 5 min period and will lag from 5 min.
// ln -s /srv/http/metern/comapps/eflow.php /usr/bin/eflow
// Setup your virtual meters numbers :
$whinmet = 2; // Wh in
$whoutmet = 3; // Wh out
$selfcmet = 4; // selfconsumption
// No edit is needed below
if (isset($argv[1])) {
define('checkaccess', TRUE);
include('/var/www/metern/config/config_main.php');
date_default_timezone_set($DTZ);
for ($i = 1; $i <= $NUMMETER; $i++) { // detect the production/consumption meter
include("/var/www/metern/config/config_met$i.php");
if (${'ID' . $i} == 0) { // (inserire quì il Meter ID assegnato al I° inverter)
$prodmet1 = $i;
}
if (${'ID' . $i} == 0) { // (inserire quì il Meter ID assegnato al II° inverter)
$prodmet2 = $i;
}
if (${'ID' . $i} == 0) { // (inserire quì il Meter ID assegnato al III° inverter)
$prodmet3 = $i;
}
if (${'PROD' . $i} == 2) {
$consmet = $i;
}
}
$dir = '/var/www/metern/data/csv';
$output = array();
$output = glob($dir . '/*.csv');
sort($output);
$cnt = count($output);
if (file_exists($output[$cnt - 1])) {
$file = file($output[$cnt - 1]); // today
$contalines = count($file);
if ($contalines > 2) {
$lastarray = preg_split("/,/", $file[$contalines - 1]);
$prevarray = preg_split("/,/", $file[$contalines - 2]);
$year = substr($output[$cnt - 1], -12, 4);
$month = substr($output[$cnt - 1], -8, 2);
$day = substr($output[$cnt - 1], -6, 2);
} elseif ($contalines == 1 && file_exists($output[$cnt - 2])) { // yesterday, only header
$file = file($output[$cnt - 2]);
$contalines = count($file);
$lastarray = preg_split("/,/", $file[$contalines - 1]);
$prevarray = preg_split("/,/", $file[$contalines - 2]);
$year = substr($output[$cnt - 2], -12, 4);
$month = substr($output[$cnt - 2], -8, 2);
$day = substr($output[$cnt - 2], -6, 2);
} elseif ($contalines == 2 && file_exists($output[$cnt - 2])) { // yesterday, header + only one data line
$lastarray = preg_split("/,/", $file[$contalines - 1]);
$file = file($output[$cnt - 2]);
$contalines = count($file);
$prevarray = preg_split("/,/", $file[$contalines - 2]);
$year = substr($output[$cnt - 1], -12, 4);
$month = substr($output[$cnt - 1], -8, 2);
$day = substr($output[$cnt - 1], -6, 2);
} else {
$year = 0;
$month = 0;
$day = 0;
}
$hour = substr($lastarray[0], 0, 2);
$min = substr($lastarray[0], 3, 2);
$UTCdate = strtotime($year . '-' . $month . '-' . $day . ' ' . $hour . ':' . $min);
$nowutc = strtotime(date('Ymd H:i:s'));
if ($nowutc - $UTCdate < 330) {
$prod_val_first = trim($prevarray[$prodmet1]) + trim($prevarray[$prodmet2]) + trim($prevarray[$prodmet3]); // modifica multi inverter
$prod_val_last = trim($lastarray[$prodmet1]) + trim($lastarray[$prodmet2]) + trim($lastarray[$prodmet3]); // modifica multi inverter
settype($prod_val_first, 'float');
settype($prod_val_last, 'float');
if ($prod_val_first <= $prod_val_last) {
$prod_val_last -= $prod_val_first;
} else { // counter pass over
$prod_val_last += ${'PASSO' . $prodmet1} - $prod_val_first; // modifica multi inverter
}
$housep = $prod_val_last;
$cons_val_first = trim($prevarray[$consmet]);
$cons_val_last = trim($lastarray[$consmet]);
settype($cons_val_first, 'float');
settype($cons_val_last, 'float');
if ($cons_val_first <= $cons_val_last) {
$cons_val_last -= $cons_val_first;
} else { // counter pass over
$cons_val_last += ${'PASSO' . $consmet} - $cons_val_first;
}
$housec = $cons_val_last;
if ($argv[1] == 'whout') {
$val = $housep - $housec;
if ($val < 0) {
$val = 0;
}
$val += $lastarray[$whoutmet];
if ($val > ${'PASSO' . $whoutmet}) {
$val -= ${'PASSO' . $whoutmet};
}
$id = ${'ID' . $whoutmet};
}
if ($argv[1] == 'whin') {
$val = $housec - $housep;
if ($val < 0) {
$val = 0;
}
$val += $lastarray[$whinmet];
if ($val > ${'PASSO' . $whinmet}) {
$val -= ${'PASSO' . $whinmet};
}
$id = ${'ID' . $whinmet};
}
if ($argv[1] == 'selfc') {
if ($housep > $housec) {
$val = $housec;
} else {
$val = $housep;
}
$val += $lastarray[$selfcmet];
if ($val > ${'PASSO' . $selfcmet}) {
$val -= ${'PASSO' . $selfcmet};
}
$id = ${'ID' . $selfcmet};
}
settype($val, 'float');
} else {
if ($argv[1] == 'whout') {
$id = ${'ID' . $whoutmet};
}
if ($argv[1] == 'whin') {
$id = ${'ID' . $whinmet};
}
if ($argv[1] == 'selfc') {
$id = ${'ID' . $selfcmet};
}
$val = null;
}
} else {
$val = null;
}
$str = utf8_decode("$id($val*Wh)\n");
echo "$str";
} else {
die("Usage: eflow { whout | whin | selfc }\n");
}
?>
ma non funziona, visto credo possa essere di aiuto anche ad altre persone ho deciso di inserirlo qui.
credo ci sia da modificare qualcos altro in quanto lo stesso poller credo abbia variabili diverse dalle nuove aggiunte dal file eflow modificato, se qualcuno ha qualche idea è ben accetta grazie
Commenta