Monitoraggio impianto fotovoltaico con Shelly EM


Vipsolar fotovoltaico

ho poche idee e molto confuse ; vorrei fare: monitoraggio di produzione e consumo generale su impianto trifase con potenza impegnata 30 kw e produzione ftv 32 kw; monitorare consumo singolo di due celle frigorifere ; monitorare consumo di due lavatrici un'asciugatrice ed una stiratrice a rullo. posseggo un raspberry pi3B. livello conoscenza del sistema operativo = "dummies"! da dove comincio? è meglio usare shelly 3em o usare moduli sdm ? anche per ottimizzare la spese, sto cercando la soluzione piu semplice , tutti i locali hanno il segnale wi-fi. Inoltre sono sicuro che qualcuno ,molto piu esperto di me, possa aiutare tutti implementando e semplificando con chatGPT innumerevoli funzioni . A presto....
 
Esattamente, il csv sta come file sullo shelly e lo puoi prendere come fosse un file e lo scarichi. Invece se usi le API shelly puoi interrogare lo stato tramite get e ti restituisce un json con i dati live (non storici), ma come dicevo il dato dei kWh totali che io uso nello script leggendo ogni 5min faccio la differenza dal valore precedente per capire la produzione e i consumi, ma se va via la corrente e torna a 0 non si può fare più la differenza. Insomma è un problema del mio script (che ho risolto), non dello Shelly

bravo e come? ;)
se compro lo shelly ti posso chiedere?
 
Codice:
#bin/bash
#Required Unix tool bc & jq

###### SHELLY EM SECTION #######
#insert Shelly EM admin user
readonly SHEM_USER="xxx@gmail.com"
#insert Shelly EM admin password
readonly SHEM_PWD="xxxxx"
#insert Shelly EM local IP
readonly SHEM_IP="192.168.1.41"
#insert Shelly EM ID of PhotoVoltaic Meter PRODUCTION POSITIVE VALUE
readonly SHEM_PV_ID="0"
#insert Shelly EM ID of Grid Meter GRID POSITIVE VALUE FOR CONSUMED, NEGATIVE FOR RETURNED
readonly SHEM_GRID_ID="1"
#insert Multiplayer in percent for Energy correction, 0 for no correction, positive for increment, negative to reduce
readonly SHEM_MISUREMENT_ADJUST="0"

###### PV Output SECTION #######
#insert PV Output API Key (from [url]https://pvoutput.org/account.jsp[/url])
readonly PVOUTPUT_APIKEY="xxxxx63d849f5f2aafd8e6c5"
#insert PV Output System ID (from [url]https://pvoutput.org/account.jsp[/url])
readonly PVOUTPUT_SYSID="xxxxxx"
#insert "yes" to upload also production data from Shelly EM, "no" to upload only consumption
readonly UPLOAD_PROD="yes"

###### SOLAREDGE SECTION #######
#if you want to skip SolarEdge data upload uncomment the following line
readonly SEUPDATE="no"
#insert SolarEdge Site ID
readonly SE_SITEID="1571234"
#insert SolarEdge Inverter Serial Number
readonly INVERTERSN="xxxxx-E7"
#insert SolarEdge API Key
readonly SE_APIKEY="xxxxUXXXXXXXXXXXXXX"

readonly VAR_FILE="$HOME/INITIALVALUES"
readonly LOG_FILE="$HOME/Shelly2PVOutput.log"
SEUPDATE="yes"

echo "Start getting measurement from Shelly EM "$SHEM_IP" and upload to PVOutput "$PVOUTPUT_SYSID | tee -a $LOG_FILE
echo "START TIME: "$(date +%R:%S) | tee -a $LOG_FILE

[[ -f $VAR_FILE ]] && { [[ $(date -r $VAR_FILE +%F) == $(date +%F) ]] && source $VAR_FILE || rm -f $VAR_FILE; }

if ! [[ -f $VAR_FILE ]]; then
CONSUMED=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_GRID_ID | jq '.total')
echo "SHELLY ENERGY CONSUMED: "$CONSUMED" Wh" | tee -a $LOG_FILE
RETURNED=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_GRID_ID | jq '.total_returned')
echo "SHELLY ENERGY RETURNED: "$RETURNED" Wh" | tee -a $LOG_FILE
PV=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_PV_ID | jq '.total')
echo "SHELLY ENERGY PRODUCED: "$PV" Wh" | tee -a $LOG_FILE
TOTAL=$(bc -l  echo "SHELLY ENERGY TOTAL BALANCE: "$TOTAL" Wh" | tee -a $LOG_FILE
PVOutputSTART=$(curl -s -d "d="$(date +%Y%m%d) -d "stats=1" -H "X-Pvoutput-Apikey: "$PVOUTPUT_APIKEY -H "X-Pvoutput-SystemId: "$PVOUTPUT_SYSID [url]https://pvoutput.org/service/r2/getstatus.jsp[/url])
IFS=';' read -ra TEMP  IFS=',' read -ra TEMP0  IFS=',' read -ra TEMP1  re='^[0-9]+$'
if ! [[ $TEMP0 =~ $re ]] ; then
PVOutputENERGY=0
else
PVOutputENERGY=${TEMP0}
fi
echo "PV Output ENERGY PRODUCED: "$PVOutputENERGY" Wh" | tee -a $LOG_FILE
if ! [[ $TEMP1 =~ $re ]] ; then
PVOutputENERGYUSED=0
else
PVOutputENERGYUSED=${TEMP1}
fi
echo "PV Output ENERGY USED: "$PVOutputENERGYUSED" Wh" | tee -a $LOG_FILE
echo -e "TOTAL=$TOTAL\nPVOutputENERGY=$PVOutputENERGY\nPVO utputENERGYUSED=$PVOutputENERGYUSED\nPV=$PV" > $VAR_FILE
echo "First Time of the day. Exit" | tee -a $LOG_FILE
exit 0
fi
echo -e "LAST TOTAL ENERGY COUNTER: "$TOTAL" Wh\nPVOutput ENERGY Production: "$PVOutputENERGY" Wh\nPVOutput ENERGY Used: "$PVOutputENERGYUSED" Wh" | tee -a $LOG_FILE
CONSUMED_now=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_GRID_ID | jq '.total')
RETURNED_now=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_GRID_ID | jq '.total_returned')
PV_now=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_PV_ID | jq '.total')
PV_POWER=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_PV_ID | jq '.power')
if [[ $PV_POWER =~ "-" ]]; then
PV_POWER=0
fi
GRID_POWER=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_GRID_ID | jq '.power')
VOLTAGE=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_PV_ID | jq '.voltage')
CONSUMPTION_POWER=$(bc -l  TOTAL_now=$(bc -l  echo "TOTAL ENERGY COUNTER @"$(date +%R) $TOTAL_now" Wh" | tee -a $LOG_FILE

[COLOR=#e74c3c][I][B]if (( bc -l  $TOTAL") )); then
ENERGY=$(bc -l 100)+$PVOutputENERGYUSED)")
else
ENERGY=$TOTAL_now
fi
if (( bc -l  $PV") )); then
PV_ENERGY=$(bc -l 100)+$PVOutputENERGY")
else
PV_ENERGY=$PV_now
fi[/B][/I]
#ENERGY=$(bc -l 100)+$PVOutputENERGYUSED)")
#PV_ENERGY=$(bc -l 100)+$PVOutputENERGY")[/COLOR]

printf "\e[1;34mData from Shelly @"$(date +%R:%S)"\n\e[0m" | tee -a $LOG_FILE
echo "PV Power: "$PV_POWER" W" | tee -a $LOG_FILE
echo "Cons Power: "$CONSUMPTION_POWER" W" | tee -a $LOG_FILE
printf "PV Energy now: %.1f Wh\n" $PV_ENERGY | tee -a $LOG_FILE
printf "Energy now: %.1f Wh\n" $ENERGY | tee -a $LOG_FILE
if test "$UPLOAD_PROD" = "yes"; then
curl -d "d="$(date +%Y%m%d) -d "t="$(date +%R) -d "v1="$PV_ENERGY -d "v2="$PV_POWER -d "v3="$ENERGY -d "v4="$CONSUMPTION_POWER -d "v6="$VOLTAGE -H "X-Pvoutput-Apikey: "$PVOUTPUT_APIKEY -H "X-Pvoutput-SystemId: "$PVOUTPUT_SYSID [url]https://pvoutput.org/service/r2/addstatus.jsp[/url] | tee -a $LOG_FILE
else
curl -d "d="$(date +%Y%m%d) -d "t="$(date +%R) -d "v2="$PV_POWER -d "v3="$ENERGY -d "v4="$CONSUMPTION_POWER -d "v6="$VOLTAGE -H "X-Pvoutput-Apikey: "$PVOUTPUT_APIKEY -H "X-Pvoutput-SystemId: "$PVOUTPUT_SYSID [url]https://pvoutput.org/service/r2/addstatus.jsp[/url] | tee -a $LOG_FILE
fi
printf "\n" | tee -a $LOG_FILE
if test "$SEUPDATE" = "yes"; then
SEUPDATE="no"
TENMINSAGO=$(($(date +%s)-15*60))
SELIVEDATA=$(curl -s "https://monitoringapi.solaredge.com/equipment/"$SE_SITEID"/"$INVERTERSN"/data.json?startTime=$(date -d @$TENMINSAGO +%F)%20$(date -d @$TENMINSAGO +%T)&endTime=$(date +%F)%20$(date +%T)&api_key="$SE_APIKEY)
count=$(echo $SELIVEDATA | jq '.data.count')
for i in $(seq 0 $(($count-1))); do
SELIVEDATAAR=$(echo $SELIVEDATA | jq '.data.telemetries['$i'].date,.data.telemetries['$i'].temperature,.data.telemetries['$i'].L1Data.acVoltage,.data.telemetries['$i'].L1Data.activePower')
eval "array=($SELIVEDATAAR)"
SELIVEDATA_date=${array[0]}
SELIVEDATA_temp=${array[1]}
SELIVEDATA_acV=${array[2]}
SELIVEDATA_Power=${array[3]}
printf "\e[1;31mData from SolarEdge\n\e[0m" | tee -a $LOG_FILE
echo "SE data: "$SELIVEDATA_date | tee -a $LOG_FILE
echo "SE Temp: "$SELIVEDATA_temp" °C" | tee -a $LOG_FILE
echo "SE AC V: "$SELIVEDATA_acV" V" | tee -a $LOG_FILE
echo "SE Power: "$SELIVEDATA_Power" W" | tee -a $LOG_FILE
curl -d "d="$(date -d "$SELIVEDATA_date" +%Y%m%d) -d "t="$(date -d "$SELIVEDATA_date" +%R) -d "v2="$SELIVEDATA_Power -d "v5="$SELIVEDATA_temp -d "v6="$SELIVEDATA_acV -H "X-Pvoutput-Apikey: "$PVOUTPUT_APIKEY -H "X-Pvoutput-SystemId: "$PVOUTPUT_SYSID [url]https://pvoutput.org/service/r2/addstatus.jsp[/url] | tee -a $LOG_FILE
printf "\n" | tee -a $LOG_FILE
done
else
SEUPDATE="yes"
fi
echo -e "TOTAL=$TOTAL\nPVOutputENERGY=$PVOutputENERGY\nPVO utputENERGYUSED=$PVOutputENERGYUSED\nPV=$PV\nSEUPD ATE=$SEUPDATE" > $VAR_FILE

In rosso la modifica per correggere il problema della mancanza di corrente. Sono 10 righe aggiunte e due commentate col # (si possono cancellare)
 
Per la cronaca, ho acquistato un paio di Shelly Pro 3EM, che mi arriveranno nelle prossime settimane visto che non sono ancora usciti. Uno lo userò per un po' in parallelo al mio progetto con Influx e Grafana e gli SDM per il monitoraggio dell'impianto fotovoltaico (anche perchè a breve lo estenderò con altri 11 pannelli), in una configurazione quindi che farà a meno del raspberry e quindi sarà più facile da implementare per chiunque. Un'altro invece lo userò al posto dello Shelly Pro 4PM che ho tentato di usare per il monitoraggio del consumo di alcune utenze ma che, a causa dei problemi con la persistenza del valore di "import" (chiamato aenergy) non posso usare per tale scopo. Ne parlo nell'apposita discussione

https://www.energeticambiente.it/fon...91#post2226891

Un saluto a tutti
 
Ciao a tutti. Ho un impianto fotovoltaico dal 2008 e non ho mai avuto un sistema di monitoraggio. Da poco ho scoperto questa discussione e spinto dalla curiosità ho acquistato 2 shelly EM. Il mio impianto è un po' contorto, quindi non posso fare modifiche. Ho posizionato uno shelly nel quadretto dentro casa, con una pinza leggo il consumo totale della casa e con la seconda leggo il consumo del chiller dell'impianto di riscaldamento a pavimento. Il secondo EM l'ho posizionato in cortile, sul cavo di fase in uscita dall'inverter, e mi rileva la produzione dell'impianto, la seconda pinza per adesso è libera. Ho notato che dal contatore di scambio, che è ubicato all'esterno della mia proprietà, sono collegati 4 cavi. La cosa strana che ho rilevato è che se sposto la pinza dal cavo di fase al neutro, la misurazione non cambia. È normale? Grazie mille a chi vorrà darmi qualche chiarimento e scusate se mi sono dilungato.
 
Un saluto a tutti.
Ho un problema che spero qualcuno, possa aiutarmi a risolvere.
Ho collegato la shelly em tramite lo script (di virtualj) a PvOutput, ma stranamente l'energia prodotta nell'arco delle 24 ore è esattamente la metà di quella effettivamente che mi risulta da altro portale (Sunny Portal).
Sono sicuro dei dati effettivamente prodotti.
L'unica cosa è che per fare aggiornare i dati ogni 5 minuti da PvOutPut, ho dovuto settare il CRON a 2 minuti, altrimenti faceva l'aggiornamento ogni 10 minuti.

Qualcuno può darmi una mano ???? Ebli, Virtualj, Glf ...... Rimango in attesa di buone nuove.

link PvOutPut: https://pvoutput.org/list.jsp?id=100668&sid=88644
link Sunny Portal: https://www.sunnyportal.com/FixedPages/Dashboard.aspx
 
Vi avevo già risposto qui: https://www.energeticambiente.it/fo...ovoltaico-con-shelly-em?p=2225584#post2225584
Purtroppo non conosco i vostri sistemi, ma vi ho spiegato il funzionamento. Lo script va eseguito ogni 5min e fa la differenza dai 5min precedenti. Se il file non esiste o è di un altro giorno tutti i contatori vengono resettati e in quella fase non viene fatto l'upload. Per questo ve ne fa uno sì ed uno no. Bisogna capire perché il file non viene scritto correttamente o viene cancellato/modificato da qualche altro processo o lo script non ha i permessi per leggerlo... Tante variabili che dipendono tutte dal sistema dove l'avete messo e che è impossibile debuggare in un forum
 
In home Assistant puoi già integrare lo shelly, perché vuoi integrare pvoutput? Io ci ho provato e mi da errore, credo perché su pvoutput puoi fare un tot di richieste al giorno e quindi il mio script+home Assistant insieme probabilmente superano il limite
 
Si lo Shelly è inserito, ma pvoutput ha più dati. Infatti ho messo tutti e due senza problemi, solo che le informazioni di pvoutput, non sono veritiere. Farò altri tentativi. Buona serata a tutti.
 
Ma se pvoutput le prende dallo script che le prende dallo shelly... Come fa ad avere più informazioni?
 
Ma se pvoutput le prende dallo script che le prende dallo shelly... Come fa ad avere più informazioni?

Hai perfettamente ragione, solo che ancora non riesco a dedicare un pò di tempo per portare a video i dati che mi interessano da shelly. Ovvero produzione giornaliera, consumi giornalieri, ecc, (in pratica personalizzare i dati che so che ci sono, ma non sono ancora riuscito a trovare il sistema per estrapolarli). Piano piano spero di farcela.
 
ciao, io ho acceso per la prima volta uno shelly em, ho lanciato l'app, l'ho scovato sul wifi esterno, tutto ok a parte che me lo mette sui dispositivi hidden

volendo spostarlo nel locale appositamente creato non sono più riuscito a contattare il dispositivo

ero però sul wifi interno a casa, questo è importante? come fare a fare in modo che la app trovi il dispositivo sempre? devo dargli un ip fisso? grazie
 
...ero però sul wifi interno a casa, questo è importante? come fare a fare in modo che la app trovi il dispositivo sempre? devo dargli un ip fisso? grazie

L' IP fisso allo Shelly è cosa molto utile: per le 48 ore precedenti alla connessione in wifi con l'IP e scaricando il file .csv, puoi vedere il consumo ogni 60 secondi, da qui ti crei un grafico in Excel che visualizza il comporta la macchina. Dopo le prime 48 ore, nel file .csv vedi rilevamenti ogni 10 minuti. Se invece usi le funzioni della app, i rilevamenti sono ogni 60 minuti, che è troppo generico.
Dopo i monitoraggi più complessi, per cui però servono competenze che non ho, per me questa è l'opzione più semplice per avere un minimo di visione della pdc.

Dopo 2 anni di funzionamento perfetto, sto avendo anch'io dei problemi con l'uso della app: da qualche giorno non riesco più a fargli scaricare i grafici, mi dice di attivare il cloud ma non riesco a ritrovare il sistema per fare questo...
 
sono riuscito a mettere IP fisso, non so se è stato questo ma ora ho potuto cambiargli la stanza

se vai sulla pagina web del dispositivo (nella tua rete interna) vedi se il cloud è abilitato o no
 
sono riuscito a mettere IP fisso, non so se è stato questo ma ora ho potuto cambiargli la stanza

se vai sulla pagina web del dispositivo (nella tua rete interna) vedi se il cloud è abilitato o no

Bene, con l' IP fisso secondo me sarà tutto più semplice.

Riguardo al mio cloud, è sempre stato abilitato. Però mi sono ricordato che avendo fatto un reset, forse avevo perso qualche pezzo di impostazione, quindi una volta reimpostati i parametri del wifi, ho scollegato il cloud, poi ho salvato le impostazioni del wifi e poi ho ricollegato il cloud. Ora rifunziona.

Fra me e queste diavolerie ci stiamo dando ancora del LEI, non mi riesce proprio andarci in scioltezza... :)
 
@Virtualj. Ciao con la modifica del parametro "SHEM_MISUREMENT_ADJUST="100" " la misurazione dell'energia prodotta adesso corrisponde a quelle effettivamente ricavata dal tettoo fotovoltaico. Grazie per l'aiuto. :worthy::clapping:
 
Il file csv è sempre ok. Il mio script per upload su pvoutput invece va a prendere il valore kWh totali che in caso di mancanza corrente si resetta e quindi va in errore. Forse parlavate di questo? Per me ho corretto lo script :cool:

Scusa, la correzione potrebbe essere utile anche per chi usa il tuo script? o hai aggiornato i sorgenti? Grazie
 
Un saluto a tutti.
Io stò usando il vecchio script.
Poi proverò quello modificato.

Salutoni
 

ULTIMI MESSAGGI

Sezioni in Evidenza

Fotovoltaico Aspetti Tecnici, Bancari e Legislazione Isolamento, insuflaggi e Cappotti Tecniche e materiali per l'efficienza termica Riscaldamento e Raffrescamento Soluzioni a Legna, Pellet e Pompe di Calore Ossidroelettrico La nuova fonte di energia dall'infrarosso
Indietro
Top Bottom