/*********************** Marque's Somfy Controler *****************************/
/*
Hardware used:
Arduino uno
Ethernet Shield W5100
8 channel 5v relay
*/
#include <SPI.h>
#include <Ethernet.h>
#include <HTTPClient.h>
#define DEBUG1 1 //debug info
char AA = 3; // pin connected to relay 1
char BB = 4; // pin connected to relay 1
char CC = 5; // pin connected to relay 1
char DD = 6; // pin connected to relay 1
char EE = 7; // pin connected to relay 1
char FF = 8; // pin connected to relay 1
char II = 0; // pin connected to relay 1
long intervalNetworkCheck = 1500;
long previousMillis = 0;
unsigned long currentMillis;
boolean networkonline = false;
boolean DNS = false;
String sketchname = String(30); //skech name
String readString = String(30);
float set;
float Smin;
float Smax;
float Set;
int Ic;
byte mac[] = {
0xDE, 0xBD, 0xBE, 0xBF, 0xFE, 0xED };
IPAddress ip(192,168,1,69);
EthernetServer server(80);
EthernetClient client;
IPAddress Google1 (74,125,228,32 );
//IPAddress Google2 ( 173,194,75,94);
IPAddress ServerToCheck = Google1; // set the name of the server to check
char dnsServerToCheck[] = "google.com"; // set the name of the server to check
char content_main_top[] = "<body bgcolor=black><font color=white><center>";
char aa[] = "A omhoog";
char bb[] = "A stop";
char cc[] = "A omlaag";
char dd[] = "B omhoog";
char ee[] = "B stop";
char ff[] = "B omlaag";
char ii[] = "info";
int pgm_lastIndexOf(uint8_t c, const char * p)
{
int last_index = -1; // -1 indicates no match
uint8_t b;
for(int i = 0; true; i++) {
b = pgm_read_byte(p++);
if (b == c)
last_index = i;
else if (b == 0) break;
}
return last_index;
}
// displays at startup the Sketch running in the Arduino
void display_srcfile_details(void){
const char *the_path = PSTR(__FILE__); // save RAM, use flash to hold __FILE__ instead
int slash_loc = pgm_lastIndexOf('/',the_path); // index of last '/'
if (slash_loc < 0) slash_loc = pgm_lastIndexOf('\\',the_path); // or last '\' (windows, ugh)
int dot_loc = pgm_lastIndexOf('.',the_path); // index of last '.'
if (dot_loc < 0) dot_loc = pgm_lastIndexOf(0,the_path); // if no dot, return end of string
if (DEBUG1) Serial.print("\nSketch: ");
for (int i = slash_loc+1; i < dot_loc; i++) {
uint8_t b = pgm_read_byte(&the_path[i]);
if (b != 0)
{
sketchname.concat((char) b);
}
else break;
}
if (DEBUG1) Serial.print(sketchname);
if (DEBUG1) Serial.print(", Compiled on: ");
if (DEBUG1) Serial.print(__DATE__);
if (DEBUG1) Serial.print(" at ");
if (DEBUG1) Serial.print(__TIME__);
if (DEBUG1) Serial.print("\n");
}
/* start ethernet */
void init_eth()
{
if (DEBUG1) Serial.println("Ethernet start");
Ethernet.begin(mac);
server.begin();
if (DEBUG1) Serial.print("IP address is ");
if (DEBUG1) Serial.println(Ethernet.localIP());
if (DEBUG1) Serial.print("Gateway IP address is ");
if (DEBUG1) Serial.println(Ethernet.gatewayIP());
if (DEBUG1) Serial.print("DNS IP address is ");
if (DEBUG1) Serial.println(Ethernet.dnsServerIP());
}
/*** Network check ***/
void networkcheck()
{
if (DEBUG1) Serial.println ("Network check");
if (client.connect(dnsServerToCheck, 80))
{
delay(300);
if (DEBUG1) Serial.print("connected to ");
if (DEBUG1) Serial.println(dnsServerToCheck);
client.println("GET / HTTP/1.1");
client.println();
while (client.connected())
{
if (client.available())
{
char c = client.read();
if (readString.length() < 20)
if (DEBUG1) Serial.print(c);
{
readString.concat(c);
}
if (c == '\n')
{
client.stop();
if (DEBUG1) Serial.println();
if (DEBUG1) Serial.println("DNS OK");
DNS = true;
networkonline = true;
readString="";
}
}
if (!client.connected())
{
client.stop();
readString="";
}
}
}
if (!DNS)
{
if (DEBUG1) Serial.println("DNS Error");
if (DEBUG1) Serial.println("Check for IP");
if (client.connect(ServerToCheck, 80))
{
delay(300);
if (DEBUG1) Serial.print("connected to ");
if (DEBUG1) Serial.println(ServerToCheck);
client.println("GET / HTTP/1.1");
client.println();
while (client.connected())
{
if (client.available())
{
char c = client.read();
if (readString.length() < 20)
if (DEBUG1) Serial.print(c);
{
readString.concat(c);
}
if (c == '\n')
{
client.stop();
if (DEBUG1) Serial.println();
if (DEBUG1) Serial.println("IP lookup OK");
if (DEBUG1) Serial.println("DNS not available");
networkonline = true;
readString="";
}
}
if (!client.connected())
{
if (DEBUG1) Serial.println("Disconnecting");
client.stop();
readString="";
}
}
}
else
{
if (DEBUG1) Serial.println("Network Error");
networkonline = false;
}
}
}
/******** Setup *******************/
void setup()
{
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
// pinMode(Heater, OUTPUT);
//pinMode(Buzzer, OUTPUT);
// pinMode (Led, OUTPUT);
// pinMode (53, OUTPUT);
Serial.begin(9600);
display_srcfile_details();
init_eth();
// init_avviso();
networkcheck();
if (DEBUG1) Serial.println("Setup complete");
if (DEBUG1) Serial.println("");
}
/****************************** Loop *****************************/
void loop()
{
run_eth();
/****Every x seconds check network conection***/
if (!networkonline)
{
currentMillis = millis();
if(currentMillis - previousMillis > intervalNetworkCheck)
{
networkcheck();
}
}
}
/** Check fot Ethernet Client ***/
void run_eth()
{
EthernetClient client = server.available();
if (client)
{
boolean sentHeader = false;
boolean currentLineIsBlank = true;
while (client.connected())
{
if (client.available())
{
if(!sentHeader){
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
sentHeader = true;
}
char c = client.read();
if (DEBUG1) Serial.write(c);
if (int Ih = readString.indexOf("H"));
if(readString.indexOf("H") < 1)
{
readString.concat(c);
}
if (c == '\n' && currentLineIsBlank) {
if (DEBUG1) Serial.println("end");
if (DEBUG1) Serial.println(readString);
int Is = readString.indexOf("/");
int Iq = readString.indexOf("?");
if(readString.indexOf("?") > 1)
{
if (DEBUG1) Serial.println("? found");
int Ic = readString.indexOf("?");
if (Ic > 1)
{
if (DEBUG1) Serial.println("c found");
char carray[2];
readString.toCharArray( carray,2,(Ic+1));
int button = atoi(carray);
switch (button) {
case 1:
if (DEBUG1) Serial.println("1 found");
action(AA,aa, client);
break;
case 2:
if (DEBUG1) Serial.println("2 found");
action(BB,bb, client);
break;
case 3:
if (DEBUG1) Serial.println("3 found");
action(CC,cc, client);
break;
case 4:
if (DEBUG1) Serial.println("4 found");
action(DD,dd, client);
break;
case 5:
if (DEBUG1) Serial.println("5 found");
action(EE,ee, client);
break;
case 6:
if (DEBUG1) Serial.println("6 found");
action(FF,ff, client);
break;
case 7:
if (DEBUG1) Serial.println("7 found");
action(FF,ii, client);
break;
}
}
delay(1);
client.stop();
readString="";
client.read(); client.read();
}
delay(1);
client.stop();
readString="";
client.read(); client.read();
}
if (c == '\n') {currentLineIsBlank = true; }
else if (c != '\r') { currentLineIsBlank = false;}
// if (client.available())
}// while (client.connected())
}
client.stop();
}
}
/************************* Actions on web input *************************************/
void action(char XX, char* xx, EthernetClient client)
{
if (DEBUG1) Serial.print("Action ");
if (DEBUG1) Serial.println(xx);
digitalWrite(XX, HIGH);
delay (500);
digitalWrite(XX, LOW);
client.print (content_main_top);
client.println(xx);
}