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

ESP Sky – Онлайн редактор для lua скриптов

Стали бы пользоваться

  • Да

    Голосов: 5 100.0%
  • Нет

    Голосов: 0 0.0%

  • Всего проголосовало
    5
  • Опрос закрыт .

Shade

New member
ESP Sky – Online IDE for ESP8266

Возможности:
  • Облачный редактор Lua скриптов
  • Мгновенная загрузка скриптов из облака в устройство
  • Мгновенная передача результата выполнения обратно в редактор
  • Отложенная загрузка и обновление криптов, при включении устройства.
  • Автозапуск скриптов, управляемый через облако. Вы больше не сломаете init.lua
  • Шифрование соединения с помощью AES-128
  • Примеры кода
  • Простая установка и подключение, всё работает на основе официальной прошивки NodeMCU.


Мой доклад на митапе Mail.ru:




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

Старый коммент для истории:
Всем привет.
Пробую работать с esp-12, сначала с ардуино ide, потом перешёл на nodemcu и луа.

самым большим неудобством оказалась доставка новых скриптов на есп (после дней и ночей разбирательств с платформой конечно же :)

Я хочу сделать онлайн редактор для скриптов. Чтобы можно было файлы отредактировать файлы онлайн, нажать Save & Run, и они сразу бы через интернет попали на 1 или несколько устройств.
А если что-то пошло не так, то не пришлось бы подключаться по uart и исправлять вручную.

Что скажете, прикольная тема или уже есть похожие готовые решения? Я как-то схожу не нашёл ничего стоящего.
 
Последнее редактирование:

Shade

New member
а что в ESPlorer показалось неудобным?
Если вкратце то :)


Если серьёзно – вай-фай устройство должно взаимодействовать через интернет, а не провода. Сам подход не удобный и интерфейс есплорера тут думаю не сильно поможет.
Даже для двух устройств уже неудобно переключаться, если их будет 10 то перевед медвед.

А для экспериментов, полезная штука конечно же.
 

Shade

New member
Всем привет. Я все же решил запилить IDE.

Спешу с вами поделиться: http://espsky.com








Как этим пользоваться?
1. Нужно пойти на NodeMCU custom builds и сделать новый билд
нужны модули: cjson, crypto, encoder, file, http, mqtt, net, node, websocket, wifi

2. Залить получившийся билд на ESP8266
3. Через любой любимый инструмент Загрузить на ESP два файла:
http://espsky.com/resources/setup/init.txt как init.lua
http://espsky.com/resources/setup/uplink2.txt как uplink2.lua

4. После рестарта модуля в консоли можно увидеть простецкий визард, который предложит ввести имя WIFI точки и пароль.
После этого устройство само себе сгенерит ключ доступа и покажет, а вам только останется этот ключ доступа зарегистрировать на espsky.com

либо можно вручную выполнить код:
settings = {}
settings.data = {}
settings.data.wifiName = "wifiName"
settings.data.wifiPassword = "wifiPass"
settings.data.deviceToken = nil
jsonString = cjson.encode(settings.data)
file.open("config.json", "w")
file.write(jsonString)
file.close()
node.restart()

Если все прошло успешно, то устройство напишет:
 

Shade

New member
Пятничное обновление:
1. Автозапуск файлов из облака – не нужно больше трогать init.lua

2. Немного украшательств интерфейса

3. Быстрое подключение к IDE в две команды.



 

Shade

New member
Обновление
1. Быстрое подключение стало еще быстрее (см. видео!)
2. Примеры кода для быстрого старта
3. Улучшения интерфейса
4. Демо видео





 

Shade

New member
Заработало обновление спящих устройств.
Если ваша ESPшка собирает данные с сенсоров, а потом спит большую часть времени (как у меня), то телепортировать на неё новую логику не так просто.
Теперь можно спокойно писать код, а ESPSky загрузит его на устройство сразу, как только оно проснется.



Можно выбирать:
  • просто запустить старый файл
  • обновить и запустить файл
  • просто обновить, но не запускать (например можно загрузить Json файл)


Очень интересно услышать от вас какую-нибудь обратную связь.

 

khseal

New member
Попробовал, но что-то у меня не заработало. То ли я криворук. Выполнил все скрипты. Везде написало ОК и done. А в итоге веб панель устройство не видит. Посмотрю видео))
Подозреваю у меня просто не хватает каких то модулей в прошивке.
Хорошо бы еще локальную версию такой штуки. Чтобы можно было поставить на свой сервер, без mysql. А с использованием какой нибудь sqllite. А то нет увеенности что этот облачный сервис будет завтра работать.
UPD
После добавления модулей все заработало.
Как я понимаю список файлов с esp не получает веб морда?
Результат скрипты в вебморду тоже не отправляется?
В принципе, все хорошо, но оперативную память эта штука подъедает, но мне нравится что с моим веб сервером на esp эта штука не конфликтует и работает нормально.
Буду тестировать надеюсь и веб серверу и этой штуке хватит оперативной памяти...
Хотя конфликт все же есть, поэтому и не показывает в консоли выполнение скриптов.
Конфликт решил. Но не понял как железка с помощью вашего скрипта подключается к моему вайфаю.
Так же не хватает кнопки компиляции скрипта.
 
Последнее редактирование:

Shade

New member
Спасибо за комменты, уж было подумал что совсем никому не интересно :)

Как я понимаю список файлов с esp не получает веб морда?
Пока нет, короткосрочный план – наладить передачу на ESP, а потом уже, когда все будет отлично работать, можно пробовать забирать файлы с ESP.
Идеальный вариант, на мой взгляд, когда файлы всегда будут приходить из облака и их не нужно будет скачивать обратно.

Хорошо бы еще локальную версию такой штуки. Чтобы можно было поставить на свой сервер, без mysql. А с использованием какой нибудь sqllite. А то нет увеенности что этот облачный сервис будет завтра работать.
Если окажется востребовано и разработчики подтянутся, то, думаю, это быстро произойдет.

Результат скрипты в вебморду тоже не отправляется?
Должны отправляться. Перед каждым запуском файла вывод с консоли перенаправляется в EspSky, а после выполнения файла переключается обратно на uart.
Возможно, включать перенаправление в интернет нужно сразу при подключении и тогда будет стабильнее работать. Несколько активных потоков могут сейчас всё ломать.


Но не понял как железка с помощью вашего скрипта подключается к моему вайфаю.
Она только ждет, когда появится IP адрес от wifi.sta.getip() и как только он появляется – подключается к MQTT.
Думаю, ваша ESP просто помнит последние настройки wifi и подключается автоматом.

Да, как только некая стабильность станет нормой, можно будет реализовать и компиляцию на сервере и проделать кучу оптимизаций.
Как быстрое решение, можно попробовать компилировать скрипты сразу после загрузки и повыбрасывать лишнее из ESPSky.lua
 

khseal

New member
Должны отправляться. Перед каждым запуском файла вывод с консоли перенаправляется в EspSky, а после выполнения файла переключается обратно на uart.
Возможно, включать перенаправление в интернет нужно сразу при подключении и тогда будет стабильнее работать. Несколько активных потоков могут сейчас всё ломать.
Это у меня был конфликт поэтому и не отправлялось.
Она только ждет, когда появится IP адрес от wifi.sta.getip() и как только он появляется – подключается к MQTT.
Думаю, ваша ESP просто помнит последние настройки wifi и подключается автоматом.
Понятно, просто раньше вроде не запоминала.
Как быстрое решение, можно попробовать компилировать скрипты сразу после загрузки и повыбрасывать лишнее из ESPSky.lua
Надо будет покопаться.При первом запуске все работало с моими говноскриптами. Пока эксперементировал, работать перстало в связи с нехваткой памяти. Хотя памяти сколько было, столько и осталось. Иногда эти ESP ведут себя крайне странно. Хотя за ардуинами такое тоже было замечено.
Спасибо за комменты, уж было подумал что совсем никому не интересно
Так то вещь интересная, но объемы оперативной памяти особо разгуляться не позволяют. Постоянно приходится что-то кроить.
 

Shade

New member
но объемы оперативной памяти особо разгуляться не позволяют. Постоянно приходится что-то кроить.
А вы на чем запускаете?
Я сейчас проверил у себя на ESP12F:
– в файловой системе места совсем вагон, куча тестовых скриптов занимают 43кб из 3.3мб
– heap при старте 31кб, после старта EspSky.lua – 29.3кб

т.е. я бы сказал "почти ничего не занимает", хотя в непредсказуемую работу поверю легко :)
 

khseal

New member
– в файловой системе места совсем вагон, куча тестовых скриптов занимают 43кб из 3.3мб
– heap при старте 31кб, после старта EspSky.lua – 29.3кб
Сколько занимаем в файловой системе пофиг. У меня изначально свободно 45360 после запуска EspSky.lua свободно
32120.
Я бы не сказал что это слишком мало =)
 

Andrey12

New member
Заметил если device Token генерируется слишком длинный, его нельзя создать.
Кнопка "Autorun", что должно делать? Я поставил, но при перезагрузке файл не запускается...
 

Shade

New member
Заметил если device Token генерируется слишком длинный, его нельзя создать.
Кнопка "Autorun", что должно делать? Я поставил, но при перезагрузке файл не запускается...
С deviceToken разберусь, мне казалось, что этой проблемы больше нет.

Autorun - запускает файл при подключении ESP к интернету.
Autodownload - Загружает последнюю версию файла из IDE перед запуском.
Чтобы это работало, нужно в init.lua добавить строчку с автоподключением к EspSky:
Посмотрите видео:
 

khseal

New member
Хорошо бы еще добавить функцию переименования файла...
Плюс все таки может лучше сделать автозапуск скриптов локально, без подключения к интернету.
 

Shade

New member
Хорошо бы еще добавить функцию переименования файла...
ок

Плюс все таки может лучше сделать автозапуск скриптов локально, без подключения к интернету.
Как мне кажется, идеологически EspSky не должна решать эту задачу по двум причинам:
  1. Это слишком тонкий момент. Ведь у разных людей в init.lua может быть все что угодно: старт AP точки, сбор показаний сенсоров в течение недели и только потом отправка, и т.п.
  2. По задумке устройство должно быть максимально пассивным в плане запуска, в то время как EspSky решает, нужно ли перед запуском основной логики обновить какие-то файлы и в каком порядке всё запускать. Сейчас интерфейс есть не для всего, но в будущем он появится.


Мой рецепт для автозапуска – иметь следующий init.lua
При старте он пытается выполнить два файла onStartup.lua – прямо при запуске, onConnect.lua – когда появился IP.
Если файлов нет, то ничего страшного не происходит.

Вам остается только создать один или сразу два таких файла и менять их содержимое без риска необходимости перепрошивки устройства в случае ошибок в коде.

Код:
pcall(function() dofile("onStartup.lua") end)

local autorunTimer = tmr.create()

autorunTimer:register(
    1000,
    tmr.ALARM_AUTO,
    function (t)
        if not (wifi.sta.getip()) then
            return;
        end
        autorunTimer:unregister()
        pcall(function() dofile("onConnect.lua") end)
    end)

autorunTimer:start()

pcall(function() require("ESPSky").connect("46.4.26.233", 1883, "YourDeviceKey") end)
 
Последнее редактирование:

khseal

New member
Хорошо, может так и лучше.
Сейчас интерфейс есть не для всего, но в будущем он появится.
Хорошо бы еще прикрутить заливку скриптов с компьютера. Чтобы тупо их не копипастить если они уже написаны локально.
Надо еще как-то файлы привязывать к железкам, а то если кучу файлов закинуть, не понятно, какие, где файлы. Может для каждой железки сделать свои файлы, либо список железок к файлу прикрепить в которые он загружен...
Есть еще фишка, если оперативной памяти мало, он не может загрузить большие файлы с сервера...

Я перебрал свой веб сервер. Вроде памяти стало для всего хватать, но свободный объем памяти уменьшился.
Странно это все :)
 
Последнее редактирование:

Shade

New member
Хорошо, может так и лучше.
Хорошо бы еще прикрутить заливку скриптов с компьютера. Чтобы тупо их не копипастить если они уже написаны локально.
Это пока в низком приоритете.

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

Хорошо, может так и лучше.
Есть еще фишка, если оперативной памяти мало, он не может загрузить большие файлы с сервера...
Да, с большими файлами проблемас :) Нужно будет загрузку через HTTP заменить на потоковую загрузку на голом tcp/ip и это будет победа. Заодно красивый индикатор прогресса можно будет сделать.
 
Сверху Снизу