Buona giornata,
come già postato in hardware (EMONCMS e rilevamento dati temperatura - #15 by system - Hardware - Arduino Forum)
sto tentando di creare un sistema di monitoraggio di temperatura di casa per poi eventualmente comandare degli scambiatori per migliorare la qualità dell'aria.
Per ora mi sono occupato di sensori dht22 e dht11,
Ho risolto il fattore connessioni e recupero dei dati, ora ho il grosso problema di comunicarli al serve EMONCMS in modo corretto e stabile.
Fino a ieri Arduino era connesso alla rete dell'ufficio e funzionava, non benissimo visto che spesso non caricava i dati, ma almeno andava.
Oggi a casa ,,, non c'è stato verso,
Sulla vodafone station pare connesso ma i dati non arrivano al cms.
Potete cortesemente controllare il software di controllo?
/*
Arduino & OpenEnergyMonitor
Invio dati temperatura ed umidit� per futuro controllo vmc
*/
#include <SPI.h>
#include <Ethernet.h>
#include <DHT.h> //includi libreria DHT per sensori temperatura DHT11 e DHT22
int attesa=10*60; //secondi di tattesa per nuovi tentativi di connessione
DHT sala; //sensore in Sala, DHT22
DHT cucina; //sensore in cucina, DHT22
DHT bagnoP; //Sensore nel Bagno Piccol, DHT22
DHT bagnoG; // Sensore nel bagno Grande, DHT22
DHT gaia; // Sensore in camera di Gaia, DHT22
DHT genitori; // Sensore in camera Genitori, DHT22
DHT sud; //Sensore esterno lato SUD, DHT11
DHT nord; //Sensore esterno lato Nord, DHT11
DHT tetto; // Sensore nel sottotetto, DHT22
float SalaT;
float SalaU;
float CucinaT;
float CucinaU;
float BPiT;
float BPiU;
float BGaT;
float BGaU;
float GaiaT;
float GaiaU;
float GenT;
float GenU;
int SudT;
int SudU;
int NordT;
int NordU;
float tettoT;
float tettoU;
int contatore=0;
int a=0;
byte mac[] = {0x80, 0xA0, 0xDA, 0x00, 0x69, 0xD5};//using WIRED
IPAddress ip(192, 168, 1, 186);// fill in an available IP address on your network here,
EthernetClient client;
char server[] = "emoncms.org"; // name address for emoncms.org - IPAddress server(213, 138, 101, 177); // indirizzo IP di emoncms.org per utilizzo senza DNS
String apikey = "------------------------------------"; //api key (rilevata su registrazione sito emoncms.org)
int node=0;
unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds
boolean lastConnected = false; // state of the connection last time through the main loop
const unsigned long postingInterval = attesa*1000; // delay between updates, in milliseconds
void setup() {
Serial.begin(9600);// apertura serial port:
Serial.println("Emoncms client starting...");// Benvenuto
Ethernet.begin(mac, ip);
sala.setup(3);// assegnazione PIN dei vari sensori
cucina.setup(5);
bagnoG.setup(6);
bagnoP.setup(7);
genitori.setup(8);
gaia.setup(9);
tetto.setup(14);
nord.setup(16);
sud.setup(15);
}
void loop() {
if (client.available()) {
char c = client.read();
Serial.println(c);
}
// if there's no net connection, but there was one last time
// through the loop, then stop the client:
if (!client.connected() && lastConnected) {
Serial.println();
Serial.println("Sconnessione per ripristino invio...");
client.stop();
}
// if you're not connected, and at least <postingInterval> milliseconds have
// passed sinceyour last connection, then connect again and
// send data:
if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
letturaSensori(); //legge i valori dei sensori
InviaDati();// invia i dati ad EMONCMS
a=0;
Serial.print("Numero di cicli effettuati= ");
Serial.println(contatore++);
}
else {
Serial.print("procedura in attesa ");
Serial.print(a++);
Serial.println(" volte");
delay(60*1000);// un minuto di attesa
}
lastConnected = client.connected();
}
void letturaSensori(){
SalaT = sala.getTemperature();
SalaU = sala.getHumidity();
CucinaT=cucina.getTemperature();
CucinaU=cucina.getHumidity();
BPiT=bagnoP.getTemperature();
BPiU=bagnoP.getHumidity();
BGaT=bagnoG.getTemperature();
BGaU=bagnoG.getHumidity();
GaiaT=gaia.getTemperature();
GaiaU=gaia.getHumidity();
GenT=genitori.getTemperature();
GenU=genitori.getHumidity();
SudT=sud.getTemperature();
SudU=sud.getHumidity();
NordT=nord.getTemperature();
NordU=nord.getHumidity();
tettoT=tetto.getTemperature();
tettoU=tetto.getHumidity();
Serial.println("Lettura sensori effettuata ...");
}
void InviaDati(){
Serial.println("Inzio invio dati ad EmmonCMS");
if (client.connect(server, 80)) {
Serial.println("Connessione ...");
client.print("GET /api/post?apikey=");
client.print(apikey);
if (node > 0) {
client.print("&node=");
client.print(node);
}
client.print("&json={");// send the HTTP GET request:
client.print("SalaTemp:");
client.print(SalaT);
client.print(",SalaUmidit:");
client.print(SalaU);
client.print(",CucinaTemp:");
client.print(CucinaT);
client.print(",CucinaUmidit:");
client.print(CucinaU);
client.print(",BagnoPTemp:");
client.print(BPiT);
client.print(",BagnoPUmidit:");
client.print(BPiU);
client.print(",BagnoGTemp:");
client.print(BGaT);
client.print(",BagnoGUmidit:");
client.print(BGaU);
client.print(",GaiaTemp:");
client.print(GaiaT);
client.print(",GaiaUmidit:");
client.print(GaiaU);
client.print(",GenitoriTemp:");
client.print(GenT);
client.print(",GenitoriUmidit:");
client.print(GenU);
client.print(",SudTemp:");
client.print(SudT);
client.print(",SudUmidit:");
client.print(SudU);
client.print(",NordTemp:");
client.print(NordT);
client.print(",NordUmidit:");
client.print(NordU);
client.print(",tettoT:");
client.print(tettoT);
client.print(",tettoU:");
client.print(tettoU);
client.println("} HTTP/1.1");
client.println("Host:emoncms.org");
client.println("User-Agent: Arduino-ethernet");
client.println("Connection: close");
client.println();
client.println("Connection: close");
Serial.println("Invio dati su EMONCMS effettuata .....");// fine sostituzione
lastConnectionTime = millis();// note the time that the connection was made:
}
else {
Serial.println("Connessione fallita");// if you couldn't make a connection:
Serial.println("Sconnessione ...");
client.stop();
}
lastConnected = client.connected();// store the state of the connection for next time through the loop:
}
Altra domanda ... è possibile risparmiare un po' di memoria? questa forma mi occupa il 55% della memoria solo così, ho paure che quando inserirò il controllo dei ventilatori e, forse, il controllo della CO2 (ammesso si fattibile in modo economico) non riuscirò a store nei limiti.
Grazie.