RE
а у меня вывод такой - вначале, пока ардуина вычисляет результат, она печатает цифры в Serial - от 1 до 65 - они печатаются в строку - без переводов. типа таймер такой. чтобы в консоли было видно, что идет некий процесс и сколько он занял уже времени.. потом, когда ардуина вычислила результат - идет печать результата, построчно. то есть сам вывод в консоли может выглядеть так: >>> sending request to Server: 4 1 2 4 5 7 >>> Server ACK OK >>> got reply from server#: 0x4 sizeof(buf): 251 Server:4 T0(ground):0.00 T1(20cm):0.00 T2(40cm):0.00 T3(60cm):0.00 .... ....
RE
и вот эти 1 2 4 5 7 могут печататься до 65
RE
но так как io.read не выводит строку без Ентера у меня на странице результат появляется уже весь сразу.. я не вижу этот таймер.
RE
и ладно бы не видеть его и просто ждать. но тут другая трабла есть - таймаут JS - если слишком должно ждать ответа от CGI скрипта может быть ошибка таймаута - Bad Gateway и все..
RE
поэтому и хочется выводить то, что печатается в Serial - as is.
Snusmumriken
Да, всё пральна. Карочи, тебе надо побайтово считать всю фигню. Придумай разделитель между сообщениями. В http - такой : \r\n\r\n. Но тебе можно и попроще, например, такой: --# function read_message() local port = io.open("/dev/ttyUSB0","r") local d = {} -- сокращение 'data' -- пока последние символы сообщения не будут -- равны разделителю - считываем по одному байтику while d[#d] ~= '#' and d[#d-1] ~= '-' and d[#d-2] ~= '-' do -- забиваем данные в таблицу d[#d + 1] = port:read(1) end for i = #d - 3, 3 do d[i] = nil end -- удаляем разделитель return table.concat(d) -- возвращаем строку из склеенной таблицы end И смотри: при отправке сообщения, ты дописываешь ему в конец '--#'. При приёме - сообщение считается "принятым" как только напоролись на последовательность символов --#. К счастью, ты можешь передать луа-файл у которого в конце такая штука. Или можешь оформить функцию отправки с дописыванием этой последовательности.
RE
я пока не могу делать изменения в прошивке ардуины
RE
то есть то, как приходят данные оттуда - пока хардкод.. и с этим надо както бороться
RE
просто сами девайсы лежат под 5 м снега и к ним только летом можно дойти
Snusmumriken
Сделай ещё одну функцию ёпт! void SendData(string data){ data = data + "--#"; Serial.write(data); }
Snusmumriken
А.
RE
потом конечно буду менять прошивку.. там еще куча другой работы
Snusmumriken
Ну кароч в принципе суть примерно понял?
RE
читаю
RE
я так понял, что это все просто считает весь вывод до конца сообщения.
RE
от начала до конца - до моего стоп символа
Snusmumriken
Ага. Комбинации символов, ну не важно.
RE
спасибо. но у меня и так это все уже работает. все, что выводит ардуина, считывается и печатает на веб странице.
Snusmumriken
А чего ты хотел конкретно? : )
RE
я канеш рискую нарваться опят на непонимание, но давай в третий раз я просто покажу на свои сообщения выше)
Snusmumriken
Ой
vvzvlad
Возьми библиотеку для работы с сериалом
RE
Возьми библиотеку для работы с сериалом
то есть не использовать системную, а взять другую? какую?
vvzvlad
rs232lua
vvzvlad
Вообще, потыкай меня в привате, я доберусь до компа, покажу, как у меня читается. Там та же фигня, обещание с МК
RE
оке спасибо я уже видел какуюто rs232 для Lua на github но ей лет 8 вроде было
Snusmumriken
Snusmumriken
как работает мой код, и не только он
Snusmumriken
Подставь PIL вместо телефонного справочника.
Aleksey
Ребят есть ли разница между type(variable) == 'nil' и variable == nil? Каким способом лучше проверять на nil?
Aleksey
оно будет истинным, если var не nil?
Elias
Не помню точно, но вроде еще можно сравнивать с false и nil~=false
Mikhail
лунные коты, не подскажете какой-нибудь эмулятор терминала под Lua по типу... https://github.com/shellinabox/shellinabox чтобы из браузера цепляться. и из браузера юзать терминал но на серверной стороне есть Lua которая будет автоматизировать некие операции. Самое простое - это операции авторизации. соль в тотм, чтобы терминал открывался с серверного ip а не с клиентского
RE
wow wow я с этого тоже начинал и пришел к тому, что дешевле написать свой скрипт вывода на html
Mikhail
скрипт вывода..... эмулятор терминала?
RE
ну мне надо было чтото такое, чтобы в браузере видеть вывод из сериал порта..
RE
пришлось ваять под свою задачу такое. прост у меня openwrt особо не разгуляешься
Mikhail
ну мне надо было чтото такое, чтобы в браузере видеть вывод из сериал порта..
у меня такое реализовано. но.. не в реальном режиме. типа делаешь запрос "послать что то в порт" и видишь результат. Портов 5000 (на реальных устройствах по всему миру)
Mikhail
но тут мне надо прям.. режим интерактива. реальный терминал, чтобы ручками слать символы... ок. буду думать. не хочу изобретать колесо.
RE
вот мне как раз такое и надо - послать запрос и у видеть ответ. но все через веб морду
Mikhail
ага. ну вот ищу решения готовченские )
RE
а как можно посмотреть на твою реализацию?
Anonymous
Фига у вас тут движуха
Anonymous
Браузерный эмулятор терминала любой же подойдёт - в качестве шела надо просто указать луа
RE
а есть такие эмуляторы для openwrt? \
Anonymous
Щас посмотрю
Anonymous
К сожалению , пока не нашёл
RE
вот и я тож..
Anonymous
Что то есть , но я не знаю как там с серверной частью liftoffsoftware.com/Products/GateOne
RE
Да, всё пральна. Карочи, тебе надо побайтово считать всю фигню. Придумай разделитель между сообщениями. В http - такой : \r\n\r\n. Но тебе можно и попроще, например, такой: --# function read_message() local port = io.open("/dev/ttyUSB0","r") local d = {} -- сокращение 'data' -- пока последние символы сообщения не будут -- равны разделителю - считываем по одному байтику while d[#d] ~= '#' and d[#d-1] ~= '-' and d[#d-2] ~= '-' do -- забиваем данные в таблицу d[#d + 1] = port:read(1) end for i = #d - 3, 3 do d[i] = nil end -- удаляем разделитель return table.concat(d) -- возвращаем строку из склеенной таблицы end И смотри: при отправке сообщения, ты дописываешь ему в конец '--#'. При приёме - сообщение считается "принятым" как только напоролись на последовательность символов --#. К счастью, ты можешь передать луа-файл у которого в конце такая штука. Или можешь оформить функцию отправки с дописыванием этой последовательности.
что это такое - #d ? никак не могу нагуглить понятно что индекс массива, но что конкретно этот символ # означает в этом контексте?
Alexey
Длинна
RE
длина чего?
Alexey
Строки или массива. Или юзердата с метаметодом
RE
понял вроде # это оператор такой спасибо
RE
http://www.lua.ru/doc/2.5.5.html вот
RE
👍
RE
да уже прочел. первый nil будет дырой
RE
значит d[#d] - это последний элемент массива
RE
почему неопределенное? в этом случае напечатается 5
fgntfg
#d возвращает последний индекс, не?
Maxim
Ребята, подскажите как установить lua на macos. Нихера не понимаю чо происходит. Таких проблем на лине и винде не встречал. Может есть актуальная инстукция?
Ivan
Anonymous
Больше инфы
Anonymous
Впервые слышу
Snusmumriken
Больше инфы
https://t.me/luainmoscow
Anonymous
В этот раз не попаду(
Elias
Я пойду
Snusmumriken
Ты докладчик, куда ты денешься? )))
Elias
😂👍
Snusmumriken
Не знаю, получится ли, ты знаешь почему.
Snusmumriken
Я постараюсь но обещать не можу.
Kukuzapa
Добрый день. Надо на lua сгенерить xml на основе xsd, никто не знает куда копать?
Snusmumriken
Парсер xsd.
Kukuzapa
Можно немного поподробнее) Что мне даст парсинг xsd?
Anonymous
Может быть просто на лхмл сгенерить документ и проверить его хсд-схемой пост фактум
Kukuzapa
В луа такое возможно?
Kukuzapa
Поиск lua xsd выдает мало релевантных результатов(
Anonymous
Если в луа есть биндинг к лхмл или лхмл2 то возможно
Anonymous
Для проверки по хсд схеме, скорее всего, будет достаточно обычной програмки