Go Down

Topic: Consigli per una rete di rilevazione mondiale... (Read 314 times) previous topic - next topic

steve-cr

Feb 11, 2019, 07:09 pm Last Edit: Feb 11, 2019, 07:10 pm by steve-cr
Come qualcuno saprà, realizzo centraline di controllo rampe riscaldate antighiaccio, con NANO, per condomini e centri commerciali.
Praticamente la rampa che va ai parcheggi sotterranei (ma anche sopraelevati) deve essere riscaldata con dei cavi scaldanti a certe condizioni che decide il software aiutato anche da una sonda esterna DHT22.

La nuova centralina che ho progettato monterà ESP32 per poter essere controllate in remoto dal cliente.

Però a questo punto ho pensato che in futuro avrò centinaia di DHT22 in giro per il mondo collegate in wifi, quindi avrò a disposizione una notevole quantità di dati meteorologici.

Come mi consigliate di affrontare il problema della raccolta di questi dati, sia lato ESP32 (che li trasmetterà) che lato PC (che li riceverà) ?

Preferirei qualcosa di leggerissimo e consultabile da browser, senza un programma ad hoc sul PC.
Pensavo ad un comando che do io all'indirizzo IP del router a cui è collegato l'ESP32 e lui che mi risponde anche con temperatura e umidità, TIPO QUESTO ESEMPIO, ma magari avete altre idee migliori.

Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

maubarzi

Ma in questo modo te li devi sempre configurare come server e rendere accessibili dall'esterno della rete cui si connettono via wifi.
Non sarebbe meglio crearsi un server da qualche parte, sempre accessibile e fare in modo che i vari ESP32, che a questo punto sarebbero dei client, gli mandino i dati periodicamente?

P.S.
Ma tu stai proponendo soluzioni di questo tipo con Arduino?
Sono curioso di approfondire questi aspetti per capire le effettive differenze rispetto ad altre soluzioni più "industriali".
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

steve-cr

Ma tu stai proponendo soluzioni di questo tipo con Arduino?
Sono curioso di approfondire questi aspetti per capire le effettive differenze rispetto ad altre soluzioni più "industriali".
Si, sono diversi anni che uso Nano con DHT22 e LCD 20x4, specie da quando ho visto che il PLC della Schneider Electric, lo Zelio, monta lo stesso ATmega.

Si, avevo pensato anche io di far accedere, magari ogni mezz'ora, le mie centraline ad un sito web su cui depositare i loro dati e comunque renderle sempre accessibili con una app da parte del cliente per controllarle oppure accenderle in manuale.
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

maubarzi

Se ribalti e li imposti come server, devi garantire che siano sempre visibili dall'esterno.
Secondo me, ti tiri dietro problemi di vario tipo, primo accedere alle conf della rete per il routing interno e poi per la visibilità dall'esterno nel caso la rete non esca con un ip statico...
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

steve-cr

Bravo!
E' proprio per questo che mi servivano idee.

L'avevo pensato anche io di interrogare le mie centraline però dovrei farlo con un programma sempre acceso dove poi dovrei leggere i dati e memorizzarli, o con un Arduino o con un PC

Ho pensato anche a tanti account BLYNK, per esempio, ma poi potrebbe diventare pesante andarli a consultare...
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

maubarzi

Secondo me le centraline devono lavorare in push su un sistema sempre on.
Fanno semplici richieste http dove sparano su i dati.
Dovrebbe essere una cosa velocissima, come server ti potrebbe bastare un qualunque carriolino, tanto deve fare 4 cose in croce, anche se gestisse la parte server delle app per interrogare i dati.

Fare a rovescio ti tiri dietro più sfighe che vantaggi.

Il server lo puoi fare anche in php, dovrebbe essere quasi banale.
Io in genere lavoro in java per la parte server ma per tutt'altre applicazioni.
Quindi mi viene naturale pensare ad un server centrale.

Vista la natura del tuo progetto, mi farei anche una cosettina in prospettiva.
Tutta la parte di composizione degli url delle richieste le farei dinamiche salvando i vari pezzo si eeprom o altra parte statica e prevederei degli url per richiedere aggiornamenti, così se decidi di cambiare qualcosa puoi fare in modo che si aggiorni tutto in automatico.

Potresti gestire la richiesta di invio dati al server dando una risposta concordata per far scattare una nuova richiesta per aggiornare questi parametri.

Visto che li semini per il mondo potrebbe tornarti comodo.
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

steve-cr

L'unica cosa è che se li interrogo io devo sapere il loro IP (che deve essere statico) mentre se scaricano loro mi tolgono da questo impiccio...
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

maubarzi

#7
Feb 13, 2019, 12:50 pm Last Edit: Feb 13, 2019, 12:55 pm by maubarzi
esatto (anche se molto semplificativo perchè devi anche gestirne il routing interno alla rete wifi a cui si connettono perchè non saranno loro ad avere un ip statico o reperibile in altro modo, ma il router di quella rete)!

c'è anche un'altra ragione, a mio avviso, se interroghi e c'è un problema non ottieni risposta e non sai nemmeno da quando non funzionano.
Se invece i dati li hai sul server puoi guardarli per avere qualche info in più.
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

Black_Dragon

#8
Feb 13, 2019, 04:47 pm Last Edit: Feb 13, 2019, 04:50 pm by Black_Dragon
Potresti anche far scrivere dei logs a ciascuno di essi su un server centrale ed imposti il server per leggerli ogni tot (magari come suggerito in php)... o meglio fai scrivere i dati (con degli identificativi) sullo stesso file... così se qualcuno di essi  manca all'appello sai che devi monitorarlo... o gli manca la connessione o non trasmette dati o è rotto.

Questi dati li puoi far scrivere su un database e puoi consultarli anche a posteriori... farti delle serie storiche... grafici e quant'altro.

Puoi dare ad ogni cliente la possibilità di vedere solo i suoi dati o quelli che gli vuoi far vedere tu anche semplicemnete da browser.

steve-cr

#9
Feb 13, 2019, 05:50 pm Last Edit: Feb 13, 2019, 05:50 pm by steve-cr
Ho visto una vagonata di programmi esempio e mi viene già male...

Intanto il mio cliente userà una app quasi come quella di questo esempio, e fin qui nessun problema.

Per la trasmissione dei dati al mio server o ad un cloud, invece vorrei qualcosa di veramente LIGHT dove spedire una stringa ogni xxx minuti e basta.

Ma tutti gli esempi che ho visto sono righe e righe di codice...
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

Black_Dragon

#10
Feb 13, 2019, 06:31 pm Last Edit: Feb 13, 2019, 06:35 pm by Black_Dragon
Per la trasmissione dei dati al mio server o ad un cloud, invece vorrei qualcosa di veramente LIGHT dove spedire una stringa ogni xxx minuti e basta.

io uso questo dentro una funzione

Code: [Select]


  strURL = "GET nomefile.php?datidamemorizzare  HTTP/1.1";
  client.println(strURL);
  client.println("Host: nomehost");
  client.println("User-Agent: Arduino 1.0\r\n\r\n");



poi in php non fai altro che scrivere quei dati sul tuo database (una pagina di circa 30/40 righe più o meno)


Per la lettura dei dati naturalmente farai tante pagine in base a ciò che vuoi visualizzare... serie storiche... grafici... dettagli... etc... ti posso consigliare di dare un'occhiata a LINK GRAFICI in cui ci sono tanti grafici carini che io stesso uso nei miei gestionali.

maubarzi

#11
Feb 13, 2019, 06:36 pm Last Edit: Feb 13, 2019, 06:37 pm by maubarzi
Hai un tuo server?
Perchè te la sparo li, il tuo server potrebbe essere un altro arduino!
Se sei in cloud la vedo dura ma se hai una tua rete lan basta che lo connetti alla rete e lo rendi visibile dall'esterno.
Così dovresti rimanere su un ambito a te confidente (se ho intuito giusto).
Io usando Java ho un'architettura un po' articolata da imbastire sul server per cui non te la propongo nemmeno.
Con php non ci ho mai lavorato per cui non so quanto facile sia fare la parte server.
La parte client, quella da fare su arduino, sarebbe abbastanza facile, si potrebbe limitare ad una richiesta http con passaggio di un parametro stringa con dentro tutto.
Puoi farla con http get o http post, cambia solo un po' la sintassi ma l'url definitivo lo puoi anche scrivere a mano su un browser per testarlo prima di implementarlo su arduino.

La app del cliente la faresti accedere direttamente all'arduino della centralina del cliente?
Se si, allora lo dovrai gestire come server e rendere accessibile dall'esterno della rete su cui si aggancia.

Altrimenti, se come server anche dell'app usi un server centrale devi tenere conto del partizionamento dei dati, se avrai più clienti. E' un aspetto importante ma non complicato. Sempre che non ci siano dati troppo critici.

EDIT:
Ti lascio nelle mani di @Black_Dragon con il php
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

Black_Dragon

in realtà sul database basterebbe dare un ID univoco ad ogni arduino ed il gioco è fatto... quando il cliente (lato client) va in visualizzazione dei dati verranno filtrati solo quelli del ID univoco... senza fare troppe tabelle o query complesse.

Così l'arduino funge solo da client ed il server (anche in cloud) gestisce il tutto (fa il lavoro pesante - Calcoli - medie e quant'altro la fantasia ti ispira)

Go Up