Скрыть объявление
Управляйте вашими ESP8266 и другими устройствами прямо с телефона из любой точки мира, где есть интернет!
Подробности и обсуждение IoT Manager в этой теме. Официальный сайт приложения и документация IoTmanager.ru
Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Web-свалка на RTL871x

Тема в разделе "Realtek - SDK, прошивки и утилиты", создана пользователем pvvx, 21 апр 2017.

  1. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.811
    Симпатии:
    1.005
    Web-свалка успешно переехала на RTL-ы.
    GitHub - pvvx/RTL00_WEB: Simple web server for RTL8710AF
    Дописываю основные функции переключения WiFi... Возможно кто поможет с оформлением и переписыванием по максимуму примеров Web страниц c Ajax на websosket (особенно интерактивные, с графиками и т.д.) ? В данном Web есть поддержка и того и другого. Переменные передаются через GET/POST/куки/мультидата и websocket... Надо ли SSI?
    А пока предложить могу только галерею картинок с уже как-то работающих страничек...
    Заодно принимаются заявки, на что надо дополнить и что хотелось бы иметь в Web-сервере. Может как-то разбить на простой и более сложный вариант?...
    Снимок1408.gif Снимок1407.gif Снимок1405.gif Снимок1403.gif Снимок1402.gif
    Начальные тесты показали, что модуль RTL8711AM успешно выдерживает за 200 (для RTL8710AF - до 70) одновременных открытых HTTP соединения и порядок в 20000 обработок коротких HTTP запросов-ответов с открытием-закрытием портов в минуту... RTLHTTPD
     
    Последнее редактирование: 28 апр 2017
    Alex01, aneox, aloika и 3 другим нравится это.
  2. Simon

    Simon Новичок

    Сообщения:
    17
    Симпатии:
    1
    Ссылки на проект и sdk к нему пока нет?
    Из пожеланий - обновление прошивки через web и классика UART<->TCP в пару кликов как на esp.
     
  3. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.811
    Симпатии:
    1.005
    Обновление через Web было и есть. Просто оно не было описано :) Там всегда была включена и посекторная запись Flash... На ESP это особо не требовалось, с его прожорливостью flash, т.к. продаваемые модули были с малым размером flash и SDK туда два раза не лезла. Тут то во время записи Flash всё работает и не вызывает никаких проблем писать её на ходу как угодно, хоть побайтно в окне страницы мышкой. :)
    Возможно допилить и TFTP. Он уже "почти" адаптирован и давно закинут в мою сборку SDK... (от другой версии LwIP и надо поправить только заголовки).
    ----------
    +
    На HTTPS с RTL871xAF Web не вытянуть. Это возможно только на RTL8711AM.
    ----
    На git пока не скинуть - очень много изменений в самом SDK, в основном по API WiFi и надо притянуть (адаптировать) уже имеющиеся старые примеры к ним, чтобы не городить множества репозиториев с SDK к сотне мегабайт...
     
    Последнее редактирование: 21 апр 2017
    aneox нравится это.
  4. vad7

    vad7 Активный участник сообщества

    Сообщения:
    382
    Симпатии:
    43
    Пожелание: если это еще не сделано, увеличить лимит для размера переменных и их имен в функциях web_parse_*.
    Добавить функцию записи в webfs.
     
  5. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.811
    Симпатии:
    1.005
    Не вижу смысла в "записи" на простой web-диск. Вы будете писать по одному файлу страницы сервера?
    Всякая статистика и прочие накапливаемые данные обычно пишутся в своем формате и для передачи их надо разбирать, а не на прямую гнать в HTTP поток. Обычно делают циклический буфер в Flash для их записи и процедуру имитации вывода данных из них, как файла, в разных форматах.
    При записи файлов на Flash возникает бяда в виде тормоза, чтобы дырки не протереть при записи. Никто вам не мешает прикрутить в качестве файловой структуры и SPIFFS и ждать открытия файла более 1 секунды :) Ограничим в Web на одно текущее соединение и будет работать... :)
    SD прикручивается влет, но запись на ней тоже накладывает ограничения в виде установки супервайзеров питания и UPS. Иначе может слететь вся, при отключении питания не вовремя.
    Web обращается к диску всего 4-мя функциями: Open file, Read блок, Seek обратно на указанное число от текущего, Close file. Текущие установки web требуют от 32-х одновременно открытых файлов. Желательно больше, но RTL00 "мало памяти".
    Так что давайте свою файловую систему с записью и алго, как писать файлы по HTTP с разбором каталогов и прочих атрибутов файлов, кол-вом одновременно открытых от 32-х файлов и умещающуюся в память RTL00. Жду.
     
    Последнее редактирование: 22 апр 2017
    aneox нравится это.
  6. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.811
    Симпатии:
    1.005
    А смысл? Быстрее получить сообщение "мало памяти"?
    Яндекс: "самое длинное слово в русском языке"
    «Тетрагидропиранилциклопентилтетрагидропиридопиридиновые» (55 букв, химич. вещество)
    А синтезировать белки Web-свалка не умеет, чтобы ей передавать самое длинное слово в мире: http://geekologie.com/2012/11/20/titin.txt


    Для справки:
    Microsoft Internet Explorer: Начиная с четвертой версии браузера, максимальная длина воспринимаемого URL составляет 2 083 символов. При этом длина GET-запроса лимитирована 2 048 символа.
    Web-свалка жрет GET запрос от 3-х MSS до где-то к 6-ти кило.
    У POST запросов лимитов нет.
    URL ограничен длиной имени файлов с каталогами на дисковой системе.
    Кол-во переменных в URL строке ограничено длиной GET запроса.
    Для передачи бесконечного числа переменных существует формат "мультидата", но ограничение тоже есть, т.к. оно не явное - размер Content до 4294967296 байт (32 бита) и обходить это я не стал.
    Это старинные методы. Для современных - используйте websocket. Там ограничения на кол-во переменных нет.
     
    Последнее редактирование: 22 апр 2017
  7. vad7

    vad7 Активный участник сообщества

    Сообщения:
    382
    Симпатии:
    43
    pvvx, эк вас заплющило... :)

    у вас 3 функции парсинга в которых объявлены буфера 32 на имя и 192 на значение, чем они и ограничены:
    esp8266web/web_srv.c at master · pvvx/esp8266web · GitHub

    Хотя можно использовать всего одну универсальную функцию и не задействовать локальные буфера, а парсить прям на месте и не будет доп. ограничений на длину:
    PowerMeter-IrDA/web_srv.c at master · vad7/PowerMeter-IrDA · GitHub
     
  8. vad7

    vad7 Активный участник сообщества

    Сообщения:
    382
    Симпатии:
    43
    Да как хотите, чё тогда спрашивать про пожелания?
    Себе вот сделал функцию записи на место старого файла без ресайза и пока хватает...
     
  9. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.811
    Симпатии:
    1.005
    А всем не хватит. Вам побаловаться, а нам для более серьезных вещей. :p
     
  10. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.811
    Симпатии:
    1.005
    vad7 - во вас как колбасит :)
    Имя переменной в 32 символа. Это сколько вариантов?
    Каким образом парсить на месте, если надо перекодировать строку из web символов в обычные?
    Ваша функция срет в начальную строку, а она может быть в flash, т.е. const :)

    И ещё раз - опишите цели увеличения размеров имен переменных и их параметров.
    Пока это только ваша блажь, как и запись в одно и то-же место чтобы Flash в SoC вышла из строя. Arduino в соседней ветке... :)
     
    Последнее редактирование: 22 апр 2017
  11. vad7

    vad7 Активный участник сообщества

    Сообщения:
    382
    Симпатии:
    43
    Да ну!? Бред не пишите.

    А цель простая, редактирование больших настроек, как то выгрузка на IoT сервер.
     
  12. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.811
    Симпатии:
    1.005
    И для особо одаренных объясняю:

    Переменные при парсинге из URL и т.д. должны поступать в очередь (стек списка) (Queue), а не обрабатываться на ходу в том-же треде. Там ещё масса условий, таких как Аутентификация на разрешение исполнения. Это предполагается сделать, т.к. уже есть проблемы – не всё функции работают из уровня приоритета LwIP и могут иметь длительное время исполнения. Зачем потоку web держать все принятые данные за всю жизнь в принятых буферах, если использовать ваш глупый подход?

    Выгрузка чаго? Файла? Дык он должен иметь свою "дисковую систему", про что вам и написано. Давайте пример файловой системы для flash - уже второй раз спрашиваю. :)
    Вы уже в прошлой теме с ESP постоянно попрошайничали эти глупые вещи, которые не решаются по вашему - тут не ESP, которая делает дырки в flash сама, постоянно переписывая один и тот-же сектор. Так что с вас файловая система для Flash с записью. Они есть, но проприетарные. Ваша задача изменить их, адаптировать и выложить нам :p
     
    Последнее редактирование: 22 апр 2017
  13. vad7

    vad7 Активный участник сообщества

    Сообщения:
    382
    Симпатии:
    43
    pvvx, А не пойти бы кое кому в лес с задачами то?
    То что вы что-то делаете и выкладываете в публичный доступ, не наделяет вас правом хамить.
    И показывать свою шизу нужно не на форуме, а у врача, а то не нароком обострение случится...

    А то что функции в веб свалке неоптимальные, так это ни чего, с кем не бывает. Вам написали, как сделать более оптимально, а вы тут хрень несете, пытаясь оправдаться.
    Некрасиво.

    По третьему разу объяснять зачем это я все это доработал, не буду, ибо бесмысленно.
    Вам не нужно и ладушки.

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

    Есть такая поговорка - не трожь г$вно, вонять не будет.
    Вы извините, специалист вы может и хороший, но как человек вы полное ....
     
  14. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.811
    Симпатии:
    1.005
    А можно вас попросить не использовать Web-свалку, без разрешения врача?
    Сходите к психиатру, получите справку и опубликуйте - тогда разрешу :)
    А пока начнем с того - где коды дисковой системы с записью, без дырок?
    А закончим тем, что попробуйте запустить из треда LwIP какую функцию WiFi, потом срочно к врачу - докладывать, как вы сотый раз упрашиваете меня сделать проект лично под ваши выкрутасы, не подкрепленные ничем, кроме дури. :p
    И вот вам направление к врачу:
    Код (Text):
    1.  
    2. Task List:
    3. ==================================================
    4. Name      Status Priority HighWaterMark TaskNumber
    5. loguart         R       4       662     4
    6. IDLE            R       0       36      2
    7. TCP_IP          B       9       637     5
    8. Tmr Svc         B       5       444     3
    9. cmd_threa       B       6       251     39
    10. web_qfn         B       5       676     13
    11. rtw_littl       B       10      451     40
    12. rtw_inter       B       6       207     38
    13. rtw_recv_       B       5       887     36
    14. rtw_check       B       5       211     41
    15. rtw_TDMA_       B       7       219     42
    16. rtw_xmit_       B       5       221     37
    Приоритет TCP_IP увидели, и сравнили с ожидание выполнения других, входящих в WiFi драйвер. Понижать динамически на ходу не буду, т.к. чревато другими осложнениями и направлениями вас к дохтору. :)
    И ещё одно направление к другому дохтору, если плохо с чтением:
    Подчеркнул, что писалось ранее, другими словами, с ошибками и бегло, но вы не в состоянии и это воспринимать, т.к. вам надо только свою блажь. :)
    И ещё раз - Arduino в соседних ветках - вам туда, т.к. там, если люди задают вопросы правильно, то и получают нормальные ответы, а здесь вы ведете себя неприлично, даже когда вам разжовывают почему и как...
    В который раз вам ещё объяснить, что вы делаете оптимизацию на тестовой версии, нагроможденной за время выхода разных SDK к ESP8266? А тут RTL871x с RTOS и методы отличаются. Начальная разбор на разный парольный доступ уже вписан и как уже сказал - "парсить" переменные теперь надо по другому... Но могу оставить - бросить, вставить ваш кусок и пусть себе растет, как великий оптимизированный сорняк, не давая сделать другое?
     
    Последнее редактирование: 23 апр 2017
  15. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.811
    Симпатии:
    1.005
    Вы хотели оптимизации, но полезли в мелкий уровень. Третья справка для таких больных:

    Данные поступают из буфера LwIP– его распределителя памяти. В данном случае, у вас, они переписываются в другой буфер , распределяемый в heap менеджером памяти RTOS. Выходит двойной буфер и пересылка. Можно работать и в буферах LwIP, выуживая построчно и уже декодировав с парсингом. По времени это почти одинаково, но в итого меньше сложных манипуляций и ваши мелочные оптимизации при этом опять не катят.

    Там-же выходит, что для передачи блока необходимо всё равно его кешировать в LwIP (передавать LwIP буфер, который он дублирует в своих pbuf на время передачи стека TCP), т.е. это всё говорит, что надо работать прямо в pbuf LwIP-а и не городить свои приемо-передающие буфера.

    if ((crlf = pbuf_memfind(hs->req, CRLF, 2, preq->offset)) == 0xFFFF) …
    if (((pos = pbuf_memfind(p, "boundary=", 9, preq->contype)) < 0xFFF0)…

    Как-же тогда будет работать ваша опимаза?
    Надеюсь, теперь вам уже хватит направлений к врачу?
    --------
    А мы тут продолжим изучать какие простые вопросы и пожелания есть. Русло их описал ранее, в первом соо – нужно или нет SSI? Или сделать возврат, по каким то пару выбираемых алгоритмов галочками в меню, к настройкам у WiFi при неуспехе нового соединения и т.д. Оптимизировать будем потом , когда созреет концепция и будут осмысленны необходимые затраты на оптимизацию (затраты времени). :p
     
  16. aloika

    aloika Читатель

    Сообщения:
    278
    Симпатии:
    18
    Хочется механизм сброса настроек до дефолтных (как было по кнопке на ESP) и tcp-client в каком-нибудь виде (как было на ESP оверлеем). Про SSI почитал, с ходу не понял, какие возможности это даст, надо разбираться...
     
  17. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.811
    Симпатии:
    1.005
    SSI - это по причине желания сделать так, чтобы избавиться от Ajax по максимуму.
    Сброс настроек относится, в основном, к WiFi и начальной загрузке конфигурации галочек, что запускается по старту. Оно уже есть и было сделано в базе. Тут не ESP с закрытой частью начальной загрузки, установок и невозможности влияния на их ход и сборку вообще.
    Tcp-client на RTOS и с использованием socket описывается в 5 строчек СИ и смысла вводить его в базу нет. Есть уже работающие либы websock-client, MQTT и подобное, хоть с SSL.

    Кратко, для моего API WiFi:
    Код (C):
    1. /* Опции загрузки конфигов по старту */
    2. //#define DEF_LOAD_CFG 0                                // старт в назначенном режиме по умолчанию
    3. //#define DEF_LOAD_CFG BID_ALL_WIFI_CFG                 // старт в назначенном общем  режиме по умолчанию, с загрузками последних конфигураций ST и AP
    4. #define DEF_LOAD_CFG (BID_ALL_WIFI_CFG | BID_WIFI_CFG)    // старт в записанном режиме
    5.  
    6. /* Опции разрешения записи конфигов по упсешному соединению или выполнению операции установок режимов WiFi без ошибок */
    7. #define DEF_SAVE_CFG (BID_ALL_WIFI_CFG | BID_WIFI_CFG)    // сохранение по успешному соединению/выполнению для всех конфигов:
    8.                                                         // (для ST или AP пишутся раздельно) с проверкой на изменения
    На сегодня вроде застабилизированы переключения WiFi режимов, но есть одно большое "НО". WiFi драйвер использует 1 или 2 netif, в зависимости от режима (AP или ST / ST+AP). В ROM и текущем коде SDK, в режимах ST или AP используется всегда netif[0], а при ST+AP меняют местами названия интерфейсов и прочее, приводящее к тому, что имена устройства, переданные DHCP, NETBIOS, mDNS и т.д. меняются, а внешнее устройство не опрашивает смену (windows) и не может получить доступ по старому имени, пока не истекут определенные тайм-ауты (или если перезагрузить windows или какая-тама операционка использовалась)... Кароче полный бардак и исправить его будет возможно только если полностью перепишу код управления в драйвере WiFi SDK (тот который в закрытых либах).
    ----------
    Для @vad7 сообщаю - найдены ошибки в tcpsrv из темы к ESP8266, приводящие к вылету (до протектед) при определенных операциях открытия-закрытия TCP соединений и связанные с алгоритмами работы LwIP и исправлены только тут, для RTL... Т.е. можно "убить" ESP8266 с тем кодом на уровне стандартных посылок TCP пакетов c хитрой последовательностью ACK и FIN. :) (про глюки с переменными разговор не идет - через них можно переписать и заглючить всё - они для этого и сделаны - для тестов). Развитие ESP-Web-свалки - закрыто.
     
    Последнее редактирование: 24 апр 2017
  18. GDI

    GDI Новичок

    Сообщения:
    14
    Симпатии:
    1
    SSI конечно надо, как же без них? Городить на вывод пары переменных json или websocket?
     
  19. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.811
    Симпатии:
    1.005
    Для вывода переменных, вставки в файлы с атрибутом "парсить" при выводе в поток HTTP у web-свалки, используется формат ~имя~ или ~имя=параметры~. SSI подразумевает язык IF ELSE и назначение форматов вывода стандартых переменных типа времени года - зима, лето - SSI (программирование) — Википедия, т.к. на каждой планете оно своё :)
    Сейчас, к примеру, нет возможности переключения содержания файла в целом, к примеру по коду авторизации пользователя. Или запрета вывода по каким-то критериям каких-то файлов с подменой на другие. Один каталог для Васей, другой для Петей...
     
    Последнее редактирование: 24 апр 2017
  20. GDI

    GDI Новичок

    Сообщения:
    14
    Симпатии:
    1
    Я имел в виду SSI который просто вставляет переменные в текст страницы как в lwip-шном httpd, т.е. ~имя~.
     

Поделиться этой страницей