Bolle
| Inviato il: 29/05/2022 16:25:48
|
Nasce l' Off Grid Management ...vediamo dove ci porterà!
L'idea è quella di gestire al meglio un impianto fotovoltaico...specialmente se composto da un sistema di accumulo.
L'idea nasce da quiquoqua e di fatto è quella di abilitare/disabilitare elettrodomestici quando le condizioni sono ottimali, remotizzare i comandi, gestire le notifiche , etc etc...
Anche se molti inverter hanno un sistema di comunicazione seriale dove è possibile capire cosa sta accadendo non mi risulta ci sia un sistema integrato che gestisca al meglio la situazione.
Questo tools, che gira sotto windows, si poggia su sensori/apparati commerciali (shelly) a basso costo ed è orientato a tutti...specialmente a quelli che on hanno dimestichezza con l'elettronica/processori.
Per gestire l'impianto FV occorre scrivere un codice in un linguaggio creato ad hoc per questo progetto: l'ofg basic. Il tool ha anche un debugger per testare il codice.
Vabbè...piano piano cercherò di scrivere tutto.
Dimenticavo...il tool è gratuito e il progetto non ha scopo di lucro!
--------------- Un risultato se non è ripetibile non esiste (by qqcreafis).
| |
| | Bolle
| Inviato il: 29/05/2022 22:44:58
|
Iniziamo con il dire con il tool , mediante due dispositivi:
1. shelly em (o uno shelly 1pm / shelly 1pm plus se si ha un inverter da 3kw)
2. shelly uni
permette la creazione e la visualizzazione (anche da cellulare) di un grafico dove sono presenti la tensione di alimentazione , la potenza assorbita e la tensione della batteria.
Questo è il grafico della giornata:
Questo è il grafico dell'ultima ora:
Questo è il grafico delle ultime due ore:
Questo è il grafico che va dalle 14:30 alle 16:00.
La tipologia di visualizzazione del grafico è a scelta dell'utente ed in alto sul titolo ci sono altre informazioni, come l'energia consumata, la tensione minima e massima della batteria, l'ultima potenza assorbita letta etc etc...
Avendo la possibilità di vedere il grafico , quindi la tensione delle batteri,e la potenza utilizzata dall'abitazione e tanto altro si ha la possibilità di attivare da remoto i dispositivi anche mediante delle smart plug.
Quindi la configurazione con i due shelly specificata in alto credo che sia la minimale.
Modificato da Bolle - 30/05/2022, 10:26:43
--------------- Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | Bolle
| Inviato il: 30/05/2022 14:29:33
|
Vediamo un esempio su come controllare un dispositivo.
Configuriamo lo Shelly 1PM plus che oltre l'on/off permette di sapere la tensione e la potenza utilizzata dall'apparato.
Questo è il codice che permette di accendere e spegnere la luce della cucina , visualizzando la tensione e la potenza assorbita dalla lampadina.
Il comando è DEVICE
DEVICE NumeroDevice Operazione
Il numero device è il numero del device configurato e l'Operazione possibile è : ON, OFF o PULSE.
Per ogni device si può utilizzare la seguente funzione:
DEVICE_VOLTAGE NumeroDevice - Torna la tensione
DEVICE_STATE NumeroDevice - Torna lo stato (ON=1, OFF=0)
DEVICE_WATT NumeroDevice - Torna i Watt assorbiti
'---------------------------
' TEST DEVICE 1 -
' Shelly 1PM Plus -
'---------------------------
PRAGMA NO_NUM_LINE
LUCE_CUCINA = 1
'Loop infinito del programma
WHILE TRUE
DEVICE LUCE_CUCINA OFF ' Spengo la luce della cucina
WAITS 5
TENSIONE_PRESA=DEVICE_VOLTAGE LUCE_CUCINA
WATT_PRESA=DEVICE_WATT LUCE_CUCINA
STATO_PRESA=DEVICE_STATE LUCE_CUCINA
LOG TIME & ") STATO=" & STATO_PRESA & " WATT=" & WATT_PRESA & " TENSIONE=" & TENSIONE_PRESA
DEVICE LUCE_CUCINA ON ' Accendo la luce della cucina
WAITS 5
TENSIONE_PRESA=DEVICE_VOLTAGE LUCE_CUCINA
WATT_PRESA=DEVICE_WATT LUCE_CUCINA
STATO_PRESA=DEVICE_STATE LUCE_CUCINA
LOG TIME & ") STATO=" & STATO_PRESA & " WATT=" & WATT_PRESA & " TENSIONE=" & TENSIONE_PRESA
LOOP
END
Questo è il log del programma:.
.....
14:20:25) STATO=0 WATT=0.000000 TENSIONE=222.800000
14:20:32) STATO=1 WATT=9.900000 TENSIONE=222.700000
14:20:39) STATO=0 WATT=0.000000 TENSIONE=222.700000
14:20:45) STATO=1 WATT=9.900000 TENSIONE=222.600000
14:20:52) STATO=0 WATT=0.000000 TENSIONE=223.200000
14:20:59) STATO=1 WATT=9.900000 TENSIONE=224.200000
14:21:06) STATO=0 WATT=0.000000 TENSIONE=224.200000
.....
Modificato da Bolle - 30/05/2022, 14:46:06
--------------- Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | Bolle
| Inviato il: 30/05/2022 16:31:06
|
Facciamo un altro esempio gestendo l'accensione e lo spegnimento delle luci del giardino. L'accensione verrà effettuata mezz'ora dopo il tramonto e lo spegnimento avverrà 40 minuti prima dell'alba...ma le luci si accenderanno solo se ci sarà energia sufficiente nelle batterie...cioè se la tensione sarà superiore ai 49V.
'-------------------------------------------
' GESTIONE LUCE GIARDINO -
'-------------------------------------------
PRAGMA NO_NUM_LINE
LUCI_GIARDINO = 2
STATO_LUCE_GIARDINO=DEVICE_STATE LUCI_GIARDINO
SECONDI_ANTICIPO_PRIMA_ALBA=40*60 ' Anticipo lo spegnimento delle lampade mezz'ora prima dell'alba
SECONDI_RITARDO_DOPO_TRAMONTO=30*60 ' Ritardo l'accensione delle lampade mezz'ora dopo il tramonto
TENSIONE_LIMITE_ACCENSIONE_LUCE_GIARDINO = 49 ' Se la tensione delle batterie sta sotto il livello ...spengo le luci o non le accendo
'Loop infinito del programma
WHILE TRUE
ORARIO=TIME
ADESSO=TIME_TO_SECONDS(ORARIO) 'SECONDS
LUCE_ON=TIME_TO_SECONDS(SUNSET)+SECONDI_RITARDO_DOPO_TRAMONTO 'Calcolo i secondi della giornata in cui accendere la luce
LUCE_OFF=TIME_TO_SECONDS(SUNRISE)-SECONDI_ANTICIPO_PRIMA_ALBA'Calcolo i secondi della giornata dove spegnere la luce
IF ADESSOOR ADESSO >LUCE_ON THEN
CALL ACCENDI_LUCE_GIARDINO
ELSE
CALL SPEGNI_LUCE_GIARDINO
ENDIF
LOOP
END
'---------------------------------------------------------
'luce giardino ON
SUB ACCENDI_LUCE_GIARDINO
IF BATTERY_VOLTAGE <49 THEN
'La luce dovrebbe essere accesa ma se la tensione delle batterie 'e8 bassa tengo spente le lampade
CALL LUCE_GIARDINO(OFF)
ELSE
'La luce deve essere accesa
CALL LUCE_GIARDINO(ON)
ENDIF
SUBEND
'---------------------------------------------------------
'luce giardino OFF
SUB SPEGNI_LUCE_GIARDINO
CALL LUCE_GIARDINO(OFF) 'SPENGO LA LUCE
SUBEND
'---------------------------------------------------------
'Spengo o accendo fisicamente la luce
SUB LUCE_GIARDINO(STATO)
IF STATO_LUCE_GIARDINO AND NOT STATO THEN
DEVICE LUCI_GIARDINO STATO
STATO_LUCE_GIARDINO=STATO
ENDIF
IF NOT STATO_LUCE_GIARDINO AND STATO THEN
DEVICE LUCI_GIARDINO STATO
STATO_LUCE_GIARDINO=STATO
ENDIF
SUBEND
Modificato da Bolle - 30/05/2022, 16:40:24
--------------- Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | Bolle
| Inviato il: 30/05/2022 16:49:39
|
Facciamo un esempio pratico e vediamo come risolverlo con l'aiuto di questo SW.
La situazione è questa: quando parte la lavastoviglie (vedi grafico della potenza assorbita sempre fornito dal tool) occorre spegnere ogni altro elettrodomestico.
Come fare?
Dovrebbe bastare mettere uno shelly 1PM dentro la presa dell'elettrodomestico e appena si nota l'assorbimento ...si staccano gli elettrodomestici che assorbono di più ...oppure si stacca l'alimentazione all'avvio della presa (tanto riprende da dove era). Poi basta aspettare la fine del lavaggio...e permettere la ripartenza degli altri elettrodomestici.
Può funzionare???
Descriverò meglio la cosa...tanto pensiamoci su!
Modificato da Bolle - 30/05/2022, 16:55:35
--------------- Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | emuland
| Inviato il: 31/05/2022 06:12:40
|
CITAZIONE (Bolle, 30/05/2022 16:49:39 )
stai facendo un controllo dei carichi.
stabiliti quelli prioritari, gli altri vanno sganciati se si sovrappongono a quelli prioritari. una volta che hai scelto le priorità, il software sgancia quello di priorità più bassa quando c'è un "superamento" potenza disponibile
--------------- Ragioniere senza conoscenza dei ruoli che ama 4A per mmq di supposta (comprata su Wikipedia) Agricoltore ammazza child e NON col latte vaccino che ucciderà tutti quelli che ne fanno uso
| | | | Bolle
| Inviato il: 31/05/2022 15:08:19
|
CITAZIONE (emuland, 31/05/2022 06:12:40 )
CITAZIONE (Bolle, 30/05/2022 16:49:39 )
stai facendo un controllo dei carichi.
Non propriamente...mi spiego meglio. Montando uno selly 1PM sulla presa della lavastoviglie ci si accorge quando questa viene accesa. Non si aspetta che arrivi al carico pesante (accensione della resistenza). Inoltre si sa anche che il programma dura un'ora (come da grafico sopra con assorbimento variabile ma che è sempre lo stesso giorno dopo giorno) e si possono inibire alcuni apparecchi oppure se le condizioni (meteo) lo permettono si lasciano andare insieme.
Attualmente la situazione è questa: "Posso far partire la lavastoviglie?" ...e a priori non si sa mai...proprio per la mancanza di un coordinamento 'intelligente ' tra gli elettrodomestici, della situazione meteo, dell'energia accumulata e di quella prodotta.
--------------- Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | Bolle
| Inviato il: 31/05/2022 15:45:59
|
Riprendo il discorso degli interrupt che ci permetteranno di semplificare il codice e gestire in modo ottimale gli eventi.
Attualmente si hanno a disposizione :
1.Interrupt Passaggio di Mezzanotte - INTERRUPT_NEW_DAY
2.Interrupt Carico - INTERRUPT_LEVEL_WATT (Variabili LOW_WATT, TIME_CHG_STATE_WATT)
3.Interrupt Tensione Batteria - INTERRUPT_LEVEL_BATTERY (Variabili LOW_BATTERY, TIME_CHG_STATE_BAT)
Il secondo Interrupt è legato alla potenza assorbita dall'abitazione...se avessimo anche la possibilità di legare gli interrupt anche agli altri dispositivi ...sarebbe una ulteriore semplificazione. Ci penso su!
Questo è un esempio di interrupt sul passaggio di assorbimento si 2200Watt...e ci dice anche da quanti secondi è avvenuto il passaggio di assorbimento.
' INTERRUPT LIVELLO POTENZA -
'------------------------------------------
PRAGMA NO_NUM_LINE
CONSTANT MAX_POWER=2200
'Setto la funzione interruzione al passaggio di potenza
INTERRUPT_LEVEL_WATT MAX_POWER "FunLevelWatt"
'Loop infinito del programma
WHILE TRUE
POTENZA_ASSORBITA=WATT
IF LOW_WATT THEN
LOG "Assorbimento meno di :" & MAX_POWER & " da " & TIME_CHG_STATE_WATT & " secondi!"
ELSE
LOG "Assorbimento pi'f9 di :" & MAX_POWER & " da " & TIME_CHG_STATE_WATT & " secondi!"
ENDIF
LOOP
END
'-----------------------------
' Interrupt livello Potenza ---
'-----------------------------
SUB FunLevelWatt
IF LOW_WATT THEN
LOG "Cambio Stato Assorbimento. Minore di :" & MAX_POWER
ELSE
LOG "Cambio Stato Assorbimento. Maggiore di :" & MAX_POWER
ENDIF
SUBEND
--------------- Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | Bolle
| Inviato il: 31/05/2022 23:25:40
|
Dopo averci pensato ho implementato l'interrupt anche per i dispositivi.
Questo è il codice che permette di indicizzare il device mediante una sintassi vettoriale. Faccio accendere e spegnere in modo casuale la lampadina e la fuzione legata all'interrupt mi segnala il cambio di potenza assorbita. Forse devo rivedere la sintassi dei comandi precedenti per omogenizzarla.
'-----------------------------------------------------------
' INTERRUPT LIVELLO POTENZA SU UN DEVICE -
'-----------------------------------------------------------
PRAGMA NO_NUM_LINE
CONSTANT LEVEL_POWER=5 ' Watt
CONSTANT DEVICE_LUCE=1
'Setto la funzione interruzione al passaggio di potenza
INTERRUPT_LEVEL_WATT_DEVICE DEVICE_LUCE LEVEL_POWER "FunLevelWattDevice"
'Loop infinito del programma
WHILE TRUE
IF LOW_WATT_DEVICE(DEVICE_LUCE) THEN
LOG "Assorbimento meno di :" & LEVEL_POWER & " da " & TIME_CHG_STATE_WATT_DEVICE(DEVICE_LUCE) & " secondi!"
ELSE
LOG "Assorbimento pi'f9 di :" & LEVEL_POWER & " da " &TIME_CHG_STATE_WATT_DEVICE(DEVICE_LUCE) & " secondi!"
ENDIF
NUM_CASUALE=Rnd MOD 30 ' Genero un numero casuale da 0 a 29
IF NUM_CASUALE=13 AND LUCE_ACCESA=FALSE THEN
LUCE_ACCESA=TRUE
LOG "Accendo la luce"
DEVICE DEVICE_LUCE ON
ENDIF
IF NUM_CASUALE=14 AND LUCE_ACCESA THEN
LUCE_ACCESA=FALSE
LOG "Spengo la luce"
DEVICE DEVICE_LUCE OFF
ENDIF
LOOP
END
'-----------------------------
' Interrupt livello Potenza ---
'-----------------------------
SUB FunLevelWattDevice
IF LOW_WATT_DEVICE(DEVICE_LUCE) THEN
LOG "Cambio Stato Assorbimento. Minore di :" & LEVEL_POWER
ELSE
LOG "Cambio Stato Assorbimento. Maggiore di :" & LEVEL_POWER
ENDIF
SUBEND
--------------- Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | emuland
| Inviato il: 01/06/2022 06:24:18
|
CITAZIONE (Bolle, 31/05/2022 15:08:19 )
CITAZIONE (emuland, 31/05/2022 06:12:40 ) CITAZIONE (Bolle, 30/05/2022 16:49:39 )
stai facendo un controllo dei carichi.
Non propriamente...mi spiego meglio. Montando uno selly 1PM sulla presa della lavastoviglie ci si accorge quando questa viene accesa. Non si aspetta che arrivi al carico pesante (accensione della resistenza). Inoltre si sa anche che il programma dura un'ora (come da grafico sopra con assorbimento variabile ma che è sempre lo stesso giorno dopo giorno) e si possono inibire alcuni apparecchi oppure se le condizioni (meteo) lo permettono si lasciano andare insieme.
Attualmente la situazione è questa: "Posso far partire la lavastoviglie?" ...e a priori non si sa mai...proprio per la mancanza di un coordinamento 'intelligente ' tra gli elettrodomestici, della situazione meteo, dell'energia accumulata e di quella prodotta.
è sempre un controllo carichi. ma non basato sul mero consumo istantaneo ma su una "previsione" basata sullo storico? (oppure nel caso della lavastoviglie ritieni il ciclo sempre di 1 ora)
lo integri con la produzione solare(o col meteo) e a quel punto calcoli se l'avvio dell'elettrodomestico XXX può causare problemi di carico.
è una buona soluzione. (sicuramente migliore del controllo carichi base)
ancora meglio (ma piu complesso) sarebbe fare uno "storico" su database del consumo tipico di un elettrodomestico.
con quello potresti "prevedere" la curva dei consumi (i cicli di alcuni elettrodomestici sono abbastanza "standardizzati")
--------------- Ragioniere senza conoscenza dei ruoli che ama 4A per mmq di supposta (comprata su Wikipedia) Agricoltore ammazza child e NON col latte vaccino che ucciderà tutti quelli che ne fanno uso
| | | | Bolle
| Inviato il: 01/06/2022 11:55:25
|
CITAZIONE (emuland, 01/06/2022 06:24:18 )
è sempre un controllo carichi. ma non basato sul mero consumo istantaneo ma su una "previsione" basata sullo storico?
All'interno della presa che porta l'alimentazione alla lavastoviglie ci si mette lo shelly 1PM che misura l'assorbimento. Quando qualcuno accende la lavastoviglie il, SW si accorge dell'accensione e si prepara sganciare alcune prese ad altri elettrodomestici ( ad esempio lo scaldabagno se è acceso, oppure la pompa del pozzo) ma non è detto che lo si faccia ( dipende dall'energia accumulata, dall'energia erogata , etc etc). La durata del lavaggio è indifferente...tanto lo si viene a sapere quanto dura perchè si azzera nuovamente l'assorbimento. Volendo si possono localizzare i tempi 'morti' e sfruttare al meglio i momenti in cui non parte la resistenza...ma non serve uno storico, bastano alcune righe di codice visto che la lavastoviglie fa sempre le stesse sequenze...almeno la mia che ho analizzato proprio con i grafici che ogni tanto pubblico. Quindi la risposta alla tua domanda è : è un sistema intelligente che ci permette di sfruttare al meglio l'energia generata! Sto cercando di mettere a disposizione gli strumenti...poi ognuno può fare la gestione che reputa più opportuna!
Ad esempio questa è la lavastoviglie che lavora insieme alla lavatrice ( la mia lavatrice preleva l'acqua calda dall'esterno)....e non ci sono problemi.
Modificato da Bolle - 01/06/2022, 12:06:02
--------------- Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | emuland
| Inviato il: 01/06/2022 12:34:52
|
ok, fa circa quello che avevo inteso.
volendo , conoscendo il comportamento pregresso (se viene stoccato il consumo del "lavaggio" precendente, potresti addirittura impostare un comportamento predittivo dell'impianto e sganciare preventivamente.
--------------- Ragioniere senza conoscenza dei ruoli che ama 4A per mmq di supposta (comprata su Wikipedia) Agricoltore ammazza child e NON col latte vaccino che ucciderà tutti quelli che ne fanno uso
| | | | Bolle
| Inviato il: 02/06/2022 12:09:02
|
Quanto assorbe questo micro pc che potrebbe far girare il SW dell'OFF Grid Management?
Controlliamolo con questo codice dove abbiamo aggiunto all'interprete il comando WRITE_FILE che scrive la stringa su un file
'-------------------------------------
' ASSORBIMENTO MICRO PC -
'-------------------------------------
PRAGMA NO_NUM_LINE
CONSTANT DEVICE_MICROPC=1
'Loop infinito del programma
WHILE TRUE
ASSORBIMENTO=DEVICE_WATT DEVICE_MICROPC
STRINGA=TIME & "|" & ASSORBIMENTO
LOG STRINGA
WRITE_FILE STRINGA
WAITS 5
LOOP
END
Questo è il file di log generato:
11:44:14|2.700000
11:44:21|2.700000
11:44:30|2.700000
11:44:34|2.500000
11:44:35|2.500000
11:44:37|2.600000
11:44:38|2.700000
11:44:39|2.700000
11:44:41|2.800000
11:44:42|2.600000
11:44:43|2.600000
11:44:44|2.500000
11:44:46|3.700000
11:45:02|2.700000
11:45:09|2.600000
11:45:16|2.600000
11:45:22|2.500000
11:45:29|2.600000
11:45:35|2.500000
11:45:42|2.500000
11:45:48|2.500000
11:45:55|2.600000
11:46:02|2.700000
11:46:08|2.600000
11:46:15|4.500000
11:46:21|5.000000
11:46:28|3.600000
11:46:34|3.300000
11:46:41|4.000000
11:46:47|3.800000
11:46:54|4.000000
11:47:01|3.800000
11:47:07|3.200000
11:47:14|2.900000
11:47:20|3.200000
11:47:27|5.000000
11:47:33|5.300000
11:47:40|5.300000
11:47:47|5.400000
11:47:53|6.300000
11:48:00|6.300000
11:48:06|8.300000
11:48:13|7.500000
11:48:19|7.500000
11:48:26|7.500000
11:48:33|7.700000
11:48:39|7.500000
11:48:46|7.600000
11:48:52|7.700000
11:48:59|7.000000
11:49:05|7.200000
11:49:12|7.100000
11:49:19|6.900000
11:49:25|7.000000
11:49:32|7.000000
11:49:38|7.100000
11:49:45|6.900000
11:49:52|7.700000
11:49:58|7.400000
11:50:05|7.300000
11:50:11|7.200000
11:50:18|7.500000
11:50:24|7.700000
11:50:31|7.600000
11:50:38|7.500000
11:50:44|7.500000
11:50:51|7.500000
11:50:57|7.500000
11:51:04|7.300000
11:51:11|7.600000
11:51:17|7.600000
11:51:24|7.200000
11:51:30|6.700000
11:51:37|6.500000
11:51:43|6.600000
11:51:50|6.500000
11:51:57|6.600000
11:52:04|6.400000
11:52:10|6.000000
11:52:17|5.400000
11:52:23|5.400000
11:52:30|5.700000
11:52:36|5.700000
11:52:43|5.600000
11:52:50|5.600000
11:52:56|5.600000
11:53:03|5.600000
11:53:09|5.600000
11:53:16|5.700000
11:53:22|5.800000
11:53:29|5.600000
11:53:36|5.500000
E' saltato fuori che il micropc assorbe 7.5 watt se colleghiamo sia la tastiera che il monitor. Se scolleghiamo la tastiera l'assorbimento scende a 6.5 watt, se sgancio anche il monitor, l'assorbimento scende a 5.6 Watt.
--------------- Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | marioenergiaalternativa
milliWatt Gruppo:Utente Messaggi:10
Stato:
| Inviato il: 17/06/2022 17:55:24
|
CITAZIONE
Benisimo...preparo l'enteseguibile con gli indirizzi modificabili dall'utente. All'inizio ti passerò i php in privato...poi li pubblicherò.
OK?
Cmq continuiamo su questa altra discussione: http://www.energialternativa.info/Public/NewForum/Discussione.php?216888
ok...grazie.
Modificato da Bolle - 18/06/2022, 18:02:30
| | | | Bolle
| Inviato il: 18/06/2022 18:04:24
|
Mario,
tu hai anche uno shelly uni che misura la tensione delle batterie?
--------------- Un risultato se non è ripetibile non esiste (by qqcreafis).
| |
| | |
|
Versione Mobile!
|
|
|
|
|
|
|
|
|
|
|
|
|
|