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

А можно несколько примеров?

Jazz777

New member
Поставил задержку, чтобы отправляло раз в минуту. Так за ночь не зависло (хотя понятно, что операций тут намного меньше и чистым тестом это не считается). Решил двигаться дальше. Подключил батарейку CR2032, попробовал стартануть. Светодиодом стартово моргнуло, на экран выдало:
Подключил к батарейке.jpg
Видимо не тянет. Отсюда вопрос: как выглядит для них батарейка. Понятно, желательно маленький по размерам и бюджетный вариант. Ну и желательно, чтобы хватало хотя бы на год, при условии, что работает в помещении, просыпается раз в час, меряет, отправляет, засыпает..
 

lsm

Разработчик Smart.js
Команда форума
lsm, первоначальная статья немного устарела уже, может имеет смысл сделать новую тему на форуме типа "smart.js - быстрый старт" и там вам собрать все ссылки на прошивки, документацию и т.д. и кратко описать процесс в одном-двух абзацах, чтобы людям не листать много страниц разных тем для выуживания информации, а в этой теме пускай примеры так и остаются.
P.S. спасибо за прошивку!
Здравствуйте Виктор!
Да, это разумно сделать - мы планируем в ближайшие несколько дней добить конфигурационный Web UI, после чего сделаем новую тему.
 

lsm

Разработчик Smart.js
Команда форума
Все работает. Спасибо.

Жду с нетерпением готовый модуль с примером и пояснениями.
В процессе :)

Еще остались 2 момента:
1. То, что ADC больше одного вольта не распознает. Вряд ли так на заводе спроектировали. Проверьте, пожалуйста, на оригинальной прошивке или ещё как, ведь функция для дешевых сенсоров архиважная.
По этому - отпишусь чуть позже.

2. Зависание о котором я утром писал в новой прошивке пофиксили или нет? Заново на тест ставить или вы отдельно отпишитесь?
Это память - объект для HTTP запроса есть память, и если ответ приходит медленно, может накопиться очередь, и несколько таких объектов съедят всю память. Было предложение реализовать таймаут для запросов, и чистить запрос если вышел таймаут.
 

lsm

Разработчик Smart.js
Команда форума
Чем пользуетесь для разработки прошивок, если не секрет?
Александр, уточните что именно имеется ввиду? Если SDK - используем последний OSS.
В качестве сетевого ядра - Мангуст, https://github.com/cesanta/mongoose
В качестве JavaScript рантайма - V7, https://github.com/cesanta/v7
Это вкупе с обертками - сама прошивка Smart.js, https://github.com/cesanta/smart.js

То есть кроме SDK - все свое. И все открыто под GPLv2.
 

Alexander

Member
lsm, я слишком неконкретно сформулировал свой вопрос.
Я имел в виду IDE, если таковая используется.
 

lsm

Разработчик Smart.js
Команда форума
lsm, я слишком неконкретно сформулировал свой вопрос.
Я имел в виду IDE, если таковая используется.
Над прошивкой работает команда, у всех разные окружения: MacOS, Linux (иногда приходится и с Windows работать - для многих разработчиков это основная платформа). IDE никто не использует, только редактор и терминал. Инструменты иногда тоже приходится самим разрабатывать - например мы первыми сделали поддержку GDB backtrace, которую потом Espressif дополнили (ссылки: https://blog.cesanta.com/esp8266-gdb, https://github.com/espressif/esp-gdbstub)
 

rojer

Разработчик Smart.js
Команда форума
1. То, что ADC больше одного вольта не распознает. Вряд ли так на заводе спроектировали. Проверьте, пожалуйста, на оригинальной прошивке или ещё как, ведь функция для дешевых сенсоров архиважная.
ADC у ESP8266 действительно 0 - 1V, 10 бит. надо городить делитель напряжения, на некоторых дев бордах (e.g. nodemcu) он уже есть (см. блок ADC на схеме).
 

lsm

Разработчик Smart.js
Команда форума
@Jazz777 , прилагаю обещанный Web UI!

https://backend.cesanta.com/devel/win_fw_20151210_123223.zip

При старте, модуль поднимает AP вида SMARTJS_XXXXXX где XX заменяются hex числами из МАС адреса.
На 80 порту стартует веб сервер, в котором можно менять настройки.

После сохранения настроек модуль перегружается и подсасывает новые настройки.
Настройки доступны из JS через переменную Sys.conf.
В переменной Sys.ro_vars экспортируются read-only параметры - MAC адрес например.

Система конфигурации состоит из следующих файлов:
conf_sys_defaults.json
conf_app_defaults.json
conf.json (содержит сохраненные настройки, которые отличны от defaults)

Изначально conf_app_defaults.json пустой, но в него можно положить свои настройки, и они отобразятся в Web UI.
Внешний вид отображения можно контролировать файлом
conf_sys_schema.json

Еще момент - веб сервер умеет DAV. То есть можно модуль примонтировать и редактировать там файлы напрямую в своем любимом IDE! На данный момент - экспериментальная вещь, мы пока отлаживаем ее работу.
 

Вложения

Jazz777

New member
прилагаю обещанный Web UI!
Отлично. Всё прошилось и подхватилось с первого раза, без единого глюка и вообще выглядит как вполне серьезный продукт :).
Теперь момент по использованию:
В начале стартует сервер - это гуд, пользователь подключается, вводит данные, сохраняет, перезагружается, ESS подключается к роутеру и начинает передавать данные - это тоже гуд. Но если название сети или пароль на роутере поменялся, как обратно пользователю вызвать сервер? При этом, я так понимаю, мериться данные будут раз в час (ну или что-то типа) и в остальное время ESS спит и сервер не активен. Предлагаю реализовать пробудку и включение режима сервера по какому-нибудь GPIO. Я поставлю в устройство переключалку и подпишу "Настройка" - вроде должно быть удобно..
 
  • Like
Реакции: lsm

lsm

Разработчик Smart.js
Команда форума
Отлично. Всё прошилось и подхватилось с первого раза, без единого глюка и вообще выглядит как вполне серьезный продукт :).
Теперь момент по использованию:
В начале стартует сервер - это гуд, пользователь подключается, вводит данные, сохраняет, перезагружается, ESS подключается к роутеру и начинает передавать данные - это тоже гуд. Но если название сети или пароль на роутере поменялся, как обратно пользователю вызвать сервер?
Если вы не отключили Access Point, то всегда можно доступиться к настройкам через AP режим.
 

Jazz777

New member
Если вы не отключили Access Point, то всегда можно доступиться к настройкам через AP режим.
Это да. Вопрос только в том, что при его использование как датчика от батарейки, он будет спать всё время и сервер будет выключен за ненадобностью в штатном режиме и за экономией питания. Поэтому и нужен настроечный режим.
 

lsm

Разработчик Smart.js
Команда форума
Это да. Вопрос только в том, что при его использование как датчика от батарейки, он будет спать всё время и сервер будет выключен за ненадобностью в штатном режиме и за экономией питания. Поэтому и нужен настроечный режим.
Я наверное тогда не понял use case. Вот как я вижу последовательность:

Модуль прошивается.
В режиме AP через Web UI настраивается режим STA.
Заливается файл app_init.js.
Модуль перегружается.
После чего он спит, и просыпается раз в день, отсылает данные.

Дальше не понял :)
 

Jazz777

New member
1. Прошивается.
2. Заливается файл app_init.js и другие, какие нужно, чтобы всё на сайт отправлялось.
3. К ADC подключается датчик.
4. Всё упаковывается в корпус с батарейкой.
5. Продается и доставляется клиенту в таком виде.
6. Клиент при первом включении попадает в режим АР, задает там пароль доступа к своему роутеру и меняет пароль на доступ к АР.
7. Сохраняется с перезагрузкой и вешает устройство куда ему нужно.
8. ESP работает только в режиме STA, начинает мерить раз в час ADC и передавать на сайт с дальнейшей какой уж нужно обработкой. При этом остальное время ESP спит и экономит батарейку.
9. При рестарте она рестартует по пункту 8, без включения АР. Рестарт, я так понимаю, возможен из-за плохого контракта, резко тряхнули, поменяли батарейку и т.п.
9. Собственно всё. Дальше только регулярная смена батареек. Что они закончились можно будет отследить по отсутствию данных на сайте и выдать предупреждение.
10. Если поменяли пароль на роутере у пользователя должна быть возможность снова включить режим АР. Для этого я предлагаю сделать переключатель, который подтягивает конкретный GPIO к 1, например. В ESP вроде есть просыпание от GPIO. Так вот, если GPIO = 1, проснуться и включить режим АР (и, если рестарт, но GPIO=1, то тоже включать АР и не спать). Пользователь заходит, меняет пароль, перещелкивает тумблер обратно, сохраняется с рестартом. Дальше всё снова по пункту 8.
11. Остается ещё вопрос, если пользователь забыл пароль доступа к АР, который сам же и задал )). Тут нужно предусмотреть стирание файла с настройками (т.е. сброс до дефолтных) при старте с другим GPIO =1 (этот переключатель можно будет просто поглубже спрятать и описать в инструкции).
Вроде всё.
 
  • Like
Реакции: lsm

Jazz777

New member
Вопрос - если AP гасится после настройки, зачем там пароль менять?
Согласен, получается заморочено. За ночь подумал - предлагаю по-другому.
В чем собственно проблема. С одной стороны безопасность, причем лучше придумать один раз нормально - без дырок и дальше везде это использовать. С другой - удобство использования. Желательно без дополнительных переключателей и т.д.
Что такое безопасность в данном случае - единственное, что нужно защищать - это пароль на доступ к роутеру. Датчик может быть размещен и на заводе. У рабочих может быть к нему доступ. Подошли, переключили в режим АР, узнали доступ к запароленному заводскому вайфай. Насколько всё это теоретически - хрен знает, но лучше от этой ситуации сейчас защититься.
Предлагаю тупо отображать этот пароль звездочками в АР. Поменять его можно, а вот просмотреть нельзя. Так мы вроде и безопасность сохраним и заморочек не добавим.
 
  • Like
Реакции: lsm

lsm

Разработчик Smart.js
Команда форума
Предлагаю тупо отображать этот пароль звездочками в АР. Поменять его можно, а вот просмотреть нельзя. Так мы вроде и безопасность сохраним и заморочек не добавим.
Да, это вариант.

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

Еще вариант как можно делать триггер режима настройки - это перезагрузка модуля несколько раз подряд с небольшим интервалом, и отслеживать это RTC таймером.
 

Jazz777

New member
Правда, сейчас веб сервер может показывать и записывать вообще любой файл на модуле - это сделано для DAV, чтобы модуль можно смонтировать как диск и работать с файлами напрямую . Нужно гасить DAV и не показывать файлы.
Ну для функционала это, конечно, гуд, но для данного использования не подойдет. Для моего устройства в АР на страничке настроек (а доступ у пользователя должен быть только туда) должно храниться только название сети и пароль к ней звездочками. Всё. Он больше ничего не сможет и ему больше ничего не нужно.

Еще вариант как можно делать триггер режима настройки - это перезагрузка модуля несколько раз подряд с небольшим интервалом, и отслеживать это RTC таймером.
Тоже думал об этом. Что-то типа включил-выключил-включил-выключил-включил с интервалом примерно секунда и можно обойтись без переключалки. Вроде выглядит удобно и надежно. Тем более, что включатель всё-равно нужно приделывать. Иначе батарейки отдельно придется паковать - а это не лучший вариант. Хорошо, предлагаю за базовый вариант выбрать именно такой способ. Ну с оговоркой, что если сеть и пароль не заданы (т.е. первое включение пользователем), то тоже включаться в режиме АР.

С функционалом определились. Что дальше?
 
Сверху Снизу