Integrazione IOT e fotovoltaico: lavori in corso

Moderatore: maxlinux2000

Rispondi
Avatar utente
msillano
Messaggi: 16
Iscritto il: 20 feb 2023, 20:05
Località: S. Felice Circeo (LT)
Contatta:

Integrazione IOT e fotovoltaico: lavori in corso

Messaggio da msillano » 22 mag 2023, 13:32

Stavo provando ChatGPT, e ho posto la domanda:

TuyaDAEMON ed inverter fotovoltaico: linee guida e specifiche di progetto per massimizzare sia le funzionalità che la soddisfazione dell' utente.

Risposta:

-------------------------
Per massimizzare la funzionalità e la soddisfazione dell'utente nell'integrazione di TuyaDAEMON con un inverter fotovoltaico, considerare le seguenti linee guida e specifiche di progetto:

1. Compatibilità e integrazione:
- Verificare la compatibilità tra TuyaDAEMON e la marca e il modello specifici dell'inverter fotovoltaico. Assicurati che TuyaDAEMON supporti i protocolli di comunicazione o le API necessarie per una perfetta integrazione.
- Determinare i data-points (DP) e i parametri che possono essere recuperati dall'inverter FV, come la produzione di energia solare, i livelli di carica della batteria (se applicabile), lo stato di immissione in rete e altre informazioni rilevanti.

2. Monitoraggio dei dati in tempo reale:
- Abilitare TuyaDAEMON per recuperare e monitorare i dati in tempo reale dall'inverter FV. Ciò include informazioni sulla produzione di energia solare, l'interazione con la rete e lo stato della batteria (se applicabile).
- Sviluppare un'interfaccia user-friendly all'interno di TuyaDAEMON per visualizzare i dati dell'inverter fotovoltaico in modo significativo. Fornire informazioni chiare e facilmente comprensibili agli utenti.

3. Ottimizzazione energetica:
- Utilizzare i dati dell'inverter fotovoltaico per fornire funzionalità di ottimizzazione energetica. Ad esempio, analizzare i modelli di produzione di energia solare e suggerire tempi ottimali per far funzionare apparecchi ad alta potenza o ricaricare veicoli elettrici.
- Implementare le funzionalità di automazione in TuyaDAEMON per consentire agli utenti di definire regole basate sui dati dell'inverter fotovoltaico. Ciò può includere azioni come la regolazione automatica del consumo di energia o la deviazione dell'energia in eccesso ai dispositivi di storage.

4. Controllo e configurazione:
- Consentire agli utenti di controllare l'inverter fotovoltaico tramite TuyaDAEMON. Ciò può includere l'avvio o l'arresto dell'inverter, la regolazione della potenza erogata, la configurazione dei parametri di carica della batteria (se applicabile) e la modifica di altre impostazioni rilevanti.
- Fornire agli utenti la possibilità di personalizzare e configurare il comportamento di TuyaDAEMON in base alle loro preferenze e agli obiettivi di gestione dell'energia. Ciò può includere l'impostazione di modalità di risparmio energetico o la definizione di soglie per azioni specifiche.

5. Monitoraggio e notifiche:
- Implementare un sistema di monitoraggio all'interno di TuyaDAEMON per tenere traccia delle prestazioni e dello stato dell'inverter fotovoltaico. Generare avvisi o notifiche in tempo reale per guasti, malfunzionamenti o degrado delle prestazioni.
- Offrire agli utenti report e approfondimenti completi sulla produzione, il consumo e il risparmio di energia ottenuti attraverso l'impianto fotovoltaico. Fornire visualizzazioni e analisi per aiutare gli utenti a comprendere i loro modelli di utilizzo dell'energia e prendere decisioni informate.

6. Interfaccia e accessibilità user-friendly:
- Sviluppare un'interfaccia intuitiva e di facile utilizzo per TuyaDAEMON, accessibile tramite app mobili o portali web. Garantire che gli utenti possano facilmente monitorare e controllare l'inverter fotovoltaico e accedere alle informazioni pertinenti.
- Prendere in considerazione l'integrazione del controllo vocale con i più diffusi assistenti vocali per migliorare l'accessibilità e fornire il funzionamento a mani libere dell'inverter fotovoltaico tramite TuyaDAEMON.

7. Documentazione e supporto:
- Fornire documentazione dettagliata e guide per l'utente per assistere gli utenti nell'impostazione e nella configurazione dell'integrazione tra TuyaDAEMON e l'inverter fotovoltaico.
- Offri canali di assistenza clienti reattivi, come forum, e-mail o chat dal vivo, per rispondere tempestivamente alle richieste degli utenti, alle esigenze di risoluzione dei problemi e alle richieste di funzionalità.

Seguendo queste linee guida e incorporando le specifiche nel progetto specificato, è possibile massimizzare la funzionalità di TuyaDAEMON quando lo si integra con un inverter fotovoltaico, con conseguente miglioramento delle capacità di gestione dell'energia e maggiore soddisfazione dell'utente.
----------------------------------

Che dire? un risultato in parte scontato, ma nel contempo utile come promemoria: In effetti tocca tutti i punti salienti di un progetto.
Credo quindi che seguirò questa traccia !

TuyaDAEMON è un ambiente di sviluppo aperto (in node-red) creato proprio per sviluppare applicazioni IOT custom: ritengo utile postare qui via via i risultati che ottengo, possono quanto meno fornire spunti agli altri appassionati, indipendentemente dall'ambiente usato.
Comincerò dal sistema plug&play già realizzato usandolo come prototipo, per poi proseguire con il mio più impegnativo sistema off_grid in corso di realizzazione.

Avatar utente
msillano
Messaggi: 16
Iscritto il: 20 feb 2023, 20:05
Località: S. Felice Circeo (LT)
Contatta:

pagine HTML dinamiche

Messaggio da msillano » 4 giu 2023, 16:53

L'utilizzo di pagine HTML dinamiche per creare interfacce utente con TuyaDAEMON (in generale con applicazioni IOT) presenta sia vantaggi che svantaggi.

Pro:

Flessibilità di progettazione: Le pagine HTML dinamiche offrono una vasta gamma di opzioni di progettazione e personalizzazione. È possibile utilizzare fogli di stile CSS, script JavaScript e altre tecnologie per creare interfacce utente accattivanti e interattive.

Compatibilità multi-piattaforma: Le pagine HTML sono supportate da quasi tutti i dispositivi e i browser moderni, rendendo le interfacce utente basate su HTML dinamiche accessibili da diversi dispositivi, come computer, tablet e smartphone.

Contro:

Complessità dello sviluppo: La creazione di pagine HTML dinamiche richiede competenze di programmazione web, inclusi HTML, CSS e JavaScript. Sebbene ci siano strumenti e framework disponibili per semplificare lo sviluppo, può richiedere tempo e sforzo per imparare e implementare correttamente tali tecnologie.

Reattività limitata: Sebbene le pagine HTML dinamiche possano essere interattive, la loro reattività dipende spesso dalla qualità della connessione di rete e dalla velocità di risposta del server. Se la connessione è lenta o instabile, potrebbe verificarsi un ritardo nell'aggiornamento dell'interfaccia utente o nella ricezione dei dati dai dispositivi.

L'applicazione che uso come esempio gestisce l’irrigazione del prato di un piccolo villino al mare. Come si vede in figura, il giardino è frastagliato e quindi deve essere innaffiato a settori.

Immagine

Otto elettrovalvole, comandate da due device con 4 relay ciascuna, Tuya compatibili sono controllabili dall'utente con:
  • SmartLife, che permette di impostare anche gli orari ed i giorni per il funzionamento in automatico.
  • Una interfaccia WEB, fa da frontend alla applicazione.

L'interfaccia web fornisce una visualizzazione intuitiva (l'unico irrigatore attivo è quello blu) e interattiva (cliccando l'irrigatore cambia stato) della situazione dell'irrigazione, consentendo agli utenti di monitorare facilmente l'attività del sistema ed di intervenire. Inoltre, grazie all'utilizzo di pagine HTML dinamiche, è possibile aggiornare l'interfaccia in tempo reale senza dover ricaricare l'intera pagina, migliorando l'esperienza utente.

I dettagli dell’HW e delle automazioni Tuya richieste sono pubblicati su github, qui analizzo in dettaglio l’interazione tuyaDAEMON <-> HTML, che può essere utile in altre interfacce utente.
Molte soluzioni sono possibili, e questa, ai miei occhi, è abbastanza semplice e flessibile.
Notare come in questa semplice applicazione la logica di funzionamento sia tutta implementata con 'automazioni' in tuya-cloud, o nell'interfaccia WEB, senza codice specifico in node-red, a parte le funzionalità di base di tuyaDAEMON: interfaccia REST per eseguire GET e SET su tutti i dps dei device usati.

a) HTML (statico) con posizionamento delle immagini
    <div class="main" width="1783" height="679" style="position:relative;">
  
  <!-- the main image -->
    <img src="img/garden02.png" width="1783" height="679" alt=“garden map” border="0">

   <!-- builds 8 img buttons on top -->
   <img src="img/pointOFF.png" alt='A1' name='A1' id='A1' onclick='togglePoint("A1");'  data-toggle='tooltip' title='T: 35 min'  
           style='cursor: pointer; position: absolute; top: 380px; left:1370px;'  />

   <img src="img/pointOFF.png" alt='A2' name='A2' id='A2' onclick='togglePoint("A2");' data-toggle='tooltip' title='T: 18 min' 
          style='cursor: pointer; position: absolute; top: 500px; left:1300px;'  /> 
   …..  more ……
  <!— code for meteo widget —>  
  <table width="330" style="position: absolute; top:370px; left:420px;"><tr><td>
     <a class="weatherwidget-io" href="https://forecast7.com/it/12345abcd/località/" data-icons="Climacons" data-days="3" data-theme="original" data-basecolor="rgba(255, 255, 255, 0)" data-textcolor="#f9f9f9" data-lowcolor="#b4d2fe" >here</a>
     <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src='https://weatherwidget.io/js/widget.min. ... );</script>
     </td></tr></table>
 </div>
b) Codice PHP per la creazione dinamica di (a)

In realtà, il codice precedente, non è scritto in una pagina HTML ma è generato dal php. Questa soluzione presenta alcuni vantaggi, soprattutto in fase di sviluppo.
Il PHP è posto in head, oppure nel punto di body dove occorre il codice prodotto.
<?php       // in head
  $pointdata = array (
 // note: flow rate (L/m) and surface are used to calculate the time (taget: 6 litres/m2/day)
   //  id,           x,    y,  L/m,  sur, time    (A4 not used)
     "A1" => array( 1370,  380,  8,    40,  35),
     "A2" => array( 1300,  500,  7.8,  20,  18),
     "A3" => array( 1240,   80,  7.2,  21,  20),
     "B1" => array( 1020,   80,  7.1,  15,  15),
     "B2" => array(  770,  240,  0.4,   4,  70),
     "B3" => array(  440,   80,  4,    15,  30),
     "B4" => array(  860,   80,  5.3,  19,  25));
?>
…  more …
 <!-- the main image -->
    <img src="img/garden02.png" width="1783" height="679" alt=“garden map” border="0">
<?php            // in body
// adds irrigation points to HTML, based on pointdata table:
    foreach($pointdata as $id => $data){
     echo '<img src="img/pointOFF.png" ';
     echo "alt='$id' name='$id' id='$id' onclick='togglePoint(\"$id\");' style='cursor: pointer;
       position: absolute; top: ".$data[1]."px; left:".$data[0]."px;' data-toggle='tooltip'
              title='T: ".$data[4]." min' />\n";
     }
?>
<! ---- meteo widget standard -->
—   more   …

c) Refresh status in polling

Via REST la situazione dei singoli relay è letta da tuyastatus. Poichè leggerli tutti e 8 insieme sarebbe troppo pesante, si utilizza un round-robin, leggendone solo due alla volta, in JScript (posto al termine del codice HTML).
Con un intervallo base di 1 secondo, un bottone è aggiornato dopo 5 secondi.

La funzione principale è la seguente:
var auto_refresh = setInterval(readRefresh, 1021);    // refresh time quantum
var roundrobin =3;

function readRefresh(){
 // round robin data refresh to keep fast the Interval handler
getLocalTimeStamp('#nowtime');             // function(html-id)  to update data-time on top page
let res = 0;
let scr ="?";
roundrobin = (++roundrobin)%5;
switch (roundrobin){
	case 0:
// here mapping from A1…B4 to device/dp
  src = daemonREST("irrigazione anteriore","relay4");   // function(device, property, value) to send a request (GET) to tuyaDAEMON
  res = JSON.parse(src);
  if ( res.value)
      setPoint("A1", res.value === "ON");                        // function(id, bool)  to set the correct image on screen

  src = daemonREST("irrigazione anteriore","relay2");  // function(device, property, value) to send a request (GET) to tuyaDAEMON
  res = JSON.parse(src);
  if ( res.value)
      setPoint("A2", res.value === "ON");                        // function(id, bool)  to set the correct image on screen
  break;

  case 1:
…..  more ….
Sono utilizzate alcune funzioni custom, eccole qui:
   offICO = "img/pointOFF.png";
   onICO  = "img/pointON.png";      // ico name MUST contain 'ON': used as check
//
  function setPoint(ptid, value){
	set_imgbutton(ptid, value, onICO, offICO);
}

// update the HTML, returns value: true (ON) / false (OFF)
function set_imgbutton(id, value, on_ico, off_ico){
  var ipoint = document.getElementById(id);
  if (value){
 	 ipoint.src = on_ico;
	 return(true);
 }
   else {
     ipoint.src = off_ico;
	 return(false);
    }
}


// —— time functions
function makeTimeStamp(){
  // If you like different format change here: YYYY-MM-DD hh:mm:ss
  // this is also the format used by MySQL.
var s = this.getFullYear()+ "-";
  s += (this.getMonth() <9? "0"+ (this.getMonth() + 1):(this.getMonth() + 1)) + "-";
  s += (this.getDate() <10? "0"+ this.getDate():this.getDate()) + ' ';
  s += (this.getHours() <10? "0"+ this.getHours():this.getHours()) + ":";
  s += (this.getMinutes() <10? "0"+ this.getMinutes():this.getMinutes()) + ":";
  s += (this.getSeconds() <10? "0"+ this.getSeconds():this.getSeconds());
  return s;
  }

Date.prototype.getTimeStamp = makeTimeStamp;

function getLocalTimeStamp(where){
// use date() to get data and time from local PC,
// then format timeStamp and set it in #where (top right)
    d = new Date();     //Create Date object.
    $(where).html(d.getTimeStamp());
}
tuyaDAEMON REST functions

 <?php echo  " daemonURL= 'http://$nrserver'; \n"; ?>  //   $nrserver defined in 'interface.php'.

// to send GET, SET, SCHEMA requests to tuyaDAEMON 
// To have a fast REST:
//   - GET returns the last value in 'tuyastatus' (can be also 'none’)
//   - SET returns always 'sent'. To verify result you must do a GET
//   - SCHEMA returns the last values in 'tuyastatus'
// If value is an object, must be JSON stringified
function daemonREST(device, property = null, value = null) {
    theURL = daemonURL + '/tuyaDAEMON?device=' + encodeURIComponent(device) + ((property)? (('&property=' +      encodeURIComponent(property)) + ((value)? ('&value=' + encodeURIComponent(value)):'')) : '');
    return (httpGet(theURL));
 }

 function httpGet(url) {
 // low level function, used by daemonREST
      let xhr = new XMLHttpRequest();
       xhr.open('GET', url, false);  // fast synchronous implementation
       try {
		xhr.send();
        if (xhr.status != 200) {
           alert(`Error ${xhr.status}: ${xhr.statusText}`);
           } else {
//	     alert('Rquest OK: ' + url);
	       return(xhr.response); }
       } catch(err) {  alert('Request failed: ' + err);}
	}

d) User actions on buttons

Resta questa ultima funzionalità, che genera un toggle dello stato dei relay.
La funzione principale è la seguente:
function togglePoint(ptid){
  // toggle ON/OFF single watering point (used as onclick function)
  // rule: only one relay ON => mode ‘interlock’ for any  device
  // plus code to set off the other device
   switch (ptid) {
      // here mapping from A1…B4 to device/dp
      case "A1":
          if (toggle_imgbutton(ptid, onICO, offICO)) {                                  // function toggle for image
         	daemonREST("irrigazione anteriore","relay4", true); 
          	daemonREST("irrigazione laterale”,”relay all", false); 
                  }
          else {
          	daemonREST("irrigazione anteriore","relay4", "OFF");
              }
          break;
    case "A2":
      … more ….
    }.
Ed usa questa funzione:
function toggle_imgbutton(id, on_ico, off_ico){
  var ipoint = document.getElementById(id);
  nextvalue = !ipoint.src.includes("ON");
  set_imgbutton(id, nextvalue, on_ico, off_ico);
  return(nextvalue);
}

Conclusione

Io uso un  Bootstrap admin template (free to use) che mi garantisce un look omogeneo, pagine adattabili ai vari media, una ricca libreria di widget, a cui aggiungere le proprie, come in questo caso (vedi https://github.com/ColorlibHQ/gentelella): per un ottimo risultato in breve tempo.

Seguendo queste linee, è anche semplice ottenere effetti di animazione, aggiornando ciclicamente una serie di immagini, e quindi sviluppare interfacce tecniche per molti contesti, con interazione HW mediata da tuyaDAEMON.

Per ora uso una sola pagina dinamica di questo tipo, ma per aumentare la semplicità d’uso, si potrebbero raggruppare tutte le funzioni necessarie in una libreria JScript, da includere ove necessario.

Cordialmente

Rispondi

Torna a “Solare fotovoltaico”

Chi c’è in linea

Visitano il forum: Nessuno e 154 ospiti