850 lines
27 KiB
C++
Executable File
850 lines
27 KiB
C++
Executable File
#include <ESP8266WiFi.h>
|
|
#include <Wire.h>
|
|
#include "/home/souti/Arduino/EEPROM_TEST/eeprom.h"
|
|
|
|
//////////////////////
|
|
// WiFi Definitions //
|
|
//////////////////////
|
|
const char WiFiAPPSK[] = "sparkfun";
|
|
|
|
// Avant la connexion au réseau local
|
|
// Se connecter au réseau ESP8266 Thing **** Qui apparait dans
|
|
// la liste des réseau WIFI
|
|
// sur l'adresse IP http://192.168.4.1/
|
|
|
|
// char ssid[32]; //= ""; //"Livebox-37cc"; // Le nom de votre réseau Wifi
|
|
// char pass[32]; // = ""; //"8A6060920A8A86896F770F2C47";
|
|
|
|
//32 Livebox-37cc 45 + 13
|
|
//45 key... 91 + 46
|
|
//91 192.168.0.10 109 + 28
|
|
//109 8080 121 + 12
|
|
//121 288 124 + 3
|
|
|
|
|
|
#define ADDRESS_SSID 32 // ==> 45
|
|
#define ADDRESS_PASS 64 // ==> 91
|
|
#define ADDRESS_DOMO 96 // ==> 109
|
|
#define ADDRESS_PORT 126 // ==> 131
|
|
#define ADDRESS_RADI 132 // ==> 136
|
|
#define ADDRESS_TEMP 138
|
|
#define ADDRESS_CONS 146
|
|
|
|
#define PAGE_MENU 0
|
|
#define PAGE_ADMIN 1
|
|
#define PAGE_STATUS 2
|
|
#define PAGE_INFOS 3
|
|
|
|
String domoticz = "";
|
|
String port = "";
|
|
String radiateur = "";
|
|
String ssid = "";
|
|
String pass = "";
|
|
String temp = "";
|
|
String cons = "";
|
|
String AP_NameString = "";
|
|
|
|
int bcl = 0;
|
|
|
|
#define START_ADDRESS 831 //memory address of the 1st stored byte
|
|
|
|
WiFiClient client;
|
|
|
|
WiFiServer server(80);
|
|
|
|
void setup()
|
|
{
|
|
initHardware();
|
|
setupWiFi();
|
|
server.begin();
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
if (bcl % 60 == 0) {
|
|
infos();
|
|
}
|
|
|
|
// Check if a client has connected
|
|
client = server.available();
|
|
if (!client) {
|
|
// infos();
|
|
delay(1000);
|
|
bcl++;
|
|
return;
|
|
}
|
|
|
|
// Read the first line of the request
|
|
String req = client.readStringUntil('\r');
|
|
Serial.println(req);
|
|
// client.flush();
|
|
|
|
// Match the request
|
|
int val = -1; // We'll use 'val' to keep track of both the
|
|
// request type (read/set) and value if set.
|
|
if (req.indexOf("/admin") != -1) {
|
|
val = -3;
|
|
//int end = readPage(START_ADDRESS);
|
|
//pageAdmin();
|
|
pageMenu(PAGE_ADMIN);
|
|
|
|
client.stop();
|
|
return;
|
|
} else if (req.indexOf("/reset") != -1) {
|
|
writeString(ADDRESS_SSID, "\n");
|
|
writeString(ADDRESS_PASS, "\n");
|
|
writeString(ADDRESS_DOMO, "\n");
|
|
writeString(ADDRESS_PORT, "\n");
|
|
writeString(ADDRESS_RADI, "\n");
|
|
writeString(ADDRESS_TEMP, "\n");
|
|
writeString(ADDRESS_CONS, "\n");
|
|
|
|
client.println("Reset done. SSID, PASS, Domoticz, port & id cleaned.");
|
|
delay(100);
|
|
client.stop();
|
|
return;
|
|
} else if (req.indexOf("/ident") != -1) {
|
|
|
|
ident(req);
|
|
|
|
client.stop();
|
|
return;
|
|
} else if (req.indexOf("/status") != -1) {
|
|
|
|
//printWifiStatus();
|
|
pageMenu(PAGE_STATUS);
|
|
|
|
client.stop();
|
|
return;
|
|
} else if (req.indexOf("/infos") != -1) {
|
|
pageMenu(PAGE_INFOS);
|
|
client.stop();
|
|
return;
|
|
} else if (req.indexOf("/menu") != -1) {
|
|
//pageMenu();
|
|
pageMenu(PAGE_MENU);
|
|
client.stop();
|
|
return;
|
|
} else {
|
|
pageMenu(PAGE_MENU);
|
|
client.stop();
|
|
return;
|
|
}
|
|
|
|
// Otherwise req will be invalid. We'll say as much in HTML
|
|
|
|
client.flush();
|
|
|
|
// Prepare the response. Start with the common header:
|
|
String s = "HTTP/1.1 200 OK\r\n";
|
|
s += "Content-Type: text/html\r\n\r\n";
|
|
s += "<!DOCTYPE HTML>\r\n<html>\r\n";
|
|
|
|
s += "Invalid Request.<br> Try /admin /reset.</br>";
|
|
s += String(WiFi.localIP());
|
|
|
|
s += "</html>\n";
|
|
|
|
// Send the response to the client
|
|
client.print(s);
|
|
delay(1);
|
|
Serial.println("Client disconnected");
|
|
|
|
client.stop();
|
|
|
|
// The client will actually be disconnected
|
|
// when the function returns and 'client' object is detroyed
|
|
}
|
|
|
|
void ident(String req) {
|
|
|
|
// Return : ident?name=jjjjj&pass=kkkk&domo&H=
|
|
int posName = req.indexOf("name");
|
|
int posPass = req.indexOf("pass", posName);
|
|
int posDomo = req.indexOf("domo", posPass);
|
|
int posPort = req.indexOf("port", posDomo);
|
|
int posRadi = req.indexOf("radi", posPort);
|
|
int posTemp = req.indexOf("temp", posRadi);
|
|
int posCons = req.indexOf("cons", posTemp);
|
|
int End = req.indexOf("H", posCons);
|
|
|
|
if (End < 0) {
|
|
End = req.length() + 1;
|
|
}
|
|
//ssid
|
|
String ssid = getValueFrom(req, posName, posPass);
|
|
char ssidc[ssid.length() + 1];
|
|
ssid.toCharArray(ssidc, ssid.length() + 1);
|
|
|
|
//Password
|
|
String pass = getValueFrom(req, posPass, posDomo);
|
|
char passc[pass.length() + 1];
|
|
pass.toCharArray(passc, pass.length() + 1);
|
|
|
|
// Domo
|
|
String domo = getValueFrom(req, posDomo, posPort);
|
|
char domoc[domo.length() + 1];
|
|
domo.toCharArray(domoc, domo.length() + 1);
|
|
|
|
// Port
|
|
String port = getValueFrom(req, posPort, posRadi);
|
|
char portc[port.length() + 1];
|
|
port.toCharArray(portc, port.length() + 1);
|
|
|
|
// Radiateur
|
|
String radi = getValueFrom(req, posRadi, posTemp);
|
|
char radic[radi.length() + 1];
|
|
radi.toCharArray(radic, radi.length() + 1);
|
|
|
|
// Thermometre
|
|
String temp = getValueFrom(req, posTemp, posCons);
|
|
char tempc[temp.length() + 1];
|
|
temp.toCharArray(tempc, temp.length() + 1);
|
|
|
|
// Consigne
|
|
String cons = getValueFrom(req, posCons, End);
|
|
char consc[cons.length() + 1];
|
|
cons.toCharArray(consc, cons.length() + 1);
|
|
|
|
Serial.println("SSID=" + ssid);
|
|
Serial.println("Pass=" + pass);
|
|
Serial.println("Domo=" + domo);
|
|
Serial.println("Port=" + port);
|
|
Serial.println("Radi=" + radi);
|
|
Serial.println("Temp=" + temp);
|
|
Serial.println("Cons=" + cons);
|
|
|
|
|
|
boolean connected = connectToWifi(ssidc, passc);
|
|
|
|
client.flush();
|
|
// Prepare the response. Start with the common header:
|
|
|
|
|
|
String s = "HTTP/1.1 200 OK\r\n";
|
|
s += "Content-Type: text/html\r\n\r\n";
|
|
s += "<!DOCTYPE HTML>\r\n<html>\r\n";
|
|
//s += "Connexion en-cours.";
|
|
|
|
Serial.println(writeString(ADDRESS_SSID, ssid + "\n"));
|
|
|
|
Serial.println(writeString(ADDRESS_PASS, pass + "\n"));
|
|
|
|
Serial.println(writeString(ADDRESS_DOMO, domo + "\n"));
|
|
|
|
Serial.println(writeString(ADDRESS_PORT, port + "\n"));
|
|
|
|
Serial.println(writeString(ADDRESS_RADI, radi + "\n"));
|
|
|
|
Serial.println(writeString(ADDRESS_TEMP, temp + "\n"));
|
|
|
|
Serial.println(writeString(ADDRESS_CONS, cons + "\n"));
|
|
|
|
if (connected) {
|
|
|
|
|
|
s += "WiFi connected\n";
|
|
|
|
// Start the server
|
|
// server.begin();
|
|
|
|
// s+="Server started\n";
|
|
|
|
// Print the IP address
|
|
s += "Use this URL to connect: ";
|
|
s += "http://";
|
|
s += WiFi.localIP();
|
|
s += "/_n";
|
|
|
|
|
|
} else {
|
|
s += "Connexion impossible";
|
|
}
|
|
|
|
s += "</html>\n";
|
|
client.println(s);
|
|
delay(200);
|
|
|
|
}
|
|
|
|
void setupWiFi()
|
|
{
|
|
WiFi.mode(WIFI_AP);
|
|
|
|
// Do a little work to get a unique-ish name. Append the
|
|
// last two bytes of the MAC (HEX'd) to "Thing-":
|
|
uint8_t mac[WL_MAC_ADDR_LENGTH];
|
|
WiFi.softAPmacAddress(mac);
|
|
String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
|
|
String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
|
|
macID.toUpperCase();
|
|
AP_NameString = "ESP8266 Thing " + macID;
|
|
|
|
char AP_NameChar[AP_NameString.length() + 1];
|
|
memset(AP_NameChar, 0, AP_NameString.length() + 1);
|
|
|
|
for (int i = 0; i < AP_NameString.length(); i++)
|
|
AP_NameChar[i] = AP_NameString.charAt(i);
|
|
|
|
WiFi.softAP(AP_NameChar, WiFiAPPSK);
|
|
|
|
ssid = readLine(ADDRESS_SSID);
|
|
|
|
pass = readLine(ADDRESS_PASS);
|
|
|
|
domoticz = readLine(ADDRESS_DOMO);
|
|
|
|
port = readLine(ADDRESS_PORT);
|
|
|
|
radiateur = readLine(ADDRESS_RADI);
|
|
|
|
temp = readLine(ADDRESS_TEMP);
|
|
|
|
cons = readLine(ADDRESS_CONS);
|
|
|
|
Serial.println("Info lues " + ssid + " " + pass + " " + domoticz + " " + port + " " + radiateur);
|
|
|
|
if (ssid.length() != 0 && pass.length() != 0) {
|
|
char ssidc[ssid.length() + 1];
|
|
ssid.toCharArray(ssidc, ssid.length() + 1);
|
|
//Password
|
|
char passc[pass.length() + 1];
|
|
pass.toCharArray(passc, pass.length() + 1);
|
|
boolean ret = connectToWifi(ssidc, passc);
|
|
Serial.println(ret);
|
|
if (ret) {
|
|
Serial.print("Connexion au reseau ");
|
|
Serial.println(WiFi.localIP());
|
|
} else {
|
|
Serial.print("Pas de connexion au reseau ");
|
|
Serial.println(ssid);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
boolean connectToWifi(char* ssidc, char* passc) {
|
|
|
|
//WL_NO_SHIELD = 255,
|
|
//WL_IDLE_STATUS = 0,
|
|
//WL_NO_SSID_AVAIL = 1
|
|
//WL_SCAN_COMPLETED = 2
|
|
//WL_CONNECTED = 3
|
|
//WL_CONNECT_FAILED = 4
|
|
//WL_CONNECTION_LOST = 5
|
|
//WL_DISCONNECTED = 6
|
|
|
|
boolean ret = false;
|
|
WiFi.begin(ssidc, passc);
|
|
|
|
Serial.println("Connexion en-cours");
|
|
|
|
int time = 0;
|
|
int status = 0;
|
|
while (/*WiFi.status() != WL_CONNECTED &&*/ time < 30) {
|
|
delay(500);
|
|
//Serial.print(".");
|
|
status = WiFi.status();
|
|
Serial.print(status);
|
|
if (status == WL_CONNECTED) {
|
|
break;
|
|
}
|
|
time++;
|
|
}
|
|
|
|
if (status == WL_CONNECTED) {
|
|
ret = true;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
void initHardware()
|
|
{
|
|
// Serial.begin(115200);
|
|
Serial.begin(9600);
|
|
Wire.begin();
|
|
}
|
|
String getValueFrom(String request, int deb, int fin) {
|
|
|
|
int bufLength = ((fin) - (deb + 5)); //the 5 is for the "name=" string
|
|
|
|
// if(bufLength > 32){ //dont overflow the buffer (we only want 3 digits)
|
|
// bufLength = 32;
|
|
// }
|
|
|
|
String tmp = request.substring((deb + 5), (fin - 1));
|
|
|
|
return tmp;
|
|
}
|
|
|
|
char* convertToChar(String s, char* buf) {
|
|
char c[s.length() + 1];
|
|
s.toCharArray(c, s.length() + 1);
|
|
return c;
|
|
}
|
|
|
|
int readPage(int addr) {
|
|
Serial.println("Page en-cours de chargement");
|
|
// désactivation plantage traitement trop long
|
|
wdt_disable();
|
|
|
|
// int addr = START_ADDRESS; //this will increment after each read
|
|
char readChar;
|
|
String numero2 = "";
|
|
|
|
for (int ii = 0; /*ii < 500*/; ii++) {
|
|
addr += readObjectSimple(0x50, addr, readChar);
|
|
|
|
if (readChar == 10) {
|
|
// Serial.println(numero2);
|
|
client.println(numero2);
|
|
numero2 = "";
|
|
} else {
|
|
numero2 += readChar; //numero[ii];
|
|
if (readChar == 13 || ii > 5000) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
// Réactivation
|
|
wdt_enable(15000);
|
|
|
|
Serial.println("Page chargée");
|
|
return addr;
|
|
}
|
|
|
|
int writeString(int addr, String s) {
|
|
for (int ii = 0; ii < s.length(); ii++) {
|
|
addr += writeObjectSimple(0x50, addr, s.charAt(ii)); //caractere[ii]);
|
|
Serial.print(s.charAt(ii));
|
|
}
|
|
return addr;
|
|
}
|
|
String readLine(int addr) {
|
|
// Serial.println("Lecture d'une ligne ");
|
|
// désactivation plantage traitement trop long
|
|
wdt_disable();
|
|
|
|
// int addr = START_ADDRESS; //this will increment after each read
|
|
char readChar;
|
|
String numero2 = "";
|
|
|
|
for (int ii = 0; /*ii < 500*/; ii++) {
|
|
addr += readObjectSimple(0x50, addr, readChar);
|
|
|
|
if (readChar == 10) {
|
|
// Serial.println(numero2);
|
|
client.println(numero2);
|
|
//numero2="";
|
|
break;
|
|
} else {
|
|
numero2 += readChar; //numero[ii];
|
|
if (readChar == 13 || ii > 5000) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
// Réactivation
|
|
wdt_enable(15000);
|
|
|
|
Serial.println("Ligne chargée " + numero2);
|
|
return numero2;
|
|
}
|
|
|
|
void infos()
|
|
{
|
|
int nb = 0;
|
|
|
|
WiFiClient client2;
|
|
// Domoticz format /json.htm?type=command¶m=udevice&idx=IDX&nvalue=0&svalue=TEMP;HUM;HUM_STAT
|
|
|
|
// Domo
|
|
char domoc[domoticz.length() + 1];
|
|
domoticz.toCharArray(domoc, domoticz.length() + 1);
|
|
|
|
// Port
|
|
char portc[port.length() + 1];
|
|
port.toCharArray(portc, port.length() + 1);
|
|
int iport = atoi(portc);
|
|
|
|
Serial.print(domoc);
|
|
Serial.print(" ");
|
|
Serial.println(iport);
|
|
|
|
if (client2.connect(domoc, iport)) {
|
|
Serial.println("Connected to domoticz");
|
|
client2.print("GET /json.htm?type=devices&rid=");
|
|
client2.print(radiateur);
|
|
client2.println(" HTTP/1.1");
|
|
client2.print("Host: ");
|
|
client2.print(domoc);
|
|
client2.print(":");
|
|
client2.println(iport);
|
|
client2.println("User-Agent: Arduino-ethernet");
|
|
client2.println("Connection: close");
|
|
client2.println();
|
|
|
|
// Read the first line of the request
|
|
while (1) {
|
|
String req = client2.readStringUntil('\n');
|
|
|
|
if (req.indexOf("\"Status\"") != -1) {
|
|
Serial.println(req.substring(req.indexOf(":") + 2));
|
|
break;
|
|
}
|
|
if (req == "" || nb > 500) {
|
|
break;
|
|
}
|
|
nb++;
|
|
}
|
|
|
|
client2.stop();
|
|
delay(100);
|
|
}
|
|
if (client2.connect(domoc, iport)) {
|
|
client2.print("GET /json.htm?type=devices&rid=");
|
|
client2.print(temp);
|
|
client2.println(" HTTP/1.1");
|
|
client2.print("Host: ");
|
|
client2.print(domoc);
|
|
client2.print(":");
|
|
client2.println(iport);
|
|
client2.println("User-Agent: Arduino-ethernet");
|
|
client2.println("Connection: close");
|
|
client2.println();
|
|
|
|
// Read the first line of the request
|
|
while (1) {
|
|
String req = client2.readStringUntil('\n');
|
|
|
|
if (req.indexOf("\"Temp\"") != -1) {
|
|
Serial.println(req.substring(req.indexOf(":") + 2));
|
|
break;
|
|
}
|
|
if (req == "" || nb > 500) {
|
|
break;
|
|
}
|
|
nb++;
|
|
}
|
|
client2.stop();
|
|
delay(100);
|
|
}
|
|
if (client2.connect(domoc, iport)) {
|
|
client2.print("GET /json.htm?type=devices&rid=");
|
|
client2.print(cons);
|
|
client2.println(" HTTP/1.1");
|
|
client2.print("Host: ");
|
|
client2.print(domoc);
|
|
client2.print(":");
|
|
client2.println(iport);
|
|
client2.println("User-Agent: Arduino-ethernet");
|
|
client2.println("Connection: close");
|
|
client2.println();
|
|
|
|
// Read the first line of the request
|
|
while (1) {
|
|
String req = client2.readStringUntil('\n');
|
|
|
|
if (req.indexOf("\"SetPoint\"") != -1) {
|
|
String value = req.substring(req.indexOf(":") + 2);
|
|
//value = .substring(req.indexOf(":") + 1);
|
|
value.trim();
|
|
|
|
Serial.println(value);
|
|
break;
|
|
}
|
|
if (req == "" || nb > 500) {
|
|
break;
|
|
}
|
|
nb++;
|
|
}
|
|
|
|
client2.stop();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void printWifiStatus() {
|
|
// print the SSID of the network you're attached to:
|
|
Serial.print("SSID: ");
|
|
Serial.println(WiFi.SSID());
|
|
|
|
// print your WiFi shield's IP address:
|
|
IPAddress ip = WiFi.localIP();
|
|
Serial.print("IP Address: ");
|
|
Serial.println(ip);
|
|
|
|
// print the received signal strength:
|
|
long rssi = WiFi.RSSI();
|
|
Serial.print("signal strength (RSSI):");
|
|
Serial.print(rssi);
|
|
Serial.println(" dBm");
|
|
|
|
// PAge
|
|
client.println("<p>Connected to ");
|
|
client.println(WiFi.SSID());
|
|
client.println("</p><p>Ip: ");
|
|
client.println(ip);
|
|
client.println("</p><p>Force du signal:");
|
|
client.println(rssi);
|
|
client.println(" dBm</p>");
|
|
client.println("<p>Domoticz:");
|
|
client.println(domoticz);
|
|
client.println(":");
|
|
client.println(port);
|
|
client.println("</p>");
|
|
//
|
|
// client.println("<div class='c100 p25 dark orange'>");
|
|
// client.println(" <span>25%</span>");
|
|
// client.println(" <div class='slice'>");
|
|
// client.println(" <div class='bar'></div>");
|
|
// client.println(" <div class='fill'></div>");
|
|
// client.println(" </div>");
|
|
// client.println("</div>");
|
|
client.println("<button class='boutonTemp' onclick='click()'>" + temp + "</button>");
|
|
client.println("<button class='boutonCons' onclick='click()'>" + cons + "</button>");
|
|
}
|
|
|
|
////////////////////////////////////////////
|
|
////// PAGE MENU
|
|
////////////////////////////////////////////
|
|
void pageMenu(int page) {
|
|
client.println("<html>");
|
|
client.println("<head>");
|
|
menuStyle();
|
|
client.println("</head>");
|
|
|
|
menuBody(page);
|
|
client.println("</html>\n\r");
|
|
|
|
}
|
|
|
|
void menuBody(int page) {
|
|
client.println("<body>");
|
|
client.println("<header role='banner'>");
|
|
client.println("<div class='wrapper'>");
|
|
client.println("<h1>Radiateur " + AP_NameString + "</h1>");
|
|
client.println("<nav id='nav' role='navigation'>");
|
|
client.println("<div class='show_menu_btn' data-target='#nav ul' data-shown-text='Hide menu' data-hidden-text='Show menu' >Show menu</div>");
|
|
client.println("<ul>");
|
|
client.println("<li><a href='/menu'>Menu</a></li>");
|
|
client.println("<li><a href='/admin'>Admin</a></li>");
|
|
client.println("<li><a href='/infos'>Infos</a></li>");
|
|
client.println("<li><a href='/status'>Status</a></li>");
|
|
client.println("<li><a href='/reset'>Reset</a></li>");
|
|
client.println("<li><a href='/aide'>Aide</a></li>");
|
|
client.println("</ul>");
|
|
client.println("</nav>");
|
|
client.println("</div>");
|
|
client.println("</header>");
|
|
|
|
client.println("<main role='main'>");
|
|
client.println("<div class='wrapper'>");
|
|
if (page == PAGE_MENU) {
|
|
client.println("<article>");
|
|
// client.println(" <h2>Show/Hide navigation with pure JavaScript</h2>");
|
|
// client.println(" <p>A show/hide menu using only pure JavaScript, no jQuery. Because sometimes there is no need to load the whole of jQuery just for a menu like that.</p>");
|
|
// client.println(" <p>I can't claim all the credit for this, found help here: <a href='http://jsfiddle.net/fyUJc/31/'>jsFiddle</a>.</p>");
|
|
client.println("</article>");
|
|
} else if (page == PAGE_ADMIN) {
|
|
client.println( "<form action='/ident' method='get'>");
|
|
client.println( "<script type='text/javascript'>\nfunction showValue(newValue)\n{\ndocument.getElementById('text').innerHTML=newValue;\n}\n</script>");
|
|
client.println( "<div>");
|
|
client.println( "<label for='name'>SSID:</label>");
|
|
client.println( "<input type='text' id='name' name='name' value='" + ssid + "'/>");
|
|
client.println( "</div>");
|
|
client.println( "<div>");
|
|
client.println( "<label for='pass'>Password:</label>");
|
|
client.println( "<input type='password' id='pass' name='pass' />");
|
|
client.println( "</div>");
|
|
client.println( "<div>");
|
|
client.println( "<label for='domo'>Domoticz:</label>");
|
|
client.println( "<input type='text' id='domo' name='domo' value='" + domoticz + "'/>"); // />");
|
|
client.println( "</div>");
|
|
client.println( "<div>");
|
|
client.println( "<label for='port'>Port:</label>");
|
|
client.println( "<input type='text' id='port' name='port' value='" + port + "'/>");
|
|
client.println( "</div>");
|
|
client.println( "<div>");
|
|
client.println( "<label for='radi'>Id Radiateur:</label>");
|
|
client.println( "<input type='radi' id='radi' name='radi' value='" + radiateur + "'/>");
|
|
client.println( "</div>");
|
|
client.println( "<div>");
|
|
client.println( "<label for='temp'>Id Thermometre:</label>");
|
|
client.println( "<input type='temp' id='temp' name='temp' value='" + temp + "'/>");
|
|
client.println( "</div>");
|
|
client.println( "<div>");
|
|
client.println( "<label for='cons'>Id Consigne:</label>");
|
|
client.println( "<input type='cons' id='cons' name='cons' value='" + cons + "'/>");
|
|
client.println( "</div>");
|
|
|
|
client.println( "<div class='button'>");
|
|
client.println( "<button name=H type='submit'>Ok</button>");
|
|
client.println( "</div>");
|
|
client.println( "</form>");
|
|
} else if (page == PAGE_STATUS) {
|
|
client.println("<article>");
|
|
printWifiStatus();
|
|
client.println("</article>");
|
|
} else if (page == PAGE_INFOS) {
|
|
infos();
|
|
}
|
|
client.println(" </div>");
|
|
client.println("</main>");
|
|
|
|
client.println("<script>");
|
|
client.println("var show_menu=document.querySelector('.show_menu_btn'),viewport_width=document.documentElement.clientWidth,menu=document.querySelector('#nav ul');600>viewport_width&&(menu.style.display='none'),window.addEventListener('resize',function(){var e=document.documentElement.clientWidth;menu.style.display=e>599?'block':'none'}),show_menu.addEventListener('click',function(){var e=document.querySelector(show_menu.getAttribute('data-target'));'none'==e.style.display?(e.style.display='block',show_menu.innerHTML=show_menu.getAttribute('data-shown-text')):(e.style.display='none',show_menu.innerHTML=show_menu.getAttribute('data-hidden-text'))});");
|
|
//menuJS();
|
|
// Fonction pour les voutons
|
|
//client.println("function click(){$(function() {$( '#dialog' ).dialog({width : 250, height: 180, modal : true }); }); }");
|
|
client.println("</script>");
|
|
client.println("<script>");
|
|
client.println("function click(){$(function() { alert('hello'); }); }");
|
|
client.println("</script>");
|
|
|
|
client.println("</body>");
|
|
|
|
}
|
|
void menuJS() {
|
|
//
|
|
// client.println( "var show_menu=document.querySelector('.show_menu_btn'),viewport_width=document.documentElement.clientWidth,menu=document.querySelector('#nav ul');");
|
|
// client.println( "600>viewport_width&&(menu.style.display='none'),window.addEventListener('resize',function(){var e=document.documentElement.clientWidth;");
|
|
// client.println( "menu.style.display=e>599?'block':'none'}),show_menu.addEventListener('click',function(){var e=document.querySelector(show_menu.getAttribute('data-target'));");
|
|
// client.println( "'none'==e.style.display?(e.style.display='block',show_menu.innerHTML=show_menu.getAttribute('data-shown-text')):");
|
|
// client.println( "(e.style.display='none',show_menu.innerHTML=show_menu.getAttribute('data-hidden-text'))}");
|
|
//
|
|
}
|
|
void menuStyle() {
|
|
client.println("<style>");
|
|
client.println( "a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,");
|
|
client.println( "figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,");
|
|
client.println( "strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}");
|
|
client.println( "article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}nav ul{list-style:none}blockquote,q{quotes:none}blockquote:");
|
|
client.println( "after,blockquote:before,q:after,q:before{content:'';");
|
|
client.println( "content:none}table{border-collapse:collapse;border-spacing:0}h1{font-size:2.5em;font-weight:700;padding:.5em 0;letter-spacing:1px}@media screen and ");
|
|
client.println( "(max-width:599px){h1{text-align:center}}h2{font-size:1.25em;font-weight:700;line-height:1.2;padding:.5em 0}p{font-size:1em;padding:0 0 1em}a{color:#555;");
|
|
client.println( "text-decoration:none;border-bottom:1px solid #555}a:hover{color:#88b47f;border-bottom:1px solid #88b47f}*{-moz-box-sizing:border-box;-webkit-box-sizing:");
|
|
client.println( "border-box;box-sizing:border-box;-webkit-text-size-adjust:auto}body{font-family:sans-serif;font-size:100%;text-align:center;line-height:1.5;background:");
|
|
client.println( "#f8f7f0;color:#555}.wrapper{width:90%;max-width:50em;margin:0 auto;text-align:left;overflow:hidden}");
|
|
client.println( "header{margin-bottom:1em;padding-bottom:1em;background:#57575f;color:#fff}@media screen and (max-width:599px){.no-js .show_menu_btn{display:none}.js .show_menu_btn,.no-js #nav ul{display:block}.js #nav ul{display:none}}@media screen and (min-width:600px){.show_menu_btn{display:none}#nav ul{display:block}}.show_menu_btn{width:35%;margin:0 auto;padding:.3em;cursor:pointer;text-align:center;background:#88b47f}#nav ul{margin:1em 0}#nav ul li{padding:.5em}#nav ul li:hover{background:#88b47f}#nav ul a{display:block;font-size:1em;color:#eee;border-bottom:none}@media screen and (max-width:599px){#nav ul{display:block}#nav ul li{display:block;text-align:center;border-bottom:1px solid #6f6f7a}}@media screen and (min-width:600px){#nav{overflow:hidden}#nav ul li{width:7em;float:left;margin-right:1em}}");
|
|
//Bouton
|
|
client.println( ".boutonTemp {width:85px;height:85px;background:#fafafa;box-shadow:2px 2px 8px #aaa;font:bold 13px Arial;border-radius:50%;color:#555;}");
|
|
client.println( ".boutonCons {width:85px;height:85px;background:#cc0000;font:bold 13px Arial;border-radius:50%;border:none;color:#fff;}");
|
|
|
|
client.println("</style>");
|
|
}
|
|
|
|
///////////////////////////////////////////////////
|
|
// PAGE ADMIN
|
|
///////////////////////////////////////////////////
|
|
void pageAdmin() {
|
|
|
|
client.println("<html>");
|
|
style();
|
|
body();
|
|
client.println("</html>\n\r");
|
|
}
|
|
|
|
void body() {
|
|
client.println( "<body>");
|
|
client.println( "<form action='/ident' method='get'>");
|
|
client.println( "<script type='text/javascript'>\nfunction showValue(newValue)\n{\ndocument.getElementById('text').innerHTML=newValue;\n}\n</script>");
|
|
client.println( "<div>");
|
|
client.println( "<label for='name'>SSID:</label>");
|
|
client.println( "<input type='text' id='name' name='name' />");
|
|
client.println( "</div>");
|
|
client.println( "<div>");
|
|
client.println( " <label for='pass'>Password:</label>");
|
|
client.println( " <input type='password' id='pass' name='pass' />");
|
|
client.println( "</div>");
|
|
client.println( "<div>");
|
|
client.println( " <label for='domo'>Domoticz:</label>");
|
|
client.println( " <input type='text' id='domo' name='domo' />");
|
|
client.println( " <label for='port'>Port:</label>");
|
|
client.println( " <input type='text' id='port' name='port' />");
|
|
client.println( "</div>");
|
|
client.println( "<div>");
|
|
client.println( " <label for='radi'>Id Radiateur:</label>");
|
|
client.println( " <input type='radi' id='radi' name='radi' />");
|
|
client.println( "</div>");
|
|
client.println( "<div class='button'>");
|
|
client.println( " <button name=H type='submit'>Ok</button>");
|
|
client.println( "</div>");
|
|
client.println( "</form>");
|
|
client.println( "</body>");
|
|
|
|
}
|
|
|
|
|
|
void style() {
|
|
|
|
client.println( "<style>");
|
|
client.println( "form {");
|
|
// client.println( " /* Just to center the form on the page */");
|
|
client.println( " margin: 0 auto;");
|
|
client.println( " width: 400px;");
|
|
client.println( "");
|
|
// client.println( " /* To see the limits of the form */");
|
|
client.println( " padding: 1em;");
|
|
client.println( " border: 1px solid #CCC;");
|
|
client.println( " border-radius: 1em;");
|
|
client.println( "}");
|
|
client.println( "");
|
|
client.println( "div + div {");
|
|
client.println( " margin-top: 1em;");
|
|
client.println( "}");
|
|
client.println( "");
|
|
client.println( "label {");
|
|
// client.println( " /* To make sure that all label have the same size and are properly align */");
|
|
client.println( " display: inline-block;");
|
|
client.println( " width: 90px;");
|
|
client.println( " text-align: right;");
|
|
client.println( "}");
|
|
client.println( "");
|
|
client.println( "input, textarea {");
|
|
// client.println( " /* To make sure that all text field have the same font settings");
|
|
// client.println( " By default, textarea are set with a monospace font */");
|
|
client.println( " font: 1em sans-serif;");
|
|
client.println( "");
|
|
// client.println( " /* To give the same size to all text field */");
|
|
client.println( " width: 300px;");
|
|
client.println( "");
|
|
client.println( " -moz-box-sizing: border-box;");
|
|
client.println( " box-sizing: border-box;");
|
|
client.println( "");
|
|
// client.println( " /* To harmonize the look & feel of text field border */");
|
|
client.println( " border: 1px solid #999;");
|
|
client.println( "}");
|
|
client.println( "");
|
|
client.println( "input:focus, textarea:focus {");
|
|
// client.println( " /* To give a little highligh on active elements */");
|
|
client.println( " border-color: #000;");
|
|
client.println( "}");
|
|
client.println( "");
|
|
client.println( "textarea {");
|
|
// client.println( " /* To properly align multiline text field with their label */");
|
|
client.println( " vertical-align: top;");
|
|
client.println( "");
|
|
// client.println( " /* To give enough room to type some text */");
|
|
client.println( " height: 5em;");
|
|
client.println( "");
|
|
// client.println( " /* To allow users to resize any textarea vertically");
|
|
// client.println( " It works only on Chrome, Firefox and Safari */");
|
|
client.println( " resize: vertical;");
|
|
client.println( "}");
|
|
client.println( "");
|
|
client.println( ".button {");
|
|
// client.println( " /* To position the buttons to the same position of the text fields */");
|
|
// client.println( " padding-left: 90px; /* same size as the label elements */");
|
|
client.println( "}");
|
|
client.println( "");
|
|
client.println( "button {");
|
|
// client.println( " /* This extra magin represent the same space as the space between");
|
|
// client.println( " the labels and their text fields */");
|
|
client.println( " margin-left: .5em;");
|
|
client.println( "}");
|
|
client.println( "</style>");
|
|
|
|
}
|