@ -0,0 +1,208 @@ |
|||||||
|
void btime() |
||||||
|
{
|
||||||
|
// bool lastate;
|
||||||
|
current_time = hour1 * 60 + min1; |
||||||
|
Serial.println(current_time); |
||||||
|
// state1 = main_log(BTimer1, state1); //______________________Обработка каналов управления суточных таймеров реального времени (каналы 1 - 3)
|
||||||
|
Serial.print("BTimer1 [0]:"); |
||||||
|
Serial.println(BTimer1 [0]); |
||||||
|
Serial.print("BTimer2 [0]:"); |
||||||
|
Serial.println(BTimer2 [0]); |
||||||
|
Serial.print("BTimer3 [0]:"); |
||||||
|
Serial.println(BTimer3 [0]); |
||||||
|
//*******************************3************************************************************
|
||||||
|
switch (BTimer3[0]) { |
||||||
|
case 0:
|
||||||
|
state3=0; |
||||||
|
if(gpioTimer3[0]==1) |
||||||
|
{digitalWrite(4, 0); |
||||||
|
gpio[0]=0; |
||||||
|
} |
||||||
|
if(gpioTimer3[1]==1) |
||||||
|
{digitalWrite(26, 0); |
||||||
|
gpio[1]=0; |
||||||
|
} |
||||||
|
if(gpioTimer3[2]==1) |
||||||
|
{digitalWrite(27, 0); |
||||||
|
gpio[2]=0; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 1:
|
||||||
|
state3=1; |
||||||
|
if(gpioTimer3[0]==1) |
||||||
|
{digitalWrite(4, 1); |
||||||
|
gpio[0]=1; |
||||||
|
} |
||||||
|
if(gpioTimer3[1]==1) |
||||||
|
{digitalWrite(26, 1); |
||||||
|
gpio[1]=1; |
||||||
|
} |
||||||
|
if(gpioTimer3[2]==1) |
||||||
|
{digitalWrite(27, 1); |
||||||
|
gpio[2]=1; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 2:
|
||||||
|
state3 = main_log(BTimer3, state3); |
||||||
|
if(gpioTimer3[0]==1) |
||||||
|
{digitalWrite(4, state3); |
||||||
|
gpio[0]=state3; |
||||||
|
} |
||||||
|
if(gpioTimer3[1]==1) |
||||||
|
{digitalWrite(26, state3); |
||||||
|
gpio[1]=state3; |
||||||
|
} |
||||||
|
if(gpioTimer3[2]==1) |
||||||
|
{digitalWrite(27, state3); |
||||||
|
gpio[2]=state3; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 3:
|
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
//****************************2***************************************************************
|
||||||
|
|
||||||
|
switch (BTimer2[0]) { |
||||||
|
case 0:
|
||||||
|
state2=0; |
||||||
|
if(gpioTimer2[0]==1) |
||||||
|
{digitalWrite(4, 0); |
||||||
|
gpio[0]=0; |
||||||
|
} |
||||||
|
if(gpioTimer2[1]==1) |
||||||
|
{digitalWrite(26, 0); |
||||||
|
gpio[1]=0; |
||||||
|
} |
||||||
|
if(gpioTimer2[2]==1) |
||||||
|
{digitalWrite(27, 0); |
||||||
|
gpio[2]=0; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 1:
|
||||||
|
state2=1; |
||||||
|
if(gpioTimer2[0]==1) |
||||||
|
{digitalWrite(4, 1); |
||||||
|
gpio[0]=1; |
||||||
|
} |
||||||
|
if(gpioTimer2[1]==1) |
||||||
|
{digitalWrite(26, 1); |
||||||
|
gpio[1]=1; |
||||||
|
} |
||||||
|
if(gpioTimer2[2]==1) |
||||||
|
{digitalWrite(27, 1); |
||||||
|
gpio[2]=1; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 2:
|
||||||
|
state2 = main_log(BTimer2, state2); |
||||||
|
if(gpioTimer2[0]==1) |
||||||
|
{digitalWrite(4, state2); |
||||||
|
gpio[0]=state2; |
||||||
|
} |
||||||
|
if(gpioTimer2[1]==1) |
||||||
|
{digitalWrite(26, state2); |
||||||
|
gpio[1]=state2; |
||||||
|
} |
||||||
|
if(gpioTimer2[2]==1) |
||||||
|
{digitalWrite(27, state2); |
||||||
|
gpio[2]=state2; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 3:
|
||||||
|
break; |
||||||
|
} |
||||||
|
//******************************1-приоритет****************************************************************
|
||||||
|
|
||||||
|
switch (BTimer1 [0]) { |
||||||
|
case 0:
|
||||||
|
state1=0; |
||||||
|
if(gpioTimer1 [0]==1) |
||||||
|
{digitalWrite(4, 0); |
||||||
|
gpio[0]=0; |
||||||
|
} |
||||||
|
if(gpioTimer1 [1]==1) |
||||||
|
{digitalWrite(26, 0); |
||||||
|
gpio[1]=0; |
||||||
|
} |
||||||
|
if(gpioTimer1 [2]==1) |
||||||
|
{digitalWrite(27, 0); |
||||||
|
gpio[2]=0; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 1:
|
||||||
|
state1=1; |
||||||
|
if(gpioTimer1 [0]==1) |
||||||
|
{digitalWrite(4, 1); |
||||||
|
gpio[0]=1; |
||||||
|
} |
||||||
|
if(gpioTimer1 [1]==1) |
||||||
|
{digitalWrite(26, 1); |
||||||
|
gpio[1]=1; |
||||||
|
} |
||||||
|
if(gpioTimer1 [2]==1) |
||||||
|
{digitalWrite(27, 1); |
||||||
|
gpio[2]=1; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 2:
|
||||||
|
// lastate=state1;
|
||||||
|
state1 = main_log(BTimer1, state1); |
||||||
|
if(gpioTimer1[0]==1) |
||||||
|
{digitalWrite(4, state1); |
||||||
|
gpio[0]=state1; |
||||||
|
} |
||||||
|
if(gpioTimer1[1]==1) |
||||||
|
{digitalWrite(26, state1); |
||||||
|
gpio[1]=state1; |
||||||
|
} |
||||||
|
if(gpioTimer1[2]==1) |
||||||
|
{digitalWrite(27, state1); |
||||||
|
gpio[2]=state1; |
||||||
|
} |
||||||
|
|
||||||
|
break; |
||||||
|
case 3:
|
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
Serial.print("Timer1:"); |
||||||
|
Serial.println(state1); |
||||||
|
Serial.print("Timer2:"); |
||||||
|
Serial.println(state2); |
||||||
|
Serial.print("Timer3:"); |
||||||
|
Serial.println(state3); |
||||||
|
Serial.print("Gpio4:"); |
||||||
|
Serial.println(digitalRead(4)); |
||||||
|
Serial.print("Gpio26:"); |
||||||
|
Serial.println(digitalRead(26)); |
||||||
|
Serial.print("Gpio27:"); |
||||||
|
Serial.println(digitalRead(27)); |
||||||
|
writepin(); |
||||||
|
JSstringOut();//преобразуем состояние выходов gpio[3] в JSON
|
||||||
|
webSocket.textAll(jsonStringout);// выводим всем клиентам w/s
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
bool main_log (uint16_t* timeMassive, bool cur_state) { // Основная фунция расчета состояния каналов суточных таймеров реального времени
|
||||||
|
uint16_t j = 1440; |
||||||
|
uint8_t i = 0; |
||||||
|
uint8_t n = 0; |
||||||
|
for ( i = 1; i < 11; i++) { //___________________________Ищем в массиве таймеров элемент соответсвующий текущему времени c значением не равным 1440 (означает неактивно, отображается "--:--")
|
||||||
|
if ((timeMassive [i] == current_time) && (timeMassive [i] != 1440)) { |
||||||
|
j = timeMassive [i]; |
||||||
|
} |
||||||
|
} |
||||||
|
if (j == 1440)return (cur_state); //_______________________Если не нашли оставляем состояние канала без изменений
|
||||||
|
i = 0; |
||||||
|
for ( i = 1; i < 11; i++) { |
||||||
|
if ((j == timeMassive [i]) && (timeMassive [i] != 1440)) { |
||||||
|
n = i; |
||||||
|
} |
||||||
|
} |
||||||
|
i = 0; |
||||||
|
if ((n % 2) == 0) { //____________________________________Четные таймеры выключают (LOW)
|
||||||
|
return (LOW); |
||||||
|
} |
||||||
|
else return (HIGH); //____________________________________Нечетные таймеры включают (HIGH)
|
||||||
|
} |
||||||
@ -0,0 +1,128 @@ |
|||||||
|
void JSstringK() |
||||||
|
{ delay(0); |
||||||
|
String id2="2"; |
||||||
|
board2["id"] =id2; |
||||||
|
board2["tkom1"] = tkom1; |
||||||
|
board2["hkom1"] = hkom1; |
||||||
|
board2["batkom1"] = batkom1; |
||||||
|
board2["timekom1"] = timekom1; |
||||||
|
board2["tkom2"] = tkom2; |
||||||
|
board2["hkom2"] = hkom2; |
||||||
|
board2["batkom2"] = batkom2; |
||||||
|
board2["timekom2"] = timekom2; |
||||||
|
board2["tkor"] = tkor; |
||||||
|
board2["hkor"] = hkor; |
||||||
|
board2["batkor"] = batkor; |
||||||
|
board2["timekor"] = timekor; |
||||||
|
board2["tbal"] = tbal; |
||||||
|
board2["hbal"] = hbal; |
||||||
|
board2["batbal"] = batbal; |
||||||
|
board2["timebal"] = timebal; |
||||||
|
board2["tul1"] = tul1; |
||||||
|
board2["hul1"] = hul1; |
||||||
|
board2["osv1"] = osv1; |
||||||
|
board2["timeul1"] = timeul1; |
||||||
|
jsonString2 = JSON.stringify(board2);
|
||||||
|
Serial.println (jsonString2);
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void JSstringU() |
||||||
|
{delay(0); |
||||||
|
String id0="0"; |
||||||
|
board["id"] =id0; |
||||||
|
|
||||||
|
if(flread==0) |
||||||
|
{ |
||||||
|
board["temperature"] =ts; |
||||||
|
// t1 = incomingReadings.temp;
|
||||||
|
board["humidity"] =hs; //значение считаное с SD
|
||||||
|
board["tim2"] = tim2; |
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{//float t1=12.456787;
|
||||||
|
board["temperature"] =t1; |
||||||
|
// board["temperature"] =incomingReadings.temp;
|
||||||
|
//float h1=77.456787;
|
||||||
|
board["humidity"] =h1;//принятое значение
|
||||||
|
// board["humidity"] =incomingReadings.hum;
|
||||||
|
if(min1<10) |
||||||
|
{ |
||||||
|
board["tim2"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
board["tim2"] =String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
} |
||||||
|
//********************
|
||||||
|
board["batz"] = batz; |
||||||
|
board["tim3"] = tim3; |
||||||
|
//*****************
|
||||||
|
board["dataserv"] = dataserv; |
||||||
|
board["timeserv"] = timeserv; |
||||||
|
Serial.println("timeJS"); |
||||||
|
Serial.println(EpochTime); |
||||||
|
|
||||||
|
board["munthserv"] = munthserv; |
||||||
|
board["weekserv"] = weekserv; |
||||||
|
board["timev"] = timev; |
||||||
|
board["EpochTime"] = EpochTime; |
||||||
|
|
||||||
|
// jsonString = JSON.stringify(board);
|
||||||
|
jsonString = JSON.stringify(board);//{"id":"2","temperature":9.6733450317382812,"humidity":50.41815185546875,"tim2":"12:02","dataserv":"12","timeserv":"15:30","munthserv":"январь",weekserv:"среда"}
|
||||||
|
// events.send(jsonString.c_str(), "new_readings", millis());//обновление веба текущая температура
|
||||||
|
Serial.println (jsonString); |
||||||
|
} |
||||||
|
|
||||||
|
void JSstringAkva()// 0-выкл 1-вкл gpio[3]={0,0,0} |
||||||
|
{if(akva==1) |
||||||
|
{ String id="akva"; |
||||||
|
board5["id"] =id; |
||||||
|
board5["tempakv1"] =takva1; |
||||||
|
board5["light1"] =String(lightakv); |
||||||
|
board5["timakv1"] =timeakva; |
||||||
|
if(fanak1==0) |
||||||
|
{fan1="OFF"; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
fan1="ON"; |
||||||
|
} |
||||||
|
board5["fan1"] =fan1; |
||||||
|
board5["tempakv2"] =takva2; |
||||||
|
board5["light2"] =String(lightakv); |
||||||
|
board5["timakv2"] =timeakva; |
||||||
|
if(fanak2==0) |
||||||
|
{fan2="OFF"; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
fan2="ON"; |
||||||
|
} |
||||||
|
board5["fan2"] =fan2; |
||||||
|
board5["tempakv3"] =takva3; |
||||||
|
board5["light3"] =String(lightakv); |
||||||
|
board5["timakv3"] =timeakva; |
||||||
|
if(fanak3==0) |
||||||
|
{fan3="OFF"; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
fan3="ON"; |
||||||
|
} |
||||||
|
board5["fan3"] =fan3; |
||||||
|
|
||||||
|
jsonStringakva = JSON.stringify(board5); |
||||||
|
} |
||||||
|
//jsonStringakva="{\"id\":\"akva\",\"tempakv1\":\"20,1\",\"light1\":\"80 %\",\"timakv1\":\"12.31\",\"fan1\":\"OFF\",\"tempakv2\":\"20,2\",\"light2\":\"82 %\",\"timakv2\":\"12.32\",\"fan2\":\"OFF\",\"tempakv3\":\"20,3\",\"light3\":\"83 %\",\"timakv3\":\"12.33\",\"fan3\":\"OFF\"}";
|
||||||
|
Serial.println(jsonStringakva); |
||||||
|
} |
||||||
|
void JSstringOut()// 0-выкл 1-вкл gpio[3]={0,0,0} |
||||||
|
{String id="out"; |
||||||
|
board4["id"] =id; |
||||||
|
board4["out1"] = String(gpio[0])+String(gpio[1])+String(gpio[2])+String(gpio[3]); |
||||||
|
jsonStringout = JSON.stringify(board4);//jsonStringout= "{"id":"out","out1":"1011"}";
|
||||||
|
Serial.println(jsonStringout); |
||||||
|
} |
||||||
@ -0,0 +1,183 @@ |
|||||||
|
void sdlist() |
||||||
|
{ |
||||||
|
//listDir(SD, "/", 0);
|
||||||
|
//listDir(SD, "/", 0);
|
||||||
|
//delay(100);
|
||||||
|
// createDir(SD, "/mydir");//создать директорию (папку)
|
||||||
|
// delay(100);
|
||||||
|
// listDir(SD, "/", 0);
|
||||||
|
// delay(100);
|
||||||
|
// removeDir(SD, "/mydir");
|
||||||
|
//delay(100);
|
||||||
|
// listDir(SD, "/", 2);
|
||||||
|
// delay(100);
|
||||||
|
// writeFile(SD, "/hello.txt", "Hello ");
|
||||||
|
// delay(100);
|
||||||
|
// appendFile(SD, "/hello.txt", "World!\n");
|
||||||
|
// delay(100);
|
||||||
|
// readFile(SD, "/hello.txt");
|
||||||
|
// deleteFile(SD, "/foo.txt");
|
||||||
|
// renameFile(SD, "/hello.txt", "/foo.txt");
|
||||||
|
// readFile(SD, "/foo.txt");
|
||||||
|
// testFileIO(SD, "/test.txt");
|
||||||
|
// Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
|
||||||
|
// Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ |
||||||
|
Serial.printf("Listing directory: %s\n", dirname); |
||||||
|
|
||||||
|
File root = fs.open(dirname); |
||||||
|
if(!root){ |
||||||
|
Serial.println("Failed to open directory"); |
||||||
|
return; |
||||||
|
} |
||||||
|
if(!root.isDirectory()){ |
||||||
|
Serial.println("Not a directory"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
File file = root.openNextFile(); |
||||||
|
while(file){ |
||||||
|
if(file.isDirectory()){ |
||||||
|
Serial.print(" DIR : "); |
||||||
|
Serial.println(file.name()); |
||||||
|
if(levels){ |
||||||
|
listDir(fs, file.name(), levels -1); |
||||||
|
} |
||||||
|
} else { |
||||||
|
Serial.print(" FILE: "); |
||||||
|
Serial.print(file.name()); |
||||||
|
Serial.print(" SIZE: "); |
||||||
|
Serial.println(file.size()); |
||||||
|
} |
||||||
|
file = root.openNextFile(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void createDir(fs::FS &fs, const char * path){ |
||||||
|
// Serial.printf("Creating Dir: %s\n", path);
|
||||||
|
if(fs.mkdir(path)){ |
||||||
|
Serial.println("Dir created"); |
||||||
|
} else { |
||||||
|
Serial.println("no dir"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void removeDir(fs::FS &fs, const char * path){ |
||||||
|
Serial.printf("Removing Dir: %s\n", path); |
||||||
|
if(fs.rmdir(path)){ |
||||||
|
Serial.println("Dir removed"); |
||||||
|
} else { |
||||||
|
Serial.println("rmdir failed"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void readFile(fs::FS &fs, const char * path){ |
||||||
|
Serial.printf("Reading file: %s\n", path); |
||||||
|
|
||||||
|
File file = fs.open(path); |
||||||
|
if(!file){ |
||||||
|
Serial.println("Failed to open file for reading"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Serial.print("Read from file: "); |
||||||
|
while(file.available()){ |
||||||
|
Serial.write(file.read()); |
||||||
|
} |
||||||
|
file.close(); |
||||||
|
} |
||||||
|
|
||||||
|
void writeFile(fs::FS &fs, const char * path, const char * message){ |
||||||
|
Serial.printf("Writing file: %s\n", path); |
||||||
|
|
||||||
|
File file = fs.open(path, FILE_WRITE); |
||||||
|
if(!file){ |
||||||
|
Serial.println("Failed to open file for writing"); |
||||||
|
return; |
||||||
|
} |
||||||
|
if(file.print(message)){ |
||||||
|
Serial.println("File written"); |
||||||
|
} else { |
||||||
|
Serial.println("Write failed"); |
||||||
|
} |
||||||
|
file.close(); |
||||||
|
} |
||||||
|
|
||||||
|
void appendFile(fs::FS &fs, const char * path, const char * message){ |
||||||
|
Serial.printf("Appending to file: %s\n", path); |
||||||
|
|
||||||
|
File file = fs.open(path, FILE_APPEND); |
||||||
|
if(!file){ |
||||||
|
Serial.println("Failed to open file for appending"); |
||||||
|
return; |
||||||
|
} |
||||||
|
if(file.print(message)){ |
||||||
|
Serial.println("Message appended"); |
||||||
|
} else { |
||||||
|
Serial.println("Append failed"); |
||||||
|
} |
||||||
|
file.close(); |
||||||
|
} |
||||||
|
|
||||||
|
void renameFile(fs::FS &fs, const char * path1, const char * path2){ |
||||||
|
Serial.printf("Renaming file %s to %s\n", path1, path2); |
||||||
|
if (fs.rename(path1, path2)) { |
||||||
|
Serial.println("File renamed"); |
||||||
|
} else { |
||||||
|
Serial.println("Rename failed"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void deleteFile(fs::FS &fs, const char * path){ |
||||||
|
Serial.printf("Deleting file: %s\n", path); |
||||||
|
if(fs.remove(path)){ |
||||||
|
Serial.println("File deleted"); |
||||||
|
} else { |
||||||
|
Serial.println("Delete failed"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void testFileIO(fs::FS &fs, const char * path){ |
||||||
|
File file = fs.open(path); |
||||||
|
static uint8_t buf[512]; |
||||||
|
size_t len = 0; |
||||||
|
uint32_t start = millis(); |
||||||
|
uint32_t end = start; |
||||||
|
if(file){ |
||||||
|
len = file.size(); |
||||||
|
size_t flen = len; |
||||||
|
start = millis(); |
||||||
|
while(len){ |
||||||
|
size_t toRead = len; |
||||||
|
if(toRead > 512){ |
||||||
|
toRead = 512; |
||||||
|
} |
||||||
|
file.read(buf, toRead); |
||||||
|
len -= toRead; |
||||||
|
} |
||||||
|
end = millis() - start; |
||||||
|
Serial.printf("%u bytes read for %u ms\n", flen, end); |
||||||
|
file.close(); |
||||||
|
} else { |
||||||
|
Serial.println("Failed to open file for reading"); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
file = fs.open(path, FILE_WRITE); |
||||||
|
if(!file){ |
||||||
|
Serial.println("Failed to open file for writing"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
size_t i; |
||||||
|
start = millis(); |
||||||
|
for(i=0; i<2048; i++){ |
||||||
|
file.write(buf, 512); |
||||||
|
} |
||||||
|
end = millis() - start; |
||||||
|
Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end); |
||||||
|
file.close(); |
||||||
|
} |
||||||
@ -0,0 +1,94 @@ |
|||||||
|
void saveul() |
||||||
|
{ |
||||||
|
nt=0;//сброс номера температ датчика
|
||||||
|
|
||||||
|
|
||||||
|
int q=0; |
||||||
|
if((hour1<1)&&(min1<20))timev=0;//до 00:20 сброс timev-врмя записи на флеш улица восто приходят каждые 3 мин а зап каждые 20 мин
|
||||||
|
|
||||||
|
if(timev+20<hour1*60+min1){q=1;} |
||||||
|
|
||||||
|
|
||||||
|
ct1=ct1+1;//счетчик пропуска записи данных
|
||||||
|
Serial.print("ct="); |
||||||
|
Serial.println(ct1); |
||||||
|
if(ct1>15){ |
||||||
|
ct1=0; |
||||||
|
q=1; |
||||||
|
}//счетчик пропуска записи данныx
|
||||||
|
if(q==1) |
||||||
|
{
|
||||||
|
timev=hour1*60+min1; |
||||||
|
|
||||||
|
JSONVar boardat; |
||||||
|
if(min1<10) |
||||||
|
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
boardat["temperatura"] =String(tul1)+" C"; |
||||||
|
boardat["humidity"] = String(hul1)+" %"; |
||||||
|
tempdat = JSON.stringify(boardat); |
||||||
|
Serial.println (tempdat); |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||||
|
tempdat=tempdat+"\n"; |
||||||
|
|
||||||
|
//myFile = SD.open("/07.txt",FILE_WRITE);
|
||||||
|
// myFile = SD.open("/TEMPUL/28.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||||
|
// myFile = SD.open("/TEMPUL/2022/FEB/27.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||||
|
|
||||||
|
// Serial.println ("open07");
|
||||||
|
// myFile.print(tempdat+"\n");
|
||||||
|
// myFile.close();
|
||||||
|
//Serial.println (stamp.year);
|
||||||
|
//************************************************************************************************************************************************************************************************************************************
|
||||||
|
Serial.println ("name2"); |
||||||
|
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||||
|
// Serial.println (name2);
|
||||||
|
createDir(SD, "/TEMPUL"); |
||||||
|
String name1="/TEMPUL"+ String(stryen[year1-2014]);//2022
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strmen[month1-1]);//FEB
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strden[data1-1]);//27
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+String(strdaten[1]);//
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||||
|
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||||
|
Serial.println (Buf); |
||||||
|
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||||
|
|
||||||
|
/*
|
||||||
|
//test = strcat(name1,name2);
|
||||||
|
String name1=strcat("/TEMPUL", stryen[stamp.year-2014]); |
||||||
|
String name2=strcat(strmen[stamp.month-1], strd[stamp.day-1]); |
||||||
|
|
||||||
|
//+strm[stamp.month-1]+strd[stamp.day-1];
|
||||||
|
|
||||||
|
String name1="/TEMPUL"+ stry[stamp.year-2014]+strm[stamp.month-1]+strd[stamp.day-1]; |
||||||
|
Serial.println (name2); |
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50);
|
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+ name2+strdaten[0]; |
||||||
|
Serial.println (name1); |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
*/ |
||||||
|
ct1=0; |
||||||
|
//****************************************************
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,77 @@ |
|||||||
|
void savedata()//запись данных о темп и вл c espNOW на СД
|
||||||
|
{ |
||||||
|
delay(0); |
||||||
|
JSONVar boardat; |
||||||
|
if(min1<10) |
||||||
|
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
boardat["temperatura"] =String(t1)+" C"; |
||||||
|
boardat["humidity"] = String(h1)+" %"; |
||||||
|
tempdat = JSON.stringify(boardat); |
||||||
|
delay(0); |
||||||
|
Serial.println (tempdat); |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||||
|
tempdat=tempdat+"\n"; |
||||||
|
|
||||||
|
//myFile = SD.open("/07.txt",FILE_WRITE);
|
||||||
|
// myFile = SD.open("/TEMPUL/28.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||||
|
// myFile = SD.open("/TEMPUL/2022/FEB/27.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||||
|
|
||||||
|
// Serial.println ("open07");
|
||||||
|
// myFile.print(tempdat+"\n");
|
||||||
|
// myFile.close();
|
||||||
|
//Serial.println (stamp.year);
|
||||||
|
//************************************************************************************************************************************************************************************************************************************
|
||||||
|
delay(0); |
||||||
|
Serial.println ("name2"); |
||||||
|
// String name1="/TEMPUL"+ stryen[year1-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||||
|
// Serial.println (name2);
|
||||||
|
createDir(SD, "/TEMPUL"); |
||||||
|
String name1="/TEMPUL"+ String(stryen[year1-2014]);//2022
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strmen[month1-1]);//FEB
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strden[data1-1]);//27
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+String(strdaten[0]);//
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||||
|
// name1="/TEMPUL"+ String(stryen[year1-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||||
|
Serial.println (Buf); |
||||||
|
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||||
|
delay(0); |
||||||
|
JSstringU(); |
||||||
|
writeFile(SD, "/thku1.txt", jsonString.c_str());//записываем в этот файл последние данные NOW + EpochTime
|
||||||
|
/*
|
||||||
|
//test = strcat(name1,name2);
|
||||||
|
String name1=strcat("/TEMPUL", stryen[year1-2014]); |
||||||
|
String name2=strcat(strmen[stamp.month-1], strd[stamp.day-1]); |
||||||
|
|
||||||
|
//+strm[stamp.month-1]+strd[stamp.day-1];
|
||||||
|
|
||||||
|
String name1="/TEMPUL"+ stry[year1-2014]+strm[stamp.month-1]+strd[stamp.day-1]; |
||||||
|
Serial.println (name2); |
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50);
|
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+ name2+strdaten[0]; |
||||||
|
Serial.println (name1); |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
*/ |
||||||
|
|
||||||
|
//****************************************************
|
||||||
|
} |
||||||
@ -0,0 +1,273 @@ |
|||||||
|
void savebalk() |
||||||
|
{ |
||||||
|
boolean q=0; |
||||||
|
if((hb==hour1)&&( mb==min1)){q=1;} |
||||||
|
hb=hour1; |
||||||
|
mb=min1; |
||||||
|
if(q==0) |
||||||
|
{
|
||||||
|
JSONVar boardat; |
||||||
|
if(min1<10) |
||||||
|
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
boardat["temperatura"] =String(tbal)+" C"; |
||||||
|
boardat["humidity"] = String(hbal)+" %"; |
||||||
|
tempdat = JSON.stringify(boardat); |
||||||
|
Serial.println (tempdat); |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||||
|
tempdat=tempdat+"\n"; |
||||||
|
|
||||||
|
Serial.println ("name2"); |
||||||
|
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||||
|
// Serial.println (name2);
|
||||||
|
createDir(SD, "/TEMPUL"); |
||||||
|
String name1="/TEMPUL"+ String(stryen[year1-2014]);//2022
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strmen[month1-1]);//FEB
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strden[data1-1]);//27
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+String(strdaten[2]);//
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||||
|
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||||
|
Serial.println (Buf); |
||||||
|
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||||
|
} |
||||||
|
} |
||||||
|
//*************************K2*****************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
void savek2() |
||||||
|
{ |
||||||
|
|
||||||
|
JSONVar boardat; |
||||||
|
if(min1<10) |
||||||
|
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
boardat["temperatura"] =String(tkom2)+" C"; |
||||||
|
boardat["humidity"] = String(hkom2)+" %"; |
||||||
|
tempdat = JSON.stringify(boardat); |
||||||
|
Serial.println (tempdat); |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||||
|
tempdat=tempdat+"\n"; |
||||||
|
|
||||||
|
Serial.println ("name2"); |
||||||
|
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||||
|
// Serial.println (name2);
|
||||||
|
createDir(SD, "/TEMPUL"); |
||||||
|
String name1="/TEMPUL"+ String(stryen[year1-2014]);//2022
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strmen[month1-1]);//FEB
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strden[data1-1]);//27
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+String(strdaten[3]);//
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||||
|
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||||
|
Serial.println (Buf); |
||||||
|
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
//**************************K1****************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
void savek1() |
||||||
|
{ |
||||||
|
boolean q=0; |
||||||
|
if((hk==hour1)&&( mk==min1)){q=1;} |
||||||
|
hk=hour1; |
||||||
|
mk=min1; |
||||||
|
if(q==0) |
||||||
|
{
|
||||||
|
JSONVar boardat; |
||||||
|
if(min1<10) |
||||||
|
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
boardat["temperatura"] =String(tkom1)+" C"; |
||||||
|
boardat["humidity"] = String(hkom1)+" %"; |
||||||
|
tempdat = JSON.stringify(boardat); |
||||||
|
Serial.println (tempdat); |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||||
|
tempdat=tempdat+"\n"; |
||||||
|
|
||||||
|
Serial.println ("name2"); |
||||||
|
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||||
|
// Serial.println (name2);
|
||||||
|
createDir(SD, "/TEMPUL"); |
||||||
|
String name1="/TEMPUL"+ String(stryen[year1-2014]);//2022
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strmen[month1-1]);//FEB
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strden[data1-1]);//27
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+String(strdaten[4]);//
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||||
|
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||||
|
Serial.println (Buf); |
||||||
|
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//*********************akva*********************************************************************
|
||||||
|
void saveakva() |
||||||
|
{ |
||||||
|
String id="akva"; |
||||||
|
board5["id"] =id; |
||||||
|
board5["tempakv1"] =takva1; |
||||||
|
board5["light1"] =String(lightakv); |
||||||
|
board5["timakv1"] =timeakva; |
||||||
|
if(fanak1==0) |
||||||
|
{fan1="OFF"; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
fan1="ON"; |
||||||
|
} |
||||||
|
board5["fan1"] =fan1; |
||||||
|
board5["tempakv2"] =takva2; |
||||||
|
board5["light2"] =String(lightakv); |
||||||
|
board5["timakv2"] =timeakva; |
||||||
|
if(fanak2==0) |
||||||
|
{fan2="OFF"; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
fan2="ON"; |
||||||
|
} |
||||||
|
board5["fan2"] =fan2; |
||||||
|
board5["tempakv3"] =takva3; |
||||||
|
board5["light3"] =String(lightakv); |
||||||
|
board5["timakv3"] =timeakva; |
||||||
|
if(fanak3==0) |
||||||
|
{fan3="OFF"; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
fan3="ON"; |
||||||
|
} |
||||||
|
board5["fan3"] =fan3; |
||||||
|
|
||||||
|
jsonStringakva = JSON.stringify(board5); |
||||||
|
|
||||||
|
Serial.println (jsonStringakva); |
||||||
|
jsonStringakva=jsonStringakva+"\n"; |
||||||
|
|
||||||
|
createDir(SD, "/AKVA"); |
||||||
|
String name1="/AKVA"+ String(stryen[year1-2014]);//2022
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strmen[month1-1]);//FEB
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strden[data1-1]);//27
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+String(strdaten[9]);//имя текстового файла TA
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
//createDir(SD, "/TEMPUL/2022/FEB/27/TA.txt");
|
||||||
|
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||||
|
Serial.println (Buf); |
||||||
|
appendFile(SD,Buf,jsonStringakva.c_str());//добавление на инфы в файл
|
||||||
|
|
||||||
|
} |
||||||
|
//*********************kor*********************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
void savekor() |
||||||
|
{ |
||||||
|
boolean q=0; |
||||||
|
if((hkr==hour1)&&( mkr==min1)){q=1;} |
||||||
|
hkr=hour1; |
||||||
|
mkr=min1; |
||||||
|
if(q==0) |
||||||
|
{
|
||||||
|
JSONVar boardat; |
||||||
|
if(min1<10) |
||||||
|
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
boardat["temperatura"] =String(tkor)+" C"; |
||||||
|
boardat["humidity"] = String(hkor)+" %"; |
||||||
|
tempdat = JSON.stringify(boardat); |
||||||
|
Serial.println (tempdat); |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||||
|
tempdat=tempdat+"\n"; |
||||||
|
|
||||||
|
Serial.println ("name2"); |
||||||
|
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||||
|
// Serial.println (name2);
|
||||||
|
createDir(SD, "/TEMPUL"); |
||||||
|
String name1="/TEMPUL"+ String(stryen[year1-2014]);//2022
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strmen[month1-1]);//FEB
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strden[data1-1]);//27
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+String(strdaten[5]);//
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||||
|
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||||
|
Serial.println (Buf); |
||||||
|
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,18 @@ |
|||||||
|
void sdsave() |
||||||
|
{esp_task_wdt_reset();//reset WDT
|
||||||
|
//String timerdata={"timer1":["01:00","09:00","10:00","11:00","","","","","",""],"timer2":[
|
||||||
|
// String timerweek={"id":"week","timer1_week":"0111100","timer2_week":"1000011","timer3_week":"0101010"};
|
||||||
|
//timerout= {"id":"tout","t1":"100","t2":"010","t3":"001"}
|
||||||
|
writeFile(SD, "/thkom1.txt", jsonString2.c_str());//записываем в этот файл последние данные для счит после сброса
|
||||||
|
writeFile(SD, "/thku1.txt", jsonString.c_str());//записываем в этот файл последние данные NOW + EpochTime для счит после сброса
|
||||||
|
writeFile(SD, "/output.txt", jsonStringout.c_str());//записываем в этот файл последние данные для счит после сброса
|
||||||
|
//String jsonStringout= "{"id":"out","out1":"101"}";// 0-выкл 1-вкл
|
||||||
|
writeFile(SD, "/timerd.txt", timerdata.c_str());//записываем в этот файл значения для таймера
|
||||||
|
//String timerdata={"timer1":["01:00","09:00","10:00","11:00","","","","","",""],"timer2":[
|
||||||
|
writeFile(SD, "/week.txt", timerweek.c_str());//записываем в этот файл значения недельного таймера
|
||||||
|
// String timerweek={"id":"week","timer1_week":"0111100","timer2_week":"1000011","timer3_week":"0101010"};
|
||||||
|
writeFile(SD, "/tdout.txt", timerout.c_str());//записываем в этот файл значения выходов таймера timerout
|
||||||
|
//timerout= {"id":"tout","t1":"100","t2":"010","t3":"001"}
|
||||||
|
writeFile(SD, "/akva.txt", jsonStringakva.c_str());//записываем в этот файл значения температуры аквариума
|
||||||
|
// Serial.println ("sdsave OK");
|
||||||
|
} |
||||||
@ -0,0 +1,308 @@ |
|||||||
|
void Sdreaddata()//чтение данных после откл питания или сброса
|
||||||
|
{ Serial.println ("read SD data"); |
||||||
|
strdat=""; |
||||||
|
|
||||||
|
myFile = SD.open("/thkom1.txt", FILE_READ); |
||||||
|
while(myFile.available()) { |
||||||
|
|
||||||
|
strdat+=char(myFile.read()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
myFile.close(); |
||||||
|
jsonString2=strdat; |
||||||
|
Serial.println (jsonString2); |
||||||
|
// events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||||
|
JSONVar myObject = JSON.parse(strdat); |
||||||
|
//{"tkom1":"","hkom1":"","batkom1":"","timekom1":"","tkom2":"25.1","hkom2":"50.1","batkom2":"4.0","timekom2":"22:00","tkor":"23.6","hkor":"45.7","batkor":"3.71","timekor":"21:55","tbal":"11.1","hbal":"56.3","batbal":"3.45","timebal":"21:47","tul1":"5.3","hul1":"99.9","osv1":"0%","timeul1":"22:01"}
|
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("tkom1")) { |
||||||
|
tkom1=((const char*) myObject["tkom1"]);} |
||||||
|
if (myObject.hasOwnProperty("hkom1")) { |
||||||
|
hkom1=((const char*) myObject["hkom1"]);} |
||||||
|
if (myObject.hasOwnProperty("batkom1")) { |
||||||
|
batkom1=((const char*) myObject["batkom1"]);} |
||||||
|
if (myObject.hasOwnProperty("timekom1")) { |
||||||
|
timekom1=((const char*) myObject["timekom1"]);} |
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("tkom2")) { |
||||||
|
tkom2=((const char*) myObject["tkom2"]);} |
||||||
|
if (myObject.hasOwnProperty("hkom2")) { |
||||||
|
hkom2=((const char*) myObject["hkom2"]);} |
||||||
|
if (myObject.hasOwnProperty("batkom2")) { |
||||||
|
batkom2=((const char*) myObject["batkom2"]);} |
||||||
|
if (myObject.hasOwnProperty("timekom2")) { |
||||||
|
timekom2=((const char*) myObject["timekom2"]);} |
||||||
|
|
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("tkor")) { |
||||||
|
tkor=((const char*) myObject["tkor"]);} |
||||||
|
if (myObject.hasOwnProperty("hkor")) { |
||||||
|
hkor=((const char*) myObject["hkor"]);} |
||||||
|
if (myObject.hasOwnProperty("batkor")) { |
||||||
|
batkor=((const char*) myObject["batkor"]);} |
||||||
|
if (myObject.hasOwnProperty("timekor")) { |
||||||
|
timekor=((const char*) myObject["timekor"]);} |
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("tbal")) { |
||||||
|
tbal=((const char*) myObject["tbal"]);} |
||||||
|
if (myObject.hasOwnProperty("hbal")) { |
||||||
|
hbal=((const char*) myObject["hbal"]);} |
||||||
|
if (myObject.hasOwnProperty("batbal")) { |
||||||
|
batbal=((const char*) myObject["batbal"]);} |
||||||
|
if (myObject.hasOwnProperty("timebal")) { |
||||||
|
timebal=((const char*) myObject["timebal"]);} |
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("tul1")) { |
||||||
|
tul1=((const char*) myObject["tul1"]);} |
||||||
|
if (myObject.hasOwnProperty("hul1")) { |
||||||
|
hul1=((const char*) myObject["hul1"]);} |
||||||
|
if (myObject.hasOwnProperty("osv1")) { |
||||||
|
osv1=((const char*) myObject["osv1"]);} |
||||||
|
if (myObject.hasOwnProperty("timeul1")) { |
||||||
|
timeul1=((const char*) myObject["timeul1"]);} |
||||||
|
|
||||||
|
|
||||||
|
strdat=""; |
||||||
|
myFile = SD.open("/thku1.txt", FILE_READ); |
||||||
|
while(myFile.available()) { |
||||||
|
|
||||||
|
strdat+=char(myFile.read()); |
||||||
|
|
||||||
|
} |
||||||
|
myFile.close(); |
||||||
|
jsonString=strdat; |
||||||
|
Serial.println ("jsonString"); |
||||||
|
Serial.println (jsonString); |
||||||
|
|
||||||
|
// events.send(jsonString.c_str(), "new_readings", millis());//обновление веба текущая температура
|
||||||
|
myObject = JSON.parse(jsonString); |
||||||
|
if (myObject.hasOwnProperty("id")) { |
||||||
|
String id=((const char*) myObject["id"]);} |
||||||
|
if (myObject.hasOwnProperty("temperature")) { |
||||||
|
ts=((const char*) myObject["temperature"]);} |
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("humidity")) { |
||||||
|
hs=((const char*) myObject["humidity"]);} |
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("tim2")) { |
||||||
|
tim2=((const char*) myObject["tim2"]);} |
||||||
|
if (myObject.hasOwnProperty("tim3")) { |
||||||
|
tim3=((const char*) myObject["tim3"]);} |
||||||
|
if (myObject.hasOwnProperty("dataserv")) { |
||||||
|
dataserv=((const char*) myObject["dataserv"]);} |
||||||
|
if (myObject.hasOwnProperty("timev")) { |
||||||
|
timev=((int) myObject["timev"]);} |
||||||
|
if(ntp_on==0)//если NTP не пдключилось
|
||||||
|
{if (myObject.hasOwnProperty("EpochTime")) { |
||||||
|
EpochTime=((long) myObject["EpochTime"]);} |
||||||
|
} |
||||||
|
//{"id":2,"temperature":9.6733450317382812,"humidity":50.41815185546875,"tim2":"12:02",
|
||||||
|
// "dataserv":"12","timeserv":"15:30","munthserv":"январь",weekserv:"среда","timev":0,"EpochTime":565}
|
||||||
|
/* hour1=stamp.hour;//число
|
||||||
|
min1=stamp.minute;//число
|
||||||
|
|
||||||
|
dataserv=stamp.day;//число
|
||||||
|
munthserv=strm[stamp.month-1] ;// строка
|
||||||
|
weekserv=strweek[stamp.dayOfWeek];// строка
|
||||||
|
tweekday=stamp.dayOfWeek;//1-7
|
||||||
|
*/ |
||||||
|
|
||||||
|
strdat=""; |
||||||
|
myFile = SD.open("/timerd.txt", FILE_READ); |
||||||
|
while(myFile.available()) { |
||||||
|
|
||||||
|
strdat+=char(myFile.read()); |
||||||
|
|
||||||
|
} |
||||||
|
myFile.close(); |
||||||
|
timerdata=strdat; |
||||||
|
Serial.println ("timerdata"); |
||||||
|
Serial.println (timerdata); |
||||||
|
|
||||||
|
strdat=""; |
||||||
|
myFile = SD.open("/week.txt", FILE_READ); |
||||||
|
while(myFile.available()) { |
||||||
|
|
||||||
|
strdat+=char(myFile.read()); |
||||||
|
|
||||||
|
} |
||||||
|
myFile.close(); |
||||||
|
timerweek=strdat; |
||||||
|
Serial.println ("timerdata"); |
||||||
|
Serial.println (timerweek); |
||||||
|
|
||||||
|
strdat=""; |
||||||
|
myFile = SD.open("/tdout.txt", FILE_READ); |
||||||
|
while(myFile.available()) { |
||||||
|
|
||||||
|
strdat+=char(myFile.read()); |
||||||
|
|
||||||
|
} |
||||||
|
myFile.close(); |
||||||
|
timerout=strdat; |
||||||
|
Serial.println ("timerout"); |
||||||
|
Serial.println (timerout); |
||||||
|
|
||||||
|
strdat=""; |
||||||
|
myFile = SD.open("/akva.txt", FILE_READ); |
||||||
|
while(myFile.available()) { |
||||||
|
|
||||||
|
strdat+=char(myFile.read()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
myFile.close(); |
||||||
|
jsonStringakva=strdat; |
||||||
|
Serial.println (jsonStringakva); |
||||||
|
myObject = JSON.parse(strdat); |
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("id")) { |
||||||
|
String id=((const char*) myObject["id"]);} |
||||||
|
if (myObject.hasOwnProperty("tempakv1")) { |
||||||
|
takva1=((const char*) myObject["tempakv1"]);} |
||||||
|
if (myObject.hasOwnProperty("light1")) { |
||||||
|
light=((const char*) myObject["light1"]);} |
||||||
|
if (myObject.hasOwnProperty("timakv1")) { |
||||||
|
timeakva=((const char*) myObject["timakv1"]);} |
||||||
|
if (myObject.hasOwnProperty("fan1")) { |
||||||
|
fan1=((const char*) myObject["fan1"]);} |
||||||
|
if (myObject.hasOwnProperty("tempakv2")) { |
||||||
|
takva2=((const char*) myObject["tempakv2"]);} |
||||||
|
if (myObject.hasOwnProperty("fan2")) { |
||||||
|
fan2=((const char*) myObject["fan2"]);} |
||||||
|
if (myObject.hasOwnProperty("tempakv3")) { |
||||||
|
takva3=((const char*) myObject["tempakv3"]);} |
||||||
|
if (myObject.hasOwnProperty("fan3")) { |
||||||
|
fan3=((const char*) myObject["fan3"]);} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void Sdread() |
||||||
|
{//jsonStringout= "{"id":"out","out1":"101"}";// 0-выкл 1-вкл
|
||||||
|
//получаем состояние выходов изаписывам их в gpio
|
||||||
|
strdat=""; |
||||||
|
myFile = SD.open("/output.txt", FILE_READ); |
||||||
|
while(myFile.available()) { |
||||||
|
|
||||||
|
strdat+=char(myFile.read()); |
||||||
|
|
||||||
|
} |
||||||
|
myFile.close(); |
||||||
|
jsonStringout=strdat; |
||||||
|
// gpio[3]={0,0,0};//выходы состояние {gpio 4, gpio 26, gpio 27,timer}{1,1,1,1}
|
||||||
|
Serial.println (jsonStringout); |
||||||
|
JSONVar myObject = JSON.parse(jsonStringout);//парсинг JSON
|
||||||
|
String outGPIO; |
||||||
|
if (myObject.hasOwnProperty("out1")) { |
||||||
|
outGPIO=((const char*) myObject["out1"]);} |
||||||
|
Serial.println (outGPIO);
|
||||||
|
Serial.println (outGPIO[2]);
|
||||||
|
if(outGPIO[0]=='1') |
||||||
|
{ digitalWrite(4, HIGH); |
||||||
|
gpio[0]=1; |
||||||
|
} |
||||||
|
else |
||||||
|
{digitalWrite(4, LOW); |
||||||
|
gpio[0]=0; |
||||||
|
} |
||||||
|
if(outGPIO[1]=='1') |
||||||
|
{ digitalWrite(26, HIGH); |
||||||
|
gpio[1]=1; |
||||||
|
} |
||||||
|
else |
||||||
|
{digitalWrite(26, LOW); |
||||||
|
gpio[1]=0; |
||||||
|
} |
||||||
|
if(outGPIO[2]=='1') |
||||||
|
{ digitalWrite(27, HIGH); |
||||||
|
gpio[2]=1; |
||||||
|
} |
||||||
|
else |
||||||
|
{digitalWrite(27, LOW); |
||||||
|
gpio[2]=0; |
||||||
|
} |
||||||
|
if(outGPIO[3]=='1') |
||||||
|
{ //digitalWrite(27, HIGH);
|
||||||
|
gpio[3]=1; |
||||||
|
} |
||||||
|
else |
||||||
|
{//digitalWrite(27, LOW);
|
||||||
|
gpio[3]=0; |
||||||
|
} |
||||||
|
timerconvert(); |
||||||
|
} |
||||||
|
|
||||||
|
void readdata() |
||||||
|
{delay(0); |
||||||
|
//****************************************************
|
||||||
|
// формируем имя файла и путь к нему /TEMPUL/D-2022/FEBR/27/T1.txt
|
||||||
|
String name1="/TEMPUL"+ String(stryen[year1-2014])+String(strmen[month1-1])+String(strden[data1-1])+String(strdaten[nti]); |
||||||
|
//String name1="/TEMPUL1/D-2025/FEBR/27/T5.txt";
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
|
||||||
|
myFile = SD.open(Buf, FILE_READ);//открывам файл
|
||||||
|
while(myFile.available()) { |
||||||
|
Serial.write(myFile.read()); |
||||||
|
} |
||||||
|
Serial.println(" ");
|
||||||
|
// Узнаем размер файла:
|
||||||
|
Serial.print("File size: "); |
||||||
|
// "Размер файла: "
|
||||||
|
Serial.println(myFile.size()); |
||||||
|
myFile.close(); |
||||||
|
|
||||||
|
strdat=""; |
||||||
|
|
||||||
|
Serial.println("/TEMPUL/D-2022/FEBR/27/T.txt"); |
||||||
|
myFile = SD.open(Buf, FILE_READ); |
||||||
|
while(myFile.available()) { |
||||||
|
strdat+=char(myFile.read());//считываем текс файла в строковую переменную
|
||||||
|
} |
||||||
|
myFile.close(); |
||||||
|
delay(0); |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
delay(0); |
||||||
|
|
||||||
|
board1["tdata"] = strdat;
|
||||||
|
board1["dataserv"] = dataserv; |
||||||
|
board1["timeserv"] = timeserv; |
||||||
|
jsonString1 = JSON.stringify(board1); |
||||||
|
// Serial.println (jsonString1);
|
||||||
|
// Serial.println ("strdat=");
|
||||||
|
//Serial.println (strdat);
|
||||||
|
delay(0); |
||||||
|
// events.send(tempdat.c_str(), "readings", millis());//обновление веба
|
||||||
|
// events.send(strdat.c_str(), "readings", millis());//обновление веба
|
||||||
|
} |
||||||
|
|
||||||
|
void readakva() |
||||||
|
{delay(0); |
||||||
|
//****************************************************
|
||||||
|
// формируем имя файла и путь к нему /AKVA/D-2022/FEBR/27/T10.txt
|
||||||
|
nti=9; |
||||||
|
String name1="/AKVA"+ String(stryen[year1-2014])+String(strmen[month1-1])+String(strden[data1-1])+String(strdaten[nti]); |
||||||
|
//String name1="/AKVA/D-2025/FEBR/27/T10.txt";
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
strdat=""; |
||||||
|
|
||||||
|
myFile = SD.open(Buf, FILE_READ); |
||||||
|
while(myFile.available()) { |
||||||
|
strdat+=char(myFile.read());//считываем текс файла в строковую переменную
|
||||||
|
} |
||||||
|
myFile.close(); |
||||||
|
delay(0); |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
delay(0); |
||||||
|
// Serial.println (strdat);
|
||||||
|
delay(0); |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
void timedate()//при запуске 1 раз
|
||||||
|
{//rtc.adjust(DateTime(2024,3, 4, 14,25,0));
|
||||||
|
if (! rtc.lostPower()) { |
||||||
|
// Serial.println("RTC is NOT running!");
|
||||||
|
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
|
||||||
|
// ИЛИ ТАК
|
||||||
|
//rtc.adjust(DateTime(2020, 1, 1, 15, 51, 0));
|
||||||
|
// rtc.adjust(DateTime(2024,3, 4, 14,44,0));
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DateTime now = rtc.now(); |
||||||
|
timeserv=formatTimeDigits(now.hour(),now.minute());
|
||||||
|
Serial.print("TIME_"); |
||||||
|
Serial.println(timeserv); |
||||||
|
dataserv=now.day(); |
||||||
|
data1=now.day(); |
||||||
|
month1=now.month(); |
||||||
|
munthserv=strm[now.month()-1] ; |
||||||
|
weekserv=strweek[now.dayOfTheWeek()]; |
||||||
|
hour1=now.hour(); |
||||||
|
min1=now.minute(); |
||||||
|
tweekday=now.dayOfTheWeek(); |
||||||
|
year1=now.year(); |
||||||
|
if(tweekday==0) tweekday=7; |
||||||
|
Serial.println(tweekday); |
||||||
|
Serial.println(dataserv); |
||||||
|
Serial.println(month1); |
||||||
|
Serial.println(year1); |
||||||
|
uint32_t timeStampVal = now.unixtime(); |
||||||
|
EpochTime=timeStampVal; |
||||||
|
Serial.println(EpochTime); |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,793 @@ |
|||||||
|
//08:3A:F2:A7:80:6C //esp32 желтые ноги
|
||||||
|
//08:3A:F2:66:31:30 //esp32 lilygo2,3
|
||||||
|
//08:3A:F2: //esp32 lilygo4,7
|
||||||
|
//EC:94:CB:6C:EC:A4 esp32 самоделка
|
||||||
|
//SD Карта подкл к любым ногам SPI железный H_SPIClass sdSPI(HSPI); или V_ SPIClass sdSPI(VSPI);
|
||||||
|
#define SD_MISO 23 |
||||||
|
#define SD_MOSI 13 |
||||||
|
#define SD_SCLK 14 |
||||||
|
//#define SD_CS 15
|
||||||
|
#define SD_CS 2 |
||||||
|
|
||||||
|
#include <esp_task_wdt.h> |
||||||
|
#define WDT_TIMEOUT 30 |
||||||
|
#include <WiFi.h> |
||||||
|
#include <AsyncTCP.h> |
||||||
|
#include "ESPAsyncWebSrv.h" |
||||||
|
#include <esp_now.h> |
||||||
|
#include "SPI.h" |
||||||
|
#include <SPIFFS.h> |
||||||
|
#include <esp_task_wdt.h> |
||||||
|
#include "NTPClient.h" |
||||||
|
#include "WiFiUdp.h" |
||||||
|
#include <Arduino_JSON.h> |
||||||
|
|
||||||
|
#include "FS.h" |
||||||
|
#include "SD.h" |
||||||
|
#include <UnixTime.h> |
||||||
|
UnixTime stamp(0); // указать GMT (3 для Москвы)
|
||||||
|
// Define deep sleep options
|
||||||
|
String dataMessage; |
||||||
|
// Define NTP Client to get time
|
||||||
|
WiFiUDP ntpUDP; |
||||||
|
NTPClient timeClient(ntpUDP); |
||||||
|
#include "RTClib.h" |
||||||
|
RTC_DS3231 rtc; |
||||||
|
#include "nRF24L01.h" |
||||||
|
#include "RF24.h" |
||||||
|
#include <RCSwitch.h> |
||||||
|
|
||||||
|
RCSwitch mySwitch = RCSwitch(); |
||||||
|
|
||||||
|
char msg[16]; |
||||||
|
//RF24 radio(12, 14, 26, 25, 27);
|
||||||
|
//RF24 radio(27, 26, 32, 33, 25);//server (ce,csn,sck,miso,mosi)esp32
|
||||||
|
//gpio19
|
||||||
|
RF24 radio(17, 16, 32, 33, 25);//server (ce,csn,sck,miso,mosi)esp32
|
||||||
|
|
||||||
|
const uint64_t pip = 0x02E423E4E2LL; |
||||||
|
SPIClass sdSPI(HSPI); |
||||||
|
File myFile; |
||||||
|
|
||||||
|
const char* ssid = "VOVA-47"; |
||||||
|
const char* password = "vovak26102003"; |
||||||
|
|
||||||
|
const int LED_PIN = 2; |
||||||
|
|
||||||
|
AsyncWebServer server(80); |
||||||
|
AsyncWebSocket webSocket("/ws"); |
||||||
|
|
||||||
|
int ledState = LOW; |
||||||
|
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
// Задайте свой статический IP-адрес
|
||||||
|
IPAddress local_IP(192, 168, 1, 115); |
||||||
|
// Укажите IP-адрес шлюза
|
||||||
|
IPAddress gateway(192, 168, 1, 1); |
||||||
|
|
||||||
|
IPAddress subnet(255, 255, 0, 0); |
||||||
|
IPAddress primaryDNS(8, 8, 8, 8); // опционально
|
||||||
|
IPAddress secondaryDNS(8, 8, 4, 4); // опционально
|
||||||
|
|
||||||
|
|
||||||
|
//****************************************************************************
|
||||||
|
// ntp
|
||||||
|
int countTimeWas; |
||||||
|
int countVal; |
||||||
|
int countVal1; |
||||||
|
String formattedDate; |
||||||
|
String formattedTime; |
||||||
|
String dayStamp; |
||||||
|
String timeStamp; |
||||||
|
String timerweek="{\"id\":\"week\",\"timer1_week\":\"0111100\",\"timer2_week\":\"1000011\",\"timer3_week\":\"0101010\"}"; |
||||||
|
bool tweek; // флаг обновления строки timerweek для записи на SD
|
||||||
|
String timerdata="{\"timer1\":[\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\"],\"timer2\":[\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\"],\"timer3\":[\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\"]}";//данные с таймеров
|
||||||
|
bool tdat=0;// флаг обновления строки timerdat для записи на SD
|
||||||
|
String timerout="{\"id\":\"tout\",\"t1\":\"011\",\"t2\":\"100\",\"t3\":\"010\"}";//подключние таймеров т1 т2 и т3 к выходам gpio4,gpio26,gpio27
|
||||||
|
bool tout=0;// флаг обновления строки timerout для записи на SD
|
||||||
|
bool ntp_on=0; |
||||||
|
//**************************JSON***************************************************
|
||||||
|
JSONVar board; |
||||||
|
JSONVar board1; |
||||||
|
JSONVar board2; |
||||||
|
JSONVar board3; |
||||||
|
JSONVar board4; |
||||||
|
JSONVar board5; |
||||||
|
|
||||||
|
//String jsonString="{\"id\":\"0\",\"temperature\":\"9.67\",\"humidity\":50.41815185546875,\"tim2\":\"10:10\",\"tim3\":\"11:11\",\"dataserv\":\"12\",\"timeserv\":\"15:30\",\"munthserv\":\"январь\",\"weekserv\":\"среда\"}";
|
||||||
|
String jsonString="{\"id\":\"0\",\"temperature\":9.6757548,\"humidity\":50.41815185546875,\"tim2\":\"10:10\",\"tim3\":\"11:11\",\"dataserv\":\"12\",\"munthserv\":\"январь\",\"weekserv\":\"среда\"}"; |
||||||
|
String jsonString1; |
||||||
|
String jsonString2="{\"id\":\"2\",\"tkom1\":\"20.0\",\"hkom1\":\"30.0\",\"batkom1\":\"4.10\",\"timekom1\":\"07:08\",\"tkom2\":\"20.5\",\"hkom2\":\"80.5\",\"batkom2\":\"3.95\",\"timekom2\":\"15:15\",\"tkor\":\"23.5\",\"hkor\":\"90.5\",\"batkor\":\"3.75\",\"timekor\":\"13:13\",\"tbal\":\"13.5\",\"hbal\":\"80.5\",\"batbal\":\"3.45\",\"timebal\":\"11:11\",\"tul1\":\"7.3\",\"hul1\":\"75.5\",\"osv1\":\"50\",\"timeul1\":\"12:12\"}"; |
||||||
|
String jsonStringout= "{\"id\":\"out\",\"out1\":\"1011\"}";// 0-выкл 1-вкл вых1 вых2 вых3 таймер(работаем по кнопкам или по таймеру
|
||||||
|
String jsonString77="{\"Time\":\"0:17\",\"temperatura\":\"19.73 C\",\"humidity\":\"73.59 %\"}\n{\"Time\":\"0:37\",\"temperatura\":\"19.65 C\",\"humidity\":\"74.34 %\"}\n{\"Time\":\"0:57\",\"temperatura\":\"19.57 C\",\"humidity\":\"74.99 %\"}"; |
||||||
|
String jsonStringakva="{\"id\":\"akva\",\"tempakv1\":\"20,1\",\"light1\":\"80 %\",\"timakv1\":\"12.31\",\"fan1\":\"OFF\",\"tempakv2\":\"20,2\",\"light2\":\"82 %\",\"timakv2\":\"12.32\",\"fan2\":\"OFF\",\"tempakv3\":\"20,3\",\"light3\":\"83 %\",\"timakv3\":\"12.33\",\"fan3\":\"OFF\"}"; |
||||||
|
//String jsonString77="{\"id\":\"77\",\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}\n";
|
||||||
|
//String jsonString78="{\"id\":\"77\",\"data\":\'\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"\'}";
|
||||||
|
//{"timer1":["00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00"],"timer2":["00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00"],"timer3":["00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00"]}
|
||||||
|
//String jsonString7="{\"id\":\"week\",\"timer1_week\":\"0111100\",\"timer2_week\":\"1000011\",\"timer3_week\":\"0101010\"}";
|
||||||
|
//****************************************************************************
|
||||||
|
int idcon=0;// ID соединения
|
||||||
|
//*************************************************************************************************
|
||||||
|
char* strd[] = {"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"}; |
||||||
|
char* strm[] = {"январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь"}; |
||||||
|
char* strweek[] = {"воскресенье","понедельник","вторник","среда","четверг","пятница","суббота","воскресенье"}; |
||||||
|
int nt=0;//номер термометра
|
||||||
|
int nti=0;//номер термометра для сайта
|
||||||
|
int temperature1=10; |
||||||
|
String ts; |
||||||
|
String hs; |
||||||
|
String t1; |
||||||
|
String h1; |
||||||
|
String t10;//время работы сервера
|
||||||
|
String tim3;// время от нтп сервера при приходе данных с NOW
|
||||||
|
String tim2;//время получ от устройства NOW
|
||||||
|
String batz;//заря бат термометра ул запад
|
||||||
|
String munthserv;//месяц
|
||||||
|
String weekserv;//день недели
|
||||||
|
String timer1;//таймер1
|
||||||
|
String timer2;//таймер2
|
||||||
|
int timerbut1=0; |
||||||
|
int timerbut2=0; |
||||||
|
bool tbut1=0;//флаг таймера1
|
||||||
|
bool tbut2=0;//флаг таймера2
|
||||||
|
bool res = 0;//флаг разрешения сброса
|
||||||
|
int timebut=0;// подсчет времени по таймерам
|
||||||
|
|
||||||
|
String tkom1;//температура
|
||||||
|
String hkom1;//влажность
|
||||||
|
String batkom1; |
||||||
|
String timekom1;//время прихода данных комната1
|
||||||
|
|
||||||
|
String tkom2; |
||||||
|
String hkom2; |
||||||
|
String batkom2; |
||||||
|
String timekom2; |
||||||
|
|
||||||
|
String tkor; |
||||||
|
String hkor; |
||||||
|
String batkor; |
||||||
|
String timekor; |
||||||
|
|
||||||
|
String tbal; |
||||||
|
String hbal; |
||||||
|
String batbal; |
||||||
|
String timebal; |
||||||
|
|
||||||
|
String timeul1; |
||||||
|
String tul1; |
||||||
|
String hul1; |
||||||
|
String osv1; |
||||||
|
|
||||||
|
String takva1; |
||||||
|
String takva2; |
||||||
|
String takva3; |
||||||
|
String timeakva; |
||||||
|
String light; |
||||||
|
String fan1; |
||||||
|
String fan2; |
||||||
|
String fan3; |
||||||
|
bool fanak1; |
||||||
|
bool fanak2; |
||||||
|
bool fanak3; |
||||||
|
int lightakv=80; |
||||||
|
bool akva=0;//флаг прихода дааных с акваконрол
|
||||||
|
|
||||||
|
int ct1=0;//счетчик пропуска данные каждые 3 минуты записываем каждые 20 те 7 пропусков
|
||||||
|
int wreset=0;//счетчик времени сброса esp(1 раз в 8 часов)
|
||||||
|
String out1;//выход1 gpio4
|
||||||
|
String out2;//выход2 gpio26
|
||||||
|
String out3;//выход3 gpio27
|
||||||
|
int tweekday=1;//день недели для таймеров
|
||||||
|
int time17=0; |
||||||
|
int hour1=10; |
||||||
|
int min1=7; |
||||||
|
int sek=0; |
||||||
|
int year1; |
||||||
|
int month1; |
||||||
|
int data1; |
||||||
|
int hk=0;//часы для исключения повтора записи данных
|
||||||
|
int mk=0;//минуты
|
||||||
|
int hb=0;//часы для исключения повтора записи данных
|
||||||
|
int mb=0;//минуты
|
||||||
|
int hkr=0;//часы для исключения повтора записи данных
|
||||||
|
int mkr=0;//минуты
|
||||||
|
int timev=0;//для пропуска 20 минут
|
||||||
|
//String timev1;//для записи на флэш при сбросе
|
||||||
|
bool outdata=0;//флаг обновления состояния выходов
|
||||||
|
boolean fdata=0;//флаг обновления данных темп и влажн
|
||||||
|
int fobnov=1;//флаг обновления данных темп и влажн
|
||||||
|
String timeserv;//время сервера
|
||||||
|
String dataserv;//дата
|
||||||
|
int v=0; |
||||||
|
int v1=0; |
||||||
|
long EpochTime=0; |
||||||
|
int ind=0; |
||||||
|
|
||||||
|
String strdat;//накопленые в памяти данные по темп и влажность передаваемые клиенту
|
||||||
|
String tempdat;//
|
||||||
|
int ftdata=0;//флаг запроса данных темп и влажн
|
||||||
|
int fping=0;// флаг для задержки отр данных на страницу inform
|
||||||
|
int wright=0; |
||||||
|
bool flread=0; |
||||||
|
char* strden[] = {"/01","/02","/03","/04","/05","/06","/07","/08","/09","/10","/11","/12","/13","/14","/15","/16","/17","/18","/19","/20","/21","/22","/23","/24","/25","/26","/27","/28","/29","/30","/31"};
|
||||||
|
char* strmen[] = {"/JAN","/FEBR","/MARCH","/APRIL","/MAY","/JUNE","/JULY","/AUG","/SEPT","/OCT","/NOV","/DEC"}; |
||||||
|
char* stryen[] = {"/2014","/2015","/2016","/2017","/D-2018","/D-2019","/D-2020","/D-2021","/D-2022","/D-2023","/D-2024","/D-2025","/D-2026","/D-2027","/D-2028","/D-2029","/D-2030","/D-2031","/D-2032","D-2033","/D-2034","/D-2035"}; |
||||||
|
char* strdaten[] = {"/T1.txt","/T2.txt","/T3.txt","/T4.txt","/T5.txt","/T6.txt","/T7.txt","/T8.txt","/T9.txt","/T10.txt"}; |
||||||
|
//************************************************************
|
||||||
|
//************************************************************
|
||||||
|
hw_timer_t * timer = NULL; |
||||||
|
volatile SemaphoreHandle_t timerSemaphore; |
||||||
|
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED; |
||||||
|
volatile uint32_t isrCounter = 0; |
||||||
|
volatile uint32_t lastIsrAt = 0; |
||||||
|
char *time_buf; |
||||||
|
//*****************************************************************************
|
||||||
|
|
||||||
|
// Structure example to receive data
|
||||||
|
// Must match the sender structure
|
||||||
|
typedef struct struct_message { |
||||||
|
int id; |
||||||
|
float temp; |
||||||
|
float hum; |
||||||
|
unsigned int readingId; |
||||||
|
unsigned int bat; |
||||||
|
} struct_message; |
||||||
|
int volt11; |
||||||
|
struct_message incomingReadings; |
||||||
|
//****************************************Timer Budilnik*****************************************************************************************************************************************************************************************
|
||||||
|
int minuta;//счетчик минут для проверки времени сработки будильников
|
||||||
|
uint16_t BTimer1 [11] = {2, 390, 450, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440}; // массивы всех таймеров для суточных каналов (1 - 4) 0-й элемент отвечает за состояние канала (1 - вкл/ 0 - выкл/ 2 - авто))
|
||||||
|
uint16_t BTimer2 [11] = {2, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440}; // остальное время в минутах (нечетные элементы - таймеры включения, четные - выключения)
|
||||||
|
uint16_t BTimer3 [11] = {2, 380, 450, 1080, 1410, 1440, 1440, 1440, 1440, 1440, 1440}; // время 1440 отображается на экране как "--:--", это неактивное значение, для основной логики пустая ячейка означает что таймер не задан
|
||||||
|
uint16_t weekTimer1 [7]={0,0,0,0,0,0,0};//недельные установки t1
|
||||||
|
uint16_t weekTimer2 [7]={0,0,0,0,0,0,0};//недельные установки t2
|
||||||
|
uint16_t weekTimer3 [7]={0,0,0,0,0,0,0};//недельные установки t3
|
||||||
|
uint16_t gpioTimer1 [3]={1,0,0};//выходы подкл к таймеру {gpio 4, gpio 26, gpio 27} {1,0,0} подкл 4
|
||||||
|
uint16_t gpioTimer2 [3]={1,0,0};//выходы подкл к таймеру {gpio 4, gpio 26, gpio 27} {0,0,0} откл все
|
||||||
|
uint16_t gpioTimer3 [3]={0,0,0};//выходы подкл к таймеру {gpio 4, gpio 26, gpio 27}{1,1,1} подкл все
|
||||||
|
uint16_t gpio[4]={0,0,0,1};//выходы состояние {gpio 4, gpio 26, gpio 27, timer}{1,1,1,1} timer определяет работу выходов по таймеру=1 или кнопки =0
|
||||||
|
bool state1 = 0; //_________________Переменные состояния каналов(вкл/выкл)
|
||||||
|
bool state2 = 0; |
||||||
|
bool state3 = 0; |
||||||
|
uint16_t current_time = 0 ; //_______Текущее время в минутах (для основных расчетов)
|
||||||
|
//*********************************************************************************************
|
||||||
|
const char* PARAM_INPUT_1 = "output";//Gpio
|
||||||
|
const char* PARAM_INPUT_2 = "state"; //состояние выхода
|
||||||
|
const char* PARAM_INPUT = "value"; |
||||||
|
|
||||||
|
const int output = 4; |
||||||
|
const int output1 = 26; |
||||||
|
const int output2 = 27; |
||||||
|
String ledout; |
||||||
|
void IRAM_ATTR onTimer(); |
||||||
|
//***********************************************************
|
||||||
|
void OnDataRecv(const uint8_t * mac_addr, const uint8_t *incomingData, int len) {
|
||||||
|
// Copies the sender mac address to a string
|
||||||
|
char macStr[18]; |
||||||
|
Serial.print("Packet received from: "); |
||||||
|
snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x", |
||||||
|
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); |
||||||
|
Serial.println(macStr); |
||||||
|
memcpy(&incomingReadings, incomingData, sizeof(incomingReadings)); |
||||||
|
|
||||||
|
Serial.printf("Board ID %u: %u bytes\n", incomingReadings.id, len); |
||||||
|
Serial.printf("t value: %4.2f \n", incomingReadings.temp); |
||||||
|
t1 = incomingReadings.temp; |
||||||
|
Serial.printf("h value: %4.2f \n", incomingReadings.hum); |
||||||
|
h1=incomingReadings.hum; |
||||||
|
Serial.printf("readingID value: %d \n", incomingReadings.readingId); |
||||||
|
int tim11 =incomingReadings.readingId; |
||||||
|
hour1=tim11/100; |
||||||
|
min1=tim11%100; |
||||||
|
volt11 =incomingReadings.bat;//заряд батареи
|
||||||
|
Serial.printf("bat value: %d \n", incomingReadings.bat); |
||||||
|
|
||||||
|
|
||||||
|
batz=volt11/100; |
||||||
|
batz+=","; |
||||||
|
batz+=volt11%100; |
||||||
|
|
||||||
|
Serial.println(batz); |
||||||
|
//tim3=timeserv;
|
||||||
|
//получаем из int incomingReadings= 1530 строку 15:30
|
||||||
|
|
||||||
|
tim3=incomingReadings.readingId/100; |
||||||
|
tim3+=":"; |
||||||
|
if(incomingReadings.readingId%100<10)tim3+="0"; |
||||||
|
|
||||||
|
tim3+=incomingReadings.readingId%100; |
||||||
|
//JSONстрока формирование
|
||||||
|
ntphome(); |
||||||
|
flread=1; |
||||||
|
JSstringU();
|
||||||
|
savedata(); |
||||||
|
flread=1; |
||||||
|
}//OnDataRecv
|
||||||
|
|
||||||
|
//****************************************************************************
|
||||||
|
//****************************************************************************************************************************************************************************************************************************************************
|
||||||
|
//подпрогр Действия вебсекета
|
||||||
|
void handleWebSocketEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { |
||||||
|
switch (type) { |
||||||
|
case WS_EVT_DISCONNECT://[3] Disconnected! откл соединения
|
||||||
|
Serial.printf("[%u] Disconnected!\n", client->id()); |
||||||
|
idcon--; |
||||||
|
break; |
||||||
|
|
||||||
|
case WS_EVT_CONNECT://[4] Connected from 192.168.1.108 подключение
|
||||||
|
{ |
||||||
|
IPAddress ip = client->remoteIP();//адрес подкл объкта
|
||||||
|
Serial.printf("[%u] Connected from %d.%d.%d.%d\n", client->id(), ip[0], ip[1], ip[2], ip[3]); |
||||||
|
idcon++; |
||||||
|
client->text(jsonString);//отправка дата месяц неделя
|
||||||
|
client->text(jsonString2);//отправка темп и влажности в комнатах
|
||||||
|
String countUpdate2 = "{\"label3\":\"count2\",\"value\":\"" + String(timeserv) + "\"}";//отправка строковой переменной
|
||||||
|
String countUpdate = "{\"label3\":\"count\",\"value\":\"" + String(t10) + "\"}";//отправка строковой переменной время раб сервера
|
||||||
|
client->text(countUpdate2);//отправка NTP времени timeserv
|
||||||
|
client->text(countUpdate);//отправка время раб сервера t10
|
||||||
|
if (ftdata==1)//пришел запрос табл данных /inform1 запад
|
||||||
|
{ftdata=0; |
||||||
|
nti=1; |
||||||
|
readdata(); |
||||||
|
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу на стр inform
|
||||||
|
} |
||||||
|
if (ftdata==2)//пришел запрос табл данных /inform К1
|
||||||
|
{ftdata=0; |
||||||
|
nti=4; |
||||||
|
readdata(); |
||||||
|
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу на стр inform
|
||||||
|
} |
||||||
|
if (ftdata==3)//пришел запрос табл данных /inform k2
|
||||||
|
{ftdata=0; |
||||||
|
nti=3; |
||||||
|
readdata(); |
||||||
|
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу на стр inform
|
||||||
|
}
|
||||||
|
if (ftdata==5)//пришел запрос табл данных /inform балкон
|
||||||
|
{ftdata=0; |
||||||
|
nti=2; |
||||||
|
readdata(); |
||||||
|
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу на стр inform
|
||||||
|
} |
||||||
|
if (ftdata==4)//пришел запрос табл данных /inform корридор
|
||||||
|
{ftdata=0; |
||||||
|
nti=5; |
||||||
|
readdata(); |
||||||
|
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу на стр inform
|
||||||
|
} |
||||||
|
if (ftdata==10)//пришел запрос табл данных /inform восток
|
||||||
|
{ftdata=0; |
||||||
|
nti=0; |
||||||
|
readdata(); |
||||||
|
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу на стр inform
|
||||||
|
} |
||||||
|
if (ftdata==6)//пришел запрос табл данных кухня
|
||||||
|
{ftdata=0; |
||||||
|
// nti=6;
|
||||||
|
// readdata();
|
||||||
|
// client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу на стр
|
||||||
|
} |
||||||
|
if (ftdata==12)//пришел запрос /setting передача значений таймера
|
||||||
|
{ftdata=0; |
||||||
|
client->text(timerweek);//таймер дни недели
|
||||||
|
Serial.println(timerweek); |
||||||
|
|
||||||
|
client->text(timerdata);//timerout
|
||||||
|
Serial.println(timerdata); |
||||||
|
|
||||||
|
client->text(timerout);//timerout
|
||||||
|
Serial.println(timerout); |
||||||
|
} |
||||||
|
|
||||||
|
if (ftdata==8)//пришел запрос управления upravlenie.html
|
||||||
|
{ftdata=0; |
||||||
|
JSstringOut(); |
||||||
|
client->text(jsonStringout);// {"id":"out","out1":"1011"} отправляем состояние выходов
|
||||||
|
//Serial.println(jsonStringout);
|
||||||
|
} |
||||||
|
if (ftdata==7)//пришел запрос управления akva.html
|
||||||
|
{ftdata=0; |
||||||
|
JSstringAkva(); |
||||||
|
client->text(jsonStringakva);//jsonStringakva="{\"id\":\"akva\",\"tempakv1\":\"20,1\",\"light1\":\"80 %\",\"timakv1\":\"12.31\",\"fan1\":\"OFF\",\"tempakv2\":\"20,2\",\"light2\":\"82 %\",\"timakv2\":\"12.32\",\"fan2\":\"OFF\",\"tempakv3\":\"20,3\",\"light3\":\"83 %\",\"timakv3\":\"12.33\",\"fan3\":\"OFF\"}";
|
||||||
|
Serial.println(jsonStringakva); |
||||||
|
} |
||||||
|
|
||||||
|
if (ftdata==15)//пришел запрос управления akva1.html
|
||||||
|
{ftdata=0; |
||||||
|
JSstringAkva(); |
||||||
|
client->text(jsonStringakva);//jsonStringakva="{\"id\":\"akva\",\"tempakv1\":\"20,1\",\"light1\":\"80 %\",\"timakv1\":\"12.31\",\"fan1\":\"OFF\",\"tempakv2\":\"20,2\",\"light2\":\"82 %\",\"timakv2\":\"12.32\",\"fan2\":\"OFF\",\"tempakv3\":\"20,3\",\"light3\":\"83 %\",\"timakv3\":\"12.33\",\"fan3\":\"OFF\"}";
|
||||||
|
// Serial.println(jsonStringakva);
|
||||||
|
readakva(); |
||||||
|
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу
|
||||||
|
} |
||||||
|
if (ftdata==16)//пришел запрос управления akva1.html
|
||||||
|
{ftdata=0; |
||||||
|
JSstringAkva(); |
||||||
|
client->text(jsonStringakva);//jsonStringakva="{\"id\":\"akva\",\"tempakv1\":\"20,1\",\"light1\":\"80 %\",\"timakv1\":\"12.31\",\"fan1\":\"OFF\",\"tempakv2\":\"20,2\",\"light2\":\"82 %\",\"timakv2\":\"12.32\",\"fan2\":\"OFF\",\"tempakv3\":\"20,3\",\"light3\":\"83 %\",\"timakv3\":\"12.33\",\"fan3\":\"OFF\"}";
|
||||||
|
// Serial.println(jsonStringakva);
|
||||||
|
readakva(); |
||||||
|
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу
|
||||||
|
} |
||||||
|
if (ftdata==17)//пришел запрос управления akva1.html
|
||||||
|
{ftdata=0; |
||||||
|
JSstringAkva(); |
||||||
|
client->text(jsonStringakva);//jsonStringakva="{\"id\":\"akva\",\"tempakv1\":\"20,1\",\"light1\":\"80 %\",\"timakv1\":\"12.31\",\"fan1\":\"OFF\",\"tempakv2\":\"20,2\",\"light2\":\"82 %\",\"timakv2\":\"12.32\",\"fan2\":\"OFF\",\"tempakv3\":\"20,3\",\"light3\":\"83 %\",\"timakv3\":\"12.33\",\"fan3\":\"OFF\"}";
|
||||||
|
//Serial.println(jsonStringakva);
|
||||||
|
readakva(); |
||||||
|
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу
|
||||||
|
} |
||||||
|
if (ftdata==18)//пришел запрос управления akva1.html
|
||||||
|
{ftdata=0; |
||||||
|
// JSstringAkva();
|
||||||
|
// client->text(jsonStringakva);//jsonStringakva="{\"id\":\"akva\",\"tempakv1\":\"20,1\",\"light1\":\"80 %\",\"timakv1\":\"12.31\",\"fan1\":\"OFF\",\"tempakv2\":\"20,2\",\"light2\":\"82 %\",\"timakv2\":\"12.32\",\"fan2\":\"OFF\",\"tempakv3\":\"20,3\",\"light3\":\"83 %\",\"timakv3\":\"12.33\",\"fan3\":\"OFF\"}";
|
||||||
|
//Serial.println(jsonStringakva);
|
||||||
|
readakva(); |
||||||
|
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
break; |
||||||
|
|
||||||
|
case WS_EVT_DATA: |
||||||
|
{ |
||||||
|
AwsFrameInfo *info = (AwsFrameInfo*)arg; |
||||||
|
if (info->final && info->index == 0 && info->len == len && info->opcode == WS_TEXT) { |
||||||
|
data[len] = '\0'; |
||||||
|
String payload = String((char*)data); |
||||||
|
|
||||||
|
Serial.printf("[%u] Received: %s\n", client->id(), payload.c_str()); |
||||||
|
|
||||||
|
if (payload == "toggle") {//если пришло toggle
|
||||||
|
|
||||||
|
}else{ //{"id":"week","timer1_week":"0111100","timer2_week":"1000011","timer3_week":"0101010"}
|
||||||
|
String js = payload.substring(1,11);//"id":"week" вырезаем нужные данные {"ido":"4","out":1}
|
||||||
|
// Serial.println(js);
|
||||||
|
if((js[1] = 'i')&&(js[6]=='w')) |
||||||
|
{timerweek=payload; |
||||||
|
tweek=1; |
||||||
|
} |
||||||
|
if((js[1] = 'i')&&(js[6]=='t'))// "id":"tout","t1":"100","t2":"010","t3":"001"
|
||||||
|
{timerout=payload; |
||||||
|
Serial.println(timerout); |
||||||
|
tweek=1; |
||||||
|
} |
||||||
|
if((js[1] = 't')&&(js[6]=='1'))//{"timer1":["08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00"],"timer2":["09:30","10:30","11:30","12:30","13:30","14:30","15:30","16:30","17:30","18:30"],"timer3":["10:15","11:15","12:15","13:15","14:15","15:15","16:15","17:15","18:15","19:15"]}
|
||||||
|
{timerdata=payload; |
||||||
|
//Serial.println(timerdata);
|
||||||
|
tdat=1;//флаг разрешения парсинга строки и ее записи на SD
|
||||||
|
} |
||||||
|
// Serial.println(js);
|
||||||
|
if((js[1] = 'i')&&(js[3]=='o'))//{"ido":"4","out":"1"} переключение выхода
|
||||||
|
{ledout=payload; |
||||||
|
//Serial.println(ledout);
|
||||||
|
outconvert();// получен данные преобразуем в массив gpio[4]={0,0,0,1}
|
||||||
|
JSstringOut();//преобразуем состояние выходов gpio[4]={0,0,0,1} в JSON {"id":"out","out1":"1011"}
|
||||||
|
webSocket.textAll(jsonStringout);// выводим всем клиентам w/s
|
||||||
|
btime();
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void setup() { |
||||||
|
pinMode(2, OUTPUT); |
||||||
|
pinMode(4, OUTPUT); |
||||||
|
digitalWrite(4, LOW); |
||||||
|
pinMode(26, OUTPUT); |
||||||
|
digitalWrite(26, LOW); |
||||||
|
pinMode(27, OUTPUT); |
||||||
|
digitalWrite(27, LOW); |
||||||
|
pinMode(5, OUTPUT); |
||||||
|
digitalWrite(5, LOW); |
||||||
|
pinMode(19, OUTPUT); |
||||||
|
digitalWrite(19, HIGH); |
||||||
|
delay(500); |
||||||
|
digitalWrite(19, LOW); |
||||||
|
|
||||||
|
Serial.begin(115200); |
||||||
|
//pinMode(LED_PIN, OUTPUT);
|
||||||
|
rtc.begin();
|
||||||
|
|
||||||
|
// digitalWrite(2, LOW);
|
||||||
|
digitalWrite(2, HIGH); |
||||||
|
Serial.println(WiFi.macAddress()); |
||||||
|
|
||||||
|
sdSPI.begin(SD_SCLK, SD_MISO, SD_MOSI, SD_CS); |
||||||
|
if (!SD.begin(SD_CS, sdSPI)) |
||||||
|
{ |
||||||
|
// if(!SD.begin()){
|
||||||
|
Serial.println("Mounting card mount failed"); |
||||||
|
// return;
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t cardType = SD.cardType(); |
||||||
|
if(cardType == CARD_NONE){ |
||||||
|
Serial.println("No SD card attached"); |
||||||
|
//return;
|
||||||
|
} |
||||||
|
uint64_t cardSize = SD.cardSize() / (1024 * 1024); |
||||||
|
Serial.printf("SD Card Size: %lluMB\n", cardSize); |
||||||
|
|
||||||
|
|
||||||
|
if(!SPIFFS.begin()){ |
||||||
|
Serial.println("An Error has occurred while mounting SPIFFS"); |
||||||
|
//return;
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
Nrfsetup();
|
||||||
|
//settimer();//таймер отсчета времени настр на 5 сек
|
||||||
|
WiFisetup(); |
||||||
|
timeClient.begin(); |
||||||
|
|
||||||
|
timeClient.setTimeOffset(10800);
|
||||||
|
|
||||||
|
|
||||||
|
// ntp();//NTP init
|
||||||
|
/*current_time = hour1 * 60 + min1;
|
||||||
|
for (int i = 0; i <= 1439; i++) { |
||||||
|
if (current_time > 1439) current_time = 0; |
||||||
|
state1 = main_log(BTimer1, state1); |
||||||
|
state2 = main_log(BTimer2, state2); |
||||||
|
state3 = main_log(BTimer3, state3); |
||||||
|
// state4 = main_log(Timer4, state4);
|
||||||
|
current_time++; |
||||||
|
} |
||||||
|
btime(); |
||||||
|
*/ |
||||||
|
timedate(); |
||||||
|
Sdreaddata(); |
||||||
|
Sdread();
|
||||||
|
mySwitch.enableTransmit(22); |
||||||
|
//mySwitch.send("000000000001010100010011");
|
||||||
|
//mySwitch.send("000000000001010100010001");
|
||||||
|
esp_now_register_recv_cb(OnDataRecv); |
||||||
|
|
||||||
|
|
||||||
|
//*******************server******************************************************************
|
||||||
|
// server.on("/", HTTP_GET, handleRoot);
|
||||||
|
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
request->send(SPIFFS, "/index.html"); |
||||||
|
}); |
||||||
|
server.on("/index.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
request->send(SPIFFS, "/index.html"); |
||||||
|
}); |
||||||
|
// Route to load style.css file
|
||||||
|
server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
request->send(SPIFFS, "/style.css", "text/css"); |
||||||
|
}); |
||||||
|
server.on("/fon.jpg", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
request->send(SPIFFS, "/fon.jpg"); |
||||||
|
}); |
||||||
|
//*****************************************************************************************************
|
||||||
|
server.on("/upravlenie.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
fobnov=1; |
||||||
|
ftdata=8; |
||||||
|
request->send(SPIFFS, "/upravlenie.html", String(), false, processor); |
||||||
|
}); |
||||||
|
|
||||||
|
//****************************************************************************************************************
|
||||||
|
server.on("/setting.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=12; |
||||||
|
request->send(SPIFFS, "/setting.html"); |
||||||
|
}); |
||||||
|
server.on("/inform.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=10; |
||||||
|
request->send(SPIFFS, "/inform.html"); |
||||||
|
}); |
||||||
|
server.on("/informtabl.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=10; |
||||||
|
request->send(SPIFFS, "/informtabl.html"); |
||||||
|
}); |
||||||
|
|
||||||
|
server.on("/inform1.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=1; |
||||||
|
request->send(SPIFFS, "/inform1.html"); |
||||||
|
}); |
||||||
|
server.on("/informtabl1.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=1; |
||||||
|
request->send(SPIFFS, "/informtabl1.html"); |
||||||
|
}); |
||||||
|
|
||||||
|
server.on("/inform2.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=2; |
||||||
|
request->send(SPIFFS, "/inform2.html"); |
||||||
|
}); |
||||||
|
server.on("/informtabl2.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=2; |
||||||
|
request->send(SPIFFS, "/informtabl2.html"); |
||||||
|
}); |
||||||
|
server.on("/inform3.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=3; |
||||||
|
request->send(SPIFFS, "/inform3.html"); |
||||||
|
}); |
||||||
|
server.on("/informtabl3.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=3; |
||||||
|
request->send(SPIFFS, "/informtabl3.html"); |
||||||
|
}); |
||||||
|
server.on("/inform4.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=4; |
||||||
|
request->send(SPIFFS, "/inform4.html"); |
||||||
|
}); |
||||||
|
server.on("/informtabl4.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=4; |
||||||
|
request->send(SPIFFS, "/informtabl4.html"); |
||||||
|
}); |
||||||
|
server.on("/inform5.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=5; |
||||||
|
request->send(SPIFFS, "/inform5.html"); |
||||||
|
}); |
||||||
|
server.on("/informtabl5.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=5; |
||||||
|
request->send(SPIFFS, "/informtabl5.html"); |
||||||
|
}); |
||||||
|
server.on("/inform6.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=6; |
||||||
|
request->send(SPIFFS, "/inform6.html"); |
||||||
|
}); |
||||||
|
server.on("/informtabl6.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=6; |
||||||
|
request->send(SPIFFS, "/informtabl6.html"); |
||||||
|
}); |
||||||
|
|
||||||
|
server.on("/akva1.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=15; |
||||||
|
request->send(SPIFFS, "/akva1.html"); |
||||||
|
}); |
||||||
|
|
||||||
|
server.on("/akva2.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=16; |
||||||
|
request->send(SPIFFS, "/akva2.html"); |
||||||
|
}); |
||||||
|
server.on("/akva3.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=17; |
||||||
|
request->send(SPIFFS, "/akva3.html"); |
||||||
|
}); |
||||||
|
server.on("/akvadat.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=18; |
||||||
|
request->send(SPIFFS, "/akvadat.html"); |
||||||
|
}); |
||||||
|
server.on("/akvagraf.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=18; |
||||||
|
request->send(SPIFFS, "/akvagraf.html"); |
||||||
|
}); |
||||||
|
server.on("/timer.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
request->send(SPIFFS, "/timer.html", String(), false, processor); |
||||||
|
}); |
||||||
|
server.on("/akva.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=7; |
||||||
|
request->send(SPIFFS, "/akva.html"); |
||||||
|
}); |
||||||
|
|
||||||
|
server.on("/favicon.ico", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||||
|
request->send(SPIFFS, "/favicon.ico"); |
||||||
|
}); |
||||||
|
server.on("/favicon-32x32.png", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||||
|
request->send(SPIFFS, "/favicon-32x32.png"); |
||||||
|
}); |
||||||
|
server.on("/favicon-16x16.png", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||||
|
request->send(SPIFFS, "/favicon-16x16.png"); |
||||||
|
}); |
||||||
|
//********************************************************************************************************
|
||||||
|
JSstringU(); |
||||||
|
JSstringK(); |
||||||
|
server.addHandler(&webSocket); |
||||||
|
webSocket.onEvent(handleWebSocketEvent); |
||||||
|
|
||||||
|
server.begin(); |
||||||
|
esp_task_wdt_init(WDT_TIMEOUT, true); //включить панику, чтобы ESP32 перезапустился
|
||||||
|
esp_task_wdt_add(NULL); //добавить текущий поток в WDT watch
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void loop() { |
||||||
|
|
||||||
|
// Send data to browser, increasing number every second.
|
||||||
|
if (millis() - countTimeWas >= 1000) { |
||||||
|
countTimeWas = millis(); |
||||||
|
countVal++;//cчетчик до перезапуска сервера
|
||||||
|
countVal1++; |
||||||
|
v++; |
||||||
|
v1++; |
||||||
|
if (idcon>0)// если есть подключения
|
||||||
|
{ String countUpdate1 = "{\"label3\":\"count1\",\"value\":" + String(countVal1) + "}";//отправка числовой переменной
|
||||||
|
webSocket.textAll(countUpdate1);//обновление ws
|
||||||
|
if((tdat==1)||(tweek==1))//есть новые данные для установок таймера
|
||||||
|
{timerconvert(); |
||||||
|
gpio[3]=1;//управление выходами передаем таймеру
|
||||||
|
writeFile(SD, "/timerd.txt", timerdata.c_str());//записываем в этот файл значения для таймера
|
||||||
|
writeFile(SD, "/week.txt", timerweek.c_str());//записываем в этот файл значения недельного таймера
|
||||||
|
writeFile(SD, "/tdout.txt", timerout.c_str());//записываем в этот файл значения выходов к кот подкл таймер
|
||||||
|
//timerout= {"id":"tout","t1":"100","t2":"010","t3":"001"}
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
// Serial.println(countUpdate1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (v1>3600) {//60min-
|
||||||
|
delay(0); |
||||||
|
sdsave();// записываем на СД необходимые данные
|
||||||
|
delay(0); |
||||||
|
ntp();//считываем время
|
||||||
|
v1=0;//обнуляем счетчик =3600с
|
||||||
|
delay(0); |
||||||
|
} |
||||||
|
//**************20sek*******************************
|
||||||
|
if (v>19){//20sek
|
||||||
|
JSstringU(); |
||||||
|
JSstringK(); |
||||||
|
JSstringOut(); |
||||||
|
|
||||||
|
|
||||||
|
if((ntp_on==0)&&(idcon==0)) |
||||||
|
{if((hour1==8)&&(min1==15))ntp();//синхронизация времени с NTP
|
||||||
|
|
||||||
|
if((hour1==8)&&(min1>18)) ntp_on==1; //если NTP не отвечает прекращаем до следующего дня
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if((res==1)&&(idcon==0))//idcon=0 клиентов нет
|
||||||
|
{ |
||||||
|
sdsave();// записываем на СД необходимые данные
|
||||||
|
ESP.restart(); //перезагрузка сервака
|
||||||
|
} |
||||||
|
|
||||||
|
res=0;
|
||||||
|
ntphome();//считываем время с esp32
|
||||||
|
nrf(); //проверяем не приш ли данные на NRF
|
||||||
|
Serial.print ("idcon="); |
||||||
|
Serial.println (idcon); |
||||||
|
v=0;//обнуляем счетчик 4*5=20с
|
||||||
|
delay(0); |
||||||
|
vrem();//время работы сайта
|
||||||
|
btime();//проверка сработки таймеров
|
||||||
|
|
||||||
|
|
||||||
|
if (idcon>0)// если есть подключения
|
||||||
|
{ webSocket.textAll(jsonString);//{"id":"0","temperature":12.456787109375,"humidity":77.456787109375,"tim2":"18:15","ti
|
||||||
|
Serial.println(jsonString); |
||||||
|
webSocket.textAll(jsonString2);//{"id":"2","tkom1":"20.0","hkom1":"30.0","batkom1":"4.10","timekom1"
|
||||||
|
Serial.println(jsonString2); |
||||||
|
|
||||||
|
String countUpdate = "{\"label3\":\"count\",\"value\":\"" + String(t10) + "\"}";//отправка строковой переменной время раб сервера
|
||||||
|
webSocket.textAll(countUpdate); |
||||||
|
Serial.println(countUpdate); |
||||||
|
delay(0); |
||||||
|
String countUpdate2 = "{\"label3\":\"count2\",\"value\":\"" + String(timeserv) + "\"}";//отправка строковой переменной врем NTP
|
||||||
|
webSocket.textAll(countUpdate2); |
||||||
|
Serial.println(countUpdate2); |
||||||
|
} |
||||||
|
} |
||||||
|
//**************20sek end*******************************
|
||||||
|
|
||||||
|
if((countVal>3600*2)&&(idcon==0))//прошло более 2 часов и нет подкл клиентов
|
||||||
|
{ if(hour1!=3)res=1;//разрешение на перезагрузку сервака
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
esp_task_wdt_reset();//reset WDT сброс вотчдога
|
||||||
|
} |
||||||
@ -0,0 +1,30 @@ |
|||||||
|
void WiFisetup() |
||||||
|
{ |
||||||
|
// Set the device as a Station and Soft Access Point simultaneously
|
||||||
|
|
||||||
|
if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) { |
||||||
|
Serial.println("STA Failed to configure"); |
||||||
|
}
|
||||||
|
WiFi.mode(WIFI_AP_STA); |
||||||
|
// Set device as a Wi-Fi Station
|
||||||
|
WiFi.begin(ssid, password); |
||||||
|
digitalWrite(2, LOW); // светодиод погашен
|
||||||
|
|
||||||
|
while (WiFi.status() != WL_CONNECTED) { |
||||||
|
delay(1000); |
||||||
|
Serial.println("Setting as a Wi-Fi Station.."); |
||||||
|
} |
||||||
|
digitalWrite(2, HIGH); // светодиод горит
|
||||||
|
|
||||||
|
Serial.print("Station IP Address: "); |
||||||
|
Serial.println(WiFi.localIP()); |
||||||
|
Serial.print("Wi-Fi Channel: "); |
||||||
|
Serial.println(WiFi.channel()); |
||||||
|
|
||||||
|
// Init ESP-NOW
|
||||||
|
if (esp_now_init() != ESP_OK) { |
||||||
|
Serial.println("Error initializing ESP-NOW"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,140 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3></p> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
|
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="akva1.html" title="информация">Аквариум-1</a></nav1> |
||||||
|
<nav1><a href="akva2.html" title="информация">Аквариум-2</a></nav1> |
||||||
|
<nav1><a href="akva3.html" title="информация">Аквариум-3</a></nav1> |
||||||
|
<nav1><a href="akvadat.html" title="информация">Данные</a></nav1> |
||||||
|
<nav1><a href="akvagraf.html" title="информация">График температур</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Аквариум 1</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="takv1"></span> °C</span></p><p class="packet">light <span id="light1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i>FAN</h4><p><span class="reading"><span id="fan1"></span> </span></p><p class="packet">Time <span id="time1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<h1>Аквариум 2</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="takv2"></span> °C</span></p><p class="packet">light <span id="light2"> </span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i>FAN</h4><p><span class="reading"><span id="fan2"></span> </span></p><p class="packet">Time <span id="time2"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<h1>Аквариум 3</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="takv3"></span> °C</span></p><p class="packet">light <span id="light3"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i>FAN</h4><p><span class="reading"><span id="fan3"></span> </span></p><p class="packet">Time <span id="time3"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<h1></h1> |
||||||
|
|
||||||
|
<div class="top"> |
||||||
|
<font size="4" >Время работы сервера: </font> |
||||||
|
<font color="#CF7071" size="5"><span id="t10">0:00</span></font> |
||||||
|
<p>Count:<span id="countData1">0:00</span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var data = JSON.parse(event.data);// |
||||||
|
if (data.label3 === 'count1') { |
||||||
|
document.getElementById("countData1").innerHTML = data.value; |
||||||
|
}; |
||||||
|
if (data.label3 === 'count') { |
||||||
|
document.getElementById("t10").innerHTML = data.value; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
if (data.id === 'akva') { |
||||||
|
console.log("readings", event.data); |
||||||
|
document.getElementById("takv1").innerHTML = data.tempakv1; |
||||||
|
document.getElementById("light1").innerHTML = data.light1; |
||||||
|
document.getElementById("time1").innerHTML = data.timakv1; |
||||||
|
document.getElementById("fan1").innerHTML = data.fan1; |
||||||
|
document.getElementById("takv2").innerHTML = data.tempakv2; |
||||||
|
document.getElementById("light2").innerHTML = data.light2; |
||||||
|
document.getElementById("time2").innerHTML = data.timakv2; |
||||||
|
document.getElementById("fan2").innerHTML = data.fan2; |
||||||
|
document.getElementById("takv3").innerHTML = data.tempakv3; |
||||||
|
document.getElementById("light3").innerHTML = data.light3; |
||||||
|
document.getElementById("time3").innerHTML = data.timakv3; |
||||||
|
document.getElementById("fan3").innerHTML = data.fan3; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,159 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
|
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="akva.html" title="информация">Аквариумы</a></nav1> |
||||||
|
<nav1><a href="akva1.html" title="информация">Аквариум-1</a></nav1> |
||||||
|
<nav1><a href="akva2.html" title="информация">Аквариум-2</a></nav1> |
||||||
|
<nav1><a href="akva3.html" title="информация">Аквариум-3</a></nav1> |
||||||
|
<nav1><a href="akvadat.html" title="информация">Данные</a></nav1> |
||||||
|
<nav1><a href="akvagraf.html" title="информация">График температур</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Аквариум 1</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="takv1"></span> °C</span></p><p class="packet">light <span id="light1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i>FAN</h4><p><span class="reading"><span id="fan1"></span> </span></p><p class="packet">Time <span id="time1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица данных за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  light</th> |
||||||
|
<th onclick="sortTable(3)"><span class="glyphicon glyphicon-sort"></span>  fan</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === 'akva') { |
||||||
|
document.getElementById("takv1").innerHTML = data.tempakv1; |
||||||
|
document.getElementById("light1").innerHTML = data.light1; |
||||||
|
document.getElementById("time1").innerHTML = data.timakv1; |
||||||
|
document.getElementById("fan1").innerHTML = data.fan1; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
append_json(data); |
||||||
|
} |
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
tr.innerHTML = '<td>' + object.timakv1 + '</td>' + |
||||||
|
'<td>' + object.tempakv1 + '</td>' + |
||||||
|
'<td>' + object.light1 + '</td>'+ |
||||||
|
'<td>' + object.fan1 + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
|
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,160 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
|
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="akva.html" title="информация">Аквариумы</a></nav1> |
||||||
|
<nav1><a href="akva1.html" title="информация">Аквариум-1</a></nav1> |
||||||
|
<nav1><a href="akva2.html" title="информация">Аквариум-2</a></nav1> |
||||||
|
<nav1><a href="akva3.html" title="информация">Аквариум-3</a></nav1> |
||||||
|
<nav1><a href="akvadat.html" title="информация">Данные</a></nav1> |
||||||
|
<nav1><a href="akvagraf.html" title="информация">График температур</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Аквариум 2</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="takv2"></span> °C</span></p><p class="packet">light <span id="light2"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i>FAN</h4><p><span class="reading"><span id="fan2"></span> </span></p><p class="packet">Time <span id="time2"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица данных за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  light</th> |
||||||
|
<th onclick="sortTable(3)"><span class="glyphicon glyphicon-sort"></span>  fan</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === 'akva') { |
||||||
|
document.getElementById("takv2").innerHTML = data.tempakv2; |
||||||
|
document.getElementById("light2").innerHTML = data.light2; |
||||||
|
document.getElementById("time2").innerHTML = data.timakv2; |
||||||
|
document.getElementById("fan2").innerHTML = data.fan2; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
append_json(data); |
||||||
|
} |
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
tr.innerHTML = '<td>' + object.timakv2 + '</td>' + |
||||||
|
'<td>' + object.tempakv2 + '</td>' + |
||||||
|
'<td>' + object.light2 + '</td>'+ |
||||||
|
'<td>' + object.fan2 + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
|
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,160 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
|
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="akva.html" title="информация">Аквариумы</a></nav1> |
||||||
|
<nav1><a href="akva1.html" title="информация">Аквариум-1</a></nav1> |
||||||
|
<nav1><a href="akva2.html" title="информация">Аквариум-2</a></nav1> |
||||||
|
<nav1><a href="akva3.html" title="информация">Аквариум-3</a></nav1> |
||||||
|
<nav1><a href="akvadat.html" title="информация">Данные</a></nav1> |
||||||
|
<nav1><a href="akvagraf.html" title="информация">График температур</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Аквариум 3</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="takv3"></span> °C</span></p><p class="packet">light <span id="light3"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i>FAN</h4><p><span class="reading"><span id="fan3"></span> </span></p><p class="packet">Time <span id="time3"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица данных за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
<col class="twenty" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  light</th> |
||||||
|
<th onclick="sortTable(3)"><span class="glyphicon glyphicon-sort"></span>  fan</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === 'akva') { |
||||||
|
document.getElementById("takv3").innerHTML = data.tempakv3; |
||||||
|
document.getElementById("light3").innerHTML = data.light3; |
||||||
|
document.getElementById("time3").innerHTML = data.timakv3; |
||||||
|
document.getElementById("fan3").innerHTML = data.fan3; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
append_json(data); |
||||||
|
} |
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
tr.innerHTML = '<td>' + object.timakv3 + '</td>' + |
||||||
|
'<td>' + object.tempakv3 + '</td>' + |
||||||
|
'<td>' + object.light3 + '</td>'+ |
||||||
|
'<td>' + object.fan3 + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
|
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,170 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
|
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="akva.html" title="информация">Аквариумы</a></nav1> |
||||||
|
<nav1><a href="akva1.html" title="информация">Аквариум-1</a></nav1> |
||||||
|
<nav1><a href="akva2.html" title="информация">Аквариум-2</a></nav1> |
||||||
|
<nav1><a href="akva3.html" title="информация">Аквариум-3</a></nav1> |
||||||
|
<nav1><a href="akvadat.html" title="информация">Данные</a></nav1> |
||||||
|
<nav1><a href="akvagraf.html" title="информация">График температур</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Аквариум </h1> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица данных за сутки </font> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="twenty" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura1</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  temperatura2</th> |
||||||
|
<th onclick="sortTable(3)"><span class="glyphicon glyphicon-sort"></span>  temperatura3</th> |
||||||
|
<th onclick="sortTable(4)"><span class="glyphicon glyphicon-sort"></span>  light1</th> |
||||||
|
<th onclick="sortTable(5)"><span class="glyphicon glyphicon-sort"></span>  light2</th> |
||||||
|
<th onclick="sortTable(6)"><span class="glyphicon glyphicon-sort"></span>  light3</th> |
||||||
|
<th onclick="sortTable(7)"><span class="glyphicon glyphicon-sort"></span>  fan1</th> |
||||||
|
<th onclick="sortTable(8)"><span class="glyphicon glyphicon-sort"></span>  fan2</th> |
||||||
|
<th onclick="sortTable(9)"><span class="glyphicon glyphicon-sort"></span>  fan3</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === 'akva') { |
||||||
|
|
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
append_json(data); |
||||||
|
} |
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
tr.innerHTML = '<td>' + object.timakv1 + '</td>' + |
||||||
|
'<td>' + object.tempakv1 + '</td>' + |
||||||
|
'<td>' + object.tempakv2 + '</td>' + |
||||||
|
'<td>' + object.tempakv3 + '</td>' + |
||||||
|
'<td>' + object.light1 + '</td>'+ |
||||||
|
'<td>' + object.light2 + '</td>'+ |
||||||
|
'<td>' + object.light3 + '</td>'+ |
||||||
|
'<td>' + object.fan1 + '</td>'+ |
||||||
|
'<td>' + object.fan2 + '</td>'+ |
||||||
|
'<td>' + object.fan3 + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
|
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,236 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="akva.html" title="информация">Аквариумы</a></nav1> |
||||||
|
<nav1><a href="akva1.html" title="информация">Аквариум-1</a></nav1> |
||||||
|
<nav1><a href="akva2.html" title="информация">Аквариум-2</a></nav1> |
||||||
|
<nav1><a href="akva3.html" title="информация">Аквариум-3</a></nav1> |
||||||
|
<nav1><a href="akvadat.html" title="информация">Данные</a></nav1> |
||||||
|
<nav1><a href="akvagraf.html" title="информация">График температур</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Аквариум</h1> |
||||||
|
|
||||||
|
|
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<div class="top2"> |
||||||
|
<nav id="navigation3"><a href="akvadat.html" title="главное меню">таблица данных за сутки</a></nav> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<div class="contentgraf"> |
||||||
|
<canvas id="line-chart" width="800" height="350"></canvas> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> |
||||||
|
<script type="text/javascript"> |
||||||
|
let ind; |
||||||
|
let w=[]; |
||||||
|
let w1=[]; |
||||||
|
let w2=[]; |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
|
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
// console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
console.log(object.Time); |
||||||
|
console.log(object.temperatura); |
||||||
|
console.log(object.humidity); |
||||||
|
var indtemp;// инд для опред кол ва цифр в температуре |
||||||
|
var indtemp1;// инд для опред кол ва цифр в температуре |
||||||
|
var indtemp2;// инд для опред кол ва цифр в температуре |
||||||
|
var indold= ind;//запоминаем предыдущий индекс чтоб не повторять данные |
||||||
|
console.log(object.timakv1.indexOf(":")); |
||||||
|
if(object.timakv1.indexOf(":")==1)//считаем кол-во цифр до : (одна или две ) 1:20 и 19:20 часы это индекс массива данных |
||||||
|
{ind = Number(object.timakv1.substr(0, 1));//если одна то 1 |
||||||
|
} |
||||||
|
else |
||||||
|
{console.log(object.timakv1.substr(0, 2)); // если две то 19 |
||||||
|
ind= Number(object.timakv1.substr(0, 2)); |
||||||
|
} |
||||||
|
//console.log(ind); |
||||||
|
if(ind!=indold) |
||||||
|
{ |
||||||
|
if(ind>indold+1) |
||||||
|
{ var del=ind-indold; |
||||||
|
for (var i = indold; i < ind; i++) { |
||||||
|
console.log(i); |
||||||
|
w[i]=w[indold]; |
||||||
|
w1[i]=w1[indold]; |
||||||
|
w2[i]=w2[indold]; |
||||||
|
// console.log("Notw[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
} |
||||||
|
//console.log(object.temperatura.indexOf(".")); |
||||||
|
indtemp=Number(object.tempakv1.indexOf("."));//кол-во цифр до запятой |
||||||
|
indtemp1=Number(object.tempakv2.indexOf("."));//кол-во цифр до запятой |
||||||
|
indtemp2=Number(object.tempakv3.indexOf("."));//кол-во цифр до запятой |
||||||
|
|
||||||
|
|
||||||
|
if(indtemp==2)//если до запятой 2 знака |
||||||
|
{w[ind]=Number(object.tempakv1.substr(0, 2))*10+Number(object.tempakv1.substr(3, 1)); |
||||||
|
w[ind]=w[ind]/10; |
||||||
|
} |
||||||
|
// console.log("w[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
if(indtemp1==2)//если до запятой 2 знака |
||||||
|
{ w1[ind]=Number(object.tempakv2.substr(0, 2))*10+Number(object.tempakv2.substr(3, 1)); |
||||||
|
w1[ind]=w1[ind]/10; |
||||||
|
} |
||||||
|
if(indtemp2==2)//если до запятой 2 знака |
||||||
|
{ w2[ind]=Number(object.tempakv3.substr(0, 2))*10+Number(object.tempakv3.substr(3, 1)); |
||||||
|
w2[ind]=w2[ind]/10; |
||||||
|
} |
||||||
|
|
||||||
|
if(indtemp==1)//если до запятой 1 знак |
||||||
|
{w[ind]=Number(object.tempakv1.substr(0, 1))*10+Number(object.tempakv1.substr(2, 1)); |
||||||
|
w[ind]=w[ind]/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
//console.log(w[ind]); |
||||||
|
if(indtemp1==1)//если до запятой 1 знак |
||||||
|
{ w1[ind]=Number(object.tempakv2.substr(0, 1))*10+Number(object.tempakv2.substr(2, 1)); |
||||||
|
w1[ind]=w[ind]/10; |
||||||
|
} |
||||||
|
if(indtemp2==1)//если до запятой 1 знак |
||||||
|
{w2[ind]=Number(object.tempakv3.substr(0, 1))*10+Number(object.tempakv3.substr(2, 1)); |
||||||
|
w2[ind]=w[ind]/10; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
new Chart(document.getElementById("line-chart"), { |
||||||
|
type: 'line', |
||||||
|
data: { |
||||||
|
labels: ["00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"], |
||||||
|
datasets: [{ |
||||||
|
data: [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15],w[16],w[17],w[18],w[19],w[20],w[21],w[22],w[23],], |
||||||
|
label: "Аквариум1 ", |
||||||
|
|
||||||
|
borderColor: "rgba(62,205,149,1.00)", |
||||||
|
backgroundColor: "rgba(62,205,149,0.48)", |
||||||
|
fill: true |
||||||
|
},{ |
||||||
|
data: [w1[0],w1[1],w1[2],w1[3],w1[4],w1[5],w1[6],w1[7],w1[8],w1[9],w1[10],w1[11],w1[12],w1[13],w1[14],w1[15],w1[16],w1[17],w1[18],w1[19],w1[20],w1[21],w1[22],w1[23],], |
||||||
|
label: "Аквариум2 ", |
||||||
|
borderColor: "rgba(229,143,66,1.00)", |
||||||
|
backgroundColor: "rgba(229,143,66,0.48)", |
||||||
|
fill: true |
||||||
|
},{ |
||||||
|
data: [w2[0],w2[1],w2[2],w2[3],w2[4],w2[5],w2[6],w2[7],w2[8],w2[9],w2[10],w2[11],w2[12],w2[13],w2[14],w2[15],w2[16],w2[17],w2[18],w2[19],w2[20],w2[21],w2[22],w2[23],], |
||||||
|
label: "Аквариум3 ", |
||||||
|
borderColor: "rgb(62,149,205)", |
||||||
|
backgroundColor: "rgba(65,138,191,0.68)", |
||||||
|
fill: true |
||||||
|
//fill: false |
||||||
|
}]}, |
||||||
|
options: { |
||||||
|
title: { |
||||||
|
display: true, |
||||||
|
text: 'График суточной температуры' |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
return false; |
||||||
|
console.log("isJsonString", false); |
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 775 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 50 KiB |
@ -0,0 +1,228 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="icon" href="favicon.ico"> |
||||||
|
|
||||||
|
<link rel="icon" type="png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<div id="container"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3></p> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||||
|
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||||
|
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||||
|
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||||
|
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||||
|
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||||
|
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||||
|
</div> |
||||||
|
<div id="sidebar"> |
||||||
|
|
||||||
|
<div class="manth"> |
||||||
|
<p><span id="munthserv">месяц</span></p> |
||||||
|
</div> |
||||||
|
<div class="data"> |
||||||
|
<p><span id="dataserv">01</span></p> |
||||||
|
<div class="week"> |
||||||
|
<p><span id="weekserv">день</span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="times"> |
||||||
|
<p><span id="timeserv1">:</span></p> |
||||||
|
</div> |
||||||
|
<div class="levnav"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p> <a href="index.html" title="Главная"> Главная</a></p> |
||||||
|
<p><a href="setting.html" title="настройки">настройки</a></p> |
||||||
|
<p><a href="upravlenie.html" title="управление">управление</a></p> |
||||||
|
<p><a href="inform.html" title="информация">информация</a></p> |
||||||
|
<p><a href="timer.html" title="таймер">таймер</a></p> |
||||||
|
<p><a href="akva.html" title="аквариум">аквариум</a></p> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="content"> |
||||||
|
<h1>Улица(восток)</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<h1>Улица(запад)</h1> |
||||||
|
|
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Battery <span id="batz"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<h1>Комната1</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom1"></span> °C</span></p><p class="packet">Battery <span id="batkom1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom1"></span> %</span></p><p class="packet">Time <span id="timekom1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<h1>Комната2</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom2"></span> °C</span></p><p class="packet">Battery <span id="batkom2"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom2"></span> %</span></p><p class="packet">Time <span id="timekom2"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<h1>Коридор</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkor"></span> °C</span></p><p class="packet">Battery <span id="batkor"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkor"></span> %</span></p><p class="packet">Time <span id="timekor"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<h1>Балкон</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tbal"></span> °C</span></p><p class="packet">Battery <span id="batbal"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hbal"></span> %</span></p><p class="packet">Time <span id="timebal"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<h1>Кухня</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<h1></h1> |
||||||
|
|
||||||
|
|
||||||
|
<div class="top"> |
||||||
|
<font size="4" >Время работы сервера: </font> |
||||||
|
<font color="#CF7071" size="5"><span id="t10">0:00</span></font> |
||||||
|
<p>Count:<span id="countData1">0:00</span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="clear"> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var data = JSON.parse(event.data);// |
||||||
|
|
||||||
|
if (data.label3 === 'count1') { |
||||||
|
document.getElementById("countData1").innerHTML = data.value; |
||||||
|
}; |
||||||
|
if (data.label3 === 'count') { |
||||||
|
document.getElementById("t10").innerHTML = data.value; |
||||||
|
}; |
||||||
|
if (data.label3 === 'count2') { |
||||||
|
document.getElementById("timeserv1").innerHTML = data.value; |
||||||
|
}; |
||||||
|
|
||||||
|
if (data.id === '0') { |
||||||
|
document.getElementById("t1").innerHTML = data.temperature; |
||||||
|
document.getElementById("h1").innerHTML = data.humidity; |
||||||
|
document.getElementById("batz").innerHTML = data.batz; |
||||||
|
document.getElementById("tim3").innerHTML = data.tim3; |
||||||
|
document.getElementById("dataserv").innerHTML = data.dataserv; |
||||||
|
document.getElementById("munthserv").innerHTML = data.munthserv; |
||||||
|
document.getElementById("weekserv").innerHTML = data.weekserv; |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
document.getElementById("tkom1").innerHTML = data.tkom1; |
||||||
|
document.getElementById("hkom1").innerHTML = data.hkom1; |
||||||
|
document.getElementById("batkom1").innerHTML = data.batkom1; |
||||||
|
document.getElementById("timekom1").innerHTML = data.timekom1; |
||||||
|
document.getElementById("tkom2").innerHTML = data.tkom2; |
||||||
|
document.getElementById("hkom2").innerHTML = data.hkom2; |
||||||
|
document.getElementById("batkom2").innerHTML = data.batkom2; |
||||||
|
document.getElementById("timekom2").innerHTML = data.timekom2; |
||||||
|
document.getElementById("tkor").innerHTML = data.tkor; |
||||||
|
document.getElementById("hkor").innerHTML = data.hkor; |
||||||
|
document.getElementById("batkor").innerHTML = data.batkor; |
||||||
|
document.getElementById("timekor").innerHTML = data.timekor; |
||||||
|
document.getElementById("tbal").innerHTML = data.tbal; |
||||||
|
document.getElementById("hbal").innerHTML = data.hbal; |
||||||
|
document.getElementById("batbal").innerHTML = data.batbal; |
||||||
|
document.getElementById("timebal").innerHTML = data.timebal; |
||||||
|
document.getElementById("tul1").innerHTML = data.tul1; |
||||||
|
document.getElementById("hul1").innerHTML = data.hul1; |
||||||
|
document.getElementById("osv1").innerHTML = data.osv1; |
||||||
|
document.getElementById("timeul1").innerHTML = data.timeul1; |
||||||
|
}; |
||||||
|
|
||||||
|
} |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,230 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||||
|
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||||
|
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||||
|
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||||
|
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||||
|
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||||
|
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Улица(запад)</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Battery <span id="batz"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<div class="top2"> |
||||||
|
<nav id="navigation3"><a href="informtabl.html" title="главное меню">таблица данных за сутки</a></nav> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<div class="contentgraf"> |
||||||
|
<canvas id="line-chart" width="800" height="350"></canvas> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> |
||||||
|
<script type="text/javascript"> |
||||||
|
let ind; |
||||||
|
let w=[]; |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '0') { |
||||||
|
console.log("readings", event.data); |
||||||
|
document.getElementById("t1").innerHTML = data.temperature; |
||||||
|
document.getElementById("h1").innerHTML = data.humidity; |
||||||
|
|
||||||
|
document.getElementById("batz").innerHTML = data.batz; |
||||||
|
document.getElementById("tim3").innerHTML = data.tim3; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
// console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
console.log(object.Time); |
||||||
|
console.log(object.temperatura); |
||||||
|
console.log(object.humidity); |
||||||
|
var indtemp;// инд для опред кол ва цифр в температуре |
||||||
|
var zn; //знак темп - или его нет те + |
||||||
|
var indold= ind;//запоминаем предыдущий индекс чтоб не повторять данные |
||||||
|
console.log(object.Time.indexOf(":")); |
||||||
|
if(object.Time.indexOf(":")==1)//считаем кол-во цифр до : (одна или две ) 1:20 и 19:20 часы это индекс массива данных |
||||||
|
{ind = Number(object.Time.substr(0, 1));//если одна то 1 |
||||||
|
} |
||||||
|
else |
||||||
|
{console.log(object.Time.substr(0, 2)); // если две то 19 |
||||||
|
ind= Number(object.Time.substr(0, 2)); |
||||||
|
} |
||||||
|
//console.log(ind); |
||||||
|
if(ind!=indold) |
||||||
|
{ |
||||||
|
if(ind>indold+1) |
||||||
|
{ var del=ind-indold; |
||||||
|
for (var i = indold; i < ind; i++) { |
||||||
|
console.log(i); |
||||||
|
w[i]=w[indold]; |
||||||
|
// console.log("Notw[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
} |
||||||
|
//console.log(object.temperatura.indexOf(".")); |
||||||
|
indtemp=Number(object.temperatura.indexOf("."));//кол-во цифр до запятой |
||||||
|
|
||||||
|
if(object.temperatura.substr(0, 1)!="-") |
||||||
|
{ |
||||||
|
if(indtemp==2)//если до запятой 2 знака |
||||||
|
{w[ind]=Number(object.temperatura.substr(0, 2))*10+Number(object.temperatura.substr(3, 1)); |
||||||
|
w[ind]=w[ind]/10; |
||||||
|
console.log("w[ind]="); |
||||||
|
console.log(w[ind]); |
||||||
|
} |
||||||
|
if(indtemp==1)//если до запятой 1 знак |
||||||
|
{w[ind]=Number(object.temperatura.substr(0, 1))*10+Number(object.temperatura.substr(2, 1)); |
||||||
|
w[ind]=w[ind]/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
//console.log(w[ind]); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
else//если температура отр |
||||||
|
{if(indtemp==3)//если до запятой 3 знака -10.3 |
||||||
|
{w[ind]=Number(object.temperatura.substr(1, 2))*10+Number(object.temperatura.substr(4, 1)); |
||||||
|
w[ind]=(-1*w[ind])/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
if(indtemp==2)//если до запятой 1 знак -2.3 |
||||||
|
{w[ind]=Number(object.temperatura.substr(1, 1))*10+Number(object.temperatura.substr(3, 1)); |
||||||
|
w[ind]=(-1*w[ind])/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
new Chart(document.getElementById("line-chart"), { |
||||||
|
type: 'line', |
||||||
|
data: { |
||||||
|
labels: ["00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"], |
||||||
|
datasets: [{ |
||||||
|
data: [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15],w[16],w[17],w[18],w[19],w[20],w[21],w[22],w[23],], |
||||||
|
label: "Ул Запад ", |
||||||
|
borderColor: "rgb(62,149,205)", |
||||||
|
backgroundColor: "rgba(65,138,191,0.48)", |
||||||
|
fill: true |
||||||
|
//fill: false |
||||||
|
}]}, |
||||||
|
options: { |
||||||
|
title: { |
||||||
|
display: true, |
||||||
|
text: 'График суточной температуры' |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
console.log("isJsonString", false); |
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,227 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||||
|
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||||
|
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||||
|
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||||
|
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||||
|
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||||
|
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Улица(восток)</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<div class="top2"> |
||||||
|
<nav id="navigation3"><a href="informtabl1.html" title="главное меню">таблица данных за сутки</a></nav> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<div class="contentgraf"> |
||||||
|
<canvas id="line-chart" width="800" height="350"></canvas> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> |
||||||
|
<script type="text/javascript"> |
||||||
|
let ind; |
||||||
|
let w=[]; |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
console.log("readings", event.data); |
||||||
|
document.getElementById("tul1").innerHTML = data.tul1; |
||||||
|
document.getElementById("hul1").innerHTML = data.hul1; |
||||||
|
document.getElementById("osv1").innerHTML = data.osv1; |
||||||
|
document.getElementById("timeul1").innerHTML = data.timeul1; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
// console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
console.log(object.Time); |
||||||
|
console.log(object.temperatura); |
||||||
|
console.log(object.humidity); |
||||||
|
var indtemp;// инд для опред кол ва цифр в температуре |
||||||
|
var zn; //знак темп - или его нет те + |
||||||
|
var indold= ind;//запоминаем предыдущий индекс чтоб не повторять данные |
||||||
|
console.log(object.Time.indexOf(":")); |
||||||
|
if(object.Time.indexOf(":")==1)//считаем кол-во цифр до : (одна или две ) 1:20 и 19:20 часы это индекс массива данных |
||||||
|
{ind = Number(object.Time.substr(0, 1));//если одна то 1 |
||||||
|
} |
||||||
|
else |
||||||
|
{console.log(object.Time.substr(0, 2)); // если две то 19 |
||||||
|
ind= Number(object.Time.substr(0, 2)); |
||||||
|
} |
||||||
|
//console.log(ind); |
||||||
|
if(ind!=indold) |
||||||
|
{ |
||||||
|
if(ind>indold+1) |
||||||
|
{ var del=ind-indold; |
||||||
|
for (var i = indold; i < ind; i++) { |
||||||
|
console.log(i); |
||||||
|
w[i]=w[indold]; |
||||||
|
// console.log("Notw[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
} |
||||||
|
//console.log(object.temperatura.indexOf(".")); |
||||||
|
indtemp=Number(object.temperatura.indexOf("."));//кол-во цифр до запятой |
||||||
|
|
||||||
|
if(object.temperatura.substr(0, 1)!="-") |
||||||
|
{ |
||||||
|
if(indtemp==2)//если до запятой 2 знака |
||||||
|
{w[ind]=Number(object.temperatura.substr(0, 2))*10+Number(object.temperatura.substr(3, 1)); |
||||||
|
w[ind]=w[ind]/10; |
||||||
|
console.log("w[ind]="); |
||||||
|
console.log(w[ind]); |
||||||
|
} |
||||||
|
if(indtemp==1)//если до запятой 1 знак |
||||||
|
{w[ind]=Number(object.temperatura.substr(0, 1))*10+Number(object.temperatura.substr(2, 1)); |
||||||
|
w[ind]=w[ind]/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
//console.log(w[ind]); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
else//если температура отр |
||||||
|
{if(indtemp==3)//если до запятой 3 знака -10.3 |
||||||
|
{w[ind]=Number(object.temperatura.substr(1, 2))*10+Number(object.temperatura.substr(4, 1)); |
||||||
|
w[ind]=(-1*w[ind])/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
if(indtemp==2)//если до запятой 1 знак -2.3 |
||||||
|
{w[ind]=Number(object.temperatura.substr(1, 1))*10+Number(object.temperatura.substr(3, 1)); |
||||||
|
w[ind]=(-1*w[ind])/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
new Chart(document.getElementById("line-chart"), { |
||||||
|
type: 'line', |
||||||
|
data: { |
||||||
|
labels: ["00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"], |
||||||
|
datasets: [{ |
||||||
|
data: [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15],w[16],w[17],w[18],w[19],w[20],w[21],w[22],w[23],], |
||||||
|
label: "Ул Восток ", |
||||||
|
borderColor: "rgb(62,149,205)", |
||||||
|
backgroundColor: "rgba(65,138,191,0.48)", |
||||||
|
fill: true |
||||||
|
//fill: false |
||||||
|
}]}, |
||||||
|
options: { |
||||||
|
title: { |
||||||
|
display: true, |
||||||
|
text: 'График суточной температуры' |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
return false; |
||||||
|
console.log("isJsonString", false); |
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,229 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||||
|
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||||
|
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||||
|
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||||
|
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||||
|
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||||
|
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Комната1</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom1"></span> °C</span></p><p class="packet">Battery <span id="batkom1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom1"></span> %</span></p><p class="packet">Time <span id="timekom1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<div class="top2"> |
||||||
|
<nav id="navigation3"><a href="informtabl2.html" title="главное меню">таблица данных за сутки</a></nav> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<div class="contentgraf"> |
||||||
|
<canvas id="line-chart" width="800" height="350"></canvas> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> |
||||||
|
<script type="text/javascript"> |
||||||
|
let ind; |
||||||
|
let w=[]; |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
console.log("readings", event.data); |
||||||
|
document.getElementById("tkom1").innerHTML = data.tkom1; |
||||||
|
document.getElementById("hkom1").innerHTML = data.hkom1; |
||||||
|
document.getElementById("batkom1").innerHTML = data.batkom1; |
||||||
|
document.getElementById("timekom1").innerHTML = data.timekom1; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
// console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
console.log(object.Time); |
||||||
|
console.log(object.temperatura); |
||||||
|
console.log(object.humidity); |
||||||
|
var indtemp;// инд для опред кол ва цифр в температуре |
||||||
|
var zn; //знак темп - или его нет те + |
||||||
|
var indold= ind;//запоминаем предыдущий индекс чтоб не повторять данные |
||||||
|
console.log(object.Time.indexOf(":")); |
||||||
|
if(object.Time.indexOf(":")==1)//считаем кол-во цифр до : (одна или две ) 1:20 и 19:20 часы это индекс массива данных |
||||||
|
{ind = Number(object.Time.substr(0, 1));//если одна то 1 |
||||||
|
} |
||||||
|
else |
||||||
|
{console.log(object.Time.substr(0, 2)); // если две то 19 |
||||||
|
ind= Number(object.Time.substr(0, 2)); |
||||||
|
} |
||||||
|
//console.log(ind); |
||||||
|
if(ind!=indold) |
||||||
|
{ |
||||||
|
if(ind>indold+1) |
||||||
|
{ var del=ind-indold; |
||||||
|
for (var i = indold; i < ind; i++) { |
||||||
|
console.log(i); |
||||||
|
w[i]=w[indold]; |
||||||
|
// console.log("Notw[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
} |
||||||
|
//console.log(object.temperatura.indexOf(".")); |
||||||
|
indtemp=Number(object.temperatura.indexOf("."));//кол-во цифр до запятой |
||||||
|
|
||||||
|
if(object.temperatura.substr(0, 1)!="-") |
||||||
|
{ |
||||||
|
if(indtemp==2)//если до запятой 2 знака |
||||||
|
{w[ind]=Number(object.temperatura.substr(0, 2))*10+Number(object.temperatura.substr(3, 1)); |
||||||
|
w[ind]=w[ind]/10; |
||||||
|
console.log("w[ind]="); |
||||||
|
console.log(w[ind]); |
||||||
|
} |
||||||
|
if(indtemp==1)//если до запятой 1 знак |
||||||
|
{w[ind]=Number(object.temperatura.substr(0, 1))*10+Number(object.temperatura.substr(2, 1)); |
||||||
|
w[ind]=w[ind]/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
//console.log(w[ind]); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
else//если температура отр |
||||||
|
{if(indtemp==3)//если до запятой 3 знака -10.3 |
||||||
|
{w[ind]=Number(object.temperatura.substr(1, 2))*10+Number(object.temperatura.substr(4, 1)); |
||||||
|
w[ind]=(-1*w[ind])/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
if(indtemp==2)//если до запятой 1 знак -2.3 |
||||||
|
{w[ind]=Number(object.temperatura.substr(1, 1))*10+Number(object.temperatura.substr(3, 1)); |
||||||
|
w[ind]=(-1*w[ind])/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
new Chart(document.getElementById("line-chart"), { |
||||||
|
type: 'line', |
||||||
|
data: { |
||||||
|
labels: ["00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"], |
||||||
|
datasets: [{ |
||||||
|
data: [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15],w[16],w[17],w[18],w[19],w[20],w[21],w[22],w[23],], |
||||||
|
label: "Комната1 ", |
||||||
|
borderColor: "rgb(62,149,205)", |
||||||
|
backgroundColor: "rgba(65,138,191,0.48)", |
||||||
|
fill: true |
||||||
|
//fill: false |
||||||
|
}]}, |
||||||
|
options: { |
||||||
|
title: { |
||||||
|
display: true, |
||||||
|
text: 'График суточной температуры' |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,228 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||||
|
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||||
|
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||||
|
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||||
|
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||||
|
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||||
|
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Комната2</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom2"></span> °C</span></p><p class="packet">Battery <span id="batkom2"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom2"></span> %</span></p><p class="packet">Time <span id="timekom2"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<div class="top2"> |
||||||
|
<nav id="navigation3"><a href="informtabl3.html" title="главное меню">таблица данных за сутки</a></nav> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<div class="contentgraf"> |
||||||
|
<canvas id="line-chart" width="800" height="350"></canvas> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> |
||||||
|
<script type="text/javascript"> |
||||||
|
let ind=-1; |
||||||
|
let w=[]; |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
console.log("readings", event.data); |
||||||
|
document.getElementById("tkom2").innerHTML = data.tkom2; |
||||||
|
document.getElementById("hkom2").innerHTML = data.hkom2; |
||||||
|
document.getElementById("batkom2").innerHTML = data.batkom2; |
||||||
|
document.getElementById("timekom2").innerHTML = data.timekom2; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
// console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
//console.log("data", data); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
// console.log(object.Time); |
||||||
|
// console.log(object.temperatura); |
||||||
|
//console.log(object.humidity); |
||||||
|
var indtemp;// инд для опред кол ва цифр в температуре |
||||||
|
var zn; //знак темп - или его нет те + |
||||||
|
var indold= ind;//запоминаем предыдущий индекс чтоб не повторять данные |
||||||
|
// console.log(object.Time.indexOf(":")); |
||||||
|
if(object.Time.indexOf(":")==1)//считаем кол-во цифр до : (одна или две ) 1:20 и 19:20 часы это индекс массива данных |
||||||
|
{ind = Number(object.Time.substr(0, 1));//если одна то 1 |
||||||
|
} |
||||||
|
else |
||||||
|
{//console.log(object.Time.substr(0, 2)); // если две то 19 |
||||||
|
ind= Number(object.Time.substr(0, 2)); |
||||||
|
} |
||||||
|
//console.log("ind="); |
||||||
|
//console.log(ind); |
||||||
|
// console.log("indold="); |
||||||
|
//console.log(indold); |
||||||
|
if(ind!=indold) |
||||||
|
{ |
||||||
|
if(ind>indold+1) |
||||||
|
{ var del=ind-indold; |
||||||
|
for (var i = indold; i < ind; i++) { |
||||||
|
console.log(i); |
||||||
|
w[i]=w[indold]; |
||||||
|
// console.log("Notw[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
} |
||||||
|
//console.log(object.temperatura.indexOf(".")); |
||||||
|
indtemp=Number(object.temperatura.indexOf("."));//кол-во цифр до запятой |
||||||
|
|
||||||
|
if(object.temperatura.substr(0, 1)!="-") |
||||||
|
{ |
||||||
|
if(indtemp==2)//если до запятой 2 знака |
||||||
|
{w[ind]=Number(object.temperatura.substr(0, 2))*10+Number(object.temperatura.substr(3, 1)); |
||||||
|
w[ind]=w[ind]/10; |
||||||
|
console.log("w[ind]="); |
||||||
|
console.log(w[ind]); |
||||||
|
} |
||||||
|
if(indtemp==1)//если до запятой 1 знак |
||||||
|
{w[ind]=Number(object.temperatura.substr(0, 1))*10+Number(object.temperatura.substr(2, 1)); |
||||||
|
w[ind]=w[ind]/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
//console.log(w[ind]); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
else//если температура отр |
||||||
|
{if(indtemp==3)//если до запятой 3 знака -10.3 |
||||||
|
{w[ind]=Number(object.temperatura.substr(1, 2))*10+Number(object.temperatura.substr(4, 1)); |
||||||
|
w[ind]=(-1*w[ind])/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
if(indtemp==2)//если до запятой 1 знак -2.3 |
||||||
|
{w[ind]=Number(object.temperatura.substr(1, 1))*10+Number(object.temperatura.substr(3, 1)); |
||||||
|
w[ind]=(-1*w[ind])/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
new Chart(document.getElementById("line-chart"), { |
||||||
|
type: 'line', |
||||||
|
data: { |
||||||
|
labels: ["00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"], |
||||||
|
datasets: [{ |
||||||
|
data: [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15],w[16],w[17],w[18],w[19],w[20],w[21],w[22],w[23],], |
||||||
|
label: "Комната2 ", |
||||||
|
borderColor: "rgb(62,149,205)", |
||||||
|
backgroundColor: "rgba(65,138,191,0.48)", |
||||||
|
fill: true |
||||||
|
//fill: false |
||||||
|
}]}, |
||||||
|
options: { |
||||||
|
title: { |
||||||
|
display: true, |
||||||
|
text: 'График суточной температуры' |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,226 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||||
|
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||||
|
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||||
|
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||||
|
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||||
|
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||||
|
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Коридор</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkor"></span> °C</span></p><p class="packet">Battery <span id="batkor"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkor"></span> %</span></p><p class="packet">Time <span id="timekor"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<div class="top2"> |
||||||
|
<nav id="navigation3"><a href="informtabl4.html" title="главное меню">таблица данных за сутки</a></nav> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<div class="contentgraf"> |
||||||
|
<canvas id="line-chart" width="800" height="350"></canvas> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> |
||||||
|
<script type="text/javascript"> |
||||||
|
let ind; |
||||||
|
let w=[]; |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
document.getElementById("tkor").innerHTML = data.tkor; |
||||||
|
document.getElementById("hkor").innerHTML = data.hkor; |
||||||
|
document.getElementById("batkor").innerHTML = data.batkor; |
||||||
|
document.getElementById("timekor").innerHTML = data.timekor; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
// console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
console.log(object.Time); |
||||||
|
console.log(object.temperatura); |
||||||
|
console.log(object.humidity); |
||||||
|
var indtemp;// инд для опред кол ва цифр в температуре |
||||||
|
var zn; //знак темп - или его нет те + |
||||||
|
var indold= ind;//запоминаем предыдущий индекс чтоб не повторять данные |
||||||
|
console.log(object.Time.indexOf(":")); |
||||||
|
if(object.Time.indexOf(":")==1)//считаем кол-во цифр до : (одна или две ) 1:20 и 19:20 часы это индекс массива данных |
||||||
|
{ind = Number(object.Time.substr(0, 1));//если одна то 1 |
||||||
|
} |
||||||
|
else |
||||||
|
{console.log(object.Time.substr(0, 2)); // если две то 19 |
||||||
|
ind= Number(object.Time.substr(0, 2)); |
||||||
|
} |
||||||
|
//console.log(ind); |
||||||
|
if(ind!=indold) |
||||||
|
{ |
||||||
|
if(ind>indold+1) |
||||||
|
{ var del=ind-indold; |
||||||
|
for (var i = indold; i < ind; i++) { |
||||||
|
console.log(i); |
||||||
|
w[i]=w[indold]; |
||||||
|
// console.log("Notw[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
} |
||||||
|
//console.log(object.temperatura.indexOf(".")); |
||||||
|
indtemp=Number(object.temperatura.indexOf("."));//кол-во цифр до запятой |
||||||
|
|
||||||
|
if(object.temperatura.substr(0, 1)!="-") |
||||||
|
{ |
||||||
|
if(indtemp==2)//если до запятой 2 знака |
||||||
|
{w[ind]=Number(object.temperatura.substr(0, 2))*10+Number(object.temperatura.substr(3, 1)); |
||||||
|
w[ind]=w[ind]/10; |
||||||
|
console.log("w[ind]="); |
||||||
|
console.log(w[ind]); |
||||||
|
} |
||||||
|
if(indtemp==1)//если до запятой 1 знак |
||||||
|
{w[ind]=Number(object.temperatura.substr(0, 1))*10+Number(object.temperatura.substr(2, 1)); |
||||||
|
w[ind]=w[ind]/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
//console.log(w[ind]); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
else//если температура отр |
||||||
|
{if(indtemp==3)//если до запятой 3 знака -10.3 |
||||||
|
{w[ind]=Number(object.temperatura.substr(1, 2))*10+Number(object.temperatura.substr(4, 1)); |
||||||
|
w[ind]=(-1*w[ind])/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
if(indtemp==2)//если до запятой 1 знак -2.3 |
||||||
|
{w[ind]=Number(object.temperatura.substr(1, 1))*10+Number(object.temperatura.substr(3, 1)); |
||||||
|
w[ind]=(-1*w[ind])/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
new Chart(document.getElementById("line-chart"), { |
||||||
|
type: 'line', |
||||||
|
data: { |
||||||
|
labels: ["00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"], |
||||||
|
datasets: [{ |
||||||
|
data: [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15],w[16],w[17],w[18],w[19],w[20],w[21],w[22],w[23],], |
||||||
|
label: "Коридор ", |
||||||
|
borderColor: "rgb(62,149,205)", |
||||||
|
backgroundColor: "rgba(65,138,191,0.48)", |
||||||
|
fill: true |
||||||
|
//fill: false |
||||||
|
}]}, |
||||||
|
options: { |
||||||
|
title: { |
||||||
|
display: true, |
||||||
|
text: 'График суточной температуры' |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
|
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,227 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||||
|
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||||
|
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||||
|
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||||
|
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||||
|
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||||
|
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Балкон</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tbal"></span> °C</span></p><p class="packet">Battery <span id="batbal"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hbal"></span> %</span></p><p class="packet">Time <span id="timebal"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<div class="top2"> |
||||||
|
<nav id="navigation3"><a href="informtabl5.html" title="главное меню">таблица данных за сутки</a></nav> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<div class="contentgraf"> |
||||||
|
<canvas id="line-chart" width="800" height="350"></canvas> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> |
||||||
|
<script type="text/javascript"> |
||||||
|
let ind; |
||||||
|
let w=[]; |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
console.log("readings", event.data); |
||||||
|
|
||||||
|
document.getElementById("tbal").innerHTML = data.tbal; |
||||||
|
document.getElementById("hbal").innerHTML = data.hbal; |
||||||
|
document.getElementById("batbal").innerHTML = data.batbal; |
||||||
|
document.getElementById("timebal").innerHTML = data.timebal; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
// console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
console.log(object.Time); |
||||||
|
console.log(object.temperatura); |
||||||
|
console.log(object.humidity); |
||||||
|
var indtemp;// инд для опред кол ва цифр в температуре |
||||||
|
var zn; //знак темп - или его нет те + |
||||||
|
var indold= ind;//запоминаем предыдущий индекс чтоб не повторять данные |
||||||
|
console.log(object.Time.indexOf(":")); |
||||||
|
if(object.Time.indexOf(":")==1)//считаем кол-во цифр до : (одна или две ) 1:20 и 19:20 часы это индекс массива данных |
||||||
|
{ind = Number(object.Time.substr(0, 1));//если одна то 1 |
||||||
|
} |
||||||
|
else |
||||||
|
{console.log(object.Time.substr(0, 2)); // если две то 19 |
||||||
|
ind= Number(object.Time.substr(0, 2)); |
||||||
|
} |
||||||
|
//console.log(ind); |
||||||
|
if(ind!=indold) |
||||||
|
{ |
||||||
|
if(ind>indold+1) |
||||||
|
{ var del=ind-indold; |
||||||
|
for (var i = indold; i < ind; i++) { |
||||||
|
console.log(i); |
||||||
|
w[i]=w[indold]; |
||||||
|
// console.log("Notw[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
} |
||||||
|
//console.log(object.temperatura.indexOf(".")); |
||||||
|
indtemp=Number(object.temperatura.indexOf("."));//кол-во цифр до запятой |
||||||
|
|
||||||
|
if(object.temperatura.substr(0, 1)!="-") |
||||||
|
{ |
||||||
|
if(indtemp==2)//если до запятой 2 знака |
||||||
|
{w[ind]=Number(object.temperatura.substr(0, 2))*10+Number(object.temperatura.substr(3, 1)); |
||||||
|
w[ind]=w[ind]/10; |
||||||
|
console.log("w[ind]="); |
||||||
|
console.log(w[ind]); |
||||||
|
} |
||||||
|
if(indtemp==1)//если до запятой 1 знак |
||||||
|
{w[ind]=Number(object.temperatura.substr(0, 1))*10+Number(object.temperatura.substr(2, 1)); |
||||||
|
w[ind]=w[ind]/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
//console.log(w[ind]); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
else//если температура отр |
||||||
|
{if(indtemp==3)//если до запятой 3 знака -10.3 |
||||||
|
{w[ind]=Number(object.temperatura.substr(1, 2))*10+Number(object.temperatura.substr(4, 1)); |
||||||
|
w[ind]=(-1*w[ind])/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
if(indtemp==2)//если до запятой 1 знак -2.3 |
||||||
|
{w[ind]=Number(object.temperatura.substr(1, 1))*10+Number(object.temperatura.substr(3, 1)); |
||||||
|
w[ind]=(-1*w[ind])/10; |
||||||
|
// console.log("w[ind]="); |
||||||
|
// console.log(w[ind]); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
new Chart(document.getElementById("line-chart"), { |
||||||
|
type: 'line', |
||||||
|
data: { |
||||||
|
labels: ["00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"], |
||||||
|
datasets: [{ |
||||||
|
data: [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15],w[16],w[17],w[18],w[19],w[20],w[21],w[22],w[23],], |
||||||
|
label: "Балкон ", |
||||||
|
borderColor: "rgb(62,149,205)", |
||||||
|
backgroundColor: "rgba(65,138,191,0.48)", |
||||||
|
fill: true |
||||||
|
//fill: false |
||||||
|
}]}, |
||||||
|
options: { |
||||||
|
title: { |
||||||
|
display: true, |
||||||
|
text: 'График суточной температуры' |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,157 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||||
|
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||||
|
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||||
|
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||||
|
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||||
|
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||||
|
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Кухня</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
console.log("readings", event.data); |
||||||
|
document.getElementById("tul1").innerHTML = data.tul1; |
||||||
|
document.getElementById("hul1").innerHTML = data.hul1; |
||||||
|
document.getElementById("osv1").innerHTML = data.osv1; |
||||||
|
document.getElementById("timeul1").innerHTML = data.timeul1; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
append_json(data); |
||||||
|
} |
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,151 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<link rel="manifest" href="imajes/site.webmanifest"> |
||||||
|
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Улица(восток)</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
console.log("readings", event.data); |
||||||
|
document.getElementById("tul1").innerHTML = data.tul1; |
||||||
|
document.getElementById("hul1").innerHTML = data.hul1; |
||||||
|
document.getElementById("osv1").innerHTML = data.osv1; |
||||||
|
document.getElementById("timeul1").innerHTML = data.timeul1; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
append_json(data); |
||||||
|
} |
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
return false; |
||||||
|
console.log("isJsonString", false); |
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,164 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||||
|
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||||
|
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||||
|
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||||
|
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||||
|
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||||
|
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Улица(запад)</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Battery <span id="batz"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<div class="top2"> |
||||||
|
<nav id="navigation3"><a href="inform.html" title="График данных за сутки">График данных за сутки</a></nav> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '0') { |
||||||
|
console.log("readings", event.data); |
||||||
|
document.getElementById("t1").innerHTML = data.temperature; |
||||||
|
document.getElementById("h1").innerHTML = data.humidity; |
||||||
|
|
||||||
|
document.getElementById("batz").innerHTML = data.batz; |
||||||
|
document.getElementById("tim3").innerHTML = data.tim3; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
append_json(data); |
||||||
|
} |
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
console.log("isJsonString", false); |
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,166 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||||
|
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||||
|
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||||
|
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||||
|
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||||
|
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||||
|
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Улица(восток)</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<div class="top2"> |
||||||
|
<nav id="navigation3"><a href="inform1.html" title="главное меню">График данных за сутки</a></nav> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div> |
||||||
|
|
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="tablinfo"> |
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
console.log("readings", event.data); |
||||||
|
document.getElementById("tul1").innerHTML = data.tul1; |
||||||
|
document.getElementById("hul1").innerHTML = data.hul1; |
||||||
|
document.getElementById("osv1").innerHTML = data.osv1; |
||||||
|
document.getElementById("timeul1").innerHTML = data.timeul1; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
append_json(data); |
||||||
|
} |
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
return false; |
||||||
|
console.log("isJsonString", false); |
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,162 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||||
|
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||||
|
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||||
|
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||||
|
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||||
|
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||||
|
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Комната1</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom1"></span> °C</span></p><p class="packet">Battery <span id="batkom1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom1"></span> %</span></p><p class="packet">Time <span id="timekom1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<p></p> |
||||||
|
<div class="top2"> |
||||||
|
<nav id="navigation3"><a href="inform2.html" title="главное меню">График данных за сутки</a></nav> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
console.log("readings", event.data); |
||||||
|
document.getElementById("tkom1").innerHTML = data.tkom1; |
||||||
|
document.getElementById("hkom1").innerHTML = data.hkom1; |
||||||
|
document.getElementById("batkom1").innerHTML = data.batkom1; |
||||||
|
document.getElementById("timekom1").innerHTML = data.timekom1; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
append_json(data); |
||||||
|
} |
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,161 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||||
|
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||||
|
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||||
|
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||||
|
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||||
|
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||||
|
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Комната2</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom2"></span> °C</span></p><p class="packet">Battery <span id="batkom2"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom2"></span> %</span></p><p class="packet">Time <span id="timekom2"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<div class="top2"> |
||||||
|
<nav id="navigation3"><a href="inform3.html" title="главное меню">График данных за сутки</a></nav> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
console.log("readings", event.data); |
||||||
|
document.getElementById("tkom2").innerHTML = data.tkom2; |
||||||
|
document.getElementById("hkom2").innerHTML = data.hkom2; |
||||||
|
document.getElementById("batkom2").innerHTML = data.batkom2; |
||||||
|
document.getElementById("timekom2").innerHTML = data.timekom2; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
append_json(data); |
||||||
|
} |
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,162 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||||
|
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||||
|
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||||
|
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||||
|
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||||
|
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||||
|
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Коридор</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkor"></span> °C</span></p><p class="packet">Battery <span id="batkor"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkor"></span> %</span></p><p class="packet">Time <span id="timekor"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<div class="top2"> |
||||||
|
<nav id="navigation3"><a href="inform4.html" title="главное меню">График данных за сутки</a></nav> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
document.getElementById("tkor").innerHTML = data.tkor; |
||||||
|
document.getElementById("hkor").innerHTML = data.hkor; |
||||||
|
document.getElementById("batkor").innerHTML = data.batkor; |
||||||
|
document.getElementById("timekor").innerHTML = data.timekor; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
append_json(data); |
||||||
|
} |
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
|
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,163 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div class="top2"> |
||||||
|
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||||
|
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||||
|
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||||
|
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||||
|
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||||
|
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||||
|
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||||
|
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Балкон</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tbal"></span> °C</span></p><p class="packet">Battery <span id="batbal"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hbal"></span> %</span></p><p class="packet">Time <span id="timebal"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p></p> |
||||||
|
<div class="top2"> |
||||||
|
<nav id="navigation3"><a href="inform5.html" title="главное меню">График данных за сутки</a></nav> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var tabl=0; |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);// |
||||||
|
if (data.id === '77') { |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
console.log("readings", event.data); |
||||||
|
|
||||||
|
document.getElementById("tbal").innerHTML = data.tbal; |
||||||
|
document.getElementById("hbal").innerHTML = data.hbal; |
||||||
|
document.getElementById("batbal").innerHTML = data.batbal; |
||||||
|
document.getElementById("timebal").innerHTML = data.timebal; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(tabl==0) |
||||||
|
{ |
||||||
|
console.log("readings", event.data); |
||||||
|
re = event.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
var data=[]; |
||||||
|
tabl=1; |
||||||
|
for(var i = 0; i < re.length-1; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
} |
||||||
|
append_json(data); |
||||||
|
} |
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
|
After Width: | Height: | Size: 11 KiB |
@ -0,0 +1,478 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="icon" href="favicon.ico"> |
||||||
|
|
||||||
|
<link rel="icon" type="png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<div id="container"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Настройки таймера</h3></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="sidebar"> |
||||||
|
|
||||||
|
<div class="manth"> |
||||||
|
<p><span id="munthserv">месяц</span></p> |
||||||
|
</div> |
||||||
|
<div class="data"> |
||||||
|
<p><span id="dataserv">01</span></p> |
||||||
|
<div class="week"> |
||||||
|
<p><span id="weekserv">день</span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="times"> |
||||||
|
<p><span id="timeserv1">:</span></p> |
||||||
|
</div> |
||||||
|
<div class="levnav"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p> <a href="index.html" title="Главная"> Главная</a></p> |
||||||
|
<p><a href="setting.html" title="настройки">настройки</a></p> |
||||||
|
<p><a href="upravlenie.html" title="управление">управление</a></p> |
||||||
|
<p><a href="inform.html" title="информация">информация</a></p> |
||||||
|
<p><a href="timer.html" title="таймер">таймер</a></p> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
<font size="3" color="#1E4486"> |
||||||
|
<label for="timerSelector">Выберите таймер:</label> |
||||||
|
<select id="timerSelector"> |
||||||
|
<font size="5" color="#1E4486"> |
||||||
|
<option value="timer1">Таймер 1</option> |
||||||
|
<option value="timer2">Таймер 2</option> |
||||||
|
<option value="timer3">Таймер 3</option> |
||||||
|
</font> |
||||||
|
</select> |
||||||
|
<div id="content"> |
||||||
|
|
||||||
|
|
||||||
|
<div id="timers"> |
||||||
|
<!-- Таймер 1 --> |
||||||
|
<div class="timer" id="timer1"> |
||||||
|
<h2>Таймер 1</h2> |
||||||
|
<font size="5" color="#1E4486"> |
||||||
|
<ul> |
||||||
|
<!-- 10 временных интервалов для Таймера 1 --> |
||||||
|
<div class="days"> |
||||||
|
<label><input type="checkbox" name="week1"> Пн</label> |
||||||
|
<label><input type="checkbox" name="week1"> Вт</label> |
||||||
|
<label><input type="checkbox" name="week1"> Ср</label> |
||||||
|
<label><input type="checkbox" name="week1"> Чт</label> |
||||||
|
<label><input type="checkbox" name="week1"> Пт</label> |
||||||
|
<label><input type="checkbox" name="week1"> Сб</label> |
||||||
|
<label><input type="checkbox" name="week1"> Вс</label> |
||||||
|
</div> |
||||||
|
|
||||||
|
<li><small>on_1 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_1 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>on_2 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_2 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>on_3 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_3 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>on_4 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_4 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>on_5 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_5 </small><input type="time" value="00:00"></li> |
||||||
|
|
||||||
|
<div class="days"> |
||||||
|
<label><input type="checkbox" name="out1"> 1</label> |
||||||
|
<label><input type="checkbox" name="out1"> 2</label> |
||||||
|
<label><input type="checkbox" name="out1"> 3</label> |
||||||
|
</div> |
||||||
|
</ul> |
||||||
|
</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
<!-- Таймер 2 --> |
||||||
|
<div class="timer" id="timer2"> |
||||||
|
<h2>Таймер 2</h2> |
||||||
|
<font size="5" color="#1E4486"> |
||||||
|
<ul> |
||||||
|
<!-- 10 временных интервалов для Таймера 2 --> |
||||||
|
<div class="days"> |
||||||
|
<label><input type="checkbox" name="week2"> Пн</label> |
||||||
|
<label><input type="checkbox" name="week2"> Вт</label> |
||||||
|
<label><input type="checkbox" name="week2"> Ср</label> |
||||||
|
<label><input type="checkbox" name="week2"> Чт</label> |
||||||
|
<label><input type="checkbox" name="week2"> Пт</label> |
||||||
|
<label><input type="checkbox" name="week2"> Сб</label> |
||||||
|
<label><input type="checkbox" name="week2"> Вс</label> |
||||||
|
</div> |
||||||
|
<li><small>on_1 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_1 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>on_2 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_2 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>on_3 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_3 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>on_4 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_4 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>on_5 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_5 </small><input type="time" value="00:00"></li> |
||||||
|
<div class="days"> |
||||||
|
<label><input type="checkbox" name="out2"> 1</label> |
||||||
|
<label><input type="checkbox" name="out2"> 2</label> |
||||||
|
<label><input type="checkbox" name="out2"> 3</label> |
||||||
|
</div> |
||||||
|
</ul> |
||||||
|
</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
<!-- Таймер 3 --> |
||||||
|
<div class="timer" id="timer3"> |
||||||
|
<h2>Таймер 3</h2> |
||||||
|
<font size="5" color="#1E4486"> |
||||||
|
<ul> |
||||||
|
<div class="days"> |
||||||
|
<label><input type="checkbox" name="week3"> Пн</label> |
||||||
|
<label><input type="checkbox" name="week3"> Вт</label> |
||||||
|
<label><input type="checkbox" name="week3"> Ср</label> |
||||||
|
<label><input type="checkbox" name="week3"> Чт</label> |
||||||
|
<label><input type="checkbox" name="week3"> Пт</label> |
||||||
|
<label><input type="checkbox" name="week3"> Сб</label> |
||||||
|
<label><input type="checkbox" name="week3"> Вс</label> |
||||||
|
</div> |
||||||
|
<!-- 10 временных интервалов для Таймера 3 --> |
||||||
|
<li><small>on_1 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_1 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>on_2 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_2 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>on_3 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_3 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>on_4 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_4 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>on_5 </small><input type="time" value="00:00"></li> |
||||||
|
<li><small>off_5 </small><input type="time" value="00:00"></li> |
||||||
|
<div class="days"> |
||||||
|
<label><input type="checkbox" name="out3"> 1</label> |
||||||
|
<label><input type="checkbox" name="out3"> 2</label> |
||||||
|
<label><input type="checkbox" name="out3"> 3</label> |
||||||
|
</div> |
||||||
|
</ul> |
||||||
|
</font> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<button id="saveButton">Сохранить</button> |
||||||
|
<div id="clear"> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
</div> |
||||||
|
<div class="top"> |
||||||
|
<font size="4" >Время работы сервера: </font> |
||||||
|
<font color="#CF7071" size="5"><span id="t10">0:00</span></font> |
||||||
|
<p>Count:<span id="countData1">0:00</span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="clear"> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
let defaultData = { |
||||||
|
timer1: ["00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00"], |
||||||
|
timer2: ["00:00", "00:30", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00"], |
||||||
|
timer3: ["00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00"]}; |
||||||
|
//****************************WebSocket*************************************************** |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var dat=event.data; |
||||||
|
if ( dat.startsWith("{\"timer1"))//если начало строки {"timer1 то парсим ее как данные таймера |
||||||
|
{console.log("dat", dat[2]+dat[7]);//(dat[2]+dat[7]=='t1') |
||||||
|
defaultData = JSON.parse(event.data); |
||||||
|
//let defaultData = Object.assign({}, defaultData1);// перевод объекта в JSON |
||||||
|
|
||||||
|
console.log("t2", defaultData); |
||||||
|
// Заполните поля ввода (время для таймеров) данными из JSON |
||||||
|
Object.keys(defaultData).forEach(function (timerId) { |
||||||
|
const timer = document.getElementById(timerId); |
||||||
|
const intervals = defaultData[timerId]; |
||||||
|
const timerItems = timer.querySelectorAll('input[type="time"]'); |
||||||
|
timerItems.forEach(function (item, index) { |
||||||
|
item.value = intervals[index]; |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var data = JSON.parse(event.data);//парсим JSON |
||||||
|
|
||||||
|
if (data.id === '0') { |
||||||
|
// document.getElementById("tim2").innerHTML = data.tim2; |
||||||
|
// document.getElementById("tim3").innerHTML = data.tim3; |
||||||
|
document.getElementById("dataserv").innerHTML = data.dataserv; |
||||||
|
document.getElementById("munthserv").innerHTML = data.munthserv; |
||||||
|
document.getElementById("weekserv").innerHTML = data.weekserv; |
||||||
|
} |
||||||
|
if (data.label3 === 'count1') {//счетчик секунд |
||||||
|
document.getElementById("countData1").innerHTML = data.value; |
||||||
|
}; |
||||||
|
if (data.label3 === 'count') {//работа сервера время |
||||||
|
document.getElementById("t10").innerHTML = data.value; |
||||||
|
}; |
||||||
|
if (data.label3 === 'count2') {//NTP время |
||||||
|
document.getElementById("timeserv1").innerHTML = data.value; |
||||||
|
}; |
||||||
|
if (data.id === 'week') {//'{"id":"week","timer1_week":"1111100","timer2_week":"0000011","timer3_week":"0000000"}'; |
||||||
|
var DataWeek = event.data; |
||||||
|
console.log("week", event.data); |
||||||
|
week_json(DataWeek); |
||||||
|
} |
||||||
|
|
||||||
|
if (data.id === 'tout') {//{"id":"tout","t1":"011","t2":"100","t3":"010"} |
||||||
|
var DataOut = event.data; |
||||||
|
console.log("Out", event.data); |
||||||
|
out_json(DataOut); |
||||||
|
} |
||||||
|
} |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
} |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//******************************************************************************************************* |
||||||
|
|
||||||
|
|
||||||
|
function week_json(data){//парсим строку week |
||||||
|
const weekt = JSON.parse(data); |
||||||
|
if (weekt.id === 'week') { |
||||||
|
//{"id":"week","timer1_week":"0111100","timer2_week":"1000011","timer3_week":"0101010"}; |
||||||
|
const weekt1 = Array.from(weekt.timer1_week).map(Number);//"1111100"=>{1,1,1,1,1,0,0} строку в массив чисел |
||||||
|
// console.log(weekt1); |
||||||
|
// Заполните поля чекбоксов данными из JSON |
||||||
|
var checkboxes1 = document.getElementsByName('week1');//заполняем чекбоксы с именем week1 |
||||||
|
for (let i = 0; i < checkboxes1.length; i++) { |
||||||
|
checkboxes1[i].checked = weekt1[i];//значение в чекбоксе берем из массива {1,1,1,1,1,0,0} |
||||||
|
} |
||||||
|
const weekt2 = Array.from(weekt.timer2_week).map(Number); |
||||||
|
// console.log(weekt2); |
||||||
|
// Заполните поля чекбоксов данными из JSON |
||||||
|
var checkboxes2 = document.getElementsByName('week2'); |
||||||
|
for (let i = 0; i < checkboxes2.length; i++) { |
||||||
|
checkboxes2[i].checked = weekt2[i]; |
||||||
|
} |
||||||
|
const weekt3 = Array.from(weekt.timer3_week).map(Number); |
||||||
|
// console.log(weekt3); |
||||||
|
// Заполните поля чекбоксов данными из JSON |
||||||
|
var checkboxes3 = document.getElementsByName('week3'); |
||||||
|
for (let i = 0; i < checkboxes2.length; i++) { |
||||||
|
checkboxes3[i].checked = weekt3[i]; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
//***************************************************************************************** |
||||||
|
function out_json(data){//{"id":"tout","t1":"011","t2":"100","t3":"010"}запись данных в чекбоксы 1 2 3 |
||||||
|
const out = JSON.parse(data); |
||||||
|
if (out.id === 'tout') { |
||||||
|
const out1 = Array.from(out.t1).map(Number);//"100"=>{1,0,0} строку в массив чисел |
||||||
|
// Заполните поля чекбоксов данными из JSON |
||||||
|
var checkboxes1 = document.getElementsByName('out1');//заполняем чекбоксы с именем out1 |
||||||
|
for (let i = 0; i < checkboxes1.length; i++) { |
||||||
|
checkboxes1[i].checked = out1[i];//значение в чекбоксе берем из массива {1,0,0} |
||||||
|
} |
||||||
|
const out2 = Array.from(out.t2).map(Number);//"110"=>{1,1,0} строку в массив чисел |
||||||
|
// Заполните поля чекбоксов данными из JSON |
||||||
|
var checkboxes2 = document.getElementsByName('out2');//заполняем чекбоксы с именем out2 |
||||||
|
for (let i = 0; i < checkboxes2.length; i++) { |
||||||
|
checkboxes2[i].checked = out2[i];//значение в чекбоксе берем из массива {1,1,0} |
||||||
|
} |
||||||
|
const out3 = Array.from(out.t3).map(Number);//"000"=>{0,0,0} строку в массив чисел |
||||||
|
// Заполните поля чекбоксов данными из JSON |
||||||
|
var checkboxes3 = document.getElementsByName('out3');//заполняем чекбоксы с именем out3 |
||||||
|
//console.log("out3", checkboxes1); |
||||||
|
for (let i = 0; i < checkboxes3.length; i++) { |
||||||
|
checkboxes3[i].checked = out3[i];//значение в чекбоксе берем из массива {0,0,0} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
//*************************************************************************************************** |
||||||
|
|
||||||
|
// Скрываем все таймеры, кроме выбранного |
||||||
|
function hideTimers(timerId) { |
||||||
|
const timerElements = document.querySelectorAll('.timer'); |
||||||
|
timerElements.forEach(function (element) { |
||||||
|
element.style.display = 'none'; |
||||||
|
}); |
||||||
|
const selectedTimer = document.getElementById(timerId); |
||||||
|
if (selectedTimer) { |
||||||
|
selectedTimer.style.display = 'block'; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// Изначально скрываем все таймеры |
||||||
|
hideTimers('timer1'); |
||||||
|
|
||||||
|
// Обработчик изменения выбора таймера |
||||||
|
document.getElementById('timerSelector').addEventListener('change', function () { |
||||||
|
const selectedTimerId = this.value; |
||||||
|
hideTimers(selectedTimerId); |
||||||
|
}); |
||||||
|
|
||||||
|
document.getElementById('saveButton').addEventListener('click', function () { |
||||||
|
const selectedTimerId = document.getElementById('timerSelector').value; |
||||||
|
const selectedTimer = document.getElementById(selectedTimerId); |
||||||
|
|
||||||
|
// Создаем объект, содержащий настройки таймера |
||||||
|
const timersData = {//время |
||||||
|
timer1: [], |
||||||
|
timer2: [], |
||||||
|
timer3: [] |
||||||
|
}; |
||||||
|
const weekData = {//день недели |
||||||
|
"id":"week", |
||||||
|
timer1_week:"", |
||||||
|
timer2_week:"", |
||||||
|
timer3_week:"" |
||||||
|
}; |
||||||
|
const outData = {//номер выхода на кот подключаем |
||||||
|
"id":"tout", |
||||||
|
t1:"", |
||||||
|
t2:"", |
||||||
|
t3:"" |
||||||
|
}; |
||||||
|
// Собираем данные для Таймера 1 |
||||||
|
const timer1Items = document.querySelectorAll('.timer:nth-child(1) input[type="time"]'); |
||||||
|
timer1Items.forEach(function (item) { |
||||||
|
let days = ""; |
||||||
|
var checkboxes = document.getElementsByName('week1');//считываем чекбокс в строку типа 1111100 |
||||||
|
for (var checkbox of checkboxes) |
||||||
|
{ |
||||||
|
days+=(checkbox.checked ? 1 : 0); |
||||||
|
} |
||||||
|
let out = ""; |
||||||
|
var checkboxes = document.getElementsByName('out1');//считываем чекбокс в строку типа 1111100 |
||||||
|
for (var checkbox of checkboxes) |
||||||
|
{ |
||||||
|
out+=(checkbox.checked ? 1 : 0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
outData.t1 = out; |
||||||
|
weekData.timer1_week = days; |
||||||
|
timersData.timer1.push(item.value); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
// Собираем данные для Таймера 2 |
||||||
|
const timer2Items = document.querySelectorAll('.timer:nth-child(2) input[type="time"]'); |
||||||
|
timer2Items.forEach(function (item) { |
||||||
|
timersData.timer2.push(item.value); |
||||||
|
let days = ""; |
||||||
|
var checkboxes = document.getElementsByName('week2'); |
||||||
|
for (var checkbox of checkboxes) |
||||||
|
{ |
||||||
|
days+=(checkbox.checked ? 1 : 0); |
||||||
|
}; |
||||||
|
let out = ""; |
||||||
|
var checkboxes = document.getElementsByName('out2');//считываем чекбокс в строку типа 1111100 |
||||||
|
for (var checkbox of checkboxes) |
||||||
|
{ |
||||||
|
out+=(checkbox.checked ? 1 : 0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
outData.t2 = out; |
||||||
|
weekData.timer2_week = days; |
||||||
|
}); |
||||||
|
|
||||||
|
// Собираем данные для Таймера 3 |
||||||
|
const timer3Items = document.querySelectorAll('.timer:nth-child(3) input[type="time"]'); |
||||||
|
timer3Items.forEach(function (item) { |
||||||
|
timersData.timer3.push(item.value); |
||||||
|
|
||||||
|
let days = ""; |
||||||
|
var checkboxes = document.getElementsByName('week3'); |
||||||
|
for (var checkbox of checkboxes) |
||||||
|
{ |
||||||
|
days+=(checkbox.checked ? 1 : 0); |
||||||
|
}; |
||||||
|
let out = ""; |
||||||
|
var checkboxes = document.getElementsByName('out3');//считываем чекбокс в строку типа 1111100 |
||||||
|
for (var checkbox of checkboxes) |
||||||
|
{ |
||||||
|
out+=(checkbox.checked ? 1 : 0); |
||||||
|
} |
||||||
|
outData.t3 = out; |
||||||
|
weekData.timer3_week = days; |
||||||
|
}); |
||||||
|
|
||||||
|
// Преобразуем объект в JSON-строку |
||||||
|
const jsonData = JSON.stringify(timersData); |
||||||
|
const jsonWeek = JSON.stringify(weekData); |
||||||
|
const jsonout = JSON.stringify(outData); |
||||||
|
|
||||||
|
// Выводим JSON-данные в консоль |
||||||
|
console.log(jsonData); |
||||||
|
console.log(jsonWeek); |
||||||
|
console.log(jsonout); |
||||||
|
|
||||||
|
webSocket.send(jsonWeek);//отправка строки через websoket |
||||||
|
webSocket.send(jsonData); |
||||||
|
webSocket.send(jsonout); |
||||||
|
}); |
||||||
|
|
||||||
|
// Получаем элементы DOM |
||||||
|
const checkboxes = document.querySelectorAll('.myCheckbox'); |
||||||
|
const checkboxValues = document.getElementById('checkboxValues'); |
||||||
|
|
||||||
|
// Создаем строку для хранения значений |
||||||
|
let valuesString = '0000000'; |
||||||
|
|
||||||
|
// Добавляем обработчик события "change" к каждому чекбоксу |
||||||
|
checkboxes.forEach((checkbox, index) => { |
||||||
|
checkbox.addEventListener('change', function () { |
||||||
|
// Обновляем значение в строке |
||||||
|
valuesString = valuesString.substring(0, index) + (checkbox.checked ? '1' : '0') + valuesString.substring(index + 1); |
||||||
|
|
||||||
|
// Выводим обновленную строку в элементе DOM |
||||||
|
//checkboxValues.textContent = valuesString; |
||||||
|
|
||||||
|
// Выводим значение в консоль браузера |
||||||
|
console.log('Checkbox values: ' + valuesString); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,320 @@ |
|||||||
|
@charset "utf-8"; |
||||||
|
|
||||||
|
html {font-family: Arial; display: inline-block; text-align: center;} |
||||||
|
body { |
||||||
|
background-color: #C9C6C5; |
||||||
|
color: #FFFFFF; |
||||||
|
font-family: Arial, sans-serif; |
||||||
|
font-size: 14px; |
||||||
|
width: 100%; |
||||||
|
margin-top: 5px; |
||||||
|
background-image: url(fon.jpg); |
||||||
|
position: static; |
||||||
|
margin-left: 0px; |
||||||
|
} |
||||||
|
a{ |
||||||
|
color: #FFFFFF; |
||||||
|
margin-left: 17px; |
||||||
|
} |
||||||
|
a:visited { |
||||||
|
color: #FFFFFF; /* Цвет посещенных ссылок */ |
||||||
|
text-decoration: none; |
||||||
|
margin-left: 17px; |
||||||
|
} |
||||||
|
a:active { |
||||||
|
color: #A7F095; /* Цвет активных ссылок */ |
||||||
|
margin-left: 17px; |
||||||
|
} |
||||||
|
a:hover { |
||||||
|
color: #AFDAF4; /* Цвет ссылок при наведении мыши*/ |
||||||
|
margin-left: 17px; |
||||||
|
} |
||||||
|
button { |
||||||
|
padding: 10px 20px; |
||||||
|
font: inherit; |
||||||
|
transition: color 0s linear 2s; |
||||||
|
} |
||||||
|
|
||||||
|
button:active { |
||||||
|
color: #047F44; |
||||||
|
transition-delay: 0s; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#header { |
||||||
|
background: #F5DEB3; |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
#container { |
||||||
|
background-color: #FFFFFF; |
||||||
|
margin-right: auto; |
||||||
|
margin-left: auto; |
||||||
|
margin-bottom: auto; |
||||||
|
text-align: center; |
||||||
|
width: 80%; |
||||||
|
height: 84px; |
||||||
|
margin-top: 7px; |
||||||
|
padding-top: 1px; |
||||||
|
} |
||||||
|
|
||||||
|
#nav |
||||||
|
{ |
||||||
|
background-color: #2F4468; |
||||||
|
width: 100%; |
||||||
|
color: #FFFFFF; |
||||||
|
font-size: small; |
||||||
|
margin-left: -18px; |
||||||
|
margin-top: -3px; |
||||||
|
} |
||||||
|
#nav1 |
||||||
|
{ |
||||||
|
background-color: #2F4468; |
||||||
|
width: 100%; |
||||||
|
color: #110FF8; |
||||||
|
font-size: small; |
||||||
|
margin-top: 64px; |
||||||
|
margin-right: 64px; |
||||||
|
margin-bottom: 64px; |
||||||
|
margin-left: 64px; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#sidebar { |
||||||
|
background-color: #8CA2AF; |
||||||
|
float: left; |
||||||
|
width: 20%; |
||||||
|
position: static; |
||||||
|
margin-top: -1px; |
||||||
|
height: 420px; |
||||||
|
min-width: 0px; |
||||||
|
} |
||||||
|
|
||||||
|
#content { |
||||||
|
background-color: #F8E6C1; |
||||||
|
float: right; |
||||||
|
width: 80%; |
||||||
|
color: #14437A; |
||||||
|
margin-top: -2px; |
||||||
|
opacity: 0.91; |
||||||
|
} |
||||||
|
#content1 { |
||||||
|
background-color: #F8E6C1; |
||||||
|
width: 80%; |
||||||
|
color: #14437A; |
||||||
|
margin-right: auto; |
||||||
|
margin-left: auto; |
||||||
|
opacity: 0.91; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
#clear { |
||||||
|
clear: both; |
||||||
|
} |
||||||
|
|
||||||
|
#footer { |
||||||
|
background: #00BFFF; |
||||||
|
width: 100%; |
||||||
|
height: 40px; |
||||||
|
} |
||||||
|
|
||||||
|
.topnav { |
||||||
|
overflow: hidden; |
||||||
|
background-color: #2f4468; |
||||||
|
color: white; |
||||||
|
font-size: 1.7rem; |
||||||
|
height: 65px; |
||||||
|
line-height: 3px; |
||||||
|
|
||||||
|
} |
||||||
|
.top{ |
||||||
|
overflow: hidden; |
||||||
|
background-color: #8CA2AF; |
||||||
|
color: white; |
||||||
|
width: 100%; |
||||||
|
|
||||||
|
} |
||||||
|
.top1{ |
||||||
|
overflow: hidden; |
||||||
|
background-color: #8CA2AF; |
||||||
|
color: white; |
||||||
|
width: 10%; |
||||||
|
|
||||||
|
} |
||||||
|
.top2{ |
||||||
|
overflow: hidden; |
||||||
|
background-color: #B59D69; |
||||||
|
color: white; |
||||||
|
width: 100%; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
.card.temperature { color: #fd7e14; } |
||||||
|
.card.humidity { color: #1b78e2; } |
||||||
|
.card.but { color: #3F97E8; } |
||||||
|
|
||||||
|
|
||||||
|
.card { |
||||||
|
background-color: #F9F9F7; |
||||||
|
box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5); |
||||||
|
} |
||||||
|
.cards { |
||||||
|
max-width: 901px; |
||||||
|
margin-right: auto; |
||||||
|
margin-left: auto; |
||||||
|
display: grid; |
||||||
|
grid-gap: 2rem; |
||||||
|
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); |
||||||
|
min-height: 133px; |
||||||
|
} |
||||||
|
.reading { |
||||||
|
font-size: 2.8rem; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#navigation2 { |
||||||
|
font-size: small; |
||||||
|
color: #3E73A7; |
||||||
|
float: left; |
||||||
|
border-top-width: thick; |
||||||
|
padding-left: 20px; |
||||||
|
} |
||||||
|
#navigation1 { |
||||||
|
font-size: small; |
||||||
|
color: #FFFFFF; |
||||||
|
float: left; |
||||||
|
border-top-width: thick; |
||||||
|
padding-left: 20px; |
||||||
|
} |
||||||
|
|
||||||
|
.times{ |
||||||
|
font-size: xx-large; |
||||||
|
margin-top: -50px; |
||||||
|
background-color: #2F4468; |
||||||
|
color: #FFFFFF; |
||||||
|
height: 57px; |
||||||
|
line-height: 56px; |
||||||
|
} |
||||||
|
.manth{ |
||||||
|
color: #02087C; |
||||||
|
margin-top: 0px; |
||||||
|
background-color: #EF7320; |
||||||
|
height: 2pc; |
||||||
|
font-size: large; |
||||||
|
padding-top: 2px; |
||||||
|
opacity: 1; |
||||||
|
line-height: 3%; |
||||||
|
} |
||||||
|
.servertime { |
||||||
|
margin-top: 37px; |
||||||
|
} |
||||||
|
.data{ |
||||||
|
color: #2F4468; |
||||||
|
background-color: #FFFFFF; |
||||||
|
margin-top: -93px; |
||||||
|
height: 146px; |
||||||
|
font-size: 92px; |
||||||
|
line-height: 97px; |
||||||
|
} |
||||||
|
.week{ |
||||||
|
color: #000006; |
||||||
|
margin-top: -91px; |
||||||
|
background-color: #EF7320; |
||||||
|
height: 2pc; |
||||||
|
font-size: large; |
||||||
|
line-height: 30px; |
||||||
|
|
||||||
|
} |
||||||
|
.levnav{ |
||||||
|
font-size: large; |
||||||
|
color: #FFFFFF; |
||||||
|
margin-top: 5px; |
||||||
|
margin-left: 25px; |
||||||
|
line-height: 11px; |
||||||
|
margin-right: 31px; |
||||||
|
text-decoration: none; |
||||||
|
text-align: left; |
||||||
|
|
||||||
|
} |
||||||
|
#containerinf { |
||||||
|
background-color: #B59D69; |
||||||
|
margin-right: auto; |
||||||
|
margin-left: auto; |
||||||
|
margin-bottom: auto; |
||||||
|
text-align: center; |
||||||
|
width: 80%; |
||||||
|
height: 84px; |
||||||
|
margin-top: 7px; |
||||||
|
padding-top: 1px; |
||||||
|
opacity: 1; |
||||||
|
} |
||||||
|
#contentinfo { |
||||||
|
background-color: #ECD9B1; |
||||||
|
width: 100%; |
||||||
|
color: #14437A; |
||||||
|
margin-top: -2px; |
||||||
|
opacity: 0.83; |
||||||
|
} |
||||||
|
.contentgraf { |
||||||
|
background-color: #FFFFFF; |
||||||
|
width: 100%; |
||||||
|
color: #14437A; |
||||||
|
margin-top: -2px; |
||||||
|
|
||||||
|
} |
||||||
|
#tablinfo{ |
||||||
|
background-color: #ECD9B1; |
||||||
|
width: 35%; |
||||||
|
color: #14437A; |
||||||
|
margin-top: 11px; |
||||||
|
opacity: 0.83; |
||||||
|
text-align: center; |
||||||
|
margin-right: auto; |
||||||
|
margin-left: auto; |
||||||
|
|
||||||
|
} |
||||||
|
.switch { |
||||||
|
position: relative; |
||||||
|
display: inline-block; |
||||||
|
width: 120px; |
||||||
|
height: 68px} |
||||||
|
.switch input {display: none} |
||||||
|
.slider { |
||||||
|
position: absolute; |
||||||
|
top: 0; |
||||||
|
left: 0; |
||||||
|
right: 0; bottom: 0; |
||||||
|
background-color: #F0D2A8; |
||||||
|
border-radius: 34px} |
||||||
|
.slider:before { |
||||||
|
position: absolute; |
||||||
|
content: ""; |
||||||
|
height: 52px; |
||||||
|
width: 52px; |
||||||
|
left: 8px; |
||||||
|
bottom: 8px; |
||||||
|
background-color: #fff; |
||||||
|
-webkit-transition: .4s; |
||||||
|
transition: .4s; |
||||||
|
border-radius: 68px} |
||||||
|
input:checked+.slider {background-color: #2196F3} |
||||||
|
input:checked+.slider:before {-webkit-transform: translateX(52px); |
||||||
|
-ms-transform: translateX(52px); transform: translateX(52px)} |
||||||
|
.slider2 { -webkit-appearance: none; margin: 14px; width: 360px; height: 15px; background: #EAD7AF; |
||||||
|
outline: none; -webkit-transition: .2s; transition: opacity .2s;} |
||||||
|
.slider2::-webkit-slider-thumb {-webkit-appearance: none; appearance: none; width: 35px; height: 35px; background: #003249; cursor: pointer;} |
||||||
|
.slider2::-moz-range-thumb { width: 15px; height: 35px; background: #003249; cursor: pointer; } |
||||||
|
input[type=time] { |
||||||
|
border: #01094B; |
||||||
|
|
||||||
|
color: #01094B; |
||||||
|
padding: 2px; |
||||||
|
margin: 3px; |
||||||
|
font-size: 22px; |
||||||
|
font-family: helvetica; |
||||||
|
width: 93px; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,289 @@ |
|||||||
|
|
||||||
|
<!DOCTYPE HTML><html> |
||||||
|
|
||||||
|
<head> |
||||||
|
<title>ESP-NOW DASHBOARD</title> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"> |
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="icon" href="favicon.ico"> |
||||||
|
|
||||||
|
<link rel="icon" type="png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
|
||||||
|
<div id="content1"> |
||||||
|
<div class="topnav"> |
||||||
|
<p><h3>ESP-Домашний сервер</h3><span class="data"></span><span id="dataserv">%dataserv%</span></p> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="top2"> |
||||||
|
|
||||||
|
<nav1><a href="index.html" title="главное меню"> Главное меню </a></nav1> |
||||||
|
|
||||||
|
<nav1><a href="setting.html" title="настройки"> настройки </a></nav1> |
||||||
|
|
||||||
|
<nav1><a href="inform.html" title="информация"> информация </a></nav1> |
||||||
|
|
||||||
|
</div> |
||||||
|
<div style="text-align: center;"> |
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Таймер</h1> |
||||||
|
<div class="cards"> |
||||||
|
|
||||||
|
|
||||||
|
<div class="card but"> |
||||||
|
<p><span id="timer1">%timer1%</span> минут</p> |
||||||
|
<p><input type="range" onmousechange="updateSliderTimer1(this)" onchange="updateSliderTimer1(this)" oninput="updateSliderTimer1(this)" id="Timer_slider1" min="0" max="120" value="%timer1%" step="5" class="slider2"></p> |
||||||
|
%BUTTONPLACEHOLDER1% |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="card but"> |
||||||
|
<p><span id="timer2">%timer2%</span> минут</p> |
||||||
|
<p><input type="range" onmousechange="updateSliderTimer2(this)" oninput="updateSliderTimer2(this)" onchange="updateSliderTimer2(this)" id="Timer_slider2" min="0" max="120" value="%timer2%" step="5" class="slider2"></p> |
||||||
|
%BUTTONPLACEHOLDER2% |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="card but"> |
||||||
|
%BUTTONPLACEHOLDER3% |
||||||
|
</div> |
||||||
|
<div class="card but"> |
||||||
|
%BUTTONPLACEHOLDER4% |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="clear"> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="top"> |
||||||
|
<font size="2" > </font> |
||||||
|
<font color="#CF7071" size="3"><span id="timeserv1">0:00</span></font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div id="clear"> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
|
||||||
|
function toggleCheckbox(element) {//вкл чекбокса передть на сервер (element.id номер бокса)состояние(state=1или0) |
||||||
|
var xhr = new XMLHttpRequest(); |
||||||
|
if(element.checked){ xhr.open("GET", "/update?output="+element.id+"&state=1", true); } |
||||||
|
else { xhr.open("GET", "/update?output="+element.id+"&state=0", true); } |
||||||
|
xhr.send(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
setInterval(function ( ) { |
||||||
|
var xhttp = new XMLHttpRequest(); |
||||||
|
xhttp.onreadystatechange = function() { |
||||||
|
if (this.readyState == 4 && this.status == 200) {//Если readyState равно 4, это означает, что запрос выполнен |
||||||
|
var inputChecked; |
||||||
|
//cостояние чекбокса передается строкой типа 101 те 1й-вкл 2й-выкл 3й-вкл |
||||||
|
response=Number(this.responseText)//далее расшифровуем строку |
||||||
|
if( response-99 >0)//1xx |
||||||
|
{inputChecked = true; |
||||||
|
document.getElementById("4").checked = inputChecked;//состояние чекбокса |
||||||
|
// 110 100 111 101 |
||||||
|
if( response-109 >0) |
||||||
|
{inputChecked = true; |
||||||
|
document.getElementById("26").checked = inputChecked;//состояние чекбокса |
||||||
|
//10 11 |
||||||
|
if( response-110 >0)//10 11 |
||||||
|
{inputChecked = true; |
||||||
|
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||||
|
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||||
|
} |
||||||
|
else |
||||||
|
{inputChecked = false; |
||||||
|
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||||
|
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{inputChecked = false; |
||||||
|
document.getElementById("26").checked = inputChecked;//состояние чекбокса |
||||||
|
if( response-100 >0)//10 11 |
||||||
|
{inputChecked = true; |
||||||
|
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||||
|
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||||
|
} |
||||||
|
else |
||||||
|
{inputChecked = false; |
||||||
|
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||||
|
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
else//000 |
||||||
|
{ inputChecked = false; |
||||||
|
document.getElementById("4").checked = inputChecked;//состояние чекбокса |
||||||
|
// 10 11 01 00 |
||||||
|
if( response-9 >0) |
||||||
|
{inputChecked = true; |
||||||
|
document.getElementById("26").checked = inputChecked;//состояние чекбокса |
||||||
|
if( response-10 >0) |
||||||
|
{inputChecked = true; |
||||||
|
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||||
|
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{inputChecked = false; |
||||||
|
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||||
|
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
else |
||||||
|
{inputChecked = false; |
||||||
|
document.getElementById("26").checked = inputChecked;//состояние чекбокса |
||||||
|
if( response >0) |
||||||
|
{inputChecked = true; |
||||||
|
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||||
|
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||||
|
} |
||||||
|
else |
||||||
|
{inputChecked = false; |
||||||
|
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||||
|
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
xhttp.open("GET", "/state", true);//запрос на сервер о состоянии выключателя |
||||||
|
xhttp.send(); |
||||||
|
}, 1000 ) ;//1000 -это раз в 1сек |
||||||
|
|
||||||
|
|
||||||
|
if (!!window.EventSource) { |
||||||
|
var source = new EventSource('/events'); |
||||||
|
|
||||||
|
source.addEventListener('open', function(e) { |
||||||
|
console.log("Events Connected"); |
||||||
|
}, false); |
||||||
|
source.addEventListener('error', function(e) { |
||||||
|
if (e.target.readyState != EventSource.OPEN) { |
||||||
|
console.log("Events Disconnected"); |
||||||
|
} |
||||||
|
}, false); |
||||||
|
|
||||||
|
source.addEventListener('message', function(e) { |
||||||
|
console.log("message", e.data); |
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||||
|
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||||
|
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('timeserv', function(e) {//ремя работы сервера |
||||||
|
document.getElementById("timeserv1").innerHTML =e.data; |
||||||
|
}, false); |
||||||
|
|
||||||
|
// source.addEventListener('t10', function(e) {//ремя работы сервера |
||||||
|
// document.getElementById("t10").innerHTML =e.data; |
||||||
|
// }, false); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('Timer1', function(e) {//время таймера1 |
||||||
|
|
||||||
|
document.getElementById("Timer_slider1").innerHTML =e.data; |
||||||
|
document.getElementById("timer1").innerHTML = e.data; |
||||||
|
|
||||||
|
updateSliderPosition1(e.data); |
||||||
|
}, false); |
||||||
|
|
||||||
|
source.addEventListener('Timer2', function(e) {//время таймера2 |
||||||
|
document.getElementById("Timer_slider2").innerHTML =e.data; |
||||||
|
document.getElementById("timer2").innerHTML = e.data; |
||||||
|
updateSliderPosition2(e.data); |
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
function updateSliderTimer1(element) { |
||||||
|
var sliderValue1 = document.getElementById("Timer_slider1").value;//В следующей строке отображается текущее значение слайдера по его идентификатору и сохраняется в переменной JavaScript sliderValue |
||||||
|
|
||||||
|
document.getElementById("timer1").innerHTML = sliderValue1;//После этого мы устанавливаем метку слайдера (идентификатор которой - timer1) на значение, сохраненное в переменной sliderValue. |
||||||
|
|
||||||
|
var xhr = new XMLHttpRequest(); |
||||||
|
xhr.open("GET", "/slider1?value="+sliderValue1, true); |
||||||
|
xhr.send(); |
||||||
|
updateSliderPosition1(sliderValue1); |
||||||
|
} |
||||||
|
function updateSliderTimer2(element) { |
||||||
|
|
||||||
|
var sliderValue2 = document.getElementById("Timer_slider2").value; |
||||||
|
|
||||||
|
document.getElementById("timer2").innerHTML = sliderValue2; |
||||||
|
|
||||||
|
var xhr = new XMLHttpRequest(); |
||||||
|
xhr.open("GET", "/slider2?value="+sliderValue2, true); |
||||||
|
xhr.send(); |
||||||
|
updateSliderPosition2(sliderValue2); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
function updateSliderPosition1(value) {//обновление положения ползунка т1 |
||||||
|
const slider = document.getElementById('Timer_slider1'); |
||||||
|
slider.value = value; |
||||||
|
} |
||||||
|
function updateSliderPosition2(value) {//обновление положения ползунка т2 |
||||||
|
const slider = document.getElementById('Timer_slider2'); |
||||||
|
slider.value = value; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,192 @@ |
|||||||
|
|
||||||
|
<!DOCTYPE HTML><html> |
||||||
|
|
||||||
|
<head> |
||||||
|
<title>ESP-NOW DASHBOARD</title> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"> |
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="icon" href="favicon.ico"> |
||||||
|
|
||||||
|
<link rel="icon" type="png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
|
||||||
|
<div id="content1"> |
||||||
|
<div class="topnav"> |
||||||
|
<p><h3>ESP-Домашний сервер</h3><span class="data"></span><span id="dataserv">%dataserv%</span></p> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="top2"> |
||||||
|
|
||||||
|
<nav1><a href="index.html" title="главное меню"> Главное меню </a></nav1> |
||||||
|
|
||||||
|
<nav1><a href="setting.html" title="настройки"> настройки </a></nav1> |
||||||
|
|
||||||
|
<nav1><a href="inform.html" title="информация"> информация </a></nav1> |
||||||
|
|
||||||
|
</div> |
||||||
|
<div style="text-align: center;"> |
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Управление</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Time <span id="tim2"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card but"> |
||||||
|
%BUTTONPLACEHOLDER1% |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="card but"> |
||||||
|
%BUTTONPLACEHOLDER2% |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="card but"> |
||||||
|
%BUTTONPLACEHOLDER3% |
||||||
|
</div> |
||||||
|
<div class="card but"> |
||||||
|
%BUTTONPLACEHOLDER4% |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="clear"> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="top"> |
||||||
|
<font size="2" > </font> |
||||||
|
<font color="#CF7071" size="3"><span id="timeserv1">0:00</span></font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div id="clear"> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
|
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные |
||||||
|
var tabd=event.data; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(isJsonString(tabd)==1) |
||||||
|
{var data = JSON.parse(event.data);//получаем и парсим выходы jsonStringout={"id":"out","out1":"101"} |
||||||
|
if (data.id === 'out') { |
||||||
|
const out = Array.from(data.out1).map(Number);//"101"=>{1,0,1} строку в массив |
||||||
|
console.log("readings", out); |
||||||
|
if(out[0]==1){ document.getElementById("4").checked = true;} |
||||||
|
else{document.getElementById("4").checked = false;} |
||||||
|
if(out[1]==1){ document.getElementById("26").checked = true;} |
||||||
|
else{document.getElementById("26").checked = false;} |
||||||
|
if(out[2]==1){ document.getElementById("27").checked = true;} |
||||||
|
else{document.getElementById("27").checked = false;} |
||||||
|
if(out[3]==1){ document.getElementById("55").checked = true;} |
||||||
|
else{document.getElementById("55").checked = false;} |
||||||
|
}; |
||||||
|
if (data.id === '2') { |
||||||
|
console.log("readings", event.data); |
||||||
|
document.getElementById("t1").innerHTML = data.tkom1; |
||||||
|
document.getElementById("h1").innerHTML = data.hkom1; |
||||||
|
}; |
||||||
|
if (data.label3 === 'count2') { |
||||||
|
document.getElementById("timeserv1").innerHTML = data.value; |
||||||
|
}; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
}; |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function isJsonString(str) {//проверка строки на json |
||||||
|
try { |
||||||
|
JSON.parse(str); |
||||||
|
} catch (e) { |
||||||
|
//console.log("isJsonString", false); |
||||||
|
return false; |
||||||
|
|
||||||
|
} |
||||||
|
//console.log("isJsonString", true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
function toggleCheckbox(element) {//вкл чекбокса передaть на сервер (element.id номер бокса)состояние(state=1или0) |
||||||
|
// var xhr = new XMLHttpRequest(); |
||||||
|
console.log("toggleCheckbox", element.checked); |
||||||
|
const outData = { |
||||||
|
ido :"", |
||||||
|
out:"" |
||||||
|
} |
||||||
|
outData.ido=element.id; |
||||||
|
if(element.checked) |
||||||
|
{ //xhr.open("GET", "/update?output="+element.id+"&state=1", true) |
||||||
|
|
||||||
|
outData.out='1'; |
||||||
|
// var out1 = document.getElementsById('4');// |
||||||
|
// var out2 = document.getElementsById('26');// |
||||||
|
// var out3 = document.getElementsById('27');// |
||||||
|
console.log("ON", element.id); |
||||||
|
// webSocket.send(jsonData); |
||||||
|
} |
||||||
|
else { outData.out='0'; |
||||||
|
console.log("OFF", element.id); } |
||||||
|
const jsonout = JSON.stringify(outData); |
||||||
|
//console.log("JSON", jsonout);//{"ido":"4","out":1} |
||||||
|
webSocket.send(jsonout); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,109 @@ |
|||||||
|
|
||||||
|
<!DOCTYPE HTML><html> |
||||||
|
|
||||||
|
<head> |
||||||
|
<title>ESP-NOW DASHBOARD</title> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"> |
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="icon" href="favicon.ico"> |
||||||
|
|
||||||
|
<link rel="icon" type="png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
|
||||||
|
<div id="content1"> |
||||||
|
<div class="topnav"> |
||||||
|
<p><h3>ESP-Домашний сервер</h3><span class="data"></span><span id="dataserv">%dataserv%</span></p> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="top2"> |
||||||
|
|
||||||
|
<nav1><a href="index.html" title="главное меню"> Главное меню </a></nav1> |
||||||
|
|
||||||
|
<nav1><a href="setting.html" title="настройки"> настройки </a></nav1> |
||||||
|
|
||||||
|
<nav1><a href="inform.html" title="информация"> информация </a></nav1> |
||||||
|
|
||||||
|
</div> |
||||||
|
<div style="text-align: center;"> |
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Управление</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Time <span id="tim2"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="clear"> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
</div> |
||||||
|
<div align="center"> |
||||||
|
<form> |
||||||
|
<input type="button" value="Войти на страницу" onClick="Input()"> |
||||||
|
</form> |
||||||
|
<div id="clear"> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="top"> |
||||||
|
<font size="2" > </font> |
||||||
|
<font color="#CF7071" size="3"><span id="timeserv1">0:00</span></font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div id="clear"> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
function Input(){ |
||||||
|
login_ok = false; |
||||||
|
user_name = ""; |
||||||
|
password = ""; |
||||||
|
user_name = prompt("Логин",""); |
||||||
|
user_name = user_name.toLowerCase(); |
||||||
|
password = prompt("Пароль",""); |
||||||
|
password = password.toLowerCase(); |
||||||
|
if (user_name=="serg" && password=="1974") { |
||||||
|
login_ok = true; |
||||||
|
window.location = "index.html"; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
if (login_ok==false) alert("Неверный логин или пароль!"); |
||||||
|
} |
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,68 @@ |
|||||||
|
void Nrfsetup() |
||||||
|
{ |
||||||
|
if (! radio.begin()) |
||||||
|
{ |
||||||
|
// if(!SD.begin()){
|
||||||
|
Serial.println("Radio is failed"); |
||||||
|
// return;
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
Serial.println("Radio begin"); |
||||||
|
} |
||||||
|
radio.setChannel(100); |
||||||
|
radio.setPayloadSize(16);//должно быть16
|
||||||
|
radio.setAddressWidth(5); |
||||||
|
radio.setAutoAck( 0 ,false); |
||||||
|
radio.setCRCLength(RF24_CRC_16); |
||||||
|
radio.setDataRate(RF24_2MBPS); |
||||||
|
radio.openReadingPipe(0,pip); |
||||||
|
radio.startListening(); |
||||||
|
} |
||||||
|
|
||||||
|
void nrf() |
||||||
|
{ |
||||||
|
if (radio.available()){
|
||||||
|
radio.read(msg,16);
|
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
Serial.println(msg); |
||||||
|
parsmsg(); |
||||||
|
delay(0); |
||||||
|
if (radio.available()){radio.read(msg,16);
|
||||||
|
parsmsg();} |
||||||
|
delay(500); |
||||||
|
if (radio.available()){radio.read(msg,16);
|
||||||
|
parsmsg();} |
||||||
|
delay(500); |
||||||
|
if (radio.available()){radio.read(msg,16);
|
||||||
|
parsmsg();} |
||||||
|
delay(500); |
||||||
|
if (radio.available()){radio.read(msg,16);
|
||||||
|
parsmsg();} |
||||||
|
delay(500); |
||||||
|
if (radio.available()){radio.read(msg,16);
|
||||||
|
parsmsg();} |
||||||
|
delay(0); |
||||||
|
JSstringK();//создаем строку для сайта
|
||||||
|
delay(0); |
||||||
|
|
||||||
|
|
||||||
|
if(nt==2){saveul();}//t9 T2
|
||||||
|
if(nt==3){savebalk();}//t1 T3
|
||||||
|
if(nt==4){savek2();}//t2 T4
|
||||||
|
if(nt==5){savek1();}//t3 T5
|
||||||
|
if(nt==7){savekor();}//t5 T6
|
||||||
|
if(nt==9){saveakva();}//t7 T7
|
||||||
|
delay(0); |
||||||
|
if (radio.available()){radio.read(msg,16);} |
||||||
|
} |
||||||
|
//t1+138c347v524h5 балкон
|
||||||
|
//t2+243c401v528h моя комната
|
||||||
|
// t3+230c357v469h зал
|
||||||
|
// t5+230c357v469h коридор
|
||||||
|
//9d+088h866s00v улица восток
|
||||||
|
//t7+247c251c243c024 t1 t2 t3 akva
|
||||||
|
|
||||||
|
delay(0); |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,140 @@ |
|||||||
|
void ntp() |
||||||
|
{ |
||||||
|
// while(!timeClient.update()) {
|
||||||
|
// timeClient.forceUpdate();
|
||||||
|
//}
|
||||||
|
Serial.println("NTP"); |
||||||
|
ntp_on=0; |
||||||
|
if(!timeClient.update()) { |
||||||
|
for(int i=0; i<2 && !timeClient.update(); i++) |
||||||
|
{timeClient.forceUpdate(); |
||||||
|
if(i<1)//проверка подкл к NTP
|
||||||
|
{ntp_on=1; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
ntp_on=0;
|
||||||
|
} |
||||||
|
} |
||||||
|
}
|
||||||
|
else{ |
||||||
|
ntp_on=1;
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//если подкл
|
||||||
|
if(ntp_on==1) |
||||||
|
{ // The formattedDate comes with the following format:
|
||||||
|
// 2018-05-28T16:00:13Z
|
||||||
|
// We need to extract date and time
|
||||||
|
// formattedDate = timeClient.getFormattedDate();
|
||||||
|
formattedTime =timeClient.getFormattedTime(); |
||||||
|
Serial.println(formattedTime); |
||||||
|
Serial.println("NTP3"); |
||||||
|
// getDay
|
||||||
|
//getHours
|
||||||
|
//getMinutes
|
||||||
|
//getSeconds
|
||||||
|
//getFormattedTime
|
||||||
|
// formattedDate =timeClient.getFormattedDate();
|
||||||
|
// int splitT = formattedDate.indexOf("T");
|
||||||
|
// dayStamp = formattedDate.substring(0, splitT);
|
||||||
|
// Serial.println(timeClient.getDay());
|
||||||
|
|
||||||
|
// Extract time
|
||||||
|
// timeStamp = formattedDate.substring(splitT+1, formattedDate.length()-1);
|
||||||
|
// Serial.println("ntp");
|
||||||
|
// Serial.println(timeClient.getEpochTime());
|
||||||
|
stamp.getDateTime(timeClient.getEpochTime()); |
||||||
|
EpochTime=timeClient.getEpochTime(); |
||||||
|
Serial.println(EpochTime); |
||||||
|
// забираем вот так
|
||||||
|
// Serial.println(stamp.year);
|
||||||
|
Serial.println(stamp.month); |
||||||
|
Serial.println(stamp.day); |
||||||
|
// Serial.println(stamp.hour);
|
||||||
|
// Serial.println(stamp.minute);
|
||||||
|
// Serial.println(stamp.second);
|
||||||
|
Serial.println(stamp.dayOfWeek); |
||||||
|
timeserv=formatTimeDigits(stamp.hour,stamp.minute);
|
||||||
|
Serial.println("time"); |
||||||
|
Serial.println(timeserv); |
||||||
|
//dataserv=formatDateDigits(stamp.day, stamp.month, stamp.year);
|
||||||
|
//***************************Из ntp в ds 3231************************************
|
||||||
|
DateTime now = rtc.now(); |
||||||
|
if((stamp.day==now.day())&&(stamp.hour==now.hour())) |
||||||
|
{ rtc.adjust(DateTime(stamp.year,stamp.month, stamp.day, stamp.hour,stamp.minute,stamp.second)); |
||||||
|
Serial.println("NTP time write"); |
||||||
|
} |
||||||
|
|
||||||
|
hour1=stamp.hour; |
||||||
|
min1=stamp.minute; |
||||||
|
|
||||||
|
dataserv=stamp.day; |
||||||
|
munthserv=strm[stamp.month-1] ; |
||||||
|
weekserv=strweek[stamp.dayOfWeek]; |
||||||
|
// tweekday=stamp.dayOfWeek;//1-7
|
||||||
|
//Serial.println(timeserv);
|
||||||
|
//Serial.println(dataserv);
|
||||||
|
} |
||||||
|
else |
||||||
|
{Serial.println("NTP not c0nnect");//EpochTime=10983 3:03:03
|
||||||
|
//EpochTime=EpochTime;//если NTP не ответил читаем EpochTime с СД карты
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
char *formatTimeDigits(int hour, int minute) |
||||||
|
{ |
||||||
|
char *time_str = new char[5]; |
||||||
|
time_str[0] = '0' + (hour / 10); |
||||||
|
time_str[1] = '0' + (hour % 10); |
||||||
|
time_str[2] = ':'; |
||||||
|
time_str[3] = '0' + (minute / 10); |
||||||
|
time_str[4] = '0' + (minute % 10); |
||||||
|
time_str[5] = '\0'; |
||||||
|
|
||||||
|
return time_str; |
||||||
|
} |
||||||
|
|
||||||
|
char *formatDateDigits(int date, int mounth, int year) |
||||||
|
{ |
||||||
|
char *date_str = new char[9]; |
||||||
|
|
||||||
|
date_str[1] = '0' + (date % 10); |
||||||
|
date_str[2] = '/'; |
||||||
|
date_str[0] = '0' + (date / 10); |
||||||
|
date_str[3] = '0' + (mounth / 10); |
||||||
|
date_str[4] = '0' + (mounth % 10); |
||||||
|
date_str[5] = '/'; |
||||||
|
date_str[6] = '0' + ((year % 100) / 10); |
||||||
|
date_str[7] = '0' + (year % 10); |
||||||
|
date_str[8] = '\0'; |
||||||
|
|
||||||
|
return date_str; |
||||||
|
} |
||||||
|
|
||||||
|
void ntphome() |
||||||
|
{DateTime now = rtc.now(); |
||||||
|
// stamp.getDateTime(timeClient.getEpochTime());
|
||||||
|
// timeserv=formatTimeDigits(stamp.hour,stamp.minute);
|
||||||
|
timeserv=formatTimeDigits(now.hour(),now.minute());
|
||||||
|
// hour1=stamp.hour;
|
||||||
|
hour1=now.hour(); |
||||||
|
//min1=stamp.minute;
|
||||||
|
min1=now.minute(); |
||||||
|
|
||||||
|
// dataserv=formatDateDigits(stamp.day, stamp.month, stamp.year);
|
||||||
|
//dataserv=stamp.day;
|
||||||
|
dataserv=now.day(); |
||||||
|
data1=now.day(); |
||||||
|
munthserv=strm[now.month()-1] ; |
||||||
|
|
||||||
|
weekserv=strweek[now.dayOfTheWeek()]; |
||||||
|
|
||||||
|
tweekday=now.dayOfTheWeek(); |
||||||
|
month1=now.month(); |
||||||
|
year1=now.year(); |
||||||
|
Serial.println("time"); |
||||||
|
Serial.println(timeserv); |
||||||
|
} |
||||||
@ -0,0 +1,74 @@ |
|||||||
|
void outconvert() |
||||||
|
{ int led; |
||||||
|
bool outl; |
||||||
|
int j=0; |
||||||
|
for (int i = 0; i < ledout.length() ; i++) {//перебираем строку данных {"ido":"4","out":"1"}
|
||||||
|
|
||||||
|
if (ledout[i]==':') |
||||||
|
{j++; |
||||||
|
if (j==1)//первое :
|
||||||
|
{ if (ledout[i+3]!='\"') |
||||||
|
{ |
||||||
|
led=int(ledout[i+2] - '0')*10+int(ledout[i+3] - '0'); |
||||||
|
} |
||||||
|
else |
||||||
|
{ led=int(ledout[i+2] - '0'); |
||||||
|
} |
||||||
|
} |
||||||
|
if (j==2)//второе :
|
||||||
|
{outl=int(ledout[i+2] - '0'); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
switch (led) { |
||||||
|
case 4:
|
||||||
|
|
||||||
|
state1=outl;
|
||||||
|
gpio[0]=outl; |
||||||
|
gpio[3]=0; |
||||||
|
break; |
||||||
|
case 26:
|
||||||
|
state2=outl;
|
||||||
|
gpio[1]=outl; |
||||||
|
gpio[3]=0; |
||||||
|
// BTimer2[0]=3;
|
||||||
|
break; |
||||||
|
case 27:
|
||||||
|
state3=outl;
|
||||||
|
gpio[2]=outl; |
||||||
|
gpio[3]=0; |
||||||
|
// BTimer3[0]=3;
|
||||||
|
break; |
||||||
|
case 55:
|
||||||
|
//таймер или кнопки
|
||||||
|
//state1=outl;
|
||||||
|
gpio[3]=outl; |
||||||
|
|
||||||
|
break; |
||||||
|
} |
||||||
|
if( gpio[3]==0)//1-управление выходами через таймер 0- через кнопки
|
||||||
|
{ BTimer1[0]=3; |
||||||
|
BTimer2[0]=3; |
||||||
|
BTimer3[0]=3; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
BTimer1[0]=2; |
||||||
|
BTimer2[0]=2; |
||||||
|
BTimer3[0]=2; |
||||||
|
btime(); |
||||||
|
} |
||||||
|
digitalWrite(led, outl);
|
||||||
|
Serial.print(state1); |
||||||
|
Serial.print(state2); |
||||||
|
Serial.println(state3); |
||||||
|
Serial.print("led");
|
||||||
|
Serial.print(led); |
||||||
|
Serial.print(":");
|
||||||
|
Serial.println(outl);
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
@ -0,0 +1,394 @@ |
|||||||
|
|
||||||
|
void parsmsg() |
||||||
|
{ |
||||||
|
//int tkom1=0;//температура
|
||||||
|
//int hkom1=0;//влажность
|
||||||
|
//int batkom1=0;
|
||||||
|
//String timekom1;//время прихода данных комната1
|
||||||
|
|
||||||
|
//int tkom2=0;
|
||||||
|
//int hkom2=0;
|
||||||
|
//int batkom2=0;
|
||||||
|
//String timekom2;
|
||||||
|
|
||||||
|
//int tkor=0;
|
||||||
|
//int hkor=0;
|
||||||
|
//int batkor=0;
|
||||||
|
//String timekor;
|
||||||
|
|
||||||
|
//int tbal=0;
|
||||||
|
//int hbal=0;
|
||||||
|
//int batbal=0;
|
||||||
|
//String timebal;
|
||||||
|
|
||||||
|
//String timebal;
|
||||||
|
//t1+138c347v524h5 балкон
|
||||||
|
//t2+243c401v528h моя комната
|
||||||
|
// t3+230c357v469h зал
|
||||||
|
// t5+230c357v469h коридор
|
||||||
|
//9d+088h866s00v улица восток
|
||||||
|
//timeul1
|
||||||
|
//tul1
|
||||||
|
//hul1
|
||||||
|
//osv1
|
||||||
|
//char msg[16];принятое сообщение
|
||||||
|
int tdat;//температура
|
||||||
|
int hdat;//влажность
|
||||||
|
int vdat;//напряж батареи датчика
|
||||||
|
int zndat; |
||||||
|
int osv; |
||||||
|
char token9[] = "9d";//улица
|
||||||
|
char token11[] = "t1";//датчики
|
||||||
|
char token12[] = "t2";//датчики
|
||||||
|
char token13[] = "t3";//датчики
|
||||||
|
char token14[] = "t4";//датчики
|
||||||
|
char token15[] = "t5";//датчики
|
||||||
|
char token17[] = "t7";//датчики akva
|
||||||
|
|
||||||
|
int n=0; |
||||||
|
int p=0;
|
||||||
|
boolean chet=0;
|
||||||
|
char c ; |
||||||
|
delay(0);
|
||||||
|
//***************************
|
||||||
|
Serial.println (msg); |
||||||
|
for (int j=0 ; j<15 ;j++)
|
||||||
|
{ c=msg[j];//принятая с премника перемнная
|
||||||
|
|
||||||
|
|
||||||
|
if (p==9) |
||||||
|
{ if (c==token9[1]){p=99;}//данные с ул датчика восток
|
||||||
|
else{ |
||||||
|
p=0;} |
||||||
|
} |
||||||
|
if (p==101)//cравнение второго символа на соответствие t 1
|
||||||
|
{ if (c==token11[1]){p=111;} |
||||||
|
|
||||||
|
} |
||||||
|
if (p==101)//cравнение второго символа на соответствие t 2
|
||||||
|
{ if (c==token12[1]){p=112;} |
||||||
|
|
||||||
|
} |
||||||
|
if (p==101)//cравнение второго символа на соответствие t 3
|
||||||
|
{ if (c==token13[1]){p=113;} |
||||||
|
|
||||||
|
} |
||||||
|
if (p==101)//cравнение второго символа на соответствие t 4
|
||||||
|
{ if (c==token14[1]){p=114;} |
||||||
|
|
||||||
|
} |
||||||
|
if (p==101)//cравнение второго символа на соответствие t 4
|
||||||
|
{ if (c==token17[1]){p=117;} |
||||||
|
|
||||||
|
} |
||||||
|
if (p==101)//cравнение второго символа на соответствие t 5
|
||||||
|
{ if (c==token15[1]){p=115;} |
||||||
|
else{ |
||||||
|
p=0;} |
||||||
|
} |
||||||
|
//*************************************************
|
||||||
|
delay(0); |
||||||
|
if (p==99)
|
||||||
|
{// myFile.print(c);//d+237h895s05v
|
||||||
|
nt=2; |
||||||
|
timeul1=timeserv;//время получения данных
|
||||||
|
n++; |
||||||
|
if (n==2){ |
||||||
|
if (c==45){zndat=1;//-
|
||||||
|
}//znak
|
||||||
|
else |
||||||
|
{zndat=2;//+
|
||||||
|
} |
||||||
|
} |
||||||
|
if (n==3) {tdat=(c-48)*100;} //температура
|
||||||
|
if (n==4){tdat=(c-48)*10+tdat;} |
||||||
|
if (n==5){ |
||||||
|
tdat=(c-48)+tdat; |
||||||
|
|
||||||
|
if(zndat==1){tul1="-"+String (tdat/10)+"."+String (tdat%10); //температура знак -230 -23.0
|
||||||
|
} |
||||||
|
else |
||||||
|
{tul1=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||||
|
} |
||||||
|
} |
||||||
|
if (n==7){hdat=(c-48)*100;}//влажность
|
||||||
|
if (n==8){hdat=(c-48)*10+hdat;} |
||||||
|
if (n==9){ |
||||||
|
hdat=(c-48)+hdat; |
||||||
|
hul1=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||||
|
} |
||||||
|
if (n==11){osv=10*(c-48);}//освещенность
|
||||||
|
if (n==12) |
||||||
|
{osv=osv+(c-48); |
||||||
|
if(osv>99){osv=99;} |
||||||
|
osv1=String (osv)+"%"; |
||||||
|
}//sun
|
||||||
|
// hourdu=t.hour;//время прихода данных час
|
||||||
|
// mindu=t.min;//мин
|
||||||
|
|
||||||
|
} |
||||||
|
//*****************************************
|
||||||
|
delay(0); |
||||||
|
//*****************датчики температуры переносные***********************
|
||||||
|
//************************T1****************************************************
|
||||||
|
if (p==111) //выделение данных из принятой строки
|
||||||
|
{ timebal=timeserv;//время получения данных
|
||||||
|
nt=3; |
||||||
|
//byte ntdat;номер датчика
|
||||||
|
//byte zndat;знак температуры 0+
|
||||||
|
//int tdat;температура
|
||||||
|
//int hdat;влажность
|
||||||
|
//int vdat;напряж батареи датчика
|
||||||
|
n++; |
||||||
|
if (n==2){ |
||||||
|
if (c==45){zndat=1;//-
|
||||||
|
}//znak
|
||||||
|
else |
||||||
|
{zndat=0;//+
|
||||||
|
} |
||||||
|
} |
||||||
|
if (n==3) {tdat=(c-48)*100;} //температура
|
||||||
|
if (n==4){tdat=(c-48)*10+tdat;} |
||||||
|
if (n==5) |
||||||
|
{tdat=(c-48)+tdat; |
||||||
|
tbal=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||||
|
} |
||||||
|
|
||||||
|
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||||
|
if (n==8){vdat=(c-48)*10+vdat;} |
||||||
|
if (n==9) |
||||||
|
{vdat=(c-48)+vdat; |
||||||
|
batbal=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||||
|
} |
||||||
|
if (n==11){hdat=(c-48)*100;}//влажность
|
||||||
|
if (n==12) |
||||||
|
{hdat=(c-48)*10+hdat; |
||||||
|
} |
||||||
|
if (n==13) |
||||||
|
{hdat=(c-48)+hdat; |
||||||
|
hbal=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
delay(0); |
||||||
|
//**************************************** T2
|
||||||
|
if (p==112) //выделение данных из принятой строки
|
||||||
|
{timekom2=timeserv;//время получения данных
|
||||||
|
nt=4; |
||||||
|
n++; |
||||||
|
if (n==2){ |
||||||
|
if (c==45){zndat=1;//-
|
||||||
|
}//znak
|
||||||
|
else |
||||||
|
{zndat=0;//+
|
||||||
|
} |
||||||
|
} |
||||||
|
if (n==3) {tdat=(c-48)*100;} //температура
|
||||||
|
if (n==4){tdat=(c-48)*10+tdat;} |
||||||
|
if (n==5) |
||||||
|
{tdat=(c-48)+tdat; |
||||||
|
tkom2=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||||
|
} |
||||||
|
|
||||||
|
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||||
|
if (n==8){vdat=(c-48)*10+vdat;} |
||||||
|
if (n==9) |
||||||
|
{vdat=(c-48)+vdat; |
||||||
|
batkom2=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||||
|
} |
||||||
|
if (n==11){hdat=(c-48)*100;}//влажность
|
||||||
|
if (n==12) |
||||||
|
{hdat=(c-48)*10+hdat;
|
||||||
|
} |
||||||
|
if (n==13) |
||||||
|
{hdat=(c-48)+hdat; |
||||||
|
hkom2=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
delay(0); |
||||||
|
//****************************************
|
||||||
|
//**************************************** T3
|
||||||
|
if (p==113) //выделение данных из принятой строки
|
||||||
|
{// myFile.print(c);//t2+103c375v299h9
|
||||||
|
nt=5; |
||||||
|
timekom1=timeserv;//время получения данных
|
||||||
|
n++; |
||||||
|
if (n==2){ |
||||||
|
if (c==45){zndat=1;//-
|
||||||
|
}//znak
|
||||||
|
else |
||||||
|
{zndat=0;//+
|
||||||
|
} |
||||||
|
} |
||||||
|
if (n==3) {tdat=(c-48)*100;} //температура
|
||||||
|
if (n==4){tdat=(c-48)*10+tdat;} |
||||||
|
if (n==5) |
||||||
|
{tdat=(c-48)+tdat; |
||||||
|
tkom1=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||||
|
if (n==8){vdat=(c-48)*10+vdat;} |
||||||
|
if (n==9) |
||||||
|
{vdat=(c-48)+vdat; |
||||||
|
batkom1=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||||
|
} |
||||||
|
if (n==11){hdat=(c-48)*100;}//влажность
|
||||||
|
if (n==12) |
||||||
|
{hdat=(c-48)*10+hdat; |
||||||
|
} |
||||||
|
if (n==13) |
||||||
|
{hdat=(c-48)+hdat; |
||||||
|
hkom1=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
//**************************************** T4 ****************************
|
||||||
|
/* if (p==114) //выделение данных из принятой строки
|
||||||
|
{// myFile.print(c);//t1+103c375v299h9
|
||||||
|
ntdat=4; |
||||||
|
if(chet==0) |
||||||
|
{ if( hourd4==t.hour) |
||||||
|
{fh=1; |
||||||
|
} |
||||||
|
else |
||||||
|
{fh=0; |
||||||
|
} |
||||||
|
chet=1; |
||||||
|
} |
||||||
|
hourd4=t.hour; |
||||||
|
mind4=t.min;
|
||||||
|
//byte ntdat;номер датчика
|
||||||
|
//byte zndat;знак температуры 0+
|
||||||
|
//int tdat;температура
|
||||||
|
//int hdat;влажность
|
||||||
|
//int vdat;напряж батареи датчика
|
||||||
|
n++; |
||||||
|
if (n==2){ |
||||||
|
if (c==45){zndat=1;//-
|
||||||
|
}//znak
|
||||||
|
else |
||||||
|
{zndat=0;//+
|
||||||
|
} |
||||||
|
} |
||||||
|
if (n==3) {tdat=(c-48)*100;} //температура
|
||||||
|
if (n==4){tdat=(c-48)*10+tdat;} |
||||||
|
if (n==5) |
||||||
|
{tdat=(c-48)+tdat; |
||||||
|
for (int u =22 ; u >= 0; u = u--) |
||||||
|
{ |
||||||
|
t4[u+1]=t4[u]; |
||||||
|
} |
||||||
|
if(zndat==1)//-
|
||||||
|
{t14=tdat+1000; |
||||||
|
t4[0]=t14; |
||||||
|
} |
||||||
|
else |
||||||
|
{t14=tdat; |
||||||
|
t4[0]=t14; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||||
|
if (n==8){vdat=(c-48)*10+vdat;} |
||||||
|
if (n==9) |
||||||
|
{vdat=(c-48)+vdat; |
||||||
|
bat[3]=vdat; |
||||||
|
} |
||||||
|
if (n==11){hdat=(c-48)*100;}//влажность
|
||||||
|
if (n==12) |
||||||
|
{hdat=(c-48)*10+hdat; |
||||||
|
for (int u =22 ; u >= 0; u = u--) |
||||||
|
{ |
||||||
|
h4[u+1]=h4[u]; |
||||||
|
} |
||||||
|
h4[0]=hdat; |
||||||
|
|
||||||
|
} |
||||||
|
if (n==13) |
||||||
|
{hdat=(c-48)+hdat; |
||||||
|
h14=hdat; |
||||||
|
} |
||||||
|
|
||||||
|
}*/ |
||||||
|
delay(0); |
||||||
|
//**************************************** T5
|
||||||
|
if (p==115) //выделение данных из принятой строки
|
||||||
|
{// myFile.print(c);//t2+103c375v299h9
|
||||||
|
timekor=timeserv;//время получения данных
|
||||||
|
nt=7; |
||||||
|
n++; |
||||||
|
if (n==2){ |
||||||
|
if (c==45){zndat=1;//-
|
||||||
|
}//znak
|
||||||
|
else |
||||||
|
{zndat=0;//+
|
||||||
|
} |
||||||
|
} |
||||||
|
if (n==3) {tdat=(c-48)*100;} //температура
|
||||||
|
if (n==4){tdat=(c-48)*10+tdat;} |
||||||
|
if (n==5) |
||||||
|
{tdat=(c-48)+tdat; |
||||||
|
tkor=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||||
|
} |
||||||
|
|
||||||
|
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||||
|
if (n==8){vdat=(c-48)*10+vdat;} |
||||||
|
if (n==9) |
||||||
|
{vdat=(c-48)+vdat; |
||||||
|
batkor=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||||
|
} |
||||||
|
if (n==11){hdat=(c-48)*100;}//влажность
|
||||||
|
if (n==12) |
||||||
|
{hdat=(c-48)*10+hdat; |
||||||
|
} |
||||||
|
if (n==13) |
||||||
|
{hdat=(c-48)+hdat; |
||||||
|
hkor=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||||
|
} |
||||||
|
|
||||||
|
}
|
||||||
|
delay(0);
|
||||||
|
//*******************************************************************************
|
||||||
|
//**************************************** T7
|
||||||
|
if (p==117) //выделение данных из принятой строки
|
||||||
|
{// myFile.print(c);//t7+247c251c243c024
|
||||||
|
timeakva=timeserv;//время получения данных
|
||||||
|
nt=9;// номер терм для сайта
|
||||||
|
n++; |
||||||
|
if (n==3) {tdat=(c-48)*100;} //температура t1
|
||||||
|
if (n==4){tdat=(c-48)*10+tdat;} |
||||||
|
if (n==5) |
||||||
|
{tdat=(c-48)+tdat; |
||||||
|
takva1=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||||
|
} |
||||||
|
|
||||||
|
if (n==7){vdat=(c-48)*100;}//t2
|
||||||
|
if (n==8){vdat=(c-48)*10+vdat;} |
||||||
|
if (n==9) |
||||||
|
{vdat=(c-48)+vdat; |
||||||
|
takva2=String (vdat/10)+"."+String (vdat%10);//t2
|
||||||
|
} |
||||||
|
if (n==11){hdat=(c-48)*100;}//t3
|
||||||
|
if (n==12){hdat=(c-48)*10+hdat;} |
||||||
|
if (n==13) |
||||||
|
{hdat=(c-48)+hdat; |
||||||
|
takva3=String (hdat/10)+"."+String (hdat%10);//t3
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
delay(0);
|
||||||
|
//*******************************************************************************
|
||||||
|
|
||||||
|
if ((c==token9[0])&&(p==0)){p=9;}
|
||||||
|
if ((c==token11[0])&&(p==0)){p=101;}//cравнение первого символа на соответствие t
|
||||||
|
}//for
|
||||||
|
//*************************************************
|
||||||
|
|
||||||
|
|
||||||
|
}//void pars
|
||||||
@ -0,0 +1,60 @@ |
|||||||
|
String processor(const String& var){ |
||||||
|
//Serial.println(var);
|
||||||
|
if(var == "BUTTONPLACEHOLDER1"){//вставка на странице(если в HTML нашли BUTTONPLACEHOLDER1 то вставляем кнопки)
|
||||||
|
String buttons =""; |
||||||
|
//отправка значения состояния перключателей checked- включен ""-выключен
|
||||||
|
buttons+= "<h4>Выход 1</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"4\" " + outputState(4) + "><span class=\"slider\"></span></label>"; |
||||||
|
|
||||||
|
return buttons; |
||||||
|
} |
||||||
|
if(var == "BUTTONPLACEHOLDER2"){//вставка на странице(если в HTML нашли BUTTONPLACEHOLDER2 то вставляем кнопки)
|
||||||
|
String buttons =""; |
||||||
|
//отправка значения состояния перключателей checked- включен ""-выключен
|
||||||
|
|
||||||
|
buttons += "<h4>Выход 2</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"26\" " + outputState(26) + "><span class=\"slider\"></span></label>"; |
||||||
|
|
||||||
|
return buttons; |
||||||
|
} |
||||||
|
if(var == "BUTTONPLACEHOLDER3"){//вставка на странице(если в HTML нашли BUTTONPLACEHOLDER3 то вставляем кнопки)
|
||||||
|
String buttons =""; |
||||||
|
//отправка значения состояния перключателей checked- включен ""-выключен
|
||||||
|
|
||||||
|
buttons += "<h4>Выход 3</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"27\" " + outputState(27) + "><span class=\"slider\"></span></label>"; |
||||||
|
return buttons; |
||||||
|
} |
||||||
|
if(var == "BUTTONPLACEHOLDER4"){//вставка на странице(если в HTML нашли BUTTONPLACEHOLDER4 то вставляем кнопки)
|
||||||
|
String buttons =""; |
||||||
|
//отправка значения состояния перключателей checked- включен ""-выключен
|
||||||
|
//кнопка таймера (если вкл то выходы работают по таймерам если нет то по кнопке
|
||||||
|
buttons += "<h4>Таймер</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"55\" " + outputState55(55) + "><span class=\"slider\"></span></label>"; |
||||||
|
return buttons; |
||||||
|
} |
||||||
|
if(var == "BUTTON"){//вставка на странице(если в HTML нашли BUTTON то вставляем кнопки)
|
||||||
|
String buttons =""; |
||||||
|
//отправка значения состояния перключателей checked- включен ""-выключен
|
||||||
|
buttons+= "<h4>Output - GPIO 4 </h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"4\" " + outputState(4) + "><span class=\"slider\"></span></label>"; |
||||||
|
buttons += "<h4>Output - GPIO 26</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"26\" " + outputState(26) + "><span class=\"slider\"></span></label>"; |
||||||
|
buttons += "<h4>Output - GPIO 27</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"27\" " + outputState(27) + "><span class=\"slider\"></span></label>"; |
||||||
|
return buttons; |
||||||
|
} |
||||||
|
return String(); |
||||||
|
} |
||||||
|
|
||||||
|
//************************************************
|
||||||
|
|
||||||
|
String outputState(int out){ |
||||||
|
if(digitalRead(out)){ |
||||||
|
return "checked"; |
||||||
|
} |
||||||
|
else { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
} |
||||||
|
String outputState55(int out){ |
||||||
|
if(gpio[3]==1){ |
||||||
|
return "checked"; |
||||||
|
} |
||||||
|
else { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,30 @@ |
|||||||
|
void vrem()//время работы сервера
|
||||||
|
{ |
||||||
|
|
||||||
|
int time17 = millis()/1000; |
||||||
|
delay(0); |
||||||
|
if (time17/60/60<10) { Serial.print ("0"); } |
||||||
|
Serial.print (time17/60/60); |
||||||
|
Serial.print (":"); |
||||||
|
if (time17/60%60<10) { Serial.print ("0"); } |
||||||
|
Serial.print ((time17/60)%60); |
||||||
|
Serial.print (":"); |
||||||
|
if (time17%60<10) { Serial.print ("0"); } |
||||||
|
Serial.println (time17%60); |
||||||
|
delay(0); |
||||||
|
String q1=String(time17/60/60, DEC); |
||||||
|
delay(0); |
||||||
|
String q2=String((time17/60)%60, DEC); |
||||||
|
delay(0); |
||||||
|
String q3=String(time17%60, DEC); |
||||||
|
delay(0); |
||||||
|
if ((time17/60)%60<10) |
||||||
|
{ |
||||||
|
t10=String(time17/60/60, DEC)+":"+"0"+String((time17/60)%60, DEC); |
||||||
|
} |
||||||
|
else |
||||||
|
{t10=String(time17/60/60, DEC)+":"+String((time17/60)%60, DEC); |
||||||
|
} |
||||||
|
delay(0);
|
||||||
|
//t10 =q1+":"+q2+":"+q3 ;
|
||||||
|
} |
||||||
@ -0,0 +1,41 @@ |
|||||||
|
void settimer() { |
||||||
|
|
||||||
|
|
||||||
|
/* LED pin */ |
||||||
|
//int led = 14;
|
||||||
|
/* LED state */ |
||||||
|
//volatile byte state = LOW;
|
||||||
|
// Use 1st timer of 4 (counted from zero).
|
||||||
|
// Set 80 divider for prescaler (see ESP32 Technical Reference Manual for more
|
||||||
|
// info).
|
||||||
|
timer = timerBegin(2, 80, true); |
||||||
|
|
||||||
|
/* Attach onTimer function to our timer */ |
||||||
|
// timerAttachInterrupt(timer, &onTimer, true);
|
||||||
|
timerAttachInterrupt(timer, &onTimer, true); |
||||||
|
/* Set alarm to call onTimer function every second 1 tick is 1us
|
||||||
|
=> 1 second is 1000000us */ |
||||||
|
/* Repeat the alarm (third parameter) */ |
||||||
|
timerAlarmWrite(timer, 5000000, true); |
||||||
|
/* Start an alarm */ |
||||||
|
timerAlarmEnable(timer); |
||||||
|
// Serial.println("start timer");
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void IRAM_ATTR onTimer() |
||||||
|
{ |
||||||
|
EpochTime=EpochTime+5; |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
//Serial.print("EpochTime=");
|
||||||
|
//Serial.println(EpochTime);
|
||||||
|
// Increment the counter and set the time of ISR
|
||||||
|
// portENTER_CRITICAL_ISR(&timerMux);
|
||||||
|
// isrCounter++;
|
||||||
|
// lastIsrAt = millis();
|
||||||
|
// portEXIT_CRITICAL_ISR(&timerMux);
|
||||||
|
// Give a semaphore that we can check in the loop
|
||||||
|
// xSemaphoreGiveFromISR(timerSemaphore, NULL);
|
||||||
|
// It is safe to use digitalRead/Write here if you want to toggle an output
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,195 @@ |
|||||||
|
void timerconvert() |
||||||
|
{ //timerout= {"id":"tout","t1":"100","t2":"010","t3":"001"} подкл таймеров по выходов
|
||||||
|
//String timerdata
|
||||||
|
//{"timer1":["01:00","09:00","10:00","11:00","","","","","",""],"timer2":[
|
||||||
|
// String timerweek={"id":"week","timer1_week":"0111100","timer2_week":"1000011","timer3_week":"0101010"};
|
||||||
|
//(str[1] = 't')
|
||||||
|
//uint16_t BTimer1 [11] = {3, 390, 450, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440}; // массивы всех таймеров для суточных каналов (1 - 4) 0-й элемент отвечает за состояние канала (1 - вкл/ 0 - выкл/ 2 - авто))
|
||||||
|
if (timerdata.startsWith("{\"timer1"))//парсим "timer1":["01
|
||||||
|
{tdat=0; |
||||||
|
int timer=0;//номер таймера
|
||||||
|
//int index =1;// индекс массива таймера
|
||||||
|
// Serial.println("timer");
|
||||||
|
// Serial.println(timerdata.length());
|
||||||
|
// Serial.println(timerdata[12]);
|
||||||
|
for (int i = 0; i < timerdata.length() ; i++) {//перебираем строку данных
|
||||||
|
|
||||||
|
if (timerdata[i]=='[') |
||||||
|
{timer++; |
||||||
|
//********************************************************************
|
||||||
|
if (timer==1) |
||||||
|
{i=i+2; |
||||||
|
for (int j = 1; j < 11 ; j++){ |
||||||
|
if (timerdata[i]!='\"') |
||||||
|
{ |
||||||
|
BTimer1 [j]=((int(timerdata[i] - '0')*10+int(timerdata[i+1] - '0'))*60+(int(timerdata[i+3] - '0')*10+int(timerdata[i+4] - '0'))); |
||||||
|
i=i+8; |
||||||
|
//Serial.println(BTimer1 [j]);
|
||||||
|
} |
||||||
|
else |
||||||
|
{i=i+3; |
||||||
|
BTimer1 [j]=1440;//время неустановлено
|
||||||
|
} |
||||||
|
// Serial.println(timerdata[i]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} |
||||||
|
//******************************************************************************
|
||||||
|
if (timer==2) |
||||||
|
{i=i+2; |
||||||
|
for (int j = 1; j < 11 ; j++){ |
||||||
|
|
||||||
|
if (timerdata[i]!='\"') |
||||||
|
{ |
||||||
|
BTimer2 [j]=((int(timerdata[i] - '0')*10+int(timerdata[i+1] - '0'))*60+(int(timerdata[i+3] - '0')*10+int(timerdata[i+4] - '0'))); |
||||||
|
i=i+8; |
||||||
|
//Serial.println(BTimer1 [j]);
|
||||||
|
} |
||||||
|
else |
||||||
|
{i=i+3; |
||||||
|
BTimer2 [j]=1440; |
||||||
|
} |
||||||
|
// Serial.println(timerdata[i]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} |
||||||
|
if (timer==3) |
||||||
|
{i=i+2; |
||||||
|
for (int j = 1; j < 11 ; j++){ |
||||||
|
if (timerdata[i]!='\"') |
||||||
|
{ |
||||||
|
BTimer3 [j]=((int(timerdata[i] - '0')*10+int(timerdata[i+1] - '0'))*60+(int(timerdata[i+3] - '0')*10+int(timerdata[i+4] - '0'))); |
||||||
|
i=i+8; |
||||||
|
//Serial.println(BTimer1 [j]);
|
||||||
|
} |
||||||
|
else |
||||||
|
{i=i+3; |
||||||
|
BTimer3 [j]=1440; |
||||||
|
} |
||||||
|
// Serial.println(timerdata[i]);
|
||||||
|
|
||||||
|
}
|
||||||
|
// Serial.println(" ");
|
||||||
|
// for(int a = 0; a < 11; a++)
|
||||||
|
// { Serial.print(BTimer3[a]);
|
||||||
|
// }
|
||||||
|
// Serial.println(" ");
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//******************************************************************************************
|
||||||
|
if (timerweek.startsWith("{\"id\":\"week"))//парсим {"id":"week","timer1_week":"0111100"
|
||||||
|
{tweek=0; |
||||||
|
int timer=0;//номер таймера
|
||||||
|
// Serial.println("week");
|
||||||
|
// Serial.println(timerweek.length());
|
||||||
|
for (int i = 0; i < timerweek.length() ; i++) {//перебираем строку данных
|
||||||
|
if (timerweek[i]==':') |
||||||
|
{timer++; |
||||||
|
if (timer==2)//данные таймера1 идут после вторых двоеточий
|
||||||
|
{i=i+2; |
||||||
|
for (int j = 0; j < 7 ; j++){ |
||||||
|
weekTimer1 [j]=int(timerweek[i+j] - '0');//пребразуем строку "0111100" в массив чисел weekTimer1 [7]=
|
||||||
|
} |
||||||
|
} |
||||||
|
if (timer==3) |
||||||
|
{i=i+2; |
||||||
|
for (int j = 0; j < 7 ; j++){ |
||||||
|
weekTimer2 [j]=int(timerweek[i+j] - '0');//пребразуем строку "0111100" в массив чисел weekTimer1 [7]=
|
||||||
|
} |
||||||
|
} |
||||||
|
if (timer==4) |
||||||
|
{i=i+2; |
||||||
|
for (int j = 0; j < 7 ; j++){ |
||||||
|
weekTimer3 [j]=int(timerweek[i+j] - '0');//пребразуем строку "0111100" в массив чисел weekTimer1 [7]=
|
||||||
|
} |
||||||
|
Serial.print("weekTimer3"); |
||||||
|
for(int a = 0; a < 7; a++) |
||||||
|
{ Serial.print(weekTimer3[a]);
|
||||||
|
} |
||||||
|
Serial.println(""); |
||||||
|
//Serial.println("");
|
||||||
|
// Serial.print("tweekday");
|
||||||
|
//Serial.println(tweekday);
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
// weekTimer1 [7]={0,0,0,0,0,0,0};//недельные установки t1
|
||||||
|
if(weekTimer1 [tweekday-1]==1) |
||||||
|
{BTimer1 [0]=2;//управляем таймером
|
||||||
|
}else |
||||||
|
{ |
||||||
|
BTimer1 [0]=3;//управляем кнопками
|
||||||
|
} |
||||||
|
if(weekTimer2 [tweekday-1]==1) |
||||||
|
{BTimer2 [0]=2;//управляем таймером
|
||||||
|
}else |
||||||
|
{ |
||||||
|
BTimer2 [0]=3;//управляем кнопками
|
||||||
|
} |
||||||
|
if(weekTimer3 [tweekday-1]==1) |
||||||
|
{BTimer3 [0]=2;//управляем таймером
|
||||||
|
}else |
||||||
|
{ |
||||||
|
BTimer3 [0]=3;//управляем кнопками
|
||||||
|
} |
||||||
|
Serial.print("BTimer1 [0]:"); |
||||||
|
Serial.println(BTimer1 [0]); |
||||||
|
Serial.print("BTimer2 [0]:"); |
||||||
|
Serial.println(BTimer2 [0]); |
||||||
|
Serial.print("BTimer3 [0]:"); |
||||||
|
Serial.println(BTimer3 [0]); |
||||||
|
//******************************************************************************************
|
||||||
|
if (timerout.startsWith("{\"id\":\"tout"))//парсим timerout= {"id":"tout","t1":"100","t2":"010","t3":"001"} подкл таймеров по выходов
|
||||||
|
{//tuot=0;
|
||||||
|
int timer=0;//номер таймера
|
||||||
|
// Serial.println("timerout");
|
||||||
|
// Serial.println(timerout.length());
|
||||||
|
for (int i = 0; i < timerout.length() ; i++) {//перебираем строку данных
|
||||||
|
if (timerout[i]==':') |
||||||
|
{timer++; |
||||||
|
if (timer==2)//данные таймера1 идут после вторых двоеточий
|
||||||
|
{i=i+2; |
||||||
|
for (int j = 0; j < 3 ; j++){ |
||||||
|
gpioTimer1[j]=int(timerout[i+j] - '0');//пребразуем строку "011" в массив чисел gpioTimer1 [3]={1,0,0};
|
||||||
|
} |
||||||
|
} |
||||||
|
if (timer==3) |
||||||
|
{i=i+2; |
||||||
|
for (int j = 0; j < 3 ; j++){ |
||||||
|
gpioTimer2[j]=int(timerout[i+j] - '0');//пребразуем строку "011" в массив чисел gpioTimer2 [3]={1,1,0};
|
||||||
|
} |
||||||
|
} |
||||||
|
if (timer==4) |
||||||
|
{i=i+2; |
||||||
|
for (int j = 0; j < 3 ; j++){ |
||||||
|
gpioTimer3[j]=int(timerout[i+j] - '0');//пребразуем строку "011" в массив чисел gpioTimer3 [3]={1,1,0};
|
||||||
|
} |
||||||
|
Serial.println(""); |
||||||
|
Serial.print("gpioTimer1"); |
||||||
|
for(int a = 0; a < 3; a++) |
||||||
|
{ Serial.print(gpioTimer1[a]);
|
||||||
|
} |
||||||
|
Serial.println(""); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
current_time = hour1 * 60 + min1;//настройка выходов в соот с таймерами
|
||||||
|
for (int i = 0; i <= 1439; i++) { |
||||||
|
if (current_time > 1439) current_time = 0; |
||||||
|
state1 = main_log(BTimer1, state1); |
||||||
|
state2 = main_log(BTimer2, state2); |
||||||
|
state3 = main_log(BTimer3, state3); |
||||||
|
current_time++; |
||||||
|
}
|
||||||
|
btime();
|
||||||
|
} |
||||||
@ -0,0 +1,69 @@ |
|||||||
|
// Correct led start state. Changed all new led bits to prefix new...
|
||||||
|
void handleRoot(AsyncWebServerRequest *request) { |
||||||
|
|
||||||
|
request->send(200, "text/html", R"HTML( |
||||||
|
<!DOCTYPE html> |
||||||
|
<html> |
||||||
|
<head><meta name='viewport' content='width=device-width, initial-scale=1.0'> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<h1>ESP32 Websocket Example - Client to Server</h1> |
||||||
|
<h2>With LED status update.</h2> |
||||||
|
<button onclick='toggleLED()'>Toggle LED</button> |
||||||
|
<p>LED Status: <span id='ledStatus'></span></p> |
||||||
|
<button onclick='toggleLED2()'>Toggle LED2</button> |
||||||
|
<p>LED Status: <span id='ledStatus2'></span></p> |
||||||
|
<p>Count:<span id="countData">0:00</span></p> |
||||||
|
<p>Count:<span id="countData1">0:00</span></p> |
||||||
|
<p><span id='message'></span></p> |
||||||
|
<br clear="all"> |
||||||
|
|
||||||
|
<script> |
||||||
|
var webSocket; |
||||||
|
connectWebSocket(); |
||||||
|
function connectWebSocket() { |
||||||
|
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws');
|
||||||
|
|
||||||
|
webSocket.onopen = function(event) {//реакция на подключение вебсекета
|
||||||
|
console.log('WebSocket connected'); |
||||||
|
}; |
||||||
|
|
||||||
|
webSocket.onmessage = function(event) {//реакция на данные
|
||||||
|
var data = JSON.parse(event.data);//
|
||||||
|
if (data.label === 'ledStatus') { |
||||||
|
document.getElementById('ledStatus').innerHTML = data.value; |
||||||
|
} |
||||||
|
if (data.label2 === 'ledStatus2') { |
||||||
|
document.getElementById('ledStatus2').innerHTML = data.value; |
||||||
|
} |
||||||
|
if (data.label3 === 'count1') { |
||||||
|
document.getElementById("countData1").innerHTML = data.value; |
||||||
|
}; |
||||||
|
if (data.label3 === 'count') { |
||||||
|
document.getElementById("countData").innerHTML = data.value; |
||||||
|
}; |
||||||
|
|
||||||
|
} |
||||||
|
webSocket.onclose = function(event) {//реакция на отключение вебсекета
|
||||||
|
console.log('WebSocket disconnected'); |
||||||
|
var messageElement = document.getElementById('message'); |
||||||
|
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||||
|
setTimeout(connectWebSocket, 2000); |
||||||
|
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||||
|
}; |
||||||
|
webSocket.onerror = function(event) { |
||||||
|
console.error('WebSocket error:', event); |
||||||
|
}; |
||||||
|
} |
||||||
|
function toggleLED() { |
||||||
|
webSocket.send('toggle'); |
||||||
|
} |
||||||
|
function toggleLED2() {//функция на нажатие кнопки
|
||||||
|
webSocket.send('toggle2'); |
||||||
|
} |
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
|
)HTML"); |
||||||
|
} // END OF void handleRoot(AsyncWebServerRequest *request)
|
||||||
@ -0,0 +1,6 @@ |
|||||||
|
void writepin() |
||||||
|
{delay(50); |
||||||
|
digitalWrite(5, HIGH); |
||||||
|
delay(10); |
||||||
|
digitalWrite(5, LOW); |
||||||
|
} |
||||||
@ -0,0 +1,129 @@ |
|||||||
|
void JSstringU() |
||||||
|
{ |
||||||
|
board["id"] = incomingReadings.id; |
||||||
|
|
||||||
|
if(flread==0) |
||||||
|
{ |
||||||
|
board["temperature"] =ts; |
||||||
|
// t1 = incomingReadings.temp;
|
||||||
|
board["humidity"] =hs;
|
||||||
|
board["tim2"] = tim2; |
||||||
|
flread=1;
|
||||||
|
} |
||||||
|
else |
||||||
|
{board["temperature"] =incomingReadings.temp; |
||||||
|
// t1 = incomingReadings.temp;
|
||||||
|
board["humidity"] =incomingReadings.hum; |
||||||
|
if(min1<10) |
||||||
|
{ |
||||||
|
board["tim2"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
board["tim2"] =String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
board["tim3"] = tim3; |
||||||
|
board["dataserv"] = dataserv; |
||||||
|
board["timeserv"] = timeserv; |
||||||
|
board["munthserv"] = munthserv; |
||||||
|
board["weekserv"] = weekserv; |
||||||
|
board["timev"] = timev; |
||||||
|
|
||||||
|
// jsonString = JSON.stringify(board);
|
||||||
|
jsonString = JSON.stringify(board);//{"id":2,"temperature":9.6733450317382812,"humidity":50.41815185546875,"tim2":"12:02","dataserv":"12","timeserv":"15:30","munthserv":"январь",weekserv:"среда"}
|
||||||
|
// events.send(jsonString.c_str(), "new_readings", millis());//обновление веба текущая температура
|
||||||
|
Serial.println (jsonString); |
||||||
|
|
||||||
|
if(wright>360)//запись на sd каждые 30 минут 60*30/5 каждый тик 5сек
|
||||||
|
{String String2=jsonString2+"\n"; |
||||||
|
//appendFile(SD, "/thkom.txt", String2.c_str());//добавление на инфы в файл
|
||||||
|
writeFile(SD, "/thkom1.txt", jsonString2.c_str());//записываем в этот файл последние данные для счит после сброса
|
||||||
|
writeFile(SD, "/thku1.txt", jsonString.c_str());//записываем в этот файл последние данные NOW для счит после сброса
|
||||||
|
|
||||||
|
//wright=0;
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void JSstringK() |
||||||
|
{ board2["tkom1"] = tkom1; |
||||||
|
board2["hkom1"] = hkom1; |
||||||
|
board2["batkom1"] = batkom1; |
||||||
|
board2["timekom1"] = timekom1; |
||||||
|
board2["tkom2"] = tkom2; |
||||||
|
board2["hkom2"] = hkom2; |
||||||
|
board2["batkom2"] = batkom2; |
||||||
|
board2["timekom2"] = timekom2; |
||||||
|
board2["tkor"] = tkor; |
||||||
|
board2["hkor"] = hkor; |
||||||
|
board2["batkor"] = batkor; |
||||||
|
board2["timekor"] = timekor; |
||||||
|
board2["tbal"] = tbal; |
||||||
|
board2["hbal"] = hbal; |
||||||
|
board2["batbal"] = batbal; |
||||||
|
board2["timebal"] = timebal; |
||||||
|
board2["tul1"] = tul1; |
||||||
|
board2["hul1"] = hul1; |
||||||
|
board2["osv1"] = osv1; |
||||||
|
board2["timeul1"] = timeul1; |
||||||
|
jsonString2 = JSON.stringify(board2);
|
||||||
|
Serial.println (jsonString2);
|
||||||
|
//"new_datatemp"
|
||||||
|
//events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||||
|
// writeFile(SD, "/thkom.txt", jsonString2.c_str());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(wright>360)//запись на sd каждые 30 минут 60*30/5 каждый тик 5сек
|
||||||
|
{esp_task_wdt_reset();//reset WDT
|
||||||
|
board["temperature"] =incomingReadings.temp; |
||||||
|
// t1 = incomingReadings.temp;
|
||||||
|
board["humidity"] =incomingReadings.hum; |
||||||
|
if(min1<10) |
||||||
|
{ |
||||||
|
board["tim2"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
board["tim2"] =String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
board["tim3"] = tim3; |
||||||
|
board["dataserv"] = dataserv; |
||||||
|
board["timeserv"] = timeserv; |
||||||
|
board["munthserv"] = munthserv; |
||||||
|
board["weekserv"] = weekserv; |
||||||
|
board["timev"] = timev; |
||||||
|
|
||||||
|
// jsonString = JSON.stringify(board);
|
||||||
|
jsonString = JSON.stringify(board); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
String String2=jsonString2+"\n"; |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
//appendFile(SD, "/thkom.txt", String2.c_str());//добавление на инфы в файл
|
||||||
|
writeFile(SD, "/thkom1.txt", jsonString2.c_str());//записываем в этот файл последние данные для счит после сброса
|
||||||
|
writeFile(SD, "/thku1.txt", jsonString.c_str());//записываем в этот файл последние данные NOW для счит после сброса
|
||||||
|
ESP.restart(); |
||||||
|
wright=0; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,183 @@ |
|||||||
|
void sdlist() |
||||||
|
{ |
||||||
|
//listDir(SD, "/", 0);
|
||||||
|
//listDir(SD, "/", 0);
|
||||||
|
//delay(100);
|
||||||
|
// createDir(SD, "/mydir");//создать директорию (папку)
|
||||||
|
// delay(100);
|
||||||
|
// listDir(SD, "/", 0);
|
||||||
|
// delay(100);
|
||||||
|
// removeDir(SD, "/mydir");
|
||||||
|
//delay(100);
|
||||||
|
// listDir(SD, "/", 2);
|
||||||
|
// delay(100);
|
||||||
|
// writeFile(SD, "/hello.txt", "Hello ");
|
||||||
|
// delay(100);
|
||||||
|
// appendFile(SD, "/hello.txt", "World!\n");
|
||||||
|
// delay(100);
|
||||||
|
// readFile(SD, "/hello.txt");
|
||||||
|
// deleteFile(SD, "/foo.txt");
|
||||||
|
// renameFile(SD, "/hello.txt", "/foo.txt");
|
||||||
|
// readFile(SD, "/foo.txt");
|
||||||
|
// testFileIO(SD, "/test.txt");
|
||||||
|
// Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
|
||||||
|
// Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ |
||||||
|
Serial.printf("Listing directory: %s\n", dirname); |
||||||
|
|
||||||
|
File root = fs.open(dirname); |
||||||
|
if(!root){ |
||||||
|
Serial.println("Failed to open directory"); |
||||||
|
return; |
||||||
|
} |
||||||
|
if(!root.isDirectory()){ |
||||||
|
Serial.println("Not a directory"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
File file = root.openNextFile(); |
||||||
|
while(file){ |
||||||
|
if(file.isDirectory()){ |
||||||
|
Serial.print(" DIR : "); |
||||||
|
Serial.println(file.name()); |
||||||
|
if(levels){ |
||||||
|
listDir(fs, file.name(), levels -1); |
||||||
|
} |
||||||
|
} else { |
||||||
|
Serial.print(" FILE: "); |
||||||
|
Serial.print(file.name()); |
||||||
|
Serial.print(" SIZE: "); |
||||||
|
Serial.println(file.size()); |
||||||
|
} |
||||||
|
file = root.openNextFile(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void createDir(fs::FS &fs, const char * path){ |
||||||
|
// Serial.printf("Creating Dir: %s\n", path);
|
||||||
|
if(fs.mkdir(path)){ |
||||||
|
Serial.println("Dir created"); |
||||||
|
} else { |
||||||
|
Serial.println("no dir"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void removeDir(fs::FS &fs, const char * path){ |
||||||
|
Serial.printf("Removing Dir: %s\n", path); |
||||||
|
if(fs.rmdir(path)){ |
||||||
|
Serial.println("Dir removed"); |
||||||
|
} else { |
||||||
|
Serial.println("rmdir failed"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void readFile(fs::FS &fs, const char * path){ |
||||||
|
Serial.printf("Reading file: %s\n", path); |
||||||
|
|
||||||
|
File file = fs.open(path); |
||||||
|
if(!file){ |
||||||
|
Serial.println("Failed to open file for reading"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Serial.print("Read from file: "); |
||||||
|
while(file.available()){ |
||||||
|
Serial.write(file.read()); |
||||||
|
} |
||||||
|
file.close(); |
||||||
|
} |
||||||
|
|
||||||
|
void writeFile(fs::FS &fs, const char * path, const char * message){ |
||||||
|
Serial.printf("Writing file: %s\n", path); |
||||||
|
|
||||||
|
File file = fs.open(path, FILE_WRITE); |
||||||
|
if(!file){ |
||||||
|
Serial.println("Failed to open file for writing"); |
||||||
|
return; |
||||||
|
} |
||||||
|
if(file.print(message)){ |
||||||
|
Serial.println("File written"); |
||||||
|
} else { |
||||||
|
Serial.println("Write failed"); |
||||||
|
} |
||||||
|
file.close(); |
||||||
|
} |
||||||
|
|
||||||
|
void appendFile(fs::FS &fs, const char * path, const char * message){ |
||||||
|
Serial.printf("Appending to file: %s\n", path); |
||||||
|
|
||||||
|
File file = fs.open(path, FILE_APPEND); |
||||||
|
if(!file){ |
||||||
|
Serial.println("Failed to open file for appending"); |
||||||
|
return; |
||||||
|
} |
||||||
|
if(file.print(message)){ |
||||||
|
Serial.println("Message appended"); |
||||||
|
} else { |
||||||
|
Serial.println("Append failed"); |
||||||
|
} |
||||||
|
file.close(); |
||||||
|
} |
||||||
|
|
||||||
|
void renameFile(fs::FS &fs, const char * path1, const char * path2){ |
||||||
|
Serial.printf("Renaming file %s to %s\n", path1, path2); |
||||||
|
if (fs.rename(path1, path2)) { |
||||||
|
Serial.println("File renamed"); |
||||||
|
} else { |
||||||
|
Serial.println("Rename failed"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void deleteFile(fs::FS &fs, const char * path){ |
||||||
|
Serial.printf("Deleting file: %s\n", path); |
||||||
|
if(fs.remove(path)){ |
||||||
|
Serial.println("File deleted"); |
||||||
|
} else { |
||||||
|
Serial.println("Delete failed"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void testFileIO(fs::FS &fs, const char * path){ |
||||||
|
File file = fs.open(path); |
||||||
|
static uint8_t buf[512]; |
||||||
|
size_t len = 0; |
||||||
|
uint32_t start = millis(); |
||||||
|
uint32_t end = start; |
||||||
|
if(file){ |
||||||
|
len = file.size(); |
||||||
|
size_t flen = len; |
||||||
|
start = millis(); |
||||||
|
while(len){ |
||||||
|
size_t toRead = len; |
||||||
|
if(toRead > 512){ |
||||||
|
toRead = 512; |
||||||
|
} |
||||||
|
file.read(buf, toRead); |
||||||
|
len -= toRead; |
||||||
|
} |
||||||
|
end = millis() - start; |
||||||
|
Serial.printf("%u bytes read for %u ms\n", flen, end); |
||||||
|
file.close(); |
||||||
|
} else { |
||||||
|
Serial.println("Failed to open file for reading"); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
file = fs.open(path, FILE_WRITE); |
||||||
|
if(!file){ |
||||||
|
Serial.println("Failed to open file for writing"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
size_t i; |
||||||
|
start = millis(); |
||||||
|
for(i=0; i<2048; i++){ |
||||||
|
file.write(buf, 512); |
||||||
|
} |
||||||
|
end = millis() - start; |
||||||
|
Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end); |
||||||
|
file.close(); |
||||||
|
} |
||||||
@ -0,0 +1,117 @@ |
|||||||
|
void savedata() |
||||||
|
{ |
||||||
|
|
||||||
|
JSONVar boardat; |
||||||
|
if(min1<10) |
||||||
|
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
boardat["temperatura"] =String(t1)+" C"; |
||||||
|
boardat["humidity"] = String(h1)+" %"; |
||||||
|
tempdat = JSON.stringify(boardat); |
||||||
|
Serial.println (tempdat); |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||||
|
tempdat=tempdat+"\n"; |
||||||
|
|
||||||
|
//myFile = SD.open("/07.txt",FILE_WRITE);
|
||||||
|
// myFile = SD.open("/TEMPUL/28.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||||
|
// myFile = SD.open("/TEMPUL/2022/FEB/27.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||||
|
|
||||||
|
// Serial.println ("open07");
|
||||||
|
// myFile.print(tempdat+"\n");
|
||||||
|
// myFile.close();
|
||||||
|
//Serial.println (stamp.year);
|
||||||
|
//************************************************************************************************************************************************************************************************************************************
|
||||||
|
Serial.println ("name2"); |
||||||
|
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||||
|
// Serial.println (name2);
|
||||||
|
createDir(SD, "/TEMPUL"); |
||||||
|
String name1="/TEMPUL"+ String(stryen[stamp.year-2014]);//2022
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strmen[stamp.month-1]);//FEB
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strden[stamp.day-1]);//27
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+String(strdaten[0]);//
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||||
|
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||||
|
Serial.println (Buf); |
||||||
|
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||||
|
|
||||||
|
/*
|
||||||
|
//test = strcat(name1,name2);
|
||||||
|
String name1=strcat("/TEMPUL", stryen[stamp.year-2014]); |
||||||
|
String name2=strcat(strmen[stamp.month-1], strd[stamp.day-1]); |
||||||
|
|
||||||
|
//+strm[stamp.month-1]+strd[stamp.day-1];
|
||||||
|
|
||||||
|
String name1="/TEMPUL"+ stry[stamp.year-2014]+strm[stamp.month-1]+strd[stamp.day-1]; |
||||||
|
Serial.println (name2); |
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50);
|
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+ name2+strdaten[0]; |
||||||
|
Serial.println (name1); |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
*/ |
||||||
|
|
||||||
|
//****************************************************
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void readdata() |
||||||
|
{ |
||||||
|
//****************************************************
|
||||||
|
String name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[nti]); |
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
|
||||||
|
myFile = SD.open(Buf, FILE_READ); |
||||||
|
while(myFile.available()) { |
||||||
|
Serial.write(myFile.read()); |
||||||
|
} |
||||||
|
Serial.println(" ");
|
||||||
|
// Узнаем размер файла:
|
||||||
|
Serial.print("File size: "); |
||||||
|
// "Размер файла: "
|
||||||
|
Serial.println(myFile.size()); |
||||||
|
myFile.close(); |
||||||
|
|
||||||
|
strdat=""; |
||||||
|
|
||||||
|
Serial.println("/TEMPUL/D-2022/FEBR/27/T1.txt"); |
||||||
|
myFile = SD.open(Buf, FILE_READ); |
||||||
|
while(myFile.available()) { |
||||||
|
strdat+=char(myFile.read()); |
||||||
|
} |
||||||
|
myFile.close(); |
||||||
|
|
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
|
||||||
|
|
||||||
|
board1["tdata"] = strdat;
|
||||||
|
board1["dataserv"] = dataserv; |
||||||
|
board1["timeserv"] = timeserv; |
||||||
|
jsonString1 = JSON.stringify(board1); |
||||||
|
// Serial.println (jsonString1);
|
||||||
|
// Serial.println ("strdat=");
|
||||||
|
//Serial.println (strdat);
|
||||||
|
|
||||||
|
// events.send(tempdat.c_str(), "readings", millis());//обновление веба
|
||||||
|
// events.send(strdat.c_str(), "readings", millis());//обновление веба
|
||||||
|
} |
||||||
@ -0,0 +1,207 @@ |
|||||||
|
void savebalk() |
||||||
|
{ |
||||||
|
boolean q=0; |
||||||
|
if((hb==hour1)&&( mb==min1)){q=1;} |
||||||
|
hb=hour1; |
||||||
|
mb=min1; |
||||||
|
if(q==0) |
||||||
|
{
|
||||||
|
JSONVar boardat; |
||||||
|
if(min1<10) |
||||||
|
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
boardat["temperatura"] =String(tbal)+" C"; |
||||||
|
boardat["humidity"] = String(hbal)+" %"; |
||||||
|
tempdat = JSON.stringify(boardat); |
||||||
|
Serial.println (tempdat); |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||||
|
tempdat=tempdat+"\n"; |
||||||
|
|
||||||
|
Serial.println ("name2"); |
||||||
|
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||||
|
// Serial.println (name2);
|
||||||
|
createDir(SD, "/TEMPUL"); |
||||||
|
String name1="/TEMPUL"+ String(stryen[stamp.year-2014]);//2022
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strmen[stamp.month-1]);//FEB
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strden[stamp.day-1]);//27
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+String(strdaten[2]);//
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||||
|
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||||
|
Serial.println (Buf); |
||||||
|
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||||
|
} |
||||||
|
} |
||||||
|
//*************************K2*****************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
void savek2() |
||||||
|
{ |
||||||
|
|
||||||
|
JSONVar boardat; |
||||||
|
if(min1<10) |
||||||
|
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
boardat["temperatura"] =String(tkom2)+" C"; |
||||||
|
boardat["humidity"] = String(hkom2)+" %"; |
||||||
|
tempdat = JSON.stringify(boardat); |
||||||
|
Serial.println (tempdat); |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||||
|
tempdat=tempdat+"\n"; |
||||||
|
|
||||||
|
Serial.println ("name2"); |
||||||
|
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||||
|
// Serial.println (name2);
|
||||||
|
createDir(SD, "/TEMPUL"); |
||||||
|
String name1="/TEMPUL"+ String(stryen[stamp.year-2014]);//2022
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strmen[stamp.month-1]);//FEB
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strden[stamp.day-1]);//27
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+String(strdaten[3]);//
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||||
|
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||||
|
Serial.println (Buf); |
||||||
|
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
//**************************K1****************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
void savek1() |
||||||
|
{ |
||||||
|
boolean q=0; |
||||||
|
if((hk==hour1)&&( mk==min1)){q=1;} |
||||||
|
hk=hour1; |
||||||
|
mk=min1; |
||||||
|
if(q==0) |
||||||
|
{
|
||||||
|
JSONVar boardat; |
||||||
|
if(min1<10) |
||||||
|
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
boardat["temperatura"] =String(tkom1)+" C"; |
||||||
|
boardat["humidity"] = String(hkom1)+" %"; |
||||||
|
tempdat = JSON.stringify(boardat); |
||||||
|
Serial.println (tempdat); |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||||
|
tempdat=tempdat+"\n"; |
||||||
|
|
||||||
|
Serial.println ("name2"); |
||||||
|
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||||
|
// Serial.println (name2);
|
||||||
|
createDir(SD, "/TEMPUL"); |
||||||
|
String name1="/TEMPUL"+ String(stryen[stamp.year-2014]);//2022
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strmen[stamp.month-1]);//FEB
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strden[stamp.day-1]);//27
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+String(strdaten[4]);//
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||||
|
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||||
|
Serial.println (Buf); |
||||||
|
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//*********************kor*********************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
void savekor() |
||||||
|
{ |
||||||
|
boolean q=0; |
||||||
|
if((hkr==hour1)&&( mkr==min1)){q=1;} |
||||||
|
hkr=hour1; |
||||||
|
mkr=min1; |
||||||
|
if(q==0) |
||||||
|
{
|
||||||
|
JSONVar boardat; |
||||||
|
if(min1<10) |
||||||
|
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
boardat["temperatura"] =String(tkor)+" C"; |
||||||
|
boardat["humidity"] = String(hkor)+" %"; |
||||||
|
tempdat = JSON.stringify(boardat); |
||||||
|
Serial.println (tempdat); |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||||
|
tempdat=tempdat+"\n"; |
||||||
|
|
||||||
|
Serial.println ("name2"); |
||||||
|
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||||
|
// Serial.println (name2);
|
||||||
|
createDir(SD, "/TEMPUL"); |
||||||
|
String name1="/TEMPUL"+ String(stryen[stamp.year-2014]);//2022
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strmen[stamp.month-1]);//FEB
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strden[stamp.day-1]);//27
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+String(strdaten[5]);//
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||||
|
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||||
|
Serial.println (Buf); |
||||||
|
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,94 @@ |
|||||||
|
void saveul() |
||||||
|
{ |
||||||
|
nt=0;//сброс номера температ датчика
|
||||||
|
|
||||||
|
|
||||||
|
int q=0; |
||||||
|
if((hour1<1)&&(min1<20))timev=0;//до 00:20 сброс timev-врмя записи на флеш улица восто приходят каждые 3 мин а зап каждые 20 мин
|
||||||
|
|
||||||
|
if(timev+20<hour1*60+min1){q=1;} |
||||||
|
|
||||||
|
|
||||||
|
ct1=ct1+1;//счетчик пропуска записи данных
|
||||||
|
Serial.print("ct="); |
||||||
|
Serial.println(ct1); |
||||||
|
if(ct1>15){ |
||||||
|
ct1=0; |
||||||
|
q=1; |
||||||
|
}//счетчик пропуска записи данныx
|
||||||
|
if(q==1) |
||||||
|
{
|
||||||
|
timev=hour1*60+min1; |
||||||
|
|
||||||
|
JSONVar boardat; |
||||||
|
if(min1<10) |
||||||
|
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
boardat["temperatura"] =String(tul1)+" C"; |
||||||
|
boardat["humidity"] = String(hul1)+" %"; |
||||||
|
tempdat = JSON.stringify(boardat); |
||||||
|
Serial.println (tempdat); |
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||||
|
tempdat=tempdat+"\n"; |
||||||
|
|
||||||
|
//myFile = SD.open("/07.txt",FILE_WRITE);
|
||||||
|
// myFile = SD.open("/TEMPUL/28.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||||
|
// myFile = SD.open("/TEMPUL/2022/FEB/27.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||||
|
|
||||||
|
// Serial.println ("open07");
|
||||||
|
// myFile.print(tempdat+"\n");
|
||||||
|
// myFile.close();
|
||||||
|
//Serial.println (stamp.year);
|
||||||
|
//************************************************************************************************************************************************************************************************************************************
|
||||||
|
Serial.println ("name2"); |
||||||
|
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||||
|
// Serial.println (name2);
|
||||||
|
createDir(SD, "/TEMPUL"); |
||||||
|
String name1="/TEMPUL"+ String(stryen[stamp.year-2014]);//2022
|
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strmen[stamp.month-1]);//FEB
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
name1=name1+String(strden[stamp.day-1]);//27
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
Serial.println (Buf); |
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+String(strdaten[1]);//
|
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||||
|
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||||
|
Serial.println (Buf); |
||||||
|
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||||
|
|
||||||
|
/*
|
||||||
|
//test = strcat(name1,name2);
|
||||||
|
String name1=strcat("/TEMPUL", stryen[stamp.year-2014]); |
||||||
|
String name2=strcat(strmen[stamp.month-1], strd[stamp.day-1]); |
||||||
|
|
||||||
|
//+strm[stamp.month-1]+strd[stamp.day-1];
|
||||||
|
|
||||||
|
String name1="/TEMPUL"+ stry[stamp.year-2014]+strm[stamp.month-1]+strd[stamp.day-1]; |
||||||
|
Serial.println (name2); |
||||||
|
char Buf[50]; |
||||||
|
name1.toCharArray(Buf, 50);
|
||||||
|
createDir(SD, Buf); |
||||||
|
|
||||||
|
name1=name1+ name2+strdaten[0]; |
||||||
|
Serial.println (name1); |
||||||
|
name1.toCharArray(Buf, 50); |
||||||
|
*/ |
||||||
|
ct1=0; |
||||||
|
//****************************************************
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,27 @@ |
|||||||
|
void WiFisetup() |
||||||
|
{ |
||||||
|
// Set the device as a Station and Soft Access Point simultaneously
|
||||||
|
WiFi.mode(WIFI_AP_STA); |
||||||
|
|
||||||
|
// Set device as a Wi-Fi Station
|
||||||
|
WiFi.begin(ssid, password); |
||||||
|
|
||||||
|
digitalWrite(13, HIGH); // светодиод горит
|
||||||
|
while (WiFi.status() != WL_CONNECTED) { |
||||||
|
delay(1000); |
||||||
|
Serial.println("Setting as a Wi-Fi Station.."); |
||||||
|
} |
||||||
|
digitalWrite(13, LOW); // светодиод погашен
|
||||||
|
|
||||||
|
Serial.print("Station IP Address: "); |
||||||
|
Serial.println(WiFi.localIP()); |
||||||
|
Serial.print("Wi-Fi Channel: "); |
||||||
|
Serial.println(WiFi.channel()); |
||||||
|
|
||||||
|
// Init ESP-NOW
|
||||||
|
if (esp_now_init() != ESP_OK) { |
||||||
|
Serial.println("Error initializing ESP-NOW"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 775 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 128 KiB |
@ -0,0 +1,9 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<browserconfig> |
||||||
|
<msapplication> |
||||||
|
<tile> |
||||||
|
<square150x150logo src="/mstile-150x150.png"/> |
||||||
|
<TileColor>#da532c</TileColor> |
||||||
|
</tile> |
||||||
|
</msapplication> |
||||||
|
</browserconfig> |
||||||
|
After Width: | Height: | Size: 775 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 266 B |
|
After Width: | Height: | Size: 266 B |
|
After Width: | Height: | Size: 5.7 KiB |
@ -0,0 +1,19 @@ |
|||||||
|
{ |
||||||
|
"name": "", |
||||||
|
"short_name": "", |
||||||
|
"icons": [ |
||||||
|
{ |
||||||
|
"src": "/android-chrome-192x192.png", |
||||||
|
"sizes": "192x192", |
||||||
|
"type": "image/png" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"src": "/android-chrome-512x512.png", |
||||||
|
"sizes": "512x512", |
||||||
|
"type": "image/png" |
||||||
|
} |
||||||
|
], |
||||||
|
"theme_color": "#ffffff", |
||||||
|
"background_color": "#ffffff", |
||||||
|
"display": "standalone" |
||||||
|
} |
||||||
@ -0,0 +1,239 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="icon" href="favicon.ico"> |
||||||
|
|
||||||
|
<link rel="icon" type="png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<div id="container"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<div id="sidebar"> |
||||||
|
|
||||||
|
<div class="manth"> |
||||||
|
<p><span id="munthserv">январь</span></p> |
||||||
|
</div> |
||||||
|
<div class="data"> |
||||||
|
<p><span id="dataserv">01</span></p> |
||||||
|
<div class="week"> |
||||||
|
<p><span id="weekserv">суббота</span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="times"> |
||||||
|
<p><span id="timeserv">00:00</span></p> |
||||||
|
</div> |
||||||
|
<div class="levnav"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p> <a href="index.html" title="Главная"> Главная</a></p> |
||||||
|
<p><a href="setting.html" title="настройки">настройки</a></p> |
||||||
|
<p><a href="upravlenie.html" title="управление">управление</a></p> |
||||||
|
<p><a href="inform.html" title="информация">информация</a></p> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
<nav id="navigation"><a href="inform1.html" title="информация">улица восток</a></nav> |
||||||
|
<nav id="navigation"><a href="inform.html" title="информация">улица запад</a></nav> |
||||||
|
<nav id="navigation"><a href="inform4.html" title="информация">коридор</a></nav> |
||||||
|
<nav id="navigation"><a href="inform2.html" title="информация">комната1</a></nav> |
||||||
|
<nav id="navigation"><a href="inform3.html" title="информация">комната2</a></nav> |
||||||
|
<nav id="navigation"><a href="inform6.html" title="информация">кухня</a></nav> |
||||||
|
<nav id="navigation"><a href="inform5.html" title="информация">балкон</a></nav> |
||||||
|
<div id="content"> |
||||||
|
<h1>Улица(восток)</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<h1>Улица(запад)</h1> |
||||||
|
|
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Time <span id="tim2"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<h1>Комната1</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom1"></span> °C</span></p><p class="packet">Battery <span id="batkom1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom1"></span> %</span></p><p class="packet">Time <span id="timekom1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<h1>Комната2</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom2"></span> °C</span></p><p class="packet">Battery <span id="batkom2"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom2"></span> %</span></p><p class="packet">Time <span id="timekom2"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<h1>Коридор</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkor"></span> °C</span></p><p class="packet">Battery <span id="batkor"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkor"></span> %</span></p><p class="packet">Time <span id="timekor"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<h1>Балкон</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tbal"></span> °C</span></p><p class="packet">Battery <span id="batbal"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hbal"></span> %</span></p><p class="packet">Time <span id="timebal"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<h1>Кухня</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<h1></h1> |
||||||
|
|
||||||
|
<div class="top"> |
||||||
|
<font size="2" >Время работы сервера: </font> |
||||||
|
<font color="#CF7071" size="3"><span id="t10">0:00</span></font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div id="clear"> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
<p></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!!window.EventSource) { |
||||||
|
var source = new EventSource('/events'); |
||||||
|
|
||||||
|
source.addEventListener('open', function(e) { |
||||||
|
console.log("Events Connected"); |
||||||
|
}, false); |
||||||
|
source.addEventListener('error', function(e) { |
||||||
|
if (e.target.readyState != EventSource.OPEN) { |
||||||
|
console.log("Events Disconnected"); |
||||||
|
} |
||||||
|
}, false); |
||||||
|
|
||||||
|
source.addEventListener('message', function(e) { |
||||||
|
console.log("message", e.data); |
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||||
|
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||||
|
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('timeserv', function(e) {//ремя работы сервера |
||||||
|
document.getElementById("timeserv").innerHTML =e.data; |
||||||
|
}, false); |
||||||
|
|
||||||
|
source.addEventListener('t10', function(e) {//ремя работы сервера |
||||||
|
document.getElementById("t10").innerHTML =e.data; |
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('new_readings', function(e) { |
||||||
|
console.log("new_readings", e.data); |
||||||
|
var obj = JSON.parse(e.data); |
||||||
|
document.getElementById("t1").innerHTML = obj.temperature.toFixed(1); |
||||||
|
document.getElementById("h1").innerHTML = obj.humidity.toFixed(1); |
||||||
|
document.getElementById("tim2").innerHTML = obj.tim2; |
||||||
|
document.getElementById("tim3").innerHTML = obj.tim3; |
||||||
|
document.getElementById("dataserv").innerHTML = obj.dataserv; |
||||||
|
document.getElementById("timeserv").innerHTML = obj.timeserv; |
||||||
|
document.getElementById("munthserv").innerHTML = obj.munthserv; |
||||||
|
document.getElementById("weekserv").innerHTML = obj.weekserv; |
||||||
|
}, false); |
||||||
|
|
||||||
|
source.addEventListener('new_datatemp', function(e) { |
||||||
|
console.log("new_datatemp", e.data); |
||||||
|
var obj = JSON.parse(e.data); |
||||||
|
document.getElementById("tkom1").innerHTML = obj.tkom1; |
||||||
|
document.getElementById("hkom1").innerHTML = obj.hkom1; |
||||||
|
document.getElementById("batkom1").innerHTML = obj.batkom1; |
||||||
|
document.getElementById("timekom1").innerHTML = obj.timekom1; |
||||||
|
document.getElementById("tkom2").innerHTML = obj.tkom2; |
||||||
|
document.getElementById("hkom2").innerHTML = obj.hkom2; |
||||||
|
document.getElementById("batkom2").innerHTML = obj.batkom2; |
||||||
|
document.getElementById("timekom2").innerHTML = obj.timekom2; |
||||||
|
document.getElementById("tkor").innerHTML = obj.tkor; |
||||||
|
document.getElementById("hkor").innerHTML = obj.hkor; |
||||||
|
document.getElementById("batkor").innerHTML = obj.batkor; |
||||||
|
document.getElementById("timekor").innerHTML = obj.timekor; |
||||||
|
document.getElementById("tbal").innerHTML = obj.tbal; |
||||||
|
document.getElementById("hbal").innerHTML = obj.hbal; |
||||||
|
document.getElementById("batbal").innerHTML = obj.batbal; |
||||||
|
document.getElementById("timebal").innerHTML = obj.timebal; |
||||||
|
document.getElementById("tul1").innerHTML = obj.tul1; |
||||||
|
document.getElementById("hul1").innerHTML = obj.hul1; |
||||||
|
document.getElementById("osv1").innerHTML = obj.osv1; |
||||||
|
document.getElementById("timeul1").innerHTML = obj.timeul1; |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,161 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<link rel="manifest" href="imajes/site.webmanifest"> |
||||||
|
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Улица(запад)</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Time <span id="tim2"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="tablinfo"> |
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!!window.EventSource) { |
||||||
|
var source = new EventSource('/events'); |
||||||
|
|
||||||
|
source.addEventListener('open', function(e) { |
||||||
|
console.log("Events Connected"); |
||||||
|
}, false); |
||||||
|
source.addEventListener('error', function(e) { |
||||||
|
if (e.target.readyState != EventSource.OPEN) { |
||||||
|
console.log("Events Disconnected"); |
||||||
|
} |
||||||
|
}, false); |
||||||
|
|
||||||
|
source.addEventListener('message', function(e) { |
||||||
|
console.log("message", e.data); |
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('new_readings', function(e) { |
||||||
|
console.log("new_readings", e.data); |
||||||
|
var obj = JSON.parse(e.data); |
||||||
|
document.getElementById("t1").innerHTML = obj.temperature.toFixed(1); |
||||||
|
document.getElementById("h1").innerHTML = obj.humidity.toFixed(1); |
||||||
|
document.getElementById("tim2").innerHTML = obj.tim2; |
||||||
|
document.getElementById("tim3").innerHTML = obj.tim3; |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||||
|
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||||
|
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||||
|
|
||||||
|
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||||
|
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||||
|
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||||
|
|
||||||
|
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('readings', function(e) { |
||||||
|
console.log("readings", e.data); |
||||||
|
|
||||||
|
|
||||||
|
re = e.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
//String[] anArrayOfStrings; |
||||||
|
var data=[]; |
||||||
|
|
||||||
|
for(var i = 0; i < re.length; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
append_json(data); |
||||||
|
|
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
|
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,162 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<link rel="manifest" href="imajes/site.webmanifest"> |
||||||
|
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Улица(восток)</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="tablinfo"> |
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!!window.EventSource) { |
||||||
|
var source = new EventSource('/events'); |
||||||
|
|
||||||
|
source.addEventListener('open', function(e) { |
||||||
|
console.log("Events Connected"); |
||||||
|
}, false); |
||||||
|
source.addEventListener('error', function(e) { |
||||||
|
if (e.target.readyState != EventSource.OPEN) { |
||||||
|
console.log("Events Disconnected"); |
||||||
|
} |
||||||
|
}, false); |
||||||
|
|
||||||
|
source.addEventListener('message', function(e) { |
||||||
|
console.log("message", e.data); |
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('new_datatemp', function(e) { |
||||||
|
console.log("new_datatemp", e.data); |
||||||
|
var obj = JSON.parse(e.data); |
||||||
|
|
||||||
|
document.getElementById("tul1").innerHTML = obj.tul1; |
||||||
|
document.getElementById("hul1").innerHTML = obj.hul1; |
||||||
|
document.getElementById("osv1").innerHTML = obj.osv1; |
||||||
|
document.getElementById("timeul1").innerHTML = obj.timeul1; |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||||
|
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||||
|
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||||
|
|
||||||
|
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||||
|
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||||
|
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||||
|
|
||||||
|
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('readings', function(e) { |
||||||
|
console.log("readings", e.data); |
||||||
|
|
||||||
|
|
||||||
|
re = e.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
//String[] anArrayOfStrings; |
||||||
|
var data=[]; |
||||||
|
|
||||||
|
for(var i = 0; i < re.length; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
append_json(data); |
||||||
|
|
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
|
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,160 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<link rel="manifest" href="imajes/site.webmanifest"> |
||||||
|
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Комната1</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom1"></span> °C</span></p><p class="packet">Battery <span id="batkom1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom1"></span> %</span></p><p class="packet">Time <span id="timekom1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="tablinfo"> |
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!!window.EventSource) { |
||||||
|
var source = new EventSource('/events'); |
||||||
|
|
||||||
|
source.addEventListener('open', function(e) { |
||||||
|
console.log("Events Connected"); |
||||||
|
}, false); |
||||||
|
source.addEventListener('error', function(e) { |
||||||
|
if (e.target.readyState != EventSource.OPEN) { |
||||||
|
console.log("Events Disconnected"); |
||||||
|
} |
||||||
|
}, false); |
||||||
|
|
||||||
|
source.addEventListener('message', function(e) { |
||||||
|
console.log("message", e.data); |
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('new_datatemp', function(e) { |
||||||
|
console.log("new_datatemp", e.data); |
||||||
|
var obj = JSON.parse(e.data); |
||||||
|
document.getElementById("tkom1").innerHTML = obj.tkom1; |
||||||
|
document.getElementById("hkom1").innerHTML = obj.hkom1; |
||||||
|
document.getElementById("batkom1").innerHTML = obj.batkom1; |
||||||
|
document.getElementById("timekom1").innerHTML = obj.timekom1; |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||||
|
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||||
|
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||||
|
|
||||||
|
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||||
|
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||||
|
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||||
|
|
||||||
|
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('readings', function(e) { |
||||||
|
console.log("readings", e.data); |
||||||
|
|
||||||
|
|
||||||
|
re = e.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
//String[] anArrayOfStrings; |
||||||
|
var data=[]; |
||||||
|
|
||||||
|
for(var i = 0; i < re.length; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
append_json(data); |
||||||
|
|
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
|
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,161 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<link rel="manifest" href="imajes/site.webmanifest"> |
||||||
|
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Комната2</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom2"></span> °C</span></p><p class="packet">Battery <span id="batkom2"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom2"></span> %</span></p><p class="packet">Time <span id="timekom2"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="tablinfo"> |
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!!window.EventSource) { |
||||||
|
var source = new EventSource('/events'); |
||||||
|
|
||||||
|
source.addEventListener('open', function(e) { |
||||||
|
console.log("Events Connected"); |
||||||
|
}, false); |
||||||
|
source.addEventListener('error', function(e) { |
||||||
|
if (e.target.readyState != EventSource.OPEN) { |
||||||
|
console.log("Events Disconnected"); |
||||||
|
} |
||||||
|
}, false); |
||||||
|
|
||||||
|
source.addEventListener('message', function(e) { |
||||||
|
console.log("message", e.data); |
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('new_datatemp', function(e) { |
||||||
|
console.log("new_datatemp", e.data); |
||||||
|
var obj = JSON.parse(e.data); |
||||||
|
|
||||||
|
document.getElementById("tkom2").innerHTML = obj.tkom2; |
||||||
|
document.getElementById("hkom2").innerHTML = obj.hkom2; |
||||||
|
document.getElementById("batkom2").innerHTML = obj.batkom2; |
||||||
|
document.getElementById("timekom2").innerHTML = obj.timekom2; |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||||
|
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||||
|
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||||
|
|
||||||
|
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||||
|
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||||
|
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||||
|
|
||||||
|
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('readings', function(e) { |
||||||
|
console.log("readings", e.data); |
||||||
|
|
||||||
|
|
||||||
|
re = e.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
//String[] anArrayOfStrings; |
||||||
|
var data=[]; |
||||||
|
|
||||||
|
for(var i = 0; i < re.length; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
append_json(data); |
||||||
|
|
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
|
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,162 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<link rel="manifest" href="imajes/site.webmanifest"> |
||||||
|
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Коридор</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkor"></span> °C</span></p><p class="packet">Battery <span id="batkor"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkor"></span> %</span></p><p class="packet">Time <span id="timekor"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="tablinfo"> |
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!!window.EventSource) { |
||||||
|
var source = new EventSource('/events'); |
||||||
|
|
||||||
|
source.addEventListener('open', function(e) { |
||||||
|
console.log("Events Connected"); |
||||||
|
}, false); |
||||||
|
source.addEventListener('error', function(e) { |
||||||
|
if (e.target.readyState != EventSource.OPEN) { |
||||||
|
console.log("Events Disconnected"); |
||||||
|
} |
||||||
|
}, false); |
||||||
|
|
||||||
|
source.addEventListener('message', function(e) { |
||||||
|
console.log("message", e.data); |
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('new_datatemp', function(e) { |
||||||
|
console.log("new_datatemp", e.data); |
||||||
|
var obj = JSON.parse(e.data); |
||||||
|
|
||||||
|
document.getElementById("tkor").innerHTML = obj.tkor; |
||||||
|
document.getElementById("hkor").innerHTML = obj.hkor; |
||||||
|
document.getElementById("batkor").innerHTML = obj.batkor; |
||||||
|
document.getElementById("timekor").innerHTML = obj.timekor; |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||||
|
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||||
|
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||||
|
|
||||||
|
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||||
|
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||||
|
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||||
|
|
||||||
|
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('readings', function(e) { |
||||||
|
console.log("readings", e.data); |
||||||
|
|
||||||
|
|
||||||
|
re = e.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
//String[] anArrayOfStrings; |
||||||
|
var data=[]; |
||||||
|
|
||||||
|
for(var i = 0; i < re.length; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
append_json(data); |
||||||
|
|
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
|
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,162 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<link rel="manifest" href="imajes/site.webmanifest"> |
||||||
|
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Балкон</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tbal"></span> °C</span></p><p class="packet">Battery <span id="batbal"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hbal"></span> %</span></p><p class="packet">Time <span id="timebal"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="tablinfo"> |
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!!window.EventSource) { |
||||||
|
var source = new EventSource('/events'); |
||||||
|
|
||||||
|
source.addEventListener('open', function(e) { |
||||||
|
console.log("Events Connected"); |
||||||
|
}, false); |
||||||
|
source.addEventListener('error', function(e) { |
||||||
|
if (e.target.readyState != EventSource.OPEN) { |
||||||
|
console.log("Events Disconnected"); |
||||||
|
} |
||||||
|
}, false); |
||||||
|
|
||||||
|
source.addEventListener('message', function(e) { |
||||||
|
console.log("message", e.data); |
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('new_datatemp', function(e) { |
||||||
|
console.log("new_datatemp", e.data); |
||||||
|
var obj = JSON.parse(e.data); |
||||||
|
|
||||||
|
document.getElementById("tbal").innerHTML = obj.tbal; |
||||||
|
document.getElementById("hbal").innerHTML = obj.hbal; |
||||||
|
document.getElementById("batbal").innerHTML = obj.batbal; |
||||||
|
document.getElementById("timebal").innerHTML = obj.timebal; |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||||
|
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||||
|
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||||
|
|
||||||
|
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||||
|
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||||
|
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||||
|
|
||||||
|
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('readings', function(e) { |
||||||
|
console.log("readings", e.data); |
||||||
|
|
||||||
|
|
||||||
|
re = e.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
//String[] anArrayOfStrings; |
||||||
|
var data=[]; |
||||||
|
|
||||||
|
for(var i = 0; i < re.length; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
append_json(data); |
||||||
|
|
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
|
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,161 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<link rel="manifest" href="imajes/site.webmanifest"> |
||||||
|
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Кухня</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="tablinfo"> |
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!!window.EventSource) { |
||||||
|
var source = new EventSource('/events'); |
||||||
|
|
||||||
|
source.addEventListener('open', function(e) { |
||||||
|
console.log("Events Connected"); |
||||||
|
}, false); |
||||||
|
source.addEventListener('error', function(e) { |
||||||
|
if (e.target.readyState != EventSource.OPEN) { |
||||||
|
console.log("Events Disconnected"); |
||||||
|
} |
||||||
|
}, false); |
||||||
|
|
||||||
|
source.addEventListener('message', function(e) { |
||||||
|
console.log("message", e.data); |
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('new_datatemp', function(e) { |
||||||
|
console.log("new_datatemp", e.data); |
||||||
|
var obj = JSON.parse(e.data); |
||||||
|
|
||||||
|
document.getElementById("tul1").innerHTML = obj.tul1; |
||||||
|
document.getElementById("hul1").innerHTML = obj.hul1; |
||||||
|
document.getElementById("osv1").innerHTML = obj.osv1; |
||||||
|
document.getElementById("timeul1").innerHTML = obj.timeul1; |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||||
|
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||||
|
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||||
|
|
||||||
|
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||||
|
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||||
|
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||||
|
|
||||||
|
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('readings', function(e) { |
||||||
|
console.log("readings", e.data); |
||||||
|
|
||||||
|
|
||||||
|
re = e.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
//String[] anArrayOfStrings; |
||||||
|
var data=[]; |
||||||
|
|
||||||
|
for(var i = 0; i < re.length; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
append_json(data); |
||||||
|
|
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
|
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,161 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Информация</title> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<link rel="manifest" href="imajes/site.webmanifest"> |
||||||
|
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
|
||||||
|
<div id="containerinf"> |
||||||
|
|
||||||
|
<div class="topnav" ;id="header" > |
||||||
|
<p><h3>ESP-Домашний сервер</h3> |
||||||
|
</div> |
||||||
|
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
|
||||||
|
<div id="contentinfo"> |
||||||
|
<h1>Улица(восток)</h1> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div><font size="3" color="#1E4486">................................................... </font> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="tablinfo"> |
||||||
|
|
||||||
|
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||||
|
<colgroup> |
||||||
|
<col class="twenty" /> |
||||||
|
<col class="fourty" /> |
||||||
|
<col class="thirtyfive" /> |
||||||
|
</colgroup> |
||||||
|
<tr> |
||||||
|
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||||
|
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||||
|
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<p class="packet"> <span id="tdata"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!!window.EventSource) { |
||||||
|
var source = new EventSource('/events'); |
||||||
|
|
||||||
|
source.addEventListener('open', function(e) { |
||||||
|
console.log("Events Connected"); |
||||||
|
}, false); |
||||||
|
source.addEventListener('error', function(e) { |
||||||
|
if (e.target.readyState != EventSource.OPEN) { |
||||||
|
console.log("Events Disconnected"); |
||||||
|
} |
||||||
|
}, false); |
||||||
|
|
||||||
|
source.addEventListener('message', function(e) { |
||||||
|
console.log("message", e.data); |
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('new_datatemp', function(e) { |
||||||
|
console.log("new_datatemp", e.data); |
||||||
|
var obj = JSON.parse(e.data); |
||||||
|
|
||||||
|
document.getElementById("tul1").innerHTML = obj.tul1; |
||||||
|
document.getElementById("hul1").innerHTML = obj.hul1; |
||||||
|
document.getElementById("osv1").innerHTML = obj.osv1; |
||||||
|
document.getElementById("timeul1").innerHTML = obj.timeul1; |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||||
|
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||||
|
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||||
|
|
||||||
|
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||||
|
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||||
|
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||||
|
|
||||||
|
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('readings', function(e) { |
||||||
|
console.log("readings", e.data); |
||||||
|
|
||||||
|
|
||||||
|
re = e.data.split("\n"); |
||||||
|
console.log(re); |
||||||
|
//String[] anArrayOfStrings; |
||||||
|
var data=[]; |
||||||
|
|
||||||
|
for(var i = 0; i < re.length; i++) { |
||||||
|
data[i] = JSON.parse(re[i]); |
||||||
|
console.log("data", data); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
append_json(data); |
||||||
|
|
||||||
|
//this function appends the json data to the table 'gable' |
||||||
|
function append_json(data){ |
||||||
|
var table = document.getElementById('gable'); |
||||||
|
|
||||||
|
data.forEach(function(object) { |
||||||
|
var tr = document.createElement('tr'); |
||||||
|
|
||||||
|
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||||
|
'<td>' + object.temperatura + '</td>' + |
||||||
|
'<td>' + object.humidity + '</td>' |
||||||
|
table.appendChild(tr); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 266 B |
|
After Width: | Height: | Size: 266 B |
@ -0,0 +1,58 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title>Настройка</title> |
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<link rel="manifest" href="imajes/site.webmanifest"> |
||||||
|
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||||
|
<meta name="msapplication-TileColor" content="#da532c"> |
||||||
|
<meta name="theme-color" content="#ffffff"> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body"> |
||||||
|
<h2 id="h2">ESP32 управляет освещением комнаты</h2> |
||||||
|
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||||
|
|
||||||
|
|
||||||
|
<select id="myselect" onchange="change_myselect(this.value)"> |
||||||
|
<option value="">Выберите значение:</option> |
||||||
|
<option value="customers">Покупатели</option> |
||||||
|
<option value="products">Товары</option> |
||||||
|
<option value="suppliers">Поставщики</option> |
||||||
|
</select> |
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
function change_myselect(sel) { |
||||||
|
var obj, dbParam, xmlhttp, myObj, x, txt = ""; |
||||||
|
obj = { "table":sel, "limit":20 }; |
||||||
|
dbParam = JSON.stringify(obj); |
||||||
|
xmlhttp = new XMLHttpRequest(); |
||||||
|
xmlhttp.onreadystatechange = function() { |
||||||
|
if (this.readyState == 4 && this.status == 200) { |
||||||
|
myObj = JSON.parse(this.responseText); |
||||||
|
txt += "<table border='1'>" |
||||||
|
for (x in myObj) { |
||||||
|
txt += "<tr><td>" + myObj[x].name + "</td></tr>"; |
||||||
|
} |
||||||
|
txt += "</table>" |
||||||
|
document.getElementById("demo").innerHTML = txt; |
||||||
|
} |
||||||
|
}; |
||||||
|
xmlhttp.open("POST", "json_demo_db_post.php", true); |
||||||
|
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); |
||||||
|
xmlhttp.send("x=" + dbParam); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
|
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,205 @@ |
|||||||
|
@charset "utf-8"; |
||||||
|
|
||||||
|
html {font-family: Arial; display: inline-block; text-align: center;} |
||||||
|
body { |
||||||
|
background-color: #C7CACC; |
||||||
|
color: #FFFFFF; |
||||||
|
font-family: Arial, sans-serif; |
||||||
|
font-size: 14px; |
||||||
|
width: 100%; |
||||||
|
margin-top: 5px; |
||||||
|
background-image: url(fon.jpg); |
||||||
|
} |
||||||
|
a{ |
||||||
|
color: #FFFFFF; |
||||||
|
} |
||||||
|
a:visited { |
||||||
|
color: #FFFFFF; /* Цвет посещенных ссылок */ |
||||||
|
text-decoration: none; |
||||||
|
} |
||||||
|
a:active { |
||||||
|
color: #A7F095; /* Цвет активных ссылок */ |
||||||
|
} |
||||||
|
a:hover { |
||||||
|
color: #AFDAF4; /* Цвет ссылок при наведении мыши*/ |
||||||
|
} |
||||||
|
|
||||||
|
#header { |
||||||
|
background: #F5DEB3; |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
#container { |
||||||
|
background-color: #FFFFFF; |
||||||
|
margin-right: auto; |
||||||
|
margin-left: auto; |
||||||
|
margin-bottom: auto; |
||||||
|
text-align: center; |
||||||
|
width: 80%; |
||||||
|
height: 84px; |
||||||
|
margin-top: 7px; |
||||||
|
padding-top: 1px; |
||||||
|
} |
||||||
|
|
||||||
|
#nav |
||||||
|
{ |
||||||
|
background-color: #2F4468; |
||||||
|
width: 100%; |
||||||
|
color: #FFFFFF; |
||||||
|
font-size: small; |
||||||
|
margin-left: -18px; |
||||||
|
margin-top: -3px; |
||||||
|
} |
||||||
|
|
||||||
|
#sidebar { |
||||||
|
background-color: #8CA2AF; |
||||||
|
float: left; |
||||||
|
width: 20%; |
||||||
|
position: static; |
||||||
|
margin-top: -1px; |
||||||
|
height: 358px; |
||||||
|
min-width: 0px; |
||||||
|
} |
||||||
|
|
||||||
|
#content { |
||||||
|
background-color: #F8E6C1; |
||||||
|
float: right; |
||||||
|
width: 80%; |
||||||
|
color: #14437A; |
||||||
|
margin-top: -2px; |
||||||
|
opacity: 0.91; |
||||||
|
} |
||||||
|
|
||||||
|
#clear { |
||||||
|
clear: both; |
||||||
|
} |
||||||
|
|
||||||
|
#footer { |
||||||
|
background: #00BFFF; |
||||||
|
width: 100%; |
||||||
|
height: 40px; |
||||||
|
} |
||||||
|
|
||||||
|
.topnav { |
||||||
|
overflow: hidden; |
||||||
|
background-color: #2f4468; |
||||||
|
color: white; |
||||||
|
font-size: 1.7rem; |
||||||
|
height: 65px; |
||||||
|
line-height: 3px; |
||||||
|
|
||||||
|
} |
||||||
|
.top{ |
||||||
|
overflow: hidden; |
||||||
|
background-color: #8CA2AF; |
||||||
|
color: white; |
||||||
|
width: 100%; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
.card.temperature { color: #fd7e14; } |
||||||
|
.card.humidity { color: #1b78e2; } |
||||||
|
|
||||||
|
|
||||||
|
.card { |
||||||
|
background-color: #F9F9F7; |
||||||
|
box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5); |
||||||
|
} |
||||||
|
.cards { |
||||||
|
max-width: 901px; |
||||||
|
margin: 0 auto; |
||||||
|
display: grid; |
||||||
|
grid-gap: 2rem; |
||||||
|
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); |
||||||
|
min-height: 133px; |
||||||
|
} |
||||||
|
.reading { |
||||||
|
font-size: 2.8rem; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#navigation a { |
||||||
|
font-size: small; |
||||||
|
color: #3E73A7; |
||||||
|
float: left; |
||||||
|
border-top-width: thick; |
||||||
|
padding-left: 20px; |
||||||
|
} |
||||||
|
|
||||||
|
.times{ |
||||||
|
font-size: xx-large; |
||||||
|
margin-top: -50px; |
||||||
|
background-color: #2F4468; |
||||||
|
color: #FFFFFF; |
||||||
|
height: 57px; |
||||||
|
line-height: 56px; |
||||||
|
} |
||||||
|
.manth{ |
||||||
|
color: #02087C; |
||||||
|
margin-top: 0px; |
||||||
|
background-color: #EF7320; |
||||||
|
height: 2pc; |
||||||
|
font-size: large; |
||||||
|
padding-top: 2px; |
||||||
|
opacity: 1; |
||||||
|
line-height: 3%; |
||||||
|
} |
||||||
|
.servertime { |
||||||
|
margin-top: 37px; |
||||||
|
} |
||||||
|
.data{ |
||||||
|
color: #2F4468; |
||||||
|
background-color: #FFFFFF; |
||||||
|
margin-top: -93px; |
||||||
|
height: 146px; |
||||||
|
font-size: 92px; |
||||||
|
line-height: 97px; |
||||||
|
} |
||||||
|
.week{ |
||||||
|
color: #000006; |
||||||
|
margin-top: -91px; |
||||||
|
background-color: #EF7320; |
||||||
|
height: 2pc; |
||||||
|
font-size: large; |
||||||
|
line-height: 30px; |
||||||
|
|
||||||
|
} |
||||||
|
.levnav{ |
||||||
|
font-size: large; |
||||||
|
color: #FFFFFF; |
||||||
|
margin-top: 5px; |
||||||
|
margin-left: 25px; |
||||||
|
line-height: 11px; |
||||||
|
margin-right: 31px; |
||||||
|
text-decoration: none; |
||||||
|
text-align: left; |
||||||
|
|
||||||
|
} |
||||||
|
#containerinf { |
||||||
|
background-color: #B59D69; |
||||||
|
margin-right: auto; |
||||||
|
margin-left: auto; |
||||||
|
margin-bottom: auto; |
||||||
|
text-align: center; |
||||||
|
width: 80%; |
||||||
|
height: 84px; |
||||||
|
margin-top: 7px; |
||||||
|
padding-top: 1px; |
||||||
|
opacity: 1; |
||||||
|
} |
||||||
|
#contentinfo { |
||||||
|
background-color: #ECD9B1; |
||||||
|
width: 100%; |
||||||
|
color: #14437A; |
||||||
|
margin-top: -2px; |
||||||
|
opacity: 0.83; |
||||||
|
} |
||||||
|
#tablinfo{ |
||||||
|
background-color: #ECD9B1; |
||||||
|
width: 35%; |
||||||
|
color: #14437A; |
||||||
|
margin-top: 11px; |
||||||
|
opacity: 0.83; |
||||||
|
margin-left: 288px; |
||||||
|
} |
||||||
@ -0,0 +1,122 @@ |
|||||||
|
|
||||||
|
<!DOCTYPE HTML><html> |
||||||
|
|
||||||
|
<head> |
||||||
|
<title>ESP-NOW DASHBOARD</title> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"> |
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
<link rel="icon" href="favicon.ico"> |
||||||
|
|
||||||
|
<link rel="icon" type="png" sizes="32x32" href="favicon-32x32.png"> |
||||||
|
<link rel="icon" type="png" sizes="16x16" href="favicon-16x16.png"> |
||||||
|
<link href="style.css" rel="stylesheet" type="text/css"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
|
||||||
|
<div class="topnav"> |
||||||
|
<p><h3>ESP-Домашний сервер</h3><span class="data"></span><span id="dataserv">%dataserv%</span></p> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p><span class="times"><span id="timeserv">%timeserv%</span></p> |
||||||
|
|
||||||
|
</div> |
||||||
|
<nav id="navigation"><a href="index.html" title="Главная">Главная</a></nav> |
||||||
|
<nav id="navigation1"><a href="setting.html" title="настройки">настройки</a></nav> |
||||||
|
<nav id="navigation2"><a href="inform.html" title="информация">информация</a></nav> |
||||||
|
<div class="content"> |
||||||
|
<div class="cards"> |
||||||
|
<div class="card temperature"> |
||||||
|
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Time <span id="tim2"></span></p> |
||||||
|
</div> |
||||||
|
<div class="card humidity"> |
||||||
|
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
<font size="6" color="#0000ff">Время работы сервера:</font> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div style="text-align: center;"> |
||||||
|
<font color="#ff0000" size="6"> |
||||||
|
<p><span id="t10"></span></p> |
||||||
|
</font> |
||||||
|
<font size="4" color="#0000ff"> </font> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
|
||||||
|
function toggleCheckbox(element) {//get запросы на переключение кнопки GET http://192.168.1.100/update?output=13&state=1 |
||||||
|
var xhr = new XMLHttpRequest(); |
||||||
|
if(element.checked){ xhr.open("GET", "/update?output="+element.id+"&state=1", true); } |
||||||
|
else { xhr.open("GET", "/update?output="+element.id+"&state=0", true); } |
||||||
|
xhr.send(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!!window.EventSource) { |
||||||
|
var source = new EventSource('/events'); |
||||||
|
|
||||||
|
source.addEventListener('open', function(e) { |
||||||
|
console.log("Events Connected"); |
||||||
|
}, false); |
||||||
|
source.addEventListener('error', function(e) { |
||||||
|
if (e.target.readyState != EventSource.OPEN) { |
||||||
|
console.log("Events Disconnected"); |
||||||
|
} |
||||||
|
}, false); |
||||||
|
|
||||||
|
source.addEventListener('message', function(e) { |
||||||
|
console.log("message", e.data); |
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||||
|
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||||
|
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('t10', function(e) {//ремя работы сервера |
||||||
|
document.getElementById("t10").innerHTML =e.data; |
||||||
|
}, false); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
source.addEventListener('new_readings', function(e) { |
||||||
|
console.log("new_readings", e.data); |
||||||
|
var obj = JSON.parse(e.data); |
||||||
|
document.getElementById("t1").innerHTML = obj.temperature.toFixed(2); |
||||||
|
document.getElementById("h1").innerHTML = obj.humidity.toFixed(2); |
||||||
|
document.getElementById("tim2").innerHTML = obj.tim2; |
||||||
|
document.getElementById("tim3").innerHTML = obj.tim3; |
||||||
|
document.getElementById("dataserv").innerHTML = obj.dataserv; |
||||||
|
document.getElementById("timeserv").innerHTML = obj.timeserv; |
||||||
|
}, false); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,634 @@ |
|||||||
|
/*
|
||||||
|
ESP32 Receiver (ESP-NOW + Web Server) |
||||||
|
Complete project details at https://RandomNerdTutorials.com/esp32-esp-now-wi-fi-web-server/
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||||
|
of this software and associated documentation files. |
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all |
||||||
|
copies or substantial portions of the Software. |
||||||
|
*/ |
||||||
|
//08:3A:F2:A7:80:6C //esp32 желтые ноги
|
||||||
|
//08:3A:F2:66:31:30 //esp32 lilygo2,3
|
||||||
|
//08:3A:F2: //esp32 lilygo4,7
|
||||||
|
#define SD_MISO 12 |
||||||
|
#define SD_MOSI 13 |
||||||
|
#define SD_SCLK 14 |
||||||
|
#define SD_CS 15 |
||||||
|
#include <esp_task_wdt.h> |
||||||
|
#define WDT_TIMEOUT 10 |
||||||
|
#include <WiFi.h> |
||||||
|
#include "ESPAsyncWebSrv.h" |
||||||
|
#include <AsyncTCP.h> |
||||||
|
#include <Arduino_JSON.h> |
||||||
|
#include <esp_now.h> |
||||||
|
#include "FS.h" |
||||||
|
#include "SD.h" |
||||||
|
#include "SPI.h" |
||||||
|
#include <SPIFFS.h> |
||||||
|
|
||||||
|
#include "NTPClient.h" |
||||||
|
#include "WiFiUdp.h" |
||||||
|
#include <UnixTime.h> |
||||||
|
UnixTime stamp(0); // указать GMT (3 для Москвы)
|
||||||
|
// Define deep sleep options
|
||||||
|
String dataMessage; |
||||||
|
// Define NTP Client to get time
|
||||||
|
WiFiUDP ntpUDP; |
||||||
|
NTPClient timeClient(ntpUDP); |
||||||
|
#include "nRF24L01.h" |
||||||
|
#include "RF24.h" |
||||||
|
char msg[16]; |
||||||
|
//RF24 radio(12, 14, 26, 25, 27);
|
||||||
|
//RF24 radio(27, 26, 32, 33, 25);//server (ce,csn,sck,miso,mosi)esp32
|
||||||
|
|
||||||
|
RF24 radio(17, 16, 32, 33, 25);//server (ce,csn,sck,miso,mosi)esp32
|
||||||
|
const uint64_t pip = 0x02E423E4E2LL; |
||||||
|
SPIClass sdSPI(HSPI); |
||||||
|
File myFile; |
||||||
|
String jsonString;//"{\"id\":2,\"temperature\":9.6733450317382812,\"humidity\":50.41815185546875,\"readingId\":\"2\"}";
|
||||||
|
String jsonString1; |
||||||
|
String jsonString2;//="{\"tkom1\":\"20.0\",\"hkom1\":\"30.0\",\"batkom1\":\"0.00\",\"timekom1\":\"00:00\",\"tkom2\":\"\",\"hkom2\":\"\",\"batkom2\":\"\",\"timekom2\":\"\",\"tkor\":\"\",\"hkor\":\"\",\"batkor\":\"\",\"timekor\":\"\",\"tbal\":\"\",\"hbal\":\"\",\"batbal\":\"\",\"timebal\":\"\"}"
|
||||||
|
; |
||||||
|
// Replace with your network credentials (STATION)
|
||||||
|
const char* ssid = "VOVA-47"; |
||||||
|
const char* password = "vovak26102003"; |
||||||
|
|
||||||
|
char *time_buf; |
||||||
|
|
||||||
|
const char* PARAM_INPUT_1 = "output"; |
||||||
|
const char* PARAM_INPUT_2 = "state"; |
||||||
|
|
||||||
|
// Structure example to receive data
|
||||||
|
// Must match the sender structure
|
||||||
|
typedef struct struct_message { |
||||||
|
int id=0; |
||||||
|
float temp=0; |
||||||
|
float hum=0; |
||||||
|
unsigned int readingId=0; |
||||||
|
} struct_message; |
||||||
|
|
||||||
|
struct_message incomingReadings; |
||||||
|
|
||||||
|
JSONVar board; |
||||||
|
JSONVar board1; |
||||||
|
JSONVar board2; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AsyncWebServer server(80); |
||||||
|
AsyncEventSource events("/events"); |
||||||
|
//*************************************************************************************************
|
||||||
|
char* strd[] = {"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"}; |
||||||
|
char* strm[] = {"январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь"}; |
||||||
|
char* strweek[] = {"воскресенье","понедельник","вторник","среда","четверг","пятница","суббота","воскресенье"}; |
||||||
|
int nt=0;//номер термометра
|
||||||
|
int nti=0;//номер термометра для сайта
|
||||||
|
int temperature1=10; |
||||||
|
double ts; |
||||||
|
double hs; |
||||||
|
String t1; |
||||||
|
String h1; |
||||||
|
String t10;//время работы сервера
|
||||||
|
String tim3;// время от нтп сервера при приходе данных с NOW
|
||||||
|
String tim2;//время получ от устройства NOW
|
||||||
|
String munthserv;//месяц
|
||||||
|
String weekserv;//день недели
|
||||||
|
|
||||||
|
String tkom1;//температура
|
||||||
|
String hkom1;//влажность
|
||||||
|
String batkom1; |
||||||
|
String timekom1;//время прихода данных комната1
|
||||||
|
|
||||||
|
String tkom2; |
||||||
|
String hkom2; |
||||||
|
String batkom2; |
||||||
|
String timekom2; |
||||||
|
|
||||||
|
String tkor; |
||||||
|
String hkor; |
||||||
|
String batkor; |
||||||
|
String timekor; |
||||||
|
|
||||||
|
String tbal; |
||||||
|
String hbal; |
||||||
|
String batbal; |
||||||
|
String timebal; |
||||||
|
|
||||||
|
String timeul1; |
||||||
|
String tul1; |
||||||
|
String hul1; |
||||||
|
String osv1; |
||||||
|
int ct1=0;//счетчик пропуска данные каждые 3 минуты записываем каждые 20 те 7 пропусков
|
||||||
|
|
||||||
|
|
||||||
|
int time17=0; |
||||||
|
int hour1=10; |
||||||
|
int min1=7; |
||||||
|
int sek=0; |
||||||
|
int hk=0;//часы для исключения повтора записи данных
|
||||||
|
int mk=0;//минуты
|
||||||
|
int hb=0;//часы для исключения повтора записи данных
|
||||||
|
int mb=0;//минуты
|
||||||
|
int hkr=0;//часы для исключения повтора записи данных
|
||||||
|
int mkr=0;//минуты
|
||||||
|
int timev=0;//для пропуска 20 минут
|
||||||
|
//String timev1;//для записи на флэш при сбросе
|
||||||
|
|
||||||
|
boolean fdata=0;//флаг обновления данных темп и влажн
|
||||||
|
int fobnov=1;//флаг обновления данных темп и влажн
|
||||||
|
String timeserv;//время сервера
|
||||||
|
String dataserv;//дата
|
||||||
|
int v=0; |
||||||
|
int v1=0; |
||||||
|
long EpochTime=0; |
||||||
|
int ind=0; |
||||||
|
String strdat;//накопленые в памяти данные по темп и влажность передаваемые клиенту
|
||||||
|
String tempdat;//
|
||||||
|
int ftdata=0;//флаг запроса данных темп и влажн
|
||||||
|
int fping=0;// флаг для задержки отр данных на страницу inform
|
||||||
|
int wright=0; |
||||||
|
bool flread=0; |
||||||
|
char* strden[] = {"/01","/02","/03","/04","/05","/06","/07","/08","/09","/10","/11","/12","/13","/14","/15","/16","/17","/18","/19","/20","/21","/22","/23","/24","/25","/26","/27","/28","/29","/30","/31"};
|
||||||
|
char* strmen[] = {"/JAN","/FEBR","/MARCH","/APRIL","/MAY","/JUNE","/JULY","/AUG","/SEPT","/OCT","/NOV","/DEC"}; |
||||||
|
char* stryen[] = {"/2014","/2015","/2016","/2017","/D-2018","/D-2019","/D-2020","/D-2021","/D-2022","/D-2023","/D-2024","/D-2025","/D-2026","/D-2027","/D-2028","/D-2029","/D-2030","/D-2031","/D-2032","D-2033","/D-2034","/D-2035"}; |
||||||
|
char* strdaten[] = {"/T1.txt","/T2.txt","/T3.txt","/T4.txt","/T5.txt","/T6.txt","/T7.txt","/T8.txt","/T9.txt","/T10.txt"}; |
||||||
|
//************************************************************
|
||||||
|
hw_timer_t * timer = NULL; |
||||||
|
volatile SemaphoreHandle_t timerSemaphore; |
||||||
|
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED; |
||||||
|
volatile uint32_t isrCounter = 0; |
||||||
|
volatile uint32_t lastIsrAt = 0; |
||||||
|
//**************************************************************************************************
|
||||||
|
// ntp
|
||||||
|
String formattedDate; |
||||||
|
String formattedTime; |
||||||
|
String dayStamp; |
||||||
|
String timeStamp; |
||||||
|
|
||||||
|
|
||||||
|
//*****************************************************************************
|
||||||
|
|
||||||
|
//****************************************************************************
|
||||||
|
String outputState(int output){ |
||||||
|
if(digitalRead(output)){ |
||||||
|
return "checked"; |
||||||
|
} |
||||||
|
else { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
String processor(const String& var){ |
||||||
|
//Serial.println(var);
|
||||||
|
if(var == "BUTTONPLACEHOLDER1"){ |
||||||
|
String buttons = ""; |
||||||
|
// buttons += "<h4>Output - GPIO 12</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"12\" " + outputState(12) + "><span class=\"slider\"></span></label>";
|
||||||
|
buttons += "<h4>Output - GPIO 13</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"13\" " + outputState(13) + "><span class=\"slider\"></span></label>"; |
||||||
|
// buttons += "<h4>Output - GPIO 14</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"14\" " + outputState(14) + "><span class=\"slider\"></span></label>";
|
||||||
|
return buttons; |
||||||
|
} |
||||||
|
return String(); |
||||||
|
} |
||||||
|
/* if(var == "HOLDERT1"){
|
||||||
|
String buttons = ""; |
||||||
|
buttons +="<p><span class=\"reading\">"+t1+" °C</span></p>"; |
||||||
|
String hour11=String(hour1, DEC); |
||||||
|
String min11=String(min1, DEC); |
||||||
|
if(min1<10){min11="0"+min11;} |
||||||
|
buttons +="<p>"+hour11+":"+min11+"</p>"; |
||||||
|
return buttons; |
||||||
|
} |
||||||
|
if(var == "HOLDERH1"){ |
||||||
|
String buttons = ""; |
||||||
|
buttons +="<p><span class=\"reading\">"+h1+" %</span></p>"; |
||||||
|
String hour11=String(hour1, DEC); |
||||||
|
String min11=String(min1, DEC); |
||||||
|
if(min1<10){min11="0"+min11;} |
||||||
|
buttons +="<p>"+hour11+":"+min11+"</p>"; |
||||||
|
return buttons; |
||||||
|
} |
||||||
|
*/ |
||||||
|
/*if(var == "HOLDER2"){
|
||||||
|
String buttons = ""; |
||||||
|
|
||||||
|
buttons +="<p>"+t10+"</p>"; |
||||||
|
return buttons; |
||||||
|
|
||||||
|
}*/ |
||||||
|
//************************************************
|
||||||
|
|
||||||
|
|
||||||
|
//***********************************************************
|
||||||
|
void vrem(); |
||||||
|
void handle_OnConnect(); |
||||||
|
void ntp(); |
||||||
|
void ntphome(); |
||||||
|
void IRAM_ATTR onTimer(); |
||||||
|
void event(); |
||||||
|
void WiFisetup(); |
||||||
|
void savedata(); |
||||||
|
void JSstringU(); |
||||||
|
void JSstringK(); |
||||||
|
void Sdreaddata(); |
||||||
|
void Nrfsetup(); |
||||||
|
void nrf(); |
||||||
|
void parsmsg(); |
||||||
|
void settimer(); |
||||||
|
void readdata(); |
||||||
|
//void ansv();
|
||||||
|
//***********************************************************
|
||||||
|
void OnDataRecv(const uint8_t * mac_addr, const uint8_t *incomingData, int len) {
|
||||||
|
// Copies the sender mac address to a string
|
||||||
|
char macStr[18]; |
||||||
|
Serial.print("Packet received from: "); |
||||||
|
snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x", |
||||||
|
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); |
||||||
|
Serial.println(macStr); |
||||||
|
memcpy(&incomingReadings, incomingData, sizeof(incomingReadings)); |
||||||
|
|
||||||
|
Serial.printf("Board ID %u: %u bytes\n", incomingReadings.id, len); |
||||||
|
Serial.printf("t value: %4.2f \n", incomingReadings.temp); |
||||||
|
t1 = incomingReadings.temp; |
||||||
|
Serial.printf("h value: %4.2f \n", incomingReadings.hum); |
||||||
|
h1=incomingReadings.hum; |
||||||
|
Serial.printf("readingID value: %d \n", incomingReadings.readingId); |
||||||
|
int tim11 =incomingReadings.readingId; |
||||||
|
hour1=tim11/100; |
||||||
|
min1=tim11%100; |
||||||
|
//JSONстрока формирование
|
||||||
|
ntphome(); |
||||||
|
tim3=timeserv; |
||||||
|
JSstringU();
|
||||||
|
events.send(jsonString.c_str(), "new_readings", millis());//обновление веба
|
||||||
|
// fdata=1;
|
||||||
|
|
||||||
|
// fdata=0;
|
||||||
|
savedata(); |
||||||
|
}//OnDataRecv
|
||||||
|
//****************************************************************************
|
||||||
|
void configureEvents() { |
||||||
|
events.onConnect([](AsyncEventSourceClient *client){ |
||||||
|
if(client->lastId()){ |
||||||
|
Serial.printf("Client connections. Id: %u\n", client->lastId()); |
||||||
|
} |
||||||
|
// and set reconnect delay to 1 second
|
||||||
|
client->send("hello from ESP32",NULL,millis(),1000); |
||||||
|
}); |
||||||
|
|
||||||
|
}// configureEvents
|
||||||
|
//*********************************************************************************************************
|
||||||
|
void setup() { |
||||||
|
// Initialize Serial Monitor
|
||||||
|
pinMode(13, OUTPUT); |
||||||
|
digitalWrite(13, LOW); |
||||||
|
Serial.begin(115200); |
||||||
|
|
||||||
|
if(!SPIFFS.begin()){ |
||||||
|
Serial.println("An Error has occurred while mounting SPIFFS"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
sdSPI.begin(SD_SCLK, SD_MISO, SD_MOSI, SD_CS); |
||||||
|
if (!SD.begin(SD_CS, sdSPI)) |
||||||
|
{ |
||||||
|
// if(!SD.begin()){
|
||||||
|
Serial.println("Mounting card mount failed"); |
||||||
|
// return;
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
uint8_t cardType = SD.cardType(); |
||||||
|
if(cardType == CARD_NONE){ |
||||||
|
Serial.println("No SD card attached"); |
||||||
|
//return;
|
||||||
|
} |
||||||
|
uint64_t cardSize = SD.cardSize() / (1024 * 1024); |
||||||
|
Serial.printf("SD Card Size: %lluMB\n", cardSize); |
||||||
|
Sdreaddata(); |
||||||
|
Nrfsetup(); |
||||||
|
settimer(); |
||||||
|
WiFisetup(); |
||||||
|
// Initialize a NTPClient to get time
|
||||||
|
timeClient.begin(); |
||||||
|
// Set offset time in seconds to adjust for your timezone, for example:
|
||||||
|
// GMT +1 = 3600
|
||||||
|
// GMT +8 = 28800
|
||||||
|
// GMT -1 = -3600
|
||||||
|
// GMT 0 = 0
|
||||||
|
timeClient.setTimeOffset(10800);
|
||||||
|
// Once ESPNow is successfully Init, we will register for recv CB to
|
||||||
|
// get recv packer info
|
||||||
|
esp_now_register_recv_cb(OnDataRecv); |
||||||
|
ntp();//NTP init
|
||||||
|
|
||||||
|
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
request->send(SPIFFS, "/index.html", String(), false, processor); |
||||||
|
fobnov=1; |
||||||
|
}); |
||||||
|
server.on("/index.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
request->send(SPIFFS, "/index.html", String(), false, processor); |
||||||
|
fobnov=1; |
||||||
|
|
||||||
|
}); |
||||||
|
// Route to load style.css file
|
||||||
|
server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
request->send(SPIFFS, "/style.css", "text/css"); |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
server.on("/fon.jpg", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
request->send(SPIFFS, "/fon.jpg"); |
||||||
|
}); |
||||||
|
|
||||||
|
server.on("/upravlenie.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
fobnov=1; |
||||||
|
request->send(SPIFFS, "/upravlenie.html", String(), false, processor); |
||||||
|
}); |
||||||
|
|
||||||
|
server.on("/setting.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
|
||||||
|
request->send(SPIFFS, "/setting.html"); |
||||||
|
}); |
||||||
|
server.on("/inform.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=1; |
||||||
|
fping=0; |
||||||
|
// Serial.println ("ftdata==1");
|
||||||
|
request->send(SPIFFS, "/inform.html"); |
||||||
|
}); |
||||||
|
|
||||||
|
server.on("/inform1.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=2; |
||||||
|
fping=0; |
||||||
|
// Serial.println ("ftdata==1");
|
||||||
|
request->send(SPIFFS, "/inform1.html"); |
||||||
|
}); |
||||||
|
|
||||||
|
server.on("/inform2.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=4; |
||||||
|
fping=0; |
||||||
|
// Serial.println ("ftdata==1");
|
||||||
|
request->send(SPIFFS, "/inform2.html"); |
||||||
|
}); |
||||||
|
server.on("/inform3.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=7; |
||||||
|
fping=0; |
||||||
|
// Serial.println ("ftdata==1");
|
||||||
|
request->send(SPIFFS, "/inform3.html"); |
||||||
|
}); |
||||||
|
server.on("/inform4.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=3; |
||||||
|
fping=0; |
||||||
|
// Serial.println ("ftdata==1");
|
||||||
|
request->send(SPIFFS, "/inform4.html"); |
||||||
|
}); |
||||||
|
server.on("/inform5.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=5; |
||||||
|
fping=0; |
||||||
|
// Serial.println ("ftdata==1");
|
||||||
|
request->send(SPIFFS, "/inform5.html"); |
||||||
|
}); |
||||||
|
server.on("/inform6.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
ftdata=6; |
||||||
|
fping=0; |
||||||
|
// Serial.println ("ftdata==1");
|
||||||
|
request->send(SPIFFS, "/inform6.html"); |
||||||
|
}); |
||||||
|
server.on("/favicon.ico", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
|
||||||
|
request->send(SPIFFS, "/favicon.ico"); |
||||||
|
}); |
||||||
|
server.on("/favicon-32x32.png", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
|
||||||
|
request->send(SPIFFS, "/favicon-32x32.png"); |
||||||
|
}); |
||||||
|
server.on("/favicon-16x16.png", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||||
|
|
||||||
|
request->send(SPIFFS, "/favicon-32x32.png"); |
||||||
|
}); |
||||||
|
|
||||||
|
// Send a GET request to <ESP_IP>/update?output=<inputMessage1>&state=<inputMessage2> принимаем get сообщение от клиента при нажати кнопки
|
||||||
|
// принимаем номер контакта и его состояние
|
||||||
|
// GET http://192.168.1.100/update?output=13&state=1
|
||||||
|
server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) { |
||||||
|
String inputMessage1; |
||||||
|
String inputMessage2; |
||||||
|
// GET input1 value on <ESP_IP>/update?output=<inputMessage1>&state=<inputMessage2>
|
||||||
|
|
||||||
|
|
||||||
|
if (request->hasParam(PARAM_INPUT_1) && request->hasParam(PARAM_INPUT_2)) { |
||||||
|
inputMessage1 = request->getParam(PARAM_INPUT_1)->value(); |
||||||
|
inputMessage2 = request->getParam(PARAM_INPUT_2)->value(); |
||||||
|
digitalWrite(inputMessage1.toInt(), inputMessage2.toInt()); |
||||||
|
} |
||||||
|
else { |
||||||
|
inputMessage1 = "No message sent"; |
||||||
|
inputMessage2 = "No message sent"; |
||||||
|
} |
||||||
|
Serial.print("GPIO: "); |
||||||
|
Serial.print(inputMessage1); |
||||||
|
Serial.print(" - Set to: "); |
||||||
|
Serial.println(inputMessage2); |
||||||
|
|
||||||
|
request->send(200, "text/plain", "OK"); |
||||||
|
});
|
||||||
|
|
||||||
|
JSstringU(); |
||||||
|
JSstringK(); |
||||||
|
|
||||||
|
configureEvents(); |
||||||
|
server.addHandler(&events); |
||||||
|
|
||||||
|
server.begin(); |
||||||
|
esp_task_wdt_init(WDT_TIMEOUT, true); //включить панику, чтобы ESP32 перезапустился
|
||||||
|
esp_task_wdt_add(NULL); //добавить текущий поток в WDT watch
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//***********************************************************************************************************
|
||||||
|
//***********************************************************************************************************
|
||||||
|
//***********************************************************************************************************
|
||||||
|
void loop()
|
||||||
|
{ |
||||||
|
|
||||||
|
|
||||||
|
static unsigned long lastEventTime = millis(); |
||||||
|
|
||||||
|
static const unsigned long EVENT_INTERVAL_MS = 5000; |
||||||
|
if (v>3) {//20sek
|
||||||
|
ntphome();//считываем время
|
||||||
|
v=0;//обнуляем счетчик 4*5=20с
|
||||||
|
} |
||||||
|
if (v1>240) {//20min
|
||||||
|
ntp();//считываем время
|
||||||
|
v1=0;//обнуляем счетчик 240*5=1200с
|
||||||
|
} |
||||||
|
|
||||||
|
// digitalWrite(13, HIGH); // светодиод горит
|
||||||
|
// digitalWrite(13, LOW); // светодиод погашен
|
||||||
|
if ((millis() - lastEventTime) > EVENT_INTERVAL_MS) |
||||||
|
{ |
||||||
|
events.send("ping",NULL,millis()); |
||||||
|
lastEventTime = millis(); |
||||||
|
v++; |
||||||
|
v1++; |
||||||
|
|
||||||
|
vrem();//время работы сайта
|
||||||
|
events.send(t10.c_str(), "t10", millis());//время работы сайта обн каждые 5сек
|
||||||
|
events.send(timeserv.c_str(), "timeserv", millis());//время обн каждые 5сек
|
||||||
|
|
||||||
|
fping++;//задержка отправки данных на стр до готовности стр принять их
|
||||||
|
if(fping>1000){fping=0;}
|
||||||
|
nrf(); //проверяем не приш ли данные на NRF
|
||||||
|
wright++;//сч времени для записи на флеш
|
||||||
|
Serial.println (wright); |
||||||
|
Serial.print ("ftdata="); |
||||||
|
Serial.println (ftdata); |
||||||
|
Serial.print ("fobnov="); |
||||||
|
Serial.println (fobnov); |
||||||
|
if( ftdata==0) |
||||||
|
{ if (fobnov>0) {//2,5sek
|
||||||
|
fobnov++; |
||||||
|
if(fobnov>3){fobnov=0;}
|
||||||
|
events.send(jsonString.c_str(), "new_readings", millis());//обновление веба текущая температура
|
||||||
|
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||||
|
Serial.println("/index"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//*****************************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
//*******************************************************************************************
|
||||||
|
|
||||||
|
//*********************************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**********************************************************************************************
|
||||||
|
if (ftdata==2)//пришел запрос табл данных /inform ЗАПАД
|
||||||
|
{// tim3=formattedTime;
|
||||||
|
if(fping>2){fping=0;} |
||||||
|
if(fping==1){ |
||||||
|
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||||
|
} |
||||||
|
if(fping>1){ |
||||||
|
ftdata=0; |
||||||
|
fping=0; |
||||||
|
nti=1; |
||||||
|
readdata(); |
||||||
|
// Serial.println("data1");
|
||||||
|
events.send(strdat.c_str(), "readings", millis());//отправка данных из памяти в таблицу на стр inform
|
||||||
|
} |
||||||
|
} |
||||||
|
//***************************************************************************************************
|
||||||
|
if (ftdata==1)//пришел запрос табл данных /inform ВОСТОК
|
||||||
|
{// tim3=formattedTime;
|
||||||
|
|
||||||
|
if(fping>2){fping=0;} |
||||||
|
if(fping==1){ |
||||||
|
// events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||||
|
events.send(jsonString.c_str(), "new_readings", millis());//обновление данных ЗАПАД
|
||||||
|
} |
||||||
|
if(fping>1){ |
||||||
|
ftdata=0; |
||||||
|
fping=0; |
||||||
|
nti=0; |
||||||
|
readdata(); |
||||||
|
events.send(strdat.c_str(), "readings", millis());//отправка данных из памяти в таблицу на стр inform
|
||||||
|
// fobnov=1;
|
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//***************************************************************************************************
|
||||||
|
if (ftdata==3)//пришел запрос табл данных /inform коридор
|
||||||
|
{// tim3=formattedTime;
|
||||||
|
|
||||||
|
if(fping>2){fping=0;} |
||||||
|
if(fping==1){ |
||||||
|
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление данных Т Н ВАТ все кроме запад
|
||||||
|
} |
||||||
|
if(fping>1){ |
||||||
|
ftdata=0; |
||||||
|
fping=0; |
||||||
|
nti=5; |
||||||
|
readdata(); |
||||||
|
events.send(strdat.c_str(), "readings", millis());//отправка данных из памяти в таблицу на стр inform
|
||||||
|
} |
||||||
|
} |
||||||
|
//***************************************************************************************************
|
||||||
|
if (ftdata==5)//пришел запрос табл данных /inform балкон
|
||||||
|
{// tim3=formattedTime;
|
||||||
|
|
||||||
|
if(fping>2){fping=0;} |
||||||
|
if(fping==1){ |
||||||
|
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление данных Т Н ВАТ все кроме запад
|
||||||
|
} |
||||||
|
if(fping>1){ |
||||||
|
ftdata=0; |
||||||
|
fping=0; |
||||||
|
nti=2; |
||||||
|
readdata(); |
||||||
|
events.send(strdat.c_str(), "readings", millis());//отправка данных из памяти в таблицу на стр inform
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//******************************************************************************************************
|
||||||
|
if (ftdata==4)//пришел запрос табл данных /inform К1
|
||||||
|
{// tim3=formattedTime;
|
||||||
|
|
||||||
|
if(fping>2){fping=0;} |
||||||
|
if(fping==1){ |
||||||
|
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление данных Т Н ВАТ все кроме запад
|
||||||
|
} |
||||||
|
if(fping>1){ |
||||||
|
ftdata=0; |
||||||
|
fping=0; |
||||||
|
nti=4; |
||||||
|
readdata(); |
||||||
|
events.send(strdat.c_str(), "readings", millis());//отправка данных из памяти в таблицу на стр inform
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//******************************************************************************************************
|
||||||
|
if (ftdata==7)//пришел запрос табл данных /inform К2
|
||||||
|
{// tim3=formattedTime;
|
||||||
|
|
||||||
|
if(fping>2){fping=0;} |
||||||
|
if(fping==1){ |
||||||
|
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление данных Т Н ВАТ все кроме запад
|
||||||
|
} |
||||||
|
if(fping>1){ |
||||||
|
ftdata=0; |
||||||
|
fping=0; |
||||||
|
nti=3; |
||||||
|
readdata(); |
||||||
|
events.send(strdat.c_str(), "readings", millis());//отправка данных из памяти в таблицу на стр inform
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//*********************************************************************************************************
|
||||||
|
if (ftdata==6)//пришел запрос табл данных /inform
|
||||||
|
{// tim3=formattedTime;
|
||||||
|
if(fping>2){fping=0;} |
||||||
|
if(fping==1){ |
||||||
|
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||||
|
} |
||||||
|
if(fping>1){ |
||||||
|
ftdata=0; |
||||||
|
fping=0; |
||||||
|
nti=1; |
||||||
|
readdata(); |
||||||
|
Serial.println("data1"); |
||||||
|
events.send(strdat.c_str(), "readings", millis());//отправка данных из памяти в таблицу на стр inform
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,24 @@ |
|||||||
|
|
||||||
|
void event() |
||||||
|
{ |
||||||
|
/*events.send(String(t1).c_str(), "t1", millis());
|
||||||
|
events.send(String(h1).c_str(), "h1", millis()); |
||||||
|
// events.send(String(hour1).c_str(), "hour1", millis());
|
||||||
|
// events.send(String(min1).c_str(), "min1", millis());
|
||||||
|
|
||||||
|
|
||||||
|
if (min1<10) |
||||||
|
{ |
||||||
|
tim2=String(hour1)+":"+"0"+String(min1); |
||||||
|
} |
||||||
|
else |
||||||
|
{tim2=String(hour1)+":"+String(min1); |
||||||
|
} |
||||||
|
events.send(tim2.c_str(), "tim2", millis()); |
||||||
|
events.send(t10.c_str(), "t10", millis()); |
||||||
|
//events.send(formattedDate.c_str(), "tim3", millis());
|
||||||
|
|
||||||
|
events.send(tim3.c_str(), "tim3", millis()); |
||||||
|
events.send(timeserv.c_str(), "timeserv", millis()); |
||||||
|
events.send(dataserv.c_str(), "dataserv", millis());*/ |
||||||
|
} |
||||||
@ -0,0 +1,54 @@ |
|||||||
|
void Nrfsetup() |
||||||
|
{ |
||||||
|
radio.begin(); |
||||||
|
radio.setChannel(100); |
||||||
|
radio.setPayloadSize(16);//должно быть16
|
||||||
|
radio.setAddressWidth(5); |
||||||
|
radio.setAutoAck( 0 ,false); |
||||||
|
radio.setCRCLength(RF24_CRC_16); |
||||||
|
radio.setDataRate(RF24_2MBPS); |
||||||
|
radio.openReadingPipe(0,pip); |
||||||
|
radio.startListening(); |
||||||
|
} |
||||||
|
|
||||||
|
void nrf() |
||||||
|
{ |
||||||
|
if (radio.available()){
|
||||||
|
radio.read(msg,16);
|
||||||
|
esp_task_wdt_reset();//reset WDT
|
||||||
|
Serial.println(msg); |
||||||
|
parsmsg(); |
||||||
|
if (radio.available()){radio.read(msg,16);
|
||||||
|
parsmsg();} |
||||||
|
delay(500); |
||||||
|
if (radio.available()){radio.read(msg,16);
|
||||||
|
parsmsg();} |
||||||
|
delay(500); |
||||||
|
if (radio.available()){radio.read(msg,16);
|
||||||
|
parsmsg();} |
||||||
|
delay(500); |
||||||
|
if (radio.available()){radio.read(msg,16);
|
||||||
|
parsmsg();} |
||||||
|
delay(500); |
||||||
|
if (radio.available()){radio.read(msg,16);
|
||||||
|
parsmsg();} |
||||||
|
|
||||||
|
JSstringK();//создаем строку для сайта
|
||||||
|
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||||
|
|
||||||
|
if(nt==2){saveul();}//t9 T2
|
||||||
|
if(nt==3){savebalk();}//t1 T3
|
||||||
|
if(nt==4){savek2();}//t2 T4
|
||||||
|
if(nt==5){savek1();}//t3 T5
|
||||||
|
if(nt==7){savekor();}//t5 T6
|
||||||
|
if (radio.available()){radio.read(msg,16);} |
||||||
|
} |
||||||
|
//t1+138c347v524h5 балкон
|
||||||
|
//t2+243c401v528h моя комната
|
||||||
|
// t3+230c357v469h зал
|
||||||
|
// t5+230c357v469h коридор
|
||||||
|
//9d+088h866s00v улица восток
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,95 @@ |
|||||||
|
void ntp() |
||||||
|
{ |
||||||
|
// while(!timeClient.update()) {
|
||||||
|
// timeClient.forceUpdate();
|
||||||
|
//}
|
||||||
|
|
||||||
|
for(int i=0; i<5 && !timeClient.update(); i++) |
||||||
|
{ |
||||||
|
|
||||||
|
timeClient.forceUpdate(); |
||||||
|
} |
||||||
|
|
||||||
|
// The formattedDate comes with the following format:
|
||||||
|
// 2018-05-28T16:00:13Z
|
||||||
|
// We need to extract date and time
|
||||||
|
// formattedDate = timeClient.getFormattedDate();
|
||||||
|
formattedTime =timeClient.getFormattedTime(); |
||||||
|
Serial.println(formattedTime); |
||||||
|
Serial.println("NTP3"); |
||||||
|
// getDay
|
||||||
|
//getHours
|
||||||
|
//getMinutes
|
||||||
|
//getSeconds
|
||||||
|
//getFormattedTime
|
||||||
|
// formattedDate =timeClient.getFormattedDate();
|
||||||
|
// int splitT = formattedDate.indexOf("T");
|
||||||
|
// dayStamp = formattedDate.substring(0, splitT);
|
||||||
|
// Serial.println(timeClient.getDay());
|
||||||
|
|
||||||
|
// Extract time
|
||||||
|
// timeStamp = formattedDate.substring(splitT+1, formattedDate.length()-1);
|
||||||
|
// Serial.println("ntp");
|
||||||
|
// Serial.println(timeClient.getEpochTime());
|
||||||
|
stamp.getDateTime(timeClient.getEpochTime()); |
||||||
|
EpochTime=timeClient.getEpochTime(); |
||||||
|
// забираем вот так
|
||||||
|
// Serial.println(stamp.year);
|
||||||
|
Serial.println(stamp.month); |
||||||
|
Serial.println(stamp.day); |
||||||
|
// Serial.println(stamp.hour);
|
||||||
|
// Serial.println(stamp.minute);
|
||||||
|
// Serial.println(stamp.second);
|
||||||
|
Serial.println(stamp.dayOfWeek); |
||||||
|
timeserv=formatTimeDigits(stamp.hour,stamp.minute);
|
||||||
|
//dataserv=formatDateDigits(stamp.day, stamp.month, stamp.year);
|
||||||
|
|
||||||
|
hour1=stamp.hour; |
||||||
|
min1=stamp.minute; |
||||||
|
|
||||||
|
dataserv=stamp.day; |
||||||
|
munthserv=strm[stamp.month-1] ; |
||||||
|
weekserv=strweek[stamp.dayOfWeek]; |
||||||
|
//Serial.println(timeserv);
|
||||||
|
//Serial.println(dataserv);
|
||||||
|
} |
||||||
|
|
||||||
|
char *formatTimeDigits(int hour, int minute) |
||||||
|
{ |
||||||
|
char *time_str = new char[5]; |
||||||
|
time_str[0] = '0' + (hour / 10); |
||||||
|
time_str[1] = '0' + (hour % 10); |
||||||
|
time_str[2] = ':'; |
||||||
|
time_str[3] = '0' + (minute / 10); |
||||||
|
time_str[4] = '0' + (minute % 10); |
||||||
|
time_str[5] = '\0'; |
||||||
|
|
||||||
|
return time_str; |
||||||
|
} |
||||||
|
|
||||||
|
char *formatDateDigits(int date, int mounth, int year) |
||||||
|
{ |
||||||
|
char *date_str = new char[9]; |
||||||
|
|
||||||
|
date_str[1] = '0' + (date % 10); |
||||||
|
date_str[2] = '/'; |
||||||
|
date_str[0] = '0' + (date / 10); |
||||||
|
date_str[3] = '0' + (mounth / 10); |
||||||
|
date_str[4] = '0' + (mounth % 10); |
||||||
|
date_str[5] = '/'; |
||||||
|
date_str[6] = '0' + ((year % 100) / 10); |
||||||
|
date_str[7] = '0' + (year % 10); |
||||||
|
date_str[8] = '\0'; |
||||||
|
|
||||||
|
return date_str; |
||||||
|
} |
||||||
|
|
||||||
|
void ntphome() |
||||||
|
{ |
||||||
|
stamp.getDateTime(timeClient.getEpochTime()); |
||||||
|
timeserv=formatTimeDigits(stamp.hour,stamp.minute);
|
||||||
|
hour1=stamp.hour; |
||||||
|
min1=stamp.minute; |
||||||
|
// dataserv=formatDateDigits(stamp.day, stamp.month, stamp.year);
|
||||||
|
dataserv=stamp.day; |
||||||
|
} |
||||||
@ -0,0 +1,352 @@ |
|||||||
|
|
||||||
|
void parsmsg() |
||||||
|
{ |
||||||
|
//int tkom1=0;//температура
|
||||||
|
//int hkom1=0;//влажность
|
||||||
|
//int batkom1=0;
|
||||||
|
//String timekom1;//время прихода данных комната1
|
||||||
|
|
||||||
|
//int tkom2=0;
|
||||||
|
//int hkom2=0;
|
||||||
|
//int batkom2=0;
|
||||||
|
//String timekom2;
|
||||||
|
|
||||||
|
//int tkor=0;
|
||||||
|
//int hkor=0;
|
||||||
|
//int batkor=0;
|
||||||
|
//String timekor;
|
||||||
|
|
||||||
|
//int tbal=0;
|
||||||
|
//int hbal=0;
|
||||||
|
//int batbal=0;
|
||||||
|
//String timebal;
|
||||||
|
|
||||||
|
//String timebal;
|
||||||
|
//t1+138c347v524h5 балкон
|
||||||
|
//t2+243c401v528h моя комната
|
||||||
|
// t3+230c357v469h зал
|
||||||
|
// t5+230c357v469h коридор
|
||||||
|
//9d+088h866s00v улица восток
|
||||||
|
//timeul1
|
||||||
|
//tul1
|
||||||
|
//hul1
|
||||||
|
//osv1
|
||||||
|
//char msg[16];принятое сообщение
|
||||||
|
int tdat;//температура
|
||||||
|
int hdat;//влажность
|
||||||
|
int vdat;//напряж батареи датчика
|
||||||
|
int zndat; |
||||||
|
int osv; |
||||||
|
char token9[] = "9d";//улица
|
||||||
|
char token11[] = "t1";//датчики
|
||||||
|
char token12[] = "t2";//датчики
|
||||||
|
char token13[] = "t3";//датчики
|
||||||
|
char token14[] = "t4";//датчики
|
||||||
|
char token15[] = "t5";//датчики
|
||||||
|
|
||||||
|
int n=0; |
||||||
|
int p=0;
|
||||||
|
boolean chet=0;
|
||||||
|
char c ; |
||||||
|
|
||||||
|
//***************************
|
||||||
|
for (int j=0 ; j<15 ;j++)
|
||||||
|
{ c=msg[j];//принятая с премника перемнная
|
||||||
|
|
||||||
|
|
||||||
|
if (p==9) |
||||||
|
{ if (c==token9[1]){p=99;}//данные с ул датчика восток
|
||||||
|
else{ |
||||||
|
p=0;} |
||||||
|
} |
||||||
|
if (p==101)//cравнение второго символа на соответствие t 1
|
||||||
|
{ if (c==token11[1]){p=111;} |
||||||
|
|
||||||
|
} |
||||||
|
if (p==101)//cравнение второго символа на соответствие t 2
|
||||||
|
{ if (c==token12[1]){p=112;} |
||||||
|
|
||||||
|
} |
||||||
|
if (p==101)//cравнение второго символа на соответствие t 3
|
||||||
|
{ if (c==token13[1]){p=113;} |
||||||
|
|
||||||
|
} |
||||||
|
if (p==101)//cравнение второго символа на соответствие t 4
|
||||||
|
{ if (c==token14[1]){p=114;} |
||||||
|
|
||||||
|
} |
||||||
|
if (p==101)//cравнение второго символа на соответствие t 5
|
||||||
|
{ if (c==token15[1]){p=115;} |
||||||
|
else{ |
||||||
|
p=0;} |
||||||
|
} |
||||||
|
//*************************************************
|
||||||
|
if (p==99)
|
||||||
|
{// myFile.print(c);//d+237h895s05v
|
||||||
|
nt=2; |
||||||
|
timeul1=timeserv;//время получения данных
|
||||||
|
n++; |
||||||
|
if (n==2){ |
||||||
|
if (c==45){zndat=1;//-
|
||||||
|
}//znak
|
||||||
|
else |
||||||
|
{zndat=2;//+
|
||||||
|
} |
||||||
|
} |
||||||
|
if (n==3) {tdat=(c-48)*100;} //температура
|
||||||
|
if (n==4){tdat=(c-48)*10+tdat;} |
||||||
|
if (n==5){ |
||||||
|
tdat=(c-48)+tdat; |
||||||
|
|
||||||
|
if(zndat==1){tul1="-"+String (tdat/10)+"."+String (tdat%10); //температура знак -230 -23.0
|
||||||
|
} |
||||||
|
else |
||||||
|
{tul1=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||||
|
} |
||||||
|
} |
||||||
|
if (n==7){hdat=(c-48)*100;}//влажность
|
||||||
|
if (n==8){hdat=(c-48)*10+hdat;} |
||||||
|
if (n==9){ |
||||||
|
hdat=(c-48)+hdat; |
||||||
|
hul1=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||||
|
} |
||||||
|
if (n==11){osv=10*(c-48);}//освещенность
|
||||||
|
if (n==12) |
||||||
|
{osv=osv+(c-48); |
||||||
|
if(osv>99){osv=99;} |
||||||
|
osv1=String (osv)+"%"; |
||||||
|
}//sun
|
||||||
|
// hourdu=t.hour;//время прихода данных час
|
||||||
|
// mindu=t.min;//мин
|
||||||
|
|
||||||
|
} |
||||||
|
//*****************************************
|
||||||
|
|
||||||
|
//*****************датчики температуры переносные***********************
|
||||||
|
//************************T1****************************************************
|
||||||
|
if (p==111) //выделение данных из принятой строки
|
||||||
|
{ timebal=timeserv;//время получения данных
|
||||||
|
nt=3; |
||||||
|
//byte ntdat;номер датчика
|
||||||
|
//byte zndat;знак температуры 0+
|
||||||
|
//int tdat;температура
|
||||||
|
//int hdat;влажность
|
||||||
|
//int vdat;напряж батареи датчика
|
||||||
|
n++; |
||||||
|
if (n==2){ |
||||||
|
if (c==45){zndat=1;//-
|
||||||
|
}//znak
|
||||||
|
else |
||||||
|
{zndat=0;//+
|
||||||
|
} |
||||||
|
} |
||||||
|
if (n==3) {tdat=(c-48)*100;} //температура
|
||||||
|
if (n==4){tdat=(c-48)*10+tdat;} |
||||||
|
if (n==5) |
||||||
|
{tdat=(c-48)+tdat; |
||||||
|
tbal=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||||
|
} |
||||||
|
|
||||||
|
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||||
|
if (n==8){vdat=(c-48)*10+vdat;} |
||||||
|
if (n==9) |
||||||
|
{vdat=(c-48)+vdat; |
||||||
|
batbal=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||||
|
} |
||||||
|
if (n==11){hdat=(c-48)*100;}//влажность
|
||||||
|
if (n==12) |
||||||
|
{hdat=(c-48)*10+hdat; |
||||||
|
} |
||||||
|
if (n==13) |
||||||
|
{hdat=(c-48)+hdat; |
||||||
|
hbal=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
//**************************************** T2
|
||||||
|
if (p==112) //выделение данных из принятой строки
|
||||||
|
{timekom2=timeserv;//время получения данных
|
||||||
|
nt=4; |
||||||
|
n++; |
||||||
|
if (n==2){ |
||||||
|
if (c==45){zndat=1;//-
|
||||||
|
}//znak
|
||||||
|
else |
||||||
|
{zndat=0;//+
|
||||||
|
} |
||||||
|
} |
||||||
|
if (n==3) {tdat=(c-48)*100;} //температура
|
||||||
|
if (n==4){tdat=(c-48)*10+tdat;} |
||||||
|
if (n==5) |
||||||
|
{tdat=(c-48)+tdat; |
||||||
|
tkom2=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||||
|
} |
||||||
|
|
||||||
|
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||||
|
if (n==8){vdat=(c-48)*10+vdat;} |
||||||
|
if (n==9) |
||||||
|
{vdat=(c-48)+vdat; |
||||||
|
batkom2=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||||
|
} |
||||||
|
if (n==11){hdat=(c-48)*100;}//влажность
|
||||||
|
if (n==12) |
||||||
|
{hdat=(c-48)*10+hdat;
|
||||||
|
} |
||||||
|
if (n==13) |
||||||
|
{hdat=(c-48)+hdat; |
||||||
|
hkom2=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
//****************************************
|
||||||
|
//**************************************** T3
|
||||||
|
if (p==113) //выделение данных из принятой строки
|
||||||
|
{// myFile.print(c);//t2+103c375v299h9
|
||||||
|
nt=5; |
||||||
|
timekom1=timeserv;//время получения данных
|
||||||
|
n++; |
||||||
|
if (n==2){ |
||||||
|
if (c==45){zndat=1;//-
|
||||||
|
}//znak
|
||||||
|
else |
||||||
|
{zndat=0;//+
|
||||||
|
} |
||||||
|
} |
||||||
|
if (n==3) {tdat=(c-48)*100;} //температура
|
||||||
|
if (n==4){tdat=(c-48)*10+tdat;} |
||||||
|
if (n==5) |
||||||
|
{tdat=(c-48)+tdat; |
||||||
|
tkom1=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||||
|
if (n==8){vdat=(c-48)*10+vdat;} |
||||||
|
if (n==9) |
||||||
|
{vdat=(c-48)+vdat; |
||||||
|
batkom1=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||||
|
} |
||||||
|
if (n==11){hdat=(c-48)*100;}//влажность
|
||||||
|
if (n==12) |
||||||
|
{hdat=(c-48)*10+hdat; |
||||||
|
} |
||||||
|
if (n==13) |
||||||
|
{hdat=(c-48)+hdat; |
||||||
|
hkom1=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
//**************************************** T4 ****************************
|
||||||
|
/* if (p==114) //выделение данных из принятой строки
|
||||||
|
{// myFile.print(c);//t1+103c375v299h9
|
||||||
|
ntdat=4; |
||||||
|
if(chet==0) |
||||||
|
{ if( hourd4==t.hour) |
||||||
|
{fh=1; |
||||||
|
} |
||||||
|
else |
||||||
|
{fh=0; |
||||||
|
} |
||||||
|
chet=1; |
||||||
|
} |
||||||
|
hourd4=t.hour; |
||||||
|
mind4=t.min;
|
||||||
|
//byte ntdat;номер датчика
|
||||||
|
//byte zndat;знак температуры 0+
|
||||||
|
//int tdat;температура
|
||||||
|
//int hdat;влажность
|
||||||
|
//int vdat;напряж батареи датчика
|
||||||
|
n++; |
||||||
|
if (n==2){ |
||||||
|
if (c==45){zndat=1;//-
|
||||||
|
}//znak
|
||||||
|
else |
||||||
|
{zndat=0;//+
|
||||||
|
} |
||||||
|
} |
||||||
|
if (n==3) {tdat=(c-48)*100;} //температура
|
||||||
|
if (n==4){tdat=(c-48)*10+tdat;} |
||||||
|
if (n==5) |
||||||
|
{tdat=(c-48)+tdat; |
||||||
|
for (int u =22 ; u >= 0; u = u--) |
||||||
|
{ |
||||||
|
t4[u+1]=t4[u]; |
||||||
|
} |
||||||
|
if(zndat==1)//-
|
||||||
|
{t14=tdat+1000; |
||||||
|
t4[0]=t14; |
||||||
|
} |
||||||
|
else |
||||||
|
{t14=tdat; |
||||||
|
t4[0]=t14; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||||
|
if (n==8){vdat=(c-48)*10+vdat;} |
||||||
|
if (n==9) |
||||||
|
{vdat=(c-48)+vdat; |
||||||
|
bat[3]=vdat; |
||||||
|
} |
||||||
|
if (n==11){hdat=(c-48)*100;}//влажность
|
||||||
|
if (n==12) |
||||||
|
{hdat=(c-48)*10+hdat; |
||||||
|
for (int u =22 ; u >= 0; u = u--) |
||||||
|
{ |
||||||
|
h4[u+1]=h4[u]; |
||||||
|
} |
||||||
|
h4[0]=hdat; |
||||||
|
|
||||||
|
} |
||||||
|
if (n==13) |
||||||
|
{hdat=(c-48)+hdat; |
||||||
|
h14=hdat; |
||||||
|
} |
||||||
|
|
||||||
|
}*/ |
||||||
|
//**************************************** T5
|
||||||
|
if (p==115) //выделение данных из принятой строки
|
||||||
|
{// myFile.print(c);//t2+103c375v299h9
|
||||||
|
timekor=timeserv;//время получения данных
|
||||||
|
nt=7; |
||||||
|
n++; |
||||||
|
if (n==2){ |
||||||
|
if (c==45){zndat=1;//-
|
||||||
|
}//znak
|
||||||
|
else |
||||||
|
{zndat=0;//+
|
||||||
|
} |
||||||
|
} |
||||||
|
if (n==3) {tdat=(c-48)*100;} //температура
|
||||||
|
if (n==4){tdat=(c-48)*10+tdat;} |
||||||
|
if (n==5) |
||||||
|
{tdat=(c-48)+tdat; |
||||||
|
tkor=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||||
|
} |
||||||
|
|
||||||
|
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||||
|
if (n==8){vdat=(c-48)*10+vdat;} |
||||||
|
if (n==9) |
||||||
|
{vdat=(c-48)+vdat; |
||||||
|
batkor=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||||
|
} |
||||||
|
if (n==11){hdat=(c-48)*100;}//влажность
|
||||||
|
if (n==12) |
||||||
|
{hdat=(c-48)*10+hdat; |
||||||
|
} |
||||||
|
if (n==13) |
||||||
|
{hdat=(c-48)+hdat; |
||||||
|
hkor=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||||
|
} |
||||||
|
|
||||||
|
}
|
||||||
|
//*******************************************************************************
|
||||||
|
|
||||||
|
if ((c==token9[0])&&(p==0)){p=9;}
|
||||||
|
if ((c==token11[0])&&(p==0)){p=101;}//cравнение первого символа на соответствие t
|
||||||
|
}//for
|
||||||
|
//*************************************************
|
||||||
|
|
||||||
|
|
||||||
|
}//void pars
|
||||||
@ -0,0 +1,183 @@ |
|||||||
|
/*void savedata()
|
||||||
|
{ |
||||||
|
|
||||||
|
JSONVar boardat; |
||||||
|
if(min1<10) |
||||||
|
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||||
|
} |
||||||
|
boardat["temperatura"] =String(t1)+" C"; |
||||||
|
boardat["humidity"] = String(h1)+" %"; |
||||||
|
tempdat = JSON.stringify(boardat); |
||||||
|
// Serial.println (tempdat);
|
||||||
|
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||||
|
|
||||||
|
// myFile = SPIFFS.open("/TempUl.txt", FILE_WRITE);//создаем файл с именем TempUl
|
||||||
|
myFile = SPIFFS.open("/TempU1.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||||
|
myFile.print(tempdat+"\n"); |
||||||
|
myFile.close(); |
||||||
|
//****************************************************
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void readdata() |
||||||
|
{ |
||||||
|
//****************************************************
|
||||||
|
Serial.println("/TempU1.txt"); |
||||||
|
// Читаем содержимое файла:
|
||||||
|
|
||||||
|
myFile = SPIFFS.open("/TempU1.txt", FILE_READ); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// "Содержимое файла: \""
|
||||||
|
|
||||||
|
while(myFile.available()) { |
||||||
|
|
||||||
|
Serial.write(myFile.read()); |
||||||
|
|
||||||
|
} |
||||||
|
Serial.println(" ");
|
||||||
|
|
||||||
|
// Узнаем размер файла:
|
||||||
|
|
||||||
|
Serial.print("File size: "); |
||||||
|
// "Размер файла: "
|
||||||
|
Serial.println(myFile.size()); |
||||||
|
|
||||||
|
myFile.close(); |
||||||
|
|
||||||
|
strdat=""; |
||||||
|
|
||||||
|
myFile = SPIFFS.open("/TempU1.txt", FILE_READ); |
||||||
|
|
||||||
|
|
||||||
|
while(myFile.available()) { |
||||||
|
|
||||||
|
strdat+=char(myFile.read()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
myFile.close(); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
board1["tdata"] = strdat;
|
||||||
|
board1["dataserv"] = dataserv; |
||||||
|
board1["timeserv"] = timeserv; |
||||||
|
jsonString1 = JSON.stringify(board1); |
||||||
|
// Serial.println (jsonString1);
|
||||||
|
// Serial.println ("strdat=");
|
||||||
|
//Serial.println (strdat);
|
||||||
|
|
||||||
|
// events.send(tempdat.c_str(), "readings", millis());//обновление веба
|
||||||
|
// events.send(strdat.c_str(), "readings", millis());//обновление веба
|
||||||
|
}*/ |
||||||
|
|
||||||
|
|
||||||
|
void Sdreaddata()//чтение данных после откл питания или сброса
|
||||||
|
{ Serial.println ("read SD data"); |
||||||
|
strdat=""; |
||||||
|
myFile = SD.open("/thkom1.txt", FILE_READ); |
||||||
|
while(myFile.available()) { |
||||||
|
|
||||||
|
strdat+=char(myFile.read()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
myFile.close(); |
||||||
|
jsonString2=strdat; |
||||||
|
Serial.println (jsonString2); |
||||||
|
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||||
|
JSONVar myObject = JSON.parse(strdat); |
||||||
|
//{"tkom1":"","hkom1":"","batkom1":"","timekom1":"","tkom2":"25.1","hkom2":"50.1","batkom2":"4.0","timekom2":"22:00","tkor":"23.6","hkor":"45.7","batkor":"3.71","timekor":"21:55","tbal":"11.1","hbal":"56.3","batbal":"3.45","timebal":"21:47","tul1":"5.3","hul1":"99.9","osv1":"0%","timeul1":"22:01"}
|
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("tkom1")) { |
||||||
|
tkom1=((const char*) myObject["tkom1"]);} |
||||||
|
if (myObject.hasOwnProperty("hkom1")) { |
||||||
|
hkom1=((const char*) myObject["hkom1"]);} |
||||||
|
if (myObject.hasOwnProperty("batkom1")) { |
||||||
|
batkom1=((const char*) myObject["batkom1"]);} |
||||||
|
if (myObject.hasOwnProperty("timekom1")) { |
||||||
|
timekom1=((const char*) myObject["timekom1"]);} |
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("tkom2")) { |
||||||
|
tkom2=((const char*) myObject["tkom2"]);} |
||||||
|
if (myObject.hasOwnProperty("hkom2")) { |
||||||
|
hkom2=((const char*) myObject["hkom2"]);} |
||||||
|
if (myObject.hasOwnProperty("batkom2")) { |
||||||
|
batkom2=((const char*) myObject["batkom2"]);} |
||||||
|
if (myObject.hasOwnProperty("timekom2")) { |
||||||
|
timekom2=((const char*) myObject["timekom2"]);} |
||||||
|
|
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("tkor")) { |
||||||
|
tkor=((const char*) myObject["tkor"]);} |
||||||
|
if (myObject.hasOwnProperty("hkor")) { |
||||||
|
hkor=((const char*) myObject["hkor"]);} |
||||||
|
if (myObject.hasOwnProperty("batkor")) { |
||||||
|
batkor=((const char*) myObject["batkor"]);} |
||||||
|
if (myObject.hasOwnProperty("timekor")) { |
||||||
|
timekor=((const char*) myObject["timekor"]);} |
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("tbal")) { |
||||||
|
tbal=((const char*) myObject["tbal"]);} |
||||||
|
if (myObject.hasOwnProperty("hbal")) { |
||||||
|
hbal=((const char*) myObject["hbal"]);} |
||||||
|
if (myObject.hasOwnProperty("batbal")) { |
||||||
|
batbal=((const char*) myObject["batbal"]);} |
||||||
|
if (myObject.hasOwnProperty("timebal")) { |
||||||
|
timebal=((const char*) myObject["timebal"]);} |
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("tul1")) { |
||||||
|
tul1=((const char*) myObject["tul1"]);} |
||||||
|
if (myObject.hasOwnProperty("hul1")) { |
||||||
|
hul1=((const char*) myObject["hul1"]);} |
||||||
|
if (myObject.hasOwnProperty("osv1")) { |
||||||
|
osv1=((const char*) myObject["osv1"]);} |
||||||
|
if (myObject.hasOwnProperty("timeul1")) { |
||||||
|
timeul1=((const char*) myObject["timeul1"]);} |
||||||
|
|
||||||
|
|
||||||
|
strdat=""; |
||||||
|
myFile = SD.open("/thku1.txt", FILE_READ); |
||||||
|
while(myFile.available()) { |
||||||
|
|
||||||
|
strdat+=char(myFile.read()); |
||||||
|
|
||||||
|
} |
||||||
|
myFile.close(); |
||||||
|
jsonString=strdat; |
||||||
|
Serial.println ("jsonString"); |
||||||
|
Serial.println (jsonString); |
||||||
|
|
||||||
|
events.send(jsonString.c_str(), "new_readings", millis());//обновление веба текущая температура
|
||||||
|
myObject = JSON.parse(jsonString); |
||||||
|
if (myObject.hasOwnProperty("id")) { |
||||||
|
String id=((const char*) myObject["id"]);} |
||||||
|
if (myObject.hasOwnProperty("temperature")) { |
||||||
|
ts=((double) myObject["temperature"]);} |
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("humidity")) { |
||||||
|
hs=((double) myObject["humidity"]);} |
||||||
|
|
||||||
|
if (myObject.hasOwnProperty("tim2")) { |
||||||
|
tim2=((const char*) myObject["tim2"]);} |
||||||
|
if (myObject.hasOwnProperty("tim3")) { |
||||||
|
tim3=((const char*) myObject["tim3"]);} |
||||||
|
if (myObject.hasOwnProperty("dataserv")) { |
||||||
|
dataserv=((const char*) myObject["dataserv"]);} |
||||||
|
if (myObject.hasOwnProperty("timev")) { |
||||||
|
timev=((int) myObject["timev"]);} |
||||||
|
|
||||||
|
//{"id":2,"temperature":9.6733450317382812,"humidity":50.41815185546875,"tim2":"12:02",
|
||||||
|
// "dataserv":"12","timeserv":"15:30","munthserv":"январь",weekserv:"среда"}
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,30 @@ |
|||||||
|
void vrem()//время работы сервера
|
||||||
|
{ |
||||||
|
|
||||||
|
time17 = millis()/1000; |
||||||
|
if (time17/60/60<10) { Serial.print ("0"); } |
||||||
|
Serial.print (time17/60/60); |
||||||
|
Serial.print (":"); |
||||||
|
if (time17/60%60<10) { Serial.print ("0"); } |
||||||
|
Serial.print ((time17/60)%60); |
||||||
|
Serial.print (":"); |
||||||
|
if (time17%60<10) { Serial.print ("0"); } |
||||||
|
Serial.println (time17%60); |
||||||
|
String q1=String(time17/60/60, DEC); |
||||||
|
String q2=String((time17/60)%60, DEC); |
||||||
|
String q3=String(time17%60, DEC); |
||||||
|
if ((time17/60)%60<10) |
||||||
|
{ |
||||||
|
t10=String(time17/60/60, DEC)+":"+"0"+String((time17/60)%60, DEC); |
||||||
|
} |
||||||
|
else |
||||||
|
{t10=String(time17/60/60, DEC)+":"+String((time17/60)%60, DEC); |
||||||
|
} |
||||||
|
|
||||||
|
//t10 =q1+":"+q2+":"+q3 ;
|
||||||
|
} |
||||||
|
|
||||||
|
/*char *time_buf;
|
||||||
|
int t = 2055; |
||||||
|
|
||||||
|
sprintf(time_buf, "%d:%d", t / 100, t % 100);*/ |
||||||