@ -0,0 +1,208 @@ |
||||
void btime() |
||||
{
|
||||
// bool lastate;
|
||||
current_time = hour1 * 60 + min1; |
||||
Serial.println(current_time); |
||||
// state1 = main_log(BTimer1, state1); //______________________Обработка каналов управления суточных таймеров реального времени (каналы 1 - 3)
|
||||
Serial.print("BTimer1 [0]:"); |
||||
Serial.println(BTimer1 [0]); |
||||
Serial.print("BTimer2 [0]:"); |
||||
Serial.println(BTimer2 [0]); |
||||
Serial.print("BTimer3 [0]:"); |
||||
Serial.println(BTimer3 [0]); |
||||
//*******************************3************************************************************
|
||||
switch (BTimer3[0]) { |
||||
case 0:
|
||||
state3=0; |
||||
if(gpioTimer3[0]==1) |
||||
{digitalWrite(4, 0); |
||||
gpio[0]=0; |
||||
} |
||||
if(gpioTimer3[1]==1) |
||||
{digitalWrite(26, 0); |
||||
gpio[1]=0; |
||||
} |
||||
if(gpioTimer3[2]==1) |
||||
{digitalWrite(27, 0); |
||||
gpio[2]=0; |
||||
} |
||||
break; |
||||
case 1:
|
||||
state3=1; |
||||
if(gpioTimer3[0]==1) |
||||
{digitalWrite(4, 1); |
||||
gpio[0]=1; |
||||
} |
||||
if(gpioTimer3[1]==1) |
||||
{digitalWrite(26, 1); |
||||
gpio[1]=1; |
||||
} |
||||
if(gpioTimer3[2]==1) |
||||
{digitalWrite(27, 1); |
||||
gpio[2]=1; |
||||
} |
||||
break; |
||||
case 2:
|
||||
state3 = main_log(BTimer3, state3); |
||||
if(gpioTimer3[0]==1) |
||||
{digitalWrite(4, state3); |
||||
gpio[0]=state3; |
||||
} |
||||
if(gpioTimer3[1]==1) |
||||
{digitalWrite(26, state3); |
||||
gpio[1]=state3; |
||||
} |
||||
if(gpioTimer3[2]==1) |
||||
{digitalWrite(27, state3); |
||||
gpio[2]=state3; |
||||
} |
||||
break; |
||||
case 3:
|
||||
break; |
||||
} |
||||
|
||||
//****************************2***************************************************************
|
||||
|
||||
switch (BTimer2[0]) { |
||||
case 0:
|
||||
state2=0; |
||||
if(gpioTimer2[0]==1) |
||||
{digitalWrite(4, 0); |
||||
gpio[0]=0; |
||||
} |
||||
if(gpioTimer2[1]==1) |
||||
{digitalWrite(26, 0); |
||||
gpio[1]=0; |
||||
} |
||||
if(gpioTimer2[2]==1) |
||||
{digitalWrite(27, 0); |
||||
gpio[2]=0; |
||||
} |
||||
break; |
||||
case 1:
|
||||
state2=1; |
||||
if(gpioTimer2[0]==1) |
||||
{digitalWrite(4, 1); |
||||
gpio[0]=1; |
||||
} |
||||
if(gpioTimer2[1]==1) |
||||
{digitalWrite(26, 1); |
||||
gpio[1]=1; |
||||
} |
||||
if(gpioTimer2[2]==1) |
||||
{digitalWrite(27, 1); |
||||
gpio[2]=1; |
||||
} |
||||
break; |
||||
case 2:
|
||||
state2 = main_log(BTimer2, state2); |
||||
if(gpioTimer2[0]==1) |
||||
{digitalWrite(4, state2); |
||||
gpio[0]=state2; |
||||
} |
||||
if(gpioTimer2[1]==1) |
||||
{digitalWrite(26, state2); |
||||
gpio[1]=state2; |
||||
} |
||||
if(gpioTimer2[2]==1) |
||||
{digitalWrite(27, state2); |
||||
gpio[2]=state2; |
||||
} |
||||
break; |
||||
case 3:
|
||||
break; |
||||
} |
||||
//******************************1-приоритет****************************************************************
|
||||
|
||||
switch (BTimer1 [0]) { |
||||
case 0:
|
||||
state1=0; |
||||
if(gpioTimer1 [0]==1) |
||||
{digitalWrite(4, 0); |
||||
gpio[0]=0; |
||||
} |
||||
if(gpioTimer1 [1]==1) |
||||
{digitalWrite(26, 0); |
||||
gpio[1]=0; |
||||
} |
||||
if(gpioTimer1 [2]==1) |
||||
{digitalWrite(27, 0); |
||||
gpio[2]=0; |
||||
} |
||||
break; |
||||
case 1:
|
||||
state1=1; |
||||
if(gpioTimer1 [0]==1) |
||||
{digitalWrite(4, 1); |
||||
gpio[0]=1; |
||||
} |
||||
if(gpioTimer1 [1]==1) |
||||
{digitalWrite(26, 1); |
||||
gpio[1]=1; |
||||
} |
||||
if(gpioTimer1 [2]==1) |
||||
{digitalWrite(27, 1); |
||||
gpio[2]=1; |
||||
} |
||||
break; |
||||
case 2:
|
||||
// lastate=state1;
|
||||
state1 = main_log(BTimer1, state1); |
||||
if(gpioTimer1[0]==1) |
||||
{digitalWrite(4, state1); |
||||
gpio[0]=state1; |
||||
} |
||||
if(gpioTimer1[1]==1) |
||||
{digitalWrite(26, state1); |
||||
gpio[1]=state1; |
||||
} |
||||
if(gpioTimer1[2]==1) |
||||
{digitalWrite(27, state1); |
||||
gpio[2]=state1; |
||||
} |
||||
|
||||
break; |
||||
case 3:
|
||||
break; |
||||
} |
||||
|
||||
Serial.print("Timer1:"); |
||||
Serial.println(state1); |
||||
Serial.print("Timer2:"); |
||||
Serial.println(state2); |
||||
Serial.print("Timer3:"); |
||||
Serial.println(state3); |
||||
Serial.print("Gpio4:"); |
||||
Serial.println(digitalRead(4)); |
||||
Serial.print("Gpio26:"); |
||||
Serial.println(digitalRead(26)); |
||||
Serial.print("Gpio27:"); |
||||
Serial.println(digitalRead(27)); |
||||
writepin(); |
||||
JSstringOut();//преобразуем состояние выходов gpio[3] в JSON
|
||||
webSocket.textAll(jsonStringout);// выводим всем клиентам w/s
|
||||
|
||||
} |
||||
|
||||
bool main_log (uint16_t* timeMassive, bool cur_state) { // Основная фунция расчета состояния каналов суточных таймеров реального времени
|
||||
uint16_t j = 1440; |
||||
uint8_t i = 0; |
||||
uint8_t n = 0; |
||||
for ( i = 1; i < 11; i++) { //___________________________Ищем в массиве таймеров элемент соответсвующий текущему времени c значением не равным 1440 (означает неактивно, отображается "--:--")
|
||||
if ((timeMassive [i] == current_time) && (timeMassive [i] != 1440)) { |
||||
j = timeMassive [i]; |
||||
} |
||||
} |
||||
if (j == 1440)return (cur_state); //_______________________Если не нашли оставляем состояние канала без изменений
|
||||
i = 0; |
||||
for ( i = 1; i < 11; i++) { |
||||
if ((j == timeMassive [i]) && (timeMassive [i] != 1440)) { |
||||
n = i; |
||||
} |
||||
} |
||||
i = 0; |
||||
if ((n % 2) == 0) { //____________________________________Четные таймеры выключают (LOW)
|
||||
return (LOW); |
||||
} |
||||
else return (HIGH); //____________________________________Нечетные таймеры включают (HIGH)
|
||||
} |
||||
@ -0,0 +1,128 @@ |
||||
void JSstringK() |
||||
{ delay(0); |
||||
String id2="2"; |
||||
board2["id"] =id2; |
||||
board2["tkom1"] = tkom1; |
||||
board2["hkom1"] = hkom1; |
||||
board2["batkom1"] = batkom1; |
||||
board2["timekom1"] = timekom1; |
||||
board2["tkom2"] = tkom2; |
||||
board2["hkom2"] = hkom2; |
||||
board2["batkom2"] = batkom2; |
||||
board2["timekom2"] = timekom2; |
||||
board2["tkor"] = tkor; |
||||
board2["hkor"] = hkor; |
||||
board2["batkor"] = batkor; |
||||
board2["timekor"] = timekor; |
||||
board2["tbal"] = tbal; |
||||
board2["hbal"] = hbal; |
||||
board2["batbal"] = batbal; |
||||
board2["timebal"] = timebal; |
||||
board2["tul1"] = tul1; |
||||
board2["hul1"] = hul1; |
||||
board2["osv1"] = osv1; |
||||
board2["timeul1"] = timeul1; |
||||
jsonString2 = JSON.stringify(board2);
|
||||
Serial.println (jsonString2);
|
||||
} |
||||
|
||||
|
||||
void JSstringU() |
||||
{delay(0); |
||||
String id0="0"; |
||||
board["id"] =id0; |
||||
|
||||
if(flread==0) |
||||
{ |
||||
board["temperature"] =ts; |
||||
// t1 = incomingReadings.temp;
|
||||
board["humidity"] =hs; //значение считаное с SD
|
||||
board["tim2"] = tim2; |
||||
|
||||
} |
||||
else |
||||
{//float t1=12.456787;
|
||||
board["temperature"] =t1; |
||||
// board["temperature"] =incomingReadings.temp;
|
||||
//float h1=77.456787;
|
||||
board["humidity"] =h1;//принятое значение
|
||||
// board["humidity"] =incomingReadings.hum;
|
||||
if(min1<10) |
||||
{ |
||||
board["tim2"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
board["tim2"] =String(hour1)+":"+String(min1);
|
||||
} |
||||
} |
||||
//********************
|
||||
board["batz"] = batz; |
||||
board["tim3"] = tim3; |
||||
//*****************
|
||||
board["dataserv"] = dataserv; |
||||
board["timeserv"] = timeserv; |
||||
Serial.println("timeJS"); |
||||
Serial.println(EpochTime); |
||||
|
||||
board["munthserv"] = munthserv; |
||||
board["weekserv"] = weekserv; |
||||
board["timev"] = timev; |
||||
board["EpochTime"] = EpochTime; |
||||
|
||||
// jsonString = JSON.stringify(board);
|
||||
jsonString = JSON.stringify(board);//{"id":"2","temperature":9.6733450317382812,"humidity":50.41815185546875,"tim2":"12:02","dataserv":"12","timeserv":"15:30","munthserv":"январь",weekserv:"среда"}
|
||||
// events.send(jsonString.c_str(), "new_readings", millis());//обновление веба текущая температура
|
||||
Serial.println (jsonString); |
||||
} |
||||
|
||||
void JSstringAkva()// 0-выкл 1-вкл gpio[3]={0,0,0} |
||||
{if(akva==1) |
||||
{ String id="akva"; |
||||
board5["id"] =id; |
||||
board5["tempakv1"] =takva1; |
||||
board5["light1"] =String(lightakv); |
||||
board5["timakv1"] =timeakva; |
||||
if(fanak1==0) |
||||
{fan1="OFF"; |
||||
} |
||||
else |
||||
{ |
||||
fan1="ON"; |
||||
} |
||||
board5["fan1"] =fan1; |
||||
board5["tempakv2"] =takva2; |
||||
board5["light2"] =String(lightakv); |
||||
board5["timakv2"] =timeakva; |
||||
if(fanak2==0) |
||||
{fan2="OFF"; |
||||
} |
||||
else |
||||
{ |
||||
fan2="ON"; |
||||
} |
||||
board5["fan2"] =fan2; |
||||
board5["tempakv3"] =takva3; |
||||
board5["light3"] =String(lightakv); |
||||
board5["timakv3"] =timeakva; |
||||
if(fanak3==0) |
||||
{fan3="OFF"; |
||||
} |
||||
else |
||||
{ |
||||
fan3="ON"; |
||||
} |
||||
board5["fan3"] =fan3; |
||||
|
||||
jsonStringakva = JSON.stringify(board5); |
||||
} |
||||
//jsonStringakva="{\"id\":\"akva\",\"tempakv1\":\"20,1\",\"light1\":\"80 %\",\"timakv1\":\"12.31\",\"fan1\":\"OFF\",\"tempakv2\":\"20,2\",\"light2\":\"82 %\",\"timakv2\":\"12.32\",\"fan2\":\"OFF\",\"tempakv3\":\"20,3\",\"light3\":\"83 %\",\"timakv3\":\"12.33\",\"fan3\":\"OFF\"}";
|
||||
Serial.println(jsonStringakva); |
||||
} |
||||
void JSstringOut()// 0-выкл 1-вкл gpio[3]={0,0,0} |
||||
{String id="out"; |
||||
board4["id"] =id; |
||||
board4["out1"] = String(gpio[0])+String(gpio[1])+String(gpio[2])+String(gpio[3]); |
||||
jsonStringout = JSON.stringify(board4);//jsonStringout= "{"id":"out","out1":"1011"}";
|
||||
Serial.println(jsonStringout); |
||||
} |
||||
@ -0,0 +1,183 @@ |
||||
void sdlist() |
||||
{ |
||||
//listDir(SD, "/", 0);
|
||||
//listDir(SD, "/", 0);
|
||||
//delay(100);
|
||||
// createDir(SD, "/mydir");//создать директорию (папку)
|
||||
// delay(100);
|
||||
// listDir(SD, "/", 0);
|
||||
// delay(100);
|
||||
// removeDir(SD, "/mydir");
|
||||
//delay(100);
|
||||
// listDir(SD, "/", 2);
|
||||
// delay(100);
|
||||
// writeFile(SD, "/hello.txt", "Hello ");
|
||||
// delay(100);
|
||||
// appendFile(SD, "/hello.txt", "World!\n");
|
||||
// delay(100);
|
||||
// readFile(SD, "/hello.txt");
|
||||
// deleteFile(SD, "/foo.txt");
|
||||
// renameFile(SD, "/hello.txt", "/foo.txt");
|
||||
// readFile(SD, "/foo.txt");
|
||||
// testFileIO(SD, "/test.txt");
|
||||
// Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
|
||||
// Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
|
||||
} |
||||
|
||||
|
||||
void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ |
||||
Serial.printf("Listing directory: %s\n", dirname); |
||||
|
||||
File root = fs.open(dirname); |
||||
if(!root){ |
||||
Serial.println("Failed to open directory"); |
||||
return; |
||||
} |
||||
if(!root.isDirectory()){ |
||||
Serial.println("Not a directory"); |
||||
return; |
||||
} |
||||
|
||||
File file = root.openNextFile(); |
||||
while(file){ |
||||
if(file.isDirectory()){ |
||||
Serial.print(" DIR : "); |
||||
Serial.println(file.name()); |
||||
if(levels){ |
||||
listDir(fs, file.name(), levels -1); |
||||
} |
||||
} else { |
||||
Serial.print(" FILE: "); |
||||
Serial.print(file.name()); |
||||
Serial.print(" SIZE: "); |
||||
Serial.println(file.size()); |
||||
} |
||||
file = root.openNextFile(); |
||||
} |
||||
} |
||||
|
||||
void createDir(fs::FS &fs, const char * path){ |
||||
// Serial.printf("Creating Dir: %s\n", path);
|
||||
if(fs.mkdir(path)){ |
||||
Serial.println("Dir created"); |
||||
} else { |
||||
Serial.println("no dir"); |
||||
} |
||||
} |
||||
|
||||
void removeDir(fs::FS &fs, const char * path){ |
||||
Serial.printf("Removing Dir: %s\n", path); |
||||
if(fs.rmdir(path)){ |
||||
Serial.println("Dir removed"); |
||||
} else { |
||||
Serial.println("rmdir failed"); |
||||
} |
||||
} |
||||
|
||||
void readFile(fs::FS &fs, const char * path){ |
||||
Serial.printf("Reading file: %s\n", path); |
||||
|
||||
File file = fs.open(path); |
||||
if(!file){ |
||||
Serial.println("Failed to open file for reading"); |
||||
return; |
||||
} |
||||
|
||||
Serial.print("Read from file: "); |
||||
while(file.available()){ |
||||
Serial.write(file.read()); |
||||
} |
||||
file.close(); |
||||
} |
||||
|
||||
void writeFile(fs::FS &fs, const char * path, const char * message){ |
||||
Serial.printf("Writing file: %s\n", path); |
||||
|
||||
File file = fs.open(path, FILE_WRITE); |
||||
if(!file){ |
||||
Serial.println("Failed to open file for writing"); |
||||
return; |
||||
} |
||||
if(file.print(message)){ |
||||
Serial.println("File written"); |
||||
} else { |
||||
Serial.println("Write failed"); |
||||
} |
||||
file.close(); |
||||
} |
||||
|
||||
void appendFile(fs::FS &fs, const char * path, const char * message){ |
||||
Serial.printf("Appending to file: %s\n", path); |
||||
|
||||
File file = fs.open(path, FILE_APPEND); |
||||
if(!file){ |
||||
Serial.println("Failed to open file for appending"); |
||||
return; |
||||
} |
||||
if(file.print(message)){ |
||||
Serial.println("Message appended"); |
||||
} else { |
||||
Serial.println("Append failed"); |
||||
} |
||||
file.close(); |
||||
} |
||||
|
||||
void renameFile(fs::FS &fs, const char * path1, const char * path2){ |
||||
Serial.printf("Renaming file %s to %s\n", path1, path2); |
||||
if (fs.rename(path1, path2)) { |
||||
Serial.println("File renamed"); |
||||
} else { |
||||
Serial.println("Rename failed"); |
||||
} |
||||
} |
||||
|
||||
void deleteFile(fs::FS &fs, const char * path){ |
||||
Serial.printf("Deleting file: %s\n", path); |
||||
if(fs.remove(path)){ |
||||
Serial.println("File deleted"); |
||||
} else { |
||||
Serial.println("Delete failed"); |
||||
} |
||||
} |
||||
|
||||
void testFileIO(fs::FS &fs, const char * path){ |
||||
File file = fs.open(path); |
||||
static uint8_t buf[512]; |
||||
size_t len = 0; |
||||
uint32_t start = millis(); |
||||
uint32_t end = start; |
||||
if(file){ |
||||
len = file.size(); |
||||
size_t flen = len; |
||||
start = millis(); |
||||
while(len){ |
||||
size_t toRead = len; |
||||
if(toRead > 512){ |
||||
toRead = 512; |
||||
} |
||||
file.read(buf, toRead); |
||||
len -= toRead; |
||||
} |
||||
end = millis() - start; |
||||
Serial.printf("%u bytes read for %u ms\n", flen, end); |
||||
file.close(); |
||||
} else { |
||||
Serial.println("Failed to open file for reading"); |
||||
} |
||||
|
||||
|
||||
file = fs.open(path, FILE_WRITE); |
||||
if(!file){ |
||||
Serial.println("Failed to open file for writing"); |
||||
return; |
||||
} |
||||
|
||||
size_t i; |
||||
start = millis(); |
||||
for(i=0; i<2048; i++){ |
||||
file.write(buf, 512); |
||||
} |
||||
end = millis() - start; |
||||
Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end); |
||||
file.close(); |
||||
} |
||||
@ -0,0 +1,94 @@ |
||||
void saveul() |
||||
{ |
||||
nt=0;//сброс номера температ датчика
|
||||
|
||||
|
||||
int q=0; |
||||
if((hour1<1)&&(min1<20))timev=0;//до 00:20 сброс timev-врмя записи на флеш улица восто приходят каждые 3 мин а зап каждые 20 мин
|
||||
|
||||
if(timev+20<hour1*60+min1){q=1;} |
||||
|
||||
|
||||
ct1=ct1+1;//счетчик пропуска записи данных
|
||||
Serial.print("ct="); |
||||
Serial.println(ct1); |
||||
if(ct1>15){ |
||||
ct1=0; |
||||
q=1; |
||||
}//счетчик пропуска записи данныx
|
||||
if(q==1) |
||||
{
|
||||
timev=hour1*60+min1; |
||||
|
||||
JSONVar boardat; |
||||
if(min1<10) |
||||
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||
} |
||||
boardat["temperatura"] =String(tul1)+" C"; |
||||
boardat["humidity"] = String(hul1)+" %"; |
||||
tempdat = JSON.stringify(boardat); |
||||
Serial.println (tempdat); |
||||
esp_task_wdt_reset();//reset WDT
|
||||
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||
tempdat=tempdat+"\n"; |
||||
|
||||
//myFile = SD.open("/07.txt",FILE_WRITE);
|
||||
// myFile = SD.open("/TEMPUL/28.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||
// myFile = SD.open("/TEMPUL/2022/FEB/27.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||
|
||||
// Serial.println ("open07");
|
||||
// myFile.print(tempdat+"\n");
|
||||
// myFile.close();
|
||||
//Serial.println (stamp.year);
|
||||
//************************************************************************************************************************************************************************************************************************************
|
||||
Serial.println ("name2"); |
||||
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||
// Serial.println (name2);
|
||||
createDir(SD, "/TEMPUL"); |
||||
String name1="/TEMPUL"+ String(stryen[year1-2014]);//2022
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strmen[month1-1]);//FEB
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strden[data1-1]);//27
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+String(strdaten[1]);//
|
||||
name1.toCharArray(Buf, 50); |
||||
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||
Serial.println (Buf); |
||||
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||
|
||||
/*
|
||||
//test = strcat(name1,name2);
|
||||
String name1=strcat("/TEMPUL", stryen[stamp.year-2014]); |
||||
String name2=strcat(strmen[stamp.month-1], strd[stamp.day-1]); |
||||
|
||||
//+strm[stamp.month-1]+strd[stamp.day-1];
|
||||
|
||||
String name1="/TEMPUL"+ stry[stamp.year-2014]+strm[stamp.month-1]+strd[stamp.day-1]; |
||||
Serial.println (name2); |
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50);
|
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+ name2+strdaten[0]; |
||||
Serial.println (name1); |
||||
name1.toCharArray(Buf, 50); |
||||
*/ |
||||
ct1=0; |
||||
//****************************************************
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,77 @@ |
||||
void savedata()//запись данных о темп и вл c espNOW на СД
|
||||
{ |
||||
delay(0); |
||||
JSONVar boardat; |
||||
if(min1<10) |
||||
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||
} |
||||
boardat["temperatura"] =String(t1)+" C"; |
||||
boardat["humidity"] = String(h1)+" %"; |
||||
tempdat = JSON.stringify(boardat); |
||||
delay(0); |
||||
Serial.println (tempdat); |
||||
esp_task_wdt_reset();//reset WDT
|
||||
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||
tempdat=tempdat+"\n"; |
||||
|
||||
//myFile = SD.open("/07.txt",FILE_WRITE);
|
||||
// myFile = SD.open("/TEMPUL/28.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||
// myFile = SD.open("/TEMPUL/2022/FEB/27.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||
|
||||
// Serial.println ("open07");
|
||||
// myFile.print(tempdat+"\n");
|
||||
// myFile.close();
|
||||
//Serial.println (stamp.year);
|
||||
//************************************************************************************************************************************************************************************************************************************
|
||||
delay(0); |
||||
Serial.println ("name2"); |
||||
// String name1="/TEMPUL"+ stryen[year1-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||
// Serial.println (name2);
|
||||
createDir(SD, "/TEMPUL"); |
||||
String name1="/TEMPUL"+ String(stryen[year1-2014]);//2022
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strmen[month1-1]);//FEB
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strden[data1-1]);//27
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+String(strdaten[0]);//
|
||||
name1.toCharArray(Buf, 50); |
||||
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||
// name1="/TEMPUL"+ String(stryen[year1-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||
Serial.println (Buf); |
||||
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||
delay(0); |
||||
JSstringU(); |
||||
writeFile(SD, "/thku1.txt", jsonString.c_str());//записываем в этот файл последние данные NOW + EpochTime
|
||||
/*
|
||||
//test = strcat(name1,name2);
|
||||
String name1=strcat("/TEMPUL", stryen[year1-2014]); |
||||
String name2=strcat(strmen[stamp.month-1], strd[stamp.day-1]); |
||||
|
||||
//+strm[stamp.month-1]+strd[stamp.day-1];
|
||||
|
||||
String name1="/TEMPUL"+ stry[year1-2014]+strm[stamp.month-1]+strd[stamp.day-1]; |
||||
Serial.println (name2); |
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50);
|
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+ name2+strdaten[0]; |
||||
Serial.println (name1); |
||||
name1.toCharArray(Buf, 50); |
||||
*/ |
||||
|
||||
//****************************************************
|
||||
} |
||||
@ -0,0 +1,273 @@ |
||||
void savebalk() |
||||
{ |
||||
boolean q=0; |
||||
if((hb==hour1)&&( mb==min1)){q=1;} |
||||
hb=hour1; |
||||
mb=min1; |
||||
if(q==0) |
||||
{
|
||||
JSONVar boardat; |
||||
if(min1<10) |
||||
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||
} |
||||
boardat["temperatura"] =String(tbal)+" C"; |
||||
boardat["humidity"] = String(hbal)+" %"; |
||||
tempdat = JSON.stringify(boardat); |
||||
Serial.println (tempdat); |
||||
esp_task_wdt_reset();//reset WDT
|
||||
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||
tempdat=tempdat+"\n"; |
||||
|
||||
Serial.println ("name2"); |
||||
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||
// Serial.println (name2);
|
||||
createDir(SD, "/TEMPUL"); |
||||
String name1="/TEMPUL"+ String(stryen[year1-2014]);//2022
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strmen[month1-1]);//FEB
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strden[data1-1]);//27
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+String(strdaten[2]);//
|
||||
name1.toCharArray(Buf, 50); |
||||
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||
Serial.println (Buf); |
||||
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||
} |
||||
} |
||||
//*************************K2*****************************************************************
|
||||
|
||||
|
||||
void savek2() |
||||
{ |
||||
|
||||
JSONVar boardat; |
||||
if(min1<10) |
||||
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||
} |
||||
boardat["temperatura"] =String(tkom2)+" C"; |
||||
boardat["humidity"] = String(hkom2)+" %"; |
||||
tempdat = JSON.stringify(boardat); |
||||
Serial.println (tempdat); |
||||
esp_task_wdt_reset();//reset WDT
|
||||
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||
tempdat=tempdat+"\n"; |
||||
|
||||
Serial.println ("name2"); |
||||
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||
// Serial.println (name2);
|
||||
createDir(SD, "/TEMPUL"); |
||||
String name1="/TEMPUL"+ String(stryen[year1-2014]);//2022
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strmen[month1-1]);//FEB
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strden[data1-1]);//27
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+String(strdaten[3]);//
|
||||
name1.toCharArray(Buf, 50); |
||||
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||
Serial.println (Buf); |
||||
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||
|
||||
} |
||||
|
||||
//**************************K1****************************************************************
|
||||
|
||||
|
||||
void savek1() |
||||
{ |
||||
boolean q=0; |
||||
if((hk==hour1)&&( mk==min1)){q=1;} |
||||
hk=hour1; |
||||
mk=min1; |
||||
if(q==0) |
||||
{
|
||||
JSONVar boardat; |
||||
if(min1<10) |
||||
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||
} |
||||
boardat["temperatura"] =String(tkom1)+" C"; |
||||
boardat["humidity"] = String(hkom1)+" %"; |
||||
tempdat = JSON.stringify(boardat); |
||||
Serial.println (tempdat); |
||||
esp_task_wdt_reset();//reset WDT
|
||||
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||
tempdat=tempdat+"\n"; |
||||
|
||||
Serial.println ("name2"); |
||||
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||
// Serial.println (name2);
|
||||
createDir(SD, "/TEMPUL"); |
||||
String name1="/TEMPUL"+ String(stryen[year1-2014]);//2022
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strmen[month1-1]);//FEB
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strden[data1-1]);//27
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+String(strdaten[4]);//
|
||||
name1.toCharArray(Buf, 50); |
||||
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||
Serial.println (Buf); |
||||
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||
} |
||||
} |
||||
|
||||
//*********************akva*********************************************************************
|
||||
void saveakva() |
||||
{ |
||||
String id="akva"; |
||||
board5["id"] =id; |
||||
board5["tempakv1"] =takva1; |
||||
board5["light1"] =String(lightakv); |
||||
board5["timakv1"] =timeakva; |
||||
if(fanak1==0) |
||||
{fan1="OFF"; |
||||
} |
||||
else |
||||
{ |
||||
fan1="ON"; |
||||
} |
||||
board5["fan1"] =fan1; |
||||
board5["tempakv2"] =takva2; |
||||
board5["light2"] =String(lightakv); |
||||
board5["timakv2"] =timeakva; |
||||
if(fanak2==0) |
||||
{fan2="OFF"; |
||||
} |
||||
else |
||||
{ |
||||
fan2="ON"; |
||||
} |
||||
board5["fan2"] =fan2; |
||||
board5["tempakv3"] =takva3; |
||||
board5["light3"] =String(lightakv); |
||||
board5["timakv3"] =timeakva; |
||||
if(fanak3==0) |
||||
{fan3="OFF"; |
||||
} |
||||
else |
||||
{ |
||||
fan3="ON"; |
||||
} |
||||
board5["fan3"] =fan3; |
||||
|
||||
jsonStringakva = JSON.stringify(board5); |
||||
|
||||
Serial.println (jsonStringakva); |
||||
jsonStringakva=jsonStringakva+"\n"; |
||||
|
||||
createDir(SD, "/AKVA"); |
||||
String name1="/AKVA"+ String(stryen[year1-2014]);//2022
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strmen[month1-1]);//FEB
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strden[data1-1]);//27
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+String(strdaten[9]);//имя текстового файла TA
|
||||
name1.toCharArray(Buf, 50); |
||||
//createDir(SD, "/TEMPUL/2022/FEB/27/TA.txt");
|
||||
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||
Serial.println (Buf); |
||||
appendFile(SD,Buf,jsonStringakva.c_str());//добавление на инфы в файл
|
||||
|
||||
} |
||||
//*********************kor*********************************************************************
|
||||
|
||||
|
||||
void savekor() |
||||
{ |
||||
boolean q=0; |
||||
if((hkr==hour1)&&( mkr==min1)){q=1;} |
||||
hkr=hour1; |
||||
mkr=min1; |
||||
if(q==0) |
||||
{
|
||||
JSONVar boardat; |
||||
if(min1<10) |
||||
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||
} |
||||
boardat["temperatura"] =String(tkor)+" C"; |
||||
boardat["humidity"] = String(hkor)+" %"; |
||||
tempdat = JSON.stringify(boardat); |
||||
Serial.println (tempdat); |
||||
esp_task_wdt_reset();//reset WDT
|
||||
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||
tempdat=tempdat+"\n"; |
||||
|
||||
Serial.println ("name2"); |
||||
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||
// Serial.println (name2);
|
||||
createDir(SD, "/TEMPUL"); |
||||
String name1="/TEMPUL"+ String(stryen[year1-2014]);//2022
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strmen[month1-1]);//FEB
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strden[data1-1]);//27
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+String(strdaten[5]);//
|
||||
name1.toCharArray(Buf, 50); |
||||
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||
Serial.println (Buf); |
||||
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||
} |
||||
} |
||||
@ -0,0 +1,18 @@ |
||||
void sdsave() |
||||
{esp_task_wdt_reset();//reset WDT
|
||||
//String timerdata={"timer1":["01:00","09:00","10:00","11:00","","","","","",""],"timer2":[
|
||||
// String timerweek={"id":"week","timer1_week":"0111100","timer2_week":"1000011","timer3_week":"0101010"};
|
||||
//timerout= {"id":"tout","t1":"100","t2":"010","t3":"001"}
|
||||
writeFile(SD, "/thkom1.txt", jsonString2.c_str());//записываем в этот файл последние данные для счит после сброса
|
||||
writeFile(SD, "/thku1.txt", jsonString.c_str());//записываем в этот файл последние данные NOW + EpochTime для счит после сброса
|
||||
writeFile(SD, "/output.txt", jsonStringout.c_str());//записываем в этот файл последние данные для счит после сброса
|
||||
//String jsonStringout= "{"id":"out","out1":"101"}";// 0-выкл 1-вкл
|
||||
writeFile(SD, "/timerd.txt", timerdata.c_str());//записываем в этот файл значения для таймера
|
||||
//String timerdata={"timer1":["01:00","09:00","10:00","11:00","","","","","",""],"timer2":[
|
||||
writeFile(SD, "/week.txt", timerweek.c_str());//записываем в этот файл значения недельного таймера
|
||||
// String timerweek={"id":"week","timer1_week":"0111100","timer2_week":"1000011","timer3_week":"0101010"};
|
||||
writeFile(SD, "/tdout.txt", timerout.c_str());//записываем в этот файл значения выходов таймера timerout
|
||||
//timerout= {"id":"tout","t1":"100","t2":"010","t3":"001"}
|
||||
writeFile(SD, "/akva.txt", jsonStringakva.c_str());//записываем в этот файл значения температуры аквариума
|
||||
// Serial.println ("sdsave OK");
|
||||
} |
||||
@ -0,0 +1,308 @@ |
||||
void Sdreaddata()//чтение данных после откл питания или сброса
|
||||
{ Serial.println ("read SD data"); |
||||
strdat=""; |
||||
|
||||
myFile = SD.open("/thkom1.txt", FILE_READ); |
||||
while(myFile.available()) { |
||||
|
||||
strdat+=char(myFile.read()); |
||||
|
||||
} |
||||
|
||||
|
||||
myFile.close(); |
||||
jsonString2=strdat; |
||||
Serial.println (jsonString2); |
||||
// events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||
JSONVar myObject = JSON.parse(strdat); |
||||
//{"tkom1":"","hkom1":"","batkom1":"","timekom1":"","tkom2":"25.1","hkom2":"50.1","batkom2":"4.0","timekom2":"22:00","tkor":"23.6","hkor":"45.7","batkor":"3.71","timekor":"21:55","tbal":"11.1","hbal":"56.3","batbal":"3.45","timebal":"21:47","tul1":"5.3","hul1":"99.9","osv1":"0%","timeul1":"22:01"}
|
||||
|
||||
if (myObject.hasOwnProperty("tkom1")) { |
||||
tkom1=((const char*) myObject["tkom1"]);} |
||||
if (myObject.hasOwnProperty("hkom1")) { |
||||
hkom1=((const char*) myObject["hkom1"]);} |
||||
if (myObject.hasOwnProperty("batkom1")) { |
||||
batkom1=((const char*) myObject["batkom1"]);} |
||||
if (myObject.hasOwnProperty("timekom1")) { |
||||
timekom1=((const char*) myObject["timekom1"]);} |
||||
|
||||
if (myObject.hasOwnProperty("tkom2")) { |
||||
tkom2=((const char*) myObject["tkom2"]);} |
||||
if (myObject.hasOwnProperty("hkom2")) { |
||||
hkom2=((const char*) myObject["hkom2"]);} |
||||
if (myObject.hasOwnProperty("batkom2")) { |
||||
batkom2=((const char*) myObject["batkom2"]);} |
||||
if (myObject.hasOwnProperty("timekom2")) { |
||||
timekom2=((const char*) myObject["timekom2"]);} |
||||
|
||||
|
||||
if (myObject.hasOwnProperty("tkor")) { |
||||
tkor=((const char*) myObject["tkor"]);} |
||||
if (myObject.hasOwnProperty("hkor")) { |
||||
hkor=((const char*) myObject["hkor"]);} |
||||
if (myObject.hasOwnProperty("batkor")) { |
||||
batkor=((const char*) myObject["batkor"]);} |
||||
if (myObject.hasOwnProperty("timekor")) { |
||||
timekor=((const char*) myObject["timekor"]);} |
||||
|
||||
if (myObject.hasOwnProperty("tbal")) { |
||||
tbal=((const char*) myObject["tbal"]);} |
||||
if (myObject.hasOwnProperty("hbal")) { |
||||
hbal=((const char*) myObject["hbal"]);} |
||||
if (myObject.hasOwnProperty("batbal")) { |
||||
batbal=((const char*) myObject["batbal"]);} |
||||
if (myObject.hasOwnProperty("timebal")) { |
||||
timebal=((const char*) myObject["timebal"]);} |
||||
|
||||
if (myObject.hasOwnProperty("tul1")) { |
||||
tul1=((const char*) myObject["tul1"]);} |
||||
if (myObject.hasOwnProperty("hul1")) { |
||||
hul1=((const char*) myObject["hul1"]);} |
||||
if (myObject.hasOwnProperty("osv1")) { |
||||
osv1=((const char*) myObject["osv1"]);} |
||||
if (myObject.hasOwnProperty("timeul1")) { |
||||
timeul1=((const char*) myObject["timeul1"]);} |
||||
|
||||
|
||||
strdat=""; |
||||
myFile = SD.open("/thku1.txt", FILE_READ); |
||||
while(myFile.available()) { |
||||
|
||||
strdat+=char(myFile.read()); |
||||
|
||||
} |
||||
myFile.close(); |
||||
jsonString=strdat; |
||||
Serial.println ("jsonString"); |
||||
Serial.println (jsonString); |
||||
|
||||
// events.send(jsonString.c_str(), "new_readings", millis());//обновление веба текущая температура
|
||||
myObject = JSON.parse(jsonString); |
||||
if (myObject.hasOwnProperty("id")) { |
||||
String id=((const char*) myObject["id"]);} |
||||
if (myObject.hasOwnProperty("temperature")) { |
||||
ts=((const char*) myObject["temperature"]);} |
||||
|
||||
if (myObject.hasOwnProperty("humidity")) { |
||||
hs=((const char*) myObject["humidity"]);} |
||||
|
||||
if (myObject.hasOwnProperty("tim2")) { |
||||
tim2=((const char*) myObject["tim2"]);} |
||||
if (myObject.hasOwnProperty("tim3")) { |
||||
tim3=((const char*) myObject["tim3"]);} |
||||
if (myObject.hasOwnProperty("dataserv")) { |
||||
dataserv=((const char*) myObject["dataserv"]);} |
||||
if (myObject.hasOwnProperty("timev")) { |
||||
timev=((int) myObject["timev"]);} |
||||
if(ntp_on==0)//если NTP не пдключилось
|
||||
{if (myObject.hasOwnProperty("EpochTime")) { |
||||
EpochTime=((long) myObject["EpochTime"]);} |
||||
} |
||||
//{"id":2,"temperature":9.6733450317382812,"humidity":50.41815185546875,"tim2":"12:02",
|
||||
// "dataserv":"12","timeserv":"15:30","munthserv":"январь",weekserv:"среда","timev":0,"EpochTime":565}
|
||||
/* hour1=stamp.hour;//число
|
||||
min1=stamp.minute;//число
|
||||
|
||||
dataserv=stamp.day;//число
|
||||
munthserv=strm[stamp.month-1] ;// строка
|
||||
weekserv=strweek[stamp.dayOfWeek];// строка
|
||||
tweekday=stamp.dayOfWeek;//1-7
|
||||
*/ |
||||
|
||||
strdat=""; |
||||
myFile = SD.open("/timerd.txt", FILE_READ); |
||||
while(myFile.available()) { |
||||
|
||||
strdat+=char(myFile.read()); |
||||
|
||||
} |
||||
myFile.close(); |
||||
timerdata=strdat; |
||||
Serial.println ("timerdata"); |
||||
Serial.println (timerdata); |
||||
|
||||
strdat=""; |
||||
myFile = SD.open("/week.txt", FILE_READ); |
||||
while(myFile.available()) { |
||||
|
||||
strdat+=char(myFile.read()); |
||||
|
||||
} |
||||
myFile.close(); |
||||
timerweek=strdat; |
||||
Serial.println ("timerdata"); |
||||
Serial.println (timerweek); |
||||
|
||||
strdat=""; |
||||
myFile = SD.open("/tdout.txt", FILE_READ); |
||||
while(myFile.available()) { |
||||
|
||||
strdat+=char(myFile.read()); |
||||
|
||||
} |
||||
myFile.close(); |
||||
timerout=strdat; |
||||
Serial.println ("timerout"); |
||||
Serial.println (timerout); |
||||
|
||||
strdat=""; |
||||
myFile = SD.open("/akva.txt", FILE_READ); |
||||
while(myFile.available()) { |
||||
|
||||
strdat+=char(myFile.read()); |
||||
|
||||
} |
||||
|
||||
|
||||
myFile.close(); |
||||
jsonStringakva=strdat; |
||||
Serial.println (jsonStringakva); |
||||
myObject = JSON.parse(strdat); |
||||
|
||||
if (myObject.hasOwnProperty("id")) { |
||||
String id=((const char*) myObject["id"]);} |
||||
if (myObject.hasOwnProperty("tempakv1")) { |
||||
takva1=((const char*) myObject["tempakv1"]);} |
||||
if (myObject.hasOwnProperty("light1")) { |
||||
light=((const char*) myObject["light1"]);} |
||||
if (myObject.hasOwnProperty("timakv1")) { |
||||
timeakva=((const char*) myObject["timakv1"]);} |
||||
if (myObject.hasOwnProperty("fan1")) { |
||||
fan1=((const char*) myObject["fan1"]);} |
||||
if (myObject.hasOwnProperty("tempakv2")) { |
||||
takva2=((const char*) myObject["tempakv2"]);} |
||||
if (myObject.hasOwnProperty("fan2")) { |
||||
fan2=((const char*) myObject["fan2"]);} |
||||
if (myObject.hasOwnProperty("tempakv3")) { |
||||
takva3=((const char*) myObject["tempakv3"]);} |
||||
if (myObject.hasOwnProperty("fan3")) { |
||||
fan3=((const char*) myObject["fan3"]);} |
||||
|
||||
} |
||||
|
||||
|
||||
void Sdread() |
||||
{//jsonStringout= "{"id":"out","out1":"101"}";// 0-выкл 1-вкл
|
||||
//получаем состояние выходов изаписывам их в gpio
|
||||
strdat=""; |
||||
myFile = SD.open("/output.txt", FILE_READ); |
||||
while(myFile.available()) { |
||||
|
||||
strdat+=char(myFile.read()); |
||||
|
||||
} |
||||
myFile.close(); |
||||
jsonStringout=strdat; |
||||
// gpio[3]={0,0,0};//выходы состояние {gpio 4, gpio 26, gpio 27,timer}{1,1,1,1}
|
||||
Serial.println (jsonStringout); |
||||
JSONVar myObject = JSON.parse(jsonStringout);//парсинг JSON
|
||||
String outGPIO; |
||||
if (myObject.hasOwnProperty("out1")) { |
||||
outGPIO=((const char*) myObject["out1"]);} |
||||
Serial.println (outGPIO);
|
||||
Serial.println (outGPIO[2]);
|
||||
if(outGPIO[0]=='1') |
||||
{ digitalWrite(4, HIGH); |
||||
gpio[0]=1; |
||||
} |
||||
else |
||||
{digitalWrite(4, LOW); |
||||
gpio[0]=0; |
||||
} |
||||
if(outGPIO[1]=='1') |
||||
{ digitalWrite(26, HIGH); |
||||
gpio[1]=1; |
||||
} |
||||
else |
||||
{digitalWrite(26, LOW); |
||||
gpio[1]=0; |
||||
} |
||||
if(outGPIO[2]=='1') |
||||
{ digitalWrite(27, HIGH); |
||||
gpio[2]=1; |
||||
} |
||||
else |
||||
{digitalWrite(27, LOW); |
||||
gpio[2]=0; |
||||
} |
||||
if(outGPIO[3]=='1') |
||||
{ //digitalWrite(27, HIGH);
|
||||
gpio[3]=1; |
||||
} |
||||
else |
||||
{//digitalWrite(27, LOW);
|
||||
gpio[3]=0; |
||||
} |
||||
timerconvert(); |
||||
} |
||||
|
||||
void readdata() |
||||
{delay(0); |
||||
//****************************************************
|
||||
// формируем имя файла и путь к нему /TEMPUL/D-2022/FEBR/27/T1.txt
|
||||
String name1="/TEMPUL"+ String(stryen[year1-2014])+String(strmen[month1-1])+String(strden[data1-1])+String(strdaten[nti]); |
||||
//String name1="/TEMPUL1/D-2025/FEBR/27/T5.txt";
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
|
||||
myFile = SD.open(Buf, FILE_READ);//открывам файл
|
||||
while(myFile.available()) { |
||||
Serial.write(myFile.read()); |
||||
} |
||||
Serial.println(" ");
|
||||
// Узнаем размер файла:
|
||||
Serial.print("File size: "); |
||||
// "Размер файла: "
|
||||
Serial.println(myFile.size()); |
||||
myFile.close(); |
||||
|
||||
strdat=""; |
||||
|
||||
Serial.println("/TEMPUL/D-2022/FEBR/27/T.txt"); |
||||
myFile = SD.open(Buf, FILE_READ); |
||||
while(myFile.available()) { |
||||
strdat+=char(myFile.read());//считываем текс файла в строковую переменную
|
||||
} |
||||
myFile.close(); |
||||
delay(0); |
||||
esp_task_wdt_reset();//reset WDT
|
||||
delay(0); |
||||
|
||||
board1["tdata"] = strdat;
|
||||
board1["dataserv"] = dataserv; |
||||
board1["timeserv"] = timeserv; |
||||
jsonString1 = JSON.stringify(board1); |
||||
// Serial.println (jsonString1);
|
||||
// Serial.println ("strdat=");
|
||||
//Serial.println (strdat);
|
||||
delay(0); |
||||
// events.send(tempdat.c_str(), "readings", millis());//обновление веба
|
||||
// events.send(strdat.c_str(), "readings", millis());//обновление веба
|
||||
} |
||||
|
||||
void readakva() |
||||
{delay(0); |
||||
//****************************************************
|
||||
// формируем имя файла и путь к нему /AKVA/D-2022/FEBR/27/T10.txt
|
||||
nti=9; |
||||
String name1="/AKVA"+ String(stryen[year1-2014])+String(strmen[month1-1])+String(strden[data1-1])+String(strdaten[nti]); |
||||
//String name1="/AKVA/D-2025/FEBR/27/T10.txt";
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
|
||||
|
||||
|
||||
strdat=""; |
||||
|
||||
myFile = SD.open(Buf, FILE_READ); |
||||
while(myFile.available()) { |
||||
strdat+=char(myFile.read());//считываем текс файла в строковую переменную
|
||||
} |
||||
myFile.close(); |
||||
delay(0); |
||||
esp_task_wdt_reset();//reset WDT
|
||||
delay(0); |
||||
// Serial.println (strdat);
|
||||
delay(0); |
||||
|
||||
} |
||||
@ -0,0 +1,35 @@ |
||||
void timedate()//при запуске 1 раз
|
||||
{//rtc.adjust(DateTime(2024,3, 4, 14,25,0));
|
||||
if (! rtc.lostPower()) { |
||||
// Serial.println("RTC is NOT running!");
|
||||
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
|
||||
// ИЛИ ТАК
|
||||
//rtc.adjust(DateTime(2020, 1, 1, 15, 51, 0));
|
||||
// rtc.adjust(DateTime(2024,3, 4, 14,44,0));
|
||||
} |
||||
|
||||
|
||||
|
||||
DateTime now = rtc.now(); |
||||
timeserv=formatTimeDigits(now.hour(),now.minute());
|
||||
Serial.print("TIME_"); |
||||
Serial.println(timeserv); |
||||
dataserv=now.day(); |
||||
data1=now.day(); |
||||
month1=now.month(); |
||||
munthserv=strm[now.month()-1] ; |
||||
weekserv=strweek[now.dayOfTheWeek()]; |
||||
hour1=now.hour(); |
||||
min1=now.minute(); |
||||
tweekday=now.dayOfTheWeek(); |
||||
year1=now.year(); |
||||
if(tweekday==0) tweekday=7; |
||||
Serial.println(tweekday); |
||||
Serial.println(dataserv); |
||||
Serial.println(month1); |
||||
Serial.println(year1); |
||||
uint32_t timeStampVal = now.unixtime(); |
||||
EpochTime=timeStampVal; |
||||
Serial.println(EpochTime); |
||||
|
||||
} |
||||
@ -0,0 +1,793 @@ |
||||
//08:3A:F2:A7:80:6C //esp32 желтые ноги
|
||||
//08:3A:F2:66:31:30 //esp32 lilygo2,3
|
||||
//08:3A:F2: //esp32 lilygo4,7
|
||||
//EC:94:CB:6C:EC:A4 esp32 самоделка
|
||||
//SD Карта подкл к любым ногам SPI железный H_SPIClass sdSPI(HSPI); или V_ SPIClass sdSPI(VSPI);
|
||||
#define SD_MISO 23 |
||||
#define SD_MOSI 13 |
||||
#define SD_SCLK 14 |
||||
//#define SD_CS 15
|
||||
#define SD_CS 2 |
||||
|
||||
#include <esp_task_wdt.h> |
||||
#define WDT_TIMEOUT 30 |
||||
#include <WiFi.h> |
||||
#include <AsyncTCP.h> |
||||
#include "ESPAsyncWebSrv.h" |
||||
#include <esp_now.h> |
||||
#include "SPI.h" |
||||
#include <SPIFFS.h> |
||||
#include <esp_task_wdt.h> |
||||
#include "NTPClient.h" |
||||
#include "WiFiUdp.h" |
||||
#include <Arduino_JSON.h> |
||||
|
||||
#include "FS.h" |
||||
#include "SD.h" |
||||
#include <UnixTime.h> |
||||
UnixTime stamp(0); // указать GMT (3 для Москвы)
|
||||
// Define deep sleep options
|
||||
String dataMessage; |
||||
// Define NTP Client to get time
|
||||
WiFiUDP ntpUDP; |
||||
NTPClient timeClient(ntpUDP); |
||||
#include "RTClib.h" |
||||
RTC_DS3231 rtc; |
||||
#include "nRF24L01.h" |
||||
#include "RF24.h" |
||||
#include <RCSwitch.h> |
||||
|
||||
RCSwitch mySwitch = RCSwitch(); |
||||
|
||||
char msg[16]; |
||||
//RF24 radio(12, 14, 26, 25, 27);
|
||||
//RF24 radio(27, 26, 32, 33, 25);//server (ce,csn,sck,miso,mosi)esp32
|
||||
//gpio19
|
||||
RF24 radio(17, 16, 32, 33, 25);//server (ce,csn,sck,miso,mosi)esp32
|
||||
|
||||
const uint64_t pip = 0x02E423E4E2LL; |
||||
SPIClass sdSPI(HSPI); |
||||
File myFile; |
||||
|
||||
const char* ssid = "VOVA-47"; |
||||
const char* password = "vovak26102003"; |
||||
|
||||
const int LED_PIN = 2; |
||||
|
||||
AsyncWebServer server(80); |
||||
AsyncWebSocket webSocket("/ws"); |
||||
|
||||
int ledState = LOW; |
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// Задайте свой статический IP-адрес
|
||||
IPAddress local_IP(192, 168, 1, 115); |
||||
// Укажите IP-адрес шлюза
|
||||
IPAddress gateway(192, 168, 1, 1); |
||||
|
||||
IPAddress subnet(255, 255, 0, 0); |
||||
IPAddress primaryDNS(8, 8, 8, 8); // опционально
|
||||
IPAddress secondaryDNS(8, 8, 4, 4); // опционально
|
||||
|
||||
|
||||
//****************************************************************************
|
||||
// ntp
|
||||
int countTimeWas; |
||||
int countVal; |
||||
int countVal1; |
||||
String formattedDate; |
||||
String formattedTime; |
||||
String dayStamp; |
||||
String timeStamp; |
||||
String timerweek="{\"id\":\"week\",\"timer1_week\":\"0111100\",\"timer2_week\":\"1000011\",\"timer3_week\":\"0101010\"}"; |
||||
bool tweek; // флаг обновления строки timerweek для записи на SD
|
||||
String timerdata="{\"timer1\":[\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\"],\"timer2\":[\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\"],\"timer3\":[\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\",\"00:00\"]}";//данные с таймеров
|
||||
bool tdat=0;// флаг обновления строки timerdat для записи на SD
|
||||
String timerout="{\"id\":\"tout\",\"t1\":\"011\",\"t2\":\"100\",\"t3\":\"010\"}";//подключние таймеров т1 т2 и т3 к выходам gpio4,gpio26,gpio27
|
||||
bool tout=0;// флаг обновления строки timerout для записи на SD
|
||||
bool ntp_on=0; |
||||
//**************************JSON***************************************************
|
||||
JSONVar board; |
||||
JSONVar board1; |
||||
JSONVar board2; |
||||
JSONVar board3; |
||||
JSONVar board4; |
||||
JSONVar board5; |
||||
|
||||
//String jsonString="{\"id\":\"0\",\"temperature\":\"9.67\",\"humidity\":50.41815185546875,\"tim2\":\"10:10\",\"tim3\":\"11:11\",\"dataserv\":\"12\",\"timeserv\":\"15:30\",\"munthserv\":\"январь\",\"weekserv\":\"среда\"}";
|
||||
String jsonString="{\"id\":\"0\",\"temperature\":9.6757548,\"humidity\":50.41815185546875,\"tim2\":\"10:10\",\"tim3\":\"11:11\",\"dataserv\":\"12\",\"munthserv\":\"январь\",\"weekserv\":\"среда\"}"; |
||||
String jsonString1; |
||||
String jsonString2="{\"id\":\"2\",\"tkom1\":\"20.0\",\"hkom1\":\"30.0\",\"batkom1\":\"4.10\",\"timekom1\":\"07:08\",\"tkom2\":\"20.5\",\"hkom2\":\"80.5\",\"batkom2\":\"3.95\",\"timekom2\":\"15:15\",\"tkor\":\"23.5\",\"hkor\":\"90.5\",\"batkor\":\"3.75\",\"timekor\":\"13:13\",\"tbal\":\"13.5\",\"hbal\":\"80.5\",\"batbal\":\"3.45\",\"timebal\":\"11:11\",\"tul1\":\"7.3\",\"hul1\":\"75.5\",\"osv1\":\"50\",\"timeul1\":\"12:12\"}"; |
||||
String jsonStringout= "{\"id\":\"out\",\"out1\":\"1011\"}";// 0-выкл 1-вкл вых1 вых2 вых3 таймер(работаем по кнопкам или по таймеру
|
||||
String jsonString77="{\"Time\":\"0:17\",\"temperatura\":\"19.73 C\",\"humidity\":\"73.59 %\"}\n{\"Time\":\"0:37\",\"temperatura\":\"19.65 C\",\"humidity\":\"74.34 %\"}\n{\"Time\":\"0:57\",\"temperatura\":\"19.57 C\",\"humidity\":\"74.99 %\"}"; |
||||
String jsonStringakva="{\"id\":\"akva\",\"tempakv1\":\"20,1\",\"light1\":\"80 %\",\"timakv1\":\"12.31\",\"fan1\":\"OFF\",\"tempakv2\":\"20,2\",\"light2\":\"82 %\",\"timakv2\":\"12.32\",\"fan2\":\"OFF\",\"tempakv3\":\"20,3\",\"light3\":\"83 %\",\"timakv3\":\"12.33\",\"fan3\":\"OFF\"}"; |
||||
//String jsonString77="{\"id\":\"77\",\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}\n";
|
||||
//String jsonString78="{\"id\":\"77\",\"data\":\'\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"\'}";
|
||||
//{"timer1":["00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00"],"timer2":["00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00"],"timer3":["00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00","00:00"]}
|
||||
//String jsonString7="{\"id\":\"week\",\"timer1_week\":\"0111100\",\"timer2_week\":\"1000011\",\"timer3_week\":\"0101010\"}";
|
||||
//****************************************************************************
|
||||
int idcon=0;// ID соединения
|
||||
//*************************************************************************************************
|
||||
char* strd[] = {"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"}; |
||||
char* strm[] = {"январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь"}; |
||||
char* strweek[] = {"воскресенье","понедельник","вторник","среда","четверг","пятница","суббота","воскресенье"}; |
||||
int nt=0;//номер термометра
|
||||
int nti=0;//номер термометра для сайта
|
||||
int temperature1=10; |
||||
String ts; |
||||
String hs; |
||||
String t1; |
||||
String h1; |
||||
String t10;//время работы сервера
|
||||
String tim3;// время от нтп сервера при приходе данных с NOW
|
||||
String tim2;//время получ от устройства NOW
|
||||
String batz;//заря бат термометра ул запад
|
||||
String munthserv;//месяц
|
||||
String weekserv;//день недели
|
||||
String timer1;//таймер1
|
||||
String timer2;//таймер2
|
||||
int timerbut1=0; |
||||
int timerbut2=0; |
||||
bool tbut1=0;//флаг таймера1
|
||||
bool tbut2=0;//флаг таймера2
|
||||
bool res = 0;//флаг разрешения сброса
|
||||
int timebut=0;// подсчет времени по таймерам
|
||||
|
||||
String tkom1;//температура
|
||||
String hkom1;//влажность
|
||||
String batkom1; |
||||
String timekom1;//время прихода данных комната1
|
||||
|
||||
String tkom2; |
||||
String hkom2; |
||||
String batkom2; |
||||
String timekom2; |
||||
|
||||
String tkor; |
||||
String hkor; |
||||
String batkor; |
||||
String timekor; |
||||
|
||||
String tbal; |
||||
String hbal; |
||||
String batbal; |
||||
String timebal; |
||||
|
||||
String timeul1; |
||||
String tul1; |
||||
String hul1; |
||||
String osv1; |
||||
|
||||
String takva1; |
||||
String takva2; |
||||
String takva3; |
||||
String timeakva; |
||||
String light; |
||||
String fan1; |
||||
String fan2; |
||||
String fan3; |
||||
bool fanak1; |
||||
bool fanak2; |
||||
bool fanak3; |
||||
int lightakv=80; |
||||
bool akva=0;//флаг прихода дааных с акваконрол
|
||||
|
||||
int ct1=0;//счетчик пропуска данные каждые 3 минуты записываем каждые 20 те 7 пропусков
|
||||
int wreset=0;//счетчик времени сброса esp(1 раз в 8 часов)
|
||||
String out1;//выход1 gpio4
|
||||
String out2;//выход2 gpio26
|
||||
String out3;//выход3 gpio27
|
||||
int tweekday=1;//день недели для таймеров
|
||||
int time17=0; |
||||
int hour1=10; |
||||
int min1=7; |
||||
int sek=0; |
||||
int year1; |
||||
int month1; |
||||
int data1; |
||||
int hk=0;//часы для исключения повтора записи данных
|
||||
int mk=0;//минуты
|
||||
int hb=0;//часы для исключения повтора записи данных
|
||||
int mb=0;//минуты
|
||||
int hkr=0;//часы для исключения повтора записи данных
|
||||
int mkr=0;//минуты
|
||||
int timev=0;//для пропуска 20 минут
|
||||
//String timev1;//для записи на флэш при сбросе
|
||||
bool outdata=0;//флаг обновления состояния выходов
|
||||
boolean fdata=0;//флаг обновления данных темп и влажн
|
||||
int fobnov=1;//флаг обновления данных темп и влажн
|
||||
String timeserv;//время сервера
|
||||
String dataserv;//дата
|
||||
int v=0; |
||||
int v1=0; |
||||
long EpochTime=0; |
||||
int ind=0; |
||||
|
||||
String strdat;//накопленые в памяти данные по темп и влажность передаваемые клиенту
|
||||
String tempdat;//
|
||||
int ftdata=0;//флаг запроса данных темп и влажн
|
||||
int fping=0;// флаг для задержки отр данных на страницу inform
|
||||
int wright=0; |
||||
bool flread=0; |
||||
char* strden[] = {"/01","/02","/03","/04","/05","/06","/07","/08","/09","/10","/11","/12","/13","/14","/15","/16","/17","/18","/19","/20","/21","/22","/23","/24","/25","/26","/27","/28","/29","/30","/31"};
|
||||
char* strmen[] = {"/JAN","/FEBR","/MARCH","/APRIL","/MAY","/JUNE","/JULY","/AUG","/SEPT","/OCT","/NOV","/DEC"}; |
||||
char* stryen[] = {"/2014","/2015","/2016","/2017","/D-2018","/D-2019","/D-2020","/D-2021","/D-2022","/D-2023","/D-2024","/D-2025","/D-2026","/D-2027","/D-2028","/D-2029","/D-2030","/D-2031","/D-2032","D-2033","/D-2034","/D-2035"}; |
||||
char* strdaten[] = {"/T1.txt","/T2.txt","/T3.txt","/T4.txt","/T5.txt","/T6.txt","/T7.txt","/T8.txt","/T9.txt","/T10.txt"}; |
||||
//************************************************************
|
||||
//************************************************************
|
||||
hw_timer_t * timer = NULL; |
||||
volatile SemaphoreHandle_t timerSemaphore; |
||||
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED; |
||||
volatile uint32_t isrCounter = 0; |
||||
volatile uint32_t lastIsrAt = 0; |
||||
char *time_buf; |
||||
//*****************************************************************************
|
||||
|
||||
// Structure example to receive data
|
||||
// Must match the sender structure
|
||||
typedef struct struct_message { |
||||
int id; |
||||
float temp; |
||||
float hum; |
||||
unsigned int readingId; |
||||
unsigned int bat; |
||||
} struct_message; |
||||
int volt11; |
||||
struct_message incomingReadings; |
||||
//****************************************Timer Budilnik*****************************************************************************************************************************************************************************************
|
||||
int minuta;//счетчик минут для проверки времени сработки будильников
|
||||
uint16_t BTimer1 [11] = {2, 390, 450, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440}; // массивы всех таймеров для суточных каналов (1 - 4) 0-й элемент отвечает за состояние канала (1 - вкл/ 0 - выкл/ 2 - авто))
|
||||
uint16_t BTimer2 [11] = {2, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440}; // остальное время в минутах (нечетные элементы - таймеры включения, четные - выключения)
|
||||
uint16_t BTimer3 [11] = {2, 380, 450, 1080, 1410, 1440, 1440, 1440, 1440, 1440, 1440}; // время 1440 отображается на экране как "--:--", это неактивное значение, для основной логики пустая ячейка означает что таймер не задан
|
||||
uint16_t weekTimer1 [7]={0,0,0,0,0,0,0};//недельные установки t1
|
||||
uint16_t weekTimer2 [7]={0,0,0,0,0,0,0};//недельные установки t2
|
||||
uint16_t weekTimer3 [7]={0,0,0,0,0,0,0};//недельные установки t3
|
||||
uint16_t gpioTimer1 [3]={1,0,0};//выходы подкл к таймеру {gpio 4, gpio 26, gpio 27} {1,0,0} подкл 4
|
||||
uint16_t gpioTimer2 [3]={1,0,0};//выходы подкл к таймеру {gpio 4, gpio 26, gpio 27} {0,0,0} откл все
|
||||
uint16_t gpioTimer3 [3]={0,0,0};//выходы подкл к таймеру {gpio 4, gpio 26, gpio 27}{1,1,1} подкл все
|
||||
uint16_t gpio[4]={0,0,0,1};//выходы состояние {gpio 4, gpio 26, gpio 27, timer}{1,1,1,1} timer определяет работу выходов по таймеру=1 или кнопки =0
|
||||
bool state1 = 0; //_________________Переменные состояния каналов(вкл/выкл)
|
||||
bool state2 = 0; |
||||
bool state3 = 0; |
||||
uint16_t current_time = 0 ; //_______Текущее время в минутах (для основных расчетов)
|
||||
//*********************************************************************************************
|
||||
const char* PARAM_INPUT_1 = "output";//Gpio
|
||||
const char* PARAM_INPUT_2 = "state"; //состояние выхода
|
||||
const char* PARAM_INPUT = "value"; |
||||
|
||||
const int output = 4; |
||||
const int output1 = 26; |
||||
const int output2 = 27; |
||||
String ledout; |
||||
void IRAM_ATTR onTimer(); |
||||
//***********************************************************
|
||||
void OnDataRecv(const uint8_t * mac_addr, const uint8_t *incomingData, int len) {
|
||||
// Copies the sender mac address to a string
|
||||
char macStr[18]; |
||||
Serial.print("Packet received from: "); |
||||
snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x", |
||||
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); |
||||
Serial.println(macStr); |
||||
memcpy(&incomingReadings, incomingData, sizeof(incomingReadings)); |
||||
|
||||
Serial.printf("Board ID %u: %u bytes\n", incomingReadings.id, len); |
||||
Serial.printf("t value: %4.2f \n", incomingReadings.temp); |
||||
t1 = incomingReadings.temp; |
||||
Serial.printf("h value: %4.2f \n", incomingReadings.hum); |
||||
h1=incomingReadings.hum; |
||||
Serial.printf("readingID value: %d \n", incomingReadings.readingId); |
||||
int tim11 =incomingReadings.readingId; |
||||
hour1=tim11/100; |
||||
min1=tim11%100; |
||||
volt11 =incomingReadings.bat;//заряд батареи
|
||||
Serial.printf("bat value: %d \n", incomingReadings.bat); |
||||
|
||||
|
||||
batz=volt11/100; |
||||
batz+=","; |
||||
batz+=volt11%100; |
||||
|
||||
Serial.println(batz); |
||||
//tim3=timeserv;
|
||||
//получаем из int incomingReadings= 1530 строку 15:30
|
||||
|
||||
tim3=incomingReadings.readingId/100; |
||||
tim3+=":"; |
||||
if(incomingReadings.readingId%100<10)tim3+="0"; |
||||
|
||||
tim3+=incomingReadings.readingId%100; |
||||
//JSONстрока формирование
|
||||
ntphome(); |
||||
flread=1; |
||||
JSstringU();
|
||||
savedata(); |
||||
flread=1; |
||||
}//OnDataRecv
|
||||
|
||||
//****************************************************************************
|
||||
//****************************************************************************************************************************************************************************************************************************************************
|
||||
//подпрогр Действия вебсекета
|
||||
void handleWebSocketEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { |
||||
switch (type) { |
||||
case WS_EVT_DISCONNECT://[3] Disconnected! откл соединения
|
||||
Serial.printf("[%u] Disconnected!\n", client->id()); |
||||
idcon--; |
||||
break; |
||||
|
||||
case WS_EVT_CONNECT://[4] Connected from 192.168.1.108 подключение
|
||||
{ |
||||
IPAddress ip = client->remoteIP();//адрес подкл объкта
|
||||
Serial.printf("[%u] Connected from %d.%d.%d.%d\n", client->id(), ip[0], ip[1], ip[2], ip[3]); |
||||
idcon++; |
||||
client->text(jsonString);//отправка дата месяц неделя
|
||||
client->text(jsonString2);//отправка темп и влажности в комнатах
|
||||
String countUpdate2 = "{\"label3\":\"count2\",\"value\":\"" + String(timeserv) + "\"}";//отправка строковой переменной
|
||||
String countUpdate = "{\"label3\":\"count\",\"value\":\"" + String(t10) + "\"}";//отправка строковой переменной время раб сервера
|
||||
client->text(countUpdate2);//отправка NTP времени timeserv
|
||||
client->text(countUpdate);//отправка время раб сервера t10
|
||||
if (ftdata==1)//пришел запрос табл данных /inform1 запад
|
||||
{ftdata=0; |
||||
nti=1; |
||||
readdata(); |
||||
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу на стр inform
|
||||
} |
||||
if (ftdata==2)//пришел запрос табл данных /inform К1
|
||||
{ftdata=0; |
||||
nti=4; |
||||
readdata(); |
||||
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу на стр inform
|
||||
} |
||||
if (ftdata==3)//пришел запрос табл данных /inform k2
|
||||
{ftdata=0; |
||||
nti=3; |
||||
readdata(); |
||||
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу на стр inform
|
||||
}
|
||||
if (ftdata==5)//пришел запрос табл данных /inform балкон
|
||||
{ftdata=0; |
||||
nti=2; |
||||
readdata(); |
||||
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу на стр inform
|
||||
} |
||||
if (ftdata==4)//пришел запрос табл данных /inform корридор
|
||||
{ftdata=0; |
||||
nti=5; |
||||
readdata(); |
||||
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу на стр inform
|
||||
} |
||||
if (ftdata==10)//пришел запрос табл данных /inform восток
|
||||
{ftdata=0; |
||||
nti=0; |
||||
readdata(); |
||||
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу на стр inform
|
||||
} |
||||
if (ftdata==6)//пришел запрос табл данных кухня
|
||||
{ftdata=0; |
||||
// nti=6;
|
||||
// readdata();
|
||||
// client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу на стр
|
||||
} |
||||
if (ftdata==12)//пришел запрос /setting передача значений таймера
|
||||
{ftdata=0; |
||||
client->text(timerweek);//таймер дни недели
|
||||
Serial.println(timerweek); |
||||
|
||||
client->text(timerdata);//timerout
|
||||
Serial.println(timerdata); |
||||
|
||||
client->text(timerout);//timerout
|
||||
Serial.println(timerout); |
||||
} |
||||
|
||||
if (ftdata==8)//пришел запрос управления upravlenie.html
|
||||
{ftdata=0; |
||||
JSstringOut(); |
||||
client->text(jsonStringout);// {"id":"out","out1":"1011"} отправляем состояние выходов
|
||||
//Serial.println(jsonStringout);
|
||||
} |
||||
if (ftdata==7)//пришел запрос управления akva.html
|
||||
{ftdata=0; |
||||
JSstringAkva(); |
||||
client->text(jsonStringakva);//jsonStringakva="{\"id\":\"akva\",\"tempakv1\":\"20,1\",\"light1\":\"80 %\",\"timakv1\":\"12.31\",\"fan1\":\"OFF\",\"tempakv2\":\"20,2\",\"light2\":\"82 %\",\"timakv2\":\"12.32\",\"fan2\":\"OFF\",\"tempakv3\":\"20,3\",\"light3\":\"83 %\",\"timakv3\":\"12.33\",\"fan3\":\"OFF\"}";
|
||||
Serial.println(jsonStringakva); |
||||
} |
||||
|
||||
if (ftdata==15)//пришел запрос управления akva1.html
|
||||
{ftdata=0; |
||||
JSstringAkva(); |
||||
client->text(jsonStringakva);//jsonStringakva="{\"id\":\"akva\",\"tempakv1\":\"20,1\",\"light1\":\"80 %\",\"timakv1\":\"12.31\",\"fan1\":\"OFF\",\"tempakv2\":\"20,2\",\"light2\":\"82 %\",\"timakv2\":\"12.32\",\"fan2\":\"OFF\",\"tempakv3\":\"20,3\",\"light3\":\"83 %\",\"timakv3\":\"12.33\",\"fan3\":\"OFF\"}";
|
||||
// Serial.println(jsonStringakva);
|
||||
readakva(); |
||||
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу
|
||||
} |
||||
if (ftdata==16)//пришел запрос управления akva1.html
|
||||
{ftdata=0; |
||||
JSstringAkva(); |
||||
client->text(jsonStringakva);//jsonStringakva="{\"id\":\"akva\",\"tempakv1\":\"20,1\",\"light1\":\"80 %\",\"timakv1\":\"12.31\",\"fan1\":\"OFF\",\"tempakv2\":\"20,2\",\"light2\":\"82 %\",\"timakv2\":\"12.32\",\"fan2\":\"OFF\",\"tempakv3\":\"20,3\",\"light3\":\"83 %\",\"timakv3\":\"12.33\",\"fan3\":\"OFF\"}";
|
||||
// Serial.println(jsonStringakva);
|
||||
readakva(); |
||||
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу
|
||||
} |
||||
if (ftdata==17)//пришел запрос управления akva1.html
|
||||
{ftdata=0; |
||||
JSstringAkva(); |
||||
client->text(jsonStringakva);//jsonStringakva="{\"id\":\"akva\",\"tempakv1\":\"20,1\",\"light1\":\"80 %\",\"timakv1\":\"12.31\",\"fan1\":\"OFF\",\"tempakv2\":\"20,2\",\"light2\":\"82 %\",\"timakv2\":\"12.32\",\"fan2\":\"OFF\",\"tempakv3\":\"20,3\",\"light3\":\"83 %\",\"timakv3\":\"12.33\",\"fan3\":\"OFF\"}";
|
||||
//Serial.println(jsonStringakva);
|
||||
readakva(); |
||||
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу
|
||||
} |
||||
if (ftdata==18)//пришел запрос управления akva1.html
|
||||
{ftdata=0; |
||||
// JSstringAkva();
|
||||
// client->text(jsonStringakva);//jsonStringakva="{\"id\":\"akva\",\"tempakv1\":\"20,1\",\"light1\":\"80 %\",\"timakv1\":\"12.31\",\"fan1\":\"OFF\",\"tempakv2\":\"20,2\",\"light2\":\"82 %\",\"timakv2\":\"12.32\",\"fan2\":\"OFF\",\"tempakv3\":\"20,3\",\"light3\":\"83 %\",\"timakv3\":\"12.33\",\"fan3\":\"OFF\"}";
|
||||
//Serial.println(jsonStringakva);
|
||||
readakva(); |
||||
client->text(strdat.c_str());//отправка суточных данных данных из карты памяти в таблицу
|
||||
} |
||||
|
||||
} |
||||
break; |
||||
|
||||
case WS_EVT_DATA: |
||||
{ |
||||
AwsFrameInfo *info = (AwsFrameInfo*)arg; |
||||
if (info->final && info->index == 0 && info->len == len && info->opcode == WS_TEXT) { |
||||
data[len] = '\0'; |
||||
String payload = String((char*)data); |
||||
|
||||
Serial.printf("[%u] Received: %s\n", client->id(), payload.c_str()); |
||||
|
||||
if (payload == "toggle") {//если пришло toggle
|
||||
|
||||
}else{ //{"id":"week","timer1_week":"0111100","timer2_week":"1000011","timer3_week":"0101010"}
|
||||
String js = payload.substring(1,11);//"id":"week" вырезаем нужные данные {"ido":"4","out":1}
|
||||
// Serial.println(js);
|
||||
if((js[1] = 'i')&&(js[6]=='w')) |
||||
{timerweek=payload; |
||||
tweek=1; |
||||
} |
||||
if((js[1] = 'i')&&(js[6]=='t'))// "id":"tout","t1":"100","t2":"010","t3":"001"
|
||||
{timerout=payload; |
||||
Serial.println(timerout); |
||||
tweek=1; |
||||
} |
||||
if((js[1] = 't')&&(js[6]=='1'))//{"timer1":["08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00"],"timer2":["09:30","10:30","11:30","12:30","13:30","14:30","15:30","16:30","17:30","18:30"],"timer3":["10:15","11:15","12:15","13:15","14:15","15:15","16:15","17:15","18:15","19:15"]}
|
||||
{timerdata=payload; |
||||
//Serial.println(timerdata);
|
||||
tdat=1;//флаг разрешения парсинга строки и ее записи на SD
|
||||
} |
||||
// Serial.println(js);
|
||||
if((js[1] = 'i')&&(js[3]=='o'))//{"ido":"4","out":"1"} переключение выхода
|
||||
{ledout=payload; |
||||
//Serial.println(ledout);
|
||||
outconvert();// получен данные преобразуем в массив gpio[4]={0,0,0,1}
|
||||
JSstringOut();//преобразуем состояние выходов gpio[4]={0,0,0,1} в JSON {"id":"out","out1":"1011"}
|
||||
webSocket.textAll(jsonStringout);// выводим всем клиентам w/s
|
||||
btime();
|
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
} |
||||
} |
||||
break; |
||||
} |
||||
} |
||||
|
||||
|
||||
void setup() { |
||||
pinMode(2, OUTPUT); |
||||
pinMode(4, OUTPUT); |
||||
digitalWrite(4, LOW); |
||||
pinMode(26, OUTPUT); |
||||
digitalWrite(26, LOW); |
||||
pinMode(27, OUTPUT); |
||||
digitalWrite(27, LOW); |
||||
pinMode(5, OUTPUT); |
||||
digitalWrite(5, LOW); |
||||
pinMode(19, OUTPUT); |
||||
digitalWrite(19, HIGH); |
||||
delay(500); |
||||
digitalWrite(19, LOW); |
||||
|
||||
Serial.begin(115200); |
||||
//pinMode(LED_PIN, OUTPUT);
|
||||
rtc.begin();
|
||||
|
||||
// digitalWrite(2, LOW);
|
||||
digitalWrite(2, HIGH); |
||||
Serial.println(WiFi.macAddress()); |
||||
|
||||
sdSPI.begin(SD_SCLK, SD_MISO, SD_MOSI, SD_CS); |
||||
if (!SD.begin(SD_CS, sdSPI)) |
||||
{ |
||||
// if(!SD.begin()){
|
||||
Serial.println("Mounting card mount failed"); |
||||
// return;
|
||||
} |
||||
|
||||
|
||||
|
||||
uint8_t cardType = SD.cardType(); |
||||
if(cardType == CARD_NONE){ |
||||
Serial.println("No SD card attached"); |
||||
//return;
|
||||
} |
||||
uint64_t cardSize = SD.cardSize() / (1024 * 1024); |
||||
Serial.printf("SD Card Size: %lluMB\n", cardSize); |
||||
|
||||
|
||||
if(!SPIFFS.begin()){ |
||||
Serial.println("An Error has occurred while mounting SPIFFS"); |
||||
//return;
|
||||
} |
||||
|
||||
|
||||
Nrfsetup();
|
||||
//settimer();//таймер отсчета времени настр на 5 сек
|
||||
WiFisetup(); |
||||
timeClient.begin(); |
||||
|
||||
timeClient.setTimeOffset(10800);
|
||||
|
||||
|
||||
// ntp();//NTP init
|
||||
/*current_time = hour1 * 60 + min1;
|
||||
for (int i = 0; i <= 1439; i++) { |
||||
if (current_time > 1439) current_time = 0; |
||||
state1 = main_log(BTimer1, state1); |
||||
state2 = main_log(BTimer2, state2); |
||||
state3 = main_log(BTimer3, state3); |
||||
// state4 = main_log(Timer4, state4);
|
||||
current_time++; |
||||
} |
||||
btime(); |
||||
*/ |
||||
timedate(); |
||||
Sdreaddata(); |
||||
Sdread();
|
||||
mySwitch.enableTransmit(22); |
||||
//mySwitch.send("000000000001010100010011");
|
||||
//mySwitch.send("000000000001010100010001");
|
||||
esp_now_register_recv_cb(OnDataRecv); |
||||
|
||||
|
||||
//*******************server******************************************************************
|
||||
// server.on("/", HTTP_GET, handleRoot);
|
||||
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
request->send(SPIFFS, "/index.html"); |
||||
}); |
||||
server.on("/index.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
request->send(SPIFFS, "/index.html"); |
||||
}); |
||||
// Route to load style.css file
|
||||
server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
request->send(SPIFFS, "/style.css", "text/css"); |
||||
}); |
||||
server.on("/fon.jpg", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
request->send(SPIFFS, "/fon.jpg"); |
||||
}); |
||||
//*****************************************************************************************************
|
||||
server.on("/upravlenie.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
fobnov=1; |
||||
ftdata=8; |
||||
request->send(SPIFFS, "/upravlenie.html", String(), false, processor); |
||||
}); |
||||
|
||||
//****************************************************************************************************************
|
||||
server.on("/setting.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=12; |
||||
request->send(SPIFFS, "/setting.html"); |
||||
}); |
||||
server.on("/inform.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=10; |
||||
request->send(SPIFFS, "/inform.html"); |
||||
}); |
||||
server.on("/informtabl.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=10; |
||||
request->send(SPIFFS, "/informtabl.html"); |
||||
}); |
||||
|
||||
server.on("/inform1.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=1; |
||||
request->send(SPIFFS, "/inform1.html"); |
||||
}); |
||||
server.on("/informtabl1.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=1; |
||||
request->send(SPIFFS, "/informtabl1.html"); |
||||
}); |
||||
|
||||
server.on("/inform2.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=2; |
||||
request->send(SPIFFS, "/inform2.html"); |
||||
}); |
||||
server.on("/informtabl2.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=2; |
||||
request->send(SPIFFS, "/informtabl2.html"); |
||||
}); |
||||
server.on("/inform3.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=3; |
||||
request->send(SPIFFS, "/inform3.html"); |
||||
}); |
||||
server.on("/informtabl3.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=3; |
||||
request->send(SPIFFS, "/informtabl3.html"); |
||||
}); |
||||
server.on("/inform4.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=4; |
||||
request->send(SPIFFS, "/inform4.html"); |
||||
}); |
||||
server.on("/informtabl4.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=4; |
||||
request->send(SPIFFS, "/informtabl4.html"); |
||||
}); |
||||
server.on("/inform5.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=5; |
||||
request->send(SPIFFS, "/inform5.html"); |
||||
}); |
||||
server.on("/informtabl5.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=5; |
||||
request->send(SPIFFS, "/informtabl5.html"); |
||||
}); |
||||
server.on("/inform6.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=6; |
||||
request->send(SPIFFS, "/inform6.html"); |
||||
}); |
||||
server.on("/informtabl6.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=6; |
||||
request->send(SPIFFS, "/informtabl6.html"); |
||||
}); |
||||
|
||||
server.on("/akva1.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=15; |
||||
request->send(SPIFFS, "/akva1.html"); |
||||
}); |
||||
|
||||
server.on("/akva2.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=16; |
||||
request->send(SPIFFS, "/akva2.html"); |
||||
}); |
||||
server.on("/akva3.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=17; |
||||
request->send(SPIFFS, "/akva3.html"); |
||||
}); |
||||
server.on("/akvadat.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=18; |
||||
request->send(SPIFFS, "/akvadat.html"); |
||||
}); |
||||
server.on("/akvagraf.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=18; |
||||
request->send(SPIFFS, "/akvagraf.html"); |
||||
}); |
||||
server.on("/timer.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
request->send(SPIFFS, "/timer.html", String(), false, processor); |
||||
}); |
||||
server.on("/akva.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=7; |
||||
request->send(SPIFFS, "/akva.html"); |
||||
}); |
||||
|
||||
server.on("/favicon.ico", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
request->send(SPIFFS, "/favicon.ico"); |
||||
}); |
||||
server.on("/favicon-32x32.png", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
request->send(SPIFFS, "/favicon-32x32.png"); |
||||
}); |
||||
server.on("/favicon-16x16.png", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
request->send(SPIFFS, "/favicon-16x16.png"); |
||||
}); |
||||
//********************************************************************************************************
|
||||
JSstringU(); |
||||
JSstringK(); |
||||
server.addHandler(&webSocket); |
||||
webSocket.onEvent(handleWebSocketEvent); |
||||
|
||||
server.begin(); |
||||
esp_task_wdt_init(WDT_TIMEOUT, true); //включить панику, чтобы ESP32 перезапустился
|
||||
esp_task_wdt_add(NULL); //добавить текущий поток в WDT watch
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void loop() { |
||||
|
||||
// Send data to browser, increasing number every second.
|
||||
if (millis() - countTimeWas >= 1000) { |
||||
countTimeWas = millis(); |
||||
countVal++;//cчетчик до перезапуска сервера
|
||||
countVal1++; |
||||
v++; |
||||
v1++; |
||||
if (idcon>0)// если есть подключения
|
||||
{ String countUpdate1 = "{\"label3\":\"count1\",\"value\":" + String(countVal1) + "}";//отправка числовой переменной
|
||||
webSocket.textAll(countUpdate1);//обновление ws
|
||||
if((tdat==1)||(tweek==1))//есть новые данные для установок таймера
|
||||
{timerconvert(); |
||||
gpio[3]=1;//управление выходами передаем таймеру
|
||||
writeFile(SD, "/timerd.txt", timerdata.c_str());//записываем в этот файл значения для таймера
|
||||
writeFile(SD, "/week.txt", timerweek.c_str());//записываем в этот файл значения недельного таймера
|
||||
writeFile(SD, "/tdout.txt", timerout.c_str());//записываем в этот файл значения выходов к кот подкл таймер
|
||||
//timerout= {"id":"tout","t1":"100","t2":"010","t3":"001"}
|
||||
} |
||||
} |
||||
|
||||
|
||||
// Serial.println(countUpdate1);
|
||||
|
||||
|
||||
|
||||
if (v1>3600) {//60min-
|
||||
delay(0); |
||||
sdsave();// записываем на СД необходимые данные
|
||||
delay(0); |
||||
ntp();//считываем время
|
||||
v1=0;//обнуляем счетчик =3600с
|
||||
delay(0); |
||||
} |
||||
//**************20sek*******************************
|
||||
if (v>19){//20sek
|
||||
JSstringU(); |
||||
JSstringK(); |
||||
JSstringOut(); |
||||
|
||||
|
||||
if((ntp_on==0)&&(idcon==0)) |
||||
{if((hour1==8)&&(min1==15))ntp();//синхронизация времени с NTP
|
||||
|
||||
if((hour1==8)&&(min1>18)) ntp_on==1; //если NTP не отвечает прекращаем до следующего дня
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
if((res==1)&&(idcon==0))//idcon=0 клиентов нет
|
||||
{ |
||||
sdsave();// записываем на СД необходимые данные
|
||||
ESP.restart(); //перезагрузка сервака
|
||||
} |
||||
|
||||
res=0;
|
||||
ntphome();//считываем время с esp32
|
||||
nrf(); //проверяем не приш ли данные на NRF
|
||||
Serial.print ("idcon="); |
||||
Serial.println (idcon); |
||||
v=0;//обнуляем счетчик 4*5=20с
|
||||
delay(0); |
||||
vrem();//время работы сайта
|
||||
btime();//проверка сработки таймеров
|
||||
|
||||
|
||||
if (idcon>0)// если есть подключения
|
||||
{ webSocket.textAll(jsonString);//{"id":"0","temperature":12.456787109375,"humidity":77.456787109375,"tim2":"18:15","ti
|
||||
Serial.println(jsonString); |
||||
webSocket.textAll(jsonString2);//{"id":"2","tkom1":"20.0","hkom1":"30.0","batkom1":"4.10","timekom1"
|
||||
Serial.println(jsonString2); |
||||
|
||||
String countUpdate = "{\"label3\":\"count\",\"value\":\"" + String(t10) + "\"}";//отправка строковой переменной время раб сервера
|
||||
webSocket.textAll(countUpdate); |
||||
Serial.println(countUpdate); |
||||
delay(0); |
||||
String countUpdate2 = "{\"label3\":\"count2\",\"value\":\"" + String(timeserv) + "\"}";//отправка строковой переменной врем NTP
|
||||
webSocket.textAll(countUpdate2); |
||||
Serial.println(countUpdate2); |
||||
} |
||||
} |
||||
//**************20sek end*******************************
|
||||
|
||||
if((countVal>3600*2)&&(idcon==0))//прошло более 2 часов и нет подкл клиентов
|
||||
{ if(hour1!=3)res=1;//разрешение на перезагрузку сервака
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
||||
esp_task_wdt_reset();//reset WDT сброс вотчдога
|
||||
} |
||||
@ -0,0 +1,30 @@ |
||||
void WiFisetup() |
||||
{ |
||||
// Set the device as a Station and Soft Access Point simultaneously
|
||||
|
||||
if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) { |
||||
Serial.println("STA Failed to configure"); |
||||
}
|
||||
WiFi.mode(WIFI_AP_STA); |
||||
// Set device as a Wi-Fi Station
|
||||
WiFi.begin(ssid, password); |
||||
digitalWrite(2, LOW); // светодиод погашен
|
||||
|
||||
while (WiFi.status() != WL_CONNECTED) { |
||||
delay(1000); |
||||
Serial.println("Setting as a Wi-Fi Station.."); |
||||
} |
||||
digitalWrite(2, HIGH); // светодиод горит
|
||||
|
||||
Serial.print("Station IP Address: "); |
||||
Serial.println(WiFi.localIP()); |
||||
Serial.print("Wi-Fi Channel: "); |
||||
Serial.println(WiFi.channel()); |
||||
|
||||
// Init ESP-NOW
|
||||
if (esp_now_init() != ESP_OK) { |
||||
Serial.println("Error initializing ESP-NOW"); |
||||
return; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,140 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3></p> |
||||
</div> |
||||
<div class="top2"> |
||||
|
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="akva1.html" title="информация">Аквариум-1</a></nav1> |
||||
<nav1><a href="akva2.html" title="информация">Аквариум-2</a></nav1> |
||||
<nav1><a href="akva3.html" title="информация">Аквариум-3</a></nav1> |
||||
<nav1><a href="akvadat.html" title="информация">Данные</a></nav1> |
||||
<nav1><a href="akvagraf.html" title="информация">График температур</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Аквариум 1</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="takv1"></span> °C</span></p><p class="packet">light <span id="light1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i>FAN</h4><p><span class="reading"><span id="fan1"></span> </span></p><p class="packet">Time <span id="time1"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<h1>Аквариум 2</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="takv2"></span> °C</span></p><p class="packet">light <span id="light2"> </span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i>FAN</h4><p><span class="reading"><span id="fan2"></span> </span></p><p class="packet">Time <span id="time2"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<h1>Аквариум 3</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="takv3"></span> °C</span></p><p class="packet">light <span id="light3"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i>FAN</h4><p><span class="reading"><span id="fan3"></span> </span></p><p class="packet">Time <span id="time3"></span></p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<h1></h1> |
||||
|
||||
<div class="top"> |
||||
<font size="4" >Время работы сервера: </font> |
||||
<font color="#CF7071" size="5"><span id="t10">0:00</span></font> |
||||
<p>Count:<span id="countData1">0:00</span></p> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var data = JSON.parse(event.data);// |
||||
if (data.label3 === 'count1') { |
||||
document.getElementById("countData1").innerHTML = data.value; |
||||
}; |
||||
if (data.label3 === 'count') { |
||||
document.getElementById("t10").innerHTML = data.value; |
||||
}; |
||||
|
||||
|
||||
if (data.id === 'akva') { |
||||
console.log("readings", event.data); |
||||
document.getElementById("takv1").innerHTML = data.tempakv1; |
||||
document.getElementById("light1").innerHTML = data.light1; |
||||
document.getElementById("time1").innerHTML = data.timakv1; |
||||
document.getElementById("fan1").innerHTML = data.fan1; |
||||
document.getElementById("takv2").innerHTML = data.tempakv2; |
||||
document.getElementById("light2").innerHTML = data.light2; |
||||
document.getElementById("time2").innerHTML = data.timakv2; |
||||
document.getElementById("fan2").innerHTML = data.fan2; |
||||
document.getElementById("takv3").innerHTML = data.tempakv3; |
||||
document.getElementById("light3").innerHTML = data.light3; |
||||
document.getElementById("time3").innerHTML = data.timakv3; |
||||
document.getElementById("fan3").innerHTML = data.fan3; |
||||
}; |
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
|
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
}; |
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,159 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
|
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="akva.html" title="информация">Аквариумы</a></nav1> |
||||
<nav1><a href="akva1.html" title="информация">Аквариум-1</a></nav1> |
||||
<nav1><a href="akva2.html" title="информация">Аквариум-2</a></nav1> |
||||
<nav1><a href="akva3.html" title="информация">Аквариум-3</a></nav1> |
||||
<nav1><a href="akvadat.html" title="информация">Данные</a></nav1> |
||||
<nav1><a href="akvagraf.html" title="информация">График температур</a></nav1> |
||||
</div> |
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Аквариум 1</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="takv1"></span> °C</span></p><p class="packet">light <span id="light1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i>FAN</h4><p><span class="reading"><span id="fan1"></span> </span></p><p class="packet">Time <span id="time1"></span></p> |
||||
</div> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица данных за сутки</font> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  light</th> |
||||
<th onclick="sortTable(3)"><span class="glyphicon glyphicon-sort"></span>  fan</th> |
||||
</tr> |
||||
</table> |
||||
|
||||
|
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
<script type="text/javascript"> |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === 'akva') { |
||||
document.getElementById("takv1").innerHTML = data.tempakv1; |
||||
document.getElementById("light1").innerHTML = data.light1; |
||||
document.getElementById("time1").innerHTML = data.timakv1; |
||||
document.getElementById("fan1").innerHTML = data.fan1; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
append_json(data); |
||||
} |
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
tr.innerHTML = '<td>' + object.timakv1 + '</td>' + |
||||
'<td>' + object.tempakv1 + '</td>' + |
||||
'<td>' + object.light1 + '</td>'+ |
||||
'<td>' + object.fan1 + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
|
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,160 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
|
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="akva.html" title="информация">Аквариумы</a></nav1> |
||||
<nav1><a href="akva1.html" title="информация">Аквариум-1</a></nav1> |
||||
<nav1><a href="akva2.html" title="информация">Аквариум-2</a></nav1> |
||||
<nav1><a href="akva3.html" title="информация">Аквариум-3</a></nav1> |
||||
<nav1><a href="akvadat.html" title="информация">Данные</a></nav1> |
||||
<nav1><a href="akvagraf.html" title="информация">График температур</a></nav1> |
||||
</div> |
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Аквариум 2</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="takv2"></span> °C</span></p><p class="packet">light <span id="light2"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i>FAN</h4><p><span class="reading"><span id="fan2"></span> </span></p><p class="packet">Time <span id="time2"></span></p> |
||||
</div> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица данных за сутки</font> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  light</th> |
||||
<th onclick="sortTable(3)"><span class="glyphicon glyphicon-sort"></span>  fan</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
|
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === 'akva') { |
||||
document.getElementById("takv2").innerHTML = data.tempakv2; |
||||
document.getElementById("light2").innerHTML = data.light2; |
||||
document.getElementById("time2").innerHTML = data.timakv2; |
||||
document.getElementById("fan2").innerHTML = data.fan2; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
append_json(data); |
||||
} |
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
tr.innerHTML = '<td>' + object.timakv2 + '</td>' + |
||||
'<td>' + object.tempakv2 + '</td>' + |
||||
'<td>' + object.light2 + '</td>'+ |
||||
'<td>' + object.fan2 + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
|
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,160 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
|
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="akva.html" title="информация">Аквариумы</a></nav1> |
||||
<nav1><a href="akva1.html" title="информация">Аквариум-1</a></nav1> |
||||
<nav1><a href="akva2.html" title="информация">Аквариум-2</a></nav1> |
||||
<nav1><a href="akva3.html" title="информация">Аквариум-3</a></nav1> |
||||
<nav1><a href="akvadat.html" title="информация">Данные</a></nav1> |
||||
<nav1><a href="akvagraf.html" title="информация">График температур</a></nav1> |
||||
</div> |
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Аквариум 3</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="takv3"></span> °C</span></p><p class="packet">light <span id="light3"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i>FAN</h4><p><span class="reading"><span id="fan3"></span> </span></p><p class="packet">Time <span id="time3"></span></p> |
||||
</div> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица данных за сутки</font> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
<col class="twenty" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  light</th> |
||||
<th onclick="sortTable(3)"><span class="glyphicon glyphicon-sort"></span>  fan</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
|
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === 'akva') { |
||||
document.getElementById("takv3").innerHTML = data.tempakv3; |
||||
document.getElementById("light3").innerHTML = data.light3; |
||||
document.getElementById("time3").innerHTML = data.timakv3; |
||||
document.getElementById("fan3").innerHTML = data.fan3; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
append_json(data); |
||||
} |
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
tr.innerHTML = '<td>' + object.timakv3 + '</td>' + |
||||
'<td>' + object.tempakv3 + '</td>' + |
||||
'<td>' + object.light3 + '</td>'+ |
||||
'<td>' + object.fan3 + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
|
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,170 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
|
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="akva.html" title="информация">Аквариумы</a></nav1> |
||||
<nav1><a href="akva1.html" title="информация">Аквариум-1</a></nav1> |
||||
<nav1><a href="akva2.html" title="информация">Аквариум-2</a></nav1> |
||||
<nav1><a href="akva3.html" title="информация">Аквариум-3</a></nav1> |
||||
<nav1><a href="akvadat.html" title="информация">Данные</a></nav1> |
||||
<nav1><a href="akvagraf.html" title="информация">График температур</a></nav1> |
||||
</div> |
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Аквариум </h1> |
||||
|
||||
|
||||
|
||||
<div> |
||||
<font size="3" color="#1E4486">таблица данных за сутки </font> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
<col class="twenty" /> |
||||
<col class="twenty" /> |
||||
<col class="twenty" /> |
||||
<col class="twenty" /> |
||||
<col class="twenty" /> |
||||
<col class="twenty" /> |
||||
<col class="twenty" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura1</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  temperatura2</th> |
||||
<th onclick="sortTable(3)"><span class="glyphicon glyphicon-sort"></span>  temperatura3</th> |
||||
<th onclick="sortTable(4)"><span class="glyphicon glyphicon-sort"></span>  light1</th> |
||||
<th onclick="sortTable(5)"><span class="glyphicon glyphicon-sort"></span>  light2</th> |
||||
<th onclick="sortTable(6)"><span class="glyphicon glyphicon-sort"></span>  light3</th> |
||||
<th onclick="sortTable(7)"><span class="glyphicon glyphicon-sort"></span>  fan1</th> |
||||
<th onclick="sortTable(8)"><span class="glyphicon glyphicon-sort"></span>  fan2</th> |
||||
<th onclick="sortTable(9)"><span class="glyphicon glyphicon-sort"></span>  fan3</th> |
||||
</tr> |
||||
</table> |
||||
|
||||
|
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === 'akva') { |
||||
|
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
append_json(data); |
||||
} |
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
tr.innerHTML = '<td>' + object.timakv1 + '</td>' + |
||||
'<td>' + object.tempakv1 + '</td>' + |
||||
'<td>' + object.tempakv2 + '</td>' + |
||||
'<td>' + object.tempakv3 + '</td>' + |
||||
'<td>' + object.light1 + '</td>'+ |
||||
'<td>' + object.light2 + '</td>'+ |
||||
'<td>' + object.light3 + '</td>'+ |
||||
'<td>' + object.fan1 + '</td>'+ |
||||
'<td>' + object.fan2 + '</td>'+ |
||||
'<td>' + object.fan3 + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
|
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,236 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="akva.html" title="информация">Аквариумы</a></nav1> |
||||
<nav1><a href="akva1.html" title="информация">Аквариум-1</a></nav1> |
||||
<nav1><a href="akva2.html" title="информация">Аквариум-2</a></nav1> |
||||
<nav1><a href="akva3.html" title="информация">Аквариум-3</a></nav1> |
||||
<nav1><a href="akvadat.html" title="информация">Данные</a></nav1> |
||||
<nav1><a href="akvagraf.html" title="информация">График температур</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Аквариум</h1> |
||||
|
||||
|
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
<div class="top2"> |
||||
<nav id="navigation3"><a href="akvadat.html" title="главное меню">таблица данных за сутки</a></nav> |
||||
</div> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
<div class="contentgraf"> |
||||
<canvas id="line-chart" width="800" height="350"></canvas> |
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> |
||||
<script type="text/javascript"> |
||||
let ind; |
||||
let w=[]; |
||||
let w1=[]; |
||||
let w2=[]; |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '2') { |
||||
|
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
// console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
|
||||
|
||||
data.forEach(function(object) { |
||||
console.log(object.Time); |
||||
console.log(object.temperatura); |
||||
console.log(object.humidity); |
||||
var indtemp;// инд для опред кол ва цифр в температуре |
||||
var indtemp1;// инд для опред кол ва цифр в температуре |
||||
var indtemp2;// инд для опред кол ва цифр в температуре |
||||
var indold= ind;//запоминаем предыдущий индекс чтоб не повторять данные |
||||
console.log(object.timakv1.indexOf(":")); |
||||
if(object.timakv1.indexOf(":")==1)//считаем кол-во цифр до : (одна или две ) 1:20 и 19:20 часы это индекс массива данных |
||||
{ind = Number(object.timakv1.substr(0, 1));//если одна то 1 |
||||
} |
||||
else |
||||
{console.log(object.timakv1.substr(0, 2)); // если две то 19 |
||||
ind= Number(object.timakv1.substr(0, 2)); |
||||
} |
||||
//console.log(ind); |
||||
if(ind!=indold) |
||||
{ |
||||
if(ind>indold+1) |
||||
{ var del=ind-indold; |
||||
for (var i = indold; i < ind; i++) { |
||||
console.log(i); |
||||
w[i]=w[indold]; |
||||
w1[i]=w1[indold]; |
||||
w2[i]=w2[indold]; |
||||
// console.log("Notw[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
} |
||||
//console.log(object.temperatura.indexOf(".")); |
||||
indtemp=Number(object.tempakv1.indexOf("."));//кол-во цифр до запятой |
||||
indtemp1=Number(object.tempakv2.indexOf("."));//кол-во цифр до запятой |
||||
indtemp2=Number(object.tempakv3.indexOf("."));//кол-во цифр до запятой |
||||
|
||||
|
||||
if(indtemp==2)//если до запятой 2 знака |
||||
{w[ind]=Number(object.tempakv1.substr(0, 2))*10+Number(object.tempakv1.substr(3, 1)); |
||||
w[ind]=w[ind]/10; |
||||
} |
||||
// console.log("w[ind]="); |
||||
// console.log(w[ind]); |
||||
if(indtemp1==2)//если до запятой 2 знака |
||||
{ w1[ind]=Number(object.tempakv2.substr(0, 2))*10+Number(object.tempakv2.substr(3, 1)); |
||||
w1[ind]=w1[ind]/10; |
||||
} |
||||
if(indtemp2==2)//если до запятой 2 знака |
||||
{ w2[ind]=Number(object.tempakv3.substr(0, 2))*10+Number(object.tempakv3.substr(3, 1)); |
||||
w2[ind]=w2[ind]/10; |
||||
} |
||||
|
||||
if(indtemp==1)//если до запятой 1 знак |
||||
{w[ind]=Number(object.tempakv1.substr(0, 1))*10+Number(object.tempakv1.substr(2, 1)); |
||||
w[ind]=w[ind]/10; |
||||
// console.log("w[ind]="); |
||||
//console.log(w[ind]); |
||||
if(indtemp1==1)//если до запятой 1 знак |
||||
{ w1[ind]=Number(object.tempakv2.substr(0, 1))*10+Number(object.tempakv2.substr(2, 1)); |
||||
w1[ind]=w[ind]/10; |
||||
} |
||||
if(indtemp2==1)//если до запятой 1 знак |
||||
{w2[ind]=Number(object.tempakv3.substr(0, 1))*10+Number(object.tempakv3.substr(2, 1)); |
||||
w2[ind]=w[ind]/10; |
||||
} |
||||
} |
||||
|
||||
} |
||||
}); |
||||
|
||||
new Chart(document.getElementById("line-chart"), { |
||||
type: 'line', |
||||
data: { |
||||
labels: ["00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"], |
||||
datasets: [{ |
||||
data: [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15],w[16],w[17],w[18],w[19],w[20],w[21],w[22],w[23],], |
||||
label: "Аквариум1 ", |
||||
|
||||
borderColor: "rgba(62,205,149,1.00)", |
||||
backgroundColor: "rgba(62,205,149,0.48)", |
||||
fill: true |
||||
},{ |
||||
data: [w1[0],w1[1],w1[2],w1[3],w1[4],w1[5],w1[6],w1[7],w1[8],w1[9],w1[10],w1[11],w1[12],w1[13],w1[14],w1[15],w1[16],w1[17],w1[18],w1[19],w1[20],w1[21],w1[22],w1[23],], |
||||
label: "Аквариум2 ", |
||||
borderColor: "rgba(229,143,66,1.00)", |
||||
backgroundColor: "rgba(229,143,66,0.48)", |
||||
fill: true |
||||
},{ |
||||
data: [w2[0],w2[1],w2[2],w2[3],w2[4],w2[5],w2[6],w2[7],w2[8],w2[9],w2[10],w2[11],w2[12],w2[13],w2[14],w2[15],w2[16],w2[17],w2[18],w2[19],w2[20],w2[21],w2[22],w2[23],], |
||||
label: "Аквариум3 ", |
||||
borderColor: "rgb(62,149,205)", |
||||
backgroundColor: "rgba(65,138,191,0.68)", |
||||
fill: true |
||||
//fill: false |
||||
}]}, |
||||
options: { |
||||
title: { |
||||
display: true, |
||||
text: 'График суточной температуры' |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
return false; |
||||
console.log("isJsonString", false); |
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 775 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 50 KiB |
@ -0,0 +1,228 @@ |
||||
<!DOCTYPE html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="icon" href="favicon.ico"> |
||||
|
||||
<link rel="icon" type="png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="png" sizes="16x16" href="favicon-16x16.png"> |
||||
</head> |
||||
<body> |
||||
<div id="container"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3></p> |
||||
</div> |
||||
<div class="top2"> |
||||
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||
</div> |
||||
<div id="sidebar"> |
||||
|
||||
<div class="manth"> |
||||
<p><span id="munthserv">месяц</span></p> |
||||
</div> |
||||
<div class="data"> |
||||
<p><span id="dataserv">01</span></p> |
||||
<div class="week"> |
||||
<p><span id="weekserv">день</span></p> |
||||
</div> |
||||
</div> |
||||
<div class="times"> |
||||
<p><span id="timeserv1">:</span></p> |
||||
</div> |
||||
<div class="levnav"> |
||||
|
||||
|
||||
|
||||
|
||||
<p> <a href="index.html" title="Главная"> Главная</a></p> |
||||
<p><a href="setting.html" title="настройки">настройки</a></p> |
||||
<p><a href="upravlenie.html" title="управление">управление</a></p> |
||||
<p><a href="inform.html" title="информация">информация</a></p> |
||||
<p><a href="timer.html" title="таймер">таймер</a></p> |
||||
<p><a href="akva.html" title="аквариум">аквариум</a></p> |
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div> |
||||
|
||||
<div id="content"> |
||||
<h1>Улица(восток)</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||
</div> |
||||
</div> |
||||
<h1>Улица(запад)</h1> |
||||
|
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Battery <span id="batz"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||
</div> |
||||
</div> |
||||
<h1>Комната1</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom1"></span> °C</span></p><p class="packet">Battery <span id="batkom1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom1"></span> %</span></p><p class="packet">Time <span id="timekom1"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
<h1>Комната2</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom2"></span> °C</span></p><p class="packet">Battery <span id="batkom2"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom2"></span> %</span></p><p class="packet">Time <span id="timekom2"></span></p> |
||||
</div> |
||||
</div> |
||||
<h1>Коридор</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkor"></span> °C</span></p><p class="packet">Battery <span id="batkor"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkor"></span> %</span></p><p class="packet">Time <span id="timekor"></span></p> |
||||
</div> |
||||
</div> |
||||
<h1>Балкон</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tbal"></span> °C</span></p><p class="packet">Battery <span id="batbal"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hbal"></span> %</span></p><p class="packet">Time <span id="timebal"></span></p> |
||||
</div> |
||||
</div> |
||||
<h1>Кухня</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
<h1></h1> |
||||
|
||||
|
||||
<div class="top"> |
||||
<font size="4" >Время работы сервера: </font> |
||||
<font color="#CF7071" size="5"><span id="t10">0:00</span></font> |
||||
<p>Count:<span id="countData1">0:00</span></p> |
||||
</div> |
||||
|
||||
<div id="clear"> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
|
||||
|
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var data = JSON.parse(event.data);// |
||||
|
||||
if (data.label3 === 'count1') { |
||||
document.getElementById("countData1").innerHTML = data.value; |
||||
}; |
||||
if (data.label3 === 'count') { |
||||
document.getElementById("t10").innerHTML = data.value; |
||||
}; |
||||
if (data.label3 === 'count2') { |
||||
document.getElementById("timeserv1").innerHTML = data.value; |
||||
}; |
||||
|
||||
if (data.id === '0') { |
||||
document.getElementById("t1").innerHTML = data.temperature; |
||||
document.getElementById("h1").innerHTML = data.humidity; |
||||
document.getElementById("batz").innerHTML = data.batz; |
||||
document.getElementById("tim3").innerHTML = data.tim3; |
||||
document.getElementById("dataserv").innerHTML = data.dataserv; |
||||
document.getElementById("munthserv").innerHTML = data.munthserv; |
||||
document.getElementById("weekserv").innerHTML = data.weekserv; |
||||
}; |
||||
if (data.id === '2') { |
||||
document.getElementById("tkom1").innerHTML = data.tkom1; |
||||
document.getElementById("hkom1").innerHTML = data.hkom1; |
||||
document.getElementById("batkom1").innerHTML = data.batkom1; |
||||
document.getElementById("timekom1").innerHTML = data.timekom1; |
||||
document.getElementById("tkom2").innerHTML = data.tkom2; |
||||
document.getElementById("hkom2").innerHTML = data.hkom2; |
||||
document.getElementById("batkom2").innerHTML = data.batkom2; |
||||
document.getElementById("timekom2").innerHTML = data.timekom2; |
||||
document.getElementById("tkor").innerHTML = data.tkor; |
||||
document.getElementById("hkor").innerHTML = data.hkor; |
||||
document.getElementById("batkor").innerHTML = data.batkor; |
||||
document.getElementById("timekor").innerHTML = data.timekor; |
||||
document.getElementById("tbal").innerHTML = data.tbal; |
||||
document.getElementById("hbal").innerHTML = data.hbal; |
||||
document.getElementById("batbal").innerHTML = data.batbal; |
||||
document.getElementById("timebal").innerHTML = data.timebal; |
||||
document.getElementById("tul1").innerHTML = data.tul1; |
||||
document.getElementById("hul1").innerHTML = data.hul1; |
||||
document.getElementById("osv1").innerHTML = data.osv1; |
||||
document.getElementById("timeul1").innerHTML = data.timeul1; |
||||
}; |
||||
|
||||
} |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,230 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Улица(запад)</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Battery <span id="batz"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||
</div> |
||||
</div> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
<div class="top2"> |
||||
<nav id="navigation3"><a href="informtabl.html" title="главное меню">таблица данных за сутки</a></nav> |
||||
</div> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
<div class="contentgraf"> |
||||
<canvas id="line-chart" width="800" height="350"></canvas> |
||||
</div> |
||||
|
||||
|
||||
|
||||
</div> |
||||
|
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> |
||||
<script type="text/javascript"> |
||||
let ind; |
||||
let w=[]; |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '0') { |
||||
console.log("readings", event.data); |
||||
document.getElementById("t1").innerHTML = data.temperature; |
||||
document.getElementById("h1").innerHTML = data.humidity; |
||||
|
||||
document.getElementById("batz").innerHTML = data.batz; |
||||
document.getElementById("tim3").innerHTML = data.tim3; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
// console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
|
||||
|
||||
data.forEach(function(object) { |
||||
console.log(object.Time); |
||||
console.log(object.temperatura); |
||||
console.log(object.humidity); |
||||
var indtemp;// инд для опред кол ва цифр в температуре |
||||
var zn; //знак темп - или его нет те + |
||||
var indold= ind;//запоминаем предыдущий индекс чтоб не повторять данные |
||||
console.log(object.Time.indexOf(":")); |
||||
if(object.Time.indexOf(":")==1)//считаем кол-во цифр до : (одна или две ) 1:20 и 19:20 часы это индекс массива данных |
||||
{ind = Number(object.Time.substr(0, 1));//если одна то 1 |
||||
} |
||||
else |
||||
{console.log(object.Time.substr(0, 2)); // если две то 19 |
||||
ind= Number(object.Time.substr(0, 2)); |
||||
} |
||||
//console.log(ind); |
||||
if(ind!=indold) |
||||
{ |
||||
if(ind>indold+1) |
||||
{ var del=ind-indold; |
||||
for (var i = indold; i < ind; i++) { |
||||
console.log(i); |
||||
w[i]=w[indold]; |
||||
// console.log("Notw[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
} |
||||
//console.log(object.temperatura.indexOf(".")); |
||||
indtemp=Number(object.temperatura.indexOf("."));//кол-во цифр до запятой |
||||
|
||||
if(object.temperatura.substr(0, 1)!="-") |
||||
{ |
||||
if(indtemp==2)//если до запятой 2 знака |
||||
{w[ind]=Number(object.temperatura.substr(0, 2))*10+Number(object.temperatura.substr(3, 1)); |
||||
w[ind]=w[ind]/10; |
||||
console.log("w[ind]="); |
||||
console.log(w[ind]); |
||||
} |
||||
if(indtemp==1)//если до запятой 1 знак |
||||
{w[ind]=Number(object.temperatura.substr(0, 1))*10+Number(object.temperatura.substr(2, 1)); |
||||
w[ind]=w[ind]/10; |
||||
// console.log("w[ind]="); |
||||
//console.log(w[ind]); |
||||
|
||||
} |
||||
} |
||||
else//если температура отр |
||||
{if(indtemp==3)//если до запятой 3 знака -10.3 |
||||
{w[ind]=Number(object.temperatura.substr(1, 2))*10+Number(object.temperatura.substr(4, 1)); |
||||
w[ind]=(-1*w[ind])/10; |
||||
// console.log("w[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
if(indtemp==2)//если до запятой 1 знак -2.3 |
||||
{w[ind]=Number(object.temperatura.substr(1, 1))*10+Number(object.temperatura.substr(3, 1)); |
||||
w[ind]=(-1*w[ind])/10; |
||||
// console.log("w[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
|
||||
} |
||||
} |
||||
|
||||
}); |
||||
|
||||
new Chart(document.getElementById("line-chart"), { |
||||
type: 'line', |
||||
data: { |
||||
labels: ["00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"], |
||||
datasets: [{ |
||||
data: [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15],w[16],w[17],w[18],w[19],w[20],w[21],w[22],w[23],], |
||||
label: "Ул Запад ", |
||||
borderColor: "rgb(62,149,205)", |
||||
backgroundColor: "rgba(65,138,191,0.48)", |
||||
fill: true |
||||
//fill: false |
||||
}]}, |
||||
options: { |
||||
title: { |
||||
display: true, |
||||
text: 'График суточной температуры' |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
console.log("isJsonString", false); |
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,227 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Улица(восток)</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||
</div> |
||||
</div> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
<div class="top2"> |
||||
<nav id="navigation3"><a href="informtabl1.html" title="главное меню">таблица данных за сутки</a></nav> |
||||
</div> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
<div class="contentgraf"> |
||||
<canvas id="line-chart" width="800" height="350"></canvas> |
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> |
||||
<script type="text/javascript"> |
||||
let ind; |
||||
let w=[]; |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '2') { |
||||
console.log("readings", event.data); |
||||
document.getElementById("tul1").innerHTML = data.tul1; |
||||
document.getElementById("hul1").innerHTML = data.hul1; |
||||
document.getElementById("osv1").innerHTML = data.osv1; |
||||
document.getElementById("timeul1").innerHTML = data.timeul1; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
// console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
|
||||
|
||||
data.forEach(function(object) { |
||||
console.log(object.Time); |
||||
console.log(object.temperatura); |
||||
console.log(object.humidity); |
||||
var indtemp;// инд для опред кол ва цифр в температуре |
||||
var zn; //знак темп - или его нет те + |
||||
var indold= ind;//запоминаем предыдущий индекс чтоб не повторять данные |
||||
console.log(object.Time.indexOf(":")); |
||||
if(object.Time.indexOf(":")==1)//считаем кол-во цифр до : (одна или две ) 1:20 и 19:20 часы это индекс массива данных |
||||
{ind = Number(object.Time.substr(0, 1));//если одна то 1 |
||||
} |
||||
else |
||||
{console.log(object.Time.substr(0, 2)); // если две то 19 |
||||
ind= Number(object.Time.substr(0, 2)); |
||||
} |
||||
//console.log(ind); |
||||
if(ind!=indold) |
||||
{ |
||||
if(ind>indold+1) |
||||
{ var del=ind-indold; |
||||
for (var i = indold; i < ind; i++) { |
||||
console.log(i); |
||||
w[i]=w[indold]; |
||||
// console.log("Notw[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
} |
||||
//console.log(object.temperatura.indexOf(".")); |
||||
indtemp=Number(object.temperatura.indexOf("."));//кол-во цифр до запятой |
||||
|
||||
if(object.temperatura.substr(0, 1)!="-") |
||||
{ |
||||
if(indtemp==2)//если до запятой 2 знака |
||||
{w[ind]=Number(object.temperatura.substr(0, 2))*10+Number(object.temperatura.substr(3, 1)); |
||||
w[ind]=w[ind]/10; |
||||
console.log("w[ind]="); |
||||
console.log(w[ind]); |
||||
} |
||||
if(indtemp==1)//если до запятой 1 знак |
||||
{w[ind]=Number(object.temperatura.substr(0, 1))*10+Number(object.temperatura.substr(2, 1)); |
||||
w[ind]=w[ind]/10; |
||||
// console.log("w[ind]="); |
||||
//console.log(w[ind]); |
||||
|
||||
} |
||||
} |
||||
else//если температура отр |
||||
{if(indtemp==3)//если до запятой 3 знака -10.3 |
||||
{w[ind]=Number(object.temperatura.substr(1, 2))*10+Number(object.temperatura.substr(4, 1)); |
||||
w[ind]=(-1*w[ind])/10; |
||||
// console.log("w[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
if(indtemp==2)//если до запятой 1 знак -2.3 |
||||
{w[ind]=Number(object.temperatura.substr(1, 1))*10+Number(object.temperatura.substr(3, 1)); |
||||
w[ind]=(-1*w[ind])/10; |
||||
// console.log("w[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
|
||||
} |
||||
} |
||||
}); |
||||
|
||||
new Chart(document.getElementById("line-chart"), { |
||||
type: 'line', |
||||
data: { |
||||
labels: ["00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"], |
||||
datasets: [{ |
||||
data: [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15],w[16],w[17],w[18],w[19],w[20],w[21],w[22],w[23],], |
||||
label: "Ул Восток ", |
||||
borderColor: "rgb(62,149,205)", |
||||
backgroundColor: "rgba(65,138,191,0.48)", |
||||
fill: true |
||||
//fill: false |
||||
}]}, |
||||
options: { |
||||
title: { |
||||
display: true, |
||||
text: 'График суточной температуры' |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
return false; |
||||
console.log("isJsonString", false); |
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,229 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
|
||||
<div class="top2"> |
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Комната1</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom1"></span> °C</span></p><p class="packet">Battery <span id="batkom1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom1"></span> %</span></p><p class="packet">Time <span id="timekom1"></span></p> |
||||
</div> |
||||
</div> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
<div class="top2"> |
||||
<nav id="navigation3"><a href="informtabl2.html" title="главное меню">таблица данных за сутки</a></nav> |
||||
</div> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
<div class="contentgraf"> |
||||
<canvas id="line-chart" width="800" height="350"></canvas> |
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> |
||||
<script type="text/javascript"> |
||||
let ind; |
||||
let w=[]; |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '2') { |
||||
console.log("readings", event.data); |
||||
document.getElementById("tkom1").innerHTML = data.tkom1; |
||||
document.getElementById("hkom1").innerHTML = data.hkom1; |
||||
document.getElementById("batkom1").innerHTML = data.batkom1; |
||||
document.getElementById("timekom1").innerHTML = data.timekom1; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
// console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
|
||||
|
||||
data.forEach(function(object) { |
||||
console.log(object.Time); |
||||
console.log(object.temperatura); |
||||
console.log(object.humidity); |
||||
var indtemp;// инд для опред кол ва цифр в температуре |
||||
var zn; //знак темп - или его нет те + |
||||
var indold= ind;//запоминаем предыдущий индекс чтоб не повторять данные |
||||
console.log(object.Time.indexOf(":")); |
||||
if(object.Time.indexOf(":")==1)//считаем кол-во цифр до : (одна или две ) 1:20 и 19:20 часы это индекс массива данных |
||||
{ind = Number(object.Time.substr(0, 1));//если одна то 1 |
||||
} |
||||
else |
||||
{console.log(object.Time.substr(0, 2)); // если две то 19 |
||||
ind= Number(object.Time.substr(0, 2)); |
||||
} |
||||
//console.log(ind); |
||||
if(ind!=indold) |
||||
{ |
||||
if(ind>indold+1) |
||||
{ var del=ind-indold; |
||||
for (var i = indold; i < ind; i++) { |
||||
console.log(i); |
||||
w[i]=w[indold]; |
||||
// console.log("Notw[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
} |
||||
//console.log(object.temperatura.indexOf(".")); |
||||
indtemp=Number(object.temperatura.indexOf("."));//кол-во цифр до запятой |
||||
|
||||
if(object.temperatura.substr(0, 1)!="-") |
||||
{ |
||||
if(indtemp==2)//если до запятой 2 знака |
||||
{w[ind]=Number(object.temperatura.substr(0, 2))*10+Number(object.temperatura.substr(3, 1)); |
||||
w[ind]=w[ind]/10; |
||||
console.log("w[ind]="); |
||||
console.log(w[ind]); |
||||
} |
||||
if(indtemp==1)//если до запятой 1 знак |
||||
{w[ind]=Number(object.temperatura.substr(0, 1))*10+Number(object.temperatura.substr(2, 1)); |
||||
w[ind]=w[ind]/10; |
||||
// console.log("w[ind]="); |
||||
//console.log(w[ind]); |
||||
|
||||
} |
||||
} |
||||
else//если температура отр |
||||
{if(indtemp==3)//если до запятой 3 знака -10.3 |
||||
{w[ind]=Number(object.temperatura.substr(1, 2))*10+Number(object.temperatura.substr(4, 1)); |
||||
w[ind]=(-1*w[ind])/10; |
||||
// console.log("w[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
if(indtemp==2)//если до запятой 1 знак -2.3 |
||||
{w[ind]=Number(object.temperatura.substr(1, 1))*10+Number(object.temperatura.substr(3, 1)); |
||||
w[ind]=(-1*w[ind])/10; |
||||
// console.log("w[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
|
||||
} |
||||
} |
||||
|
||||
}); |
||||
|
||||
new Chart(document.getElementById("line-chart"), { |
||||
type: 'line', |
||||
data: { |
||||
labels: ["00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"], |
||||
datasets: [{ |
||||
data: [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15],w[16],w[17],w[18],w[19],w[20],w[21],w[22],w[23],], |
||||
label: "Комната1 ", |
||||
borderColor: "rgb(62,149,205)", |
||||
backgroundColor: "rgba(65,138,191,0.48)", |
||||
fill: true |
||||
//fill: false |
||||
}]}, |
||||
options: { |
||||
title: { |
||||
display: true, |
||||
text: 'График суточной температуры' |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,228 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Комната2</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom2"></span> °C</span></p><p class="packet">Battery <span id="batkom2"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom2"></span> %</span></p><p class="packet">Time <span id="timekom2"></span></p> |
||||
</div> |
||||
</div> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
<div class="top2"> |
||||
<nav id="navigation3"><a href="informtabl3.html" title="главное меню">таблица данных за сутки</a></nav> |
||||
</div> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
<div class="contentgraf"> |
||||
<canvas id="line-chart" width="800" height="350"></canvas> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> |
||||
<script type="text/javascript"> |
||||
let ind=-1; |
||||
let w=[]; |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '2') { |
||||
console.log("readings", event.data); |
||||
document.getElementById("tkom2").innerHTML = data.tkom2; |
||||
document.getElementById("hkom2").innerHTML = data.hkom2; |
||||
document.getElementById("batkom2").innerHTML = data.batkom2; |
||||
document.getElementById("timekom2").innerHTML = data.timekom2; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
// console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
//console.log("data", data); |
||||
} |
||||
|
||||
|
||||
data.forEach(function(object) { |
||||
// console.log(object.Time); |
||||
// console.log(object.temperatura); |
||||
//console.log(object.humidity); |
||||
var indtemp;// инд для опред кол ва цифр в температуре |
||||
var zn; //знак темп - или его нет те + |
||||
var indold= ind;//запоминаем предыдущий индекс чтоб не повторять данные |
||||
// console.log(object.Time.indexOf(":")); |
||||
if(object.Time.indexOf(":")==1)//считаем кол-во цифр до : (одна или две ) 1:20 и 19:20 часы это индекс массива данных |
||||
{ind = Number(object.Time.substr(0, 1));//если одна то 1 |
||||
} |
||||
else |
||||
{//console.log(object.Time.substr(0, 2)); // если две то 19 |
||||
ind= Number(object.Time.substr(0, 2)); |
||||
} |
||||
//console.log("ind="); |
||||
//console.log(ind); |
||||
// console.log("indold="); |
||||
//console.log(indold); |
||||
if(ind!=indold) |
||||
{ |
||||
if(ind>indold+1) |
||||
{ var del=ind-indold; |
||||
for (var i = indold; i < ind; i++) { |
||||
console.log(i); |
||||
w[i]=w[indold]; |
||||
// console.log("Notw[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
} |
||||
//console.log(object.temperatura.indexOf(".")); |
||||
indtemp=Number(object.temperatura.indexOf("."));//кол-во цифр до запятой |
||||
|
||||
if(object.temperatura.substr(0, 1)!="-") |
||||
{ |
||||
if(indtemp==2)//если до запятой 2 знака |
||||
{w[ind]=Number(object.temperatura.substr(0, 2))*10+Number(object.temperatura.substr(3, 1)); |
||||
w[ind]=w[ind]/10; |
||||
console.log("w[ind]="); |
||||
console.log(w[ind]); |
||||
} |
||||
if(indtemp==1)//если до запятой 1 знак |
||||
{w[ind]=Number(object.temperatura.substr(0, 1))*10+Number(object.temperatura.substr(2, 1)); |
||||
w[ind]=w[ind]/10; |
||||
// console.log("w[ind]="); |
||||
//console.log(w[ind]); |
||||
|
||||
} |
||||
} |
||||
else//если температура отр |
||||
{if(indtemp==3)//если до запятой 3 знака -10.3 |
||||
{w[ind]=Number(object.temperatura.substr(1, 2))*10+Number(object.temperatura.substr(4, 1)); |
||||
w[ind]=(-1*w[ind])/10; |
||||
// console.log("w[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
if(indtemp==2)//если до запятой 1 знак -2.3 |
||||
{w[ind]=Number(object.temperatura.substr(1, 1))*10+Number(object.temperatura.substr(3, 1)); |
||||
w[ind]=(-1*w[ind])/10; |
||||
// console.log("w[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
|
||||
} |
||||
} |
||||
|
||||
}); |
||||
|
||||
new Chart(document.getElementById("line-chart"), { |
||||
type: 'line', |
||||
data: { |
||||
labels: ["00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"], |
||||
datasets: [{ |
||||
data: [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15],w[16],w[17],w[18],w[19],w[20],w[21],w[22],w[23],], |
||||
label: "Комната2 ", |
||||
borderColor: "rgb(62,149,205)", |
||||
backgroundColor: "rgba(65,138,191,0.48)", |
||||
fill: true |
||||
//fill: false |
||||
}]}, |
||||
options: { |
||||
title: { |
||||
display: true, |
||||
text: 'График суточной температуры' |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,226 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Коридор</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkor"></span> °C</span></p><p class="packet">Battery <span id="batkor"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkor"></span> %</span></p><p class="packet">Time <span id="timekor"></span></p> |
||||
</div> |
||||
</div> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
<div class="top2"> |
||||
<nav id="navigation3"><a href="informtabl4.html" title="главное меню">таблица данных за сутки</a></nav> |
||||
</div> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
<div class="contentgraf"> |
||||
<canvas id="line-chart" width="800" height="350"></canvas> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> |
||||
<script type="text/javascript"> |
||||
let ind; |
||||
let w=[]; |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '2') { |
||||
document.getElementById("tkor").innerHTML = data.tkor; |
||||
document.getElementById("hkor").innerHTML = data.hkor; |
||||
document.getElementById("batkor").innerHTML = data.batkor; |
||||
document.getElementById("timekor").innerHTML = data.timekor; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
// console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
|
||||
|
||||
data.forEach(function(object) { |
||||
console.log(object.Time); |
||||
console.log(object.temperatura); |
||||
console.log(object.humidity); |
||||
var indtemp;// инд для опред кол ва цифр в температуре |
||||
var zn; //знак темп - или его нет те + |
||||
var indold= ind;//запоминаем предыдущий индекс чтоб не повторять данные |
||||
console.log(object.Time.indexOf(":")); |
||||
if(object.Time.indexOf(":")==1)//считаем кол-во цифр до : (одна или две ) 1:20 и 19:20 часы это индекс массива данных |
||||
{ind = Number(object.Time.substr(0, 1));//если одна то 1 |
||||
} |
||||
else |
||||
{console.log(object.Time.substr(0, 2)); // если две то 19 |
||||
ind= Number(object.Time.substr(0, 2)); |
||||
} |
||||
//console.log(ind); |
||||
if(ind!=indold) |
||||
{ |
||||
if(ind>indold+1) |
||||
{ var del=ind-indold; |
||||
for (var i = indold; i < ind; i++) { |
||||
console.log(i); |
||||
w[i]=w[indold]; |
||||
// console.log("Notw[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
} |
||||
//console.log(object.temperatura.indexOf(".")); |
||||
indtemp=Number(object.temperatura.indexOf("."));//кол-во цифр до запятой |
||||
|
||||
if(object.temperatura.substr(0, 1)!="-") |
||||
{ |
||||
if(indtemp==2)//если до запятой 2 знака |
||||
{w[ind]=Number(object.temperatura.substr(0, 2))*10+Number(object.temperatura.substr(3, 1)); |
||||
w[ind]=w[ind]/10; |
||||
console.log("w[ind]="); |
||||
console.log(w[ind]); |
||||
} |
||||
if(indtemp==1)//если до запятой 1 знак |
||||
{w[ind]=Number(object.temperatura.substr(0, 1))*10+Number(object.temperatura.substr(2, 1)); |
||||
w[ind]=w[ind]/10; |
||||
// console.log("w[ind]="); |
||||
//console.log(w[ind]); |
||||
|
||||
} |
||||
} |
||||
else//если температура отр |
||||
{if(indtemp==3)//если до запятой 3 знака -10.3 |
||||
{w[ind]=Number(object.temperatura.substr(1, 2))*10+Number(object.temperatura.substr(4, 1)); |
||||
w[ind]=(-1*w[ind])/10; |
||||
// console.log("w[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
if(indtemp==2)//если до запятой 1 знак -2.3 |
||||
{w[ind]=Number(object.temperatura.substr(1, 1))*10+Number(object.temperatura.substr(3, 1)); |
||||
w[ind]=(-1*w[ind])/10; |
||||
// console.log("w[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
|
||||
} |
||||
} |
||||
|
||||
}); |
||||
|
||||
new Chart(document.getElementById("line-chart"), { |
||||
type: 'line', |
||||
data: { |
||||
labels: ["00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"], |
||||
datasets: [{ |
||||
data: [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15],w[16],w[17],w[18],w[19],w[20],w[21],w[22],w[23],], |
||||
label: "Коридор ", |
||||
borderColor: "rgb(62,149,205)", |
||||
backgroundColor: "rgba(65,138,191,0.48)", |
||||
fill: true |
||||
//fill: false |
||||
}]}, |
||||
options: { |
||||
title: { |
||||
display: true, |
||||
text: 'График суточной температуры' |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
|
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,227 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Балкон</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tbal"></span> °C</span></p><p class="packet">Battery <span id="batbal"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hbal"></span> %</span></p><p class="packet">Time <span id="timebal"></span></p> |
||||
</div> |
||||
</div> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
<div class="top2"> |
||||
<nav id="navigation3"><a href="informtabl5.html" title="главное меню">таблица данных за сутки</a></nav> |
||||
</div> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
<div class="contentgraf"> |
||||
<canvas id="line-chart" width="800" height="350"></canvas> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> |
||||
<script type="text/javascript"> |
||||
let ind; |
||||
let w=[]; |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '2') { |
||||
console.log("readings", event.data); |
||||
|
||||
document.getElementById("tbal").innerHTML = data.tbal; |
||||
document.getElementById("hbal").innerHTML = data.hbal; |
||||
document.getElementById("batbal").innerHTML = data.batbal; |
||||
document.getElementById("timebal").innerHTML = data.timebal; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
// console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
|
||||
|
||||
data.forEach(function(object) { |
||||
console.log(object.Time); |
||||
console.log(object.temperatura); |
||||
console.log(object.humidity); |
||||
var indtemp;// инд для опред кол ва цифр в температуре |
||||
var zn; //знак темп - или его нет те + |
||||
var indold= ind;//запоминаем предыдущий индекс чтоб не повторять данные |
||||
console.log(object.Time.indexOf(":")); |
||||
if(object.Time.indexOf(":")==1)//считаем кол-во цифр до : (одна или две ) 1:20 и 19:20 часы это индекс массива данных |
||||
{ind = Number(object.Time.substr(0, 1));//если одна то 1 |
||||
} |
||||
else |
||||
{console.log(object.Time.substr(0, 2)); // если две то 19 |
||||
ind= Number(object.Time.substr(0, 2)); |
||||
} |
||||
//console.log(ind); |
||||
if(ind!=indold) |
||||
{ |
||||
if(ind>indold+1) |
||||
{ var del=ind-indold; |
||||
for (var i = indold; i < ind; i++) { |
||||
console.log(i); |
||||
w[i]=w[indold]; |
||||
// console.log("Notw[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
} |
||||
//console.log(object.temperatura.indexOf(".")); |
||||
indtemp=Number(object.temperatura.indexOf("."));//кол-во цифр до запятой |
||||
|
||||
if(object.temperatura.substr(0, 1)!="-") |
||||
{ |
||||
if(indtemp==2)//если до запятой 2 знака |
||||
{w[ind]=Number(object.temperatura.substr(0, 2))*10+Number(object.temperatura.substr(3, 1)); |
||||
w[ind]=w[ind]/10; |
||||
console.log("w[ind]="); |
||||
console.log(w[ind]); |
||||
} |
||||
if(indtemp==1)//если до запятой 1 знак |
||||
{w[ind]=Number(object.temperatura.substr(0, 1))*10+Number(object.temperatura.substr(2, 1)); |
||||
w[ind]=w[ind]/10; |
||||
// console.log("w[ind]="); |
||||
//console.log(w[ind]); |
||||
|
||||
} |
||||
} |
||||
else//если температура отр |
||||
{if(indtemp==3)//если до запятой 3 знака -10.3 |
||||
{w[ind]=Number(object.temperatura.substr(1, 2))*10+Number(object.temperatura.substr(4, 1)); |
||||
w[ind]=(-1*w[ind])/10; |
||||
// console.log("w[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
if(indtemp==2)//если до запятой 1 знак -2.3 |
||||
{w[ind]=Number(object.temperatura.substr(1, 1))*10+Number(object.temperatura.substr(3, 1)); |
||||
w[ind]=(-1*w[ind])/10; |
||||
// console.log("w[ind]="); |
||||
// console.log(w[ind]); |
||||
} |
||||
|
||||
} |
||||
} |
||||
|
||||
}); |
||||
|
||||
new Chart(document.getElementById("line-chart"), { |
||||
type: 'line', |
||||
data: { |
||||
labels: ["00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"], |
||||
datasets: [{ |
||||
data: [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15],w[16],w[17],w[18],w[19],w[20],w[21],w[22],w[23],], |
||||
label: "Балкон ", |
||||
borderColor: "rgb(62,149,205)", |
||||
backgroundColor: "rgba(65,138,191,0.48)", |
||||
fill: true |
||||
//fill: false |
||||
}]}, |
||||
options: { |
||||
title: { |
||||
display: true, |
||||
text: 'График суточной температуры' |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,157 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Кухня</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||
</div> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '2') { |
||||
console.log("readings", event.data); |
||||
document.getElementById("tul1").innerHTML = data.tul1; |
||||
document.getElementById("hul1").innerHTML = data.hul1; |
||||
document.getElementById("osv1").innerHTML = data.osv1; |
||||
document.getElementById("timeul1").innerHTML = data.timeul1; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
append_json(data); |
||||
} |
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,151 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<link rel="manifest" href="imajes/site.webmanifest"> |
||||
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Улица(восток)</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||
</div> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '2') { |
||||
console.log("readings", event.data); |
||||
document.getElementById("tul1").innerHTML = data.tul1; |
||||
document.getElementById("hul1").innerHTML = data.hul1; |
||||
document.getElementById("osv1").innerHTML = data.osv1; |
||||
document.getElementById("timeul1").innerHTML = data.timeul1; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
append_json(data); |
||||
} |
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
return false; |
||||
console.log("isJsonString", false); |
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,164 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Улица(запад)</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Battery <span id="batz"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||
</div> |
||||
</div> |
||||
<p></p> |
||||
<div class="top2"> |
||||
<nav id="navigation3"><a href="inform.html" title="График данных за сутки">График данных за сутки</a></nav> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
|
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '0') { |
||||
console.log("readings", event.data); |
||||
document.getElementById("t1").innerHTML = data.temperature; |
||||
document.getElementById("h1").innerHTML = data.humidity; |
||||
|
||||
document.getElementById("batz").innerHTML = data.batz; |
||||
document.getElementById("tim3").innerHTML = data.tim3; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
append_json(data); |
||||
} |
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
console.log("isJsonString", false); |
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,166 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
|
||||
<div class="top2"> |
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Улица(восток)</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||
</div> |
||||
</div> |
||||
<p></p> |
||||
<div class="top2"> |
||||
<nav id="navigation3"><a href="inform1.html" title="главное меню">График данных за сутки</a></nav> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
|
||||
<div> |
||||
|
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
|
||||
</div> |
||||
|
||||
<div id="tablinfo"> |
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '2') { |
||||
console.log("readings", event.data); |
||||
document.getElementById("tul1").innerHTML = data.tul1; |
||||
document.getElementById("hul1").innerHTML = data.hul1; |
||||
document.getElementById("osv1").innerHTML = data.osv1; |
||||
document.getElementById("timeul1").innerHTML = data.timeul1; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
append_json(data); |
||||
} |
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
return false; |
||||
console.log("isJsonString", false); |
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,162 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Комната1</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom1"></span> °C</span></p><p class="packet">Battery <span id="batkom1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom1"></span> %</span></p><p class="packet">Time <span id="timekom1"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
<p></p> |
||||
<div class="top2"> |
||||
<nav id="navigation3"><a href="inform2.html" title="главное меню">График данных за сутки</a></nav> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '2') { |
||||
console.log("readings", event.data); |
||||
document.getElementById("tkom1").innerHTML = data.tkom1; |
||||
document.getElementById("hkom1").innerHTML = data.hkom1; |
||||
document.getElementById("batkom1").innerHTML = data.batkom1; |
||||
document.getElementById("timekom1").innerHTML = data.timekom1; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
append_json(data); |
||||
} |
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,161 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Комната2</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom2"></span> °C</span></p><p class="packet">Battery <span id="batkom2"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom2"></span> %</span></p><p class="packet">Time <span id="timekom2"></span></p> |
||||
</div> |
||||
</div> |
||||
<p></p> |
||||
<div class="top2"> |
||||
<nav id="navigation3"><a href="inform3.html" title="главное меню">График данных за сутки</a></nav> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '2') { |
||||
console.log("readings", event.data); |
||||
document.getElementById("tkom2").innerHTML = data.tkom2; |
||||
document.getElementById("hkom2").innerHTML = data.hkom2; |
||||
document.getElementById("batkom2").innerHTML = data.batkom2; |
||||
document.getElementById("timekom2").innerHTML = data.timekom2; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
append_json(data); |
||||
} |
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,162 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Коридор</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkor"></span> °C</span></p><p class="packet">Battery <span id="batkor"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkor"></span> %</span></p><p class="packet">Time <span id="timekor"></span></p> |
||||
</div> |
||||
</div> |
||||
<p></p> |
||||
<div class="top2"> |
||||
<nav id="navigation3"><a href="inform4.html" title="главное меню">График данных за сутки</a></nav> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '2') { |
||||
document.getElementById("tkor").innerHTML = data.tkor; |
||||
document.getElementById("hkor").innerHTML = data.hkor; |
||||
document.getElementById("batkor").innerHTML = data.batkor; |
||||
document.getElementById("timekor").innerHTML = data.timekor; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
append_json(data); |
||||
} |
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
|
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,163 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div class="top2"> |
||||
<nav1><a href="index.html" title="главное меню">Главное меню</a></nav1> |
||||
<nav1><a href="inform1.html" title="информация">улица восток</a></nav1> |
||||
<nav1><a href="inform.html" title="информация">улица запад</a></nav1> |
||||
<nav1><a href="inform4.html" title="информация">коридор</a></nav1> |
||||
<nav1><a href="inform2.html" title="информация">комната1</a></nav1> |
||||
<nav1><a href="inform3.html" title="информация">комната2</a></nav1> |
||||
<nav1><a href="inform6.html" title="информация">кухня</a></nav1> |
||||
<nav1><a href="inform5.html" title="информация">балкон</a></nav1> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Балкон</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tbal"></span> °C</span></p><p class="packet">Battery <span id="batbal"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hbal"></span> %</span></p><p class="packet">Time <span id="timebal"></span></p> |
||||
</div> |
||||
</div> |
||||
<p></p> |
||||
<div class="top2"> |
||||
<nav id="navigation3"><a href="inform5.html" title="главное меню">График данных за сутки</a></nav> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
var tabl=0; |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);// |
||||
if (data.id === '77') { |
||||
}; |
||||
if (data.id === '2') { |
||||
console.log("readings", event.data); |
||||
|
||||
document.getElementById("tbal").innerHTML = data.tbal; |
||||
document.getElementById("hbal").innerHTML = data.hbal; |
||||
document.getElementById("batbal").innerHTML = data.batbal; |
||||
document.getElementById("timebal").innerHTML = data.timebal; |
||||
}; |
||||
|
||||
|
||||
} |
||||
else |
||||
{ |
||||
if(tabl==0) |
||||
{ |
||||
console.log("readings", event.data); |
||||
re = event.data.split("\n"); |
||||
console.log(re); |
||||
var data=[]; |
||||
tabl=1; |
||||
for(var i = 0; i < re.length-1; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
} |
||||
append_json(data); |
||||
} |
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
return false; |
||||
|
||||
} |
||||
console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
|
After Width: | Height: | Size: 11 KiB |
@ -0,0 +1,478 @@ |
||||
<!DOCTYPE html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="icon" href="favicon.ico"> |
||||
|
||||
<link rel="icon" type="png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="png" sizes="16x16" href="favicon-16x16.png"> |
||||
</head> |
||||
<body> |
||||
<div id="container"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Настройки таймера</h3></p> |
||||
</div> |
||||
|
||||
<div id="sidebar"> |
||||
|
||||
<div class="manth"> |
||||
<p><span id="munthserv">месяц</span></p> |
||||
</div> |
||||
<div class="data"> |
||||
<p><span id="dataserv">01</span></p> |
||||
<div class="week"> |
||||
<p><span id="weekserv">день</span></p> |
||||
</div> |
||||
</div> |
||||
<div class="times"> |
||||
<p><span id="timeserv1">:</span></p> |
||||
</div> |
||||
<div class="levnav"> |
||||
|
||||
|
||||
|
||||
|
||||
<p> <a href="index.html" title="Главная"> Главная</a></p> |
||||
<p><a href="setting.html" title="настройки">настройки</a></p> |
||||
<p><a href="upravlenie.html" title="управление">управление</a></p> |
||||
<p><a href="inform.html" title="информация">информация</a></p> |
||||
<p><a href="timer.html" title="таймер">таймер</a></p> |
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div> |
||||
<font size="3" color="#1E4486"> |
||||
<label for="timerSelector">Выберите таймер:</label> |
||||
<select id="timerSelector"> |
||||
<font size="5" color="#1E4486"> |
||||
<option value="timer1">Таймер 1</option> |
||||
<option value="timer2">Таймер 2</option> |
||||
<option value="timer3">Таймер 3</option> |
||||
</font> |
||||
</select> |
||||
<div id="content"> |
||||
|
||||
|
||||
<div id="timers"> |
||||
<!-- Таймер 1 --> |
||||
<div class="timer" id="timer1"> |
||||
<h2>Таймер 1</h2> |
||||
<font size="5" color="#1E4486"> |
||||
<ul> |
||||
<!-- 10 временных интервалов для Таймера 1 --> |
||||
<div class="days"> |
||||
<label><input type="checkbox" name="week1"> Пн</label> |
||||
<label><input type="checkbox" name="week1"> Вт</label> |
||||
<label><input type="checkbox" name="week1"> Ср</label> |
||||
<label><input type="checkbox" name="week1"> Чт</label> |
||||
<label><input type="checkbox" name="week1"> Пт</label> |
||||
<label><input type="checkbox" name="week1"> Сб</label> |
||||
<label><input type="checkbox" name="week1"> Вс</label> |
||||
</div> |
||||
|
||||
<li><small>on_1 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_1 </small><input type="time" value="00:00"></li> |
||||
<li><small>on_2 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_2 </small><input type="time" value="00:00"></li> |
||||
<li><small>on_3 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_3 </small><input type="time" value="00:00"></li> |
||||
<li><small>on_4 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_4 </small><input type="time" value="00:00"></li> |
||||
<li><small>on_5 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_5 </small><input type="time" value="00:00"></li> |
||||
|
||||
<div class="days"> |
||||
<label><input type="checkbox" name="out1"> 1</label> |
||||
<label><input type="checkbox" name="out1"> 2</label> |
||||
<label><input type="checkbox" name="out1"> 3</label> |
||||
</div> |
||||
</ul> |
||||
</font> |
||||
</div> |
||||
|
||||
<!-- Таймер 2 --> |
||||
<div class="timer" id="timer2"> |
||||
<h2>Таймер 2</h2> |
||||
<font size="5" color="#1E4486"> |
||||
<ul> |
||||
<!-- 10 временных интервалов для Таймера 2 --> |
||||
<div class="days"> |
||||
<label><input type="checkbox" name="week2"> Пн</label> |
||||
<label><input type="checkbox" name="week2"> Вт</label> |
||||
<label><input type="checkbox" name="week2"> Ср</label> |
||||
<label><input type="checkbox" name="week2"> Чт</label> |
||||
<label><input type="checkbox" name="week2"> Пт</label> |
||||
<label><input type="checkbox" name="week2"> Сб</label> |
||||
<label><input type="checkbox" name="week2"> Вс</label> |
||||
</div> |
||||
<li><small>on_1 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_1 </small><input type="time" value="00:00"></li> |
||||
<li><small>on_2 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_2 </small><input type="time" value="00:00"></li> |
||||
<li><small>on_3 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_3 </small><input type="time" value="00:00"></li> |
||||
<li><small>on_4 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_4 </small><input type="time" value="00:00"></li> |
||||
<li><small>on_5 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_5 </small><input type="time" value="00:00"></li> |
||||
<div class="days"> |
||||
<label><input type="checkbox" name="out2"> 1</label> |
||||
<label><input type="checkbox" name="out2"> 2</label> |
||||
<label><input type="checkbox" name="out2"> 3</label> |
||||
</div> |
||||
</ul> |
||||
</font> |
||||
</div> |
||||
|
||||
<!-- Таймер 3 --> |
||||
<div class="timer" id="timer3"> |
||||
<h2>Таймер 3</h2> |
||||
<font size="5" color="#1E4486"> |
||||
<ul> |
||||
<div class="days"> |
||||
<label><input type="checkbox" name="week3"> Пн</label> |
||||
<label><input type="checkbox" name="week3"> Вт</label> |
||||
<label><input type="checkbox" name="week3"> Ср</label> |
||||
<label><input type="checkbox" name="week3"> Чт</label> |
||||
<label><input type="checkbox" name="week3"> Пт</label> |
||||
<label><input type="checkbox" name="week3"> Сб</label> |
||||
<label><input type="checkbox" name="week3"> Вс</label> |
||||
</div> |
||||
<!-- 10 временных интервалов для Таймера 3 --> |
||||
<li><small>on_1 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_1 </small><input type="time" value="00:00"></li> |
||||
<li><small>on_2 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_2 </small><input type="time" value="00:00"></li> |
||||
<li><small>on_3 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_3 </small><input type="time" value="00:00"></li> |
||||
<li><small>on_4 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_4 </small><input type="time" value="00:00"></li> |
||||
<li><small>on_5 </small><input type="time" value="00:00"></li> |
||||
<li><small>off_5 </small><input type="time" value="00:00"></li> |
||||
<div class="days"> |
||||
<label><input type="checkbox" name="out3"> 1</label> |
||||
<label><input type="checkbox" name="out3"> 2</label> |
||||
<label><input type="checkbox" name="out3"> 3</label> |
||||
</div> |
||||
</ul> |
||||
</font> |
||||
</div> |
||||
</div> |
||||
<button id="saveButton">Сохранить</button> |
||||
<div id="clear"> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
</div> |
||||
<div class="top"> |
||||
<font size="4" >Время работы сервера: </font> |
||||
<font color="#CF7071" size="5"><span id="t10">0:00</span></font> |
||||
<p>Count:<span id="countData1">0:00</span></p> |
||||
</div> |
||||
|
||||
<div id="clear"> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
let defaultData = { |
||||
timer1: ["00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00"], |
||||
timer2: ["00:00", "00:30", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00"], |
||||
timer3: ["00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00", "00:00"]}; |
||||
//****************************WebSocket*************************************************** |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var dat=event.data; |
||||
if ( dat.startsWith("{\"timer1"))//если начало строки {"timer1 то парсим ее как данные таймера |
||||
{console.log("dat", dat[2]+dat[7]);//(dat[2]+dat[7]=='t1') |
||||
defaultData = JSON.parse(event.data); |
||||
//let defaultData = Object.assign({}, defaultData1);// перевод объекта в JSON |
||||
|
||||
console.log("t2", defaultData); |
||||
// Заполните поля ввода (время для таймеров) данными из JSON |
||||
Object.keys(defaultData).forEach(function (timerId) { |
||||
const timer = document.getElementById(timerId); |
||||
const intervals = defaultData[timerId]; |
||||
const timerItems = timer.querySelectorAll('input[type="time"]'); |
||||
timerItems.forEach(function (item, index) { |
||||
item.value = intervals[index]; |
||||
}); |
||||
}); |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
var data = JSON.parse(event.data);//парсим JSON |
||||
|
||||
if (data.id === '0') { |
||||
// document.getElementById("tim2").innerHTML = data.tim2; |
||||
// document.getElementById("tim3").innerHTML = data.tim3; |
||||
document.getElementById("dataserv").innerHTML = data.dataserv; |
||||
document.getElementById("munthserv").innerHTML = data.munthserv; |
||||
document.getElementById("weekserv").innerHTML = data.weekserv; |
||||
} |
||||
if (data.label3 === 'count1') {//счетчик секунд |
||||
document.getElementById("countData1").innerHTML = data.value; |
||||
}; |
||||
if (data.label3 === 'count') {//работа сервера время |
||||
document.getElementById("t10").innerHTML = data.value; |
||||
}; |
||||
if (data.label3 === 'count2') {//NTP время |
||||
document.getElementById("timeserv1").innerHTML = data.value; |
||||
}; |
||||
if (data.id === 'week') {//'{"id":"week","timer1_week":"1111100","timer2_week":"0000011","timer3_week":"0000000"}'; |
||||
var DataWeek = event.data; |
||||
console.log("week", event.data); |
||||
week_json(DataWeek); |
||||
} |
||||
|
||||
if (data.id === 'tout') {//{"id":"tout","t1":"011","t2":"100","t3":"010"} |
||||
var DataOut = event.data; |
||||
console.log("Out", event.data); |
||||
out_json(DataOut); |
||||
} |
||||
} |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
} |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
} |
||||
} |
||||
|
||||
//******************************************************************************************************* |
||||
|
||||
|
||||
function week_json(data){//парсим строку week |
||||
const weekt = JSON.parse(data); |
||||
if (weekt.id === 'week') { |
||||
//{"id":"week","timer1_week":"0111100","timer2_week":"1000011","timer3_week":"0101010"}; |
||||
const weekt1 = Array.from(weekt.timer1_week).map(Number);//"1111100"=>{1,1,1,1,1,0,0} строку в массив чисел |
||||
// console.log(weekt1); |
||||
// Заполните поля чекбоксов данными из JSON |
||||
var checkboxes1 = document.getElementsByName('week1');//заполняем чекбоксы с именем week1 |
||||
for (let i = 0; i < checkboxes1.length; i++) { |
||||
checkboxes1[i].checked = weekt1[i];//значение в чекбоксе берем из массива {1,1,1,1,1,0,0} |
||||
} |
||||
const weekt2 = Array.from(weekt.timer2_week).map(Number); |
||||
// console.log(weekt2); |
||||
// Заполните поля чекбоксов данными из JSON |
||||
var checkboxes2 = document.getElementsByName('week2'); |
||||
for (let i = 0; i < checkboxes2.length; i++) { |
||||
checkboxes2[i].checked = weekt2[i]; |
||||
} |
||||
const weekt3 = Array.from(weekt.timer3_week).map(Number); |
||||
// console.log(weekt3); |
||||
// Заполните поля чекбоксов данными из JSON |
||||
var checkboxes3 = document.getElementsByName('week3'); |
||||
for (let i = 0; i < checkboxes2.length; i++) { |
||||
checkboxes3[i].checked = weekt3[i]; |
||||
} |
||||
|
||||
} |
||||
} |
||||
//***************************************************************************************** |
||||
function out_json(data){//{"id":"tout","t1":"011","t2":"100","t3":"010"}запись данных в чекбоксы 1 2 3 |
||||
const out = JSON.parse(data); |
||||
if (out.id === 'tout') { |
||||
const out1 = Array.from(out.t1).map(Number);//"100"=>{1,0,0} строку в массив чисел |
||||
// Заполните поля чекбоксов данными из JSON |
||||
var checkboxes1 = document.getElementsByName('out1');//заполняем чекбоксы с именем out1 |
||||
for (let i = 0; i < checkboxes1.length; i++) { |
||||
checkboxes1[i].checked = out1[i];//значение в чекбоксе берем из массива {1,0,0} |
||||
} |
||||
const out2 = Array.from(out.t2).map(Number);//"110"=>{1,1,0} строку в массив чисел |
||||
// Заполните поля чекбоксов данными из JSON |
||||
var checkboxes2 = document.getElementsByName('out2');//заполняем чекбоксы с именем out2 |
||||
for (let i = 0; i < checkboxes2.length; i++) { |
||||
checkboxes2[i].checked = out2[i];//значение в чекбоксе берем из массива {1,1,0} |
||||
} |
||||
const out3 = Array.from(out.t3).map(Number);//"000"=>{0,0,0} строку в массив чисел |
||||
// Заполните поля чекбоксов данными из JSON |
||||
var checkboxes3 = document.getElementsByName('out3');//заполняем чекбоксы с именем out3 |
||||
//console.log("out3", checkboxes1); |
||||
for (let i = 0; i < checkboxes3.length; i++) { |
||||
checkboxes3[i].checked = out3[i];//значение в чекбоксе берем из массива {0,0,0} |
||||
} |
||||
} |
||||
} |
||||
//*************************************************************************************************** |
||||
|
||||
// Скрываем все таймеры, кроме выбранного |
||||
function hideTimers(timerId) { |
||||
const timerElements = document.querySelectorAll('.timer'); |
||||
timerElements.forEach(function (element) { |
||||
element.style.display = 'none'; |
||||
}); |
||||
const selectedTimer = document.getElementById(timerId); |
||||
if (selectedTimer) { |
||||
selectedTimer.style.display = 'block'; |
||||
} |
||||
} |
||||
|
||||
// Изначально скрываем все таймеры |
||||
hideTimers('timer1'); |
||||
|
||||
// Обработчик изменения выбора таймера |
||||
document.getElementById('timerSelector').addEventListener('change', function () { |
||||
const selectedTimerId = this.value; |
||||
hideTimers(selectedTimerId); |
||||
}); |
||||
|
||||
document.getElementById('saveButton').addEventListener('click', function () { |
||||
const selectedTimerId = document.getElementById('timerSelector').value; |
||||
const selectedTimer = document.getElementById(selectedTimerId); |
||||
|
||||
// Создаем объект, содержащий настройки таймера |
||||
const timersData = {//время |
||||
timer1: [], |
||||
timer2: [], |
||||
timer3: [] |
||||
}; |
||||
const weekData = {//день недели |
||||
"id":"week", |
||||
timer1_week:"", |
||||
timer2_week:"", |
||||
timer3_week:"" |
||||
}; |
||||
const outData = {//номер выхода на кот подключаем |
||||
"id":"tout", |
||||
t1:"", |
||||
t2:"", |
||||
t3:"" |
||||
}; |
||||
// Собираем данные для Таймера 1 |
||||
const timer1Items = document.querySelectorAll('.timer:nth-child(1) input[type="time"]'); |
||||
timer1Items.forEach(function (item) { |
||||
let days = ""; |
||||
var checkboxes = document.getElementsByName('week1');//считываем чекбокс в строку типа 1111100 |
||||
for (var checkbox of checkboxes) |
||||
{ |
||||
days+=(checkbox.checked ? 1 : 0); |
||||
} |
||||
let out = ""; |
||||
var checkboxes = document.getElementsByName('out1');//считываем чекбокс в строку типа 1111100 |
||||
for (var checkbox of checkboxes) |
||||
{ |
||||
out+=(checkbox.checked ? 1 : 0); |
||||
} |
||||
|
||||
|
||||
outData.t1 = out; |
||||
weekData.timer1_week = days; |
||||
timersData.timer1.push(item.value); |
||||
|
||||
}); |
||||
|
||||
// Собираем данные для Таймера 2 |
||||
const timer2Items = document.querySelectorAll('.timer:nth-child(2) input[type="time"]'); |
||||
timer2Items.forEach(function (item) { |
||||
timersData.timer2.push(item.value); |
||||
let days = ""; |
||||
var checkboxes = document.getElementsByName('week2'); |
||||
for (var checkbox of checkboxes) |
||||
{ |
||||
days+=(checkbox.checked ? 1 : 0); |
||||
}; |
||||
let out = ""; |
||||
var checkboxes = document.getElementsByName('out2');//считываем чекбокс в строку типа 1111100 |
||||
for (var checkbox of checkboxes) |
||||
{ |
||||
out+=(checkbox.checked ? 1 : 0); |
||||
} |
||||
|
||||
|
||||
outData.t2 = out; |
||||
weekData.timer2_week = days; |
||||
}); |
||||
|
||||
// Собираем данные для Таймера 3 |
||||
const timer3Items = document.querySelectorAll('.timer:nth-child(3) input[type="time"]'); |
||||
timer3Items.forEach(function (item) { |
||||
timersData.timer3.push(item.value); |
||||
|
||||
let days = ""; |
||||
var checkboxes = document.getElementsByName('week3'); |
||||
for (var checkbox of checkboxes) |
||||
{ |
||||
days+=(checkbox.checked ? 1 : 0); |
||||
}; |
||||
let out = ""; |
||||
var checkboxes = document.getElementsByName('out3');//считываем чекбокс в строку типа 1111100 |
||||
for (var checkbox of checkboxes) |
||||
{ |
||||
out+=(checkbox.checked ? 1 : 0); |
||||
} |
||||
outData.t3 = out; |
||||
weekData.timer3_week = days; |
||||
}); |
||||
|
||||
// Преобразуем объект в JSON-строку |
||||
const jsonData = JSON.stringify(timersData); |
||||
const jsonWeek = JSON.stringify(weekData); |
||||
const jsonout = JSON.stringify(outData); |
||||
|
||||
// Выводим JSON-данные в консоль |
||||
console.log(jsonData); |
||||
console.log(jsonWeek); |
||||
console.log(jsonout); |
||||
|
||||
webSocket.send(jsonWeek);//отправка строки через websoket |
||||
webSocket.send(jsonData); |
||||
webSocket.send(jsonout); |
||||
}); |
||||
|
||||
// Получаем элементы DOM |
||||
const checkboxes = document.querySelectorAll('.myCheckbox'); |
||||
const checkboxValues = document.getElementById('checkboxValues'); |
||||
|
||||
// Создаем строку для хранения значений |
||||
let valuesString = '0000000'; |
||||
|
||||
// Добавляем обработчик события "change" к каждому чекбоксу |
||||
checkboxes.forEach((checkbox, index) => { |
||||
checkbox.addEventListener('change', function () { |
||||
// Обновляем значение в строке |
||||
valuesString = valuesString.substring(0, index) + (checkbox.checked ? '1' : '0') + valuesString.substring(index + 1); |
||||
|
||||
// Выводим обновленную строку в элементе DOM |
||||
//checkboxValues.textContent = valuesString; |
||||
|
||||
// Выводим значение в консоль браузера |
||||
console.log('Checkbox values: ' + valuesString); |
||||
}); |
||||
}); |
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,320 @@ |
||||
@charset "utf-8"; |
||||
|
||||
html {font-family: Arial; display: inline-block; text-align: center;} |
||||
body { |
||||
background-color: #C9C6C5; |
||||
color: #FFFFFF; |
||||
font-family: Arial, sans-serif; |
||||
font-size: 14px; |
||||
width: 100%; |
||||
margin-top: 5px; |
||||
background-image: url(fon.jpg); |
||||
position: static; |
||||
margin-left: 0px; |
||||
} |
||||
a{ |
||||
color: #FFFFFF; |
||||
margin-left: 17px; |
||||
} |
||||
a:visited { |
||||
color: #FFFFFF; /* Цвет посещенных ссылок */ |
||||
text-decoration: none; |
||||
margin-left: 17px; |
||||
} |
||||
a:active { |
||||
color: #A7F095; /* Цвет активных ссылок */ |
||||
margin-left: 17px; |
||||
} |
||||
a:hover { |
||||
color: #AFDAF4; /* Цвет ссылок при наведении мыши*/ |
||||
margin-left: 17px; |
||||
} |
||||
button { |
||||
padding: 10px 20px; |
||||
font: inherit; |
||||
transition: color 0s linear 2s; |
||||
} |
||||
|
||||
button:active { |
||||
color: #047F44; |
||||
transition-delay: 0s; |
||||
} |
||||
|
||||
|
||||
#header { |
||||
background: #F5DEB3; |
||||
width: 100%; |
||||
} |
||||
|
||||
#container { |
||||
background-color: #FFFFFF; |
||||
margin-right: auto; |
||||
margin-left: auto; |
||||
margin-bottom: auto; |
||||
text-align: center; |
||||
width: 80%; |
||||
height: 84px; |
||||
margin-top: 7px; |
||||
padding-top: 1px; |
||||
} |
||||
|
||||
#nav |
||||
{ |
||||
background-color: #2F4468; |
||||
width: 100%; |
||||
color: #FFFFFF; |
||||
font-size: small; |
||||
margin-left: -18px; |
||||
margin-top: -3px; |
||||
} |
||||
#nav1 |
||||
{ |
||||
background-color: #2F4468; |
||||
width: 100%; |
||||
color: #110FF8; |
||||
font-size: small; |
||||
margin-top: 64px; |
||||
margin-right: 64px; |
||||
margin-bottom: 64px; |
||||
margin-left: 64px; |
||||
} |
||||
|
||||
|
||||
#sidebar { |
||||
background-color: #8CA2AF; |
||||
float: left; |
||||
width: 20%; |
||||
position: static; |
||||
margin-top: -1px; |
||||
height: 420px; |
||||
min-width: 0px; |
||||
} |
||||
|
||||
#content { |
||||
background-color: #F8E6C1; |
||||
float: right; |
||||
width: 80%; |
||||
color: #14437A; |
||||
margin-top: -2px; |
||||
opacity: 0.91; |
||||
} |
||||
#content1 { |
||||
background-color: #F8E6C1; |
||||
width: 80%; |
||||
color: #14437A; |
||||
margin-right: auto; |
||||
margin-left: auto; |
||||
opacity: 0.91; |
||||
|
||||
} |
||||
|
||||
#clear { |
||||
clear: both; |
||||
} |
||||
|
||||
#footer { |
||||
background: #00BFFF; |
||||
width: 100%; |
||||
height: 40px; |
||||
} |
||||
|
||||
.topnav { |
||||
overflow: hidden; |
||||
background-color: #2f4468; |
||||
color: white; |
||||
font-size: 1.7rem; |
||||
height: 65px; |
||||
line-height: 3px; |
||||
|
||||
} |
||||
.top{ |
||||
overflow: hidden; |
||||
background-color: #8CA2AF; |
||||
color: white; |
||||
width: 100%; |
||||
|
||||
} |
||||
.top1{ |
||||
overflow: hidden; |
||||
background-color: #8CA2AF; |
||||
color: white; |
||||
width: 10%; |
||||
|
||||
} |
||||
.top2{ |
||||
overflow: hidden; |
||||
background-color: #B59D69; |
||||
color: white; |
||||
width: 100%; |
||||
|
||||
} |
||||
|
||||
.card.temperature { color: #fd7e14; } |
||||
.card.humidity { color: #1b78e2; } |
||||
.card.but { color: #3F97E8; } |
||||
|
||||
|
||||
.card { |
||||
background-color: #F9F9F7; |
||||
box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5); |
||||
} |
||||
.cards { |
||||
max-width: 901px; |
||||
margin-right: auto; |
||||
margin-left: auto; |
||||
display: grid; |
||||
grid-gap: 2rem; |
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); |
||||
min-height: 133px; |
||||
} |
||||
.reading { |
||||
font-size: 2.8rem; |
||||
|
||||
} |
||||
|
||||
|
||||
#navigation2 { |
||||
font-size: small; |
||||
color: #3E73A7; |
||||
float: left; |
||||
border-top-width: thick; |
||||
padding-left: 20px; |
||||
} |
||||
#navigation1 { |
||||
font-size: small; |
||||
color: #FFFFFF; |
||||
float: left; |
||||
border-top-width: thick; |
||||
padding-left: 20px; |
||||
} |
||||
|
||||
.times{ |
||||
font-size: xx-large; |
||||
margin-top: -50px; |
||||
background-color: #2F4468; |
||||
color: #FFFFFF; |
||||
height: 57px; |
||||
line-height: 56px; |
||||
} |
||||
.manth{ |
||||
color: #02087C; |
||||
margin-top: 0px; |
||||
background-color: #EF7320; |
||||
height: 2pc; |
||||
font-size: large; |
||||
padding-top: 2px; |
||||
opacity: 1; |
||||
line-height: 3%; |
||||
} |
||||
.servertime { |
||||
margin-top: 37px; |
||||
} |
||||
.data{ |
||||
color: #2F4468; |
||||
background-color: #FFFFFF; |
||||
margin-top: -93px; |
||||
height: 146px; |
||||
font-size: 92px; |
||||
line-height: 97px; |
||||
} |
||||
.week{ |
||||
color: #000006; |
||||
margin-top: -91px; |
||||
background-color: #EF7320; |
||||
height: 2pc; |
||||
font-size: large; |
||||
line-height: 30px; |
||||
|
||||
} |
||||
.levnav{ |
||||
font-size: large; |
||||
color: #FFFFFF; |
||||
margin-top: 5px; |
||||
margin-left: 25px; |
||||
line-height: 11px; |
||||
margin-right: 31px; |
||||
text-decoration: none; |
||||
text-align: left; |
||||
|
||||
} |
||||
#containerinf { |
||||
background-color: #B59D69; |
||||
margin-right: auto; |
||||
margin-left: auto; |
||||
margin-bottom: auto; |
||||
text-align: center; |
||||
width: 80%; |
||||
height: 84px; |
||||
margin-top: 7px; |
||||
padding-top: 1px; |
||||
opacity: 1; |
||||
} |
||||
#contentinfo { |
||||
background-color: #ECD9B1; |
||||
width: 100%; |
||||
color: #14437A; |
||||
margin-top: -2px; |
||||
opacity: 0.83; |
||||
} |
||||
.contentgraf { |
||||
background-color: #FFFFFF; |
||||
width: 100%; |
||||
color: #14437A; |
||||
margin-top: -2px; |
||||
|
||||
} |
||||
#tablinfo{ |
||||
background-color: #ECD9B1; |
||||
width: 35%; |
||||
color: #14437A; |
||||
margin-top: 11px; |
||||
opacity: 0.83; |
||||
text-align: center; |
||||
margin-right: auto; |
||||
margin-left: auto; |
||||
|
||||
} |
||||
.switch { |
||||
position: relative; |
||||
display: inline-block; |
||||
width: 120px; |
||||
height: 68px} |
||||
.switch input {display: none} |
||||
.slider { |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
right: 0; bottom: 0; |
||||
background-color: #F0D2A8; |
||||
border-radius: 34px} |
||||
.slider:before { |
||||
position: absolute; |
||||
content: ""; |
||||
height: 52px; |
||||
width: 52px; |
||||
left: 8px; |
||||
bottom: 8px; |
||||
background-color: #fff; |
||||
-webkit-transition: .4s; |
||||
transition: .4s; |
||||
border-radius: 68px} |
||||
input:checked+.slider {background-color: #2196F3} |
||||
input:checked+.slider:before {-webkit-transform: translateX(52px); |
||||
-ms-transform: translateX(52px); transform: translateX(52px)} |
||||
.slider2 { -webkit-appearance: none; margin: 14px; width: 360px; height: 15px; background: #EAD7AF; |
||||
outline: none; -webkit-transition: .2s; transition: opacity .2s;} |
||||
.slider2::-webkit-slider-thumb {-webkit-appearance: none; appearance: none; width: 35px; height: 35px; background: #003249; cursor: pointer;} |
||||
.slider2::-moz-range-thumb { width: 15px; height: 35px; background: #003249; cursor: pointer; } |
||||
input[type=time] { |
||||
border: #01094B; |
||||
|
||||
color: #01094B; |
||||
padding: 2px; |
||||
margin: 3px; |
||||
font-size: 22px; |
||||
font-family: helvetica; |
||||
width: 93px; |
||||
} |
||||
|
||||
|
||||
|
||||
@ -0,0 +1,289 @@ |
||||
|
||||
<!DOCTYPE HTML><html> |
||||
|
||||
<head> |
||||
<title>ESP-NOW DASHBOARD</title> |
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="icon" href="favicon.ico"> |
||||
|
||||
<link rel="icon" type="png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="png" sizes="16x16" href="favicon-16x16.png"> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
</head> |
||||
<body> |
||||
|
||||
<div id="content1"> |
||||
<div class="topnav"> |
||||
<p><h3>ESP-Домашний сервер</h3><span class="data"></span><span id="dataserv">%dataserv%</span></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="top2"> |
||||
|
||||
<nav1><a href="index.html" title="главное меню"> Главное меню </a></nav1> |
||||
|
||||
<nav1><a href="setting.html" title="настройки"> настройки </a></nav1> |
||||
|
||||
<nav1><a href="inform.html" title="информация"> информация </a></nav1> |
||||
|
||||
</div> |
||||
<div style="text-align: center;"> |
||||
<div id="contentinfo"> |
||||
<h1>Таймер</h1> |
||||
<div class="cards"> |
||||
|
||||
|
||||
<div class="card but"> |
||||
<p><span id="timer1">%timer1%</span> минут</p> |
||||
<p><input type="range" onmousechange="updateSliderTimer1(this)" onchange="updateSliderTimer1(this)" oninput="updateSliderTimer1(this)" id="Timer_slider1" min="0" max="120" value="%timer1%" step="5" class="slider2"></p> |
||||
%BUTTONPLACEHOLDER1% |
||||
</div> |
||||
|
||||
<div class="card but"> |
||||
<p><span id="timer2">%timer2%</span> минут</p> |
||||
<p><input type="range" onmousechange="updateSliderTimer2(this)" oninput="updateSliderTimer2(this)" onchange="updateSliderTimer2(this)" id="Timer_slider2" min="0" max="120" value="%timer2%" step="5" class="slider2"></p> |
||||
%BUTTONPLACEHOLDER2% |
||||
</div> |
||||
|
||||
<div class="card but"> |
||||
%BUTTONPLACEHOLDER3% |
||||
</div> |
||||
<div class="card but"> |
||||
%BUTTONPLACEHOLDER4% |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
<div id="clear"> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="top"> |
||||
<font size="2" > </font> |
||||
<font color="#CF7071" size="3"><span id="timeserv1">0:00</span></font> |
||||
</div> |
||||
|
||||
|
||||
<div id="clear"> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
|
||||
function toggleCheckbox(element) {//вкл чекбокса передть на сервер (element.id номер бокса)состояние(state=1или0) |
||||
var xhr = new XMLHttpRequest(); |
||||
if(element.checked){ xhr.open("GET", "/update?output="+element.id+"&state=1", true); } |
||||
else { xhr.open("GET", "/update?output="+element.id+"&state=0", true); } |
||||
xhr.send(); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
setInterval(function ( ) { |
||||
var xhttp = new XMLHttpRequest(); |
||||
xhttp.onreadystatechange = function() { |
||||
if (this.readyState == 4 && this.status == 200) {//Если readyState равно 4, это означает, что запрос выполнен |
||||
var inputChecked; |
||||
//cостояние чекбокса передается строкой типа 101 те 1й-вкл 2й-выкл 3й-вкл |
||||
response=Number(this.responseText)//далее расшифровуем строку |
||||
if( response-99 >0)//1xx |
||||
{inputChecked = true; |
||||
document.getElementById("4").checked = inputChecked;//состояние чекбокса |
||||
// 110 100 111 101 |
||||
if( response-109 >0) |
||||
{inputChecked = true; |
||||
document.getElementById("26").checked = inputChecked;//состояние чекбокса |
||||
//10 11 |
||||
if( response-110 >0)//10 11 |
||||
{inputChecked = true; |
||||
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||
} |
||||
else |
||||
{inputChecked = false; |
||||
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||
} |
||||
|
||||
} |
||||
else |
||||
{inputChecked = false; |
||||
document.getElementById("26").checked = inputChecked;//состояние чекбокса |
||||
if( response-100 >0)//10 11 |
||||
{inputChecked = true; |
||||
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||
} |
||||
else |
||||
{inputChecked = false; |
||||
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||
} |
||||
} |
||||
} |
||||
else//000 |
||||
{ inputChecked = false; |
||||
document.getElementById("4").checked = inputChecked;//состояние чекбокса |
||||
// 10 11 01 00 |
||||
if( response-9 >0) |
||||
{inputChecked = true; |
||||
document.getElementById("26").checked = inputChecked;//состояние чекбокса |
||||
if( response-10 >0) |
||||
{inputChecked = true; |
||||
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||
|
||||
} |
||||
else |
||||
{inputChecked = false; |
||||
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||
|
||||
} |
||||
} |
||||
else |
||||
{inputChecked = false; |
||||
document.getElementById("26").checked = inputChecked;//состояние чекбокса |
||||
if( response >0) |
||||
{inputChecked = true; |
||||
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||
} |
||||
else |
||||
{inputChecked = false; |
||||
document.getElementById("27").checked = inputChecked;//состояние чекбокса |
||||
document.getElementById("55").checked = inputChecked;//состояние чекбокса |
||||
|
||||
} |
||||
} |
||||
|
||||
} |
||||
} |
||||
}; |
||||
xhttp.open("GET", "/state", true);//запрос на сервер о состоянии выключателя |
||||
xhttp.send(); |
||||
}, 1000 ) ;//1000 -это раз в 1сек |
||||
|
||||
|
||||
if (!!window.EventSource) { |
||||
var source = new EventSource('/events'); |
||||
|
||||
source.addEventListener('open', function(e) { |
||||
console.log("Events Connected"); |
||||
}, false); |
||||
source.addEventListener('error', function(e) { |
||||
if (e.target.readyState != EventSource.OPEN) { |
||||
console.log("Events Disconnected"); |
||||
} |
||||
}, false); |
||||
|
||||
source.addEventListener('message', function(e) { |
||||
console.log("message", e.data); |
||||
}, false); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||
|
||||
|
||||
|
||||
|
||||
source.addEventListener('timeserv', function(e) {//ремя работы сервера |
||||
document.getElementById("timeserv1").innerHTML =e.data; |
||||
}, false); |
||||
|
||||
// source.addEventListener('t10', function(e) {//ремя работы сервера |
||||
// document.getElementById("t10").innerHTML =e.data; |
||||
// }, false); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
source.addEventListener('Timer1', function(e) {//время таймера1 |
||||
|
||||
document.getElementById("Timer_slider1").innerHTML =e.data; |
||||
document.getElementById("timer1").innerHTML = e.data; |
||||
|
||||
updateSliderPosition1(e.data); |
||||
}, false); |
||||
|
||||
source.addEventListener('Timer2', function(e) {//время таймера2 |
||||
document.getElementById("Timer_slider2").innerHTML =e.data; |
||||
document.getElementById("timer2").innerHTML = e.data; |
||||
updateSliderPosition2(e.data); |
||||
}, false); |
||||
|
||||
|
||||
} |
||||
function updateSliderTimer1(element) { |
||||
var sliderValue1 = document.getElementById("Timer_slider1").value;//В следующей строке отображается текущее значение слайдера по его идентификатору и сохраняется в переменной JavaScript sliderValue |
||||
|
||||
document.getElementById("timer1").innerHTML = sliderValue1;//После этого мы устанавливаем метку слайдера (идентификатор которой - timer1) на значение, сохраненное в переменной sliderValue. |
||||
|
||||
var xhr = new XMLHttpRequest(); |
||||
xhr.open("GET", "/slider1?value="+sliderValue1, true); |
||||
xhr.send(); |
||||
updateSliderPosition1(sliderValue1); |
||||
} |
||||
function updateSliderTimer2(element) { |
||||
|
||||
var sliderValue2 = document.getElementById("Timer_slider2").value; |
||||
|
||||
document.getElementById("timer2").innerHTML = sliderValue2; |
||||
|
||||
var xhr = new XMLHttpRequest(); |
||||
xhr.open("GET", "/slider2?value="+sliderValue2, true); |
||||
xhr.send(); |
||||
updateSliderPosition2(sliderValue2); |
||||
} |
||||
|
||||
|
||||
function updateSliderPosition1(value) {//обновление положения ползунка т1 |
||||
const slider = document.getElementById('Timer_slider1'); |
||||
slider.value = value; |
||||
} |
||||
function updateSliderPosition2(value) {//обновление положения ползунка т2 |
||||
const slider = document.getElementById('Timer_slider2'); |
||||
slider.value = value; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,192 @@ |
||||
|
||||
<!DOCTYPE HTML><html> |
||||
|
||||
<head> |
||||
<title>ESP-NOW DASHBOARD</title> |
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="icon" href="favicon.ico"> |
||||
|
||||
<link rel="icon" type="png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="png" sizes="16x16" href="favicon-16x16.png"> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
</head> |
||||
<body> |
||||
|
||||
<div id="content1"> |
||||
<div class="topnav"> |
||||
<p><h3>ESP-Домашний сервер</h3><span class="data"></span><span id="dataserv">%dataserv%</span></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="top2"> |
||||
|
||||
<nav1><a href="index.html" title="главное меню"> Главное меню </a></nav1> |
||||
|
||||
<nav1><a href="setting.html" title="настройки"> настройки </a></nav1> |
||||
|
||||
<nav1><a href="inform.html" title="информация"> информация </a></nav1> |
||||
|
||||
</div> |
||||
<div style="text-align: center;"> |
||||
<div id="contentinfo"> |
||||
<h1>Управление</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Time <span id="tim2"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||
</div> |
||||
<div class="card but"> |
||||
%BUTTONPLACEHOLDER1% |
||||
</div> |
||||
|
||||
<div class="card but"> |
||||
%BUTTONPLACEHOLDER2% |
||||
</div> |
||||
|
||||
<div class="card but"> |
||||
%BUTTONPLACEHOLDER3% |
||||
</div> |
||||
<div class="card but"> |
||||
%BUTTONPLACEHOLDER4% |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
<div id="clear"> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="top"> |
||||
<font size="2" > </font> |
||||
<font color="#CF7071" size="3"><span id="timeserv1">0:00</span></font> |
||||
</div> |
||||
|
||||
|
||||
<div id="clear"> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
|
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws'); |
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета |
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные |
||||
var tabd=event.data; |
||||
|
||||
|
||||
|
||||
if(isJsonString(tabd)==1) |
||||
{var data = JSON.parse(event.data);//получаем и парсим выходы jsonStringout={"id":"out","out1":"101"} |
||||
if (data.id === 'out') { |
||||
const out = Array.from(data.out1).map(Number);//"101"=>{1,0,1} строку в массив |
||||
console.log("readings", out); |
||||
if(out[0]==1){ document.getElementById("4").checked = true;} |
||||
else{document.getElementById("4").checked = false;} |
||||
if(out[1]==1){ document.getElementById("26").checked = true;} |
||||
else{document.getElementById("26").checked = false;} |
||||
if(out[2]==1){ document.getElementById("27").checked = true;} |
||||
else{document.getElementById("27").checked = false;} |
||||
if(out[3]==1){ document.getElementById("55").checked = true;} |
||||
else{document.getElementById("55").checked = false;} |
||||
}; |
||||
if (data.id === '2') { |
||||
console.log("readings", event.data); |
||||
document.getElementById("t1").innerHTML = data.tkom1; |
||||
document.getElementById("h1").innerHTML = data.hkom1; |
||||
}; |
||||
if (data.label3 === 'count2') { |
||||
document.getElementById("timeserv1").innerHTML = data.value; |
||||
}; |
||||
|
||||
} |
||||
|
||||
|
||||
}; |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета |
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
|
||||
function isJsonString(str) {//проверка строки на json |
||||
try { |
||||
JSON.parse(str); |
||||
} catch (e) { |
||||
//console.log("isJsonString", false); |
||||
return false; |
||||
|
||||
} |
||||
//console.log("isJsonString", true); |
||||
return true; |
||||
} |
||||
|
||||
function toggleCheckbox(element) {//вкл чекбокса передaть на сервер (element.id номер бокса)состояние(state=1или0) |
||||
// var xhr = new XMLHttpRequest(); |
||||
console.log("toggleCheckbox", element.checked); |
||||
const outData = { |
||||
ido :"", |
||||
out:"" |
||||
} |
||||
outData.ido=element.id; |
||||
if(element.checked) |
||||
{ //xhr.open("GET", "/update?output="+element.id+"&state=1", true) |
||||
|
||||
outData.out='1'; |
||||
// var out1 = document.getElementsById('4');// |
||||
// var out2 = document.getElementsById('26');// |
||||
// var out3 = document.getElementsById('27');// |
||||
console.log("ON", element.id); |
||||
// webSocket.send(jsonData); |
||||
} |
||||
else { outData.out='0'; |
||||
console.log("OFF", element.id); } |
||||
const jsonout = JSON.stringify(outData); |
||||
//console.log("JSON", jsonout);//{"ido":"4","out":1} |
||||
webSocket.send(jsonout); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,109 @@ |
||||
|
||||
<!DOCTYPE HTML><html> |
||||
|
||||
<head> |
||||
<title>ESP-NOW DASHBOARD</title> |
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="icon" href="favicon.ico"> |
||||
|
||||
<link rel="icon" type="png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="png" sizes="16x16" href="favicon-16x16.png"> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
</head> |
||||
<body> |
||||
|
||||
<div id="content1"> |
||||
<div class="topnav"> |
||||
<p><h3>ESP-Домашний сервер</h3><span class="data"></span><span id="dataserv">%dataserv%</span></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="top2"> |
||||
|
||||
<nav1><a href="index.html" title="главное меню"> Главное меню </a></nav1> |
||||
|
||||
<nav1><a href="setting.html" title="настройки"> настройки </a></nav1> |
||||
|
||||
<nav1><a href="inform.html" title="информация"> информация </a></nav1> |
||||
|
||||
</div> |
||||
<div style="text-align: center;"> |
||||
<div id="contentinfo"> |
||||
<h1>Управление</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Time <span id="tim2"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
<div id="clear"> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
</div> |
||||
<div align="center"> |
||||
<form> |
||||
<input type="button" value="Войти на страницу" onClick="Input()"> |
||||
</form> |
||||
<div id="clear"> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="top"> |
||||
<font size="2" > </font> |
||||
<font color="#CF7071" size="3"><span id="timeserv1">0:00</span></font> |
||||
</div> |
||||
|
||||
|
||||
<div id="clear"> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
function Input(){ |
||||
login_ok = false; |
||||
user_name = ""; |
||||
password = ""; |
||||
user_name = prompt("Логин",""); |
||||
user_name = user_name.toLowerCase(); |
||||
password = prompt("Пароль",""); |
||||
password = password.toLowerCase(); |
||||
if (user_name=="serg" && password=="1974") { |
||||
login_ok = true; |
||||
window.location = "index.html"; |
||||
} |
||||
|
||||
|
||||
if (login_ok==false) alert("Неверный логин или пароль!"); |
||||
} |
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,68 @@ |
||||
void Nrfsetup() |
||||
{ |
||||
if (! radio.begin()) |
||||
{ |
||||
// if(!SD.begin()){
|
||||
Serial.println("Radio is failed"); |
||||
// return;
|
||||
} |
||||
else |
||||
{ |
||||
Serial.println("Radio begin"); |
||||
} |
||||
radio.setChannel(100); |
||||
radio.setPayloadSize(16);//должно быть16
|
||||
radio.setAddressWidth(5); |
||||
radio.setAutoAck( 0 ,false); |
||||
radio.setCRCLength(RF24_CRC_16); |
||||
radio.setDataRate(RF24_2MBPS); |
||||
radio.openReadingPipe(0,pip); |
||||
radio.startListening(); |
||||
} |
||||
|
||||
void nrf() |
||||
{ |
||||
if (radio.available()){
|
||||
radio.read(msg,16);
|
||||
esp_task_wdt_reset();//reset WDT
|
||||
Serial.println(msg); |
||||
parsmsg(); |
||||
delay(0); |
||||
if (radio.available()){radio.read(msg,16);
|
||||
parsmsg();} |
||||
delay(500); |
||||
if (radio.available()){radio.read(msg,16);
|
||||
parsmsg();} |
||||
delay(500); |
||||
if (radio.available()){radio.read(msg,16);
|
||||
parsmsg();} |
||||
delay(500); |
||||
if (radio.available()){radio.read(msg,16);
|
||||
parsmsg();} |
||||
delay(500); |
||||
if (radio.available()){radio.read(msg,16);
|
||||
parsmsg();} |
||||
delay(0); |
||||
JSstringK();//создаем строку для сайта
|
||||
delay(0); |
||||
|
||||
|
||||
if(nt==2){saveul();}//t9 T2
|
||||
if(nt==3){savebalk();}//t1 T3
|
||||
if(nt==4){savek2();}//t2 T4
|
||||
if(nt==5){savek1();}//t3 T5
|
||||
if(nt==7){savekor();}//t5 T6
|
||||
if(nt==9){saveakva();}//t7 T7
|
||||
delay(0); |
||||
if (radio.available()){radio.read(msg,16);} |
||||
} |
||||
//t1+138c347v524h5 балкон
|
||||
//t2+243c401v528h моя комната
|
||||
// t3+230c357v469h зал
|
||||
// t5+230c357v469h коридор
|
||||
//9d+088h866s00v улица восток
|
||||
//t7+247c251c243c024 t1 t2 t3 akva
|
||||
|
||||
delay(0); |
||||
|
||||
} |
||||
@ -0,0 +1,140 @@ |
||||
void ntp() |
||||
{ |
||||
// while(!timeClient.update()) {
|
||||
// timeClient.forceUpdate();
|
||||
//}
|
||||
Serial.println("NTP"); |
||||
ntp_on=0; |
||||
if(!timeClient.update()) { |
||||
for(int i=0; i<2 && !timeClient.update(); i++) |
||||
{timeClient.forceUpdate(); |
||||
if(i<1)//проверка подкл к NTP
|
||||
{ntp_on=1; |
||||
} |
||||
else |
||||
{ |
||||
ntp_on=0;
|
||||
} |
||||
} |
||||
}
|
||||
else{ |
||||
ntp_on=1;
|
||||
} |
||||
|
||||
|
||||
//если подкл
|
||||
if(ntp_on==1) |
||||
{ // The formattedDate comes with the following format:
|
||||
// 2018-05-28T16:00:13Z
|
||||
// We need to extract date and time
|
||||
// formattedDate = timeClient.getFormattedDate();
|
||||
formattedTime =timeClient.getFormattedTime(); |
||||
Serial.println(formattedTime); |
||||
Serial.println("NTP3"); |
||||
// getDay
|
||||
//getHours
|
||||
//getMinutes
|
||||
//getSeconds
|
||||
//getFormattedTime
|
||||
// formattedDate =timeClient.getFormattedDate();
|
||||
// int splitT = formattedDate.indexOf("T");
|
||||
// dayStamp = formattedDate.substring(0, splitT);
|
||||
// Serial.println(timeClient.getDay());
|
||||
|
||||
// Extract time
|
||||
// timeStamp = formattedDate.substring(splitT+1, formattedDate.length()-1);
|
||||
// Serial.println("ntp");
|
||||
// Serial.println(timeClient.getEpochTime());
|
||||
stamp.getDateTime(timeClient.getEpochTime()); |
||||
EpochTime=timeClient.getEpochTime(); |
||||
Serial.println(EpochTime); |
||||
// забираем вот так
|
||||
// Serial.println(stamp.year);
|
||||
Serial.println(stamp.month); |
||||
Serial.println(stamp.day); |
||||
// Serial.println(stamp.hour);
|
||||
// Serial.println(stamp.minute);
|
||||
// Serial.println(stamp.second);
|
||||
Serial.println(stamp.dayOfWeek); |
||||
timeserv=formatTimeDigits(stamp.hour,stamp.minute);
|
||||
Serial.println("time"); |
||||
Serial.println(timeserv); |
||||
//dataserv=formatDateDigits(stamp.day, stamp.month, stamp.year);
|
||||
//***************************Из ntp в ds 3231************************************
|
||||
DateTime now = rtc.now(); |
||||
if((stamp.day==now.day())&&(stamp.hour==now.hour())) |
||||
{ rtc.adjust(DateTime(stamp.year,stamp.month, stamp.day, stamp.hour,stamp.minute,stamp.second)); |
||||
Serial.println("NTP time write"); |
||||
} |
||||
|
||||
hour1=stamp.hour; |
||||
min1=stamp.minute; |
||||
|
||||
dataserv=stamp.day; |
||||
munthserv=strm[stamp.month-1] ; |
||||
weekserv=strweek[stamp.dayOfWeek]; |
||||
// tweekday=stamp.dayOfWeek;//1-7
|
||||
//Serial.println(timeserv);
|
||||
//Serial.println(dataserv);
|
||||
} |
||||
else |
||||
{Serial.println("NTP not c0nnect");//EpochTime=10983 3:03:03
|
||||
//EpochTime=EpochTime;//если NTP не ответил читаем EpochTime с СД карты
|
||||
} |
||||
|
||||
} |
||||
|
||||
char *formatTimeDigits(int hour, int minute) |
||||
{ |
||||
char *time_str = new char[5]; |
||||
time_str[0] = '0' + (hour / 10); |
||||
time_str[1] = '0' + (hour % 10); |
||||
time_str[2] = ':'; |
||||
time_str[3] = '0' + (minute / 10); |
||||
time_str[4] = '0' + (minute % 10); |
||||
time_str[5] = '\0'; |
||||
|
||||
return time_str; |
||||
} |
||||
|
||||
char *formatDateDigits(int date, int mounth, int year) |
||||
{ |
||||
char *date_str = new char[9]; |
||||
|
||||
date_str[1] = '0' + (date % 10); |
||||
date_str[2] = '/'; |
||||
date_str[0] = '0' + (date / 10); |
||||
date_str[3] = '0' + (mounth / 10); |
||||
date_str[4] = '0' + (mounth % 10); |
||||
date_str[5] = '/'; |
||||
date_str[6] = '0' + ((year % 100) / 10); |
||||
date_str[7] = '0' + (year % 10); |
||||
date_str[8] = '\0'; |
||||
|
||||
return date_str; |
||||
} |
||||
|
||||
void ntphome() |
||||
{DateTime now = rtc.now(); |
||||
// stamp.getDateTime(timeClient.getEpochTime());
|
||||
// timeserv=formatTimeDigits(stamp.hour,stamp.minute);
|
||||
timeserv=formatTimeDigits(now.hour(),now.minute());
|
||||
// hour1=stamp.hour;
|
||||
hour1=now.hour(); |
||||
//min1=stamp.minute;
|
||||
min1=now.minute(); |
||||
|
||||
// dataserv=formatDateDigits(stamp.day, stamp.month, stamp.year);
|
||||
//dataserv=stamp.day;
|
||||
dataserv=now.day(); |
||||
data1=now.day(); |
||||
munthserv=strm[now.month()-1] ; |
||||
|
||||
weekserv=strweek[now.dayOfTheWeek()]; |
||||
|
||||
tweekday=now.dayOfTheWeek(); |
||||
month1=now.month(); |
||||
year1=now.year(); |
||||
Serial.println("time"); |
||||
Serial.println(timeserv); |
||||
} |
||||
@ -0,0 +1,74 @@ |
||||
void outconvert() |
||||
{ int led; |
||||
bool outl; |
||||
int j=0; |
||||
for (int i = 0; i < ledout.length() ; i++) {//перебираем строку данных {"ido":"4","out":"1"}
|
||||
|
||||
if (ledout[i]==':') |
||||
{j++; |
||||
if (j==1)//первое :
|
||||
{ if (ledout[i+3]!='\"') |
||||
{ |
||||
led=int(ledout[i+2] - '0')*10+int(ledout[i+3] - '0'); |
||||
} |
||||
else |
||||
{ led=int(ledout[i+2] - '0'); |
||||
} |
||||
} |
||||
if (j==2)//второе :
|
||||
{outl=int(ledout[i+2] - '0'); |
||||
} |
||||
} |
||||
|
||||
|
||||
} |
||||
|
||||
switch (led) { |
||||
case 4:
|
||||
|
||||
state1=outl;
|
||||
gpio[0]=outl; |
||||
gpio[3]=0; |
||||
break; |
||||
case 26:
|
||||
state2=outl;
|
||||
gpio[1]=outl; |
||||
gpio[3]=0; |
||||
// BTimer2[0]=3;
|
||||
break; |
||||
case 27:
|
||||
state3=outl;
|
||||
gpio[2]=outl; |
||||
gpio[3]=0; |
||||
// BTimer3[0]=3;
|
||||
break; |
||||
case 55:
|
||||
//таймер или кнопки
|
||||
//state1=outl;
|
||||
gpio[3]=outl; |
||||
|
||||
break; |
||||
} |
||||
if( gpio[3]==0)//1-управление выходами через таймер 0- через кнопки
|
||||
{ BTimer1[0]=3; |
||||
BTimer2[0]=3; |
||||
BTimer3[0]=3; |
||||
} |
||||
else |
||||
{ |
||||
BTimer1[0]=2; |
||||
BTimer2[0]=2; |
||||
BTimer3[0]=2; |
||||
btime(); |
||||
} |
||||
digitalWrite(led, outl);
|
||||
Serial.print(state1); |
||||
Serial.print(state2); |
||||
Serial.println(state3); |
||||
Serial.print("led");
|
||||
Serial.print(led); |
||||
Serial.print(":");
|
||||
Serial.println(outl);
|
||||
|
||||
} |
||||
|
||||
@ -0,0 +1,394 @@ |
||||
|
||||
void parsmsg() |
||||
{ |
||||
//int tkom1=0;//температура
|
||||
//int hkom1=0;//влажность
|
||||
//int batkom1=0;
|
||||
//String timekom1;//время прихода данных комната1
|
||||
|
||||
//int tkom2=0;
|
||||
//int hkom2=0;
|
||||
//int batkom2=0;
|
||||
//String timekom2;
|
||||
|
||||
//int tkor=0;
|
||||
//int hkor=0;
|
||||
//int batkor=0;
|
||||
//String timekor;
|
||||
|
||||
//int tbal=0;
|
||||
//int hbal=0;
|
||||
//int batbal=0;
|
||||
//String timebal;
|
||||
|
||||
//String timebal;
|
||||
//t1+138c347v524h5 балкон
|
||||
//t2+243c401v528h моя комната
|
||||
// t3+230c357v469h зал
|
||||
// t5+230c357v469h коридор
|
||||
//9d+088h866s00v улица восток
|
||||
//timeul1
|
||||
//tul1
|
||||
//hul1
|
||||
//osv1
|
||||
//char msg[16];принятое сообщение
|
||||
int tdat;//температура
|
||||
int hdat;//влажность
|
||||
int vdat;//напряж батареи датчика
|
||||
int zndat; |
||||
int osv; |
||||
char token9[] = "9d";//улица
|
||||
char token11[] = "t1";//датчики
|
||||
char token12[] = "t2";//датчики
|
||||
char token13[] = "t3";//датчики
|
||||
char token14[] = "t4";//датчики
|
||||
char token15[] = "t5";//датчики
|
||||
char token17[] = "t7";//датчики akva
|
||||
|
||||
int n=0; |
||||
int p=0;
|
||||
boolean chet=0;
|
||||
char c ; |
||||
delay(0);
|
||||
//***************************
|
||||
Serial.println (msg); |
||||
for (int j=0 ; j<15 ;j++)
|
||||
{ c=msg[j];//принятая с премника перемнная
|
||||
|
||||
|
||||
if (p==9) |
||||
{ if (c==token9[1]){p=99;}//данные с ул датчика восток
|
||||
else{ |
||||
p=0;} |
||||
} |
||||
if (p==101)//cравнение второго символа на соответствие t 1
|
||||
{ if (c==token11[1]){p=111;} |
||||
|
||||
} |
||||
if (p==101)//cравнение второго символа на соответствие t 2
|
||||
{ if (c==token12[1]){p=112;} |
||||
|
||||
} |
||||
if (p==101)//cравнение второго символа на соответствие t 3
|
||||
{ if (c==token13[1]){p=113;} |
||||
|
||||
} |
||||
if (p==101)//cравнение второго символа на соответствие t 4
|
||||
{ if (c==token14[1]){p=114;} |
||||
|
||||
} |
||||
if (p==101)//cравнение второго символа на соответствие t 4
|
||||
{ if (c==token17[1]){p=117;} |
||||
|
||||
} |
||||
if (p==101)//cравнение второго символа на соответствие t 5
|
||||
{ if (c==token15[1]){p=115;} |
||||
else{ |
||||
p=0;} |
||||
} |
||||
//*************************************************
|
||||
delay(0); |
||||
if (p==99)
|
||||
{// myFile.print(c);//d+237h895s05v
|
||||
nt=2; |
||||
timeul1=timeserv;//время получения данных
|
||||
n++; |
||||
if (n==2){ |
||||
if (c==45){zndat=1;//-
|
||||
}//znak
|
||||
else |
||||
{zndat=2;//+
|
||||
} |
||||
} |
||||
if (n==3) {tdat=(c-48)*100;} //температура
|
||||
if (n==4){tdat=(c-48)*10+tdat;} |
||||
if (n==5){ |
||||
tdat=(c-48)+tdat; |
||||
|
||||
if(zndat==1){tul1="-"+String (tdat/10)+"."+String (tdat%10); //температура знак -230 -23.0
|
||||
} |
||||
else |
||||
{tul1=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||
} |
||||
} |
||||
if (n==7){hdat=(c-48)*100;}//влажность
|
||||
if (n==8){hdat=(c-48)*10+hdat;} |
||||
if (n==9){ |
||||
hdat=(c-48)+hdat; |
||||
hul1=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||
} |
||||
if (n==11){osv=10*(c-48);}//освещенность
|
||||
if (n==12) |
||||
{osv=osv+(c-48); |
||||
if(osv>99){osv=99;} |
||||
osv1=String (osv)+"%"; |
||||
}//sun
|
||||
// hourdu=t.hour;//время прихода данных час
|
||||
// mindu=t.min;//мин
|
||||
|
||||
} |
||||
//*****************************************
|
||||
delay(0); |
||||
//*****************датчики температуры переносные***********************
|
||||
//************************T1****************************************************
|
||||
if (p==111) //выделение данных из принятой строки
|
||||
{ timebal=timeserv;//время получения данных
|
||||
nt=3; |
||||
//byte ntdat;номер датчика
|
||||
//byte zndat;знак температуры 0+
|
||||
//int tdat;температура
|
||||
//int hdat;влажность
|
||||
//int vdat;напряж батареи датчика
|
||||
n++; |
||||
if (n==2){ |
||||
if (c==45){zndat=1;//-
|
||||
}//znak
|
||||
else |
||||
{zndat=0;//+
|
||||
} |
||||
} |
||||
if (n==3) {tdat=(c-48)*100;} //температура
|
||||
if (n==4){tdat=(c-48)*10+tdat;} |
||||
if (n==5) |
||||
{tdat=(c-48)+tdat; |
||||
tbal=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||
} |
||||
|
||||
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||
if (n==8){vdat=(c-48)*10+vdat;} |
||||
if (n==9) |
||||
{vdat=(c-48)+vdat; |
||||
batbal=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||
} |
||||
if (n==11){hdat=(c-48)*100;}//влажность
|
||||
if (n==12) |
||||
{hdat=(c-48)*10+hdat; |
||||
} |
||||
if (n==13) |
||||
{hdat=(c-48)+hdat; |
||||
hbal=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||
} |
||||
|
||||
} |
||||
delay(0); |
||||
//**************************************** T2
|
||||
if (p==112) //выделение данных из принятой строки
|
||||
{timekom2=timeserv;//время получения данных
|
||||
nt=4; |
||||
n++; |
||||
if (n==2){ |
||||
if (c==45){zndat=1;//-
|
||||
}//znak
|
||||
else |
||||
{zndat=0;//+
|
||||
} |
||||
} |
||||
if (n==3) {tdat=(c-48)*100;} //температура
|
||||
if (n==4){tdat=(c-48)*10+tdat;} |
||||
if (n==5) |
||||
{tdat=(c-48)+tdat; |
||||
tkom2=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||
} |
||||
|
||||
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||
if (n==8){vdat=(c-48)*10+vdat;} |
||||
if (n==9) |
||||
{vdat=(c-48)+vdat; |
||||
batkom2=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||
} |
||||
if (n==11){hdat=(c-48)*100;}//влажность
|
||||
if (n==12) |
||||
{hdat=(c-48)*10+hdat;
|
||||
} |
||||
if (n==13) |
||||
{hdat=(c-48)+hdat; |
||||
hkom2=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||
} |
||||
|
||||
} |
||||
delay(0); |
||||
//****************************************
|
||||
//**************************************** T3
|
||||
if (p==113) //выделение данных из принятой строки
|
||||
{// myFile.print(c);//t2+103c375v299h9
|
||||
nt=5; |
||||
timekom1=timeserv;//время получения данных
|
||||
n++; |
||||
if (n==2){ |
||||
if (c==45){zndat=1;//-
|
||||
}//znak
|
||||
else |
||||
{zndat=0;//+
|
||||
} |
||||
} |
||||
if (n==3) {tdat=(c-48)*100;} //температура
|
||||
if (n==4){tdat=(c-48)*10+tdat;} |
||||
if (n==5) |
||||
{tdat=(c-48)+tdat; |
||||
tkom1=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||
} |
||||
|
||||
|
||||
|
||||
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||
if (n==8){vdat=(c-48)*10+vdat;} |
||||
if (n==9) |
||||
{vdat=(c-48)+vdat; |
||||
batkom1=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||
} |
||||
if (n==11){hdat=(c-48)*100;}//влажность
|
||||
if (n==12) |
||||
{hdat=(c-48)*10+hdat; |
||||
} |
||||
if (n==13) |
||||
{hdat=(c-48)+hdat; |
||||
hkom1=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||
} |
||||
|
||||
} |
||||
//**************************************** T4 ****************************
|
||||
/* if (p==114) //выделение данных из принятой строки
|
||||
{// myFile.print(c);//t1+103c375v299h9
|
||||
ntdat=4; |
||||
if(chet==0) |
||||
{ if( hourd4==t.hour) |
||||
{fh=1; |
||||
} |
||||
else |
||||
{fh=0; |
||||
} |
||||
chet=1; |
||||
} |
||||
hourd4=t.hour; |
||||
mind4=t.min;
|
||||
//byte ntdat;номер датчика
|
||||
//byte zndat;знак температуры 0+
|
||||
//int tdat;температура
|
||||
//int hdat;влажность
|
||||
//int vdat;напряж батареи датчика
|
||||
n++; |
||||
if (n==2){ |
||||
if (c==45){zndat=1;//-
|
||||
}//znak
|
||||
else |
||||
{zndat=0;//+
|
||||
} |
||||
} |
||||
if (n==3) {tdat=(c-48)*100;} //температура
|
||||
if (n==4){tdat=(c-48)*10+tdat;} |
||||
if (n==5) |
||||
{tdat=(c-48)+tdat; |
||||
for (int u =22 ; u >= 0; u = u--) |
||||
{ |
||||
t4[u+1]=t4[u]; |
||||
} |
||||
if(zndat==1)//-
|
||||
{t14=tdat+1000; |
||||
t4[0]=t14; |
||||
} |
||||
else |
||||
{t14=tdat; |
||||
t4[0]=t14; |
||||
} |
||||
} |
||||
|
||||
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||
if (n==8){vdat=(c-48)*10+vdat;} |
||||
if (n==9) |
||||
{vdat=(c-48)+vdat; |
||||
bat[3]=vdat; |
||||
} |
||||
if (n==11){hdat=(c-48)*100;}//влажность
|
||||
if (n==12) |
||||
{hdat=(c-48)*10+hdat; |
||||
for (int u =22 ; u >= 0; u = u--) |
||||
{ |
||||
h4[u+1]=h4[u]; |
||||
} |
||||
h4[0]=hdat; |
||||
|
||||
} |
||||
if (n==13) |
||||
{hdat=(c-48)+hdat; |
||||
h14=hdat; |
||||
} |
||||
|
||||
}*/ |
||||
delay(0); |
||||
//**************************************** T5
|
||||
if (p==115) //выделение данных из принятой строки
|
||||
{// myFile.print(c);//t2+103c375v299h9
|
||||
timekor=timeserv;//время получения данных
|
||||
nt=7; |
||||
n++; |
||||
if (n==2){ |
||||
if (c==45){zndat=1;//-
|
||||
}//znak
|
||||
else |
||||
{zndat=0;//+
|
||||
} |
||||
} |
||||
if (n==3) {tdat=(c-48)*100;} //температура
|
||||
if (n==4){tdat=(c-48)*10+tdat;} |
||||
if (n==5) |
||||
{tdat=(c-48)+tdat; |
||||
tkor=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||
} |
||||
|
||||
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||
if (n==8){vdat=(c-48)*10+vdat;} |
||||
if (n==9) |
||||
{vdat=(c-48)+vdat; |
||||
batkor=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||
} |
||||
if (n==11){hdat=(c-48)*100;}//влажность
|
||||
if (n==12) |
||||
{hdat=(c-48)*10+hdat; |
||||
} |
||||
if (n==13) |
||||
{hdat=(c-48)+hdat; |
||||
hkor=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||
} |
||||
|
||||
}
|
||||
delay(0);
|
||||
//*******************************************************************************
|
||||
//**************************************** T7
|
||||
if (p==117) //выделение данных из принятой строки
|
||||
{// myFile.print(c);//t7+247c251c243c024
|
||||
timeakva=timeserv;//время получения данных
|
||||
nt=9;// номер терм для сайта
|
||||
n++; |
||||
if (n==3) {tdat=(c-48)*100;} //температура t1
|
||||
if (n==4){tdat=(c-48)*10+tdat;} |
||||
if (n==5) |
||||
{tdat=(c-48)+tdat; |
||||
takva1=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||
} |
||||
|
||||
if (n==7){vdat=(c-48)*100;}//t2
|
||||
if (n==8){vdat=(c-48)*10+vdat;} |
||||
if (n==9) |
||||
{vdat=(c-48)+vdat; |
||||
takva2=String (vdat/10)+"."+String (vdat%10);//t2
|
||||
} |
||||
if (n==11){hdat=(c-48)*100;}//t3
|
||||
if (n==12){hdat=(c-48)*10+hdat;} |
||||
if (n==13) |
||||
{hdat=(c-48)+hdat; |
||||
takva3=String (hdat/10)+"."+String (hdat%10);//t3
|
||||
|
||||
} |
||||
|
||||
|
||||
} |
||||
delay(0);
|
||||
//*******************************************************************************
|
||||
|
||||
if ((c==token9[0])&&(p==0)){p=9;}
|
||||
if ((c==token11[0])&&(p==0)){p=101;}//cравнение первого символа на соответствие t
|
||||
}//for
|
||||
//*************************************************
|
||||
|
||||
|
||||
}//void pars
|
||||
@ -0,0 +1,60 @@ |
||||
String processor(const String& var){ |
||||
//Serial.println(var);
|
||||
if(var == "BUTTONPLACEHOLDER1"){//вставка на странице(если в HTML нашли BUTTONPLACEHOLDER1 то вставляем кнопки)
|
||||
String buttons =""; |
||||
//отправка значения состояния перключателей checked- включен ""-выключен
|
||||
buttons+= "<h4>Выход 1</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"4\" " + outputState(4) + "><span class=\"slider\"></span></label>"; |
||||
|
||||
return buttons; |
||||
} |
||||
if(var == "BUTTONPLACEHOLDER2"){//вставка на странице(если в HTML нашли BUTTONPLACEHOLDER2 то вставляем кнопки)
|
||||
String buttons =""; |
||||
//отправка значения состояния перключателей checked- включен ""-выключен
|
||||
|
||||
buttons += "<h4>Выход 2</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"26\" " + outputState(26) + "><span class=\"slider\"></span></label>"; |
||||
|
||||
return buttons; |
||||
} |
||||
if(var == "BUTTONPLACEHOLDER3"){//вставка на странице(если в HTML нашли BUTTONPLACEHOLDER3 то вставляем кнопки)
|
||||
String buttons =""; |
||||
//отправка значения состояния перключателей checked- включен ""-выключен
|
||||
|
||||
buttons += "<h4>Выход 3</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"27\" " + outputState(27) + "><span class=\"slider\"></span></label>"; |
||||
return buttons; |
||||
} |
||||
if(var == "BUTTONPLACEHOLDER4"){//вставка на странице(если в HTML нашли BUTTONPLACEHOLDER4 то вставляем кнопки)
|
||||
String buttons =""; |
||||
//отправка значения состояния перключателей checked- включен ""-выключен
|
||||
//кнопка таймера (если вкл то выходы работают по таймерам если нет то по кнопке
|
||||
buttons += "<h4>Таймер</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"55\" " + outputState55(55) + "><span class=\"slider\"></span></label>"; |
||||
return buttons; |
||||
} |
||||
if(var == "BUTTON"){//вставка на странице(если в HTML нашли BUTTON то вставляем кнопки)
|
||||
String buttons =""; |
||||
//отправка значения состояния перключателей checked- включен ""-выключен
|
||||
buttons+= "<h4>Output - GPIO 4 </h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"4\" " + outputState(4) + "><span class=\"slider\"></span></label>"; |
||||
buttons += "<h4>Output - GPIO 26</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"26\" " + outputState(26) + "><span class=\"slider\"></span></label>"; |
||||
buttons += "<h4>Output - GPIO 27</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"27\" " + outputState(27) + "><span class=\"slider\"></span></label>"; |
||||
return buttons; |
||||
} |
||||
return String(); |
||||
} |
||||
|
||||
//************************************************
|
||||
|
||||
String outputState(int out){ |
||||
if(digitalRead(out)){ |
||||
return "checked"; |
||||
} |
||||
else { |
||||
return ""; |
||||
} |
||||
} |
||||
String outputState55(int out){ |
||||
if(gpio[3]==1){ |
||||
return "checked"; |
||||
} |
||||
else { |
||||
return ""; |
||||
} |
||||
} |
||||
@ -0,0 +1,30 @@ |
||||
void vrem()//время работы сервера
|
||||
{ |
||||
|
||||
int time17 = millis()/1000; |
||||
delay(0); |
||||
if (time17/60/60<10) { Serial.print ("0"); } |
||||
Serial.print (time17/60/60); |
||||
Serial.print (":"); |
||||
if (time17/60%60<10) { Serial.print ("0"); } |
||||
Serial.print ((time17/60)%60); |
||||
Serial.print (":"); |
||||
if (time17%60<10) { Serial.print ("0"); } |
||||
Serial.println (time17%60); |
||||
delay(0); |
||||
String q1=String(time17/60/60, DEC); |
||||
delay(0); |
||||
String q2=String((time17/60)%60, DEC); |
||||
delay(0); |
||||
String q3=String(time17%60, DEC); |
||||
delay(0); |
||||
if ((time17/60)%60<10) |
||||
{ |
||||
t10=String(time17/60/60, DEC)+":"+"0"+String((time17/60)%60, DEC); |
||||
} |
||||
else |
||||
{t10=String(time17/60/60, DEC)+":"+String((time17/60)%60, DEC); |
||||
} |
||||
delay(0);
|
||||
//t10 =q1+":"+q2+":"+q3 ;
|
||||
} |
||||
@ -0,0 +1,41 @@ |
||||
void settimer() { |
||||
|
||||
|
||||
/* LED pin */ |
||||
//int led = 14;
|
||||
/* LED state */ |
||||
//volatile byte state = LOW;
|
||||
// Use 1st timer of 4 (counted from zero).
|
||||
// Set 80 divider for prescaler (see ESP32 Technical Reference Manual for more
|
||||
// info).
|
||||
timer = timerBegin(2, 80, true); |
||||
|
||||
/* Attach onTimer function to our timer */ |
||||
// timerAttachInterrupt(timer, &onTimer, true);
|
||||
timerAttachInterrupt(timer, &onTimer, true); |
||||
/* Set alarm to call onTimer function every second 1 tick is 1us
|
||||
=> 1 second is 1000000us */ |
||||
/* Repeat the alarm (third parameter) */ |
||||
timerAlarmWrite(timer, 5000000, true); |
||||
/* Start an alarm */ |
||||
timerAlarmEnable(timer); |
||||
// Serial.println("start timer");
|
||||
|
||||
} |
||||
|
||||
void IRAM_ATTR onTimer() |
||||
{ |
||||
EpochTime=EpochTime+5; |
||||
esp_task_wdt_reset();//reset WDT
|
||||
//Serial.print("EpochTime=");
|
||||
//Serial.println(EpochTime);
|
||||
// Increment the counter and set the time of ISR
|
||||
// portENTER_CRITICAL_ISR(&timerMux);
|
||||
// isrCounter++;
|
||||
// lastIsrAt = millis();
|
||||
// portEXIT_CRITICAL_ISR(&timerMux);
|
||||
// Give a semaphore that we can check in the loop
|
||||
// xSemaphoreGiveFromISR(timerSemaphore, NULL);
|
||||
// It is safe to use digitalRead/Write here if you want to toggle an output
|
||||
|
||||
} |
||||
@ -0,0 +1,195 @@ |
||||
void timerconvert() |
||||
{ //timerout= {"id":"tout","t1":"100","t2":"010","t3":"001"} подкл таймеров по выходов
|
||||
//String timerdata
|
||||
//{"timer1":["01:00","09:00","10:00","11:00","","","","","",""],"timer2":[
|
||||
// String timerweek={"id":"week","timer1_week":"0111100","timer2_week":"1000011","timer3_week":"0101010"};
|
||||
//(str[1] = 't')
|
||||
//uint16_t BTimer1 [11] = {3, 390, 450, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440}; // массивы всех таймеров для суточных каналов (1 - 4) 0-й элемент отвечает за состояние канала (1 - вкл/ 0 - выкл/ 2 - авто))
|
||||
if (timerdata.startsWith("{\"timer1"))//парсим "timer1":["01
|
||||
{tdat=0; |
||||
int timer=0;//номер таймера
|
||||
//int index =1;// индекс массива таймера
|
||||
// Serial.println("timer");
|
||||
// Serial.println(timerdata.length());
|
||||
// Serial.println(timerdata[12]);
|
||||
for (int i = 0; i < timerdata.length() ; i++) {//перебираем строку данных
|
||||
|
||||
if (timerdata[i]=='[') |
||||
{timer++; |
||||
//********************************************************************
|
||||
if (timer==1) |
||||
{i=i+2; |
||||
for (int j = 1; j < 11 ; j++){ |
||||
if (timerdata[i]!='\"') |
||||
{ |
||||
BTimer1 [j]=((int(timerdata[i] - '0')*10+int(timerdata[i+1] - '0'))*60+(int(timerdata[i+3] - '0')*10+int(timerdata[i+4] - '0'))); |
||||
i=i+8; |
||||
//Serial.println(BTimer1 [j]);
|
||||
} |
||||
else |
||||
{i=i+3; |
||||
BTimer1 [j]=1440;//время неустановлено
|
||||
} |
||||
// Serial.println(timerdata[i]);
|
||||
|
||||
}
|
||||
|
||||
} |
||||
//******************************************************************************
|
||||
if (timer==2) |
||||
{i=i+2; |
||||
for (int j = 1; j < 11 ; j++){ |
||||
|
||||
if (timerdata[i]!='\"') |
||||
{ |
||||
BTimer2 [j]=((int(timerdata[i] - '0')*10+int(timerdata[i+1] - '0'))*60+(int(timerdata[i+3] - '0')*10+int(timerdata[i+4] - '0'))); |
||||
i=i+8; |
||||
//Serial.println(BTimer1 [j]);
|
||||
} |
||||
else |
||||
{i=i+3; |
||||
BTimer2 [j]=1440; |
||||
} |
||||
// Serial.println(timerdata[i]);
|
||||
|
||||
}
|
||||
|
||||
} |
||||
if (timer==3) |
||||
{i=i+2; |
||||
for (int j = 1; j < 11 ; j++){ |
||||
if (timerdata[i]!='\"') |
||||
{ |
||||
BTimer3 [j]=((int(timerdata[i] - '0')*10+int(timerdata[i+1] - '0'))*60+(int(timerdata[i+3] - '0')*10+int(timerdata[i+4] - '0'))); |
||||
i=i+8; |
||||
//Serial.println(BTimer1 [j]);
|
||||
} |
||||
else |
||||
{i=i+3; |
||||
BTimer3 [j]=1440; |
||||
} |
||||
// Serial.println(timerdata[i]);
|
||||
|
||||
}
|
||||
// Serial.println(" ");
|
||||
// for(int a = 0; a < 11; a++)
|
||||
// { Serial.print(BTimer3[a]);
|
||||
// }
|
||||
// Serial.println(" ");
|
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
//******************************************************************************************
|
||||
if (timerweek.startsWith("{\"id\":\"week"))//парсим {"id":"week","timer1_week":"0111100"
|
||||
{tweek=0; |
||||
int timer=0;//номер таймера
|
||||
// Serial.println("week");
|
||||
// Serial.println(timerweek.length());
|
||||
for (int i = 0; i < timerweek.length() ; i++) {//перебираем строку данных
|
||||
if (timerweek[i]==':') |
||||
{timer++; |
||||
if (timer==2)//данные таймера1 идут после вторых двоеточий
|
||||
{i=i+2; |
||||
for (int j = 0; j < 7 ; j++){ |
||||
weekTimer1 [j]=int(timerweek[i+j] - '0');//пребразуем строку "0111100" в массив чисел weekTimer1 [7]=
|
||||
} |
||||
} |
||||
if (timer==3) |
||||
{i=i+2; |
||||
for (int j = 0; j < 7 ; j++){ |
||||
weekTimer2 [j]=int(timerweek[i+j] - '0');//пребразуем строку "0111100" в массив чисел weekTimer1 [7]=
|
||||
} |
||||
} |
||||
if (timer==4) |
||||
{i=i+2; |
||||
for (int j = 0; j < 7 ; j++){ |
||||
weekTimer3 [j]=int(timerweek[i+j] - '0');//пребразуем строку "0111100" в массив чисел weekTimer1 [7]=
|
||||
} |
||||
Serial.print("weekTimer3"); |
||||
for(int a = 0; a < 7; a++) |
||||
{ Serial.print(weekTimer3[a]);
|
||||
} |
||||
Serial.println(""); |
||||
//Serial.println("");
|
||||
// Serial.print("tweekday");
|
||||
//Serial.println(tweekday);
|
||||
} |
||||
} |
||||
} |
||||
} |
||||
// weekTimer1 [7]={0,0,0,0,0,0,0};//недельные установки t1
|
||||
if(weekTimer1 [tweekday-1]==1) |
||||
{BTimer1 [0]=2;//управляем таймером
|
||||
}else |
||||
{ |
||||
BTimer1 [0]=3;//управляем кнопками
|
||||
} |
||||
if(weekTimer2 [tweekday-1]==1) |
||||
{BTimer2 [0]=2;//управляем таймером
|
||||
}else |
||||
{ |
||||
BTimer2 [0]=3;//управляем кнопками
|
||||
} |
||||
if(weekTimer3 [tweekday-1]==1) |
||||
{BTimer3 [0]=2;//управляем таймером
|
||||
}else |
||||
{ |
||||
BTimer3 [0]=3;//управляем кнопками
|
||||
} |
||||
Serial.print("BTimer1 [0]:"); |
||||
Serial.println(BTimer1 [0]); |
||||
Serial.print("BTimer2 [0]:"); |
||||
Serial.println(BTimer2 [0]); |
||||
Serial.print("BTimer3 [0]:"); |
||||
Serial.println(BTimer3 [0]); |
||||
//******************************************************************************************
|
||||
if (timerout.startsWith("{\"id\":\"tout"))//парсим timerout= {"id":"tout","t1":"100","t2":"010","t3":"001"} подкл таймеров по выходов
|
||||
{//tuot=0;
|
||||
int timer=0;//номер таймера
|
||||
// Serial.println("timerout");
|
||||
// Serial.println(timerout.length());
|
||||
for (int i = 0; i < timerout.length() ; i++) {//перебираем строку данных
|
||||
if (timerout[i]==':') |
||||
{timer++; |
||||
if (timer==2)//данные таймера1 идут после вторых двоеточий
|
||||
{i=i+2; |
||||
for (int j = 0; j < 3 ; j++){ |
||||
gpioTimer1[j]=int(timerout[i+j] - '0');//пребразуем строку "011" в массив чисел gpioTimer1 [3]={1,0,0};
|
||||
} |
||||
} |
||||
if (timer==3) |
||||
{i=i+2; |
||||
for (int j = 0; j < 3 ; j++){ |
||||
gpioTimer2[j]=int(timerout[i+j] - '0');//пребразуем строку "011" в массив чисел gpioTimer2 [3]={1,1,0};
|
||||
} |
||||
} |
||||
if (timer==4) |
||||
{i=i+2; |
||||
for (int j = 0; j < 3 ; j++){ |
||||
gpioTimer3[j]=int(timerout[i+j] - '0');//пребразуем строку "011" в массив чисел gpioTimer3 [3]={1,1,0};
|
||||
} |
||||
Serial.println(""); |
||||
Serial.print("gpioTimer1"); |
||||
for(int a = 0; a < 3; a++) |
||||
{ Serial.print(gpioTimer1[a]);
|
||||
} |
||||
Serial.println(""); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
current_time = hour1 * 60 + min1;//настройка выходов в соот с таймерами
|
||||
for (int i = 0; i <= 1439; i++) { |
||||
if (current_time > 1439) current_time = 0; |
||||
state1 = main_log(BTimer1, state1); |
||||
state2 = main_log(BTimer2, state2); |
||||
state3 = main_log(BTimer3, state3); |
||||
current_time++; |
||||
}
|
||||
btime();
|
||||
} |
||||
@ -0,0 +1,69 @@ |
||||
// Correct led start state. Changed all new led bits to prefix new...
|
||||
void handleRoot(AsyncWebServerRequest *request) { |
||||
|
||||
request->send(200, "text/html", R"HTML( |
||||
<!DOCTYPE html> |
||||
<html> |
||||
<head><meta name='viewport' content='width=device-width, initial-scale=1.0'> |
||||
</head> |
||||
<body> |
||||
<h1>ESP32 Websocket Example - Client to Server</h1> |
||||
<h2>With LED status update.</h2> |
||||
<button onclick='toggleLED()'>Toggle LED</button> |
||||
<p>LED Status: <span id='ledStatus'></span></p> |
||||
<button onclick='toggleLED2()'>Toggle LED2</button> |
||||
<p>LED Status: <span id='ledStatus2'></span></p> |
||||
<p>Count:<span id="countData">0:00</span></p> |
||||
<p>Count:<span id="countData1">0:00</span></p> |
||||
<p><span id='message'></span></p> |
||||
<br clear="all"> |
||||
|
||||
<script> |
||||
var webSocket; |
||||
connectWebSocket(); |
||||
function connectWebSocket() { |
||||
webSocket = new WebSocket('ws://' + window.location.hostname + '/ws');
|
||||
|
||||
webSocket.onopen = function(event) {//реакция на подключение вебсекета
|
||||
console.log('WebSocket connected'); |
||||
}; |
||||
|
||||
webSocket.onmessage = function(event) {//реакция на данные
|
||||
var data = JSON.parse(event.data);//
|
||||
if (data.label === 'ledStatus') { |
||||
document.getElementById('ledStatus').innerHTML = data.value; |
||||
} |
||||
if (data.label2 === 'ledStatus2') { |
||||
document.getElementById('ledStatus2').innerHTML = data.value; |
||||
} |
||||
if (data.label3 === 'count1') { |
||||
document.getElementById("countData1").innerHTML = data.value; |
||||
}; |
||||
if (data.label3 === 'count') { |
||||
document.getElementById("countData").innerHTML = data.value; |
||||
}; |
||||
|
||||
} |
||||
webSocket.onclose = function(event) {//реакция на отключение вебсекета
|
||||
console.log('WebSocket disconnected'); |
||||
var messageElement = document.getElementById('message'); |
||||
messageElement.innerHTML ='WebSocket disconnected. Reconnecting...'; |
||||
setTimeout(connectWebSocket, 2000); |
||||
setTimeout(function() { messageElement.innerHTML = ''; }, 5000); |
||||
}; |
||||
webSocket.onerror = function(event) { |
||||
console.error('WebSocket error:', event); |
||||
}; |
||||
} |
||||
function toggleLED() { |
||||
webSocket.send('toggle'); |
||||
} |
||||
function toggleLED2() {//функция на нажатие кнопки
|
||||
webSocket.send('toggle2'); |
||||
} |
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
)HTML"); |
||||
} // END OF void handleRoot(AsyncWebServerRequest *request)
|
||||
@ -0,0 +1,6 @@ |
||||
void writepin() |
||||
{delay(50); |
||||
digitalWrite(5, HIGH); |
||||
delay(10); |
||||
digitalWrite(5, LOW); |
||||
} |
||||
@ -0,0 +1,129 @@ |
||||
void JSstringU() |
||||
{ |
||||
board["id"] = incomingReadings.id; |
||||
|
||||
if(flread==0) |
||||
{ |
||||
board["temperature"] =ts; |
||||
// t1 = incomingReadings.temp;
|
||||
board["humidity"] =hs;
|
||||
board["tim2"] = tim2; |
||||
flread=1;
|
||||
} |
||||
else |
||||
{board["temperature"] =incomingReadings.temp; |
||||
// t1 = incomingReadings.temp;
|
||||
board["humidity"] =incomingReadings.hum; |
||||
if(min1<10) |
||||
{ |
||||
board["tim2"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
board["tim2"] =String(hour1)+":"+String(min1);
|
||||
} |
||||
} |
||||
|
||||
|
||||
board["tim3"] = tim3; |
||||
board["dataserv"] = dataserv; |
||||
board["timeserv"] = timeserv; |
||||
board["munthserv"] = munthserv; |
||||
board["weekserv"] = weekserv; |
||||
board["timev"] = timev; |
||||
|
||||
// jsonString = JSON.stringify(board);
|
||||
jsonString = JSON.stringify(board);//{"id":2,"temperature":9.6733450317382812,"humidity":50.41815185546875,"tim2":"12:02","dataserv":"12","timeserv":"15:30","munthserv":"январь",weekserv:"среда"}
|
||||
// events.send(jsonString.c_str(), "new_readings", millis());//обновление веба текущая температура
|
||||
Serial.println (jsonString); |
||||
|
||||
if(wright>360)//запись на sd каждые 30 минут 60*30/5 каждый тик 5сек
|
||||
{String String2=jsonString2+"\n"; |
||||
//appendFile(SD, "/thkom.txt", String2.c_str());//добавление на инфы в файл
|
||||
writeFile(SD, "/thkom1.txt", jsonString2.c_str());//записываем в этот файл последние данные для счит после сброса
|
||||
writeFile(SD, "/thku1.txt", jsonString.c_str());//записываем в этот файл последние данные NOW для счит после сброса
|
||||
|
||||
//wright=0;
|
||||
} |
||||
} |
||||
|
||||
|
||||
void JSstringK() |
||||
{ board2["tkom1"] = tkom1; |
||||
board2["hkom1"] = hkom1; |
||||
board2["batkom1"] = batkom1; |
||||
board2["timekom1"] = timekom1; |
||||
board2["tkom2"] = tkom2; |
||||
board2["hkom2"] = hkom2; |
||||
board2["batkom2"] = batkom2; |
||||
board2["timekom2"] = timekom2; |
||||
board2["tkor"] = tkor; |
||||
board2["hkor"] = hkor; |
||||
board2["batkor"] = batkor; |
||||
board2["timekor"] = timekor; |
||||
board2["tbal"] = tbal; |
||||
board2["hbal"] = hbal; |
||||
board2["batbal"] = batbal; |
||||
board2["timebal"] = timebal; |
||||
board2["tul1"] = tul1; |
||||
board2["hul1"] = hul1; |
||||
board2["osv1"] = osv1; |
||||
board2["timeul1"] = timeul1; |
||||
jsonString2 = JSON.stringify(board2);
|
||||
Serial.println (jsonString2);
|
||||
//"new_datatemp"
|
||||
//events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||
// writeFile(SD, "/thkom.txt", jsonString2.c_str());
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if(wright>360)//запись на sd каждые 30 минут 60*30/5 каждый тик 5сек
|
||||
{esp_task_wdt_reset();//reset WDT
|
||||
board["temperature"] =incomingReadings.temp; |
||||
// t1 = incomingReadings.temp;
|
||||
board["humidity"] =incomingReadings.hum; |
||||
if(min1<10) |
||||
{ |
||||
board["tim2"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
board["tim2"] =String(hour1)+":"+String(min1);
|
||||
} |
||||
|
||||
|
||||
|
||||
board["tim3"] = tim3; |
||||
board["dataserv"] = dataserv; |
||||
board["timeserv"] = timeserv; |
||||
board["munthserv"] = munthserv; |
||||
board["weekserv"] = weekserv; |
||||
board["timev"] = timev; |
||||
|
||||
// jsonString = JSON.stringify(board);
|
||||
jsonString = JSON.stringify(board); |
||||
|
||||
|
||||
|
||||
|
||||
String String2=jsonString2+"\n"; |
||||
esp_task_wdt_reset();//reset WDT
|
||||
//appendFile(SD, "/thkom.txt", String2.c_str());//добавление на инфы в файл
|
||||
writeFile(SD, "/thkom1.txt", jsonString2.c_str());//записываем в этот файл последние данные для счит после сброса
|
||||
writeFile(SD, "/thku1.txt", jsonString.c_str());//записываем в этот файл последние данные NOW для счит после сброса
|
||||
ESP.restart(); |
||||
wright=0; |
||||
} |
||||
} |
||||
@ -0,0 +1,183 @@ |
||||
void sdlist() |
||||
{ |
||||
//listDir(SD, "/", 0);
|
||||
//listDir(SD, "/", 0);
|
||||
//delay(100);
|
||||
// createDir(SD, "/mydir");//создать директорию (папку)
|
||||
// delay(100);
|
||||
// listDir(SD, "/", 0);
|
||||
// delay(100);
|
||||
// removeDir(SD, "/mydir");
|
||||
//delay(100);
|
||||
// listDir(SD, "/", 2);
|
||||
// delay(100);
|
||||
// writeFile(SD, "/hello.txt", "Hello ");
|
||||
// delay(100);
|
||||
// appendFile(SD, "/hello.txt", "World!\n");
|
||||
// delay(100);
|
||||
// readFile(SD, "/hello.txt");
|
||||
// deleteFile(SD, "/foo.txt");
|
||||
// renameFile(SD, "/hello.txt", "/foo.txt");
|
||||
// readFile(SD, "/foo.txt");
|
||||
// testFileIO(SD, "/test.txt");
|
||||
// Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
|
||||
// Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
|
||||
} |
||||
|
||||
|
||||
void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ |
||||
Serial.printf("Listing directory: %s\n", dirname); |
||||
|
||||
File root = fs.open(dirname); |
||||
if(!root){ |
||||
Serial.println("Failed to open directory"); |
||||
return; |
||||
} |
||||
if(!root.isDirectory()){ |
||||
Serial.println("Not a directory"); |
||||
return; |
||||
} |
||||
|
||||
File file = root.openNextFile(); |
||||
while(file){ |
||||
if(file.isDirectory()){ |
||||
Serial.print(" DIR : "); |
||||
Serial.println(file.name()); |
||||
if(levels){ |
||||
listDir(fs, file.name(), levels -1); |
||||
} |
||||
} else { |
||||
Serial.print(" FILE: "); |
||||
Serial.print(file.name()); |
||||
Serial.print(" SIZE: "); |
||||
Serial.println(file.size()); |
||||
} |
||||
file = root.openNextFile(); |
||||
} |
||||
} |
||||
|
||||
void createDir(fs::FS &fs, const char * path){ |
||||
// Serial.printf("Creating Dir: %s\n", path);
|
||||
if(fs.mkdir(path)){ |
||||
Serial.println("Dir created"); |
||||
} else { |
||||
Serial.println("no dir"); |
||||
} |
||||
} |
||||
|
||||
void removeDir(fs::FS &fs, const char * path){ |
||||
Serial.printf("Removing Dir: %s\n", path); |
||||
if(fs.rmdir(path)){ |
||||
Serial.println("Dir removed"); |
||||
} else { |
||||
Serial.println("rmdir failed"); |
||||
} |
||||
} |
||||
|
||||
void readFile(fs::FS &fs, const char * path){ |
||||
Serial.printf("Reading file: %s\n", path); |
||||
|
||||
File file = fs.open(path); |
||||
if(!file){ |
||||
Serial.println("Failed to open file for reading"); |
||||
return; |
||||
} |
||||
|
||||
Serial.print("Read from file: "); |
||||
while(file.available()){ |
||||
Serial.write(file.read()); |
||||
} |
||||
file.close(); |
||||
} |
||||
|
||||
void writeFile(fs::FS &fs, const char * path, const char * message){ |
||||
Serial.printf("Writing file: %s\n", path); |
||||
|
||||
File file = fs.open(path, FILE_WRITE); |
||||
if(!file){ |
||||
Serial.println("Failed to open file for writing"); |
||||
return; |
||||
} |
||||
if(file.print(message)){ |
||||
Serial.println("File written"); |
||||
} else { |
||||
Serial.println("Write failed"); |
||||
} |
||||
file.close(); |
||||
} |
||||
|
||||
void appendFile(fs::FS &fs, const char * path, const char * message){ |
||||
Serial.printf("Appending to file: %s\n", path); |
||||
|
||||
File file = fs.open(path, FILE_APPEND); |
||||
if(!file){ |
||||
Serial.println("Failed to open file for appending"); |
||||
return; |
||||
} |
||||
if(file.print(message)){ |
||||
Serial.println("Message appended"); |
||||
} else { |
||||
Serial.println("Append failed"); |
||||
} |
||||
file.close(); |
||||
} |
||||
|
||||
void renameFile(fs::FS &fs, const char * path1, const char * path2){ |
||||
Serial.printf("Renaming file %s to %s\n", path1, path2); |
||||
if (fs.rename(path1, path2)) { |
||||
Serial.println("File renamed"); |
||||
} else { |
||||
Serial.println("Rename failed"); |
||||
} |
||||
} |
||||
|
||||
void deleteFile(fs::FS &fs, const char * path){ |
||||
Serial.printf("Deleting file: %s\n", path); |
||||
if(fs.remove(path)){ |
||||
Serial.println("File deleted"); |
||||
} else { |
||||
Serial.println("Delete failed"); |
||||
} |
||||
} |
||||
|
||||
void testFileIO(fs::FS &fs, const char * path){ |
||||
File file = fs.open(path); |
||||
static uint8_t buf[512]; |
||||
size_t len = 0; |
||||
uint32_t start = millis(); |
||||
uint32_t end = start; |
||||
if(file){ |
||||
len = file.size(); |
||||
size_t flen = len; |
||||
start = millis(); |
||||
while(len){ |
||||
size_t toRead = len; |
||||
if(toRead > 512){ |
||||
toRead = 512; |
||||
} |
||||
file.read(buf, toRead); |
||||
len -= toRead; |
||||
} |
||||
end = millis() - start; |
||||
Serial.printf("%u bytes read for %u ms\n", flen, end); |
||||
file.close(); |
||||
} else { |
||||
Serial.println("Failed to open file for reading"); |
||||
} |
||||
|
||||
|
||||
file = fs.open(path, FILE_WRITE); |
||||
if(!file){ |
||||
Serial.println("Failed to open file for writing"); |
||||
return; |
||||
} |
||||
|
||||
size_t i; |
||||
start = millis(); |
||||
for(i=0; i<2048; i++){ |
||||
file.write(buf, 512); |
||||
} |
||||
end = millis() - start; |
||||
Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end); |
||||
file.close(); |
||||
} |
||||
@ -0,0 +1,117 @@ |
||||
void savedata() |
||||
{ |
||||
|
||||
JSONVar boardat; |
||||
if(min1<10) |
||||
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||
} |
||||
boardat["temperatura"] =String(t1)+" C"; |
||||
boardat["humidity"] = String(h1)+" %"; |
||||
tempdat = JSON.stringify(boardat); |
||||
Serial.println (tempdat); |
||||
esp_task_wdt_reset();//reset WDT
|
||||
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||
tempdat=tempdat+"\n"; |
||||
|
||||
//myFile = SD.open("/07.txt",FILE_WRITE);
|
||||
// myFile = SD.open("/TEMPUL/28.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||
// myFile = SD.open("/TEMPUL/2022/FEB/27.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||
|
||||
// Serial.println ("open07");
|
||||
// myFile.print(tempdat+"\n");
|
||||
// myFile.close();
|
||||
//Serial.println (stamp.year);
|
||||
//************************************************************************************************************************************************************************************************************************************
|
||||
Serial.println ("name2"); |
||||
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||
// Serial.println (name2);
|
||||
createDir(SD, "/TEMPUL"); |
||||
String name1="/TEMPUL"+ String(stryen[stamp.year-2014]);//2022
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strmen[stamp.month-1]);//FEB
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strden[stamp.day-1]);//27
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+String(strdaten[0]);//
|
||||
name1.toCharArray(Buf, 50); |
||||
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||
Serial.println (Buf); |
||||
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||
|
||||
/*
|
||||
//test = strcat(name1,name2);
|
||||
String name1=strcat("/TEMPUL", stryen[stamp.year-2014]); |
||||
String name2=strcat(strmen[stamp.month-1], strd[stamp.day-1]); |
||||
|
||||
//+strm[stamp.month-1]+strd[stamp.day-1];
|
||||
|
||||
String name1="/TEMPUL"+ stry[stamp.year-2014]+strm[stamp.month-1]+strd[stamp.day-1]; |
||||
Serial.println (name2); |
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50);
|
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+ name2+strdaten[0]; |
||||
Serial.println (name1); |
||||
name1.toCharArray(Buf, 50); |
||||
*/ |
||||
|
||||
//****************************************************
|
||||
} |
||||
|
||||
|
||||
|
||||
void readdata() |
||||
{ |
||||
//****************************************************
|
||||
String name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[nti]); |
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
|
||||
myFile = SD.open(Buf, FILE_READ); |
||||
while(myFile.available()) { |
||||
Serial.write(myFile.read()); |
||||
} |
||||
Serial.println(" ");
|
||||
// Узнаем размер файла:
|
||||
Serial.print("File size: "); |
||||
// "Размер файла: "
|
||||
Serial.println(myFile.size()); |
||||
myFile.close(); |
||||
|
||||
strdat=""; |
||||
|
||||
Serial.println("/TEMPUL/D-2022/FEBR/27/T1.txt"); |
||||
myFile = SD.open(Buf, FILE_READ); |
||||
while(myFile.available()) { |
||||
strdat+=char(myFile.read()); |
||||
} |
||||
myFile.close(); |
||||
|
||||
esp_task_wdt_reset();//reset WDT
|
||||
|
||||
|
||||
board1["tdata"] = strdat;
|
||||
board1["dataserv"] = dataserv; |
||||
board1["timeserv"] = timeserv; |
||||
jsonString1 = JSON.stringify(board1); |
||||
// Serial.println (jsonString1);
|
||||
// Serial.println ("strdat=");
|
||||
//Serial.println (strdat);
|
||||
|
||||
// events.send(tempdat.c_str(), "readings", millis());//обновление веба
|
||||
// events.send(strdat.c_str(), "readings", millis());//обновление веба
|
||||
} |
||||
@ -0,0 +1,207 @@ |
||||
void savebalk() |
||||
{ |
||||
boolean q=0; |
||||
if((hb==hour1)&&( mb==min1)){q=1;} |
||||
hb=hour1; |
||||
mb=min1; |
||||
if(q==0) |
||||
{
|
||||
JSONVar boardat; |
||||
if(min1<10) |
||||
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||
} |
||||
boardat["temperatura"] =String(tbal)+" C"; |
||||
boardat["humidity"] = String(hbal)+" %"; |
||||
tempdat = JSON.stringify(boardat); |
||||
Serial.println (tempdat); |
||||
esp_task_wdt_reset();//reset WDT
|
||||
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||
tempdat=tempdat+"\n"; |
||||
|
||||
Serial.println ("name2"); |
||||
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||
// Serial.println (name2);
|
||||
createDir(SD, "/TEMPUL"); |
||||
String name1="/TEMPUL"+ String(stryen[stamp.year-2014]);//2022
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strmen[stamp.month-1]);//FEB
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strden[stamp.day-1]);//27
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+String(strdaten[2]);//
|
||||
name1.toCharArray(Buf, 50); |
||||
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||
Serial.println (Buf); |
||||
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||
} |
||||
} |
||||
//*************************K2*****************************************************************
|
||||
|
||||
|
||||
void savek2() |
||||
{ |
||||
|
||||
JSONVar boardat; |
||||
if(min1<10) |
||||
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||
} |
||||
boardat["temperatura"] =String(tkom2)+" C"; |
||||
boardat["humidity"] = String(hkom2)+" %"; |
||||
tempdat = JSON.stringify(boardat); |
||||
Serial.println (tempdat); |
||||
esp_task_wdt_reset();//reset WDT
|
||||
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||
tempdat=tempdat+"\n"; |
||||
|
||||
Serial.println ("name2"); |
||||
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||
// Serial.println (name2);
|
||||
createDir(SD, "/TEMPUL"); |
||||
String name1="/TEMPUL"+ String(stryen[stamp.year-2014]);//2022
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strmen[stamp.month-1]);//FEB
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strden[stamp.day-1]);//27
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+String(strdaten[3]);//
|
||||
name1.toCharArray(Buf, 50); |
||||
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||
Serial.println (Buf); |
||||
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||
|
||||
} |
||||
|
||||
//**************************K1****************************************************************
|
||||
|
||||
|
||||
void savek1() |
||||
{ |
||||
boolean q=0; |
||||
if((hk==hour1)&&( mk==min1)){q=1;} |
||||
hk=hour1; |
||||
mk=min1; |
||||
if(q==0) |
||||
{
|
||||
JSONVar boardat; |
||||
if(min1<10) |
||||
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||
} |
||||
boardat["temperatura"] =String(tkom1)+" C"; |
||||
boardat["humidity"] = String(hkom1)+" %"; |
||||
tempdat = JSON.stringify(boardat); |
||||
Serial.println (tempdat); |
||||
esp_task_wdt_reset();//reset WDT
|
||||
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||
tempdat=tempdat+"\n"; |
||||
|
||||
Serial.println ("name2"); |
||||
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||
// Serial.println (name2);
|
||||
createDir(SD, "/TEMPUL"); |
||||
String name1="/TEMPUL"+ String(stryen[stamp.year-2014]);//2022
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strmen[stamp.month-1]);//FEB
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strden[stamp.day-1]);//27
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+String(strdaten[4]);//
|
||||
name1.toCharArray(Buf, 50); |
||||
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||
Serial.println (Buf); |
||||
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||
} |
||||
} |
||||
|
||||
|
||||
//*********************kor*********************************************************************
|
||||
|
||||
|
||||
void savekor() |
||||
{ |
||||
boolean q=0; |
||||
if((hkr==hour1)&&( mkr==min1)){q=1;} |
||||
hkr=hour1; |
||||
mkr=min1; |
||||
if(q==0) |
||||
{
|
||||
JSONVar boardat; |
||||
if(min1<10) |
||||
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||
} |
||||
boardat["temperatura"] =String(tkor)+" C"; |
||||
boardat["humidity"] = String(hkor)+" %"; |
||||
tempdat = JSON.stringify(boardat); |
||||
Serial.println (tempdat); |
||||
esp_task_wdt_reset();//reset WDT
|
||||
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||
tempdat=tempdat+"\n"; |
||||
|
||||
Serial.println ("name2"); |
||||
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||
// Serial.println (name2);
|
||||
createDir(SD, "/TEMPUL"); |
||||
String name1="/TEMPUL"+ String(stryen[stamp.year-2014]);//2022
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strmen[stamp.month-1]);//FEB
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strden[stamp.day-1]);//27
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+String(strdaten[5]);//
|
||||
name1.toCharArray(Buf, 50); |
||||
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||
Serial.println (Buf); |
||||
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||
} |
||||
} |
||||
@ -0,0 +1,94 @@ |
||||
void saveul() |
||||
{ |
||||
nt=0;//сброс номера температ датчика
|
||||
|
||||
|
||||
int q=0; |
||||
if((hour1<1)&&(min1<20))timev=0;//до 00:20 сброс timev-врмя записи на флеш улица восто приходят каждые 3 мин а зап каждые 20 мин
|
||||
|
||||
if(timev+20<hour1*60+min1){q=1;} |
||||
|
||||
|
||||
ct1=ct1+1;//счетчик пропуска записи данных
|
||||
Serial.print("ct="); |
||||
Serial.println(ct1); |
||||
if(ct1>15){ |
||||
ct1=0; |
||||
q=1; |
||||
}//счетчик пропуска записи данныx
|
||||
if(q==1) |
||||
{
|
||||
timev=hour1*60+min1; |
||||
|
||||
JSONVar boardat; |
||||
if(min1<10) |
||||
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||
} |
||||
boardat["temperatura"] =String(tul1)+" C"; |
||||
boardat["humidity"] = String(hul1)+" %"; |
||||
tempdat = JSON.stringify(boardat); |
||||
Serial.println (tempdat); |
||||
esp_task_wdt_reset();//reset WDT
|
||||
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||
tempdat=tempdat+"\n"; |
||||
|
||||
//myFile = SD.open("/07.txt",FILE_WRITE);
|
||||
// myFile = SD.open("/TEMPUL/28.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||
// myFile = SD.open("/TEMPUL/2022/FEB/27.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||
|
||||
// Serial.println ("open07");
|
||||
// myFile.print(tempdat+"\n");
|
||||
// myFile.close();
|
||||
//Serial.println (stamp.year);
|
||||
//************************************************************************************************************************************************************************************************************************************
|
||||
Serial.println ("name2"); |
||||
// String name1="/TEMPUL"+ stryen[stamp.year-2014]+strmen[stamp.month-1]+strden[stamp.day-1];
|
||||
// Serial.println (name2);
|
||||
createDir(SD, "/TEMPUL"); |
||||
String name1="/TEMPUL"+ String(stryen[stamp.year-2014]);//2022
|
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strmen[stamp.month-1]);//FEB
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
name1=name1+String(strden[stamp.day-1]);//27
|
||||
name1.toCharArray(Buf, 50); |
||||
Serial.println (Buf); |
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+String(strdaten[1]);//
|
||||
name1.toCharArray(Buf, 50); |
||||
//createDir(SD, "/TEMPUL/2022/FEB/27");
|
||||
// name1="/TEMPUL"+ String(stryen[stamp.year-2014])+String(strmen[stamp.month-1])+String(strden[stamp.day-1])+String(strdaten[0]);
|
||||
Serial.println (Buf); |
||||
appendFile(SD,Buf,tempdat.c_str());//добавление на инфы в файл
|
||||
|
||||
/*
|
||||
//test = strcat(name1,name2);
|
||||
String name1=strcat("/TEMPUL", stryen[stamp.year-2014]); |
||||
String name2=strcat(strmen[stamp.month-1], strd[stamp.day-1]); |
||||
|
||||
//+strm[stamp.month-1]+strd[stamp.day-1];
|
||||
|
||||
String name1="/TEMPUL"+ stry[stamp.year-2014]+strm[stamp.month-1]+strd[stamp.day-1]; |
||||
Serial.println (name2); |
||||
char Buf[50]; |
||||
name1.toCharArray(Buf, 50);
|
||||
createDir(SD, Buf); |
||||
|
||||
name1=name1+ name2+strdaten[0]; |
||||
Serial.println (name1); |
||||
name1.toCharArray(Buf, 50); |
||||
*/ |
||||
ct1=0; |
||||
//****************************************************
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,27 @@ |
||||
void WiFisetup() |
||||
{ |
||||
// Set the device as a Station and Soft Access Point simultaneously
|
||||
WiFi.mode(WIFI_AP_STA); |
||||
|
||||
// Set device as a Wi-Fi Station
|
||||
WiFi.begin(ssid, password); |
||||
|
||||
digitalWrite(13, HIGH); // светодиод горит
|
||||
while (WiFi.status() != WL_CONNECTED) { |
||||
delay(1000); |
||||
Serial.println("Setting as a Wi-Fi Station.."); |
||||
} |
||||
digitalWrite(13, LOW); // светодиод погашен
|
||||
|
||||
Serial.print("Station IP Address: "); |
||||
Serial.println(WiFi.localIP()); |
||||
Serial.print("Wi-Fi Channel: "); |
||||
Serial.println(WiFi.channel()); |
||||
|
||||
// Init ESP-NOW
|
||||
if (esp_now_init() != ESP_OK) { |
||||
Serial.println("Error initializing ESP-NOW"); |
||||
return; |
||||
} |
||||
|
||||
} |
||||
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 775 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 128 KiB |
@ -0,0 +1,9 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<browserconfig> |
||||
<msapplication> |
||||
<tile> |
||||
<square150x150logo src="/mstile-150x150.png"/> |
||||
<TileColor>#da532c</TileColor> |
||||
</tile> |
||||
</msapplication> |
||||
</browserconfig> |
||||
|
After Width: | Height: | Size: 775 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 266 B |
|
After Width: | Height: | Size: 266 B |
|
After Width: | Height: | Size: 5.7 KiB |
@ -0,0 +1,19 @@ |
||||
{ |
||||
"name": "", |
||||
"short_name": "", |
||||
"icons": [ |
||||
{ |
||||
"src": "/android-chrome-192x192.png", |
||||
"sizes": "192x192", |
||||
"type": "image/png" |
||||
}, |
||||
{ |
||||
"src": "/android-chrome-512x512.png", |
||||
"sizes": "512x512", |
||||
"type": "image/png" |
||||
} |
||||
], |
||||
"theme_color": "#ffffff", |
||||
"background_color": "#ffffff", |
||||
"display": "standalone" |
||||
} |
||||
@ -0,0 +1,239 @@ |
||||
<!DOCTYPE html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="icon" href="favicon.ico"> |
||||
|
||||
<link rel="icon" type="png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="png" sizes="16x16" href="favicon-16x16.png"> |
||||
</head> |
||||
<body> |
||||
<div id="container"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<div id="sidebar"> |
||||
|
||||
<div class="manth"> |
||||
<p><span id="munthserv">январь</span></p> |
||||
</div> |
||||
<div class="data"> |
||||
<p><span id="dataserv">01</span></p> |
||||
<div class="week"> |
||||
<p><span id="weekserv">суббота</span></p> |
||||
</div> |
||||
</div> |
||||
<div class="times"> |
||||
<p><span id="timeserv">00:00</span></p> |
||||
</div> |
||||
<div class="levnav"> |
||||
|
||||
|
||||
|
||||
|
||||
<p> <a href="index.html" title="Главная"> Главная</a></p> |
||||
<p><a href="setting.html" title="настройки">настройки</a></p> |
||||
<p><a href="upravlenie.html" title="управление">управление</a></p> |
||||
<p><a href="inform.html" title="информация">информация</a></p> |
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div> |
||||
|
||||
<nav id="navigation"><a href="inform1.html" title="информация">улица восток</a></nav> |
||||
<nav id="navigation"><a href="inform.html" title="информация">улица запад</a></nav> |
||||
<nav id="navigation"><a href="inform4.html" title="информация">коридор</a></nav> |
||||
<nav id="navigation"><a href="inform2.html" title="информация">комната1</a></nav> |
||||
<nav id="navigation"><a href="inform3.html" title="информация">комната2</a></nav> |
||||
<nav id="navigation"><a href="inform6.html" title="информация">кухня</a></nav> |
||||
<nav id="navigation"><a href="inform5.html" title="информация">балкон</a></nav> |
||||
<div id="content"> |
||||
<h1>Улица(восток)</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||
</div> |
||||
</div> |
||||
<h1>Улица(запад)</h1> |
||||
|
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Time <span id="tim2"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||
</div> |
||||
</div> |
||||
<h1>Комната1</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom1"></span> °C</span></p><p class="packet">Battery <span id="batkom1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom1"></span> %</span></p><p class="packet">Time <span id="timekom1"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
<h1>Комната2</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom2"></span> °C</span></p><p class="packet">Battery <span id="batkom2"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom2"></span> %</span></p><p class="packet">Time <span id="timekom2"></span></p> |
||||
</div> |
||||
</div> |
||||
<h1>Коридор</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkor"></span> °C</span></p><p class="packet">Battery <span id="batkor"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkor"></span> %</span></p><p class="packet">Time <span id="timekor"></span></p> |
||||
</div> |
||||
</div> |
||||
<h1>Балкон</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tbal"></span> °C</span></p><p class="packet">Battery <span id="batbal"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hbal"></span> %</span></p><p class="packet">Time <span id="timebal"></span></p> |
||||
</div> |
||||
</div> |
||||
<h1>Кухня</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
<h1></h1> |
||||
|
||||
<div class="top"> |
||||
<font size="2" >Время работы сервера: </font> |
||||
<font color="#CF7071" size="3"><span id="t10">0:00</span></font> |
||||
</div> |
||||
|
||||
|
||||
<div id="clear"> |
||||
<p></p> |
||||
<p></p> |
||||
<p></p> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
|
||||
|
||||
|
||||
if (!!window.EventSource) { |
||||
var source = new EventSource('/events'); |
||||
|
||||
source.addEventListener('open', function(e) { |
||||
console.log("Events Connected"); |
||||
}, false); |
||||
source.addEventListener('error', function(e) { |
||||
if (e.target.readyState != EventSource.OPEN) { |
||||
console.log("Events Disconnected"); |
||||
} |
||||
}, false); |
||||
|
||||
source.addEventListener('message', function(e) { |
||||
console.log("message", e.data); |
||||
}, false); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||
|
||||
|
||||
|
||||
|
||||
source.addEventListener('timeserv', function(e) {//ремя работы сервера |
||||
document.getElementById("timeserv").innerHTML =e.data; |
||||
}, false); |
||||
|
||||
source.addEventListener('t10', function(e) {//ремя работы сервера |
||||
document.getElementById("t10").innerHTML =e.data; |
||||
}, false); |
||||
|
||||
|
||||
source.addEventListener('new_readings', function(e) { |
||||
console.log("new_readings", e.data); |
||||
var obj = JSON.parse(e.data); |
||||
document.getElementById("t1").innerHTML = obj.temperature.toFixed(1); |
||||
document.getElementById("h1").innerHTML = obj.humidity.toFixed(1); |
||||
document.getElementById("tim2").innerHTML = obj.tim2; |
||||
document.getElementById("tim3").innerHTML = obj.tim3; |
||||
document.getElementById("dataserv").innerHTML = obj.dataserv; |
||||
document.getElementById("timeserv").innerHTML = obj.timeserv; |
||||
document.getElementById("munthserv").innerHTML = obj.munthserv; |
||||
document.getElementById("weekserv").innerHTML = obj.weekserv; |
||||
}, false); |
||||
|
||||
source.addEventListener('new_datatemp', function(e) { |
||||
console.log("new_datatemp", e.data); |
||||
var obj = JSON.parse(e.data); |
||||
document.getElementById("tkom1").innerHTML = obj.tkom1; |
||||
document.getElementById("hkom1").innerHTML = obj.hkom1; |
||||
document.getElementById("batkom1").innerHTML = obj.batkom1; |
||||
document.getElementById("timekom1").innerHTML = obj.timekom1; |
||||
document.getElementById("tkom2").innerHTML = obj.tkom2; |
||||
document.getElementById("hkom2").innerHTML = obj.hkom2; |
||||
document.getElementById("batkom2").innerHTML = obj.batkom2; |
||||
document.getElementById("timekom2").innerHTML = obj.timekom2; |
||||
document.getElementById("tkor").innerHTML = obj.tkor; |
||||
document.getElementById("hkor").innerHTML = obj.hkor; |
||||
document.getElementById("batkor").innerHTML = obj.batkor; |
||||
document.getElementById("timekor").innerHTML = obj.timekor; |
||||
document.getElementById("tbal").innerHTML = obj.tbal; |
||||
document.getElementById("hbal").innerHTML = obj.hbal; |
||||
document.getElementById("batbal").innerHTML = obj.batbal; |
||||
document.getElementById("timebal").innerHTML = obj.timebal; |
||||
document.getElementById("tul1").innerHTML = obj.tul1; |
||||
document.getElementById("hul1").innerHTML = obj.hul1; |
||||
document.getElementById("osv1").innerHTML = obj.osv1; |
||||
document.getElementById("timeul1").innerHTML = obj.timeul1; |
||||
|
||||
}, false); |
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,161 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<link rel="manifest" href="imajes/site.webmanifest"> |
||||
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Улица(запад)</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Time <span id="tim2"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||
</div> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
<div id="tablinfo"> |
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
|
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (!!window.EventSource) { |
||||
var source = new EventSource('/events'); |
||||
|
||||
source.addEventListener('open', function(e) { |
||||
console.log("Events Connected"); |
||||
}, false); |
||||
source.addEventListener('error', function(e) { |
||||
if (e.target.readyState != EventSource.OPEN) { |
||||
console.log("Events Disconnected"); |
||||
} |
||||
}, false); |
||||
|
||||
source.addEventListener('message', function(e) { |
||||
console.log("message", e.data); |
||||
}, false); |
||||
|
||||
|
||||
source.addEventListener('new_readings', function(e) { |
||||
console.log("new_readings", e.data); |
||||
var obj = JSON.parse(e.data); |
||||
document.getElementById("t1").innerHTML = obj.temperature.toFixed(1); |
||||
document.getElementById("h1").innerHTML = obj.humidity.toFixed(1); |
||||
document.getElementById("tim2").innerHTML = obj.tim2; |
||||
document.getElementById("tim3").innerHTML = obj.tim3; |
||||
|
||||
}, false); |
||||
|
||||
|
||||
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||
|
||||
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||
|
||||
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||
|
||||
|
||||
source.addEventListener('readings', function(e) { |
||||
console.log("readings", e.data); |
||||
|
||||
|
||||
re = e.data.split("\n"); |
||||
console.log(re); |
||||
//String[] anArrayOfStrings; |
||||
var data=[]; |
||||
|
||||
for(var i = 0; i < re.length; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
|
||||
} |
||||
|
||||
append_json(data); |
||||
|
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
|
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
|
||||
}, false); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,162 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<link rel="manifest" href="imajes/site.webmanifest"> |
||||
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Улица(восток)</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||
</div> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
<div id="tablinfo"> |
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (!!window.EventSource) { |
||||
var source = new EventSource('/events'); |
||||
|
||||
source.addEventListener('open', function(e) { |
||||
console.log("Events Connected"); |
||||
}, false); |
||||
source.addEventListener('error', function(e) { |
||||
if (e.target.readyState != EventSource.OPEN) { |
||||
console.log("Events Disconnected"); |
||||
} |
||||
}, false); |
||||
|
||||
source.addEventListener('message', function(e) { |
||||
console.log("message", e.data); |
||||
}, false); |
||||
|
||||
|
||||
source.addEventListener('new_datatemp', function(e) { |
||||
console.log("new_datatemp", e.data); |
||||
var obj = JSON.parse(e.data); |
||||
|
||||
document.getElementById("tul1").innerHTML = obj.tul1; |
||||
document.getElementById("hul1").innerHTML = obj.hul1; |
||||
document.getElementById("osv1").innerHTML = obj.osv1; |
||||
document.getElementById("timeul1").innerHTML = obj.timeul1; |
||||
|
||||
}, false); |
||||
|
||||
|
||||
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||
|
||||
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||
|
||||
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||
|
||||
|
||||
source.addEventListener('readings', function(e) { |
||||
console.log("readings", e.data); |
||||
|
||||
|
||||
re = e.data.split("\n"); |
||||
console.log(re); |
||||
//String[] anArrayOfStrings; |
||||
var data=[]; |
||||
|
||||
for(var i = 0; i < re.length; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
|
||||
} |
||||
|
||||
append_json(data); |
||||
|
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
|
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
|
||||
}, false); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,160 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<link rel="manifest" href="imajes/site.webmanifest"> |
||||
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Комната1</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom1"></span> °C</span></p><p class="packet">Battery <span id="batkom1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom1"></span> %</span></p><p class="packet">Time <span id="timekom1"></span></p> |
||||
</div> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
<div id="tablinfo"> |
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
</div> |
||||
<script type="text/javascript"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (!!window.EventSource) { |
||||
var source = new EventSource('/events'); |
||||
|
||||
source.addEventListener('open', function(e) { |
||||
console.log("Events Connected"); |
||||
}, false); |
||||
source.addEventListener('error', function(e) { |
||||
if (e.target.readyState != EventSource.OPEN) { |
||||
console.log("Events Disconnected"); |
||||
} |
||||
}, false); |
||||
|
||||
source.addEventListener('message', function(e) { |
||||
console.log("message", e.data); |
||||
}, false); |
||||
|
||||
|
||||
source.addEventListener('new_datatemp', function(e) { |
||||
console.log("new_datatemp", e.data); |
||||
var obj = JSON.parse(e.data); |
||||
document.getElementById("tkom1").innerHTML = obj.tkom1; |
||||
document.getElementById("hkom1").innerHTML = obj.hkom1; |
||||
document.getElementById("batkom1").innerHTML = obj.batkom1; |
||||
document.getElementById("timekom1").innerHTML = obj.timekom1; |
||||
|
||||
}, false); |
||||
|
||||
|
||||
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||
|
||||
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||
|
||||
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||
|
||||
|
||||
source.addEventListener('readings', function(e) { |
||||
console.log("readings", e.data); |
||||
|
||||
|
||||
re = e.data.split("\n"); |
||||
console.log(re); |
||||
//String[] anArrayOfStrings; |
||||
var data=[]; |
||||
|
||||
for(var i = 0; i < re.length; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
|
||||
} |
||||
|
||||
append_json(data); |
||||
|
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
|
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
|
||||
}, false); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,161 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<link rel="manifest" href="imajes/site.webmanifest"> |
||||
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Комната2</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkom2"></span> °C</span></p><p class="packet">Battery <span id="batkom2"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkom2"></span> %</span></p><p class="packet">Time <span id="timekom2"></span></p> |
||||
</div> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
<div id="tablinfo"> |
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (!!window.EventSource) { |
||||
var source = new EventSource('/events'); |
||||
|
||||
source.addEventListener('open', function(e) { |
||||
console.log("Events Connected"); |
||||
}, false); |
||||
source.addEventListener('error', function(e) { |
||||
if (e.target.readyState != EventSource.OPEN) { |
||||
console.log("Events Disconnected"); |
||||
} |
||||
}, false); |
||||
|
||||
source.addEventListener('message', function(e) { |
||||
console.log("message", e.data); |
||||
}, false); |
||||
|
||||
|
||||
source.addEventListener('new_datatemp', function(e) { |
||||
console.log("new_datatemp", e.data); |
||||
var obj = JSON.parse(e.data); |
||||
|
||||
document.getElementById("tkom2").innerHTML = obj.tkom2; |
||||
document.getElementById("hkom2").innerHTML = obj.hkom2; |
||||
document.getElementById("batkom2").innerHTML = obj.batkom2; |
||||
document.getElementById("timekom2").innerHTML = obj.timekom2; |
||||
|
||||
}, false); |
||||
|
||||
|
||||
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||
|
||||
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||
|
||||
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||
|
||||
|
||||
source.addEventListener('readings', function(e) { |
||||
console.log("readings", e.data); |
||||
|
||||
|
||||
re = e.data.split("\n"); |
||||
console.log(re); |
||||
//String[] anArrayOfStrings; |
||||
var data=[]; |
||||
|
||||
for(var i = 0; i < re.length; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
|
||||
} |
||||
|
||||
append_json(data); |
||||
|
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
|
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
|
||||
}, false); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,162 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<link rel="manifest" href="imajes/site.webmanifest"> |
||||
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Коридор</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tkor"></span> °C</span></p><p class="packet">Battery <span id="batkor"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hkor"></span> %</span></p><p class="packet">Time <span id="timekor"></span></p> |
||||
</div> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
<div id="tablinfo"> |
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (!!window.EventSource) { |
||||
var source = new EventSource('/events'); |
||||
|
||||
source.addEventListener('open', function(e) { |
||||
console.log("Events Connected"); |
||||
}, false); |
||||
source.addEventListener('error', function(e) { |
||||
if (e.target.readyState != EventSource.OPEN) { |
||||
console.log("Events Disconnected"); |
||||
} |
||||
}, false); |
||||
|
||||
source.addEventListener('message', function(e) { |
||||
console.log("message", e.data); |
||||
}, false); |
||||
|
||||
|
||||
source.addEventListener('new_datatemp', function(e) { |
||||
console.log("new_datatemp", e.data); |
||||
var obj = JSON.parse(e.data); |
||||
|
||||
document.getElementById("tkor").innerHTML = obj.tkor; |
||||
document.getElementById("hkor").innerHTML = obj.hkor; |
||||
document.getElementById("batkor").innerHTML = obj.batkor; |
||||
document.getElementById("timekor").innerHTML = obj.timekor; |
||||
|
||||
}, false); |
||||
|
||||
|
||||
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||
|
||||
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||
|
||||
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||
|
||||
|
||||
source.addEventListener('readings', function(e) { |
||||
console.log("readings", e.data); |
||||
|
||||
|
||||
re = e.data.split("\n"); |
||||
console.log(re); |
||||
//String[] anArrayOfStrings; |
||||
var data=[]; |
||||
|
||||
for(var i = 0; i < re.length; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
|
||||
} |
||||
|
||||
append_json(data); |
||||
|
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
|
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
|
||||
}, false); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,162 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<link rel="manifest" href="imajes/site.webmanifest"> |
||||
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Балкон</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tbal"></span> °C</span></p><p class="packet">Battery <span id="batbal"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hbal"></span> %</span></p><p class="packet">Time <span id="timebal"></span></p> |
||||
</div> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
<div id="tablinfo"> |
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (!!window.EventSource) { |
||||
var source = new EventSource('/events'); |
||||
|
||||
source.addEventListener('open', function(e) { |
||||
console.log("Events Connected"); |
||||
}, false); |
||||
source.addEventListener('error', function(e) { |
||||
if (e.target.readyState != EventSource.OPEN) { |
||||
console.log("Events Disconnected"); |
||||
} |
||||
}, false); |
||||
|
||||
source.addEventListener('message', function(e) { |
||||
console.log("message", e.data); |
||||
}, false); |
||||
|
||||
|
||||
source.addEventListener('new_datatemp', function(e) { |
||||
console.log("new_datatemp", e.data); |
||||
var obj = JSON.parse(e.data); |
||||
|
||||
document.getElementById("tbal").innerHTML = obj.tbal; |
||||
document.getElementById("hbal").innerHTML = obj.hbal; |
||||
document.getElementById("batbal").innerHTML = obj.batbal; |
||||
document.getElementById("timebal").innerHTML = obj.timebal; |
||||
|
||||
}, false); |
||||
|
||||
|
||||
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||
|
||||
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||
|
||||
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||
|
||||
|
||||
source.addEventListener('readings', function(e) { |
||||
console.log("readings", e.data); |
||||
|
||||
|
||||
re = e.data.split("\n"); |
||||
console.log(re); |
||||
//String[] anArrayOfStrings; |
||||
var data=[]; |
||||
|
||||
for(var i = 0; i < re.length; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
|
||||
} |
||||
|
||||
append_json(data); |
||||
|
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
|
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
|
||||
}, false); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,161 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<link rel="manifest" href="imajes/site.webmanifest"> |
||||
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Кухня</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||
</div> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
<div id="tablinfo"> |
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
|
||||
</div> |
||||
<script type="text/javascript"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (!!window.EventSource) { |
||||
var source = new EventSource('/events'); |
||||
|
||||
source.addEventListener('open', function(e) { |
||||
console.log("Events Connected"); |
||||
}, false); |
||||
source.addEventListener('error', function(e) { |
||||
if (e.target.readyState != EventSource.OPEN) { |
||||
console.log("Events Disconnected"); |
||||
} |
||||
}, false); |
||||
|
||||
source.addEventListener('message', function(e) { |
||||
console.log("message", e.data); |
||||
}, false); |
||||
|
||||
|
||||
source.addEventListener('new_datatemp', function(e) { |
||||
console.log("new_datatemp", e.data); |
||||
var obj = JSON.parse(e.data); |
||||
|
||||
document.getElementById("tul1").innerHTML = obj.tul1; |
||||
document.getElementById("hul1").innerHTML = obj.hul1; |
||||
document.getElementById("osv1").innerHTML = obj.osv1; |
||||
document.getElementById("timeul1").innerHTML = obj.timeul1; |
||||
|
||||
}, false); |
||||
|
||||
|
||||
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||
|
||||
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||
|
||||
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||
|
||||
|
||||
source.addEventListener('readings', function(e) { |
||||
console.log("readings", e.data); |
||||
|
||||
|
||||
re = e.data.split("\n"); |
||||
console.log(re); |
||||
//String[] anArrayOfStrings; |
||||
var data=[]; |
||||
|
||||
for(var i = 0; i < re.length; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
|
||||
} |
||||
|
||||
append_json(data); |
||||
|
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
|
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
|
||||
}, false); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,161 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Информация</title> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<link rel="manifest" href="imajes/site.webmanifest"> |
||||
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
|
||||
<div id="containerinf"> |
||||
|
||||
<div class="topnav" ;id="header" > |
||||
<p><h3>ESP-Домашний сервер</h3> |
||||
</div> |
||||
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
|
||||
<div id="contentinfo"> |
||||
<h1>Улица(восток)</h1> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="tul1"></span> °C</span></p><p class="packet">Light <span id="osv1"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hul1"></span> %</span></p><p class="packet">Time <span id="timeul1"></span></p> |
||||
</div> |
||||
</div> |
||||
<div><font size="3" color="#1E4486">................................................... </font> |
||||
</div> |
||||
<div> |
||||
<font size="3" color="#1E4486">таблица температуры за сутки</font> |
||||
</div> |
||||
|
||||
<div id="tablinfo"> |
||||
|
||||
<table style="display: inline-block; color: #160B51; font-size: medium;" id="gable" > |
||||
<colgroup> |
||||
<col class="twenty" /> |
||||
<col class="fourty" /> |
||||
<col class="thirtyfive" /> |
||||
</colgroup> |
||||
<tr> |
||||
<th onclick="sortTable(0)"><span class="glyphicon glyphicon-sort"></span>  Time</th> |
||||
<th onclick="sortTable(1)"><span class="glyphicon glyphicon-sort"></span>  temperatura</th> |
||||
<th onclick="sortTable(2)"><span class="glyphicon glyphicon-sort"></span>  humidity</th> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<p class="packet"> <span id="tdata"></span></p> |
||||
</div> |
||||
</div> |
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (!!window.EventSource) { |
||||
var source = new EventSource('/events'); |
||||
|
||||
source.addEventListener('open', function(e) { |
||||
console.log("Events Connected"); |
||||
}, false); |
||||
source.addEventListener('error', function(e) { |
||||
if (e.target.readyState != EventSource.OPEN) { |
||||
console.log("Events Disconnected"); |
||||
} |
||||
}, false); |
||||
|
||||
source.addEventListener('message', function(e) { |
||||
console.log("message", e.data); |
||||
}, false); |
||||
|
||||
|
||||
source.addEventListener('new_datatemp', function(e) { |
||||
console.log("new_datatemp", e.data); |
||||
var obj = JSON.parse(e.data); |
||||
|
||||
document.getElementById("tul1").innerHTML = obj.tul1; |
||||
document.getElementById("hul1").innerHTML = obj.hul1; |
||||
document.getElementById("osv1").innerHTML = obj.osv1; |
||||
document.getElementById("timeul1").innerHTML = obj.timeul1; |
||||
|
||||
}, false); |
||||
|
||||
|
||||
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||
|
||||
// var data=[{"Time":"20:20","temperatura":"9.39 C","humidity":"90.96 %/n"}, |
||||
// {"Time":"20:21","temperatura":"9.40 C","humidity":"91.11 %/n"}, |
||||
// {"Time":"20:22","temperatura":"9.47 C","humidity":"91.34 %/n"}] |
||||
|
||||
//Array [ "{\"Time\":\"21:23\",\"temperatura\":\"8.88 C\",\"humidity\":\"90.97 %\"}", "{\"Time\":\"21:24\",\"temperatura\":\"8.92 C\",\"humidity\":\"91.34 %\"}" ] |
||||
|
||||
|
||||
source.addEventListener('readings', function(e) { |
||||
console.log("readings", e.data); |
||||
|
||||
|
||||
re = e.data.split("\n"); |
||||
console.log(re); |
||||
//String[] anArrayOfStrings; |
||||
var data=[]; |
||||
|
||||
for(var i = 0; i < re.length; i++) { |
||||
data[i] = JSON.parse(re[i]); |
||||
console.log("data", data); |
||||
|
||||
} |
||||
|
||||
append_json(data); |
||||
|
||||
//this function appends the json data to the table 'gable' |
||||
function append_json(data){ |
||||
var table = document.getElementById('gable'); |
||||
|
||||
data.forEach(function(object) { |
||||
var tr = document.createElement('tr'); |
||||
|
||||
tr.innerHTML = '<td>' + object.Time + '</td>' + |
||||
'<td>' + object.temperatura + '</td>' + |
||||
'<td>' + object.humidity + '</td>' |
||||
table.appendChild(tr); |
||||
}); |
||||
} |
||||
|
||||
}, false); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 266 B |
|
After Width: | Height: | Size: 266 B |
@ -0,0 +1,58 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>Настройка</title> |
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> |
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> |
||||
<link rel="manifest" href="imajes/site.webmanifest"> |
||||
<link rel="mask-icon" href="imajes/safari-pinned-tab.svg" color="#5bbad5"> |
||||
<meta name="msapplication-TileColor" content="#da532c"> |
||||
<meta name="theme-color" content="#ffffff"> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
</head> |
||||
|
||||
<body id="body"> |
||||
<h2 id="h2">ESP32 управляет освещением комнаты</h2> |
||||
<nav id="navigation3"><a href="index.html" title="главное меню">Главное меню</a></nav> |
||||
|
||||
|
||||
<select id="myselect" onchange="change_myselect(this.value)"> |
||||
<option value="">Выберите значение:</option> |
||||
<option value="customers">Покупатели</option> |
||||
<option value="products">Товары</option> |
||||
<option value="suppliers">Поставщики</option> |
||||
</select> |
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
function change_myselect(sel) { |
||||
var obj, dbParam, xmlhttp, myObj, x, txt = ""; |
||||
obj = { "table":sel, "limit":20 }; |
||||
dbParam = JSON.stringify(obj); |
||||
xmlhttp = new XMLHttpRequest(); |
||||
xmlhttp.onreadystatechange = function() { |
||||
if (this.readyState == 4 && this.status == 200) { |
||||
myObj = JSON.parse(this.responseText); |
||||
txt += "<table border='1'>" |
||||
for (x in myObj) { |
||||
txt += "<tr><td>" + myObj[x].name + "</td></tr>"; |
||||
} |
||||
txt += "</table>" |
||||
document.getElementById("demo").innerHTML = txt; |
||||
} |
||||
}; |
||||
xmlhttp.open("POST", "json_demo_db_post.php", true); |
||||
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); |
||||
xmlhttp.send("x=" + dbParam); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
|
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,205 @@ |
||||
@charset "utf-8"; |
||||
|
||||
html {font-family: Arial; display: inline-block; text-align: center;} |
||||
body { |
||||
background-color: #C7CACC; |
||||
color: #FFFFFF; |
||||
font-family: Arial, sans-serif; |
||||
font-size: 14px; |
||||
width: 100%; |
||||
margin-top: 5px; |
||||
background-image: url(fon.jpg); |
||||
} |
||||
a{ |
||||
color: #FFFFFF; |
||||
} |
||||
a:visited { |
||||
color: #FFFFFF; /* Цвет посещенных ссылок */ |
||||
text-decoration: none; |
||||
} |
||||
a:active { |
||||
color: #A7F095; /* Цвет активных ссылок */ |
||||
} |
||||
a:hover { |
||||
color: #AFDAF4; /* Цвет ссылок при наведении мыши*/ |
||||
} |
||||
|
||||
#header { |
||||
background: #F5DEB3; |
||||
width: 100%; |
||||
} |
||||
|
||||
#container { |
||||
background-color: #FFFFFF; |
||||
margin-right: auto; |
||||
margin-left: auto; |
||||
margin-bottom: auto; |
||||
text-align: center; |
||||
width: 80%; |
||||
height: 84px; |
||||
margin-top: 7px; |
||||
padding-top: 1px; |
||||
} |
||||
|
||||
#nav |
||||
{ |
||||
background-color: #2F4468; |
||||
width: 100%; |
||||
color: #FFFFFF; |
||||
font-size: small; |
||||
margin-left: -18px; |
||||
margin-top: -3px; |
||||
} |
||||
|
||||
#sidebar { |
||||
background-color: #8CA2AF; |
||||
float: left; |
||||
width: 20%; |
||||
position: static; |
||||
margin-top: -1px; |
||||
height: 358px; |
||||
min-width: 0px; |
||||
} |
||||
|
||||
#content { |
||||
background-color: #F8E6C1; |
||||
float: right; |
||||
width: 80%; |
||||
color: #14437A; |
||||
margin-top: -2px; |
||||
opacity: 0.91; |
||||
} |
||||
|
||||
#clear { |
||||
clear: both; |
||||
} |
||||
|
||||
#footer { |
||||
background: #00BFFF; |
||||
width: 100%; |
||||
height: 40px; |
||||
} |
||||
|
||||
.topnav { |
||||
overflow: hidden; |
||||
background-color: #2f4468; |
||||
color: white; |
||||
font-size: 1.7rem; |
||||
height: 65px; |
||||
line-height: 3px; |
||||
|
||||
} |
||||
.top{ |
||||
overflow: hidden; |
||||
background-color: #8CA2AF; |
||||
color: white; |
||||
width: 100%; |
||||
|
||||
} |
||||
|
||||
.card.temperature { color: #fd7e14; } |
||||
.card.humidity { color: #1b78e2; } |
||||
|
||||
|
||||
.card { |
||||
background-color: #F9F9F7; |
||||
box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5); |
||||
} |
||||
.cards { |
||||
max-width: 901px; |
||||
margin: 0 auto; |
||||
display: grid; |
||||
grid-gap: 2rem; |
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); |
||||
min-height: 133px; |
||||
} |
||||
.reading { |
||||
font-size: 2.8rem; |
||||
|
||||
} |
||||
|
||||
|
||||
#navigation a { |
||||
font-size: small; |
||||
color: #3E73A7; |
||||
float: left; |
||||
border-top-width: thick; |
||||
padding-left: 20px; |
||||
} |
||||
|
||||
.times{ |
||||
font-size: xx-large; |
||||
margin-top: -50px; |
||||
background-color: #2F4468; |
||||
color: #FFFFFF; |
||||
height: 57px; |
||||
line-height: 56px; |
||||
} |
||||
.manth{ |
||||
color: #02087C; |
||||
margin-top: 0px; |
||||
background-color: #EF7320; |
||||
height: 2pc; |
||||
font-size: large; |
||||
padding-top: 2px; |
||||
opacity: 1; |
||||
line-height: 3%; |
||||
} |
||||
.servertime { |
||||
margin-top: 37px; |
||||
} |
||||
.data{ |
||||
color: #2F4468; |
||||
background-color: #FFFFFF; |
||||
margin-top: -93px; |
||||
height: 146px; |
||||
font-size: 92px; |
||||
line-height: 97px; |
||||
} |
||||
.week{ |
||||
color: #000006; |
||||
margin-top: -91px; |
||||
background-color: #EF7320; |
||||
height: 2pc; |
||||
font-size: large; |
||||
line-height: 30px; |
||||
|
||||
} |
||||
.levnav{ |
||||
font-size: large; |
||||
color: #FFFFFF; |
||||
margin-top: 5px; |
||||
margin-left: 25px; |
||||
line-height: 11px; |
||||
margin-right: 31px; |
||||
text-decoration: none; |
||||
text-align: left; |
||||
|
||||
} |
||||
#containerinf { |
||||
background-color: #B59D69; |
||||
margin-right: auto; |
||||
margin-left: auto; |
||||
margin-bottom: auto; |
||||
text-align: center; |
||||
width: 80%; |
||||
height: 84px; |
||||
margin-top: 7px; |
||||
padding-top: 1px; |
||||
opacity: 1; |
||||
} |
||||
#contentinfo { |
||||
background-color: #ECD9B1; |
||||
width: 100%; |
||||
color: #14437A; |
||||
margin-top: -2px; |
||||
opacity: 0.83; |
||||
} |
||||
#tablinfo{ |
||||
background-color: #ECD9B1; |
||||
width: 35%; |
||||
color: #14437A; |
||||
margin-top: 11px; |
||||
opacity: 0.83; |
||||
margin-left: 288px; |
||||
} |
||||
@ -0,0 +1,122 @@ |
||||
|
||||
<!DOCTYPE HTML><html> |
||||
|
||||
<head> |
||||
<title>ESP-NOW DASHBOARD</title> |
||||
<meta charset="utf-8"> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
<link rel="icon" href="favicon.ico"> |
||||
|
||||
<link rel="icon" type="png" sizes="32x32" href="favicon-32x32.png"> |
||||
<link rel="icon" type="png" sizes="16x16" href="favicon-16x16.png"> |
||||
<link href="style.css" rel="stylesheet" type="text/css"> |
||||
</head> |
||||
<body> |
||||
|
||||
<div class="topnav"> |
||||
<p><h3>ESP-Домашний сервер</h3><span class="data"></span><span id="dataserv">%dataserv%</span></p> |
||||
|
||||
|
||||
|
||||
|
||||
<p><span class="times"><span id="timeserv">%timeserv%</span></p> |
||||
|
||||
</div> |
||||
<nav id="navigation"><a href="index.html" title="Главная">Главная</a></nav> |
||||
<nav id="navigation1"><a href="setting.html" title="настройки">настройки</a></nav> |
||||
<nav id="navigation2"><a href="inform.html" title="информация">информация</a></nav> |
||||
<div class="content"> |
||||
<div class="cards"> |
||||
<div class="card temperature"> |
||||
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="t1"></span> °C</span></p><p class="packet">Time <span id="tim2"></span></p> |
||||
</div> |
||||
<div class="card humidity"> |
||||
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="h1"></span> %</span></p><p class="packet">Time <span id="tim3"></span></p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<div style="text-align: center;"> |
||||
<font size="6" color="#0000ff">Время работы сервера:</font> |
||||
</div> |
||||
|
||||
|
||||
<div style="text-align: center;"> |
||||
<font color="#ff0000" size="6"> |
||||
<p><span id="t10"></span></p> |
||||
</font> |
||||
<font size="4" color="#0000ff"> </font> |
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
function toggleCheckbox(element) {//get запросы на переключение кнопки GET http://192.168.1.100/update?output=13&state=1 |
||||
var xhr = new XMLHttpRequest(); |
||||
if(element.checked){ xhr.open("GET", "/update?output="+element.id+"&state=1", true); } |
||||
else { xhr.open("GET", "/update?output="+element.id+"&state=0", true); } |
||||
xhr.send(); |
||||
} |
||||
|
||||
|
||||
|
||||
if (!!window.EventSource) { |
||||
var source = new EventSource('/events'); |
||||
|
||||
source.addEventListener('open', function(e) { |
||||
console.log("Events Connected"); |
||||
}, false); |
||||
source.addEventListener('error', function(e) { |
||||
if (e.target.readyState != EventSource.OPEN) { |
||||
console.log("Events Disconnected"); |
||||
} |
||||
}, false); |
||||
|
||||
source.addEventListener('message', function(e) { |
||||
console.log("message", e.data); |
||||
}, false); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// source.addEventListener('t1', function(e) {;//слушаем когда прийдет t1 |
||||
// document.getElementById("t1").innerHTML =e.data;// заменяем в HTML страничке id="t1" на то что пришло t1=25 |
||||
// }, false);// events.send(String(t1).c_str(), "t1", millis()); в Loop надо отправить t1=25 |
||||
|
||||
|
||||
|
||||
|
||||
source.addEventListener('t10', function(e) {//ремя работы сервера |
||||
document.getElementById("t10").innerHTML =e.data; |
||||
}, false); |
||||
|
||||
|
||||
|
||||
|
||||
source.addEventListener('new_readings', function(e) { |
||||
console.log("new_readings", e.data); |
||||
var obj = JSON.parse(e.data); |
||||
document.getElementById("t1").innerHTML = obj.temperature.toFixed(2); |
||||
document.getElementById("h1").innerHTML = obj.humidity.toFixed(2); |
||||
document.getElementById("tim2").innerHTML = obj.tim2; |
||||
document.getElementById("tim3").innerHTML = obj.tim3; |
||||
document.getElementById("dataserv").innerHTML = obj.dataserv; |
||||
document.getElementById("timeserv").innerHTML = obj.timeserv; |
||||
}, false); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,634 @@ |
||||
/*
|
||||
ESP32 Receiver (ESP-NOW + Web Server) |
||||
Complete project details at https://RandomNerdTutorials.com/esp32-esp-now-wi-fi-web-server/
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
of this software and associated documentation files. |
||||
|
||||
The above copyright notice and this permission notice shall be included in all |
||||
copies or substantial portions of the Software. |
||||
*/ |
||||
//08:3A:F2:A7:80:6C //esp32 желтые ноги
|
||||
//08:3A:F2:66:31:30 //esp32 lilygo2,3
|
||||
//08:3A:F2: //esp32 lilygo4,7
|
||||
#define SD_MISO 12 |
||||
#define SD_MOSI 13 |
||||
#define SD_SCLK 14 |
||||
#define SD_CS 15 |
||||
#include <esp_task_wdt.h> |
||||
#define WDT_TIMEOUT 10 |
||||
#include <WiFi.h> |
||||
#include "ESPAsyncWebSrv.h" |
||||
#include <AsyncTCP.h> |
||||
#include <Arduino_JSON.h> |
||||
#include <esp_now.h> |
||||
#include "FS.h" |
||||
#include "SD.h" |
||||
#include "SPI.h" |
||||
#include <SPIFFS.h> |
||||
|
||||
#include "NTPClient.h" |
||||
#include "WiFiUdp.h" |
||||
#include <UnixTime.h> |
||||
UnixTime stamp(0); // указать GMT (3 для Москвы)
|
||||
// Define deep sleep options
|
||||
String dataMessage; |
||||
// Define NTP Client to get time
|
||||
WiFiUDP ntpUDP; |
||||
NTPClient timeClient(ntpUDP); |
||||
#include "nRF24L01.h" |
||||
#include "RF24.h" |
||||
char msg[16]; |
||||
//RF24 radio(12, 14, 26, 25, 27);
|
||||
//RF24 radio(27, 26, 32, 33, 25);//server (ce,csn,sck,miso,mosi)esp32
|
||||
|
||||
RF24 radio(17, 16, 32, 33, 25);//server (ce,csn,sck,miso,mosi)esp32
|
||||
const uint64_t pip = 0x02E423E4E2LL; |
||||
SPIClass sdSPI(HSPI); |
||||
File myFile; |
||||
String jsonString;//"{\"id\":2,\"temperature\":9.6733450317382812,\"humidity\":50.41815185546875,\"readingId\":\"2\"}";
|
||||
String jsonString1; |
||||
String jsonString2;//="{\"tkom1\":\"20.0\",\"hkom1\":\"30.0\",\"batkom1\":\"0.00\",\"timekom1\":\"00:00\",\"tkom2\":\"\",\"hkom2\":\"\",\"batkom2\":\"\",\"timekom2\":\"\",\"tkor\":\"\",\"hkor\":\"\",\"batkor\":\"\",\"timekor\":\"\",\"tbal\":\"\",\"hbal\":\"\",\"batbal\":\"\",\"timebal\":\"\"}"
|
||||
; |
||||
// Replace with your network credentials (STATION)
|
||||
const char* ssid = "VOVA-47"; |
||||
const char* password = "vovak26102003"; |
||||
|
||||
char *time_buf; |
||||
|
||||
const char* PARAM_INPUT_1 = "output"; |
||||
const char* PARAM_INPUT_2 = "state"; |
||||
|
||||
// Structure example to receive data
|
||||
// Must match the sender structure
|
||||
typedef struct struct_message { |
||||
int id=0; |
||||
float temp=0; |
||||
float hum=0; |
||||
unsigned int readingId=0; |
||||
} struct_message; |
||||
|
||||
struct_message incomingReadings; |
||||
|
||||
JSONVar board; |
||||
JSONVar board1; |
||||
JSONVar board2; |
||||
|
||||
|
||||
|
||||
AsyncWebServer server(80); |
||||
AsyncEventSource events("/events"); |
||||
//*************************************************************************************************
|
||||
char* strd[] = {"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"}; |
||||
char* strm[] = {"январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь"}; |
||||
char* strweek[] = {"воскресенье","понедельник","вторник","среда","четверг","пятница","суббота","воскресенье"}; |
||||
int nt=0;//номер термометра
|
||||
int nti=0;//номер термометра для сайта
|
||||
int temperature1=10; |
||||
double ts; |
||||
double hs; |
||||
String t1; |
||||
String h1; |
||||
String t10;//время работы сервера
|
||||
String tim3;// время от нтп сервера при приходе данных с NOW
|
||||
String tim2;//время получ от устройства NOW
|
||||
String munthserv;//месяц
|
||||
String weekserv;//день недели
|
||||
|
||||
String tkom1;//температура
|
||||
String hkom1;//влажность
|
||||
String batkom1; |
||||
String timekom1;//время прихода данных комната1
|
||||
|
||||
String tkom2; |
||||
String hkom2; |
||||
String batkom2; |
||||
String timekom2; |
||||
|
||||
String tkor; |
||||
String hkor; |
||||
String batkor; |
||||
String timekor; |
||||
|
||||
String tbal; |
||||
String hbal; |
||||
String batbal; |
||||
String timebal; |
||||
|
||||
String timeul1; |
||||
String tul1; |
||||
String hul1; |
||||
String osv1; |
||||
int ct1=0;//счетчик пропуска данные каждые 3 минуты записываем каждые 20 те 7 пропусков
|
||||
|
||||
|
||||
int time17=0; |
||||
int hour1=10; |
||||
int min1=7; |
||||
int sek=0; |
||||
int hk=0;//часы для исключения повтора записи данных
|
||||
int mk=0;//минуты
|
||||
int hb=0;//часы для исключения повтора записи данных
|
||||
int mb=0;//минуты
|
||||
int hkr=0;//часы для исключения повтора записи данных
|
||||
int mkr=0;//минуты
|
||||
int timev=0;//для пропуска 20 минут
|
||||
//String timev1;//для записи на флэш при сбросе
|
||||
|
||||
boolean fdata=0;//флаг обновления данных темп и влажн
|
||||
int fobnov=1;//флаг обновления данных темп и влажн
|
||||
String timeserv;//время сервера
|
||||
String dataserv;//дата
|
||||
int v=0; |
||||
int v1=0; |
||||
long EpochTime=0; |
||||
int ind=0; |
||||
String strdat;//накопленые в памяти данные по темп и влажность передаваемые клиенту
|
||||
String tempdat;//
|
||||
int ftdata=0;//флаг запроса данных темп и влажн
|
||||
int fping=0;// флаг для задержки отр данных на страницу inform
|
||||
int wright=0; |
||||
bool flread=0; |
||||
char* strden[] = {"/01","/02","/03","/04","/05","/06","/07","/08","/09","/10","/11","/12","/13","/14","/15","/16","/17","/18","/19","/20","/21","/22","/23","/24","/25","/26","/27","/28","/29","/30","/31"};
|
||||
char* strmen[] = {"/JAN","/FEBR","/MARCH","/APRIL","/MAY","/JUNE","/JULY","/AUG","/SEPT","/OCT","/NOV","/DEC"}; |
||||
char* stryen[] = {"/2014","/2015","/2016","/2017","/D-2018","/D-2019","/D-2020","/D-2021","/D-2022","/D-2023","/D-2024","/D-2025","/D-2026","/D-2027","/D-2028","/D-2029","/D-2030","/D-2031","/D-2032","D-2033","/D-2034","/D-2035"}; |
||||
char* strdaten[] = {"/T1.txt","/T2.txt","/T3.txt","/T4.txt","/T5.txt","/T6.txt","/T7.txt","/T8.txt","/T9.txt","/T10.txt"}; |
||||
//************************************************************
|
||||
hw_timer_t * timer = NULL; |
||||
volatile SemaphoreHandle_t timerSemaphore; |
||||
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED; |
||||
volatile uint32_t isrCounter = 0; |
||||
volatile uint32_t lastIsrAt = 0; |
||||
//**************************************************************************************************
|
||||
// ntp
|
||||
String formattedDate; |
||||
String formattedTime; |
||||
String dayStamp; |
||||
String timeStamp; |
||||
|
||||
|
||||
//*****************************************************************************
|
||||
|
||||
//****************************************************************************
|
||||
String outputState(int output){ |
||||
if(digitalRead(output)){ |
||||
return "checked"; |
||||
} |
||||
else { |
||||
return ""; |
||||
} |
||||
} |
||||
|
||||
String processor(const String& var){ |
||||
//Serial.println(var);
|
||||
if(var == "BUTTONPLACEHOLDER1"){ |
||||
String buttons = ""; |
||||
// buttons += "<h4>Output - GPIO 12</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"12\" " + outputState(12) + "><span class=\"slider\"></span></label>";
|
||||
buttons += "<h4>Output - GPIO 13</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"13\" " + outputState(13) + "><span class=\"slider\"></span></label>"; |
||||
// buttons += "<h4>Output - GPIO 14</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"14\" " + outputState(14) + "><span class=\"slider\"></span></label>";
|
||||
return buttons; |
||||
} |
||||
return String(); |
||||
} |
||||
/* if(var == "HOLDERT1"){
|
||||
String buttons = ""; |
||||
buttons +="<p><span class=\"reading\">"+t1+" °C</span></p>"; |
||||
String hour11=String(hour1, DEC); |
||||
String min11=String(min1, DEC); |
||||
if(min1<10){min11="0"+min11;} |
||||
buttons +="<p>"+hour11+":"+min11+"</p>"; |
||||
return buttons; |
||||
} |
||||
if(var == "HOLDERH1"){ |
||||
String buttons = ""; |
||||
buttons +="<p><span class=\"reading\">"+h1+" %</span></p>"; |
||||
String hour11=String(hour1, DEC); |
||||
String min11=String(min1, DEC); |
||||
if(min1<10){min11="0"+min11;} |
||||
buttons +="<p>"+hour11+":"+min11+"</p>"; |
||||
return buttons; |
||||
} |
||||
*/ |
||||
/*if(var == "HOLDER2"){
|
||||
String buttons = ""; |
||||
|
||||
buttons +="<p>"+t10+"</p>"; |
||||
return buttons; |
||||
|
||||
}*/ |
||||
//************************************************
|
||||
|
||||
|
||||
//***********************************************************
|
||||
void vrem(); |
||||
void handle_OnConnect(); |
||||
void ntp(); |
||||
void ntphome(); |
||||
void IRAM_ATTR onTimer(); |
||||
void event(); |
||||
void WiFisetup(); |
||||
void savedata(); |
||||
void JSstringU(); |
||||
void JSstringK(); |
||||
void Sdreaddata(); |
||||
void Nrfsetup(); |
||||
void nrf(); |
||||
void parsmsg(); |
||||
void settimer(); |
||||
void readdata(); |
||||
//void ansv();
|
||||
//***********************************************************
|
||||
void OnDataRecv(const uint8_t * mac_addr, const uint8_t *incomingData, int len) {
|
||||
// Copies the sender mac address to a string
|
||||
char macStr[18]; |
||||
Serial.print("Packet received from: "); |
||||
snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x", |
||||
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); |
||||
Serial.println(macStr); |
||||
memcpy(&incomingReadings, incomingData, sizeof(incomingReadings)); |
||||
|
||||
Serial.printf("Board ID %u: %u bytes\n", incomingReadings.id, len); |
||||
Serial.printf("t value: %4.2f \n", incomingReadings.temp); |
||||
t1 = incomingReadings.temp; |
||||
Serial.printf("h value: %4.2f \n", incomingReadings.hum); |
||||
h1=incomingReadings.hum; |
||||
Serial.printf("readingID value: %d \n", incomingReadings.readingId); |
||||
int tim11 =incomingReadings.readingId; |
||||
hour1=tim11/100; |
||||
min1=tim11%100; |
||||
//JSONстрока формирование
|
||||
ntphome(); |
||||
tim3=timeserv; |
||||
JSstringU();
|
||||
events.send(jsonString.c_str(), "new_readings", millis());//обновление веба
|
||||
// fdata=1;
|
||||
|
||||
// fdata=0;
|
||||
savedata(); |
||||
}//OnDataRecv
|
||||
//****************************************************************************
|
||||
void configureEvents() { |
||||
events.onConnect([](AsyncEventSourceClient *client){ |
||||
if(client->lastId()){ |
||||
Serial.printf("Client connections. Id: %u\n", client->lastId()); |
||||
} |
||||
// and set reconnect delay to 1 second
|
||||
client->send("hello from ESP32",NULL,millis(),1000); |
||||
}); |
||||
|
||||
}// configureEvents
|
||||
//*********************************************************************************************************
|
||||
void setup() { |
||||
// Initialize Serial Monitor
|
||||
pinMode(13, OUTPUT); |
||||
digitalWrite(13, LOW); |
||||
Serial.begin(115200); |
||||
|
||||
if(!SPIFFS.begin()){ |
||||
Serial.println("An Error has occurred while mounting SPIFFS"); |
||||
return; |
||||
} |
||||
|
||||
sdSPI.begin(SD_SCLK, SD_MISO, SD_MOSI, SD_CS); |
||||
if (!SD.begin(SD_CS, sdSPI)) |
||||
{ |
||||
// if(!SD.begin()){
|
||||
Serial.println("Mounting card mount failed"); |
||||
// return;
|
||||
} |
||||
|
||||
|
||||
uint8_t cardType = SD.cardType(); |
||||
if(cardType == CARD_NONE){ |
||||
Serial.println("No SD card attached"); |
||||
//return;
|
||||
} |
||||
uint64_t cardSize = SD.cardSize() / (1024 * 1024); |
||||
Serial.printf("SD Card Size: %lluMB\n", cardSize); |
||||
Sdreaddata(); |
||||
Nrfsetup(); |
||||
settimer(); |
||||
WiFisetup(); |
||||
// Initialize a NTPClient to get time
|
||||
timeClient.begin(); |
||||
// Set offset time in seconds to adjust for your timezone, for example:
|
||||
// GMT +1 = 3600
|
||||
// GMT +8 = 28800
|
||||
// GMT -1 = -3600
|
||||
// GMT 0 = 0
|
||||
timeClient.setTimeOffset(10800);
|
||||
// Once ESPNow is successfully Init, we will register for recv CB to
|
||||
// get recv packer info
|
||||
esp_now_register_recv_cb(OnDataRecv); |
||||
ntp();//NTP init
|
||||
|
||||
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
request->send(SPIFFS, "/index.html", String(), false, processor); |
||||
fobnov=1; |
||||
}); |
||||
server.on("/index.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
request->send(SPIFFS, "/index.html", String(), false, processor); |
||||
fobnov=1; |
||||
|
||||
}); |
||||
// Route to load style.css file
|
||||
server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
request->send(SPIFFS, "/style.css", "text/css"); |
||||
}); |
||||
|
||||
|
||||
server.on("/fon.jpg", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
request->send(SPIFFS, "/fon.jpg"); |
||||
}); |
||||
|
||||
server.on("/upravlenie.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
fobnov=1; |
||||
request->send(SPIFFS, "/upravlenie.html", String(), false, processor); |
||||
}); |
||||
|
||||
server.on("/setting.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
|
||||
request->send(SPIFFS, "/setting.html"); |
||||
}); |
||||
server.on("/inform.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=1; |
||||
fping=0; |
||||
// Serial.println ("ftdata==1");
|
||||
request->send(SPIFFS, "/inform.html"); |
||||
}); |
||||
|
||||
server.on("/inform1.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=2; |
||||
fping=0; |
||||
// Serial.println ("ftdata==1");
|
||||
request->send(SPIFFS, "/inform1.html"); |
||||
}); |
||||
|
||||
server.on("/inform2.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=4; |
||||
fping=0; |
||||
// Serial.println ("ftdata==1");
|
||||
request->send(SPIFFS, "/inform2.html"); |
||||
}); |
||||
server.on("/inform3.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=7; |
||||
fping=0; |
||||
// Serial.println ("ftdata==1");
|
||||
request->send(SPIFFS, "/inform3.html"); |
||||
}); |
||||
server.on("/inform4.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=3; |
||||
fping=0; |
||||
// Serial.println ("ftdata==1");
|
||||
request->send(SPIFFS, "/inform4.html"); |
||||
}); |
||||
server.on("/inform5.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=5; |
||||
fping=0; |
||||
// Serial.println ("ftdata==1");
|
||||
request->send(SPIFFS, "/inform5.html"); |
||||
}); |
||||
server.on("/inform6.html", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
ftdata=6; |
||||
fping=0; |
||||
// Serial.println ("ftdata==1");
|
||||
request->send(SPIFFS, "/inform6.html"); |
||||
}); |
||||
server.on("/favicon.ico", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
|
||||
request->send(SPIFFS, "/favicon.ico"); |
||||
}); |
||||
server.on("/favicon-32x32.png", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
|
||||
request->send(SPIFFS, "/favicon-32x32.png"); |
||||
}); |
||||
server.on("/favicon-16x16.png", HTTP_GET, [](AsyncWebServerRequest *request){ |
||||
|
||||
request->send(SPIFFS, "/favicon-32x32.png"); |
||||
}); |
||||
|
||||
// Send a GET request to <ESP_IP>/update?output=<inputMessage1>&state=<inputMessage2> принимаем get сообщение от клиента при нажати кнопки
|
||||
// принимаем номер контакта и его состояние
|
||||
// GET http://192.168.1.100/update?output=13&state=1
|
||||
server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) { |
||||
String inputMessage1; |
||||
String inputMessage2; |
||||
// GET input1 value on <ESP_IP>/update?output=<inputMessage1>&state=<inputMessage2>
|
||||
|
||||
|
||||
if (request->hasParam(PARAM_INPUT_1) && request->hasParam(PARAM_INPUT_2)) { |
||||
inputMessage1 = request->getParam(PARAM_INPUT_1)->value(); |
||||
inputMessage2 = request->getParam(PARAM_INPUT_2)->value(); |
||||
digitalWrite(inputMessage1.toInt(), inputMessage2.toInt()); |
||||
} |
||||
else { |
||||
inputMessage1 = "No message sent"; |
||||
inputMessage2 = "No message sent"; |
||||
} |
||||
Serial.print("GPIO: "); |
||||
Serial.print(inputMessage1); |
||||
Serial.print(" - Set to: "); |
||||
Serial.println(inputMessage2); |
||||
|
||||
request->send(200, "text/plain", "OK"); |
||||
});
|
||||
|
||||
JSstringU(); |
||||
JSstringK(); |
||||
|
||||
configureEvents(); |
||||
server.addHandler(&events); |
||||
|
||||
server.begin(); |
||||
esp_task_wdt_init(WDT_TIMEOUT, true); //включить панику, чтобы ESP32 перезапустился
|
||||
esp_task_wdt_add(NULL); //добавить текущий поток в WDT watch
|
||||
|
||||
} |
||||
|
||||
|
||||
//***********************************************************************************************************
|
||||
//***********************************************************************************************************
|
||||
//***********************************************************************************************************
|
||||
void loop()
|
||||
{ |
||||
|
||||
|
||||
static unsigned long lastEventTime = millis(); |
||||
|
||||
static const unsigned long EVENT_INTERVAL_MS = 5000; |
||||
if (v>3) {//20sek
|
||||
ntphome();//считываем время
|
||||
v=0;//обнуляем счетчик 4*5=20с
|
||||
} |
||||
if (v1>240) {//20min
|
||||
ntp();//считываем время
|
||||
v1=0;//обнуляем счетчик 240*5=1200с
|
||||
} |
||||
|
||||
// digitalWrite(13, HIGH); // светодиод горит
|
||||
// digitalWrite(13, LOW); // светодиод погашен
|
||||
if ((millis() - lastEventTime) > EVENT_INTERVAL_MS) |
||||
{ |
||||
events.send("ping",NULL,millis()); |
||||
lastEventTime = millis(); |
||||
v++; |
||||
v1++; |
||||
|
||||
vrem();//время работы сайта
|
||||
events.send(t10.c_str(), "t10", millis());//время работы сайта обн каждые 5сек
|
||||
events.send(timeserv.c_str(), "timeserv", millis());//время обн каждые 5сек
|
||||
|
||||
fping++;//задержка отправки данных на стр до готовности стр принять их
|
||||
if(fping>1000){fping=0;}
|
||||
nrf(); //проверяем не приш ли данные на NRF
|
||||
wright++;//сч времени для записи на флеш
|
||||
Serial.println (wright); |
||||
Serial.print ("ftdata="); |
||||
Serial.println (ftdata); |
||||
Serial.print ("fobnov="); |
||||
Serial.println (fobnov); |
||||
if( ftdata==0) |
||||
{ if (fobnov>0) {//2,5sek
|
||||
fobnov++; |
||||
if(fobnov>3){fobnov=0;}
|
||||
events.send(jsonString.c_str(), "new_readings", millis());//обновление веба текущая температура
|
||||
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||
Serial.println("/index"); |
||||
} |
||||
} |
||||
|
||||
//*****************************************************************************************
|
||||
|
||||
|
||||
//*******************************************************************************************
|
||||
|
||||
//*********************************************************************************************
|
||||
|
||||
|
||||
|
||||
//**********************************************************************************************
|
||||
if (ftdata==2)//пришел запрос табл данных /inform ЗАПАД
|
||||
{// tim3=formattedTime;
|
||||
if(fping>2){fping=0;} |
||||
if(fping==1){ |
||||
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||
} |
||||
if(fping>1){ |
||||
ftdata=0; |
||||
fping=0; |
||||
nti=1; |
||||
readdata(); |
||||
// Serial.println("data1");
|
||||
events.send(strdat.c_str(), "readings", millis());//отправка данных из памяти в таблицу на стр inform
|
||||
} |
||||
} |
||||
//***************************************************************************************************
|
||||
if (ftdata==1)//пришел запрос табл данных /inform ВОСТОК
|
||||
{// tim3=formattedTime;
|
||||
|
||||
if(fping>2){fping=0;} |
||||
if(fping==1){ |
||||
// events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||
events.send(jsonString.c_str(), "new_readings", millis());//обновление данных ЗАПАД
|
||||
} |
||||
if(fping>1){ |
||||
ftdata=0; |
||||
fping=0; |
||||
nti=0; |
||||
readdata(); |
||||
events.send(strdat.c_str(), "readings", millis());//отправка данных из памяти в таблицу на стр inform
|
||||
// fobnov=1;
|
||||
|
||||
} |
||||
} |
||||
|
||||
//***************************************************************************************************
|
||||
if (ftdata==3)//пришел запрос табл данных /inform коридор
|
||||
{// tim3=formattedTime;
|
||||
|
||||
if(fping>2){fping=0;} |
||||
if(fping==1){ |
||||
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление данных Т Н ВАТ все кроме запад
|
||||
} |
||||
if(fping>1){ |
||||
ftdata=0; |
||||
fping=0; |
||||
nti=5; |
||||
readdata(); |
||||
events.send(strdat.c_str(), "readings", millis());//отправка данных из памяти в таблицу на стр inform
|
||||
} |
||||
} |
||||
//***************************************************************************************************
|
||||
if (ftdata==5)//пришел запрос табл данных /inform балкон
|
||||
{// tim3=formattedTime;
|
||||
|
||||
if(fping>2){fping=0;} |
||||
if(fping==1){ |
||||
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление данных Т Н ВАТ все кроме запад
|
||||
} |
||||
if(fping>1){ |
||||
ftdata=0; |
||||
fping=0; |
||||
nti=2; |
||||
readdata(); |
||||
events.send(strdat.c_str(), "readings", millis());//отправка данных из памяти в таблицу на стр inform
|
||||
} |
||||
} |
||||
|
||||
//******************************************************************************************************
|
||||
if (ftdata==4)//пришел запрос табл данных /inform К1
|
||||
{// tim3=formattedTime;
|
||||
|
||||
if(fping>2){fping=0;} |
||||
if(fping==1){ |
||||
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление данных Т Н ВАТ все кроме запад
|
||||
} |
||||
if(fping>1){ |
||||
ftdata=0; |
||||
fping=0; |
||||
nti=4; |
||||
readdata(); |
||||
events.send(strdat.c_str(), "readings", millis());//отправка данных из памяти в таблицу на стр inform
|
||||
} |
||||
} |
||||
|
||||
|
||||
//******************************************************************************************************
|
||||
if (ftdata==7)//пришел запрос табл данных /inform К2
|
||||
{// tim3=formattedTime;
|
||||
|
||||
if(fping>2){fping=0;} |
||||
if(fping==1){ |
||||
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление данных Т Н ВАТ все кроме запад
|
||||
} |
||||
if(fping>1){ |
||||
ftdata=0; |
||||
fping=0; |
||||
nti=3; |
||||
readdata(); |
||||
events.send(strdat.c_str(), "readings", millis());//отправка данных из памяти в таблицу на стр inform
|
||||
} |
||||
} |
||||
|
||||
//*********************************************************************************************************
|
||||
if (ftdata==6)//пришел запрос табл данных /inform
|
||||
{// tim3=formattedTime;
|
||||
if(fping>2){fping=0;} |
||||
if(fping==1){ |
||||
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||
} |
||||
if(fping>1){ |
||||
ftdata=0; |
||||
fping=0; |
||||
nti=1; |
||||
readdata(); |
||||
Serial.println("data1"); |
||||
events.send(strdat.c_str(), "readings", millis());//отправка данных из памяти в таблицу на стр inform
|
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
} |
||||
} |
||||
@ -0,0 +1,24 @@ |
||||
|
||||
void event() |
||||
{ |
||||
/*events.send(String(t1).c_str(), "t1", millis());
|
||||
events.send(String(h1).c_str(), "h1", millis()); |
||||
// events.send(String(hour1).c_str(), "hour1", millis());
|
||||
// events.send(String(min1).c_str(), "min1", millis());
|
||||
|
||||
|
||||
if (min1<10) |
||||
{ |
||||
tim2=String(hour1)+":"+"0"+String(min1); |
||||
} |
||||
else |
||||
{tim2=String(hour1)+":"+String(min1); |
||||
} |
||||
events.send(tim2.c_str(), "tim2", millis()); |
||||
events.send(t10.c_str(), "t10", millis()); |
||||
//events.send(formattedDate.c_str(), "tim3", millis());
|
||||
|
||||
events.send(tim3.c_str(), "tim3", millis()); |
||||
events.send(timeserv.c_str(), "timeserv", millis()); |
||||
events.send(dataserv.c_str(), "dataserv", millis());*/ |
||||
} |
||||
@ -0,0 +1,54 @@ |
||||
void Nrfsetup() |
||||
{ |
||||
radio.begin(); |
||||
radio.setChannel(100); |
||||
radio.setPayloadSize(16);//должно быть16
|
||||
radio.setAddressWidth(5); |
||||
radio.setAutoAck( 0 ,false); |
||||
radio.setCRCLength(RF24_CRC_16); |
||||
radio.setDataRate(RF24_2MBPS); |
||||
radio.openReadingPipe(0,pip); |
||||
radio.startListening(); |
||||
} |
||||
|
||||
void nrf() |
||||
{ |
||||
if (radio.available()){
|
||||
radio.read(msg,16);
|
||||
esp_task_wdt_reset();//reset WDT
|
||||
Serial.println(msg); |
||||
parsmsg(); |
||||
if (radio.available()){radio.read(msg,16);
|
||||
parsmsg();} |
||||
delay(500); |
||||
if (radio.available()){radio.read(msg,16);
|
||||
parsmsg();} |
||||
delay(500); |
||||
if (radio.available()){radio.read(msg,16);
|
||||
parsmsg();} |
||||
delay(500); |
||||
if (radio.available()){radio.read(msg,16);
|
||||
parsmsg();} |
||||
delay(500); |
||||
if (radio.available()){radio.read(msg,16);
|
||||
parsmsg();} |
||||
|
||||
JSstringK();//создаем строку для сайта
|
||||
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||
|
||||
if(nt==2){saveul();}//t9 T2
|
||||
if(nt==3){savebalk();}//t1 T3
|
||||
if(nt==4){savek2();}//t2 T4
|
||||
if(nt==5){savek1();}//t3 T5
|
||||
if(nt==7){savekor();}//t5 T6
|
||||
if (radio.available()){radio.read(msg,16);} |
||||
} |
||||
//t1+138c347v524h5 балкон
|
||||
//t2+243c401v528h моя комната
|
||||
// t3+230c357v469h зал
|
||||
// t5+230c357v469h коридор
|
||||
//9d+088h866s00v улица восток
|
||||
|
||||
|
||||
|
||||
} |
||||
@ -0,0 +1,95 @@ |
||||
void ntp() |
||||
{ |
||||
// while(!timeClient.update()) {
|
||||
// timeClient.forceUpdate();
|
||||
//}
|
||||
|
||||
for(int i=0; i<5 && !timeClient.update(); i++) |
||||
{ |
||||
|
||||
timeClient.forceUpdate(); |
||||
} |
||||
|
||||
// The formattedDate comes with the following format:
|
||||
// 2018-05-28T16:00:13Z
|
||||
// We need to extract date and time
|
||||
// formattedDate = timeClient.getFormattedDate();
|
||||
formattedTime =timeClient.getFormattedTime(); |
||||
Serial.println(formattedTime); |
||||
Serial.println("NTP3"); |
||||
// getDay
|
||||
//getHours
|
||||
//getMinutes
|
||||
//getSeconds
|
||||
//getFormattedTime
|
||||
// formattedDate =timeClient.getFormattedDate();
|
||||
// int splitT = formattedDate.indexOf("T");
|
||||
// dayStamp = formattedDate.substring(0, splitT);
|
||||
// Serial.println(timeClient.getDay());
|
||||
|
||||
// Extract time
|
||||
// timeStamp = formattedDate.substring(splitT+1, formattedDate.length()-1);
|
||||
// Serial.println("ntp");
|
||||
// Serial.println(timeClient.getEpochTime());
|
||||
stamp.getDateTime(timeClient.getEpochTime()); |
||||
EpochTime=timeClient.getEpochTime(); |
||||
// забираем вот так
|
||||
// Serial.println(stamp.year);
|
||||
Serial.println(stamp.month); |
||||
Serial.println(stamp.day); |
||||
// Serial.println(stamp.hour);
|
||||
// Serial.println(stamp.minute);
|
||||
// Serial.println(stamp.second);
|
||||
Serial.println(stamp.dayOfWeek); |
||||
timeserv=formatTimeDigits(stamp.hour,stamp.minute);
|
||||
//dataserv=formatDateDigits(stamp.day, stamp.month, stamp.year);
|
||||
|
||||
hour1=stamp.hour; |
||||
min1=stamp.minute; |
||||
|
||||
dataserv=stamp.day; |
||||
munthserv=strm[stamp.month-1] ; |
||||
weekserv=strweek[stamp.dayOfWeek]; |
||||
//Serial.println(timeserv);
|
||||
//Serial.println(dataserv);
|
||||
} |
||||
|
||||
char *formatTimeDigits(int hour, int minute) |
||||
{ |
||||
char *time_str = new char[5]; |
||||
time_str[0] = '0' + (hour / 10); |
||||
time_str[1] = '0' + (hour % 10); |
||||
time_str[2] = ':'; |
||||
time_str[3] = '0' + (minute / 10); |
||||
time_str[4] = '0' + (minute % 10); |
||||
time_str[5] = '\0'; |
||||
|
||||
return time_str; |
||||
} |
||||
|
||||
char *formatDateDigits(int date, int mounth, int year) |
||||
{ |
||||
char *date_str = new char[9]; |
||||
|
||||
date_str[1] = '0' + (date % 10); |
||||
date_str[2] = '/'; |
||||
date_str[0] = '0' + (date / 10); |
||||
date_str[3] = '0' + (mounth / 10); |
||||
date_str[4] = '0' + (mounth % 10); |
||||
date_str[5] = '/'; |
||||
date_str[6] = '0' + ((year % 100) / 10); |
||||
date_str[7] = '0' + (year % 10); |
||||
date_str[8] = '\0'; |
||||
|
||||
return date_str; |
||||
} |
||||
|
||||
void ntphome() |
||||
{ |
||||
stamp.getDateTime(timeClient.getEpochTime()); |
||||
timeserv=formatTimeDigits(stamp.hour,stamp.minute);
|
||||
hour1=stamp.hour; |
||||
min1=stamp.minute; |
||||
// dataserv=formatDateDigits(stamp.day, stamp.month, stamp.year);
|
||||
dataserv=stamp.day; |
||||
} |
||||
@ -0,0 +1,352 @@ |
||||
|
||||
void parsmsg() |
||||
{ |
||||
//int tkom1=0;//температура
|
||||
//int hkom1=0;//влажность
|
||||
//int batkom1=0;
|
||||
//String timekom1;//время прихода данных комната1
|
||||
|
||||
//int tkom2=0;
|
||||
//int hkom2=0;
|
||||
//int batkom2=0;
|
||||
//String timekom2;
|
||||
|
||||
//int tkor=0;
|
||||
//int hkor=0;
|
||||
//int batkor=0;
|
||||
//String timekor;
|
||||
|
||||
//int tbal=0;
|
||||
//int hbal=0;
|
||||
//int batbal=0;
|
||||
//String timebal;
|
||||
|
||||
//String timebal;
|
||||
//t1+138c347v524h5 балкон
|
||||
//t2+243c401v528h моя комната
|
||||
// t3+230c357v469h зал
|
||||
// t5+230c357v469h коридор
|
||||
//9d+088h866s00v улица восток
|
||||
//timeul1
|
||||
//tul1
|
||||
//hul1
|
||||
//osv1
|
||||
//char msg[16];принятое сообщение
|
||||
int tdat;//температура
|
||||
int hdat;//влажность
|
||||
int vdat;//напряж батареи датчика
|
||||
int zndat; |
||||
int osv; |
||||
char token9[] = "9d";//улица
|
||||
char token11[] = "t1";//датчики
|
||||
char token12[] = "t2";//датчики
|
||||
char token13[] = "t3";//датчики
|
||||
char token14[] = "t4";//датчики
|
||||
char token15[] = "t5";//датчики
|
||||
|
||||
int n=0; |
||||
int p=0;
|
||||
boolean chet=0;
|
||||
char c ; |
||||
|
||||
//***************************
|
||||
for (int j=0 ; j<15 ;j++)
|
||||
{ c=msg[j];//принятая с премника перемнная
|
||||
|
||||
|
||||
if (p==9) |
||||
{ if (c==token9[1]){p=99;}//данные с ул датчика восток
|
||||
else{ |
||||
p=0;} |
||||
} |
||||
if (p==101)//cравнение второго символа на соответствие t 1
|
||||
{ if (c==token11[1]){p=111;} |
||||
|
||||
} |
||||
if (p==101)//cравнение второго символа на соответствие t 2
|
||||
{ if (c==token12[1]){p=112;} |
||||
|
||||
} |
||||
if (p==101)//cравнение второго символа на соответствие t 3
|
||||
{ if (c==token13[1]){p=113;} |
||||
|
||||
} |
||||
if (p==101)//cравнение второго символа на соответствие t 4
|
||||
{ if (c==token14[1]){p=114;} |
||||
|
||||
} |
||||
if (p==101)//cравнение второго символа на соответствие t 5
|
||||
{ if (c==token15[1]){p=115;} |
||||
else{ |
||||
p=0;} |
||||
} |
||||
//*************************************************
|
||||
if (p==99)
|
||||
{// myFile.print(c);//d+237h895s05v
|
||||
nt=2; |
||||
timeul1=timeserv;//время получения данных
|
||||
n++; |
||||
if (n==2){ |
||||
if (c==45){zndat=1;//-
|
||||
}//znak
|
||||
else |
||||
{zndat=2;//+
|
||||
} |
||||
} |
||||
if (n==3) {tdat=(c-48)*100;} //температура
|
||||
if (n==4){tdat=(c-48)*10+tdat;} |
||||
if (n==5){ |
||||
tdat=(c-48)+tdat; |
||||
|
||||
if(zndat==1){tul1="-"+String (tdat/10)+"."+String (tdat%10); //температура знак -230 -23.0
|
||||
} |
||||
else |
||||
{tul1=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||
} |
||||
} |
||||
if (n==7){hdat=(c-48)*100;}//влажность
|
||||
if (n==8){hdat=(c-48)*10+hdat;} |
||||
if (n==9){ |
||||
hdat=(c-48)+hdat; |
||||
hul1=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||
} |
||||
if (n==11){osv=10*(c-48);}//освещенность
|
||||
if (n==12) |
||||
{osv=osv+(c-48); |
||||
if(osv>99){osv=99;} |
||||
osv1=String (osv)+"%"; |
||||
}//sun
|
||||
// hourdu=t.hour;//время прихода данных час
|
||||
// mindu=t.min;//мин
|
||||
|
||||
} |
||||
//*****************************************
|
||||
|
||||
//*****************датчики температуры переносные***********************
|
||||
//************************T1****************************************************
|
||||
if (p==111) //выделение данных из принятой строки
|
||||
{ timebal=timeserv;//время получения данных
|
||||
nt=3; |
||||
//byte ntdat;номер датчика
|
||||
//byte zndat;знак температуры 0+
|
||||
//int tdat;температура
|
||||
//int hdat;влажность
|
||||
//int vdat;напряж батареи датчика
|
||||
n++; |
||||
if (n==2){ |
||||
if (c==45){zndat=1;//-
|
||||
}//znak
|
||||
else |
||||
{zndat=0;//+
|
||||
} |
||||
} |
||||
if (n==3) {tdat=(c-48)*100;} //температура
|
||||
if (n==4){tdat=(c-48)*10+tdat;} |
||||
if (n==5) |
||||
{tdat=(c-48)+tdat; |
||||
tbal=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||
} |
||||
|
||||
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||
if (n==8){vdat=(c-48)*10+vdat;} |
||||
if (n==9) |
||||
{vdat=(c-48)+vdat; |
||||
batbal=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||
} |
||||
if (n==11){hdat=(c-48)*100;}//влажность
|
||||
if (n==12) |
||||
{hdat=(c-48)*10+hdat; |
||||
} |
||||
if (n==13) |
||||
{hdat=(c-48)+hdat; |
||||
hbal=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||
} |
||||
|
||||
} |
||||
//**************************************** T2
|
||||
if (p==112) //выделение данных из принятой строки
|
||||
{timekom2=timeserv;//время получения данных
|
||||
nt=4; |
||||
n++; |
||||
if (n==2){ |
||||
if (c==45){zndat=1;//-
|
||||
}//znak
|
||||
else |
||||
{zndat=0;//+
|
||||
} |
||||
} |
||||
if (n==3) {tdat=(c-48)*100;} //температура
|
||||
if (n==4){tdat=(c-48)*10+tdat;} |
||||
if (n==5) |
||||
{tdat=(c-48)+tdat; |
||||
tkom2=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||
} |
||||
|
||||
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||
if (n==8){vdat=(c-48)*10+vdat;} |
||||
if (n==9) |
||||
{vdat=(c-48)+vdat; |
||||
batkom2=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||
} |
||||
if (n==11){hdat=(c-48)*100;}//влажность
|
||||
if (n==12) |
||||
{hdat=(c-48)*10+hdat;
|
||||
} |
||||
if (n==13) |
||||
{hdat=(c-48)+hdat; |
||||
hkom2=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||
} |
||||
|
||||
} |
||||
//****************************************
|
||||
//**************************************** T3
|
||||
if (p==113) //выделение данных из принятой строки
|
||||
{// myFile.print(c);//t2+103c375v299h9
|
||||
nt=5; |
||||
timekom1=timeserv;//время получения данных
|
||||
n++; |
||||
if (n==2){ |
||||
if (c==45){zndat=1;//-
|
||||
}//znak
|
||||
else |
||||
{zndat=0;//+
|
||||
} |
||||
} |
||||
if (n==3) {tdat=(c-48)*100;} //температура
|
||||
if (n==4){tdat=(c-48)*10+tdat;} |
||||
if (n==5) |
||||
{tdat=(c-48)+tdat; |
||||
tkom1=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||
} |
||||
|
||||
|
||||
|
||||
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||
if (n==8){vdat=(c-48)*10+vdat;} |
||||
if (n==9) |
||||
{vdat=(c-48)+vdat; |
||||
batkom1=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||
} |
||||
if (n==11){hdat=(c-48)*100;}//влажность
|
||||
if (n==12) |
||||
{hdat=(c-48)*10+hdat; |
||||
} |
||||
if (n==13) |
||||
{hdat=(c-48)+hdat; |
||||
hkom1=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||
} |
||||
|
||||
} |
||||
//**************************************** T4 ****************************
|
||||
/* if (p==114) //выделение данных из принятой строки
|
||||
{// myFile.print(c);//t1+103c375v299h9
|
||||
ntdat=4; |
||||
if(chet==0) |
||||
{ if( hourd4==t.hour) |
||||
{fh=1; |
||||
} |
||||
else |
||||
{fh=0; |
||||
} |
||||
chet=1; |
||||
} |
||||
hourd4=t.hour; |
||||
mind4=t.min;
|
||||
//byte ntdat;номер датчика
|
||||
//byte zndat;знак температуры 0+
|
||||
//int tdat;температура
|
||||
//int hdat;влажность
|
||||
//int vdat;напряж батареи датчика
|
||||
n++; |
||||
if (n==2){ |
||||
if (c==45){zndat=1;//-
|
||||
}//znak
|
||||
else |
||||
{zndat=0;//+
|
||||
} |
||||
} |
||||
if (n==3) {tdat=(c-48)*100;} //температура
|
||||
if (n==4){tdat=(c-48)*10+tdat;} |
||||
if (n==5) |
||||
{tdat=(c-48)+tdat; |
||||
for (int u =22 ; u >= 0; u = u--) |
||||
{ |
||||
t4[u+1]=t4[u]; |
||||
} |
||||
if(zndat==1)//-
|
||||
{t14=tdat+1000; |
||||
t4[0]=t14; |
||||
} |
||||
else |
||||
{t14=tdat; |
||||
t4[0]=t14; |
||||
} |
||||
} |
||||
|
||||
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||
if (n==8){vdat=(c-48)*10+vdat;} |
||||
if (n==9) |
||||
{vdat=(c-48)+vdat; |
||||
bat[3]=vdat; |
||||
} |
||||
if (n==11){hdat=(c-48)*100;}//влажность
|
||||
if (n==12) |
||||
{hdat=(c-48)*10+hdat; |
||||
for (int u =22 ; u >= 0; u = u--) |
||||
{ |
||||
h4[u+1]=h4[u]; |
||||
} |
||||
h4[0]=hdat; |
||||
|
||||
} |
||||
if (n==13) |
||||
{hdat=(c-48)+hdat; |
||||
h14=hdat; |
||||
} |
||||
|
||||
}*/ |
||||
//**************************************** T5
|
||||
if (p==115) //выделение данных из принятой строки
|
||||
{// myFile.print(c);//t2+103c375v299h9
|
||||
timekor=timeserv;//время получения данных
|
||||
nt=7; |
||||
n++; |
||||
if (n==2){ |
||||
if (c==45){zndat=1;//-
|
||||
}//znak
|
||||
else |
||||
{zndat=0;//+
|
||||
} |
||||
} |
||||
if (n==3) {tdat=(c-48)*100;} //температура
|
||||
if (n==4){tdat=(c-48)*10+tdat;} |
||||
if (n==5) |
||||
{tdat=(c-48)+tdat; |
||||
tkor=String (tdat/10)+"."+String (tdat%10); //температура без знака +230 +23.0
|
||||
} |
||||
|
||||
if (n==7){vdat=(c-48)*100;}//напряж батареи датчика
|
||||
if (n==8){vdat=(c-48)*10+vdat;} |
||||
if (n==9) |
||||
{vdat=(c-48)+vdat; |
||||
batkor=String (vdat/100)+"."+String (vdat%100);//батарея 357v 3.75в
|
||||
} |
||||
if (n==11){hdat=(c-48)*100;}//влажность
|
||||
if (n==12) |
||||
{hdat=(c-48)*10+hdat; |
||||
} |
||||
if (n==13) |
||||
{hdat=(c-48)+hdat; |
||||
hkor=String (hdat/10)+"."+String (hdat%10); //влажность 866 86.6%
|
||||
} |
||||
|
||||
}
|
||||
//*******************************************************************************
|
||||
|
||||
if ((c==token9[0])&&(p==0)){p=9;}
|
||||
if ((c==token11[0])&&(p==0)){p=101;}//cравнение первого символа на соответствие t
|
||||
}//for
|
||||
//*************************************************
|
||||
|
||||
|
||||
}//void pars
|
||||
@ -0,0 +1,183 @@ |
||||
/*void savedata()
|
||||
{ |
||||
|
||||
JSONVar boardat; |
||||
if(min1<10) |
||||
{boardat["Time"] = String(hour1)+":0"+String(min1);
|
||||
} |
||||
else |
||||
{ |
||||
boardat["Time"] = String(hour1)+":"+String(min1);
|
||||
} |
||||
boardat["temperatura"] =String(t1)+" C"; |
||||
boardat["humidity"] = String(h1)+" %"; |
||||
tempdat = JSON.stringify(boardat); |
||||
// Serial.println (tempdat);
|
||||
//JSON { "Time":"11:03", "temperatura":"10.56 C", "humidity":"7,56 %" },
|
||||
|
||||
// myFile = SPIFFS.open("/TempUl.txt", FILE_WRITE);//создаем файл с именем TempUl
|
||||
myFile = SPIFFS.open("/TempU1.txt", FILE_APPEND);//открываем файл в режиме добавления данных
|
||||
myFile.print(tempdat+"\n"); |
||||
myFile.close(); |
||||
//****************************************************
|
||||
|
||||
|
||||
} |
||||
|
||||
void readdata() |
||||
{ |
||||
//****************************************************
|
||||
Serial.println("/TempU1.txt"); |
||||
// Читаем содержимое файла:
|
||||
|
||||
myFile = SPIFFS.open("/TempU1.txt", FILE_READ); |
||||
|
||||
|
||||
|
||||
// "Содержимое файла: \""
|
||||
|
||||
while(myFile.available()) { |
||||
|
||||
Serial.write(myFile.read()); |
||||
|
||||
} |
||||
Serial.println(" ");
|
||||
|
||||
// Узнаем размер файла:
|
||||
|
||||
Serial.print("File size: "); |
||||
// "Размер файла: "
|
||||
Serial.println(myFile.size()); |
||||
|
||||
myFile.close(); |
||||
|
||||
strdat=""; |
||||
|
||||
myFile = SPIFFS.open("/TempU1.txt", FILE_READ); |
||||
|
||||
|
||||
while(myFile.available()) { |
||||
|
||||
strdat+=char(myFile.read()); |
||||
|
||||
} |
||||
|
||||
|
||||
myFile.close(); |
||||
|
||||
|
||||
|
||||
|
||||
board1["tdata"] = strdat;
|
||||
board1["dataserv"] = dataserv; |
||||
board1["timeserv"] = timeserv; |
||||
jsonString1 = JSON.stringify(board1); |
||||
// Serial.println (jsonString1);
|
||||
// Serial.println ("strdat=");
|
||||
//Serial.println (strdat);
|
||||
|
||||
// events.send(tempdat.c_str(), "readings", millis());//обновление веба
|
||||
// events.send(strdat.c_str(), "readings", millis());//обновление веба
|
||||
}*/ |
||||
|
||||
|
||||
void Sdreaddata()//чтение данных после откл питания или сброса
|
||||
{ Serial.println ("read SD data"); |
||||
strdat=""; |
||||
myFile = SD.open("/thkom1.txt", FILE_READ); |
||||
while(myFile.available()) { |
||||
|
||||
strdat+=char(myFile.read()); |
||||
|
||||
} |
||||
|
||||
|
||||
myFile.close(); |
||||
jsonString2=strdat; |
||||
Serial.println (jsonString2); |
||||
events.send(jsonString2.c_str(), "new_datatemp", millis());//обновление веба
|
||||
JSONVar myObject = JSON.parse(strdat); |
||||
//{"tkom1":"","hkom1":"","batkom1":"","timekom1":"","tkom2":"25.1","hkom2":"50.1","batkom2":"4.0","timekom2":"22:00","tkor":"23.6","hkor":"45.7","batkor":"3.71","timekor":"21:55","tbal":"11.1","hbal":"56.3","batbal":"3.45","timebal":"21:47","tul1":"5.3","hul1":"99.9","osv1":"0%","timeul1":"22:01"}
|
||||
|
||||
if (myObject.hasOwnProperty("tkom1")) { |
||||
tkom1=((const char*) myObject["tkom1"]);} |
||||
if (myObject.hasOwnProperty("hkom1")) { |
||||
hkom1=((const char*) myObject["hkom1"]);} |
||||
if (myObject.hasOwnProperty("batkom1")) { |
||||
batkom1=((const char*) myObject["batkom1"]);} |
||||
if (myObject.hasOwnProperty("timekom1")) { |
||||
timekom1=((const char*) myObject["timekom1"]);} |
||||
|
||||
if (myObject.hasOwnProperty("tkom2")) { |
||||
tkom2=((const char*) myObject["tkom2"]);} |
||||
if (myObject.hasOwnProperty("hkom2")) { |
||||
hkom2=((const char*) myObject["hkom2"]);} |
||||
if (myObject.hasOwnProperty("batkom2")) { |
||||
batkom2=((const char*) myObject["batkom2"]);} |
||||
if (myObject.hasOwnProperty("timekom2")) { |
||||
timekom2=((const char*) myObject["timekom2"]);} |
||||
|
||||
|
||||
if (myObject.hasOwnProperty("tkor")) { |
||||
tkor=((const char*) myObject["tkor"]);} |
||||
if (myObject.hasOwnProperty("hkor")) { |
||||
hkor=((const char*) myObject["hkor"]);} |
||||
if (myObject.hasOwnProperty("batkor")) { |
||||
batkor=((const char*) myObject["batkor"]);} |
||||
if (myObject.hasOwnProperty("timekor")) { |
||||
timekor=((const char*) myObject["timekor"]);} |
||||
|
||||
if (myObject.hasOwnProperty("tbal")) { |
||||
tbal=((const char*) myObject["tbal"]);} |
||||
if (myObject.hasOwnProperty("hbal")) { |
||||
hbal=((const char*) myObject["hbal"]);} |
||||
if (myObject.hasOwnProperty("batbal")) { |
||||
batbal=((const char*) myObject["batbal"]);} |
||||
if (myObject.hasOwnProperty("timebal")) { |
||||
timebal=((const char*) myObject["timebal"]);} |
||||
|
||||
if (myObject.hasOwnProperty("tul1")) { |
||||
tul1=((const char*) myObject["tul1"]);} |
||||
if (myObject.hasOwnProperty("hul1")) { |
||||
hul1=((const char*) myObject["hul1"]);} |
||||
if (myObject.hasOwnProperty("osv1")) { |
||||
osv1=((const char*) myObject["osv1"]);} |
||||
if (myObject.hasOwnProperty("timeul1")) { |
||||
timeul1=((const char*) myObject["timeul1"]);} |
||||
|
||||
|
||||
strdat=""; |
||||
myFile = SD.open("/thku1.txt", FILE_READ); |
||||
while(myFile.available()) { |
||||
|
||||
strdat+=char(myFile.read()); |
||||
|
||||
} |
||||
myFile.close(); |
||||
jsonString=strdat; |
||||
Serial.println ("jsonString"); |
||||
Serial.println (jsonString); |
||||
|
||||
events.send(jsonString.c_str(), "new_readings", millis());//обновление веба текущая температура
|
||||
myObject = JSON.parse(jsonString); |
||||
if (myObject.hasOwnProperty("id")) { |
||||
String id=((const char*) myObject["id"]);} |
||||
if (myObject.hasOwnProperty("temperature")) { |
||||
ts=((double) myObject["temperature"]);} |
||||
|
||||
if (myObject.hasOwnProperty("humidity")) { |
||||
hs=((double) myObject["humidity"]);} |
||||
|
||||
if (myObject.hasOwnProperty("tim2")) { |
||||
tim2=((const char*) myObject["tim2"]);} |
||||
if (myObject.hasOwnProperty("tim3")) { |
||||
tim3=((const char*) myObject["tim3"]);} |
||||
if (myObject.hasOwnProperty("dataserv")) { |
||||
dataserv=((const char*) myObject["dataserv"]);} |
||||
if (myObject.hasOwnProperty("timev")) { |
||||
timev=((int) myObject["timev"]);} |
||||
|
||||
//{"id":2,"temperature":9.6733450317382812,"humidity":50.41815185546875,"tim2":"12:02",
|
||||
// "dataserv":"12","timeserv":"15:30","munthserv":"январь",weekserv:"среда"}
|
||||
|
||||
} |
||||
@ -0,0 +1,30 @@ |
||||
void vrem()//время работы сервера
|
||||
{ |
||||
|
||||
time17 = millis()/1000; |
||||
if (time17/60/60<10) { Serial.print ("0"); } |
||||
Serial.print (time17/60/60); |
||||
Serial.print (":"); |
||||
if (time17/60%60<10) { Serial.print ("0"); } |
||||
Serial.print ((time17/60)%60); |
||||
Serial.print (":"); |
||||
if (time17%60<10) { Serial.print ("0"); } |
||||
Serial.println (time17%60); |
||||
String q1=String(time17/60/60, DEC); |
||||
String q2=String((time17/60)%60, DEC); |
||||
String q3=String(time17%60, DEC); |
||||
if ((time17/60)%60<10) |
||||
{ |
||||
t10=String(time17/60/60, DEC)+":"+"0"+String((time17/60)%60, DEC); |
||||
} |
||||
else |
||||
{t10=String(time17/60/60, DEC)+":"+String((time17/60)%60, DEC); |
||||
} |
||||
|
||||
//t10 =q1+":"+q2+":"+q3 ;
|
||||
} |
||||
|
||||
/*char *time_buf;
|
||||
int t = 2055; |
||||
|
||||
sprintf(time_buf, "%d:%d", t / 100, t % 100);*/ |
||||