Внести изменения на сайте/сервере написанном на PHP:
Адрес сайта: http://accuratewind.com/
Исходники и доступ к БД и админке дам уже непосредственно исполнителю.
1. Внести изменения в таблицы базы данных:
1.1 Таблица Sensors:
1.1.1 Таблицу "ESP_power" объединить с таблицей Sensors (с сохранением функционала, чтобы осталась одна таблица Sensors содержащая колонки из ESP_power)
1.1.2 Speed Factor - сделать прозрачно (100 реальное значение - эквивалент 100%) и чтобы можно было уменьшать и увеличивать в процентах (сейчас сделано интуитивно не понятно)
1.1.3 Dir_Factor - Сделать 100 = реальное значение. Увеличение - это смещение по часовой стрелке, а уменьшение - это смещение против часовой (направление ветра).
1.1.4 Dir_enadled - убрать за ненадобностью
1.1.5 Добавить столбец GREEN_Led (значение 1 или 0) если на сайте включена зеленая обводка для этой станции (выполняется это условие <td align="center" <?php if (($data['mid'][0]>6)&&($data['min'][0]>3.5)) echo "style=\"background:#00FF66\""?>><?php echo $data['mid'][0];?></td> в applications/views/sensor.php) то сюда записывается 1, а если обводка не активна, то сюда записывается 0 (необходимо для пункта 1.2.1)
1.1.6 Добавить столбец Data_interval - частота отправки данных в минутах
1.1.7 Добавить столбец Windguru_enable - значения 1 или 0 (включена или отключена передача данных на Windguru)
1.1.8 Windguru_UID - Добавить столбец
1.1.9 Windguru_Pass - Добавить столбец
1.1.10 Station_pass - Добавить столбец (для добавления станции в персональные)
1.2 Таблица Boards:
1.2.1 Добавить таблицу Boards со столбцами:
1.2.1.1 IMEI - imei данного табло (вносится вручную и не изменяется автоматически)
1.2.1.2 Pass - пароль для добавления табло в личном кабинете (вносится вручную и не изменяется автоматически)
1.2.1.3 WiFi_Status - значения 1 или 0 (вносится вручную и не изменяется автоматически)
1.2.1.4 Station1 - данные для первой станции (просто подряд цифры: направление ветра(в числовом виде от 1 до 16), скорость ветра, время(час), время(минута), состояние светодиода(1 или 0 - смотри пункт 1.1.5)
1.2.1.5 Station2 - данные для второй станции (формат аналогично первой)
1.2.1.6 Station3 - данные для третей станции (формат аналогично первой)
1.2.1.7 Station4 - данные для четвертой станции (формат аналогично первой)
1.2.1.8 Station5 - данные для пятой станции (формат аналогично первой)
Какие станции и в каком порядке (какая будет Station1, а какая Station5) настраивается в личном кабинете - смотри пункт 2.1.5
Единицы отображения для табло такие же как и в личном кабинете пользователя - смотри пункт 2.1.6
1.3 Таблица Users:
1.3.1 Добавить столбец Admin - значения 1 или 0 (открывает или закрывает пользователю доступ к возможностям администратора)
2. Сделать личный кабинет пользователей:
2.1 В личном кабинете должны быть реализованы функции:
2.1.2 Смена пароля
2.1.3 Добавление табло (методом ввода его IMEI и Pass - смотри пункт 1.2.1)
2.1.4 Добавление личной станции (методом ввода его IMEI и Pass - берем из таблицы Sensors - смотри пункт 1.1.10) (видна только хозяину или видна всем при желании (галочка) и заполнении местоположения, высоты и описания местности)
2.1.5 Редактирование табло - на какую строку физического табло нужно выводить информацию с какой конкретной станции (меняет местами данные в таблице Boards (смотри пункт 1.2.1) Реализовать пятью выпадающими списками с названиями станций.
2.1.6 Персонализация отображения параметров: Скорость ветра(MPH, Knots, m/s) - стандартно MPH; Время(24/12) - стандартно 12; Температура(С/F) - стандартно F;
2.1.7 Настройка вариантов оплаты и оформление(автоопродление) подписки. Так же дополнительная плата за каждое табло, личную станцию и ускоренную отправку данных.
2.1.8 Контактные данные (тел, e-mail)
2.1.9 Настройка персональных станций путем изменения для них параметров в таблице Sensors - смотри пункт 1.1: name; Speed_factor; Dir_Factor; Data_interval(отправка чаще 1 раза в 15 мин за доп плату); Windguru_enable(если включено, то частота отправки не чаще 1 раза в 15 мин); Windguru_UID; Windguru_Pass
2.1.10 Поле для ввода промокода (влияет на срок действия подписки)
3. Сделать админ панель (включается расширенный функционал у пользователей с доступом - смотри пункт 1.3.1)
3.1 Реализовать тот же функционал что и в личном , только вместо личных станций - общие и личные (разделить их в разные группы)
3.2 Реализовать возможность отключать отображение каждой из станций (временно недоступна или полное отключение отображения станции)
3.3 Реализовать возможность включать и отключать WiFi на каждой из станций - реализуется путем изменения параметра Status (нужно переименовать в Wifi_Status) из таблицы Sensors - смотри пункт 1.1.1
3.4 Реализовать отображение напряжения солнечных панелей (Первая цифра значения V1 из таблицы Sensors), батареи (вторая цифра значения V1 из таблицы Sensors) и RSSI (значение V0 из таблицы Sensors) для каждой станции
4. Общие задачи:
4.1 Реализовать долгосрочный график(по выбору: неделя, месяц, 3 месяца, от даты до даты)
4.2 Реализовать возможность полной очистки таблицы Sensors (на данный момент, если удалить все строки, то график перестает работать даже при наполнении таблицы)
4.3 Реализовать отсчет времени до обновления данных каждой станции (перезапускать таймер при получении данных от станции или при истечении времени с временем указанным в Data_interval в таблице Sensors - смотри пункт 1.1.6
4.4 Сделать смену форматов по клику на них и запоминанием текущего значения для данного пользователя если это не гость (стандартные параметры для гостя и новых пользователей: MPH, 12часов; F - смотри пункт 2.1.6)
4.5 Реализовать способ оплаты и подписки.
4.6 Развернуть график и подписать направление ветра буквенно на нем (смотри файл directions.png)
4.7 Подписать направление ветра буквенно на странице Table_view, а так же включить там отображение верхних кнопок как на всех страницах
4.8 Подписать текущее направление ветра буквенно для каждой станции (добавить еще один параметр: "Dir:" после скорости ветра - смотри файл direction2.png)
4.9 Сделать так чтобы график не выходил за границы - смотри файл crossborder.png
4.10 Сделать чат онлайн поддержки
4.11 Перемещать временно неработающие станции ниже работающих
4.12 Подписать единицы измерения на странице Table_view (такие же как и на главной странице, и они так же должны быть кликабельными - смотри пункт 4.4)
4.13 Реализовать возможность сворачивания станций и запоминание этого для каждого пользователя, если это не гость(для гостя настройки такие же как в админ панели) (свернутые автоматически переносятся под не свернутые)
4.14 Реализовать возможность изменения расположения станций путем перетаскивания и запоминаем расположение станций для каждого пользователя, если это не гость (для гостя настройки такие же как в админ панели)
4.15 Реализовать возможность восстановления пароля на E-Mail (соответственно E-Mail должен быть обязательным при регистрации)
4.16 Сделать оповещение об использовании Cookie
4.17 Заменить "You are logged to... as a Nickname" на что-то более современное типа кружечка сверху слева.
4.18 Убрать лишний неиспользуемый код (почистить сайт)
4.19 Сменить надпись "Гость(рус)" на "Guest(eng)"
5. Реализовать ответы на GET запросы в формате json:
5.1 Реализовать ответ на GET запрос от метеостанций (пример запроса: www.wind.od.ua/save.php?p0=1638&p1=UI000000000000006&p2=000002073090259208122000 где UI000000000000006 это IMEI данной станции и данные нужно отдавать для соответствующей полученному IMEI станции) в формате json:
{
"wifi": true, //команда на включение (true) или отключение (false) WiFi интерфейса модуля ESP32 - смотри пункт 3.3 и 1.1.1
"s_int": 15, //интервал отправки данных станцией на сервер в минутах (1,2,5,10,15), беззнаковое целое - смотри пункт 1.1.6
"guru": true, //команда на включение (true) или отключение (false) отправки данных на Windguru - смотри пункт 1.1.7
"guru_id": "meteo_2", //UID Windguru станции, строка - смотри пункт 1.1.8
"guru_pass": "supersecret" //пароль Windguru станции, строка - смотри пункт 1.1.9
}
Комментарии приведены для понимания структуры ответа сервера на GET запрос c
информацией от станции и не должны присутствовать в ответе реального сервера.
5.2 Реализовать ответ на GET запрос от табло (табло отправляет свой IMEI и сервер должен выдавать данные из соответствующей этому IMEI строки таблицы Boards - смотри пункт 1.2.1.1) в формате json:
{
"wifi": true, //команда на включение (true) или отключение (false) WiFi интерфейса модуля ESP32 - смотри пункт 1.2.1.3
"l0": [ //начало блока данных для отображения в строке 0 табло.
"NNE", //направление ветра для станции, соответствующей строке 0 на табло, значение - одна из строк:
//"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW" - смотри пункт 1.2.1.4
"2.3", //сила ветра для станции, соответствующей строке 0 на табло - строка - смотри пункт 1.2.1.4
"14", //час фиксации данных о направлении и скорости ветра сервером о станции,
//соответствующей строке 0 на табло - строка, представляющая час, 0 до 24 - смотри пункт 1.2.1.4
"02", //минута фиксации данных о направлении и скорости ветра сервером при приеме данных со станции,
//соответствующей строке 0 на табло - строка от представляющая минуту, 0 до 59 - смотри пункт 1.2.1.4
true //включить (true) или выключить (false) светодиод 0 - смотри пункт 1.2.1.4
], //окончание блока данных для строки 0 табло
"l1": [ //начало блока данных для отображения в строке 1 табло.
"SW", //направления ветра для станции, соответствующей строке 1 на табло значение - одна из строк:
//"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW" - смотри пункт 1.2.1.5
"0.1", //сила ветра для станции, соответствующей строке 1 на табло - строка - смотри пункт 1.2.1.5
"12", //час фиксации данных о направлении и скорости ветра сервером при приеме данных со станции,
//соответствующей строке 1 на табло - строка, представляющая час, 0 до 24 - смотри пункт 1.2.1.5
"57", //минута фиксации данных о направлении и скорости ветра сервером о станции,
//соответствующей строке 1 на табло - строка от представляющая минуту, 0 до 59 - смотри пункт 1.2.1.5
true //включить (true) или выключить (false) светодиод 1 - смотри пункт 1.2.1.5
], //окончание блока данных для строки 1 табло
"l2": [ //начало блока данных для отображения в строке 2 табло.
"ENE", //направления ветра для станции, соответствующей строке 2 на табло - строка, возможные значения:
//"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW" - смотри пункт 1.2.1.6
"14.5", //сила ветра для станции, соответствующей строке 2 на табло - строка - смотри пункт 1.2.1.6
"13", //час фиксации данных о направлении и скорости ветра сервером при приеме данных со станции,
//соответствующей строке 2 на табло - строка, представляющая час, 0 до 24 - смотри пункт 1.2.1.6
"59", //минута фиксации данных о направлении и скорости ветра сервером при приеме данных со станции,
//соответствующей строке 2 на табло - строка от представляющая минуту, 0 до 59 - смотри пункт 1.2.1.6
true //включить (true) или выключить (false) светодиод 2 - смотри пункт 1.2.1.6
], //окончание блока данных для строки 2 табло
"l3": [ //начало блока данных для отображения в строке 3 табло.
"NNE", //направления ветра для станции, соответствующей строке 3 на табло - строка, возможные значения:
//"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW" - смотри пункт 1.2.1.7
"1.5", //сила ветра для станции, соответствующей строке 3 на табло - строка - смотри пункт 1.2.1.7
"14", //час фиксации данных о направлении и скорости ветра сервером при приеме данных со станции,
//соответствующей строке 3 на табло - строка, представляющая час, 0 до 24 - смотри пункт 1.2.1.7
"03", //минута фиксации данных о направлении и скорости ветра сервером при приеме данных со станции,
//соответствующей строке 3 на табло - строка от представляющая минуту, 00 до 59 - смотри пункт 1.2.1.7
true //включить (true) или выключить (false) светодиод 3 - смотри пункт 1.2.1.7
], //окончание блока данных для строки 3 табло
"l4": [ //начало блока данных для отображения в строке 4 табло.
"SSW", //направления ветра для станции, соответствующей строке 4 на табло - строка, возможные значения:
//"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW" - смотри пункт 1.2.1.8
"4.9", //сила ветра для станции, соответствующей строке 4 на табло - строка - смотри пункт 1.2.1.8
"13", //час фиксации данных о направлении и скорости ветра сервером при приеме данных со станции,
//соответствующей строке 4 на табло - строка, представляющая час, 0 до 24 - смотри пункт 1.2.1.8
"56", //минута фиксации данных о направлении и скорости ветра сервером при приеме данных со станции,
//соответствующей строке 4 на табло - строка представляющая минуту, 00 до 59 - смотри пункт 1.2.1.8
true //включить (true) или выключить (false) светодиод 4 - смотри пункт 1.2.1.8
] //окончание блока данных для строки 4 табло
}
1. Комментарии приведены для понимания структуры ответа сервера на запрос информации от табло и не должны присутствовать в
ответе реального сервера.
Реально сервер отправляет данные в ответ на запрос табло примерно так:
{
"wifi": true,
"l0":["NNE","1.5","14","03",true],
"l1":["SSW","2.1","14","02",false],
"l2":["ENE","3.8","21","59",false],
"l3":["SW","2.7","3","04",true],
"l4":["NNE","0.1","1","45",false]
}
2. В ответе сервера может отсутствовать информация для одной или нескольких строк. При этом после обработки ответа,
на табло такие строки будут погашены.
Например следующий "пустой" ответ сервера на запрос табло
{}
приведет к очистке и выключению индикации на табло полностью.