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