Commit 416cc3ca authored by Juan Pablo Sarubbi's avatar Juan Pablo Sarubbi

Add new file

parents
/**************************************************************************************
Implementacion de sistema de monitoreo de temepratura y humedad con sensor DHT22 y
agente Zabbix.
Version: 0.7
Fecha: 02/07/2019
- Implementación de agente para Zabbix
Mas informacion: https://pablo.sarubbi.com.ar
**************************************************************************************/
/*
El Sketch usa 16162 bytes (50%) del espacio de almacenamiento de programa. El máximo es 32256 bytes.
Las variables Globales usan 688 bytes (33%) de la memoria dinámica, dejando 1360 bytes para las variables locales. El máximo es 2048 bytes.
*/
#define DEBUG_SERVICE
#include <Ethernet.h> // Libreria para manejo de pila de TCP/IP
#include <DHT.h> // Libreria que implementa de manera sencilla la lectura del sensor de temperatura/humedad
String zbx_cmd ="";
static const byte zbx_head[5] = { 'Z', 'B', 'X', 'D', 0x01 }; // ZBXD\1
EthernetServer zServer(10050);
static byte mac[6] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE};
static byte ip[4] = {192, 168, 1, 2};
#define PIN_DHT 9 // Nro. de pin donde se encuentra conectado el sensor
#define DHTTYPE DHT22 // Modelo de sensor, puede ser DHT11, DHT21 o DHT22
DHT dht(PIN_DHT, DHTTYPE); // Inicializacion del sensor
unsigned long prevMillisGetTemp = millis();
float humidity = 0;
float temperature = 0;
void setup() {
#ifdef DEBUG_SERVICE
Serial.begin(9600);
#endif
dht.begin();
Ethernet.begin(mac, ip);
zServer.begin();
}
void loop() {
if (millis() - prevMillisGetTemp > 3000) {
humidity = dht.readHumidity();
temperature = dht.readTemperature();
prevMillisGetTemp = millis();
#ifdef DEBUG_SERVICE
Serial.print(F("Temperatura: "));
Serial.println(temperature);
Serial.print(F("Humedad: "));
Serial.println(humidity);
#endif
}
EthernetClient zClient = zServer.available();
if (zClient) {
if (zClient.available() > 0) {
char thisChar = zClient.read();
if( thisChar == 0x01 ) {
thisChar = zClient.read();
for (int i = 0; i < 7; i++){
zClient.read();
}
for ( int i = int (thisChar); i > 0; i--){
thisChar = zClient.read();
zbx_cmd += thisChar;
}
if(zbx_cmd.indexOf("agent.ping") >= 0) {
byte zbx_msg[9] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31};
zServer.write(zbx_head,5);
zServer.write(zbx_msg,9);
} else if(zbx_cmd.equals("agent.hostname")) {
zServer.write(zbx_head,5);
byte zbx_msg[22] = { 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 'A', 'r', 'd', 'u', 'i', 'n', 'o', '_', 'S', 'e', 'n', 's', 'o', 'r' };
zServer.write(zbx_msg,22);
} else if(zbx_cmd.equals("dht.temperature")) {
char zbx_msg[8];
dtostrf(temperature, 6, 2, zbx_msg);
byte zbx_len[8] = {0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
zServer.write(zbx_head,5);
zServer.write(zbx_len,8);
zServer.write(zbx_msg,8);
} else if(zbx_cmd.equals("dht.humidity")) {
char zbx_msg[8];
dtostrf(humidity, 6, 2, zbx_msg);
byte zbx_len[8] = {0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
zServer.write(zbx_head,5);
zServer.write(zbx_len,8);
zServer.write(zbx_msg,8);
} else { // ZBX_NOTSUPPORTED
zServer.write(zbx_head,5);
byte zbx_msg[46] = { 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 'Z', 'B', 'X', '_', 'N', 'O', 'T', 'S', 'U', 'P', 'P', 'O', 'R', 'T', 'E', 'D', 0x00, 'U', 'n', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd', ' ', 'i', 't', 'e', 'm', ' ', 'k', 'e', 'y', '.' };
zServer.write(zbx_msg,46);
}
zClient.stop();
zbx_cmd ="";
}
zbx_cmd ="";
}
}
delay(1);
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment