Pagina 5 di 5

Re: SHELLY EM

Inviato: 11/10/2020, 12:33
da gigo979
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

Re: SHELLY EM

Inviato: 11/10/2020, 18:50
da Flane
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

Re: SHELLY EM

Inviato: 11/10/2020, 20:29
da gigo979
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

Re: SHELLY EM

Inviato: 06/01/2021, 13:12
da mariolino320
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.....

Re: SHELLY EM

Inviato: 09/01/2021, 12:38
da mariolino320
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.

Re: SHELLY EM

Inviato: 18/12/2021, 10:05
da Zan77
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.