main
parent 0ce6257d9e
commit b89f3a2736
  1. 208
      WebSocket3Aqva/BTimer.ino
  2. 128
      WebSocket3Aqva/JSON.ino
  3. 183
      WebSocket3Aqva/SD.ino
  4. 94
      WebSocket3Aqva/SDUl.ino
  5. 77
      WebSocket3Aqva/SDdat.ino
  6. 273
      WebSocket3Aqva/SDkom.ino
  7. 18
      WebSocket3Aqva/SaveSD.ino
  8. 308
      WebSocket3Aqva/Sdread.ino
  9. 35
      WebSocket3Aqva/TtmeDate.ino
  10. 793
      WebSocket3Aqva/WebSocket3Aqva.ino
  11. 30
      WebSocket3Aqva/WiFi.ino
  12. 140
      WebSocket3Aqva/data/akva.html
  13. 159
      WebSocket3Aqva/data/akva1.html
  14. 160
      WebSocket3Aqva/data/akva2.html
  15. 160
      WebSocket3Aqva/data/akva3.html
  16. 170
      WebSocket3Aqva/data/akvadat.html
  17. 236
      WebSocket3Aqva/data/akvagraf.html
  18. BIN
      WebSocket3Aqva/data/android-chrome-192x192.png
  19. BIN
      WebSocket3Aqva/data/android-chrome-512x512.png
  20. BIN
      WebSocket3Aqva/data/apple-touch-icon.png
  21. BIN
      WebSocket3Aqva/data/favicon-16x16.png
  22. BIN
      WebSocket3Aqva/data/favicon-32x32.png
  23. BIN
      WebSocket3Aqva/data/favicon.ico
  24. BIN
      WebSocket3Aqva/data/fon.jpg
  25. 228
      WebSocket3Aqva/data/index.html
  26. 230
      WebSocket3Aqva/data/inform.html
  27. 227
      WebSocket3Aqva/data/inform1.html
  28. 229
      WebSocket3Aqva/data/inform2.html
  29. 228
      WebSocket3Aqva/data/inform3.html
  30. 226
      WebSocket3Aqva/data/inform4.html
  31. 227
      WebSocket3Aqva/data/inform5.html
  32. 157
      WebSocket3Aqva/data/inform6.html
  33. 151
      WebSocket3Aqva/data/inform8.html
  34. 164
      WebSocket3Aqva/data/informtabl.html
  35. 166
      WebSocket3Aqva/data/informtabl1.html
  36. 162
      WebSocket3Aqva/data/informtabl2.html
  37. 161
      WebSocket3Aqva/data/informtabl3.html
  38. 162
      WebSocket3Aqva/data/informtabl4.html
  39. 163
      WebSocket3Aqva/data/informtabl5.html
  40. BIN
      WebSocket3Aqva/data/mstile-150x150.png
  41. 478
      WebSocket3Aqva/data/setting.html
  42. 320
      WebSocket3Aqva/data/style.css
  43. 289
      WebSocket3Aqva/data/timer.html
  44. 192
      WebSocket3Aqva/data/upravlenie.html
  45. 109
      WebSocket3Aqva/data/upravlenie1.html
  46. 68
      WebSocket3Aqva/nrf.ino
  47. 140
      WebSocket3Aqva/ntp.ino
  48. 74
      WebSocket3Aqva/outconvert.ino
  49. 394
      WebSocket3Aqva/parsmsg.ino
  50. 60
      WebSocket3Aqva/processor.ino
  51. 30
      WebSocket3Aqva/servertime.ino
  52. 41
      WebSocket3Aqva/timer.ino
  53. 195
      WebSocket3Aqva/timerconvert.ino
  54. 69
      WebSocket3Aqva/web.ino
  55. 6
      WebSocket3Aqva/wrpin.ino
  56. 129
      esp327nrfSDWDT3/JSstring.ino
  57. 183
      esp327nrfSDWDT3/SD.ino
  58. 117
      esp327nrfSDWDT3/SDDat.ino
  59. 207
      esp327nrfSDWDT3/SDKom.ino
  60. 94
      esp327nrfSDWDT3/SDUL1.ino
  61. 27
      esp327nrfSDWDT3/WIFI.ino
  62. BIN
      esp327nrfSDWDT3/data/android-chrome-192x192.png
  63. BIN
      esp327nrfSDWDT3/data/android-chrome-512x512.png
  64. BIN
      esp327nrfSDWDT3/data/apple-touch-icon.png
  65. BIN
      esp327nrfSDWDT3/data/favicon-16x16.png
  66. BIN
      esp327nrfSDWDT3/data/favicon-32x32.png
  67. BIN
      esp327nrfSDWDT3/data/favicon.ico
  68. BIN
      esp327nrfSDWDT3/data/fon.jpg
  69. BIN
      esp327nrfSDWDT3/data/imajes/Thumbs.db
  70. 9
      esp327nrfSDWDT3/data/imajes/browserconfig.xml
  71. BIN
      esp327nrfSDWDT3/data/imajes/favicon-16x16.png
  72. BIN
      esp327nrfSDWDT3/data/imajes/favicon-32x32.png
  73. BIN
      esp327nrfSDWDT3/data/imajes/favicon.ico
  74. BIN
      esp327nrfSDWDT3/data/imajes/mstile-150x150.png
  75. BIN
      esp327nrfSDWDT3/data/imajes/off.png
  76. BIN
      esp327nrfSDWDT3/data/imajes/on.png
  77. 85
      esp327nrfSDWDT3/data/imajes/safari-pinned-tab.svg
  78. 19
      esp327nrfSDWDT3/data/imajes/site.webmanifest
  79. 239
      esp327nrfSDWDT3/data/index.html
  80. 161
      esp327nrfSDWDT3/data/inform.html
  81. 162
      esp327nrfSDWDT3/data/inform1.html
  82. 160
      esp327nrfSDWDT3/data/inform2.html
  83. 161
      esp327nrfSDWDT3/data/inform3.html
  84. 162
      esp327nrfSDWDT3/data/inform4.html
  85. 162
      esp327nrfSDWDT3/data/inform5.html
  86. 161
      esp327nrfSDWDT3/data/inform6.html
  87. 161
      esp327nrfSDWDT3/data/inform7.html
  88. BIN
      esp327nrfSDWDT3/data/mstile-150x150.png
  89. BIN
      esp327nrfSDWDT3/data/off.png
  90. BIN
      esp327nrfSDWDT3/data/on.png
  91. 58
      esp327nrfSDWDT3/data/setting.html
  92. 205
      esp327nrfSDWDT3/data/style.css
  93. 122
      esp327nrfSDWDT3/data/upravlenie.html
  94. 634
      esp327nrfSDWDT3/esp327nrfSDWDT3.ino
  95. 24
      esp327nrfSDWDT3/event.ino
  96. 54
      esp327nrfSDWDT3/nrf.ino
  97. 95
      esp327nrfSDWDT3/ntp.ino
  98. 352
      esp327nrfSDWDT3/parsmsg.ino
  99. 183
      esp327nrfSDWDT3/savedata.ino
  100. 30
      esp327nrfSDWDT3/time.ino
  101. Some files were not shown because too many files have changed in this diff Show More

@ -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> &deg;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> &deg;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> &deg;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> &deg;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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsplight</th>
<th onclick="sortTable(3)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbspfan</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> &deg;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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsplight</th>
<th onclick="sortTable(3)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbspfan</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> &deg;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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsplight</th>
<th onclick="sortTable(3)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbspfan</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura1</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura2</th>
<th onclick="sortTable(3)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura3</th>
<th onclick="sortTable(4)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsplight1</th>
<th onclick="sortTable(5)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsplight2</th>
<th onclick="sortTable(6)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsplight3</th>
<th onclick="sortTable(7)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbspfan1</th>
<th onclick="sortTable(8)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbspfan2</th>
<th onclick="sortTable(9)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbspfan3</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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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>

Binary file not shown.

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> &deg;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> &percnt;</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> &deg;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> &percnt;</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;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

@ -0,0 +1,85 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="900.000000pt" height="900.000000pt" viewBox="0 0 900.000000 900.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.11, written by Peter Selinger 2001-2013
</metadata>
<g transform="translate(0.000000,900.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M2346 8991 c-3 -4 -24 -11 -46 -15 -48 -8 -111 -61 -143 -120 -21
-40 -22 -53 -25 -407 l-3 -367 -62 -12 c-479 -99 -901 -464 -1075 -930 -22
-58 -47 -142 -57 -187 l-18 -82 -366 -3 c-352 -3 -368 -4 -406 -24 -61 -33
-104 -87 -128 -160 -16 -50 -18 -69 -9 -87 6 -12 14 -37 17 -56 10 -50 85
-125 135 -135 3 -1 12 -6 20 -11 9 -6 158 -11 368 -13 l352 -3 0 -109 0 -109
-363 -3 -362 -3 -45 -29 c-62 -40 -86 -71 -110 -145 -16 -48 -19 -71 -12 -90
5 -14 15 -45 21 -67 12 -47 71 -107 127 -130 26 -11 106 -14 389 -14 l355 0 0
-115 0 -115 -332 -2 c-183 -1 -342 -2 -353 -3 -21 -1 -63 -17 -104 -38 -30
-15 -80 -82 -87 -116 -3 -14 -10 -38 -16 -53 -18 -48 34 -172 91 -217 60 -48
90 -51 459 -51 l342 0 0 -109 0 -108 -91 -8 c-50 -3 -195 -6 -322 -4 -271 3
-312 -2 -374 -45 -73 -50 -124 -166 -102 -234 25 -78 31 -90 67 -127 68 -70
67 -69 462 -75 l355 -5 3 -112 3 -112 -370 -3 -369 -3 -44 -31 c-48 -35 -86
-84 -94 -123 -3 -14 -9 -34 -15 -43 -11 -22 -12 -55 0 -62 4 -3 11 -22 14 -42
10 -58 52 -110 116 -141 l56 -28 353 -3 353 -3 -3 -112 -3 -112 -365 -5 c-360
-5 -366 -5 -402 -28 -50 -31 -98 -93 -105 -137 -3 -19 -10 -38 -14 -41 -12 -7
-12 -51 0 -58 4 -3 11 -24 15 -46 8 -54 66 -116 134 -147 52 -23 58 -23 397
-23 l345 0 0 -109 0 -110 -357 -3 c-350 -3 -359 -3 -396 -25 -64 -39 -107 -84
-119 -127 -6 -23 -15 -45 -20 -50 -11 -13 -10 -63 1 -70 4 -3 11 -24 15 -46 8
-48 55 -104 118 -140 l43 -25 366 -3 367 -3 12 -62 c34 -170 127 -383 237
-541 79 -113 267 -298 381 -374 154 -103 354 -188 519 -222 l62 -12 3 -367 c3
-408 1 -395 76 -474 44 -45 160 -86 196 -69 12 5 40 15 63 21 30 8 55 26 88
63 25 28 43 53 40 56 -2 3 1 12 8 20 9 11 13 106 15 374 l3 358 109 0 110 0 0
-345 c0 -190 4 -353 8 -363 5 -9 19 -38 31 -63 12 -26 33 -52 47 -59 13 -8 24
-17 24 -21 0 -4 30 -17 66 -29 51 -16 73 -19 93 -11 14 5 39 12 55 16 40 8 93
51 125 100 l26 40 5 365 5 365 112 0 113 0 1 -338 c1 -386 5 -412 73 -478 48
-48 166 -90 197 -71 10 7 27 12 37 12 31 0 106 54 137 100 l30 43 3 369 3 369
112 -3 112 -3 5 -360 c6 -400 3 -387 76 -458 21 -20 54 -42 74 -48 19 -6 45
-15 58 -22 17 -8 31 -8 56 1 18 7 39 12 47 12 26 0 103 57 128 95 40 59 47
136 49 470 l1 310 110 3 110 3 3 -369 3 -369 30 -43 c33 -48 107 -100 141
-100 13 0 26 -5 29 -10 8 -13 52 -13 60 0 3 6 19 10 34 10 47 0 122 59 153
121 l27 54 0 335 c1 184 1 343 1 353 0 16 10 17 113 15 l112 -3 5 -365 5 -365
28 -43 c29 -45 107 -102 139 -102 10 0 27 -5 37 -12 15 -9 31 -8 77 6 82 25
128 59 155 114 12 26 26 55 31 64 4 10 8 173 8 363 l0 345 109 0 110 0 3 -357
c3 -354 3 -358 27 -401 33 -60 90 -105 158 -125 57 -17 62 -17 119 0 79 24
155 97 172 165 8 31 12 160 12 391 l0 344 63 13 c168 34 385 128 540 237 113
78 299 267 374 379 104 157 183 338 218 501 l18 82 366 3 c354 3 367 4 407 25
54 29 110 93 119 134 3 19 11 44 17 56 9 17 6 37 -11 91 -23 73 -52 108 -126
153 -40 24 -40 24 -397 27 l-358 3 0 110 0 109 349 0 c193 0 352 4 355 9 3 4
19 11 36 14 45 9 118 81 132 131 6 22 15 45 20 51 11 13 10 63 -2 70 -5 3 -10
16 -10 29 0 35 -55 112 -101 143 l-42 28 -366 5 -366 5 -3 112 c-2 87 0 113
10 113 7 0 165 1 350 1 274 0 343 3 365 14 16 8 33 15 38 15 32 2 115 106 115
146 0 12 5 26 10 29 12 8 13 49 1 73 -5 9 -14 35 -21 57 -15 49 -90 121 -140
135 -20 6 -187 10 -382 10 l-348 0 0 115 0 115 330 0 c400 0 416 2 487 76 29
29 55 66 58 81 4 15 11 38 17 50 8 17 8 33 0 60 -6 21 -14 48 -17 61 -4 12
-11 22 -16 22 -6 0 -8 4 -5 9 3 5 -13 27 -35 50 -71 70 -104 75 -459 73 -168
-1 -317 1 -332 4 l-28 6 0 109 0 109 353 0 353 0 53 26 c55 28 107 87 117 133
3 14 9 34 15 43 12 23 12 55 -1 63 -5 3 -10 19 -10 34 0 59 -62 125 -162 173
-10 4 -174 8 -365 7 l-348 0 -3 115 -3 116 357 0 c350 0 358 0 402 22 56 29
110 90 118 137 4 20 11 45 16 55 10 18 3 53 -24 128 -13 36 -72 94 -111 108
-18 6 -40 16 -49 21 -10 5 -173 9 -363 9 l-345 0 0 109 0 110 358 3 c354 3
357 3 397 26 71 42 103 81 126 152 l21 66 -21 64 c-24 71 -63 119 -126 153
-39 21 -53 22 -406 25 l-366 3 -18 82 c-36 168 -120 358 -228 516 -70 103
-262 294 -371 370 -152 104 -364 196 -533 231 l-62 12 -3 367 c-3 355 -4 367
-26 408 -32 60 -91 107 -162 127 -56 15 -65 15 -106 1 -89 -30 -130 -63 -170
-135 -17 -32 -19 -63 -22 -392 l-3 -358 -109 0 -109 0 -3 363 -3 362 -26 40
c-40 61 -94 104 -139 111 -22 4 -43 11 -46 15 -7 12 -51 11 -59 -1 -3 -5 -16
-10 -29 -10 -35 0 -113 -55 -143 -102 l-28 -43 -5 -365 -5 -365 -112 -3 -113
-3 -2 333 c-2 388 -1 370 -9 383 -3 6 -9 22 -13 37 -11 49 -79 104 -157 129
-57 18 -75 20 -90 11 -10 -7 -27 -12 -37 -12 -31 0 -106 -54 -137 -100 l-30
-43 -3 -369 -3 -369 -112 3 -112 3 -5 360 c-5 379 -5 379 -52 435 -57 68 -163
109 -226 89 -80 -26 -94 -33 -132 -71 -66 -67 -70 -92 -70 -480 l0 -338 -115
0 -114 0 -3 368 -3 369 -30 43 c-31 46 -106 100 -137 100 -10 0 -27 5 -37 12
-15 9 -33 7 -89 -11 -77 -24 -147 -81 -158 -129 -4 -15 -10 -31 -13 -37 -8
-13 -7 5 -9 -382 l-2 -333 -115 0 -115 0 0 356 c0 350 0 358 -22 402 -30 59
-89 106 -160 126 -55 16 -60 16 -121 -4 -68 -22 -103 -49 -145 -113 l-27 -42
-3 -362 -3 -363 -109 0 -109 0 -3 358 c-3 343 -4 359 -25 398 -32 59 -95 112
-143 120 -22 4 -43 11 -46 15 -3 5 -16 9 -29 9 -13 0 -26 -4 -29 -9z m3709
-2637 c75 -26 127 -59 184 -115 56 -56 85 -102 113 -181 l23 -63 0 -1490 c0
-1421 -1 -1493 -18 -1550 -25 -80 -57 -132 -118 -194 -62 -61 -114 -93 -194
-118 -57 -17 -129 -18 -1545 -18 -1410 0 -1488 1 -1544 18 -143 44 -261 160
-310 301 -21 61 -21 68 -24 1501 -2 955 1 1467 7 1520 27 205 189 375 386 404
33 5 717 8 1520 7 1449 -1 1460 -1 1520 -22z"/>
</g>
</svg>

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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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> &deg;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> &percnt;</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>&nbsp&nbspTime</th>
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsptemperatura</th>
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>&nbsp&nbsphumidity</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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

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> &deg;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> &percnt;</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+" &deg;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+" &percnt;</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);*/

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save