Исправлены ошибки взаимодействия приложения с лампой; учтены "особенности" работы библиотечного UDP клиента

This commit is contained in:
gunner47
2019-08-03 23:02:06 +03:00
parent 7e8dbfd8ad
commit 4a5245aed7
4 changed files with 33 additions and 21 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -1,19 +1,19 @@
Функциональная декомпозиция, диаграмма "классов" Функциональная декомпозиция, диаграмма "классов"
UI всё, что связано с отображением UI всё, что связано с отображением
1. ScreenManager выор отображаемого экрана 1. ScreenManager выбор отображаемого экрана
2. MainScreen управление UI'ем главного экрана (видимость, enable, цвета, позиции и т.д.) 2. MainScreen управление UI'ем главного экрана (видимость, enable, цвета, позиции и т.д.)
3. ConnectivityScreen управление UI'ем функций главного экрана (видимость, enable, цвета, позиции и т.д.) 3. ConnectivityScreen управление UI'ем экрана уствройств (видимость, enable, цвета, позиции и т.д.)
4. ModesScreen управление UI'ем функций экрана выбора эффектов (видимость, enable, цвета, позиции и т.д.) 4. ModesScreen управление UI'ем экрана выбора эффектов (видимость, enable, цвета, позиции и т.д.)
5. FavoritesScreen управление UI'ем функций экрана избранных эффектов (видимость, enable, цвета, позиции и т.д.) 5. FavoritesScreen управление UI'ем экрана избранных эффектов (видимость, enable, цвета, позиции и т.д.)
6. AlarmScreen управление UI'ем функций экрана будильника (видимость, enable, цвета, позиции и т.д.) 6. AlarmScreen управление UI'ем экрана будильника (видимость, enable, цвета, позиции и т.д.)
7. TimerScreen управление UI'ем функций экрана таймера (видимость, enable, цвета, позиции и т.д.) 7. TimerScreen управление UI'ем экрана таймера (видимость, enable, цвета, позиции и т.д.)
Backend всё, что связано с логикой Backend всё, что связано с логикой
8. DeviceManager backend функции, связанных с управлением лампами (состояние, эффекты, подключение и т.д.) 8. DeviceManager backend функции, связанных с управлением лампами (состояние, эффекты, подключение и т.д.)
9. DiscoverManager 9. DiscoverManager функции обнаружения ламп в локальной WiFi сети
10. PollingManager 10. PollingManager функции регулярного опроса ламп по таймеру для получения актуальных настроек
11. StringHelper 11. StringHelper разные вспомогательные функции для работы со строками
System все системные объекты и функции System все системные объекты и функции
11. System_DB хранилище 11. System_DB хранилище
@@ -44,7 +44,6 @@ MainScreen
ScaleSliderPositionChanged метод (событие): действия при изменении слайдера масштаба ScaleSliderPositionChanged метод (событие): действия при изменении слайдера масштаба
UpdateControls метод: обновить отображение элементов управления (статусы enabled/disabled) в зависимости от сохранённых свойств (модели данных) UpdateControls метод: обновить отображение элементов управления (статусы enabled/disabled) в зависимости от сохранённых свойств (модели данных)
SetDebugText метод: установить отладочный текст основной отладочной текстовой метке SetDebugText метод: установить отладочный текст основной отладочной текстовой метке
SetDebugTimeText метод: установить отладочный текст дополнительной отладочной текстовой метке
ConnectivityScreen ConnectivityScreen
Visible свойство: "Видимость экрана устройств" Visible свойство: "Видимость экрана устройств"
@@ -59,7 +58,6 @@ ConnectivityScreen
UpdateCurrentDeviceSocket метод: отобразить текущее устройство (DeviceManager.CurrentDeviceSocket) в полях ввода IP адреса и порта на "экране" устройств UpdateCurrentDeviceSocket метод: отобразить текущее устройство (DeviceManager.CurrentDeviceSocket) в полях ввода IP адреса и порта на "экране" устройств
UpdateCurrentDevicesSockets метод: отобразить текущий список сохранённых устройств (DeviceManager.Devices) на "экране" устройств UpdateCurrentDevicesSockets метод: отобразить текущий список сохранённых устройств (DeviceManager.Devices) на "экране" устройств
ValidateAndAddDeviceSocketToList метод: валидировать значения полей ввода IP адреса и порта и добавть запись в список сохранённых устройств; перерисовать этот список ValidateAndAddDeviceSocketToList метод: валидировать значения полей ввода IP адреса и порта и добавть запись в список сохранённых устройств; перерисовать этот список
SetConnectionStatus метод: установить статус Подлкючен/Отключен соответствующей текстовой метке на этом экране
UpdateScreen метод: обновить все элементы управления на "экране" устройств согласно модели данных UpdateScreen метод: обновить все элементы управления на "экране" устройств согласно модели данных
ModesScreen ModesScreen
@@ -81,7 +79,7 @@ TimerScreen
DeviceManager DeviceManager
Connected свойство: подключено ли устройство (лампа)? точнее, был ли получен ответ на последнюю высланную ему команду Connected свойство: подключено ли устройство (лампа)? точнее, был ли получен ответ на последнюю высланную ему команду
State свойство: полученное командой GET состояние устройства (CURR...) State свойство: полученное командой GET состояние устройства (CURR...), список (не строка)
Devices свойство: список устройств (хранимое свойство) Devices свойство: список устройств (хранимое свойство)
CurrentDeviceSocket свойство: текущее устройство (хранимое свойство) CurrentDeviceSocket свойство: текущее устройство (хранимое свойство)
Modes свойство: список доступных режимов, захардкожен одновременно в лампе и в приложении, должен совпадать Modes свойство: список доступных режимов, захардкожен одновременно в лампе и в приложении, должен совпадать
@@ -89,14 +87,18 @@ DeviceManager
ConnectDeviceSocket метод: стартовать таймер (polling timer) с регулярной отправкой команд GET/DEB на устройство ConnectDeviceSocket метод: стартовать таймер (polling timer) с регулярной отправкой команд GET/DEB на устройство
DisconnectDeviceSocket метод: остановить таймер (polling timer) с регулярной отправкой команд GET/DEB на устройство; очистить свойства Connected и State DisconnectDeviceSocket метод: остановить таймер (polling timer) с регулярной отправкой команд GET/DEB на устройство; очистить свойства Connected и State
GetCurrentModeId метод: получить номер текущего эффекта из свойства State GetCurrentModeId метод: получить номер текущего эффекта из свойства State
GetCurrentModeId метод: получить имя текущего эффекта из свойства State GetCurrentModeName метод: получить имя текущего эффекта из свойства State
GetCurrentBrightness метод: получить значение текущей яркости из свойства State GetCurrentBrightness метод: получить значение текущей яркости из свойства State
GetCurrentSpeed метод: получить значение текущей скорости из свойства State GetCurrentSpeed метод: получить значение текущей скорости из свойства State
GetCurrentScale метод: получить значение текущего масштаба из свойства State GetCurrentScale метод: получить значение текущего масштаба из свойства State
GetCurrentOn метод: получить значение текущей состояния Вкл/Выкл из свойства State GetCurrentOn метод: получить значение текущего состояния Вкл/Выкл из свойства State
GetCurrentEspMode метод: получить значение текущей состояния ESP_MODE из свойства State GetCurrentEspMode метод: получить значение текущего состояния ESP_MODE из свойства State
GetCurrentUseNtp метод: получить значение текущей состояния USE_NTP из свойства State GetCurrentUseNtp метод: получить значение текущего состояния USE_NTP из свойства State
GetCurrentUseTime метод: получить значение текущего времени на устройстве из свойства State
SaveDeviceSocketSettings метод: сохранить с базу данных приложения хранимые значения (текущее стройство и список устройств) SaveDeviceSocketSettings метод: сохранить с базу данных приложения хранимые значения (текущее стройство и список устройств)
SetDeviceOffline метод: установить свойства Connected и State в начальное состояние (очистить), соответствует состоянию "устройство не подключено"
ResetCurrentDevice метод: установить свойство CurrentDeviceSocket в начальное состояние (очистить), соответствует состоянию "устройство не выбрано"
ResetCurrentDevices метод: установить свойство Devices в начальное состояние (очистить), соответствует состоянию "профили устройств не заданы"
ValidateIpPort метод: валидировать переданное в качестве параметра значение IP адреса или порта ValidateIpPort метод: валидировать переданное в качестве параметра значение IP адреса или порта
DiscoverManager DiscoverManager
@@ -112,20 +114,24 @@ PollingManager
UdpPort свойство: номер UDP порта UdpPort свойство: номер UDP порта
TimerIntervalMs свойство: время работы таймера (ограничение используемого компонента), по его истечении таймер постоянно перезапускается для непрерывной работы TimerIntervalMs свойство: время работы таймера (ограничение используемого компонента), по его истечении таймер постоянно перезапускается для непрерывной работы
TimerTickMs свойство: интервал времени, через который будет сгенерировано событие таймера TimerTickMs свойство: интервал времени, через который будет сгенерировано событие таймера
TimerTickCounter свойство: счётчик срабатываний таймера, нужен чтобы вызывать команды управления/запроса состяния устройств по очереди x из n - одна команда (GET), y из n - другая (DEB) LastResponse свойство: текст последнего полученного ответа от модуля esp
StartTimer метод: старт polling таймера LastResponseTime свойство: время последнего полученного ответа от модуля esp
TimerTimerNow метод (событие): действия при срабатывании события polling таймера (отправка команд и перезапуск таймера) TimerTimerNow метод (событие): действия при срабатывании события polling таймера (отправка команд и перезапуск таймера)
UdpClientRecieved метод (событие): действия при получении ответа на отправленные команды от подключенного устройства UdpClientRecieved метод (событие): действия при получении ответа на отправленные команды от подключенного устройства
SendUdpCommand метод: отправить команду, принятую в качестве входного параметра на подключенное устройство StartPolling метод: старт polling таймера
SendGetDebCommandToDevice метод: отправить команды GET или DEB (в зависимости от входного параметра) на подключенное устройство StopPolling метод: стоп polling таймера
UpdateDeviceStatus метод: обновить сворйство DeviceManager.Connected, если не установлена (или пропала) связь с устройством; ввиду специфики реализации библиотечного компонента UDP Client приложение постоянно получает его события Recieved с последней строкой-ответом от модуля esp; отсутствие связи с модулем определяется как повторяющийся ответ (он уникален, потому что содержит время) или устаревший ответ (время последнего ответа больше интервала таймера)
RequestDeviceState метод: запросить состояние устройства (определить команду и отправить её в udp пакете)
SendGetCommandToDevice метод: отправить команду GET на подключенное устройство
SendPowerOnOffCommandToDevice метод: отправить команды On/Off (в зависимости от входного параметра) на подключенное устройство SendPowerOnOffCommandToDevice метод: отправить команды On/Off (в зависимости от входного параметра) на подключенное устройство
SendSetModeCommandToDevice метод: отправить команду смены эффекта на подключенное устройство SendSetModeCommandToDevice метод: отправить команду смены эффекта на подключенное устройство
SendSetBrightnessCommandToDevice метод: отправить команду установки яркости на подключенное устройство SendSetBrightnessCommandToDevice метод: отправить команду установки яркости на подключенное устройство
SendSetSpeedCommandToDevice метод: отправить команду установки скорости на подключенное устройство SendSetSpeedCommandToDevice метод: отправить команду установки скорости на подключенное устройство
SendSetScaleCommandToDevice метод: отправить команду установки масштаба на подключенное устройство SendSetScaleCommandToDevice метод: отправить команду установки масштаба на подключенное устройство
HandleDeviceResponse метод: обработка ответа от подключенного устройства на отправленные команды HandleDeviceResponse метод: обработка ответа от подключенного устройства на отправленные команды
SendUdpCommand метод: отправить команду, приянтую в качестве входного аргумента, на подключенное устройствоС (обобщённый метод)
StringHelper StringHelper
GetIpPortString метод: получить строку формата IP:PORT из входных параметров IP и PORT GetIpPortString метод: получить строку формата IP:PORT из входных параметров IP и PORT
GetIpFromIpPortString метод: получить IP из входного параметра формата IP:PORT GetIpFromIpPortString метод: получить IP из входного параметра формата IP:PORT
GgetPortFromIpPortString метод: получить PORT из входного параметра формата IP:PORT GetPortFromIpPortString метод: получить PORT из входного параметра формата IP:PORT

View File

@@ -186,6 +186,12 @@ void sendCurrent()
#else #else
inputBuffer += "0"; inputBuffer += "0";
#endif #endif
inputBuffer += " ";
#ifdef USE_NTP
inputBuffer += timeClient.getFormattedTime();
#else
inputBuffer += String(millis());
#endif
#ifdef GENERAL_DEBUG #ifdef GENERAL_DEBUG
Serial.println(inputBuffer); Serial.println(inputBuffer);