SHELLY EM

Discussioni relative al software di monitoraggio energetico METERN
gigo979
Messaggi: 12
Iscritto il: 02/02/2020, 12:55

Re: SHELLY EM

Messaggioda gigo979 » 11/10/2020, 12:33

Ciao ragazzi, ho la necessità di monitorare i consumi del garage (causa imminente arrivo dell'auto elettrica) e non potendo passare nuovi fili causa canaline piene, ho acquistato uno shelly em con le relative due pinze. Tuttora ho in uso 123 solar e metern che mi monitorano il fotovoltaico e i consumi in casa con contatore sdm120. Vorrei aggiungere quindi shelly em per monitorare i consumi del garage. Ho provato ad utilizzare lo script di Flane reqshelly.php, ma purtroppo metern mi restituisce errore nel test di lettura.
Premetto che ho già modificato all'interno del file "meters" con "emeters". Oltre a inserire il file reqshelly.php all'interno della cartella /var/www/comapps ,assegnati i relativi permessi e link simbolico in /usr/local/bin/ , aggiunto il nuovo id metern 6 come da foto seguente, vi è qualcos'altro da fare che mi sfugge?
Grazie
Immagine


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

Re: SHELLY EM

Messaggioda Flane » 11/10/2020, 18:50

Posta il contenuto dello script reqshelly che usi, e posta il risultato dei due comandi che hai messi in main ed in live eseguiti manualmente da terminale

gigo979
Messaggi: 12
Iscritto il: 02/02/2020, 12:55

Re: SHELLY EM

Messaggioda gigo979 » 11/10/2020, 20:29

Grazie Flane
ho provato da terminale mi dava il seguente errore:
/usr/bin/php^M: interprete errato: File o directory non esistente

Ho risolto convertendo con notepad++ il file reqshelly.php in formato Unix

Grazie

mariolino320
Messaggi: 42
Iscritto il: 10/11/2018, 1:10

Re: SHELLY EM

Messaggioda mariolino320 » 06/01/2021, 13:12

Ciao a tutti, una domanda per Flane:

Ho installato il tuo script reqshelly e funziona anche con ShellyPlug. Però ci sono dei problemi:

1) la misurazione dell'energia consumata indicata da shelly non è espressa in Wh ma in W/minuto, quindi penso andrebbe convertita. https://shelly-api-docs.shelly.cloud/#s ... ugs-status

2) Se va via la corrente (o se tolgo la presa dal muro) il misuratore di corrente consumata energy0 riparte da 0.... Non so se lo stesso problema si manifesta anche con shelly 2.5. Questo scombussola i csv dei consumi. Come si può risolvere?

Grazie per tutto il lavoro che fai/fate e per questo fantastico forum.....

mariolino320
Messaggi: 42
Iscritto il: 10/11/2018, 1:10

Re: SHELLY EM

Messaggioda mariolino320 » 09/01/2021, 12:38

Ciao a tutti, mi sono permesso di apportare delle modifiche a reqshelly. Ovviamente mi farebbe piacere un vostro parere in quanto NON SO PROGRAMMARE :? :mrgreen: :lol:

Come scritto in precedenza reqshelly (almeno su shellyplug, ma penso anche con gli altri shelly) ha 2 problemi.
Il primo riguarda la rilevazione dei consumi che su shelly sono in W-minuto e non Wh, questo semplicemente si corregge dividendo per 60 il valore letto....
Il secondo è più problematico in quanto se va via la corrente a shelly il contatore parte da zero. Quindi ho modificato lo script prendendo spunto da poolerboiler che legge dal CSV l'ultima lettura rilevata e creando un file di appoggio con l'ultima lettura di shelly per effettuare dei confronti....

Le modifiche le ho inserite in un file "incluso" in reqshelly per mia comodità

Qui il file reqshelly da me modificato:

Codice: Seleziona tutto

#!/usr/bin/php
<?php
// This script will output a meterN compatible format for read Shelly 2.5 and Shelly 1PM device
//
// Script reqshelly.php v1.0 by Flanesi
//
// You'll need to setup correct permission chmod +x
// then ln -s /var/www/comapps/reqshelly.php /usr/local/bin/reqshelly
// Request command with 'reqshelly IP power0 IDmetern' or 'reqshelly IP energy0 IDmetern'

if (isset($_SERVER['REMOTE_ADDR'])) {
    die('Direct access not permitted');
}
if (!isset($argv[1]) or !isset($argv[2]) or !isset($argv[3])) {
   die("Abording: no valid argument given.\nUsage: reqshelly IP (power0|power1|energy0|energy1) IDmetern\n");
      } elseif ($argv[2] == 'power0') {
         $url = "http://"."$argv[1]"."/status";
         $pagina = file_get_contents($url);
         $json_output = json_decode($pagina, true);
         $val = $json_output['meters'][0]['power'];
         $outstr = "$argv[3]($val*W)";
       } elseif ($argv[2] == 'power1') {
         $url = "http://"."$argv[1]"."/status";
         $pagina = file_get_contents($url);
         $json_output = json_decode($pagina, true);
         $val = $json_output['meters'][1]['power'];
         $outstr = "$argv[3]($val*W)";
       } elseif ($argv[2] == 'energy0') {
         $url = "http://"."$argv[1]"."/status";
         $pagina = file_get_contents($url);
         $json_output = json_decode($pagina, true);
         $val = $json_output['meters'][0]['total'];
          include("/var/www/comapps/shellymario.php");
       $outstr = "$argv[3]($val*W)";
        } elseif ($argv[2] == 'energy1') {
         $url = "http://"."$argv[1]"."/status";
         $pagina = file_get_contents($url);
         $json_output = json_decode($pagina, true);
         $val = $json_output['meters'][1]['total'];
         include("/var/www/comapps/shellymario.php");
       $outstr = "$argv[3]($val*W)";
 // and so on ....
   } else {
    die("Usage: reqshelly IP (power0|power1|energy0|energy1) IDmetern\n");
   }
echo "$outstr";
?>


mentre il file shellymario.php contiene le istruzioni per "correggere" i problemi....
ho creato una cartella sotto metern per contenere i file di appoggio: /var/www/metern/data/shelly

Codice: Seleziona tutto

<?php
   $pathtomn = '/var/www/metern';
   $dirshelly = '/var/www/metern/data/shelly';
   $metnum = $argv[3]; // Meter ID Consumi
   $fileshelly="$dirshelly"."/shelly"."$metnum.txt";
   define('checkaccess', TRUE);
   include("$pathtomn/config/config_main.php");
   include("$pathtomn/config/config_met$metnum.php");
   $shelly_energy_prec = file_get_contents($fileshelly);
      
   // acquisisce il valore precedente dal csv
   $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 > 1) {
         $prevarray = preg_split("/,/", $file[$contalines - 1]);
         
      } elseif ($contalines == 1 && file_exists($output[$cnt - 2])) { // yesterday, only header
         $file       = file($output[$cnt - 2]);
         $contalines = count($file);
         $prevarray = preg_split("/,/", $file[$contalines - 1]);
      }
      $cons_val_first = trim($prevarray[$metnum]);
   } else {
      $cons_val_first = null;
   }     

   $shelly_energy = round($val/60, ${'PRECI' . $metnum});
   $shelly_energy_csv = $cons_val_first;
   settype($lastval, 'float');
   settype($prevcount, 'float');
   settype($cons_val_first, 'float');
   settype($shelly_energy, 'float');
   settype($shelly_energy_csv, 'float');
   settype($shelly_energy_prec, 'float');

   if ($shelly_energy < $shelly_energy_prec) { 
      $val = $shelly_energy + $shelly_energy_csv;
      
      file_put_contents("$dirshelly/shelly$metnum.txt", $shelly_energy);
   } ELSE {
      $val = $shelly_energy + $shelly_energy_csv - $shelly_energy_prec;
      file_put_contents("$dirshelly/shelly$metnum.txt", $shelly_energy);
   }
   $val = round($val, ${'PRECI' . $metnum});
?>



Attendo un vs parere, intanto l'ho testato da qualche giorno e funziona correttamente.

Zan77
Messaggi: 19
Iscritto il: 10/03/2021, 22:19

Re: SHELLY EM

Messaggioda Zan77 » 18/12/2021, 10:05

Ciao.
Ho utilizzato lo script reqshelly per leggere le temperature dell'addon di shelly 1 modificandolo così:

Codice: Seleziona tutto

#!/usr/bin/php
<?php
// This script will output a meterN compatible format for read Shelly 2.5 and S$
//
// Script reqshelly.php v1.0 by Flanesi
//
// You'll need to setup correct permission chmod +x
// then ln -s /var/www/comapps/reqshelly.php /usr/local/bin/reqshelly
// Request command with 'reqshelly IP power0 IDmetern' or 'reqshelly IP energy0$

if (isset($_SERVER['192.168.1.187'])) {
die('Direct access not permitted');
}
if (!isset($argv[1]) or !isset($argv[2]) or !isset($argv[3])) {
die("Abording: no valid argument given.\nUsage: reqshelly IP (T_ACS|T_PAV) I$
} elseif ($argv[2] == 'T_ACS') {
$url = "http://"."$argv[1]"."/status";
$pagina = file_get_contents($url);
$json_output = json_decode($pagina, true);
$val = $json_output['ext_temperature'][0]['tC'];
$outstr = "$argv[3]($val*°C)";
} elseif ($argv[2] == 'T_PAV') {
$url = "http://"."$argv[1]"."/status";
$pagina = file_get_contents($url);
$json_output = json_decode($pagina, true);
$val = $json_output['ext_temperature'][1]['tC'];
$outstr = "$argv[3]($val*°C)";
} else {
die("Usage: reqshelly IP (T_ACS|T_PAV) IDmetern\n");
}
echo "$outstr";
?>

Dato i permessi:
chmod +x reqshelly.php
ln -s /var/www/comapps/reqshelly.php /usr/local/bin/reqshelly

Ho inserito i meter

Immagine

Immagine

Ora sul grafico vedo:

Immagine

ma non si aggiorna il grafico.
Cosa manca?
Grazie.

Aggiornamento1:
Il grafico si aggiorna ma non riporta le letture delle Temp ma solo la differenza tra due letture consecutive.
Screenshot_20211218-182040_Chrome.jpg


Aggiornamento2:
Dopo un giorno ho dovuto eliminare i meter 7 e 8 perchè gli SDM di produzione e consumi hanno cominciato a leggere dati assurdi.
Non capisco come le letture via wifi dello Shelly importate in MeterN possano compromettere il bus degli SDM. Eliminati il 7 e 8, gli SDM hanno ricominciato a leggere perfettamente.


Torna a “MeterN”

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti