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

Lua скрипты и модули

Alanen

New member
Я вот искал как отправлять почту - чисто структуру заголовка. Нашол такой пример на www.esp8266.com

Код:
function gmail(subject,body)
   us
Немного поправил ваш код:

1)
Если прошивка скомпилирована с cripto то можно сделать так (на время тестирования)
Код:
username = crypto.toBase64("mail plain text")
password = crypto.toBase64("pass plain text")
После
Код:
conn:connect(465,"64.233.164.108") 
   end)
- лишний (строка 30 )

Функция
Код:
net.createConnection(net.TCP, 1)
Warning, deprecated API! net.createConnection with secure flag.
вместо неё надо писать
Код:
 conn=tls.createConnection()
А это вот отсыльщик который мне удалось найти на просторах, немного поправил его, но что-то с логином еще надо пошаманить (никак руки не дойдут) может кто-то все-же заставит его работать.

gamiltest.lua :

Код:
 -- Modifications for GMAIL by Andreas "Andy" Reischle: www.AReResearch.net 
 -- http://www.areresearch.net/2016/04/how-to-send-emails-via-gmail-from.html

-- configure ESP as a station 
local SSID = "AP name" 
local SSID_PASSWORD = "AP pass" 


wifi.setmode(wifi.STATION) 
wifi.sta.config{ssid=SSID, pwd=SSID_PASSWORD}
wifi.sta.autoconnect(1) 


-- The email and password from the account you want to send emails from
--If you have Firmware with crypto module 
local MY_EMAIL = crypto.toBase64("mailfrom@gmail.com")
local EMAIL_PASSWORD = crypto.toBase64("mailpass")
--or wo cripto , must be ecoded to base 64 somewere else
--local MY_EMAIL = "base64login"
--local EMAIL_PASSWORD = "base64password"

-- The SMTP server and port of your email provider.
-- If you don't know it google [my email provider] SMTP settings
local SMTP_SERVER = "smtp.gmail.com"
local SMTP_PORT = "465" --local SMTP_PORT = "993" --local SMTP_PORT = "587"

-- The account you want to send email to
local mail_to = "mailfrom@blabla.com"

 -- These are global variables. Don't change their values 
 -- they will be changed in the functions below 
 local email_subject = "" 
 local email_body = "" 
 local count = 0 
 local conn = nil -- will be used as socket to email server 
 -- The display() function will be used to print the SMTP server's response 
 function display(conn,response) 
    print("Got a response: ") 
    print(response) 
 end 
 -- The do_next() function is used to send the SMTP commands to the SMTP server in the required sequence. 
 -- I was going to use socket callbacks but the code would not run callbacks after the first 3. 
 function do_next() 
       if(count == 0)then 
         count = count+1 
         local IP_ADDRESS = wifi.sta.getip() 
         print ("Send my IP: " .. IP_ADDRESS) 
         --conn:send("EHLO\r\n"); 
         conn:send("HELO "..IP_ADDRESS.."\r\n") 
       elseif(count==1) then 
         count = count+1 
         conn:send("AUTH LOGIN\r\n") 
       elseif(count == 2) then 
         count = count + 1 
         conn:send(MY_EMAIL.."\r\n") 
       elseif(count == 3) then 
         conn:send(EMAIL_PASSWORD.."\r\n") 
         count = count + 1 
       elseif(count==4) then 
         count = count+1 
         conn:send("MAIL FROM:<" .. MY_EMAIL .. ">\r\n") 
       elseif(count==5) then 
         count = count+1 
         conn:send("RCPT TO:<" .. mail_to ..">\r\n") 
       elseif(count==6) then 
         count = count+1 
         conn:send("DATA\r\n") 
       elseif(count==7) then 
         count = count+1 
         local message = string.gsub( 
         "From: \"".. MY_EMAIL .."\"<"..MY_EMAIL..">\r\n" .. 
         "To: \"".. mail_to .. "\"<".. mail_to..">\r\n".. 
         "Subject: ".. email_subject .. "\r\n\r\n" .. 
         email_body,"\r\n.\r\n","") 
         conn:send(message.."\r\n.\r\n") 
       elseif(count==8) then 
         count = count+1 
          tmr.stop(0) 
          conn:send("QUIT\r\n") 
       else 
         conn:close() 
       end 
 end 
 -- The connectted() function is executed when the SMTP socket is connected to the SMTP server. 
 -- This function will create a timer to call the do_next function which will send the SMTP commands 
 -- in sequence, one by one, every 5000 seconds.   
 -- You can change the time to be smaller if that works for you, I used 5000ms just because. 
 function connected(conn) 
   print("Connected - Starting Timer") 
   tmr.alarm(0,2000,1,do_next) 
 end 
 -- @name send_email 
 -- @description Will initiated a socket connection to the SMTP server and trigger the connected() function 
 -- @param subject The email's subject 
 -- @param body The email's body 
 function send_email(subject,body) 
    count = 0 
    email_subject = subject 
    email_body = body 
    print ("Open Connection") 
    --conn = net.createConnection(net.TCP,1) 
    conn = tls.createConnection()
    conn:on("connection",connected) 
    conn:on("receive",display) 
    conn:connect(SMTP_PORT,SMTP_SERVER) 
 end 
 -- Send an email 
 print ("Sending started...") 
 send_email("ESP8266-GMailSender","Hi there!")
 

alexch25

New member
У кого-нибудь есть скрипт на lua для датчика напряжения и тока на ina219?
 

Tantrum

New member
Недавно библиотека ds18b20 перекочевала из C modules в Lua modules. Кто знает как с ней теперь работать? Если в наглую пытаться залить файл ds18b20.lua в esp8266, выводится сообщение "недостаточно памяти"
 

LordMazy

New member
посмотрите тут:
Вы, конечно правы но, мне кажется, лучше начинать с начала. И в сборке NodeMCU должна быть поддержка 1-wire. Ошибка, про которую писал Tantrum появляется на дефолтной сборке ESP8266Flasher версии 0.9, так что нужна либо собственная, либо собранная в облаке.
 

LordMazy

New member
Приветствую форумчане, всех с прошедшими праздниками. Выдались длинные выходные и что-бы себя занять запилил два сканера, для шин 1-wire и i2c. Протестировал на ESP-01S - работает, скрипты заливаются через ESPlorer. 1-wire шину проверял с далласовским датчиком температуры DS18B20. i2c шину с LCD дисплеем. Кому интересно скрипты в архиве ;)
 

Вложения

INTRET

New member
Доброго времени всем
До недавних пор работал на сборке 2.2.0-master_20180608 , цели минималистичные и решения соответственные.
Вздумалось прикрутить DSS1306 ну и заодно сборку сменить 3.0.0-release_20210201.
Начал с проверки работоспособности старого кода на новой сборке не добавляя пока модуль 8ug2 и используя только те что исползовались с предыдущей сборкой.
Обнаружилось что таймеры сменились ну да ладно.
Подозрительно стало меньше памяти при одинаковом числе и типе используемых модулей.
Отказывается напрочь работать телнет сервер , при подключении контроллер ре стартует.
Код телнет сервера такой.

Код:
s=net.createServer(net.TCP)
s:listen(23,function(c)
   con_std = c
   function s_output(str)
      if(con_std~=nil)
         then
         con_std:send(" \r")
         con_std:send(str)
      end
   end
   node.output(s_output, 0)
   c:on("receive",function(c,l)
    node.input(l)
   end)
   c:on("disconnection",function(c)
      con_std = nil
      node.output(nil)
   end)
   print(("Connected to Node_T124 build 310321. (%d mem free, %s)"):format(node.heap(), wifi.sta.getip()))
end)
это несколько меньше чем присутствующий в сборке telnet.lua который хоть и работает, но при обращении к ds18b20 вызывает переполнение памяти.
Кроме того даже если б он не вызывал переполнение - текс в хипер терминал он выводит с какой-то непонятной табуляцией примерно так

Код:
                                                                              P1
: OFF
     P2: OFF
            LT: 19
                  HT: 20
                        (16200 mem free, 10.0.1.124)
                                                    19384
                                                         > Boiler Idle
                                                                      GMT: 2021/
04/01 05:58:37
              Uptime: 0395 Sec
                              T124: 99.123400
                                             P1: OFF
                                                    P2: OFF
                                                           LT: 19
                                                                 HT: 20
                                                                       (16200

в то время как приведённый код сервера на старом билде выводит его нормально и работает сколь угодно долго минимум 1час (раз в час делаю рестарт на всякий случай)

Код:
Connected to Node_T123 build 090321. (23896 mem free, 192.168.147.123)
Boiler Idle
GMT: 2021/04/01 10:26:40
Uptime: 0725 Sec
T123: 16.937500
P1: OFF
P2: OFF
LT: 6
HT: 7
(11216 mem free, 192.168.147.123)


В прикреплении весь код поделки.
Пожалуйста, подскажите кто может - что не нравится сборке 3.0.0 в старом коде нет.сервера?
 

Вложения

LordMazy

New member
Вздумалось прикрутить DSS1306 ну и заодно сборку сменить
Ну кто же так делает?
Новая сборка прошивки для проекта - это кладезь подводных камней... Как вариант - откатитесь на стабильную старую прошивку, проверьте DSS1306, а уж потом экскременты с новыми версиями.
УПС, тема притухла, так что Вы, скорее всего, один на один со своими эксперементами.
...
INTRET написал(а):
Отказывается напрочь работать телнет сервер , при подключении контроллер ре стартует.
А на что жалуется перед ребутом, может тут и есть корень проблемы?
 

INTRET

New member
Ну кто же так делает?
Новая сборка прошивки для проекта - это кладезь подводных камней... Как вариант - откатитесь на стабильную старую прошивку, проверьте DSS1306, а уж потом экскременты с новыми версиями.
УПС, тема притухла, так что Вы, скорее всего, один на один со своими эксперементами.
...

А на что жалуется перед ребутом, может тут и есть корень проблемы?

Ну я согласен, просто ожидал что камней этих будет минимум соразмерно с простотой моего проекта.
Также ожидал что если соберу 3.00 с теми же модулями 1 в 1 как в старой 2.2.0 и не меняя пока код протестирую старый и если всё будет нормально тогда начу эксперименты с добавлением дисплея итд...., но до этого дело пока не дошло.
А куда можно перепостить вопрос чтоб не быть тут один на один? кроме того как минимум вы тут уже хороше :)

дело в том что стандартных жалоб как если ошибки в коде таких нет, просто перегружается с козом и бут мод номерами как только я пытаюсь подключиться терминалом на порт 23

Код:
Boiler Idle
GMT: 2021/04/01 13:20:46
Uptime: 0405 Sec
T124: 21.812500
P1: OFF
P2: OFF
LT: 18
HT: 19
(13352 mem free, 10.0.1.124)

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x40100000, len 28252, room 16
tail 12
chksum 0xbc
ho 0 tail 12 room 4
load 0x3ffe8000, len 2568, room 12
tail 12
chksum 0x51
ho 0 tail 12 room 4
load 0x3ffe8a08, len 8, room 12
tail 8
chksum 0xce
csum 0xce
Ћ{ѓ››oд“lЊ�Њ

может я могу собрать прошивку с каким-нибудь включенным дебаг режимом и попробую получить какуюто инфу более подробную с ним?
вот юзер конфиг в котором дебуг опция в 2 выставлена
попробую включить 0 или 1 пересобрать.

// LUAI_OPTIMIZE_DEBUG 0 = Keep all debug; 1 = keep line number info; 2 = remove all debug
#define LUAI_OPTIMIZE_DEBUG 2


со сборкой старого билда 2.2.0 у меня возникли проблемы
исходник старый есть но как его пересобрать с одним дополнительным модулем я не знаю точнее пока не пробовал, пробовал на виртуалке дебиан собирать новый, но мейк затыкается на строке 334:
Пришлось откопать докер контейнер на котором собирал старый билд, но не сохранил его слепок :-(
новый 3.0.0 собираю на этом же докер контейнере, но он обновил билд на 3.0.0 от marcelstoer https://hub.docker.com/r/marcelstoer/nodemcu-build/,
при попытке оттуда же собрать старый исходник ругается
такая котовасия :)
 

Вложения

INTRET

New member
2.2.0 пересобрать отсюда : git clone --branch 2.2.0-master_20180608 --recurse-submodules https://github.com/nodemcu/nodemcu-firmware.git
не удалось
но 2.2.1 kоторый 2.2.0 но с SDK 2.2.1 отсюда: git clone --branch 2.2.1-master_20190405 --recurse-submodules https://github.com/nodemcu/nodemcu-firmware.git
собралось! использован VBox с Debian 10

код маленького телнет сервера приведённого выше , на нем работает.
 

OlegRnD

New member
Уважаемые, подскажите...
В 2017 на продолговатой борде темного цвета с нодемцу на lua (благодаря коду товарища с амперки) сделал поделку, работающую до сих пор по замеру с дс18б20 и дхт22, получение через мктт. Модуль в слое пыли/штукатурки на объекте работает до сих пор, трогать не хочу. После на модуле от вемоса баловался дисплейчиками, пвм, реле - каждый раз генерил новую прошивку от нодемцу и в курсе про изменения в подключении к вайфай и работе с u8gt и т.д.
Короче, понадобилось на этот вемос два дс18б20: взял прошивку 20-го года с ним (стоял крыжик на ds18b20 при генерации прошивки), взял официальный пример (почему-то 2014 года) и получил ошибку вызова read_temp. Не стал вникать, подгрузил файл ds18b20.lua и олдскульный вариант на базе амперки, и... тоже получил уже другую ошибку (что-то про Си). Нашел старую прошивку, залил - все работает. Но есть минус - нужно помнить, что старые команды подключения к вайфай (а у меня там контроль самого вайфая и контроль наличия интернета на 4Г свистке, и пересброс всего этого хозяйства) и если захочу дисплейчики, опять же старые команды u8gt нужно в голове держать.
Вопрос, как на свежих прошивках nodemcu ОБЫЧНЫЕ!!! ds18b20 использовать?
З.Ы. спасибо, что дочитали до конца)
 

OlegRnD

New member
Разобрался, не работало на прошивке из облака сделанной в январе 2019 еще на sdk 2... и с выбранным модулем для ds18b20, причину не понял. На более старой прошивке (sdk 2.0.0) без выбранного модуля и на свежей с sdk 3.0.1 все работает норм, с предварительно загруженным на esp файлом ds18b20.lua.
З.Ы. на последней sdk еще и работа с таймерами несколько изменилась.
 
Сверху Снизу