mirror of
https://github.com/gunner47/GyverLamp.git
synced 2025-08-07 09:00:30 +03:00
Добавлена блокировка кнопки на лампе из android приложения
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -67,12 +67,12 @@ ConnectivityScreen
|
||||
SaveAllConnectionButtonClick метод (событие): действия при нажатии на кнопку "Сканировать и добавить"
|
||||
DeviceSocketListViewAfterPicking метод (событие): действия при выборе устройства из списка сохранённых и его подключение
|
||||
BaсkButtonClick метод (событие): действия при нажатии кнопки "Назад" на "экране" устройств
|
||||
SettingsButtonClick метод: отобразить экран настроек
|
||||
UpdateConnectivityStatus метод: обновить статус устройства "Подключен"/"Отключен" на "экране" устройств
|
||||
UpdateCurrentDeviceSocket метод: отобразить текущее устройство (DeviceManager.CurrentDeviceSocket) в полях ввода IP адреса и порта на "экране" устройств
|
||||
UpdateCurrentDevicesSockets метод: отобразить текущий список сохранённых устройств (DeviceManager.Devices) на "экране" устройств
|
||||
ValidateAndAddDeviceSocketToList метод: валидировать значения полей ввода IP адреса и порта и добавть запись в список сохранённых устройств; перерисовать этот список
|
||||
UpdateScreen метод: обновить все элементы управления на "экране" устройств согласно модели данных
|
||||
SettingsButtonClick метод: отобразить экран настроек
|
||||
|
||||
ModesScreen
|
||||
Visible свойство: "Видимость экрана эффектов"
|
||||
@@ -87,6 +87,7 @@ FavoritesScreen
|
||||
OnOffSwitchChanged метод (событие): действия при установке/снятии переключателя включения режима избранных эффектов
|
||||
IntervalListPickerAfterPicking метод (событие): действия при выборе интервала времени (статической состявляющей) между автоматическими переключениями избранных эффектов
|
||||
DispersionListPickerAfterPicking метод (событие): действия при выборе разброса времени (случайной состявляющей) между автоматическими переключениями избранных эффектов
|
||||
UseSavedOnOffSwitchChanged метод (событие): действия при сохранении/удалении сохранённого состояния переключателя включения режима избранных эффектов
|
||||
ListViewIconClick метод (событие): действия при добавлении/удалении эффекта в/из список избранных
|
||||
ListViewelementTouchUp метод (событие): служебный метод, необходимый для корректной отрисовки фона элемента в списке избранных эффектов
|
||||
Initialize метод: настраивает и заполняющий специфический (кастомный) компонент ListViewer
|
||||
@@ -139,11 +140,16 @@ TimerScreen
|
||||
|
||||
SettingsScreen
|
||||
Visible свойство: "Видимость экрана настроек"
|
||||
Initialized свойство: "Экран настроек инициализирован"
|
||||
BlockControlEventsEmitting свойство: "Не генерировать события от элементов управления" (переключателя); нужно, например, чтобы предотвратить switch.changed при его enable/disable
|
||||
BaсkButtonClick метод (событие): действия при нажатии кнопки "Назад" на "экране" настроек
|
||||
OtaButtonClick метод (событие): действия при нажатии кнопки "Режим обновления" на "экране" настроек
|
||||
ButtonEnabledSwitchChanged метод (событие): действия при установке/снятии переключателя разблокировки аппаратной кнопки на лампе
|
||||
UpdateScreen метод: обновить все элементы управления на "экране" настроек согласно модели данных
|
||||
UpdateControls метод: обновить отображение элементов управления (статусы enabled/disabled) в зависимости от сохранённых свойств (модели данных)
|
||||
|
||||
DeviceManager
|
||||
Connected свойство: подключено ли устройство (лампа)? точнее, был ли получен ответ на последнюю высланную ему команду
|
||||
Connected свойство: подключено ли устройство (лампа) точнее, был ли получен ответ на последнюю высланную ему команду
|
||||
State свойство: полученное командой GET состояние устройства (CURR...), список (не строка)
|
||||
Devices свойство: список устройств (хранимое свойство)
|
||||
CurrentDeviceSocket свойство: текущее устройство (хранимое свойство)
|
||||
@@ -163,6 +169,7 @@ DeviceManager
|
||||
GetCurrentEspMode метод: получить значение текущего состояния ESP_MODE (из свойства State)
|
||||
GetCurrentUseNtp метод: получить значение текущего состояния USE_NTP 9из свойства State)
|
||||
GetTimerOnOffFromState метод: получить значение текущего состояния таймера (из свойства State)
|
||||
GetButtonEnabled метод: получить значение текущего состояния (заблокирована/разблокирована) аппаратной кнопки на лампе
|
||||
GetCurrentTime метод: получить значение текущего времени на устройстве (из свойства State)
|
||||
SaveDeviceSocketSettings метод: сохранить с базу данных приложения хранимые значения (текущее стройство и список устройств)
|
||||
SetDeviceOffline метод: установить свойства Connected и State в начальное состояние (очистить), соответствует состоянию "устройство не подключено"
|
||||
@@ -192,7 +199,10 @@ DeviceManager
|
||||
GeFavoritesOnOff метод: получить состояние вкл/выкл режима избранных эффектов (из свойства FavoritesState)
|
||||
GeFavoritesInterval метод: получить интервал времени смены избранных эффектов (из свойства FavoritesState)
|
||||
GeFavoritesDispersion метод: получить разброс времени смены избранных эффектов (из свойства FavoritesState)
|
||||
GetFavoritesUseSavedOnOff метод: получить сохранённое состояние переключателя включения режима избранных эффектов
|
||||
GeFavoritesModesList метод: получить список эффектов с указанным состояние (включен/исключён в избранные) для каждого из них
|
||||
RequestOtaUpdate метод: перевести лампу в состояние ожидания прошивки по воздуху
|
||||
SendEnableHardwareButtonCommand метод: установить состояние (заблокирована/разблокирована) аппаратной кнопки на лампе
|
||||
|
||||
DiscoverManager
|
||||
TimeoutMs свойство: время ожидания ответа от устройств на multicast команду DISCOVER
|
||||
|
@@ -94,6 +94,8 @@
|
||||
- * периодически - определяется константой PRINT_TIME в Constants.h - от раза в час (красным цветом) до раза в минуту (синим цветом) с яркостью текущего эффекта как при включенной, так и при выключенной матрице
|
||||
--- 19.10.2019
|
||||
- Добавлены "ночные часы" (от NIGHT_HOURS_START до NIGHT_HOURS_STOP включительно) и "дневные часы" (всё остальное время), для которых доступна регулировка яркости для вывода времени бегущей строкой - NIGHT_HOURS_BRIGHTNESS и DAY_HOURS_BRIGHTNESS
|
||||
--- 20.10.2019
|
||||
- Добавлена блокировка кнопки на лампе из приложения; сохраняется в EEPROM память
|
||||
*/
|
||||
|
||||
// Ссылка для менеджера плат:
|
||||
@@ -189,6 +191,7 @@ bool loadingFlag = true;
|
||||
bool ONflag = false;
|
||||
uint32_t eepromTimeout;
|
||||
bool settChanged = false;
|
||||
bool buttonEnabled = true;
|
||||
|
||||
unsigned char matrixValue[8][16];
|
||||
|
||||
@@ -235,6 +238,8 @@ void setup()
|
||||
wifiManager.resetSettings(); // сброс сохранённых SSID и пароля при старте с зажатой кнопкой, если разрешено
|
||||
LOG.println(F("Настройки WiFiManager сброшены"));
|
||||
}
|
||||
buttonEnabled = true; // при сбросе параметров WiFi сразу после старта с зажатой кнопкой, также разблокируется кнопка, если была заблокирована раньше
|
||||
EepromManager::SaveButtonEnabled(&buttonEnabled);
|
||||
ESP.wdtFeed();
|
||||
#endif
|
||||
#endif
|
||||
@@ -253,7 +258,7 @@ void setup()
|
||||
|
||||
// EEPROM
|
||||
EepromManager::InitEepromSettings( // инициализация EEPROM; запись начального состояния настроек, если их там ещё нет; инициализация настроек лампы значениями из EEPROM
|
||||
modes, alarms, &espMode, &ONflag, &dawnMode, ¤tMode,
|
||||
modes, alarms, &espMode, &ONflag, &dawnMode, ¤tMode, &buttonEnabled,
|
||||
&(FavoritesManager::ReadFavoritesFromEeprom),
|
||||
&(FavoritesManager::SaveFavoritesToEeprom));
|
||||
LOG.printf_P(PSTR("Рабочий режим лампы: ESP_MODE = %d\n"), espMode);
|
||||
@@ -373,7 +378,10 @@ void loop()
|
||||
#endif
|
||||
|
||||
#ifdef ESP_USE_BUTTON
|
||||
buttonTick();
|
||||
if (buttonEnabled)
|
||||
{
|
||||
buttonTick();
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef OTA
|
||||
|
@@ -17,8 +17,10 @@
|
||||
* DAWN1 - установить "рассвет" за 5 минут до будильника (1 = 5 минут - номер опции в выпадающем списке в приложении, нумерация с единицы)
|
||||
* TMR_SET 1 3 300 - установить таймер; описание параметров - см. команду TMR ниже
|
||||
* FAV_SET 1 60 120 0 0 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 - установить режим "избранное", параметры - см. команду FAV ниже
|
||||
* BTN ON - разблокировать кнопку на лампе
|
||||
* BTN OFF - заблокировать кнопку на лампе
|
||||
* Лампа отправляет своё состояние сразу после включения и после каждого изменения в топик LedLamp/LedLamp_00316765/state; payload:
|
||||
* "CURR 7 14 4 50 1 1 1 0 21:25:50", где:
|
||||
* "CURR 7 14 4 50 1 1 1 0 1 21:25:50", где:
|
||||
* CURR - идентификатор команды, CURR - текущее состояние лампы
|
||||
* 7 - номер текущего эффекта
|
||||
* 14 - яркость
|
||||
@@ -26,8 +28,9 @@
|
||||
* 50 - масштаб
|
||||
* 1 - признак "матрица включена"
|
||||
* 1 - режим ESP_MODE
|
||||
* 1 - признак "работает таймер"
|
||||
* 0 - признак USE_NTP (пытаться синхронизировать время по серверам времени в интернете)
|
||||
* 1 - признак USE_NTP (пытаться синхронизировать время по серверам времени в интернете)
|
||||
* 0 - признак "работает таймер"
|
||||
* 1 - признак "кнопка разблокирована"
|
||||
* 21:25:50 - текущее время (если не синхронизировано, показывает время от старта модуля)
|
||||
* "ALMS 1 0 0 0 0 0 0 0 390 0 0 0 0 0 0 1"
|
||||
* ALMS - идентификатор команды, ALMS - настройки будильников
|
||||
|
@@ -6,6 +6,11 @@ static bool startButtonHolding = false; // флаг: кно
|
||||
|
||||
void buttonTick()
|
||||
{
|
||||
if (!buttonEnabled) // события кнопки не обрабатываются, если она заблокирована
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
touch.tick();
|
||||
uint8_t clickCount = touch.hasClicks() ? touch.getClicks() : 0U;
|
||||
|
||||
|
@@ -290,6 +290,30 @@ void processInputBuffer(char *inputBuffer, char *outputBuffer, bool generateOutp
|
||||
#endif
|
||||
}
|
||||
|
||||
else if (!strncmp_P(inputBuffer, PSTR("BTN"), 3))
|
||||
{
|
||||
if (strstr_P(inputBuffer, PSTR("ON")) - inputBuffer == 4)
|
||||
{
|
||||
buttonEnabled = true;
|
||||
EepromManager::SaveButtonEnabled(&buttonEnabled);
|
||||
sendCurrent(inputBuffer);
|
||||
}
|
||||
else if (strstr_P(inputBuffer, PSTR("OFF")) - inputBuffer == 4)
|
||||
{
|
||||
buttonEnabled = false;
|
||||
EepromManager::SaveButtonEnabled(&buttonEnabled);
|
||||
sendCurrent(inputBuffer);
|
||||
}
|
||||
|
||||
#if (USE_MQTT)
|
||||
if (espMode == 1U)
|
||||
{
|
||||
strcpy(MqttManager::mqttBuffer, inputBuffer);
|
||||
MqttManager::needToPublish = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
inputBuffer[0] = '\0';
|
||||
@@ -324,6 +348,7 @@ void sendCurrent(char *outputBuffer)
|
||||
#endif
|
||||
|
||||
sprintf_P(outputBuffer, PSTR("%s %u"), outputBuffer, (uint8_t)TimerManager::TimerRunning);
|
||||
sprintf_P(outputBuffer, PSTR("%s %u"), outputBuffer, (uint8_t)buttonEnabled);
|
||||
|
||||
#ifdef USE_NTP
|
||||
sprintf_P(outputBuffer, PSTR("%s %s"), outputBuffer, timeClient.getFormattedTime().c_str());
|
||||
|
@@ -26,7 +26,7 @@ void timerMinim::setInterval(uint32_t interval)
|
||||
|
||||
bool timerMinim::isReady()
|
||||
{
|
||||
if ((long)millis() - _timer >= _interval)
|
||||
if ((uint32_t)millis() - _timer >= _interval)
|
||||
{
|
||||
_timer = millis();
|
||||
return true;
|
||||
|
Reference in New Issue
Block a user