• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Обсуждение Споры вокруг Lua

pvvx

Активный участник сообщества
Самого сильно раздражает, когда для простейшей задачи - подрыгать ногой и помигать светодиодом, применяют мощнейший 32 разрядный CPU ,
обвешанный , как спецназовец оружием, всякими интерфейсами и фичами -мол, это круто и сейчас легко доступно.
Тут ошибка. В данном случае - Lau на ESP8266 нет среднего звена = нормальных драйверов коммуникационных протоколов для связи со всем миром по стандартам. Имеется только ногодрыгалка и возможность кое как отсылать и принимать байты в UDP, с потерей потока и совместимости. От этого и все сложности, несовместимости, ошибки и неверные подходы к решению задач. Остальной мир техники работает на более высоком уровне коммуникационных протоколов и не понимает посылаемые-принимаемые обрывки передач от данной реализации lua.
От этого и получается всего два решения для реализации:
1) Писать всё с нуля на все задействованные устройства своё (и тут lua не годится)
2) Один раз на ESP8266 написать правильную и совместимую по стандартам реализацию до уровней протоколов внешних устройств и прикручивать что угодно.
Всё остальное - это поулумеры, которые через пять минут будут заброшены на полку из-за несовместимости.
 
Последнее редактирование:

boka17

New member
2 [B][COLOR=rgb(109, 63, 3)]nikolz[/COLOR][/B], - разумеется, борщ сваренный поваром будет в разы вкуснее доширака из коробки :)
А для ESP даже "коробочный" вариант ещё сыроват - вчера работает, сегодня нет, завтра (с новой прошивкой) опять переделывать надо.
Это ,безусловно, интересная тема, но тяжеловата для любителя, чтобы сделать все необходимые библиотеки самому и с нуля.
Я же не берусь переписывать MS Word :) когда что-то в нем не нравится.
Или, когда мне нужна кружка чая, то беру готовый электрический чайник, а не рассчитываю сопротивление нихромовой спирали, ток, толщину изоляции, форму ручки и размер крышки...
Вот и здесь - пусть либа в примере работает 750 мс, но работает! Мне и не надо быстрее.
А так - моя простая задача - писать лог температуры на подоконнике раз в минуту, превращается в серьезную разработку, вплоть до команд процессора, который (мне) не знаком.
На освоение и понимание нужно время, информация.... так и забудешь, чего хотел в начале.
Использование готовых примеров - это "ардуинщина" в чистом виде :) - собрал кубики -и вуаля , результат! Но, это работает, и в 90% случаев достаточно.
Мое большое IMHO , что назначение ESP8266 это WiFi мост для внешнего контроллера, не более, а учитывая мнение более компетентных специалистов - ещё и недоделанный.
Все "повелись" на низкую цену, а теперь ещё стараются "впихнуть невпихуемое" в этот чип. У кого-то безусловно получается, но, блин - не все-же Ломоносовы :)
 
Абсолютно солидарен с boka17,

nikolz, "Все языки высокого уровня создают коды более низкого уровня в большем объеме" - далеко НЕ ВСЕ!. А выбор LUA для модуля мне понятен. Нужно было БЫСТРО выдать хоть ЧТО НИБУДЬ, а lua - один из не многих интерпретируемых языков, исходно имеющих параллельность, абсолютно необходимую модулю... Не берусь быть пророком, но имея кой-какой опыт, смею предположить, что направление lua - тупиковое для ESP. Это модуль для творчества и закладываться на экзотику - по меньшей мере странно. Можно провести опрос - кто из форумчан до этого писал что-нибудь на lua?
 

pvvx

Активный участник сообщества
Ну да...Ну да...
Например в ESP cервер TP всего 4 оператора.
А во всем мире сколько?
У всего мира, к примеру на HTTP, всего то - прием и посылка переменных, да страниц HTML. В имеющейся реализации lau есть файловая система, но нет функций включения её для HTTP. С переменными (передачей/приемом параметров) и парсингом запросов/ответов HTTP вообще ничего не реализовано. Т.е. как таковой тут, на Lua, нет поддержки даже простого протокола HTTP. Да и нативная работа с HTTP не возможна, т.к. требуется не менее 12 килобайт свободной памяти для системной обработки стека TCP на один запрос-ответ, не говоря уже о HTTP.
Пишется, что встроен MQTT, но ситуация аналогична. Нет доступа на уровне, аналогичном Lua, к функционалу MQTT - нет простого назначения переменных передаваемых брокеру MQTT. Про организацию сервера (брокера) MQTT на модуле и разговора не идет. Да и MQTT нет у бытовых устройств. Т.е. это не для домашних поделок.
nikolz - Какие ещё у нас есть распространенные протоколы коммуникации, поддерживаемые "остальным миром", чтобы использовать в данной реализации lua ?
Могу привести - WebSocket. Он требует меньше ресурсов, чем полный Web-HTTP. Но его драйвера тоже не видно в NodeMCU... Он годится для непосредственного общения пользователя с ESP модулем, хоть с телефона, но не годится для сбора данных.
Для сбора данных, хорошо катит ftp. Большинство домашних роутеров имеют встроенный ftp сервер с установкой внешней флешки. Нужен только драйвер на модуле, который будет передавать логи по просыпанию, с датчиков, роутеру...

Если проанализировать возможности модуля ESP, то единственной перспективой является Ар-“дурино”. Там возможна реализация жестких драйверов различных протоколов, как включаемых библиотек при трансляции. Жестких – это с урезанным функционалом, но полностью соответствующих стандартам (на не поддерживаемый функционал драйвер имеет стандартные правильные фиксированные ответы, а не просто скипает их, создавая неопределенности и несовместимости).

Ну и другой случай – писать всё на Си или C++ самому… Можно и на asm :)
PS: По всем совокупностям, на сегодня, Lua в ESP8266 является аутсайдером.
 
Последнее редактирование:

pvvx

Активный участник сообщества
вот пример из примеров разработчиков web сервера :
Он не корректен. Не указан "Content-Length: " и многое другое, что требует указание в заголовке "HTTP/1.1". Как итог не будет правильно отрабатывать на современных эксплорерах - по стандарту это ошибочный ответ.
Не учите народ создавать ошибочные и не верные несовместимые ни с чем (кроме вас) вещи. :)
По вашему примеру можно сказать о полном незнании на сегодня вами HTTP.
По чему в ответе сразу идет HTTP/1.1 если запрашивал клиент с HTTP/1.0 ? Ещё масса других ошибок в приведенном примере....
Connection: keep-alive - указывает, что у вас поддерживается стек запросов. Где его обработка?
Почему вдруг разорвано соединение, при указании всего этого?
....
Данное соединение завершиться кодом ABORT, указывающим о том, что все переданные данные являются ошибочными и подлежат удалению из стека HTTP.

conn:eek:n("sent",function(conn) conn:close() end) - вам не поможет, при передаче через proxy и т.д., даже если укажите "HTTP/1.0" но не укажите "Content-Length: x" и "Connection: close". Выйдет :eek: и "maloc assert" от TIME_WAIT. Т.е. этим действием вы ещё уменьшаете доступную память у модуля для следующих команд Lua :)
По стандарту сервер HTTP не должен первым закрывать соединение. :p
относительно сбора данных,
пока лишь делаю на стороне PC на луа.
Когда доделаю , то непременно похвалюсь.
---------------------------------------------------------------
Лень,Зависть и Любопытство - двигатель прогресса.
Лень,Зависть - двигатель потребительства.
С нетерпением ждем очередного несовместимого ни с чем протокола :) - Всё ради Lua! :)
Все остальные расширения языка, как правило , как и во всех языках высокого уровня,
реализуется встроенными библиотеками - т е программами реализованными в нативном коде.
Ждем от вас реализации встроенных библиотек для NodeMCU и типа.
Без них Lau на ESP8266 не имеет возможности коммуникации с внешним миром. Ссылки на исходники всех реализаций клонов Lua на ESP приведены на форуме.
 
Последнее редактирование:

Victor

Administrator
Команда форума
Не знаю всех причин, но lua имеет большое распространение в IoT.
Погуглите и найдете множество примеров.
По моему субъективному мнению местами код на lua не очень дружелюбен для тех, кто привык к другим, "обычным" языкам программирования. Чего только стоят вот такие конструкции:
Код:
_, _, a = bfunc(c)
Но количество скачиваний NodeMCU перевалило за 400k - "Значит это кому-нибудь нужно"

Удачно ли приживется NodeMCU для ESP8266?

Для простых проектов да, если Arduino IDE для ESP8266 не заполонит интернет простыми и реально работающими примерами.
Для серьезных - нет.

Интерпретатор lua съедает почти всю RAM ESP8266 и у нас остаются убогие 20-22k.
А нам нужно парсить html и json и много чего еще.
Именно поэтому разработчикам пришлось разделить NodeMCU прошивки на integer и float
Именно поэтому до сих пор нет NodeMCU на SDK 1.0.0, где памяти еще меньше (менее 18k по данным разработчиков)
Но NodeMCU неплохая заготовка для следующего чипа Espressif, в котором наверняка будет больше RAM (подтвержденных данных этому нет - это сугубо мое личное мнение)

Холивар на тему NodeMCU можно продолжать бесконечно и только "время нас рассудит"
 

pvvx

Активный участник сообщества
Тут холивара нет - нет либ = нет языка. Конкретнее - не будет никакого HTTP на Lua без внутреннего драйвера на CИ к нему. Аналогично и с другими коммуникационными протоколами.
Интерпретатор lua съедает почти всю RAM ESP8266 и у нас остаются убогие 20-22k.
На esp8266.com как раз разбирают, как отъедается память в Lua.
Последние версии Luaклонов на ESP8266 далеко не ушли от простого переноса открытых исходных кодов Luaинтерпретатора. Добавок там под специализацию чипа практически нет, кроме ногодрыгалки. На дальнейшее “портировщиков” пока не хватило. Гонять их надо :)
 
Последнее редактирование:

Victor

Administrator
Команда форума
может быть кто-то уже знает, что же называется серьезным проектом
я на начальника транспортного цеха не очень похож, но выскажусь.

В моем понимании серьезный проект - это промышленное производство готового изделия. Вроде пресловутого "открывателя гаражных ворот".

Когда SoC ESP8266EX будет не на модуле, а на плате готового устройства именитого производителя - вот это серьезный проект.

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

Хотя, если сравнивать с ардуино, то у ESP8266 есть неплохие шансы стать важной деталью многих конструкторов на рынке, но это немного не то, хотя и вполне серьезно.

Как то так.

Еще мне вот очень интересно зачем к ESP делать доступ из глобальной сети?
Замысел не в доступе к ESP8266 из сети, а в наличии возможности управлять гаражными воротами с телефона с другого континента. А к ESP8266 подключаться, или еще куда-то - конечным пользователям не очень важно, а нам просто интересно.
 

pvvx

Активный участник сообщества
2) Еще мне вот очень интересно зачем к ESP делать доступ из глобальной сети?
Предполагается для сбора годовой статистики (круговой - новые данные затирают прошлогодние) по 16 каналам (датчикам) и отображению с графиками (текущими по 1..2 сек точка) на любом устройстве оснащенным веб браузером и графиков с разрешениями от 5 минут (усредненная) точка, до вычисления средних точек по месяцам, плюс логи разных состояний (журналирование событий) и вывод с web в csv, печать таблиц заданных промежутков и прочее (подключены и исполнительные устройства по CAN или RS-485-Modbus шине). Счас (уже более 5 лет) это у меня (и на многих точках) работает на PIC24 с 8-ю килобайтами RAM памяти + 1Meg 8-ногая флешка и ENC28J60. Далее на любой роутер и WiFi или напрямую в Интернет. С ESP исключается большая внешняя цепочка и падает потребление. Ну и становиться не три одновременно обслуживаемых клиентов :)
И наконец избавиться от вечно виснущих роутеров и свичей - обычно устройство оснащено бесперебойником и не выключается годами, а роутеры и свичи сети виснут :( Cisco - дороговато по соотношению к самому устройству :) Желаю увидеть от вас аналог на Lua, на контроллере с гораздо большими возможностями = ESP8266.
Кто знает, поделитесь мечтами?
Подрыгать одной ножкой на Lua, в бункере, где нет других WiFi :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Что мешает сейчас подключить к ESP 16 датчиков и передать данные в хранилище?
Это не распределенная система (она сама себе командир) и данные там частные (закрытые), а так-же никто не хочет вступать в зависимость. Хранение данных на внешнем сервере - это тоже не распределенная система и подвержена сбоям по всем факторам. Элементарный и часто встречаемый вариант - неполадки в связи и система неработоспособна. А кому нужны такие системы?
Отвечу за вас - для детей - поиграться и выбросить.
У “распределенной системы” бывают жесткие и гибкие конфигурации. Но закон почти всегда один – младший цепляется к местному старшему и вместе создают конклав. В полном смысле сборища “изолированного от внешней системы”. И в нем, самый мощный, осуществляет коммуникацию со внешним миром в строго ограниченных протоколах и разрешенной информацией. Всё как у сообществ распределения людей по территории Земли.

Вы как будто не читаете, что писалось. Домашний роутер пока этого не умеет. Не содержит даже базовых протоколов. Возьмем хоть наихудший, но немного подходящий – MQTT. Но если даже на роутер установлен MQTT, то нет связи далее и никакой поддержки сбора логов и статистики. Тут будет разрыв и потребуется что-то нестандартное. Есть ещё кривые серверы типа баз данных для пром. проколов. Но они требуют больших ресурсов и в роутере пока не уживутся. В итоге все потуги сохранить данные у “старшего” пока обречены. Ждите что скажет Googleи Samsung– они готовят как раз протоколы для распределенных систем, включая даже обмен производительностью и аппаратными ресурсами у каждого устройства по их локальной сети... Т.е. мир Iot идет без вас и не в вашу сторону.
 
Последнее редактирование:

pvvx

Активный участник сообщества
А для детей есть книжки со стихами и сказками,
или гвозди и молоток,
или мячик и скакалка.
Вот и пишите стихи на Lua, для детей, для скакалки. Пусть учатся.
Когда они вырастут, возможно Lua ещё сохраниться и ресурсов для его полноценной работы хватит в любом таракане...
А для вас решение на сегодня с Lua есть - используйте удаленный сервер исполняющий Lua, так-же как предлагаете сохранять на нем данные.
Для этого вам необходимо на СИ написать загрузку на модуль UDPпакета с шифрованием/дешифрованием и отсылку запроса на сервер. На сервере, на luaнапишите компилятор программ коды процессора ESP8266 и отсылаете их на модуль. Он принимает, дешифрует, записывает код в память и исполняет. Мульоны возможностей и никакой “мало памяти” :)
 
Последнее редактирование:
Сверху Снизу