ESP, IoT WiFi лампа-будильник. Прошивка FireLamp_JeeUI (GPL)

WiFi лампа-будильник. Прошивка FireLamp_JeeUI (GPL)
Инструкция по установке прошивки (ее можно скачать отсюда , это последняя стабильная версия), но самая актуальная версия, которая разрабатывается в данный момент, находится тут: develop-ветка

Существует
Консольный билдер для прошивки (Win8.1 - 10) , если нет желания ставить VS Code+PIO, можете использовать данный вариант.


Еще варианты подключений можно поглядеть тут.

-----------------------------------------------------------------------

Также можно прошить заранее подготовленную прошивку и ФС отсюда, здесь самая новая версия от 25.02.2021
Проект: скачать отсюда, фреймворк JeeUI2 переработан и взят отсюда , но за время разработки фреймворк был существенно переработан, поменял название и фактически лампа уже работает на фреймворке EmbUI, который позволяет строить WebUI интерфейсы для любых проектов, считайте его готовым движком создания интерфейсов под ESP8266/ESP32, может использоваться кем угодно под свои задачи, полностью открыт и разработка продолжается. На уровне фреймворка есть:
1. Асинхронный вебсервер, с поддержкой до 5 одновременных клиентов и синхронизацией между ними.
2. Поддержка http-get запросов
3. Поддержка mqtt
4. SSDP, mDNS, полностью автоматический WiFi c восстановлением после сбоев
5. Предустановленный и преднастроенный базовый интерфейс
6. Фреймворк достаточно экономно расходует память и можно отключить некоторые потребляющие память части, типа SSDP
7. Поддержка локализации
8. Инструкция и примеры использования
В общем будут вопросы по фреймворку и его использованию - задавайте в теме. Лампа не единственный проект который может использовать фреймворк, на данный момент на нем же у меня в тестовом варианте собрана веб-камера для esp32, но пока еще не довел до ума и не выделил в отдельный проект.

Далее более подробно по установке:

Учтите, что PIO и VS Code развиваются и инструкция может быть немного не актуальна и не соответствовать текущим версиям ПО. При возникновении вопросов/проблем - задавайте их в теме.

1. Устанавливаем Visual Studio Code в зависимости от вашей операционной системы 32 или 64 битную версию.
2. Устанавливаем Git он тоже понадобится, так как Visual Studio Code на пару с PlatformIO будут ругаться что его им очень не хватает.
3. Перезагружаем компьютер.
4. Установить PlatformIO для этого запустить Visual Studio Code и в меню View выбрать пункт Extensions - либо воспользоваться сочетанием клавиш (Ctrl+Shift+X)
5. Выбрать PlatformIO IDE и нажать Install
6. Перезапустить Visual Studio Code у вас сразу откроется вкладка PIO Home, работаем в ней.
7. В вкладке Открыть проект - Open Project - заходим в папку с проектом и нажимаем Open "FireLamp_JeeUI-master"



8. Слева открываем Platformio.ini и делаем необходимые настройки, раскомментировать нужный board, это плата на которой вы собираете лампу, и закомментируйте ненужную.
9. Тут же нужно добавить настройки Com порта на котором у вас ваша плата, это делается командой upload_port = COM8 (где COM8 номер вашего порта COM2, COM3 и т.д.)
10. Останется настроить саму прошивку под себя это делается в include - config.h там все подробно откомментировано.
11. Первоначально вам необходимо будет записать файлы в ФС контроллера, иначе веб-интерфейс не будет доступен! Делается это так меню Terminal - Run Task.. (Ctrl+Alt+T) - PlatformIO - PlatformIO: Upload File System Image, если вы не забыли указать нужный Com порт и подключили плату все должно быть успешно.
Так вот там по умолчанию нет этого пункта.
Нужно нажать Кнопку PlatformIO, потом выбрать конфигурацию, которую собираешь и только потом Upload Filesystem Image. И только после такого она появляется в Run Task. Правильный скриншот прилагаю.

1600444586890.png
12. Можно собирать и заливать прошивку в лампу. Делается это нажатием на PlatformIO Upload.



P.S. Если вы забудете выполнить 11 пункт то не сможете подключится к лампе, при подключении к ней она будет перезагружаться.

Способы обновления прошивки:

OTA
- обновляется сама прошивка и есть возможность обновить File System Image как это описано выше, можно работать с лампой так как и по физическому подключению к COM порту без разбора и подключения проводом.

Для обновления прошивки по OTA нужно сделать изменения в файле PlatformIO.ini
1. Закомментировать по аналогии с другими строками и соблюдением пробелов, ваш COM порт.

2. Раскомментировать следующие строки, обратите внимание пробелы очень важны, если не соблюсти их будет выдаваться ошибка при запуске прошивки и она так и не начнется.

В строке с IP адресом, указать ваш адрес лампы.

C++:
upload_protocol = espota
upload_port = 192.168.1.36
upload_flags =
    --auth=12345
    -p 3232


Перед началом обновления, не забудьте перевести лампу в режим обновления PIO-ОТА, для http обновления (читать ниже) это делать не обязательно. Также убедитесь, что обновление прошивки через PIO разрешено дефайном в user_config.h

* внимание, для питона важны отступы (пробелы), так что внимательно выравнивайте на одном уровне

HTTP - обновление через web интерфейс, можно обновить как прошивку, так и ФС:
IP адрес лампы\update указываем файл firmware.bin или то же самое через WebUI
Нужно будет выбрать файл и нажать Upload, на кнопке Обновление появятся проценты прогресса.

1606756811806.png
Здесь на картинке под 1 показан вариант ОТА через PIO, под 2 - вариант через http для WebUI.

Для формирования файла firmware.bin нужно в PlatformIO запустить сборку прошивки без заливки. Для формирования ФС - соответственно соберите ФС и загрузите файл ФС пользуясь теми же кнопками, как при заливке прошивки.
1588144337363.png



После непродолжительной сборки прошивки, терминал выдаст ответ:
= [SUCCESS] =
файл будет находится в папке со скачанной прошивкой .pio\build\esp8266dev\
Я прошиваю после стирания:
Быстрый старт.

Что потребуется:
Visual Studio Code - скачиваем и устанавливаем, желательно перелогиниться или перезагрузиться, чтобы точно применились настройки путей.
Под VS Code устанавливается PlatformIO, дальше вся работа там. Если кому приятнее работать в ArduinoIDE - адаптируйте самостоятельно, у меня терпения не хватает ждать пока там все соберется, так что мне проще в PlatformIO все делать.

Проект: скачать отсюда, фреймворк JeeUI2 переработан и взят отсюда , но он уже включен в проект, так что дополнительно качать не нужно.

В общем у вас после открытия проекта должно выглядеть как-то так:
1583172758919.png

Контроллер ESP8266/ESP32 выбирается в файле platformio.ini.
ВНИМАНИЕ: Первоначально вам необходимо будет записать файлы в ФС контроллера, иначе веб-интерфейс не будет доступен!
Делается это так: PlatformIO->Run Task...->Upload File System Image
1583173209762.png
После этого можно собирать проект и записывать его в контроллер. Сами файлы для загрузки в ФС находятся в \FireLamp_JeeUI\data там же у меня находятся и файлы конфигурации config.json и eff_config.json . Вы также можете поместить свои предварительно созданные конфигурации, если это необходимо. Также к файловой системе можно получить доступ, если при компиляции проекта была раскомментирована настройка:
//#define USE_FTP // доступ к SPIFFS по FTP, логин/пароль: esp8266
После чего вы можете подключиться фтп-клиентом и скачать/записать то, что вам нужно.

---------------------
Я бы ещё в инструкции дописал, как собирать проект и записывать его в контроллер, сам искал долго эти кнопки.
Кнопки по сборке проекта, включению вывода сообщений отладчика, очистке проекта от объектных файлов, остановке задач и т.д. находятся внизу, слева:
1583602065364.png

Создание конфигурации:
Файл user_config.h.default переименовываете в user_config.h и редактируете.
Обратите внимание, то что для кнопки и плеера существует также возможность менять пины после перепрошивки, сделано это для тех, кто хочет залить бинарник, а затем настроить эти пины под себя:
1607700948873.png
Порядок создания пользовательской конфигурации описан здесь: user_config.h , пример такого файла можно посмотреть тут .
По кнопке:
* Из выключенного состояния
- 1 касание - включить на последнем эффекте
- 2 касания - включить в режиме ДЕМО
- долгое удержание - включить в режиме "белая лампа" на минимальную яркость (ночник)
- касание, удержание - включить в режиме "белая лампа" на максимальную яркость
* Во включенном состоянии
- 1 касание - выключить лампу
- 2 касания - следующий эффект
- 3 касания - предыдущий эффект
- 4 касания + 4 касания - запуск сервиса ОТА
- 5 касаний - вывод IP на лампу
- 6 касаний - вывод текущего времени бегущей строкой

- удержание - регулировка яркости
- 1 касание, удержание - регулировка "скорости" эффекта
- 2 касания, удержание - регулировка "масштаба" эффекта

Это дефолтное состояние для кнопки, но абсолютно любую настройку можно поменять, к примеру вот переход к 253 эффекту по 7 нажатиям во включенном состоянии:
1606757828411.png
В общем если что-то нужно или наоборот не нужно - настраивайте под себя. :)
По HTTP/MQTT (https://community.alexgyver.ru/thre...a-firelamp_jeeui-gpl.2739/page-299#post-73384)
команды можно посылать на лампу через браузер или curl по URL вида http://esp-xxxxxx/cmd?arg=param
- /cmd?on /cmd?off /cmd?on=true /cmd?on=false - вкл/выкл
- /cmd?demo - режим ДЕМО
- /cmd?gbright /cmd?gbright=true - проверка/установка для глобальной яркости
- /cmd?msg=Hello - вывод сообщения на лампу
- /cmd?bright=0-255 - яркость
- /cmd?speed=0-255 - скорость
- /cmd?scale=0-255 - шкала
- /cmd?effect=N - эффект номер N
- /cmd?move_next - следующий эффект
- /cmd?move_prev - предыдущий эффект
- /cmd?move_rnd - случайный эффект
- /cmd?effect - номер текущего эффекта
- /cmd?eff_config - конфигурация текущего эффекта
- /cmd?warning /cmd?warning=[16777215,5000,500,1] - неблокирующий вывод мигалки поверх эффекта (выдача предупреждений), первое число - цвет, второе - полный период, третье - полупериод мигания, четвертое - тип уведомления (0 - цвет, 1-2 - цвет и счетчик, 3 - счетчик)
- /cmd?alarm=true - форсировать включение будильника
- /cmd?control=[N,val] - получить/установить значение дин. контрола
- /cmd?inccontrol=[N,val] - возможность увеличить/уменьшить на val текущее значение контрола, не превышая мин/макс
- /cmd?list - полный список эффектов
- /cmd?demolist - список демо
- /cmd?showlist - список отображаемых
- /cmd?reboot - перезагрузить лампу
- /cmd?OTA - запустить сервер обновления OTA через PIO
- /cmd?draw=[цвет,X,Y]
- /cmd?matrix - отдает размеры [X,Y]
- /cmd?fillmatrix=цвет - заливка цветом

так же команды можно объединять в цепочки в одной посылке, т.е. допустим включить лампу, установить яркость, перейти к эффекту
аналогичные команды работают и для MQTT, если чего-то не хватает или что-то не получается - спрашивайте в теме

Дополнительные служебные комманды:

- /heap - показать свободное место на куче
- /echo - показать эхо-ответ (json для формирования интерфейса)
- /config - показать текущий конфиг (json основных настроек)
- /scan - показать доступные WiFi-сети
- /config.json - скачать активный конфиг лампы
- /events_config.json - скачать активный конфиг событий
- /update - форма http-обновления прошивки
- /edit - вызов редактора конфигов (esp8266/esp8266 - логин/пассворд)

После подключения к лампе в режиме точки доступа она доступна по в браузере по адресу http://192.168.4.1 , если же после этого ее переподключить к роутеру, то узнать ее адрес можно по 5 нажатий на кнопку - вывод IP, если кнопки нет - то при перезапуске лампы она однократно напишет IP. Также ее можно найти в сетевом окружении компьютера:
1609580490648.png
После обнаружения - доступен переход по адресу http://firelamp/ (работает нестабильно). Либо можно c помощью утилиты Service Browser найти сервис http и IP лампы, либо просто поглядеть IP который выдал роутер, если он имеет возможность показать этот адрес.

Основные возможности прошивки:
  • Повторяет все возможности других прошивок по управлению эффектами и предоставляет массу других возможностей
  • Управление по MQTT (см. список команд под спойлером выше), подробную инструкцию по установке и настройке можете почитать тут или посмотреть видео установки брокера
  • Отправка текстовых сообщений на лампу, в том числе специальных %IP, %TM, %EN, %DT
  • Настройка и вывод времени, само время синхронизуется по ntp или может задаваться вручную
  • Периодический вывод времени и/или новогоднего отсчета, лампа может использоваться как гирлянда на окно, корректный вывод текста с отзеркаливанием в случае если лампа "смотрит" во двор.
  • OTA в двух вариантах, при обновлении файловой системы, чтобы не терять настройки можете их сохранить и поместить в папку /data
  • Гибкое и настраиваемое управление кнопкой, индикаторы управления
  • Каждый эффект может иметь дополнительные динамические контролы, кроме трех стандартных. При необходимости любой контрол может быть скрыт
  • Подключение микрофона MAX9814 элементарное: +3.3В с ESP на Vdd микрофона, землю (GND) на землю, сигнальный (Out) микрофона на пин А0. На этом все
  • Возможно менять состояние произвольного пина/пинов (HIGH/LOW/TOGGLE) по событию. Строка настройки вида: [{'pin':1,'act':'H'}], допустимые варианты 'H'==HIGH, 'L'==LOW, 'T'==TOGGLE, также можно записать список, к примеру: [{'pin':1,'act':'H'},{'pin':2,'act':'L'},{'pin':3,'act':'T'}] - 1 установит в HIGH, 2 в LOW, 3 - переключит. Если для кого-то подобное управление слишком сложно, то есть возможность активировать AUX-пин, с прямым управлением им через http/mqtt или UI.
  • Есть возможность ставить множественные будильники и прочие автоматизации
  • Добавлен микрофон (MAX9814) и цветомузыка на основе амплитуды/частоты. Добавлен эффект "Частотный анализатор", множество эффектов имеют зависимость от звука, которую при необходимости можно отключить, как выборочно, так и для всех эффектов сразу
  • Поддержка http-команд , те же команды работают и для mqtt
  • Пользовательский интерфейс всегда актуален и синхронизирован с прошивкой, т.к. является частью прошивки
  • Если будет написано приложение под андроид/иос/... то оно тоже будет синхронизировано, т.к. интерфейс конструируется динамически
  • DF Player Mini - озвучивание эффектов, MP3-плеер, озвучивание времени, при проблемах с плеером обязательно поглядите сюда, подключение плеера - изучите это сообщение. Архив со звуковыми файлами можете взять, к примеру - тут, внимание изменена структура каталога файлов времени - последняя версия тут.
  • При потере связи с роутером прошивка автоматически создаст точку доступа, при восстановлении связи - переподключится, никаких проблем с переключением режимов нет, никаких задержек при недоступности серверов времени - тоже нет, лампа полностью доступна и управляется одинаковым образом как в STA режиме, так и в AP. IP лампы можно поглядеть как по нажатию кнопки, так и в сетевом окружении компьютера, либо через просмотр сервисов (поддерживается Bonjour-сервисы)
  • Прошивка гибко конфигурируется, можно отключать неиспользуемый функционал (кнопку, плеер, цветомузыку и т.д.)
  • Рисовалка (пока через http/mqtt, но будет и через UI)
  • По интеграции в Home Assistant можете поглядеть тут, самая новая и актуальная версия живет здесь.

История:
  • старт с нуля
  • перенесены изменения с прошлого проекта
  • перенесен весь функционал
  • поддежка мосфетов для автоматизаций
  • перенесены эффекты со старых проектов и добавлены новые, общее количество подсчитать сложно, т.к. есть эффекты являющиеся генераторами эффектов, также можно создать копии, ориентировочное количество - 100 штук, впрочем все эти эффекты можно либо скрыть, либо удалить, либо наоборот создать доп. копии, кроме того есть возможность создать конфигурации, с разным поведением и переключать их по необходимости
  • микрофон и цветомузыка
  • возможность локализации (на данный момент есть - русский, украинский, английский, испанский)
  • вывод звука (DF Player Mini) - озвучивание времени, эффектов, MP3-плеер, будильник
В планах:
  • часы реального времени
  • приложение

По состоянию на сегодня прошивка находится в стабильной стадии (есть релизная версия в мастер и текущая в девелоп бренчах). Прошивка активно развивается и над ней работают несколько разработчиков.

Вариант печатного корпуса для лампы можете посмотреть тут.


----------------------------------------

Можно ли копировать, менять что-то по своему усмотрению? Да, естественно - лицензия GPLv3. Разрешено все, что оговаривается лицензией. Но учтите, что согласно лицензии вы обязуетесь предоставлять исходный код проектов основанных на данном, даже в случае коммерческого использования. Либо сразу (предпочтительно), либо по первому требованию любого из обратившихся. Если вас не устраивают идеи и соглашения свободного кода - выбирайте другой проект и не используйте этот. И еще раз - моя позиция другими словами.

Несколько скриншотов интерфейса прошивки (показаны три темы - классическая, светлая, темная):

s1.JPGs2.JPGs3.JPG

Для тестирования доступно приложение под IOS.
 
Последнее редактирование:

Комментарии

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
Инструкция по установке прошивки (ее можно скачать отсюда , это последняя стабильная версия), но самая актуальная версия, которая разрабатывается в данный момент, находится тут: develop-ветка

Существует
Консольный билдер для прошивки (Win8.1 - 10) , если нет желания ставить VS Code+PIO, можете использовать данный вариант.


Еще варианты подключений можно поглядеть тут.

-----------------------------------------------------------------------

Также можно прошить заранее подготовленную прошивку и ФС отсюда, здесь самая новая версия от 25.02.2021
Проект: скачать отсюда, фреймворк JeeUI2 переработан и взят отсюда , но за время разработки фреймворк был существенно переработан, поменял название и фактически лампа уже работает на фреймворке EmbUI, который позволяет строить WebUI интерфейсы для любых проектов, считайте его готовым движком создания интерфейсов под ESP8266/ESP32, может использоваться кем угодно под свои задачи, полностью открыт и разработка продолжается. На уровне фреймворка есть:
1. Асинхронный вебсервер, с поддержкой до 5 одновременных клиентов и синхронизацией между ними.
2. Поддержка http-get запросов
3. Поддержка mqtt
4. SSDP, mDNS, полностью автоматический WiFi c восстановлением после сбоев
5. Предустановленный и преднастроенный базовый интерфейс
6. Фреймворк достаточно экономно расходует память и можно отключить некоторые потребляющие память части, типа SSDP
7. Поддержка локализации
8. Инструкция и примеры использования
В общем будут вопросы по фреймворку и его использованию - задавайте в теме. Лампа не единственный проект который может использовать фреймворк, на данный момент на нем же у меня в тестовом варианте собрана веб-камера для esp32, но пока еще не довел до ума и не выделил в отдельный проект.

Далее более подробно по установке:

Учтите, что PIO и VS Code развиваются и инструкция может быть немного не актуальна и не соответствовать текущим версиям ПО. При возникновении вопросов/проблем - задавайте их в теме.

1. Устанавливаем Visual Studio Code в зависимости от вашей операционной системы 32 или 64 битную версию.
2. Устанавливаем Git он тоже понадобится, так как Visual Studio Code на пару с PlatformIO будут ругаться что его им очень не хватает.
3. Перезагружаем компьютер.
4. Установить PlatformIO для этого запустить Visual Studio Code и в меню View выбрать пункт Extensions - либо воспользоваться сочетанием клавиш (Ctrl+Shift+X)
5. Выбрать PlatformIO IDE и нажать Install
6. Перезапустить Visual Studio Code у вас сразу откроется вкладка PIO Home, работаем в ней.
7. В вкладке Открыть проект - Open Project - заходим в папку с проектом и нажимаем Open "FireLamp_JeeUI-master"



8. Слева открываем Platformio.ini и делаем необходимые настройки, раскомментировать нужный board, это плата на которой вы собираете лампу, и закомментируйте ненужную.
9. Тут же нужно добавить настройки Com порта на котором у вас ваша плата, это делается командой upload_port = COM8 (где COM8 номер вашего порта COM2, COM3 и т.д.)
10. Останется настроить саму прошивку под себя это делается в include - config.h там все подробно откомментировано.
11. Первоначально вам необходимо будет записать файлы в ФС контроллера, иначе веб-интерфейс не будет доступен! Делается это так меню Terminal - Run Task.. (Ctrl+Alt+T) - PlatformIO - PlatformIO: Upload File System Image, если вы не забыли указать нужный Com порт и подключили плату все должно быть успешно.
Так вот там по умолчанию нет этого пункта.
Нужно нажать Кнопку PlatformIO, потом выбрать конфигурацию, которую собираешь и только потом Upload Filesystem Image. И только после такого она появляется в Run Task. Правильный скриншот прилагаю.

1600444586890.png
12. Можно собирать и заливать прошивку в лампу. Делается это нажатием на PlatformIO Upload.



P.S. Если вы забудете выполнить 11 пункт то не сможете подключится к лампе, при подключении к ней она будет перезагружаться.

Способы обновления прошивки:

OTA
- обновляется сама прошивка и есть возможность обновить File System Image как это описано выше, можно работать с лампой так как и по физическому подключению к COM порту без разбора и подключения проводом.

Для обновления прошивки по OTA нужно сделать изменения в файле PlatformIO.ini
1. Закомментировать по аналогии с другими строками и соблюдением пробелов, ваш COM порт.

2. Раскомментировать следующие строки, обратите внимание пробелы очень важны, если не соблюсти их будет выдаваться ошибка при запуске прошивки и она так и не начнется.

В строке с IP адресом, указать ваш адрес лампы.

C++:
upload_protocol = espota
upload_port = 192.168.1.36
upload_flags =
    --auth=12345
    -p 3232


Перед началом обновления, не забудьте перевести лампу в режим обновления PIO-ОТА, для http обновления (читать ниже) это делать не обязательно. Также убедитесь, что обновление прошивки через PIO разрешено дефайном в user_config.h

* внимание, для питона важны отступы (пробелы), так что внимательно выравнивайте на одном уровне

HTTP - обновление через web интерфейс, можно обновить как прошивку, так и ФС:
IP адрес лампы\update указываем файл firmware.bin или то же самое через WebUI
Нужно будет выбрать файл и нажать Upload, на кнопке Обновление появятся проценты прогресса.

1606756811806.png
Здесь на картинке под 1 показан вариант ОТА через PIO, под 2 - вариант через http для WebUI.

Для формирования файла firmware.bin нужно в PlatformIO запустить сборку прошивки без заливки. Для формирования ФС - соответственно соберите ФС и загрузите файл ФС пользуясь теми же кнопками, как при заливке прошивки.
1588144337363.png



После непродолжительной сборки прошивки, терминал выдаст ответ:
= [SUCCESS] =
файл будет находится в папке со скачанной прошивкой .pio\build\esp8266dev\
Я прошиваю после стирания:
Быстрый старт.

Что потребуется:
Visual Studio Code - скачиваем и устанавливаем, желательно перелогиниться или перезагрузиться, чтобы точно применились настройки путей.
Под VS Code устанавливается PlatformIO, дальше вся работа там. Если кому приятнее работать в ArduinoIDE - адаптируйте самостоятельно, у меня терпения не хватает ждать пока там все соберется, так что мне проще в PlatformIO все делать.

Проект: скачать отсюда, фреймворк JeeUI2 переработан и взят отсюда , но он уже включен в проект, так что дополнительно качать не нужно.

В общем у вас после открытия проекта должно выглядеть как-то так:
1583172758919.png

Контроллер ESP8266/ESP32 выбирается в файле platformio.ini.
ВНИМАНИЕ: Первоначально вам необходимо будет записать файлы в ФС контроллера, иначе веб-интерфейс не будет доступен!
Делается это так: PlatformIO->Run Task...->Upload File System Image
1583173209762.png
После этого можно собирать проект и записывать его в контроллер. Сами файлы для загрузки в ФС находятся в \FireLamp_JeeUI\data там же у меня находятся и файлы конфигурации config.json и eff_config.json . Вы также можете поместить свои предварительно созданные конфигурации, если это необходимо. Также к файловой системе можно получить доступ, если при компиляции проекта была раскомментирована настройка:
//#define USE_FTP // доступ к SPIFFS по FTP, логин/пароль: esp8266
После чего вы можете подключиться фтп-клиентом и скачать/записать то, что вам нужно.

---------------------
Я бы ещё в инструкции дописал, как собирать проект и записывать его в контроллер, сам искал долго эти кнопки.
Кнопки по сборке проекта, включению вывода сообщений отладчика, очистке проекта от объектных файлов, остановке задач и т.д. находятся внизу, слева:
1583602065364.png

Создание конфигурации:
Файл user_config.h.default переименовываете в user_config.h и редактируете.
Обратите внимание, то что для кнопки и плеера существует также возможность менять пины после перепрошивки, сделано это для тех, кто хочет залить бинарник, а затем настроить эти пины под себя:
1607700948873.png
Порядок создания пользовательской конфигурации описан здесь: user_config.h , пример такого файла можно посмотреть тут .
По кнопке:
* Из выключенного состояния
- 1 касание - включить на последнем эффекте
- 2 касания - включить в режиме ДЕМО
- долгое удержание - включить в режиме "белая лампа" на минимальную яркость (ночник)
- касание, удержание - включить в режиме "белая лампа" на максимальную яркость
* Во включенном состоянии
- 1 касание - выключить лампу
- 2 касания - следующий эффект
- 3 касания - предыдущий эффект
- 4 касания + 4 касания - запуск сервиса ОТА
- 5 касаний - вывод IP на лампу
- 6 касаний - вывод текущего времени бегущей строкой

- удержание - регулировка яркости
- 1 касание, удержание - регулировка "скорости" эффекта
- 2 касания, удержание - регулировка "масштаба" эффекта

Это дефолтное состояние для кнопки, но абсолютно любую настройку можно поменять, к примеру вот переход к 253 эффекту по 7 нажатиям во включенном состоянии:
1606757828411.png
В общем если что-то нужно или наоборот не нужно - настраивайте под себя. :)
По HTTP/MQTT (https://community.alexgyver.ru/thre...a-firelamp_jeeui-gpl.2739/page-299#post-73384)
команды можно посылать на лампу через браузер или curl по URL вида http://esp-xxxxxx/cmd?arg=param
- /cmd?on /cmd?off /cmd?on=true /cmd?on=false - вкл/выкл
- /cmd?demo - режим ДЕМО
- /cmd?gbright /cmd?gbright=true - проверка/установка для глобальной яркости
- /cmd?msg=Hello - вывод сообщения на лампу
- /cmd?bright=0-255 - яркость
- /cmd?speed=0-255 - скорость
- /cmd?scale=0-255 - шкала
- /cmd?effect=N - эффект номер N
- /cmd?move_next - следующий эффект
- /cmd?move_prev - предыдущий эффект
- /cmd?move_rnd - случайный эффект
- /cmd?effect - номер текущего эффекта
- /cmd?eff_config - конфигурация текущего эффекта
- /cmd?warning /cmd?warning=[16777215,5000,500,1] - неблокирующий вывод мигалки поверх эффекта (выдача предупреждений), первое число - цвет, второе - полный период, третье - полупериод мигания, четвертое - тип уведомления (0 - цвет, 1-2 - цвет и счетчик, 3 - счетчик)
- /cmd?alarm=true - форсировать включение будильника
- /cmd?control=[N,val] - получить/установить значение дин. контрола
- /cmd?inccontrol=[N,val] - возможность увеличить/уменьшить на val текущее значение контрола, не превышая мин/макс
- /cmd?list - полный список эффектов
- /cmd?demolist - список демо
- /cmd?showlist - список отображаемых
- /cmd?reboot - перезагрузить лампу
- /cmd?OTA - запустить сервер обновления OTA через PIO
- /cmd?draw=[цвет,X,Y]
- /cmd?matrix - отдает размеры [X,Y]
- /cmd?fillmatrix=цвет - заливка цветом

так же команды можно объединять в цепочки в одной посылке, т.е. допустим включить лампу, установить яркость, перейти к эффекту
аналогичные команды работают и для MQTT, если чего-то не хватает или что-то не получается - спрашивайте в теме

Дополнительные служебные комманды:

- /heap - показать свободное место на куче
- /echo - показать эхо-ответ (json для формирования интерфейса)
- /config - показать текущий конфиг (json основных настроек)
- /scan - показать доступные WiFi-сети
- /config.json - скачать активный конфиг лампы
- /events_config.json - скачать активный конфиг событий
- /update - форма http-обновления прошивки
- /edit - вызов редактора конфигов (esp8266/esp8266 - логин/пассворд)

После подключения к лампе в режиме точки доступа она доступна по в браузере по адресу http://192.168.4.1 , если же после этого ее переподключить к роутеру, то узнать ее адрес можно по 5 нажатий на кнопку - вывод IP, если кнопки нет - то при перезапуске лампы она однократно напишет IP. Также ее можно найти в сетевом окружении компьютера:
1609580490648.png
После обнаружения - доступен переход по адресу http://firelamp/ (работает нестабильно). Либо можно c помощью утилиты Service Browser найти сервис http и IP лампы, либо просто поглядеть IP который выдал роутер, если он имеет возможность показать этот адрес.

Основные возможности прошивки:
  • Повторяет все возможности других прошивок по управлению эффектами и предоставляет массу других возможностей
  • Управление по MQTT (см. список команд под спойлером выше), подробную инструкцию по установке и настройке можете почитать тут или посмотреть видео установки брокера
  • Отправка текстовых сообщений на лампу, в том числе специальных %IP, %TM, %EN, %DT
  • Настройка и вывод времени, само время синхронизуется по ntp или может задаваться вручную
  • Периодический вывод времени и/или новогоднего отсчета, лампа может использоваться как гирлянда на окно, корректный вывод текста с отзеркаливанием в случае если лампа "смотрит" во двор.
  • OTA в двух вариантах, при обновлении файловой системы, чтобы не терять настройки можете их сохранить и поместить в папку /data
  • Гибкое и настраиваемое управление кнопкой, индикаторы управления
  • Каждый эффект может иметь дополнительные динамические контролы, кроме трех стандартных. При необходимости любой контрол может быть скрыт
  • Подключение микрофона MAX9814 элементарное: +3.3В с ESP на Vdd микрофона, землю (GND) на землю, сигнальный (Out) микрофона на пин А0. На этом все
  • Возможно менять состояние произвольного пина/пинов (HIGH/LOW/TOGGLE) по событию. Строка настройки вида: [{'pin':1,'act':'H'}], допустимые варианты 'H'==HIGH, 'L'==LOW, 'T'==TOGGLE, также можно записать список, к примеру: [{'pin':1,'act':'H'},{'pin':2,'act':'L'},{'pin':3,'act':'T'}] - 1 установит в HIGH, 2 в LOW, 3 - переключит. Если для кого-то подобное управление слишком сложно, то есть возможность активировать AUX-пин, с прямым управлением им через http/mqtt или UI.
  • Есть возможность ставить множественные будильники и прочие автоматизации
  • Добавлен микрофон (MAX9814) и цветомузыка на основе амплитуды/частоты. Добавлен эффект "Частотный анализатор", множество эффектов имеют зависимость от звука, которую при необходимости можно отключить, как выборочно, так и для всех эффектов сразу
  • Поддержка http-команд , те же команды работают и для mqtt
  • Пользовательский интерфейс всегда актуален и синхронизирован с прошивкой, т.к. является частью прошивки
  • Если будет написано приложение под андроид/иос/... то оно тоже будет синхронизировано, т.к. интерфейс конструируется динамически
  • DF Player Mini - озвучивание эффектов, MP3-плеер, озвучивание времени, при проблемах с плеером обязательно поглядите сюда, подключение плеера - изучите это сообщение. Архив со звуковыми файлами можете взять, к примеру - тут, внимание изменена структура каталога файлов времени - последняя версия тут.
  • При потере связи с роутером прошивка автоматически создаст точку доступа, при восстановлении связи - переподключится, никаких проблем с переключением режимов нет, никаких задержек при недоступности серверов времени - тоже нет, лампа полностью доступна и управляется одинаковым образом как в STA режиме, так и в AP. IP лампы можно поглядеть как по нажатию кнопки, так и в сетевом окружении компьютера, либо через просмотр сервисов (поддерживается Bonjour-сервисы)
  • Прошивка гибко конфигурируется, можно отключать неиспользуемый функционал (кнопку, плеер, цветомузыку и т.д.)
  • Рисовалка (пока через http/mqtt, но будет и через UI)
  • По интеграции в Home Assistant можете поглядеть тут, самая новая и актуальная версия живет здесь.

История:
  • старт с нуля
  • перенесены изменения с прошлого проекта
  • перенесен весь функционал
  • поддежка мосфетов для автоматизаций
  • перенесены эффекты со старых проектов и добавлены новые, общее количество подсчитать сложно, т.к. есть эффекты являющиеся генераторами эффектов, также можно создать копии, ориентировочное количество - 100 штук, впрочем все эти эффекты можно либо скрыть, либо удалить, либо наоборот создать доп. копии, кроме того есть возможность создать конфигурации, с разным поведением и переключать их по необходимости
  • микрофон и цветомузыка
  • возможность локализации (на данный момент есть - русский, украинский, английский, испанский)
  • вывод звука (DF Player Mini) - озвучивание времени, эффектов, MP3-плеер, будильник
В планах:
  • часы реального времени
  • приложение

По состоянию на сегодня прошивка находится в стабильной стадии (есть релизная версия в мастер и текущая в девелоп бренчах). Прошивка активно развивается и над ней работают несколько разработчиков.

Вариант печатного корпуса для лампы можете посмотреть тут.


----------------------------------------

Можно ли копировать, менять что-то по своему усмотрению? Да, естественно - лицензия GPLv3. Разрешено все, что оговаривается лицензией. Но учтите, что согласно лицензии вы обязуетесь предоставлять исходный код проектов основанных на данном, даже в случае коммерческого использования. Либо сразу (предпочтительно), либо по первому требованию любого из обратившихся. Если вас не устраивают идеи и соглашения свободного кода - выбирайте другой проект и не используйте этот. И еще раз - моя позиция другими словами.

Несколько скриншотов интерфейса прошивки (показаны три темы - классическая, светлая, темная):

s1.JPGs2.JPGs3.JPG

Для тестирования доступно приложение под IOS.
 

Вложения

Последнее редактирование:

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
Хм... комит был сделан в общий дев 3 недели назад, с тех пор все и "тестируют" или вы о чем?
Ссылка не открывается, но напомню на всякий - я в фреймворк полез потому как поступали жалобы на вылет при перемещении ползунков. Теперь таких жалоб нет, хотя от спама все еще падает. Антиспам проблему решал, но порождал другую - пропуск нужных событий (в частности в случае рисования).

Ну вы могли бы в код посмотреть, вы же всегда так и делаете? Но ладно, я не гордый, я поясню как это работало...
Я не только его посмотрел, но и переписал, потому как минимальное тестирование показало что код жрет память как не в себя и падает через 5 секунд удержания кнопки влево. И очередь сборщика мусора забивается и на счет выделений памяти которые самые экономные у меня сомнения сильные...

Хотите самостоятельно потестить? Да элементарно - закоментируйте embui.post(data); далее замеряйте когда упадет контроллер при отправке POST каждые 20-30мс, затем тоже самое с вариантом предложенным мною. Будет разница?
Проверил - при оговоренных условиях оба кода не падают, но потребление памяти разное, см. ниже.

А этот код, оставлял в памяти одну полную копию уже десериализованного объекта, необходимую для отработки акшена откладывал экшен и позволял за это время 1) очистить исходный буфер с постом 2) отправить эхо (при необходимости) и освободить память от как тонкой копии так и исходящего буфера с эхо. Но лучше было съэкономить 150 байт на таске, да...
150 байт???... давайте-ка я верну ваш вариант, добавлю отладку вывод по памяти и отключу пост, поглядим :)

01:16:03.506 > MEM: 24376
01:16:03.542 > UI: =POST= LEN: 40
01:16:03.542 > MEM: 24264
01:16:03.561 > UI: task garbage collect: released 3304 bytes
01:16:03.577 > UI: =POST= LEN: 40
01:16:03.577 > MEM: 27456
01:16:03.614 > UI: =POST= LEN: 40
01:16:03.615 > MEM: 27256
01:16:03.654 > UI: =POST= LEN: 40
01:16:03.655 > MEM: 27032
01:16:03.692 > UI: =POST= LEN: 40
01:16:03.692 > MEM: 27032
01:16:03.724 > UI: =POST= LEN: 40
01:16:03.724 > MEM: 26920
01:16:03.762 > UI: =POST= LEN: 40
01:16:03.763 > MEM: 26808
01:16:03.800 > UI: =POST= LEN: 40
01:16:03.801 > MEM: 26696
01:16:03.836 > UI: =POST= LEN: 40
01:16:03.837 > MEM: 26584
01:16:03.871 > UI: =POST= LEN: 40
01:16:03.871 > MEM: 26472
01:16:03.907 > UI: =POST= LEN: 40
01:16:03.907 > MEM: 26296
01:16:03.945 > UI: =POST= LEN: 40
01:16:03.945 > MEM: 26184
01:16:03.981 > UI: =POST= LEN: 40
01:16:03.982 > MEM: 26072
01:16:04.021 > UI: =POST= LEN: 40
01:16:04.021 > MEM: 25960
01:16:04.055 > UI: =POST= LEN: 40
01:16:04.056 > MEM: 25848
01:16:04.092 > UI: =POST= LEN: 40
01:16:04.092 > MEM: 25736
01:16:04.128 > UI: =POST= LEN: 40
01:16:04.128 > MEM: 25624
01:16:04.164 > UI: =POST= LEN: 40
01:16:04.165 > MEM: 25512
01:16:04.201 > UI: =POST= LEN: 40
01:16:04.201 > MEM: 25400
01:16:04.241 > UI: =POST= LEN: 40
01:16:04.241 > MEM: 25288
01:16:04.276 > UI: =POST= LEN: 40
01:16:04.276 > MEM: 25176
01:16:04.313 > UI: =POST= LEN: 40
01:16:04.313 > MEM: 25064
01:16:04.561 > UI: task garbage collect: released 2504 bytes
01:16:16.309 > Eff:3 FPS: 0
01:16:16.309 > MEM stat: 27808, HF: 9, Time: 01:16
и то же самое с последним вариантом что я предлагал, скопировал полностью:
01:22:06.550 > === GENERATE EffLIst for GUI completed ===
01:22:07.188 > UI: task garbage collect: released 224 bytes
01:22:09.608 > UI: =POST= LEN: 38
01:22:09.608 > MEM: 27688
01:22:19.133 > UI: =POST= LEN: 38
01:22:19.133 > MEM: 27224
01:22:19.663 > UI: =POST= LEN: 38
01:22:19.664 > MEM: 27688
01:22:19.698 > UI: =POST= LEN: 38
01:22:19.698 > MEM: 27688
01:22:19.733 > UI: =POST= LEN: 38
01:22:19.733 > MEM: 27688
01:22:19.770 > UI: =POST= LEN: 38
01:22:19.770 > MEM: 27688
01:22:19.805 > UI: =POST= LEN: 38
01:22:19.806 > MEM: 27688
01:22:19.845 > UI: =POST= LEN: 38
01:22:19.846 > MEM: 27688
01:22:19.881 > UI: =POST= LEN: 38
01:22:19.881 > MEM: 27688
01:22:19.916 > UI: =POST= LEN: 39
01:22:19.916 > MEM: 27688
01:22:19.953 > UI: =POST= LEN: 39
01:22:19.953 > MEM: 27688
01:22:19.990 > UI: =POST= LEN: 39
01:22:19.990 > MEM: 27688
01:22:20.028 > UI: =POST= LEN: 39
01:22:20.028 > MEM: 27688
01:22:20.066 > UI: =POST= LEN: 39
01:22:20.066 > MEM: 27688
01:22:20.101 > UI: =POST= LEN: 39
01:22:20.101 > MEM: 27688
01:22:20.117 > Eff:3 FPS: 0
01:22:20.117 > MEM stat: 27808, HF: 9, Time: 01:22
01:22:20.138 > UI: =POST= LEN: 39
01:22:20.139 > MEM: 27688
01:22:20.174 > UI: =POST= LEN: 39
01:22:20.175 > MEM: 27688
01:22:20.211 > UI: =POST= LEN: 39
01:22:20.212 > MEM: 27688
01:22:20.249 > UI: =POST= LEN: 39
01:22:20.250 > MEM: 27688
01:22:20.284 > UI: =POST= LEN: 39
01:22:20.285 > MEM: 27688
01:22:20.320 > UI: =POST= LEN: 39
01:22:20.321 > MEM: 27688
01:22:20.358 > UI: =POST= LEN: 39
01:22:20.359 > MEM: 27688
01:22:20.393 > UI: =POST= LEN: 39
01:22:20.394 > MEM: 27688
01:22:20.430 > UI: =POST= LEN: 39
01:22:20.431 > MEM: 27688
01:22:20.467 > UI: =POST= LEN: 39
01:22:20.467 > MEM: 27688
01:22:20.504 > UI: =POST= LEN: 39
01:22:20.505 > MEM: 27688
01:22:20.541 > UI: =POST= LEN: 39
01:22:20.542 > MEM: 27688
01:22:20.578 > UI: =POST= LEN: 39
01:22:20.578 > MEM: 27688
01:22:20.615 > UI: =POST= LEN: 39
01:22:20.615 > MEM: 27688
01:22:20.652 > UI: =POST= LEN: 39
01:22:20.652 > MEM: 27688
01:22:20.689 > UI: =POST= LEN: 39
01:22:20.689 > MEM: 27688
01:22:20.724 > UI: =POST= LEN: 39
01:22:20.724 > MEM: 27688
01:22:20.763 > UI: =POST= LEN: 39
01:22:20.763 > MEM: 27688
01:22:20.798 > UI: =POST= LEN: 39
01:22:20.798 > MEM: 27688
01:22:20.834 > UI: =POST= LEN: 39
01:22:20.835 > MEM: 27688
01:22:20.872 > UI: =POST= LEN: 39
01:22:20.872 > MEM: 27688
01:22:20.909 > UI: =POST= LEN: 39
01:22:20.910 > MEM: 27688
01:22:20.946 > UI: =POST= LEN: 39
01:22:20.946 > MEM: 27688
01:22:20.982 > UI: =POST= LEN: 39
01:22:20.984 > MEM: 27688
01:22:21.019 > UI: =POST= LEN: 39
01:22:21.020 > MEM: 27688
01:22:21.054 > UI: =POST= LEN: 39
01:22:21.054 > MEM: 27688
01:22:21.093 > UI: =POST= LEN: 39
01:22:21.093 > MEM: 27688
01:22:21.129 > UI: =POST= LEN: 39
01:22:21.129 > MEM: 27688
01:22:21.167 > UI: =POST= LEN: 39
01:22:21.168 > MEM: 27688
01:22:21.203 > UI: =POST= LEN: 39
01:22:21.203 > MEM: 27688
01:22:21.239 > UI: =POST= LEN: 39
01:22:21.239 > MEM: 27688
01:22:21.275 > UI: =POST= LEN: 39
01:22:21.275 > MEM: 27688
01:22:21.311 > UI: =POST= LEN: 39
01:22:21.312 > MEM: 27688
01:22:21.349 > UI: =POST= LEN: 39
01:22:21.349 > MEM: 27688
01:22:21.386 > UI: =POST= LEN: 39
01:22:21.387 > MEM: 27688
01:22:21.423 > UI: =POST= LEN: 39
01:22:21.423 > MEM: 27688
01:22:21.459 > UI: =POST= LEN: 39
01:22:21.459 > MEM: 27688
01:22:21.496 > UI: =POST= LEN: 39
01:22:21.496 > MEM: 27688
01:22:21.533 > UI: =POST= LEN: 39
01:22:21.533 > MEM: 27688
01:22:21.570 > UI: =POST= LEN: 39
01:22:21.570 > MEM: 27688
01:22:21.606 > UI: =POST= LEN: 39
01:22:21.607 > MEM: 27688
01:22:21.644 > UI: =POST= LEN: 39
01:22:21.644 > MEM: 27688
01:22:21.677 > UI: =POST= LEN: 39
01:22:21.678 > MEM: 27688
01:22:21.716 > UI: =POST= LEN: 39
01:22:21.717 > MEM: 27688
01:22:21.752 > UI: =POST= LEN: 39
01:22:21.752 > MEM: 27688
01:22:21.792 > UI: =POST= LEN: 39
01:22:21.792 > MEM: 27688
01:22:21.826 > UI: =POST= LEN: 39
01:22:21.826 > MEM: 27688
01:22:21.863 > UI: =POST= LEN: 39
01:22:21.863 > MEM: 27688
01:22:21.899 > UI: =POST= LEN: 39
01:22:21.900 > MEM: 27688
01:22:21.936 > UI: =POST= LEN: 39
01:22:21.936 > MEM: 27688
01:22:21.972 > UI: =POST= LEN: 39
01:22:21.972 > MEM: 27688
01:22:22.009 > UI: =POST= LEN: 39
01:22:22.009 > MEM: 27688
01:22:22.047 > UI: =POST= LEN: 39
01:22:22.069 > MEM: 27688
01:22:22.094 > UI: =POST= LEN: 39
01:22:22.095 > MEM: 27688
01:22:22.119 > UI: =POST= LEN: 39
01:22:22.119 > MEM: 27688
01:22:22.155 > UI: =POST= LEN: 39
01:22:22.155 > MEM: 27688
01:22:22.192 > UI: =POST= LEN: 39
01:22:22.192 > MEM: 27688
01:22:22.229 > UI: =POST= LEN: 39
01:22:22.229 > MEM: 27688
01:22:22.266 > UI: =POST= LEN: 39
01:22:22.266 > MEM: 27688
01:22:22.303 > UI: =POST= LEN: 39
01:22:22.303 > MEM: 27688
01:22:22.339 > UI: =POST= LEN: 39
01:22:22.340 > MEM: 27688
01:22:22.376 > UI: =POST= LEN: 39
01:22:22.377 > MEM: 27688
01:22:22.417 > UI: =POST= LEN: 39
01:22:22.418 > MEM: 27688
01:22:22.450 > UI: =POST= LEN: 39
01:22:22.450 > MEM: 27688
01:22:22.486 > UI: =POST= LEN: 39
01:22:22.487 > MEM: 27688
01:22:22.523 > UI: =POST= LEN: 39
01:22:22.523 > MEM: 27688
01:22:22.561 > UI: =POST= LEN: 39
01:22:22.561 > MEM: 27688
01:22:22.597 > UI: =POST= LEN: 39
01:22:22.598 > MEM: 27688
01:22:22.633 > UI: =POST= LEN: 39
01:22:22.634 > MEM: 27688
01:22:22.670 > UI: =POST= LEN: 39
01:22:22.671 > MEM: 27688
01:22:22.707 > UI: =POST= LEN: 39
01:22:22.708 > MEM: 27688
01:22:22.744 > UI: =POST= LEN: 39
01:22:22.744 > MEM: 27688
01:22:22.781 > UI: =POST= LEN: 39
01:22:22.781 > MEM: 27688
01:22:22.817 > UI: =POST= LEN: 39
01:22:22.817 > MEM: 27688
01:22:22.853 > UI: =POST= LEN: 39
01:22:22.854 > MEM: 27688
01:22:22.890 > UI: =POST= LEN: 39
01:22:22.891 > MEM: 27688
01:22:22.927 > UI: =POST= LEN: 39
01:22:22.927 > MEM: 27688
01:22:22.963 > UI: =POST= LEN: 39
01:22:22.963 > MEM: 27688
01:22:22.999 > UI: =POST= LEN: 39
01:22:23.000 > MEM: 27688
01:22:23.036 > UI: =POST= LEN: 39
01:22:23.037 > MEM: 27688
01:22:23.073 > UI: =POST= LEN: 39
01:22:23.093 > MEM: 27688
01:22:23.110 > UI: =POST= LEN: 39
01:22:23.110 > MEM: 27688
01:22:23.146 > UI: =POST= LEN: 39
01:22:23.146 > MEM: 27688
01:22:23.184 > UI: =POST= LEN: 39
01:22:23.184 > MEM: 27688
01:22:23.224 > UI: =POST= LEN: 40
01:22:23.224 > MEM: 27688
01:22:23.257 > UI: =POST= LEN: 40
01:22:23.257 > MEM: 27688
01:22:23.293 > UI: =POST= LEN: 40
01:22:23.294 > MEM: 27688
01:22:23.333 > UI: =POST= LEN: 40
01:22:23.333 > MEM: 27688
01:22:23.368 > UI: =POST= LEN: 40
01:22:23.368 > MEM: 27688
01:22:23.405 > UI: =POST= LEN: 40
01:22:23.405 > MEM: 27688
01:22:23.441 > UI: =POST= LEN: 40
01:22:23.441 > MEM: 27448
01:22:23.478 > UI: =POST= LEN: 40
01:22:23.478 > MEM: 27448
01:22:23.515 > UI: =POST= LEN: 40
01:22:23.516 > MEM: 27448
01:22:23.549 > UI: =POST= LEN: 40
01:22:23.550 > MEM: 27448
01:22:23.587 > UI: =POST= LEN: 40
01:22:23.587 > MEM: 27448
01:22:23.623 > UI: =POST= LEN: 40
01:22:23.623 > MEM: 27448
01:22:23.660 > UI: =POST= LEN: 40
01:22:23.660 > MEM: 27448
01:22:23.696 > UI: =POST= LEN: 40
01:22:23.696 > MEM: 27448
01:22:23.736 > UI: =POST= LEN: 40
01:22:23.736 > MEM: 27448
01:22:23.770 > UI: =POST= LEN: 40
01:22:23.770 > MEM: 27448
01:22:23.807 > UI: =POST= LEN: 40
01:22:23.807 > MEM: 27448
01:22:23.844 > UI: =POST= LEN: 40
01:22:23.844 > MEM: 27448
01:22:23.880 > UI: =POST= LEN: 40
01:22:23.880 > MEM: 27448
01:22:23.920 > UI: =POST= LEN: 40
01:22:23.920 > MEM: 27448
01:22:23.955 > UI: =POST= LEN: 40
01:22:23.955 > MEM: 27448
01:22:23.991 > UI: =POST= LEN: 40
01:22:23.992 > MEM: 27448
01:22:24.031 > UI: =POST= LEN: 40
01:22:24.031 > MEM: 27448
01:22:24.064 > UI: =POST= LEN: 40
01:22:24.065 > MEM: 27448
01:22:24.101 > UI: =POST= LEN: 40
01:22:24.101 > MEM: 27448
01:22:24.137 > UI: =POST= LEN: 40
01:22:24.137 > MEM: 27448
01:22:24.174 > UI: =POST= LEN: 40
01:22:24.174 > MEM: 27448
01:22:24.212 > UI: =POST= LEN: 40
01:22:24.212 > MEM: 27688
01:22:24.250 > UI: =POST= LEN: 40
01:22:24.251 > MEM: 27688
01:22:24.286 > UI: =POST= LEN: 40
01:22:24.287 > MEM: 27688
01:22:24.323 > UI: =POST= LEN: 40
01:22:24.323 > MEM: 27688
01:22:24.357 > UI: =POST= LEN: 40
01:22:24.357 > MEM: 27688
01:22:24.396 > UI: =POST= LEN: 40
01:22:24.396 > MEM: 27688
01:22:24.432 > UI: =POST= LEN: 40
01:22:24.433 > MEM: 27688
01:22:24.469 > UI: =POST= LEN: 40
01:22:24.470 > MEM: 27448
01:22:24.506 > UI: =POST= LEN: 40
01:22:24.506 > MEM: 27448
01:22:24.542 > UI: =POST= LEN: 40
01:22:24.542 > MEM: 27448
01:22:24.579 > UI: =POST= LEN: 40
01:22:24.580 > MEM: 27448
01:22:24.616 > UI: =POST= LEN: 40
01:22:24.616 > MEM: 27448
01:22:24.654 > UI: =POST= LEN: 40
01:22:24.654 > MEM: 27448
01:22:24.689 > UI: =POST= LEN: 40
01:22:24.690 > MEM: 27448
01:22:24.726 > UI: =POST= LEN: 40
01:22:24.727 > MEM: 27448
01:22:24.763 > UI: =POST= LEN: 40
01:22:24.763 > MEM: 27448
01:22:24.799 > UI: =POST= LEN: 40
01:22:24.799 > MEM: 27448
01:22:24.836 > UI: =POST= LEN: 40
01:22:24.836 > MEM: 27448
01:22:24.872 > UI: =POST= LEN: 40
01:22:24.872 > MEM: 27448
01:22:24.909 > UI: =POST= LEN: 40
01:22:24.909 > MEM: 27448
01:22:24.945 > UI: =POST= LEN: 40
01:22:24.945 > MEM: 27448
01:22:24.982 > UI: =POST= LEN: 40
01:22:24.982 > MEM: 27448
01:22:25.019 > UI: =POST= LEN: 40
01:22:25.019 > MEM: 27448
01:22:25.055 > UI: =POST= LEN: 40
01:22:25.056 > MEM: 27448
01:22:25.092 > UI: =POST= LEN: 40
01:22:25.093 > MEM: 27448
01:22:25.128 > UI: =POST= LEN: 40
01:22:25.128 > MEM: 27448
01:22:25.164 > UI: =POST= LEN: 40
01:22:25.164 > MEM: 27448
01:22:25.201 > UI: =POST= LEN: 40
01:22:25.201 > MEM: 27688
01:22:25.238 > UI: =POST= LEN: 40
01:22:25.238 > MEM: 27688
01:22:25.275 > UI: =POST= LEN: 40
01:22:25.275 > MEM: 27688
01:22:25.312 > UI: =POST= LEN: 40
01:22:25.312 > MEM: 27688
01:22:25.348 > UI: =POST= LEN: 40
01:22:25.349 > MEM: 27688
01:22:25.385 > UI: =POST= LEN: 40
01:22:25.386 > MEM: 27688
01:22:25.422 > UI: =POST= LEN: 40
01:22:25.422 > MEM: 27688
01:22:25.464 > UI: =POST= LEN: 40
01:22:25.464 > MEM: 27448
01:22:25.495 > UI: =POST= LEN: 40
01:22:25.496 > MEM: 27448
01:22:25.532 > UI: =POST= LEN: 40
01:22:25.532 > MEM: 27448
01:22:25.571 > UI: =POST= LEN: 40
01:22:25.571 > MEM: 27448
01:22:25.606 > UI: =POST= LEN: 40
01:22:25.606 > MEM: 27448
01:22:25.643 > UI: =POST= LEN: 40
01:22:25.643 > MEM: 27448
01:22:25.682 > UI: =POST= LEN: 40
01:22:25.682 > MEM: 27448
01:22:25.716 > UI: =POST= LEN: 40
01:22:25.717 > MEM: 27448
01:22:25.753 > UI: =POST= LEN: 40
01:22:25.754 > MEM: 27448
01:22:25.790 > UI: =POST= LEN: 40
01:22:25.790 > MEM: 27448
01:22:25.829 > UI: =POST= LEN: 40
01:22:25.829 > MEM: 27448
01:22:25.862 > UI: =POST= LEN: 40
01:22:25.862 > MEM: 27448
01:22:25.899 > UI: =POST= LEN: 40
01:22:25.900 > MEM: 27448
01:22:25.936 > UI: =POST= LEN: 40
01:22:25.937 > MEM: 27448
01:22:25.977 > UI: =POST= LEN: 40
01:22:25.977 > MEM: 27448
01:22:26.009 > UI: =POST= LEN: 40
01:22:26.009 > MEM: 27448
01:22:26.047 > UI: =POST= LEN: 40
01:22:26.048 > MEM: 27448
01:22:26.087 > UI: =POST= LEN: 40
01:22:26.088 > MEM: 27448
01:22:26.122 > UI: =POST= LEN: 40
01:22:26.123 > MEM: 27448
01:22:26.158 > UI: =POST= LEN: 40
01:22:26.158 > MEM: 27448
01:22:26.196 > UI: =POST= LEN: 40
01:22:26.196 > MEM: 27688
01:22:26.231 > UI: =POST= LEN: 40
01:22:26.232 > MEM: 27688
01:22:26.266 > UI: =POST= LEN: 40
01:22:26.266 > MEM: 27688
01:22:26.303 > UI: =POST= LEN: 40
01:22:26.303 > MEM: 27688
01:22:26.339 > UI: =POST= LEN: 40
01:22:26.339 > MEM: 27688
01:22:26.378 > UI: =POST= LEN: 40
01:22:26.379 > MEM: 27688
01:22:26.420 > UI: =POST= LEN: 40
01:22:26.420 > MEM: 27448
01:22:26.451 > UI: =POST= LEN: 40
01:22:26.451 > MEM: 27448
01:22:26.491 > UI: =POST= LEN: 40
01:22:26.491 > MEM: 27448
01:22:26.527 > UI: =POST= LEN: 40
01:22:26.527 > MEM: 27448
01:22:26.594 > UI: =POST= LEN: 40
01:22:26.598 > MEM: 27448
01:22:26.599 > UI: =POST= LEN: 40
01:22:26.599 > MEM: 27448
01:22:26.632 > UI: =POST= LEN: 40
01:22:26.632 > MEM: 27448
01:22:26.670 > UI: =POST= LEN: 40
01:22:26.670 > MEM: 27448
01:22:26.706 > UI: =POST= LEN: 40
01:22:26.707 > MEM: 27448
01:22:26.745 > UI: =POST= LEN: 40
01:22:26.746 > MEM: 27448
01:22:26.781 > UI: =POST= LEN: 40
01:22:26.782 > MEM: 27448
01:22:26.818 > UI: =POST= LEN: 40
01:22:26.818 > MEM: 27448
01:22:26.854 > UI: =POST= LEN: 40
01:22:26.854 > MEM: 27448
01:22:26.890 > UI: =POST= LEN: 40
01:22:26.891 > MEM: 27448
01:22:26.926 > UI: =POST= LEN: 40
01:22:26.927 > MEM: 27448
01:22:26.964 > UI: =POST= LEN: 40
01:22:26.964 > MEM: 27448
01:22:27.001 > UI: =POST= LEN: 40
01:22:27.001 > MEM: 27448
01:22:27.037 > UI: =POST= LEN: 40
01:22:27.037 > MEM: 27448
01:22:27.073 > UI: =POST= LEN: 40
01:22:27.074 > MEM: 27448
01:22:27.110 > UI: =POST= LEN: 40
01:22:27.110 > MEM: 27448
01:22:27.146 > UI: =POST= LEN: 40
01:22:27.146 > MEM: 27448
01:22:27.183 > UI: =POST= LEN: 40
01:22:27.183 > MEM: 27448
01:22:27.220 > UI: =POST= LEN: 40
01:22:27.220 > MEM: 27688
01:22:27.256 > UI: =POST= LEN: 40
01:22:27.256 > MEM: 27688
01:22:27.294 > UI: =POST= LEN: 40
01:22:27.294 > MEM: 27688
01:22:27.330 > UI: =POST= LEN: 40
01:22:27.331 > MEM: 27688
01:22:27.368 > UI: =POST= LEN: 40
01:22:27.368 > MEM: 27688
01:22:27.407 > UI: =POST= LEN: 40
01:22:27.408 > MEM: 27576
01:22:27.440 > UI: =POST= LEN: 40
01:22:27.441 > MEM: 27688
01:22:27.477 > UI: =POST= LEN: 40
01:22:27.478 > MEM: 27688
01:22:27.515 > UI: =POST= LEN: 40
01:22:27.515 > MEM: 27688
01:22:27.552 > UI: =POST= LEN: 40
01:22:27.553 > MEM: 27688
01:22:27.588 > UI: =POST= LEN: 40
01:22:27.589 > MEM: 27688
01:22:27.624 > UI: =POST= LEN: 40
01:22:27.625 > MEM: 27688
01:22:27.661 > UI: =POST= LEN: 40
01:22:27.662 > MEM: 27688
01:22:27.697 > UI: =POST= LEN: 40
01:22:27.698 > MEM: 27688
01:22:27.734 > UI: =POST= LEN: 40
01:22:27.735 > MEM: 27688
01:22:27.770 > UI: =POST= LEN: 40
01:22:27.770 > MEM: 27688
01:22:27.810 > UI: =POST= LEN: 40
01:22:27.843 > MEM: 27688
01:22:27.854 > UI: =POST= LEN: 40
01:22:27.861 > MEM: 27688
01:22:27.880 > UI: =POST= LEN: 40
01:22:27.881 > MEM: 27688
01:22:27.921 > UI: =POST= LEN: 40
01:22:27.922 > MEM: 27688
01:22:27.954 > UI: =POST= LEN: 40
01:22:27.954 > MEM: 27688
01:22:27.991 > UI: =POST= LEN: 40
01:22:27.991 > MEM: 27688
01:22:28.027 > UI: =POST= LEN: 40
01:22:28.028 > MEM: 27688
01:22:28.064 > UI: =POST= LEN: 40
01:22:28.064 > MEM: 27688
01:22:28.101 > UI: =POST= LEN: 40
01:22:28.102 > MEM: 27688
01:22:28.140 > UI: =POST= LEN: 40
01:22:28.141 > MEM: 27688
01:22:28.175 > UI: =POST= LEN: 40
01:22:28.175 > MEM: 27688
01:22:28.211 > UI: =POST= LEN: 40
01:22:28.212 > MEM: 27688
01:22:28.248 > UI: =POST= LEN: 40
01:22:28.248 > MEM: 27688
01:22:28.285 > UI: =POST= LEN: 40
01:22:28.285 > MEM: 27688
01:22:28.322 > UI: =POST= LEN: 40
01:22:28.323 > MEM: 27688
01:22:28.358 > UI: =POST= LEN: 40
01:22:28.359 > MEM: 27688
01:22:28.395 > UI: =POST= LEN: 40
01:22:28.396 > MEM: 27688
01:22:28.432 > UI: =POST= LEN: 40
01:22:28.432 > MEM: 27688
01:22:28.470 > UI: =POST= LEN: 40
01:22:28.470 > MEM: 27688
01:22:28.505 > UI: =POST= LEN: 40
01:22:28.505 > MEM: 27688
01:22:28.542 > UI: =POST= LEN: 40
01:22:28.542 > MEM: 27688
01:22:28.579 > UI: =POST= LEN: 40
01:22:28.579 > MEM: 27688
01:22:28.615 > UI: =POST= LEN: 40
01:22:28.615 > MEM: 27688
01:22:28.652 > UI: =POST= LEN: 40
01:22:28.652 > MEM: 27688
01:22:28.690 > UI: =POST= LEN: 40
01:22:28.690 > MEM: 27688
01:22:28.727 > UI: =POST= LEN: 40
01:22:28.728 > MEM: 27688
01:22:28.763 > UI: =POST= LEN: 40
01:22:28.763 > MEM: 27688
01:22:28.800 > UI: =POST= LEN: 40
01:22:28.800 > MEM: 27688
01:22:28.836 > UI: =POST= LEN: 40
01:22:28.836 > MEM: 27688
01:22:28.871 > UI: =POST= LEN: 40
01:22:28.871 > MEM: 27688
01:22:28.908 > UI: =POST= LEN: 40
01:22:28.908 > MEM: 27688
01:22:34.188 > pubCallback :
01:22:34.189 > UI: section begin root60181495 [1] 661 free
01:22:34.189 > UI: Frame add obj 74 b, storage 107/768...OK [1] MEM: 26864
01:22:34.190 > UI: Frame add obj 73 b, storage 191/768...OK [2] MEM: 26864
01:22:34.192 > UI: Frame add obj 81 b, storage 266/768...OK [3] MEM: 26864
01:22:34.193 > UI: Frame add obj 73 b, storage 349/768...OK [4] MEM: 26864
01:22:34.195 > UI: Frame add obj 81 b, storage 424/768...OK [5] MEM: 26840
01:22:34.196 > json_frame_flush
01:22:34.196 > UI: section end root60181
Т.е. после моих изменений стало хуже на ваш взгляд? Вы это можете доказать?

Тоже самое что и в любом другом случае - асинквебсокет выжрет всю доступную память под свои буфера, насколько быстро это произойдет зависит от того насколько бысто юзеркод будет способен выгребать (или тупо дропать, если в этом состоит великий смысл) входящие сообщения.
Сколько я держал кнопку можете посчитать по спойлерам, в вашем варианте лог не с самого начала, но думаю и по фрагменту понятно что было.
Ладно, я не хочу опять разводить срач, свой последний мердж с дисплеем и иже с ним я откатил, даже разбираться не буду мой там косяк или ваш и пойду с ним спокойно в свою ветку дела делать. А вы продолжайте борьбу с тасками, раз у вас свое видение, я тут навязывать ничего не собираюсь.
Мне очень жаль, что вы из-за каких-то выдуманных обид от конструктива перешли к хрен знает чему. Печально... Впрочем, т.к. я повлиять на ситуацию не способен и вовсе не я написал нечто вида:
еще получилось что вы нивелировали всю схему по минимизации использования памяти
Может всеж-таки не стоит делать поспешных выводов? А? И может не совсем во мне проблема, т.к. я когда нашел эту проблему, то решил промолчать, чтобы не провоцировать новых обид... Вы решили иначе? Ок. Вперед тыкать меня мордочкой в мои ошибки, я погляжу, утрусь и в следующий раз сделаю лучше. И буду благодарен за то что мне показывают КАК делать плохо и ЧТО сделать, чтобы было лучше. Между прочим как раз в класс я помещал обработку в том числе и после вашей критики на счет плохого и не читаемого кода. Ладно тут он не нужен, но пару подобных экземпляров сейчас живут в interface.cpp
 

malec

★★★★★✩✩
5 Фев 2019
1,182
370
И может не совсем во мне проблема,
Господа давайте не будем переходить на личности, я считаю - проблема в КОДЕ и надо искать конструктивное решение :cool: ;)
Важен не размер "члена" , а умение им правильно пользоваться.... И если член как прыщЬ, то пальцы- конструктивное решение....Но это больше на "костыль" похоже :ROFLMAO:
Это я пытаюсь разрядить обстановку....
Щас обновился , всё работает, продолжаем насиловать ..... ;)
@kDn, Ваш вариант с антиспамером очень понравился, (не в плане КОДА, т.к. ничего в нём не понимаю, а в плане стабильности...) Лампа ведёт себя на много стабильнее.... (как мне кажется) (y).
С рисованием:- пропуски появляются, но только если очень быстро рисовать (В принципе это просто развлечение и я думаю не каждый так сможет, если не линии рисовать, а с телефона не всегда пальцем попадаешь куда надо и это замедляет процесс. Есть опыт рисования мышью и на планшете стилусом пробовал....У меня дочь рисует, а бумага уже не актуально :cool: )
Если включено ДЕМО и фейдер (новое слово выучил;)) рисунок также - угасает и возгорается в процессе...
По фейдеру, теперь и с мосфетом и без- хорошо. ИМХО, Я бы оставил его только в демо режиме, - поясню.
1 когда я тыкаю стрелки он как-бы и не очень то и нужен, т.к. я ожидаю переключение эффекта....В демо красиво , но возникает желание уменьшить длительность перехода...(видимо - есть , но хочется ещё, человеческая сущность), может показалось, что, угасает дольше чем разгорается...
2 При переключении эффекта стрелками, если не до конца эффект разгорелся и включается следующий (если переключать раз-два в секунду ) , на нём наблюдается эффект стробоскопа, т.е. рябит...
Это пока всё, пошёл тыкать дальше....
АААА . во, новое познание . не мог понять почему когда включено демо, в списке появляются пустые эффекты...Ведь вроде давно нет "специального" пустого эффекта. А оказалось потому как я Эффект из списка выбора удалил... а в демо он есть.
 
Последнее редактирование:
  • Лойс +1
Реакции: kDn

vortigont

★★★★★★✩
24 Апр 2020
688
550
Saint-Petersburg, Russia
Да элементарно - закоментируйте embui.post(data); далее замеряйте когда упадет контроллер при отправке POST каждые 20-30мс, затем тоже самое с вариантом предложенным мною. Будет разница?
Ну это подход, да... сравнивать в лоб теплое и пушистое по коэффициенту няшности, в одном случае все сообщения попадают в очередь и обрабатываются, в другом тупо перетираются или отбрасываются, но зато "память не жрут". Осталось еще в if(type == WS_EVT_DATA) return воткнуть и радоваться как хорошо контролер "держит дидос" и считать сколько сообщений в секунду можно отбрасывать с минимальным расходом памяти.
Я свои наработки делаю в отдельных ветках, потом даю на них ссылки, желающие могут посмотреть код, потестировать, высказать свои комментарии. Бывают где-то мелкие ошибки из-за недостаточного количества сценариев тестирования, но подход с отложенным выполнением был сделан вполне осознанно, из сообщений создается очередь, они все обрабатываются, очередь требует для себя памяти. В чем проблема-то? Ну падает контроллер у "зажимателей кнопки влево", это вполне объяснимо и ожидаемо. "Я на 5 секунд кнопку зажал и оно упало"... ну с дуру можно и член сломать... что я могу еще сказать... Нужно ли с этим бороться и как именно это тема для спокойного и конструктивного обсуждения с последующей выработкой решения в отдельной ветке. Можно ограничивать длину очереди, можно задержку на ее обработку покрутить и найти приемлемый баланс, можно отбрасывать конец/начало, можно тупо надавать по рукам спамерам, много чего еще можно... Но вместо этого вы "схватили перфоратор" и по-быстрому накрутили "антиспам", очень быстро выяснилось что терять сообщения таки неожиданно плохо, и в антиспам так же по-быстрому воткнули "костыль". В итоге и очередь сломали и антиспам вышел полурабочий и жор памяти в нормальном режиме увеличили, но зато памяти теперь во время дидоса навалом и оно почти не падает, сложно усидеть на 3х стульях сразу, верно? Так за что боролись в итоге-то, за память под дидом? С тасками и генератором списка эффектов вы поступили также, поставили себе во главу угла "борьбу за свободные байты", предложенный (черновой, кстати) вариант предали анафеме и быстренько причесали всех под одну гребенку, объявив что и дальше будете молча всё переделывать. Ну, ок, хозяин-барин, я вам не генерал и не папа, пытался донести один раз свою мысль и хватит, переубеждать и спорить не собираюсь.

Мне очень жаль, что вы из-за каких-то выдуманных обид от конструктива перешли к хрен знает чему.
Какие обиды, вы о чем? Мне просто не нравится работа в стиле "наваляй что-то по-быстрому, а потом закидай другого какахами, покажи какой ты молодец", ваша манера общения "через губу" со всеми этими "сфигали?", "сначала разберитесь...", "раз вы такие обидчивые буду делать молча" при полном отсутствии командной работы и обсуждения интерес к совместной деятельности отшибает напрочь. Шпуняйте своих коллег по работе если вам так нравится. Я могу спокойно заниматься своими делами и никому тут не мешать, не тратить время на перекидывания какахами ни свое ни ваше. В лампу я и так уже практически не лезу, частично от того что саму лампу подарил кому-то, частично от того что устал от стиля "все срут в дев портянками и мешают другу другу". Все еще немного занимаюсь фреймворком потому что сам им пользуюсь для других поделок и заинтересован в его развитии, готов делиться наработками. По крайнейе мере пока есть интерес и не нашел лучшей замены. Но если заниматься этим, то сообща а не вопреки друг другу, А иначе каждому будет проще ковырять свой форк и не мешаться, перетирая одно и тоже под "свое видение". Я могу оформлять PR по-возможности, рецензируйте код, правьте под свой вкус то что посчитаете полезным. По крайней мере избавим друг друга от "сюрпризов" в коде.
 

vortigont

★★★★★★✩
24 Апр 2020
688
550
Saint-Petersburg, Russia
Дабы снизить накал страстей и перейти от упреков к предложениям - текущую проблему можно было обсудить в гораздо более конструктивной и взаимноуважительной манере. Ну вылезла у Кости проблема падений во время бешеного наяривания колесом мышки - отметили это, ОК. Не скажу что это прям критическая которую надо кидаться затыкать любыми способами. Глянули вы в код, нашли проблемное место в посте, написали бы в форум - так и так, сообщения копятся быстрее чем очередь их разгребает, вортигонт, вы последний писали этот участок, это так задумано, бага, какие были идеи? Сходу могу предложить вот такой вариант "антиспама", ок, не ок? Я бу глянул, ответил - не бага, а фича, в первую очередь упор сделан на обработку сообщений без потерь с методами сэкономить пиковые потребления памяти на одно сообщение. Мне в голову не пришло что у нас каждый второй наяривает колесом на ползунках и зажимает кнопки пока оно не сдохнет. Если надо отбрасывать сообщения, давайте обсудим варианты чтобы не потерять текущие идеи. Ну либо - я знать не знаю что за бага, смотреть некогда, если горит - чините на свое усмотрение. Пообсуждали бы несколько дней, нашли вариант, отработали в отдельном бренче и никто бы за это время не умер от невозможности наяривать колёсико. Ну и не пришлось бы изобретать странных сценариев теста на "завал" с отключенным постом и намерено доводить систему до исчерпания памяти, тыкать друг друга моськой, "обижаться" и т.п. Вы слишком много принимаете на личный счёт по поводу и без повода, мне же наоборот проще сказать "ну как знаете, флаг вам в руки...", но кто от этого выигрывает в итоге?

Повторюсь
Тоже самое что и в любом другом случае - асинквебсокет выжрет всю доступную память под свои буфера, насколько быстро это произойдет зависит от того насколько бысто юзеркод будет способен выгребать (или тупо дропать, если в этом состоит великий смысл) входящие сообщения.
Вопрос лишь в поиске компромисса и выборе приоритета. Можно вообще блокировать петлю на одном сообщении вернуться к плоской модели и решить все проблемы на корню, но вопрос нужно ли? Есть желание работать совместно - давайте уважать друг друга и выслушивать альтернативную точку зрения прежде чем рубить с плеча.
 
Последнее редактирование:
  • Лойс +1
Реакции: kostyamat

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
@vortigont, ознакомился.
1. Подход не разобравшись в чем-то выносить поспешные суждения не считаю правильным.
2. Подход наставить на своих же суждениях, когда предоставлены доказательства того, что иной вариант суждений ошибочен - не считаю взрослым.
3. Подход игнорирования просьбы показать вариант лучше и обосновать его - не считаю располагающим к конструктиву. А утверждения вида "сравнивается теплое и мягкое" мне видится перекручиванием и сознательным дизинформированием. Оба скрипта были в равных условиях, в обоих обрабатывались все сообщения, в обоих отправлялись все эхо. Я вам явно указал на место проблемы. Вы так и не объяснили зачем нужна отсрочивание отправки сообщения - насколько я понимаю это не нужно совершенно, объяснить целесообразность вы не можете.
4. Подход ревертить чужие коммиты, без предупреждений считаю вообще вредительством. Это просто некрасиво. Я реверты чужих изменений делал крайне редко, обычно после обсуждений/предупреждений. Почему вы решили откатывать не только свои изменения, но и мои без обсуждения - для меня загадка, надеюсь это было поспешное и случайное действие.
5. Самоустранение и чуть что отговорки словами "да у меня и лампы то уже нет, да я на голом контроллере гляжу, да я вообще фреймворком занимаюсь, да то было вообще черновой вариант, да я лучше ревертну и буду в своей ветке заниматься чем-то" считаете нормальным?

Похоже мы подошли к точке, в которой нужно определиться в дальнейших целях. Не хотите заниматься лампой - не занимайтесь. Я вас вовсе не заставляю, проект абсолютно на добровольных началах. У вас свое видение фреймворка и вы решили вести свою разработку? Ваше право, я никоим образом не ограничиваю это ваше желание и наоборот желаю удачи.

Прошу внимательно и спокойно прочитать написанное выше, хорошо подумать и лишь затем писать ответ.
 

kostyamat

★★★★★★★
29 Окт 2019
2,886
1,665
@kDn, @vortigont, Я знаю, вы оба так или иначе считаете меня юнгой. И к моим словам прислушиваетесь редко. Но вставлю ка я свои пять копеек, авось услышите.

Я считаю что оба ваших подхода к решению вопроса несколько не к месту.
Изначально проблема была в том, что накручивание значения ползунка колесиком (@vortigont это реально удобно) приводило к падениям. И тут же вы оба кинулись - один отсекать, другой ставить в очередь на выполнение. Я же, предвидя такую ситуацию в случае энкодера, решил это по другому (то что в дев еще коряво, у меня сейчас на компе уже причесанное) - я даю возможность юзеру крутить энкодер до скончания веков не останавливаясь, пока не истёк if (!таймаут and предыдущеезначениене равно_текущему). При этом время от времени текущее значение оперативно применяется быстрой функцией установки яркости для визуального фидбека. А вот когда значения перестали менятся, и истек таймаут, вот тогда данные передаются в УИ и на запись в конфиг. Работает просто заглядение, я видео оставлял на предыдущих страницах.
Так о чем я - имхо ява-скрипты контроллов нужно поправить таким же способом, пользователь волен крутить значения хоть целый день, но пока предыдущее значение не равно текущему и не истек небольшой таймаут, новое значение ползунка контроллеру не передается. И ни антиспама, ни очереди - все счастливы.
 
Последнее редактирование:

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
@kostyamat, вперёд реализовывать это для контрола рисования. В процессе реализации все поймёте, обещаю. :)

* Кстати вот кусок лога, как сейчас у меня работает удержание кнопки (вчерашний тестовых вывод информации по свободной памяти не убрал, поэтому лог хоть и весь скопировал, но верхней части нет. Но это от одного конца в другой, без пауз)
16:59:11.834 > MEM: 25840
16:59:11.869 > UI: =POST= LEN: 39
16:59:11.869 >
16:59:11.869 > UI: POST SECTION: dynCtrl*
16:59:11.871 >
16:59:11.871 > MEM: 25840
16:59:11.906 > UI: =POST= LEN: 39
16:59:11.906 >
16:59:11.906 > UI: POST SECTION: dynCtrl*
16:59:11.908 >
16:59:11.908 > MEM: 25840
16:59:11.943 > UI: =POST= LEN: 39
16:59:11.943 >
16:59:11.943 > UI: POST SECTION: dynCtrl*
16:59:11.945 >
16:59:11.945 > MEM: 25840
16:59:11.980 > UI: =POST= LEN: 39
16:59:11.980 >
16:59:11.980 > UI: POST SECTION: dynCtrl*
16:59:11.983 >
16:59:11.983 > MEM: 25840
16:59:12.019 > UI: =POST= LEN: 39
16:59:12.020 >
16:59:12.020 > UI: POST SECTION: dynCtrl*
16:59:12.021 >
16:59:12.021 > MEM: 25840
16:59:12.053 > UI: =POST= LEN: 39
16:59:12.053 >
16:59:12.053 > UI: POST SECTION: dynCtrl*
16:59:12.054 >
16:59:12.054 > MEM: 25840
16:59:12.088 > UI: =POST= LEN: 39
16:59:12.088 >
16:59:12.088 > UI: POST SECTION: dynCtrl*
16:59:12.090 >
16:59:12.090 > MEM: 25840
16:59:12.125 > UI: =POST= LEN: 39
16:59:12.125 >
16:59:12.125 > UI: POST SECTION: dynCtrl*
16:59:12.127 >
16:59:12.127 > MEM: 25840
16:59:12.162 > UI: =POST= LEN: 39
16:59:12.162 >
16:59:12.162 > UI: POST SECTION: dynCtrl*
16:59:12.164 >
16:59:12.164 > MEM: 25840
16:59:12.199 > UI: =POST= LEN: 39
16:59:12.199 >
16:59:12.199 > UI: POST SECTION: dynCtrl*
16:59:12.201 >
16:59:12.201 > MEM: 25840
16:59:12.236 > UI: =POST= LEN: 39
16:59:12.236 >
16:59:12.236 > UI: POST SECTION: dynCtrl*
16:59:12.238 >
16:59:12.238 > MEM: 25840
16:59:12.272 > UI: =POST= LEN: 39
16:59:12.272 >
16:59:12.272 > UI: POST SECTION: dynCtrl*
16:59:12.274 >
16:59:12.274 > MEM: 25840
16:59:12.313 > UI: =POST= LEN: 39
16:59:12.313 >
16:59:12.313 > UI: POST SECTION: dynCtrl*
16:59:12.315 >
16:59:12.315 > MEM: 25840
16:59:12.346 > UI: =POST= LEN: 39
16:59:12.346 >
16:59:12.346 > UI: POST SECTION: dynCtrl*
16:59:12.348 >
16:59:12.348 > MEM: 25840
16:59:12.384 > UI: =POST= LEN: 39
16:59:12.384 >
16:59:12.384 > UI: POST SECTION: dynCtrl*
16:59:12.386 >
16:59:12.386 > MEM: 25840
16:59:12.420 > UI: =POST= LEN: 39
16:59:12.420 >
16:59:12.420 > UI: POST SECTION: dynCtrl*
16:59:12.422 >
16:59:12.422 > MEM: 25840
16:59:12.456 > UI: =POST= LEN: 39
16:59:12.456 >
16:59:12.456 > UI: POST SECTION: dynCtrl*
16:59:12.458 >
16:59:12.458 > MEM: 25840
16:59:12.492 > UI: =POST= LEN: 39
16:59:12.492 >
16:59:12.492 > UI: POST SECTION: dynCtrl*
16:59:12.494 >
16:59:12.494 > MEM: 25840
16:59:12.531 > UI: =POST= LEN: 39
16:59:12.532 >
16:59:12.532 > UI: POST SECTION: dynCtrl*
16:59:12.533 >
16:59:12.533 > MEM: 25840
16:59:12.566 > UI: =POST= LEN: 39
16:59:12.566 >
16:59:12.566 > UI: POST SECTION: dynCtrl*
16:59:12.567 >
16:59:12.567 > MEM: 25840
16:59:12.602 > UI: =POST= LEN: 39
16:59:12.602 >
16:59:12.602 > UI: POST SECTION: dynCtrl*
16:59:12.604 >
16:59:12.604 > MEM: 25840
16:59:12.639 > UI: =POST= LEN: 39
16:59:12.639 >
16:59:12.639 > UI: POST SECTION: dynCtrl*
16:59:12.641 >
16:59:12.641 > MEM: 25840
16:59:12.675 > UI: =POST= LEN: 39
16:59:12.675 >
16:59:12.675 > UI: POST SECTION: dynCtrl*
16:59:12.677 >
16:59:12.677 > MEM: 25840
16:59:12.712 > UI: =POST= LEN: 39
16:59:12.712 >
16:59:12.712 > UI: POST SECTION: dynCtrl*
16:59:12.714 >
16:59:12.714 > MEM: 25840
16:59:12.748 > UI: =POST= LEN: 39
16:59:12.749 >
16:59:12.749 > UI: POST SECTION: dynCtrl*
16:59:12.750 >
16:59:12.750 > MEM: 25840
16:59:12.785 > UI: =POST= LEN: 39
16:59:12.785 >
16:59:12.785 > UI: POST SECTION: dynCtrl*
16:59:12.787 >
16:59:12.787 > MEM: 25840
16:59:12.823 > UI: =POST= LEN: 39
16:59:12.823 >
16:59:12.823 > UI: POST SECTION: dynCtrl*
16:59:12.825 >
16:59:12.825 > MEM: 25840
16:59:12.860 > UI: =POST= LEN: 39
16:59:12.860 >
16:59:12.860 > UI: POST SECTION: dynCtrl*
16:59:12.862 >
16:59:12.862 > MEM: 25840
16:59:12.896 > UI: =POST= LEN: 39
16:59:12.896 >
16:59:12.896 > UI: POST SECTION: dynCtrl*
16:59:12.898 >
16:59:12.898 > MEM: 25840
16:59:12.933 > UI: =POST= LEN: 39
16:59:12.934 >
16:59:12.934 > UI: POST SECTION: dynCtrl*
16:59:12.936 >
16:59:12.936 > MEM: 25840
16:59:12.969 > UI: =POST= LEN: 39
16:59:12.970 >
16:59:12.970 > UI: POST SECTION: dynCtrl*
16:59:12.972 >
16:59:12.972 > MEM: 25840
16:59:13.006 > UI: =POST= LEN: 39
16:59:13.006 >
16:59:13.006 > UI: POST SECTION: dynCtrl*
16:59:13.008 >
16:59:13.008 > MEM: 25840
16:59:13.044 > UI: =POST= LEN: 39
16:59:13.045 >
16:59:13.045 > UI: POST SECTION: dynCtrl*
16:59:13.046 >
16:59:13.046 > MEM: 25840
16:59:13.078 > UI: =POST= LEN: 39
16:59:13.080 >
16:59:13.080 > UI: POST SECTION: dynCtrl*
16:59:13.080 >
16:59:13.080 > MEM: 25840
16:59:13.117 > UI: =POST= LEN: 39
16:59:13.118 >
16:59:13.118 > UI: POST SECTION: dynCtrl*
16:59:13.119 >
16:59:13.119 > MEM: 25840
16:59:13.153 > UI: =POST= LEN: 39
16:59:13.154 >
16:59:13.154 > UI: POST SECTION: dynCtrl*
16:59:13.155 >
16:59:13.155 > MEM: 25840
16:59:13.190 > UI: =POST= LEN: 39
16:59:13.190 >
16:59:13.190 > UI: POST SECTION: dynCtrl*
16:59:13.191 >
16:59:13.191 > MEM: 25840
16:59:13.225 > UI: =POST= LEN: 39
16:59:13.225 >
16:59:13.225 > UI: POST SECTION: dynCtrl*
16:59:13.227 >
16:59:13.227 > MEM: 25840
16:59:13.262 > UI: =POST= LEN: 39
16:59:13.262 >
16:59:13.262 > UI: POST SECTION: dynCtrl*
16:59:13.264 >
16:59:13.264 > MEM: 25840
16:59:13.298 > UI: =POST= LEN: 39
16:59:13.299 >
16:59:13.299 > UI: POST SECTION: dynCtrl*
16:59:13.300 >
16:59:13.300 > MEM: 25840
16:59:13.337 > UI: =POST= LEN: 39
16:59:13.338 >
16:59:13.338 > UI: POST SECTION: dynCtrl*
16:59:13.339 >
16:59:13.339 > MEM: 25840
16:59:13.373 > UI: =POST= LEN: 39
16:59:13.373 >
16:59:13.373 > UI: POST SECTION: dynCtrl*
16:59:13.375 >
16:59:13.375 > MEM: 25840
16:59:13.409 > UI: =POST= LEN: 39
16:59:13.409 >
16:59:13.409 > UI: POST SECTION: dynCtrl*
16:59:13.411 >
16:59:13.411 > MEM: 25840
16:59:13.446 > UI: =POST= LEN: 39
16:59:13.447 >
16:59:13.447 > UI: POST SECTION: dynCtrl*
16:59:13.449 >
16:59:13.449 > MEM: 25840
16:59:13.483 > UI: =POST= LEN: 39
16:59:13.484 >
16:59:13.484 > UI: POST SECTION: dynCtrl*
16:59:13.485 >
16:59:13.485 > MEM: 25840
16:59:13.520 > UI: =POST= LEN: 39
16:59:13.520 >
16:59:13.520 > UI: POST SECTION: dynCtrl*
16:59:13.521 >
16:59:13.521 > MEM: 25840
16:59:13.558 > UI: =POST= LEN: 39
16:59:13.558 >
16:59:13.558 > UI: POST SECTION: dynCtrl*
16:59:13.560 >
16:59:13.560 > MEM: 25840
16:59:13.593 > UI: =POST= LEN: 40
16:59:13.593 >
16:59:13.593 > UI: POST SECTION: dynCtrl*
16:59:13.595 >
16:59:13.595 > MEM: 25840
16:59:13.632 > UI: =POST= LEN: 40
16:59:13.632 >
16:59:13.632 > UI: POST SECTION: dynCtrl*
16:59:13.634 >
16:59:13.634 > MEM: 25840
16:59:13.667 > UI: =POST= LEN: 40
16:59:13.668 >
16:59:13.668 > UI: POST SECTION: dynCtrl*
16:59:13.669 >
16:59:13.669 > MEM: 25840
16:59:13.703 > UI: =POST= LEN: 40
16:59:13.703 >
16:59:13.703 > UI: POST SECTION: dynCtrl*
16:59:13.706 >
16:59:13.706 > MEM: 25840
16:59:13.739 > UI: =POST= LEN: 40
16:59:13.739 >
16:59:13.739 > UI: POST SECTION: dynCtrl*
16:59:13.741 >
16:59:13.741 > MEM: 25840
16:59:13.776 > UI: =POST= LEN: 40
16:59:13.776 >
16:59:13.776 > UI: POST SECTION: dynCtrl*
16:59:13.778 >
16:59:13.778 > MEM: 25840
16:59:13.812 > UI: =POST= LEN: 40
16:59:13.812 >
16:59:13.812 > UI: POST SECTION: dynCtrl*
16:59:13.813 >
16:59:13.813 > MEM: 25840
16:59:13.850 > UI: =POST= LEN: 40
16:59:13.850 >
16:59:13.850 > UI: POST SECTION: dynCtrl*
16:59:13.852 >
16:59:13.852 > MEM: 25840
16:59:13.886 > UI: =POST= LEN: 40
16:59:13.886 >
16:59:13.886 > UI: POST SECTION: dynCtrl*
16:59:13.888 >
16:59:13.888 > MEM: 25840
16:59:13.922 > UI: =POST= LEN: 40
16:59:13.923 >
16:59:13.923 > UI: POST SECTION: dynCtrl*
16:59:13.927 >
16:59:13.927 > MEM: 25840
16:59:13.959 > UI: =POST= LEN: 40
16:59:13.960 >
16:59:13.960 > UI: POST SECTION: dynCtrl*
16:59:13.962 >
16:59:13.962 > MEM: 25840
16:59:13.996 > UI: =POST= LEN: 40
16:59:13.997 >
16:59:13.997 > UI: POST SECTION: dynCtrl*
16:59:13.998 >
16:59:13.998 > MEM: 25840
16:59:14.033 > UI: =POST= LEN: 40
16:59:14.033 >
16:59:14.033 > UI: POST SECTION: dynCtrl*
16:59:14.035 >
16:59:14.035 > MEM: 25840
16:59:14.070 > UI: =POST= LEN: 40
16:59:14.070 >
16:59:14.070 > UI: POST SECTION: dynCtrl*
16:59:14.072 >
16:59:14.072 > MEM: 25840
16:59:14.106 > UI: =POST= LEN: 40
16:59:14.106 >
16:59:14.106 > UI: POST SECTION: dynCtrl*
16:59:14.108 >
16:59:14.108 > MEM: 25840
16:59:14.143 > UI: =POST= LEN: 40
16:59:14.143 >
16:59:14.143 > UI: POST SECTION: dynCtrl*
16:59:14.145 >
16:59:14.145 > MEM: 25840
16:59:14.179 > UI: =POST= LEN: 40
16:59:14.180 >
16:59:14.180 > UI: POST SECTION: dynCtrl*
16:59:14.181 >
16:59:14.181 > MEM: 25840
16:59:14.217 > UI: =POST= LEN: 40
16:59:14.217 >
16:59:14.217 > UI: POST SECTION: dynCtrl*
16:59:14.219 >
16:59:14.219 > MEM: 25840
16:59:14.259 > UI: =POST= LEN: 40
16:59:14.259 >
16:59:14.259 > UI: POST SECTION: dynCtrl*
16:59:14.261 >
16:59:14.261 > MEM: 25840
16:59:14.290 > UI: =POST= LEN: 40
16:59:14.291 >
16:59:14.291 > UI: POST SECTION: dynCtrl*
16:59:14.292 >
16:59:14.292 > MEM: 25840
16:59:14.326 > UI: =POST= LEN: 40
16:59:14.327 >
16:59:14.327 > UI: POST SECTION: dynCtrl*
16:59:14.328 >
16:59:14.328 > MEM: 25840
16:59:14.363 > UI: =POST= LEN: 40
16:59:14.363 >
16:59:14.363 > UI: POST SECTION: dynCtrl*
16:59:14.365 >
16:59:14.365 > MEM: 25840
16:59:14.400 > UI: =POST= LEN: 40
16:59:14.400 >
16:59:14.400 > UI: POST SECTION: dynCtrl*
16:59:14.402 >
16:59:14.402 > MEM: 25840
16:59:14.436 > UI: =POST= LEN: 40
16:59:14.436 >
16:59:14.436 > UI: POST SECTION: dynCtrl*
16:59:14.438 >
16:59:14.438 > MEM: 25840
16:59:14.476 > UI: =POST= LEN: 40
16:59:14.476 >
16:59:14.476 > UI: POST SECTION: dynCtrl*
16:59:14.478 >
16:59:14.478 > MEM: 25840
16:59:14.510 > UI: =POST= LEN: 40
16:59:14.510 >
16:59:14.510 > UI: POST SECTION: dynCtrl*
16:59:14.512 >
16:59:14.512 > MEM: 25840
16:59:14.547 > UI: =POST= LEN: 40
16:59:14.547 >
16:59:14.547 > UI: POST SECTION: dynCtrl*
16:59:14.549 >
16:59:14.549 > MEM: 25840
16:59:14.584 > UI: =POST= LEN: 40
16:59:14.584 >
16:59:14.584 > UI: POST SECTION: dynCtrl*
16:59:14.585 >
16:59:14.585 > MEM: 25840
16:59:14.620 > UI: =POST= LEN: 40
16:59:14.620 >
16:59:14.620 > UI: POST SECTION: dynCtrl*
16:59:14.622 >
16:59:14.622 > MEM: 25840
16:59:14.658 > UI: =POST= LEN: 40
16:59:14.658 >
16:59:14.658 > UI: POST SECTION: dynCtrl*
16:59:14.660 >
16:59:14.660 > MEM: 25840
16:59:14.694 > UI: =POST= LEN: 40
16:59:14.694 >
16:59:14.694 > UI: POST SECTION: dynCtrl*
16:59:14.696 >
16:59:14.696 > MEM: 25840
16:59:14.731 > UI: =POST= LEN: 40
16:59:14.731 >
16:59:14.731 > UI: POST SECTION: dynCtrl*
16:59:14.733 >
16:59:14.733 > MEM: 25840
16:59:14.768 > UI: =POST= LEN: 40
16:59:14.768 >
16:59:14.768 > UI: POST SECTION: dynCtrl*
16:59:14.770 >
16:59:14.770 > MEM: 25840
16:59:14.803 > UI: =POST= LEN: 40
16:59:14.804 >
16:59:14.804 > UI: POST SECTION: dynCtrl*
16:59:14.806 >
16:59:14.806 > MEM: 25840
16:59:14.840 > UI: =POST= LEN: 40
16:59:14.840 >
16:59:14.840 > UI: POST SECTION: dynCtrl*
16:59:14.842 >
16:59:14.842 > MEM: 25840
16:59:14.878 > UI: =POST= LEN: 40
16:59:14.878 >
16:59:14.878 > UI: POST SECTION: dynCtrl*
16:59:14.880 >
16:59:14.880 > MEM: 25840
16:59:14.914 > UI: =POST= LEN: 40
16:59:14.914 >
16:59:14.914 > UI: POST SECTION: dynCtrl*
16:59:14.916 >
16:59:14.916 > MEM: 25840
16:59:14.951 > UI: =POST= LEN: 40
16:59:14.951 >
16:59:14.951 > UI: POST SECTION: dynCtrl*
16:59:14.952 >
16:59:14.952 > MEM: 25840
16:59:14.989 > UI: =POST= LEN: 40
16:59:14.989 >
16:59:14.989 > UI: POST SECTION: dynCtrl*
16:59:14.991 >
16:59:14.991 > MEM: 25840
16:59:15.024 > UI: =POST= LEN: 40
16:59:15.024 >
16:59:15.024 > UI: POST SECTION: dynCtrl*
16:59:15.026 >
16:59:15.026 > MEM: 25840
16:59:15.060 > UI: =POST= LEN: 40
16:59:15.061 >
16:59:15.061 > UI: POST SECTION: dynCtrl*
16:59:15.063 >
16:59:15.063 > MEM: 25840
16:59:15.098 > UI: =POST= LEN: 40
16:59:15.098 >
16:59:15.098 > UI: POST SECTION: dynCtrl*
16:59:15.100 >
16:59:15.100 > MEM: 25840
16:59:15.133 > UI: =POST= LEN: 40
16:59:15.134 >
16:59:15.134 > UI: POST SECTION: dynCtrl*
16:59:15.135 >
16:59:15.135 > MEM: 25840
16:59:15.171 > UI: =POST= LEN: 40
16:59:15.171 >
16:59:15.171 > UI: POST SECTION: dynCtrl*
16:59:15.173 >
16:59:15.173 > MEM: 25840
16:59:15.207 > UI: =POST= LEN: 40
16:59:15.207 >
16:59:15.207 > UI: POST SECTION: dynCtrl*
16:59:15.209 >
16:59:15.209 > MEM: 25840
16:59:15.244 > UI: =POST= LEN: 40
16:59:15.244 >
16:59:15.244 > UI: POST SECTION: dynCtrl*
16:59:15.245 >
16:59:15.245 > MEM: 25840
16:59:15.283 > UI: =POST= LEN: 40
16:59:15.284 >
16:59:15.284 > UI: POST SECTION: dynCtrl*
16:59:15.285 >
16:59:15.285 > MEM: 25840
16:59:15.318 > UI: =POST= LEN: 40
16:59:15.318 >
16:59:15.318 > UI: POST SECTION: dynCtrl*
16:59:15.320 >
16:59:15.320 > MEM: 25840
16:59:15.354 > UI: =POST= LEN: 40
16:59:15.354 >
16:59:15.354 > UI: POST SECTION: dynCtrl*
16:59:15.356 >
16:59:15.356 > MEM: 25840
16:59:15.391 > UI: =POST= LEN: 40
16:59:15.391 >
16:59:15.391 > UI: POST SECTION: dynCtrl*
16:59:15.396 >
16:59:15.396 > MEM: 25840
16:59:15.429 > UI: =POST= LEN: 40
16:59:15.429 >
16:59:15.429 > UI: POST SECTION: dynCtrl*
16:59:15.431 >
16:59:15.431 > MEM: 25840
16:59:15.465 > UI: =POST= LEN: 40
16:59:15.466 >
16:59:15.466 > UI: POST SECTION: dynCtrl*
16:59:15.467 >
16:59:15.467 > MEM: 25840
16:59:15.501 > UI: =POST= LEN: 40
16:59:15.501 >
16:59:15.501 > UI: POST SECTION: dynCtrl*
16:59:15.503 >
16:59:15.503 > MEM: 25840
16:59:15.538 > UI: =POST= LEN: 40
16:59:15.538 >
16:59:15.538 > UI: POST SECTION: dynCtrl*
16:59:15.540 >
16:59:15.540 > MEM: 25840
16:59:15.575 > UI: =POST= LEN: 40
16:59:15.575 >
16:59:15.575 > UI: POST SECTION: dynCtrl*
16:59:15.576 >
16:59:15.576 > MEM: 25840
16:59:15.611 > UI: =POST= LEN: 40
16:59:15.612 >
16:59:15.612 > UI: POST SECTION: dynCtrl*
16:59:15.613 >
16:59:15.613 > MEM: 25840
16:59:15.648 > UI: =POST= LEN: 40
16:59:15.648 >
16:59:15.648 > UI: POST SECTION: dynCtrl*
16:59:15.650 >
16:59:15.650 > MEM: 25840
16:59:15.685 > UI: =POST= LEN: 40
16:59:15.685 >
16:59:15.685 > UI: POST SECTION: dynCtrl*
16:59:15.687 >
16:59:15.687 > MEM: 25840
16:59:15.723 > UI: =POST= LEN: 40
16:59:15.723 >
16:59:15.723 > UI: POST SECTION: dynCtrl*
16:59:15.724 >
16:59:15.724 > MEM: 25840
16:59:15.758 > UI: =POST= LEN: 40
16:59:15.759 >
16:59:15.759 > UI: POST SECTION: dynCtrl*
16:59:15.760 >
16:59:15.760 > MEM: 25840
16:59:15.795 > UI: =POST= LEN: 40
16:59:15.795 >
16:59:15.795 > UI: POST SECTION: dynCtrl*
16:59:15.800 >
16:59:15.800 > MEM: 25840
16:59:15.832 > UI: =POST= LEN: 40
16:59:15.832 >
16:59:15.832 > UI: POST SECTION: dynCtrl*
16:59:15.834 >
16:59:15.834 > MEM: 25840
16:59:15.867 > UI: =POST= LEN: 40
16:59:15.867 >
16:59:15.867 > UI: POST SECTION: dynCtrl*
16:59:15.870 >
16:59:15.870 > MEM: 25840
16:59:15.904 > UI: =POST= LEN: 40
16:59:15.906 >
16:59:15.906 > UI: POST SECTION: dynCtrl*
16:59:15.907 >
16:59:15.907 > MEM: 25840
16:59:15.941 > UI: =POST= LEN: 40
16:59:15.942 >
16:59:15.942 > UI: POST SECTION: dynCtrl*
16:59:15.943 >
16:59:15.943 > MEM: 25840
16:59:15.978 > UI: =POST= LEN: 40
16:59:15.978 >
16:59:15.978 > UI: POST SECTION: dynCtrl*
16:59:15.980 >
16:59:15.980 > MEM: 25840
16:59:16.018 > UI: =POST= LEN: 40
16:59:16.018 >
16:59:16.018 > UI: POST SECTION: dynCtrl*
16:59:16.020 >
16:59:16.020 > MEM: 25840
16:59:16.054 > UI: =POST= LEN: 40
16:59:16.054 >
16:59:16.054 > UI: POST SECTION: dynCtrl*
16:59:16.056 >
16:59:16.056 > MEM: 25840
16:59:16.092 > UI: =POST= LEN: 40
16:59:16.092 >
16:59:16.092 > UI: POST SECTION: dynCtrl*
16:59:16.094 >
16:59:16.094 > MEM: 25840
16:59:16.125 > UI: =POST= LEN: 40
16:59:16.126 >
16:59:16.126 > UI: POST SECTION: dynCtrl*
16:59:16.127 >
16:59:16.127 > MEM: 25840
16:59:16.162 > UI: =POST= LEN: 40
16:59:16.163 >
16:59:16.163 > UI: POST SECTION: dynCtrl*
16:59:16.165 >
16:59:16.165 > MEM: 25840
16:59:16.201 > UI: =POST= LEN: 40
16:59:16.201 >
16:59:16.201 > UI: POST SECTION: dynCtrl*
16:59:16.203 >
16:59:16.203 > MEM: 25840
16:59:16.235 > UI: =POST= LEN: 40
16:59:16.236 >
16:59:16.236 > UI: POST SECTION: dynCtrl*
16:59:16.238 >
16:59:16.238 > MEM: 25840
16:59:16.272 > UI: =POST= LEN: 40
16:59:16.272 >
16:59:16.272 > UI: POST SECTION: dynCtrl*
16:59:16.273 >
16:59:16.273 > MEM: 25840
16:59:16.308 > UI: =POST= LEN: 40
16:59:16.308 >
16:59:16.308 > UI: POST SECTION: dynCtrl*
16:59:16.310 >
16:59:16.310 > MEM: 25840
16:59:16.345 > UI: =POST= LEN: 40
16:59:16.345 >
16:59:16.345 > UI: POST SECTION: dynCtrl*
16:59:16.347 >
16:59:16.347 > MEM: 25840
16:59:16.383 > UI: =POST= LEN: 40
16:59:16.384 >
16:59:16.384 > UI: POST SECTION: dynCtrl*
16:59:16.385 >
16:59:16.385 > MEM: 25840
16:59:16.422 > UI: =POST= LEN: 40
16:59:16.423 >
16:59:16.423 > UI: POST SECTION: dynCtrl*
16:59:16.425 >
16:59:16.425 > MEM: 25840
16:59:16.456 > UI: =POST= LEN: 40
16:59:16.457 >
16:59:16.457 > UI: POST SECTION: dynCtrl*
16:59:16.458 >
16:59:16.458 > MEM: 25840
16:59:16.493 > UI: =POST= LEN: 40
16:59:16.494 >
16:59:16.494 > UI: POST SECTION: dynCtrl*
16:59:16.495 >
16:59:16.495 > MEM: 25840
16:59:16.531 > UI: =POST= LEN: 40
16:59:16.532 >
16:59:16.532 > UI: POST SECTION: dynCtrl*
16:59:16.533 >
16:59:16.533 > MEM: 25840
16:59:16.565 > UI: =POST= LEN: 40
16:59:16.565 >
16:59:16.565 > UI: POST SECTION: dynCtrl*
16:59:16.567 >
16:59:16.567 > MEM: 25840
16:59:16.601 > UI: =POST= LEN: 40
16:59:16.602 >
16:59:16.602 > UI: POST SECTION: dynCtrl*
16:59:16.603 >
16:59:16.603 > MEM: 25840
16:59:16.638 > UI: =POST= LEN: 40
16:59:16.638 >
16:59:16.638 > UI: POST SECTION: dynCtrl*
16:59:16.640 >
16:59:16.640 > MEM: 25840
16:59:16.677 > UI: =POST= LEN: 40
16:59:16.677 >
16:59:16.677 > UI: POST SECTION: dynCtrl*
16:59:16.679 >
16:59:16.679 > MEM: 25840
16:59:16.713 > UI: =POST= LEN: 40
16:59:16.713 >
16:59:16.713 > UI: POST SECTION: dynCtrl*
16:59:16.714 >
16:59:16.714 > MEM: 25840
16:59:16.748 > UI: =POST= LEN: 40
16:59:16.749 >
16:59:16.749 > UI: POST SECTION: dynCtrl*
16:59:16.750 >
16:59:16.750 > MEM: 25840
16:59:16.784 > UI: =POST= LEN: 40
16:59:16.785 >
16:59:16.785 > UI: POST SECTION: dynCtrl*
16:59:16.786 >
16:59:16.786 > MEM: 25840
16:59:16.822 > UI: =POST= LEN: 40
16:59:16.822 >
16:59:16.822 > UI: POST SECTION: dynCtrl*
16:59:16.824 >
16:59:16.824 > MEM: 25840
16:59:16.858 > UI: =POST= LEN: 40
16:59:16.858 >
16:59:16.858 > UI: POST SECTION: dynCtrl*
16:59:16.862 >
16:59:16.862 > MEM: 25840
16:59:16.895 > UI: =POST= LEN: 40
16:59:16.895 >
16:59:16.895 > UI: POST SECTION: dynCtrl*
16:59:16.896 >
16:59:16.896 > MEM: 25840
16:59:16.934 > UI: =POST= LEN: 40
16:59:16.935 >
16:59:16.935 > UI: POST SECTION: dynCtrl*
16:59:16.936 >
16:59:16.936 > MEM: 25840
16:59:16.970 > UI: =POST= LEN: 40
16:59:16.970 >
16:59:16.970 > UI: POST SECTION: dynCtrl*
16:59:16.972 >
16:59:16.972 > MEM: 25840
16:59:17.006 > UI: =POST= LEN: 40
16:59:17.007 >
16:59:17.007 > UI: POST SECTION: dynCtrl*
16:59:17.008 >
16:59:17.008 > MEM: 25840
16:59:17.043 > UI: =POST= LEN: 40
16:59:17.043 >
16:59:17.043 > UI: POST SECTION: dynCtrl*
16:59:17.045 >
16:59:17.045 > MEM: 25840
16:59:17.079 > UI: =POST= LEN: 40
16:59:17.080 >
16:59:17.080 > UI: POST SECTION: dynCtrl*
16:59:17.081 >
16:59:17.081 > MEM: 25840
16:59:17.115 > UI: =POST= LEN: 40
16:59:17.116 >
16:59:17.116 > UI: POST SECTION: dynCtrl*
16:59:17.117 >
16:59:17.117 > MEM: 25840
16:59:17.170 > UI: =POST= LEN: 40
16:59:17.178 >
16:59:17.178 > UI: POST SECTION: dynCtrl*
16:59:17.178 >
16:59:17.178 > MEM: 25840
16:59:17.189 > UI: =POST= LEN: 40
16:59:17.192 >
16:59:17.192 > UI: POST SECTION: dynCtrl*
16:59:17.192 >
16:59:17.192 > MEM: 25840
16:59:17.233 > UI: =POST= LEN: 40
16:59:17.252 >
16:59:17.252 > UI: POST SECTION: dynCtrl*
16:59:17.252 >
16:59:17.252 > MEM: 25840
16:59:17.286 > UI: =POST= LEN: 40
16:59:17.288 >
16:59:17.288 > UI: POST SECTION: dynCtrl*
16:59:17.288 >
16:59:17.288 > MEM: 25840
16:59:17.299 > UI: =POST= LEN: 40
16:59:17.300 >
16:59:17.300 > UI: POST SECTION: dynCtrl*
16:59:17.301 >
16:59:17.301 > MEM: 25840
16:59:17.336 > UI: =POST= LEN: 40
16:59:17.336 >
16:59:17.336 > UI: POST SECTION: dynCtrl*
16:59:17.338 >
16:59:17.338 > MEM: 25840
16:59:17.372 > UI: =POST= LEN: 40
16:59:17.373 >
16:59:17.373 > UI: POST SECTION: dynCtrl*
16:59:17.375 >
16:59:17.375 > MEM: 25840
16:59:17.411 > UI: =POST= LEN: 40
16:59:17.411 >
16:59:17.411 > UI: POST SECTION: dynCtrl*
16:59:17.413 >
16:59:17.413 > MEM: 25840
16:59:17.449 > UI: =POST= LEN: 40
16:59:17.449 >
16:59:17.449 > UI: POST SECTION: dynCtrl*
16:59:17.451 >
16:59:17.451 > MEM: 25840
16:59:17.484 > UI: =POST= LEN: 40
16:59:17.484 >
16:59:17.484 > UI: POST SECTION: dynCtrl*
16:59:17.486 >
16:59:17.486 > MEM: 25840
16:59:17.521 > UI: =POST= LEN: 40
16:59:17.521 >
16:59:17.521 > UI: POST SECTION: dynCtrl*
16:59:17.522 >
16:59:17.522 > MEM: 25840
16:59:17.556 > UI: =POST= LEN: 40
16:59:17.556 >
16:59:17.556 > UI: POST SECTION: dynCtrl*
16:59:17.558 >
16:59:17.558 > MEM: 25840
16:59:17.594 > UI: =POST= LEN: 40
16:59:17.595 >
16:59:17.595 > UI: POST SECTION: dynCtrl*
16:59:17.596 >
16:59:17.596 > MEM: 25840
16:59:17.630 > UI: =POST= LEN: 40
16:59:17.631 >
16:59:17.631 > UI: POST SECTION: dynCtrl*
16:59:17.633 >
16:59:17.633 > MEM: 25840
16:59:17.668 > UI: =POST= LEN: 40
16:59:17.668 >
16:59:17.668 > UI: POST SECTION: dynCtrl*
16:59:17.670 >
16:59:17.670 > MEM: 25840
16:59:17.705 > UI: =POST= LEN: 40
16:59:17.706 >
16:59:17.706 > UI: POST SECTION: dynCtrl*
16:59:17.728 >
16:59:17.728 > MEM: 25840
16:59:17.742 > UI: =POST= LEN: 40
16:59:17.743 >
16:59:17.743 > UI: POST SECTION: dynCtrl*
16:59:17.745 >
16:59:17.745 > MEM: 25840
16:59:17.777 > UI: =POST= LEN: 40
16:59:17.777 >
16:59:17.777 > UI: POST SECTION: dynCtrl*
16:59:17.778 >
16:59:17.778 > MEM: 25840
16:59:17.813 > UI: =POST= LEN: 40
16:59:17.814 >
16:59:17.814 > UI: POST SECTION: dynCtrl*
16:59:17.815 >
16:59:17.815 > MEM: 25840
16:59:17.849 > UI: =POST= LEN: 40
16:59:17.849 >
16:59:17.849 > UI: POST SECTION: dynCtrl*
16:59:17.851 >
16:59:17.851 > MEM: 25840
16:59:17.888 > UI: =POST= LEN: 40
16:59:17.890 >
16:59:17.890 > UI: POST SECTION: dynCtrl*
16:59:17.890 >
16:59:17.890 > MEM: 25840
16:59:17.958 > UI: =POST= LEN: 40
16:59:17.963 >
16:59:17.963 > UI: POST SECTION: dynCtrl*
16:59:17.963 >
16:59:17.963 > MEM: 25840
16:59:17.963 > UI: =POST= LEN: 40
16:59:17.963 >
16:59:17.963 > UI: POST SECTION: dynCtrl*
16:59:17.963 >
16:59:17.963 > MEM: 25728
16:59:17.964 > Eff:3 FPS: 0
16:59:17.964 > MEM stat: 25960, HF: 3, Time: 16:59
16:59:18.005 > UI: =POST= LEN: 40
16:59:18.017 >
16:59:18.017 > UI: POST SECTION: dynCtrl*
16:59:18.017 >
16:59:18.017 > MEM: 25840
16:59:18.033 > UI: =POST= LEN: 40
16:59:18.033 >
16:59:18.033 > UI: POST SECTION: dynCtrl*
16:59:18.035 >
16:59:18.035 > MEM: 25840
16:59:18.071 > UI: =POST= LEN: 40
16:59:18.071 >
16:59:18.071 > UI: POST SECTION: dynCtrl*
16:59:18.073 >
16:59:18.073 > MEM: 25840
16:59:18.107 > UI: =POST= LEN: 40
16:59:18.108 >
16:59:18.108 > UI: POST SECTION: dynCtrl*
16:59:18.111 >
16:59:18.111 > MEM: 25840
16:59:18.148 > UI: =POST= LEN: 40
16:59:18.149 >
16:59:18.149 > UI: POST SECTION: dynCtrl*
16:59:18.151 >
16:59:18.151 > MEM: 25840
16:59:18.179 > UI: =POST= LEN: 40
16:59:18.180 >
16:59:18.180 > UI: POST SECTION: dynCtrl*
16:59:18.182 >
16:59:18.182 > MEM: 25840
16:59:18.216 > UI: =POST= LEN: 40
16:59:18.216 >
16:59:18.216 > UI: POST SECTION: dynCtrl*
16:59:18.218 >
16:59:18.218 > MEM: 25840
16:59:18.253 > UI: =POST= LEN: 40
16:59:18.253 >
16:59:18.253 > UI: POST SECTION: dynCtrl*
16:59:18.255 >
16:59:18.255 > MEM: 25840
16:59:18.290 > UI: =POST= LEN: 40
16:59:18.291 >
16:59:18.291 > UI: POST SECTION: dynCtrl*
16:59:18.292 >
16:59:18.292 > MEM: 25840
16:59:18.329 > UI: =POST= LEN: 40
16:59:18.329 >
16:59:18.329 > UI: POST SECTION: dynCtrl*
16:59:18.331 >
16:59:18.331 > MEM: 25840
16:59:18.368 > UI: =POST= LEN: 40
16:59:18.369 >
16:59:18.369 > UI: POST SECTION: dynCtrl*
16:59:18.371 >
16:59:18.371 > MEM: 25840
16:59:18.402 > UI: =POST= LEN: 40
16:59:18.403 >
16:59:18.403 > UI: POST SECTION: dynCtrl*
16:59:18.405 >
16:59:18.405 > MEM: 25840
16:59:18.439 > UI: =POST= LEN: 40
16:59:18.440 >
16:59:18.440 > UI: POST SECTION: dynCtrl*
16:59:18.441 >
16:59:18.441 > MEM: 25840
16:59:18.477 > UI: =POST= LEN: 40
16:59:18.478 >
16:59:18.478 > UI: POST SECTION: dynCtrl*
16:59:18.479 >
16:59:18.479 > MEM: 25840
16:59:18.513 > UI: =POST= LEN: 40
16:59:18.513 >
16:59:18.513 > UI: POST SECTION: dynCtrl*
16:59:18.515 >
16:59:18.515 > MEM: 25840
16:59:18.551 > UI: =POST= LEN: 40
16:59:18.551 >
16:59:18.551 > UI: POST SECTION: dynCtrl*
16:59:18.555 >
16:59:18.555 > MEM: 25840
16:59:18.584 > UI: =POST= LEN: 40
16:59:18.585 >
16:59:18.585 > UI: POST SECTION: dynCtrl*
16:59:18.587 >
16:59:18.587 > MEM: 25840
16:59:18.623 > UI: =POST= LEN: 40
16:59:18.623 >
16:59:18.623 > UI: POST SECTION: dynCtrl*
16:59:18.625 >
16:59:18.625 > MEM: 25840
16:59:18.659 > UI: =POST= LEN: 40
16:59:18.659 >
16:59:18.659 > UI: POST SECTION: dynCtrl*
16:59:18.661 >
16:59:18.661 > MEM: 25840
16:59:18.694 > UI: =POST= LEN: 40
16:59:18.694 >
16:59:18.694 > UI: POST SECTION: dynCtrl*
16:59:18.696 >
16:59:18.696 > MEM: 25840
16:59:18.732 > UI: =POST= LEN: 40
16:59:18.732 >
16:59:18.732 > UI: POST SECTION: dynCtrl*
16:59:18.734 >
16:59:18.734 > MEM: 25840
16:59:18.768 > UI: =POST= LEN: 40
16:59:18.769 >
16:59:18.769 > UI: POST SECTION: dynCtrl*
16:59:18.772 >
16:59:18.772 > MEM: 25840
16:59:18.804 > UI: =POST= LEN: 40
16:59:18.804 >
16:59:18.804 > UI: POST SECTION: dynCtrl*
16:59:18.805 >
16:59:18.805 > MEM: 25840
16:59:18.841 > UI: =POST= LEN: 40
16:59:18.841 >
16:59:18.841 > UI: POST SECTION: dynCtrl*
16:59:18.843 >
16:59:18.843 > MEM: 25840
16:59:18.879 > UI: =POST= LEN: 40
16:59:18.879 >
16:59:18.879 > UI: POST SECTION: dynCtrl*
16:59:18.881 >
16:59:18.881 > MEM: 25840
16:59:18.914 > UI: =POST= LEN: 40
16:59:18.915 >
16:59:18.915 > UI: POST SECTION: dynCtrl*
16:59:18.916 >
16:59:18.916 > MEM: 25840
16:59:18.952 > UI: =POST= LEN: 40
16:59:18.953 >
16:59:18.953 > UI: POST SECTION: dynCtrl*
16:59:18.955 >
16:59:18.955 > MEM: 25840
16:59:18.990 > UI: =POST= LEN: 40
16:59:18.991 >
16:59:18.991 > UI: POST SECTION: dynCtrl*
16:59:18.992 >
16:59:18.992 > MEM: 25840
16:59:19.025 > UI: =POST= LEN: 40
16:59:19.026 >
16:59:19.026 > UI: POST SECTION: dynCtrl*
16:59:19.027 >
16:59:19.027 > MEM: 25840
16:59:19.063 > UI: =POST= LEN: 40
16:59:19.064 >
16:59:19.064 > UI: POST SECTION: dynCtrl*
16:59:19.066 >
16:59:19.066 > MEM: 25840
16:59:19.099 > UI: =POST= LEN: 40
16:59:19.099 >
16:59:19.099 > UI: POST SECTION: dynCtrl*
16:59:19.101 >
16:59:19.101 > MEM: 25840
16:59:19.134 > UI: =POST= LEN: 40
16:59:19.134 >
16:59:19.134 > UI: POST SECTION: dynCtrl*
16:59:19.136 >
16:59:19.136 > MEM: 25840
16:59:19.171 > UI: =POST= LEN: 40
16:59:19.171 >
16:59:19.171 > UI: POST SECTION: dynCtrl*
16:59:19.173 >
16:59:19.173 > MEM: 25840
16:59:19.209 > UI: =POST= LEN: 40
16:59:19.210 >
16:59:19.210 > UI: POST SECTION: dynCtrl*
16:59:19.212 >
16:59:19.212 > MEM: 25840
16:59:19.244 > UI: =POST= LEN: 40
16:59:19.244 >
16:59:19.244 > UI: POST SECTION: dynCtrl*
16:59:19.246 >
16:59:19.246 > MEM: 25840
16:59:19.280 > UI: =POST= LEN: 40
16:59:19.280 >
16:59:19.280 > UI: POST SECTION: dynCtrl*
16:59:19.282 >
16:59:19.282 > MEM: 25840
16:59:19.580 > publishing & sending dynctrl...
16:59:19.581 > {"dynCtrl0":"255"}
16:59:19.581 > UI cfg WRITE key:'GlobBRI' val:'255...', cfg mem free: 577
16:59:19.586 > UI: section begin root3288368560 [1] 403 free
16:59:19.587 > UI: Frame add obj 54 b, storage 109/512...OK [1] MEM: 24560
16:59:19.588 > json_frame_flush
16:59:19.588 > UI: section end root3288368560 [0] MEM: 24576
16:59:31.921 > pubCallback :
16:59:31.921 > UI: section begin root3300702981 [1] 659 free
16:59:31.922 > UI: Frame add obj 74 b, storage 109/768...OK [1] MEM: 25208
16:59:31.924 > UI: Frame add obj 73 b, storage 193/768...OK [2] MEM: 25208
16:59:31.924 > UI: Frame add obj 81 b, storage 268/768...OK [3] MEM: 25208
16:59:31.926 > UI: Frame add obj 73 b, storage 351/768...OK [4] MEM: 25208
16:59:31.928 > UI: Frame add obj 81 b, storage 426/768...OK [5] MEM: 25184
16:59:31.929 > json_frame_flush
16:59:31.929 > UI: section end root3300702981 [0] MEM: 25224
16:59:32.091 > send MQTT Data :
16:59:32.092 > {"pTime":"16:59","pMem":"25960","pUptime":"54840","pRSSI":"-54"}
16:59:32.949 > Eff:3 FPS: 0
16:59:32.950 > MEM stat: 26152, HF: 4, Time: 16:59
16:59:39.582 > UI: AutoSave
16:59:39.582 > UI: Save default main config file
Обратите внимание на то, когда именно произошла обработка контрола - 16:59:19.580 > publishing & sending dynctrl...
Не знаю что у вас там в энкодере, даже не глядел, но догадываюсь что вы накрутили велосипед поверху уже того что есть.

1620137589009.png1620137720674.png
 
Последнее редактирование:

kostyamat

★★★★★★★
29 Окт 2019
2,886
1,665
Не знаю что у вас там в энкодере, даже не глядел, но догадываюсь что вы накрутили велосипед поверху уже того что есть.
Вот вам ответ:
ваша манера общения "через губу" со всеми этими "сфигали?", "сначала разберитесь...
"Не читал, но осуждаю" - ну ОК. :)
 

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
"Не читал, но осуждаю" - ну ОК. :)
Зеркалу скажите. Поскольку вы именно, что не читали, либо попросту не поняли. Я вам уже говорил неоднократно - сначала разберитесь как работает и устроено, затем рекомендации. Наоборот - не нужно. Впрочем @vortigont в отличие от меня обязательно прислушается к вам и сделает все так как в энкодере, добавив волшебный "if", может даже два! :)

И да. Я снова говорю - сначала разберитесь. Потому как именно вы прикручиваете функционал поверх имеющегося и именно вы мне задаете вопросы, а не я вам. Я вопросов не задаю (но щаз исправлюсь, см. далее), мне любой код понятен. Многое понятно не сразу, многое требует эксперимента и проверки. Вверху скриншот как раз попытка добиться падения через референс-объект и предварительное освобождение документа. Неудачная, кстати. Сможете объяснить почему неудачная, а? Буду рад объяснению, заодно и вы может чего нового почитаете вот тут: https://arduinojson.org/ .
* Как добиться удачного падения легким движеним руки я знаю, ежели чо. Но меня интересует именно показанный кейс и суть происходящего именно в таком варианте написания.
 

vortigont

★★★★★★✩
24 Апр 2020
688
550
Saint-Petersburg, Russia
М-да... мне одному кажется что кдн слышит только себя и видит только то что хочет видеть? Алл, Выскажите свое мнение, не стесняйтесь, а то может меня и вправду "куда-то понесло....", начну пить валерианку там...

1. Подход не разобравшись в чем-то выносить поспешные суждения не считаю правильным.
я понял, вы с пол глаза во всем разбираетесь, остальные на это неспособны и бездумно несут околесицу, вы часто это повторяете

2. Подход наставить на своих же суждениях, когда предоставлены доказательства того, что иной вариант суждений ошибочен - не считаю взрослым.
подход за основу доказательств выбирать какой-то узкий частный случай и экстраполировать его на целое я тоже не считаю взрослым

Вы так и не объяснили зачем нужна отсрочивание отправки сообщения - насколько я понимаю это не нужно совершенно, объяснить целесообразность вы не можете.
может вы просто пропустили что-то? Я не могу поверить что вы выносите поспешные суждения неразобравшись. Поэтому повторю, на всякий случай.

А этот код, оставлял в памяти одну полную копию уже десериализованного объекта, необходимую для отработки акшена откладывал экшен и позволял за это время 1) очистить исходный буфер с постом 2) отправить эхо (при необходимости) и освободить память от как тонкой копии так и исходящего буфера с эхо.
Ну и доказательства, да...
Оба скрипта были в равных условиях
давайте-ка я верну ваш вариант, добавлю отладку вывод по памяти и отключу пост, поглядим
а зачем же вы пост отключили-то? ну отключили бы и создание отложенного таска для соблюдения равных условий.
А вы не пробовали никаких других тестов, нет? Ну, например, не кнопочку зажимать а отправлять пачками что там у вас в прошлый раз в буфер не влезало форму настроек "другие" и заодно поставить задержку у таски не 100 мс а 1, 5 10? Ну и память смотреть не в одном месте где-то а при 1) получении сообщения, 2) после формирования эхо, 3) перед и 4) после обработки поста но пере выходом из асинк-ивента? Тоже не пробовали? Потому что во всем разобрались или потому что условия уже не такие равные? Детский сад какой-то а не тестирование...

Подход ревертить чужие коммиты, без предупреждений считаю вообще вредительством - для меня загадка, надеюсь это было поспешное и случайное действие.
Я откатывал свои комиты, посмотрел, там был один мой мердж комит из ваших изменений. Видимо вместе с ним откатлись и ваши, приношу свои извинения и вам и остальным кого затронуло, это было абсолютно непреднамеренное действие.

5. Самоустранение и чуть что отговорки словами...
Отговорки от чего, простите? Сами сказали что тут никто никого ни к чему не принуждает, я пояснил свою позицию, хотите воспринимайте на свой счет - хотите считайте отговоркой.

Прошу внимательно и спокойно прочитать написанное выше, хорошо подумать и лишь затем писать ответ.
Прочитал, подумал, в текущих обстоятельствах я не вижу какую пользу я смогу приносить проектам.
Вести обсуждение о подходах и методах вы не желаете, если вам что-то втемяшится в голову то слышать вы ничего не хотите. Гавкаться на форуме за каждый комит, собирать высосанные из пальца тесты на каждый чих, переписывать одни куски кода по 3 раза, выносить поспешные суждения не разобравшись... Зачем мешать друг другу-то? Я не навязываюсь, была возможность развивать проект - рад был помочь, а проталкивать что-то через силу у меня желания нет.

Я считаю что оба ваших подхода к решению вопроса несколько не к месту.
Костя, дело в не в этом вопросе конкретно, а в отсутствии желания вырабатывать общие решения. Я вообще не решал этот вопрос, потому что он мне в голову не приходил, сам я фигней с зажиманием кнопок не страдаю. Включается перфоратор, в консоли в одном месте получаются циферки МЕМ: меньше чем "до" - решение найдено, остальные "не разобрались". Ну ОК, что я могу сказать, творец так видит. Вам вообще тумаков достается с лихвой, хотя проекту вы уделяете времени уж точно не меньше, как минимум это должно выливаться в уважительном отношении к вашему мнению.
 
  • Лойс +1
Реакции: kostyamat

vortigont

★★★★★★✩
24 Апр 2020
688
550
Saint-Petersburg, Russia
Впрочем @vortigont в отличие от меня обязательно прислушается к вам и сделает все так как в энкодере, добавив волшебный "if", может даже два!
Оч смешно...
https://github.com/DmytroKorniienko/EmbUI/commit/0d0a3795cfcc9003077b50720f5ac0261d8207c4#diff-4f4721d23fcf5dbd2d1a02d3a826662aeee875644423bcd1d071a233f8ec8bf8R92-R99:
                // Проверка на спам данными, если совпадают, то подменяются и реальное изменение откладывается
                if(lastPostTask){
                    if(lastPostTask->checkIsSame(doc)){
                        lastPostTask->setNewData(doc);
                        lastPostTask->restartDelayed();
                        return;           
                    }
                }
 
  • Ахах! +1
Реакции: kostyamat

kostyamat

★★★★★★★
29 Окт 2019
2,886
1,665
Прочитал, подумал, в текущих обстоятельствах я не вижу какую пользу я смогу приносить проектам.
Та ладно. Спокойствие, только спокойствие. Вы только посчитайте сколько раз я переделывал управление эффектами, вместо того, чтобы делать/переносить/улучшать сами эффекты. Аж теперь, спустя год, мы пришли к какому-то однообразию, и структурированию этого всего. Хотя я настоятельно толкал эту тему с самого начала, и еще тогда видел имеено то, что получилось сейчас. Но хоть когда-то.
Я уходил, обижался, возвращался. Но всегда чему то учился, в том числе пробивать свое мнение, в обстановке тотального неприятия. :) Это тоже полезный опыт.

Не надо уходить, остыньте. @kDn раз пять переделает, рано или поздно упрется во что-то, и тогда его можно будет подтолкнуть к правильному решению. Жаль, что на это столько времени уходит. :( И труда.
 
  • Лойс +1
Реакции: Alex PAP и vortigont

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
Вернул назад в фреймворк код onWsEvent/WS_EVT_DATA который показывал вчера тут, с мелкими правками, удалением комментариев, лишнего класса, таска. Пока мне не показали более эффективного по памяти, либо более стабильного варианта - текущий принимается как основной. Обсуждать далее этот момент без кода и наглядной демонстрации выигрыша этого кода - я более не буду.
 

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
Ввиду того что здесь началась клоунада а-ля Сотнег, а мне это надоело, то для дальнейших обсуждений какой я плохой предлагаю переместиться в ветку "флейм" и там продолжать. Ввиду того что проект опенсорсный - напоминаю, что любой желающий может создать форк проекта или фреймворка с любой точки и далее вести свой проект самостоятельно или совместно. Нисколько не возражаю против обсуждений параллельных веток/форков в данной теме при желании, а также не возражаю против создания новых тем для альтернативных реализаций.

Спасибо за понимание.
 

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
1 когда я тыкаю стрелки он как-бы и не очень то и нужен, т.к. я ожидаю переключение эффекта....В демо красиво , но возникает желание уменьшить длительность перехода...(видимо - есть , но хочется ещё, человеческая сущность), может показалось, что, угасает дольше чем разгорается...
Длительность вроде дефайнами подстраивалась, ориентир - 2 секунды на разгорание/угасание.
По поводу того чтобы только для режима ДЕМО работал при переключениях - не уверен, подумаю... Возможно сделаю, чтобы для ДЕМО всегда был фейдер на автопереключение, вне зависимости от опции в настройках, тогда можно будет выключить переключатель фейдера в настройках - его не будет нигде, кроме ДЕМО.
2 При переключении эффекта стрелками, если не до конца эффект разгорелся и включается следующий (если переключать раз-два в секунду ) , на нём наблюдается эффект стробоскопа, т.е. рябит...
Баг, надо будет поправить.
Ведь вроде давно нет "специального" пустого эффекта.
Он есть всегда, либо самый первый, либо самый последний.
 

stepko

★★★★★✩✩
26 Июн 2020
994
313
М-да... мне одному кажется что кдн слышит только себя и видит только то что хочет видеть?
Буду отвечать так: не полностью.
Но нам таки нужно сделать интуитивно понятный интерфейс для всех, чтобы практически никаких инструкций не надо было.
И не один такой нюанс.

Нам нужно сделать узоры псевдо-суб-пиксельным, как у Шумах 3Д(кстати, сделал облегченную версию).

Я пробую рекламировать прошивку за рубежом, что бы пользовались и помогали нам. Спасибо @malec за демо-видео.
Может в Твиттере запостить.
Если что может лучше чем у меня текст для рекламы сделаете?
 
Последнее редактирование:
  • Лойс +1
Реакции: Burai и kostyamat

vortigont

★★★★★★✩
24 Апр 2020
688
550
Saint-Petersburg, Russia
Пока мне не показали более эффективного по памяти
Ну давайте я покажу чтобы уж расставить все точки над "ё" в сегодняшнем балагане - клон вашей ветки с доп точками вывода freeheap(), мои правки там же.
прогнал 3 теста
1) переключение флажка "Вкл", подключено 2 клиента
2) Нажать кнопку "настройки, другие, сохранить", подключено 2 клиента
3) Нажать кнопку "настройки, другие, сохранить", подключен 1 клиент

Специально ничего не подбирал, как прогналось так и собрал логи, значения фрихип записал в таблицу.
Итог: в 3 тестах из 3 пиковое потребление памяти у меня ниже, от нескольких сотен байт, до ~2 кб. Это уже с учетом расхода на таск. Задержка обработки поста 10 мс. Сравнительная таблица и логи в атаче.
conpare.png

P.S. Странный вы человек, Дмитрий. По человечески общаться вы не хотите или не можете, не знаю, вас надо только
Вперед тыкать меня мордочкой в мои ошибки, я погляжу, утрусь и в следующий раз сделаю лучше.
Зачем... я не понимаю этого...
 

Вложения

  • 14.5 KB Просмотры: 2

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
@vortigont, почему вы для теста не взяли свой исходный вариант? Если вам кажется нечестным сравнение исходного с текущим, то вы могли бы взять предложенный мною для дальнейшей работы вариант из этого сообщения: https://community.alexgyver.ru/thre...a-firelamp_jeeui-gpl.2739/page-389#post-86942 и именно его сравнивать с исходным.

Повторите тест, либо же подождите утра, я его повторю.

* Можете ни секунды не сомневаться, если окажется, что я неправ и я сделал хуже чем было - то принесу публичные извинения и ревертну свой код.
 

kostyamat

★★★★★★★
29 Окт 2019
2,886
1,665
@kDn, вопрос - в чем задумка эффекта номер 0? Он нужен для чего-то, возможно рисовалки?
Почему спрашиваю: Вот сижу и размышляю - включать ли его в выбор эффектов энкодером. И если задумки нет, почему бы ему по дефолту не присваивать флаг !canBeSelected ? Чтобы он в списке не метельшил.
 
  • Лойс +1
Реакции: malec

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
@kDn, вопрос - в чем задумка эффекта номер 0? Он нужен для чего-то, возможно рисовалки?
Для рисовалки и на случай сбоя текущего эффекта - автопереключение на 0. В обоих списках по дефолту он отключен, если это не так - то баг. Если отключен в списке выбора, то будет самым нижним :), но перейти на него можно только принудительным выбором.
 

kostyamat

★★★★★★★
29 Окт 2019
2,886
1,665
@kDn, ок, то есть по дефолту он должен быть ! canBeSelected. Понял.
Второй вопрос, фавориты у нас тупо для демо?

И вот сейчас я уперся в проблему - мне нужно вычитать контроллы текущего эффекта типа: есть ли он вообще; какой мин и макс; тип; текущее значение. И это все в коде, который знать не знает про УИ. Есть ли соответствующие методы, к кому стучать за инфой? Ну и соответственно оперативно менять их значения.

А еще научится создавать отложенную таску, которая активируется по команде, при этом функции она должна вызывать разные. Блин, сложно.


--------------------------------------------

@ALL Возник вопрос - переключение эффектов энкодером в режиме Демо должно соблюдать список выбранных эффектов для Демо, или позволять выбрать произвольный, кроме тех, которые убраны из списка эффектов (снята галочка "В списке выбора")?
Сейчас энкодер учитывает только эту галочку. Учитывание галочки "в списке Демо" усложняет код, и лень делать. Но если надо, то надо. ;)

Кстати, энкодер уже можно тестировать. Уже в DEV. Не все пока гладко. Первые секунд 10 после загрузки его лучше не крутить - вызывает падения. Проблему знаю, причину тоже (лампа слишком занята вычеткой конфигов и первичной настройкой, это дело лучше не надрачивать прерываниями от энкодера), но пока так. Потом буду думать как решить, или @kDn просить помочь.
Но в общем уже вполне работает. Сразу скажу, что удобнее, и прикольнее им пользоваться именно в связке с ТМ1637. Информативнее.
 
Последнее редактирование:

malec

★★★★★✩✩
5 Фев 2019
1,182
370
Спасибо @malec за демо-видео.
На днях у сына на канале выложил))) MR. ALPHA :ROFLMAO: уже 20 просмотров:cool::LOL:Но там никакой рекламы и ссылок, просто видео...
Возможно сделаю, чтобы для ДЕМО всегда был фейдер на автопереключение, вне зависимости от опции в настройках,
(y)
ориентир - 2 секунды на разгорание/угасание.
ИМХО 4сек. для перехода это очень много, Если их с наложением сделать , то ДА... А как сейчас лучше 1сек+1сек...

либо самый первый, либо самый последний.
Да самый последний и незаметный)))) Циферки у него нет...
 
  • Лойс +1
Реакции: stepko

Temp

✩✩✩✩✩✩✩
24 Апр 2021
4
1
Прочитал штук 20 крайних страниц - неожиданно оказалось, что можно зацепить индикатор и энкодер))) нарыл у себя и TM1637, и KY-040, но вот только не нашел - куда ж припаять то... может есть схема? Паять могу, а вот в коде шарю плохо (ну разве, что только копи-пастить чутка умею...)

PS: смотрю тут куча "авторов" пишущих код, но я так и не смог разобраться в сути - название этой прошивки FireLamp_JeeUI, - это человек/автор? Топик-стартер вроде - @kDn (т.е. эта ветка/прошивка как-бы его?), но тогда непонятно почему его постоянно "хают" другие участники. В итоге - эта ветка/прошивка чья? И я не смог найти ветки или прошивки никого из других уважаемых участников. Можно пожалуйста ссылки на Ваши ветки/прошивки? Я бы с удовольствием их потестил (если не жалко).
 

Вложения