Satt igår natt och försökte äntligen få ihop koden till en kommande fuktövervakning.
Grejen är att jag inte riktigt vet vad jag sysslar med. En del ctrl+C och ctrl +V samt en hel del klurande har gått åt, kanske vanlig utveckling iofs. Dock vet jag inte om jag kan göra koden enklare, kanske byta ut någon if sats skapa ett annorlunda objekt(void tror jag är samma sak). Något jag funderar över är om det är dumt att pilla med array för att lagra sensorvärde i. Samt även om jag borde byta ut lite variabler mot något annat än integer. Än så länge har jag inte platsbrist men kanske något att titta på.
Är ute på hal is när det blandas c och c++ och det skall även in HTML för att skicka data. Även när det gäller snyggaste sättet att kommentera kod. Jag har ingen formell utbildning i kodning.
#include <ESP8266WiFi.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
const char* ssid = "ssid";
const char* password = "password";
#define DHTPIN0 D5 // Pin which is connected to the DHT sensor.
#define DHTPIN1 D6 // Pin which is connected to the DHT sensor.
#define DHTPIN2 D7 // Pin which is connected to the DHT sensor.
#define DHTTYPE DHT11 // DHT 11
DHT_Unified dht0(DHTPIN0, DHTTYPE);
DHT_Unified dht1(DHTPIN1, DHTTYPE);
DHT_Unified dht2(DHTPIN2, DHTTYPE);
int dhtTemp[4];
int dhtHumi[4];
WiFiServer server(80);
// domoticz
const char * domoticz_server = "192.168.1.11"; //Domoticz server ip
int port = 8080; //Domoticz port
int idx[4] = {1, 2, 3}; //IDX for this virtual sensor, found in Setup -> Devices
// int status = WL_IDLE_STATUS; // the Wifi radio's status
WiFiClient client;
//variables to send data to domoticz
// Generally, you should use "unsigned long" for variables that hold time
unsigned long previousMillisDHT = 0; // will store last temp was read
unsigned long previousMillisDomoticz = 0; // will store last data was sent to DOMOTICZ
const long interval = 2000; // interval at which to read sensor
void setup()
{
Serial.begin(115200);
// Connect to WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.print("Use this URL : ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");
// Initialize device.
dht0.begin();
dht1.begin();
dht2.begin();
}
void loop()
{
//Use millis interupt to read dht
unsigned long currentMillisDHT = millis();
if(currentMillisDHT - previousMillisDHT >= interval) {
// save the last time you read the sensor
previousMillisDHT = currentMillisDHT;
//Read dht sensors
// Get temperature event and print its value.
sensors_event_t event;
dht0.temperature().getEvent(&event);
if (isnan(event.temperature)) {
dhtTemp[0] = 111;
}
else {
dhtTemp[0] = event.temperature;
}
// Get humidity event and print its value.
dht0.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
dhtHumi[0] = 111;
}
else {
dhtHumi[0] = event.relative_humidity;
}
dht1.temperature().getEvent(&event);
if (isnan(event.temperature)) {
dhtTemp[1] = 111;
}
else {
dhtTemp[1] = event.temperature;
}
// Get humidity event and print its value.
dht1.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
dhtHumi[1] = 111;
}
else {
dhtHumi[1] = event.relative_humidity;
}
dht2.temperature().getEvent(&event);
if (isnan(event.temperature)) {
dhtTemp[2] = 111;
}
else {
dhtTemp[2] = event.temperature;
}
// Get humidity event and print its value.
dht2.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
dhtHumi[2] = 111;
}
else {
dhtHumi[2] = event.relative_humidity;
}
}
//Use millis interupt to send data to domoticz
unsigned long currentMillisDomoticz = millis();
if(currentMillisDomoticz - previousMillisDomoticz >= interval*3) {
// save the last time you sent data to Domoticz
previousMillisDomoticz = currentMillisDomoticz;
//call function printInfo to send data to domoticz
printInfo();
}
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
// Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<meta http-equiv=\"refresh\" content=\"5\">");
client.println("<br />");
client.println(""); // do not forget this one
client.println("Values +-5%<br />");
for(int i=0; i<3; i++){
client.print("Temp");
client.print(i);
client.print("= ");
client.println(dhtTemp[i]);
client.print("Humidity");
client.print(i);
client.print("= ");
client.println(dhtHumi[i]);
client.println("<br />");
}
client.println("</html>");
delay(2000); //delay for the sensors to read a new value
Serial.println("Client disconnected");
}
void printInfo()
{
int humStat = 0; // int variable for the HUM_stat
for(int i=0; i<3; i++){
if (dhtHumi[i] > 70)
{
//set HUM_STAT to Wet icon
humStat = 3;
}
else if (dhtHumi[i] < 29)
{
//set HUM_STAT to dry icon
humStat = 2;
}
else if (dhtHumi[i] < 50 && dhtHumi[i] >= 30)
{
//set HUM_STAT to comfortable icon
humStat = 1;
}
else (dhtHumi[i] <= 70 && dhtHumi[i] >= 50);
{
//set HUM_STAT to normal icon
humStat = 0;
}
// Domoticz format /json.htm?type=command¶m=udevice&idx=IDX&nvalue=0&svalue=TEMP;HUM;HUM_STAT
if (client.connect(domoticz_server,port)) {
client.print("GET /json.htm?type=command¶m=udevice&idx=");
client.print(idx[i]);
client.print("&nvalue=0&svalue=");
client.print(dhtTemp[i]);
client.print(";");
client.print(dhtHumi[i]);
client.print(";");
client.print(humStat); //Value for HUM_STAT. Can be one of: 0=Normal, 1=Comfortable, 2=Dry, 3=Wet
client.println(" HTTP/1.1");
client.print("Host: ");
client.print(domoticz_server);
client.print(":");
client.println(port);
client.println("User-Agent: Arduino-ethernet");
client.println("Connection: close");
client.println();
client.stop();
}
}
}