diff --git a/DeepSleep/Pet_tracker_2/0_cron.lua b/DeepSleep/Pet_tracker_2/0_cron.lua new file mode 100644 index 0000000..172b16e --- /dev/null +++ b/DeepSleep/Pet_tracker_2/0_cron.lua @@ -0,0 +1,49 @@ +-- Petit script pour faire office de crontab pour les mesures +print("\n 0_cron.lua zf200705.2247 \n") + +cron1=tmr.create() +cron1:alarm(15*1000, tmr.ALARM_AUTO, function() + -- if verbose then print("cron1........................") end + -- if verbose then gpio.write(zLED, gpio.LOW) tmr.delay(10000) gpio.write(zLED, gpio.HIGH) end + + + -- rt_launch() + + + -- http_post(influxdb_url,"energy,value=test1_"..yellow_id.." val=1") + + -- http_post(influxdb_url,"energy,memory=cron1_"..yellow_id.." ram="..node.heap()) + + -- if yellow_id == 60 then http_post(influxdb_url,"energy,compteur=3 puissance="..zpower/1000) end + -- if yellow_id == 64 then http_post(influxdb_url,"energy,compteur=4 puissance="..zpower/1000) end + + + if yellow_id == 69 then + local zmes="bolo_ruru,capteur="..node_id.." level="..zlevel + zmes=zmes.."\n".."bolo_ruru,capteur="..node_id.." hauteur="..zlength + http_post(influxdb_url,zmes) + end + + + + + + + -- http_post(influxdb_url,"energy,value=test2_"..yellow_id.." val=2") + -- http_post(influxdb_url,"energy,value=test3_"..yellow_id.." val=3") + -- http_post(influxdb_url,"energy,value=test4_"..yellow_id.." val=4") + + + -- f = "0_zdyndns.lua" if file.exists(f) then dofile(f) end + -- f=nil + + -- if verbose then print("End cron:") end + collectgarbage() + -- if verbose then print(node.heap()) end +end) + + +--[[ +cron1:stop() +cron1:start() +]] diff --git a/DeepSleep/Pet_tracker_2/0_http_post.lua b/DeepSleep/Pet_tracker_2/0_http_post.lua new file mode 100644 index 0000000..7f847bc --- /dev/null +++ b/DeepSleep/Pet_tracker_2/0_http_post.lua @@ -0,0 +1,45 @@ +-- Petit script pour envoyer en // es valeurs sur un serveur WEB (InfluxDB) +-- via un http POST à travers un FIFO + +if verbose then print("\n 0_http_post.lua zf200625.1137 \n") end + +t_zurl={} t_zarg={} f_zpost=false + +-- function tprint(t) +-- for key,value in pairs(t) do print(key, value) end +-- end + +function zpost() + f_zpost=true local zurl=t_zurl[1] local zarg=t_zarg[1] + -- zarg=zarg.."\n".."energy,value=nb_waiting_"..yellow_id.." val="..#t_zurl +-- zarg=zarg.."\n".."energy,memory=zpost_"..yellow_id.." ram="..node.heap() + if verbose then print("zurl: "..zurl) end if verbose then print("zarg: "..zarg) end + http.post(zurl, 'Content-Type: application/x-www-form-urlencoded\r\n', zarg, function(code, data) + if (code < 0) then + print("HTTP request failed") + print("zuzu", code, data) + if debug_rec~=nil then debug_rec("HTTP request failed: ", code, data) end + else + if verbose then print(code, data) end + end + table.remove(t_zurl, 1) table.remove(t_zarg, 1) + if t_zurl[1]==nil then + f_zpost=false + else + zpost() + end + -- if verbose then print("End zpost:") end + collectgarbage() + -- if verbose then print(node.heap()) end + end) +end + +function http_post(zurl,zarg) + if #t_zurl <=10 then table.insert(t_zurl, zurl) table.insert(t_zarg, zarg) end + -- if verbose then print("Nb wait: "..#t_zurl) print(node.heap()) end + -- if verbose then print("t_zurl:") tprint(t_zurl) print("t_zarg:") tprint(t_zarg) end + if f_zpost==false then zpost() end + -- if verbose then print("End http_post:") end + collectgarbage() + -- if verbose then print(node.heap()) end +end diff --git a/DeepSleep/Pet_tracker_2/0_rtelnet1.lua b/DeepSleep/Pet_tracker_2/0_rtelnet1.lua new file mode 100644 index 0000000..f1efa9c --- /dev/null +++ b/DeepSleep/Pet_tracker_2/0_rtelnet1.lua @@ -0,0 +1,148 @@ +-- script telnet pour le socat + +function telnet_listener(socket) + print("\n 0_rtelnet1.lua zf200621.2309 \n") + + -- node, table, tmr, uwrite, tostring = + -- node, table, tmr, uart.write, tostring + + print("................telnet_listener") + -- insert, remove, concat, heap, gc = + -- table.insert, table.remove, table.concat, node.heap, collectgarbage + fifo1, fifo1l, fifo2, fifo2l = {}, 0, {}, 0 + -- local s -- s is a copy of the TCP socket if and only if sending is in progress + + function flushGarbage() + if node.heap() < 13440 then collectgarbage() end + end + + function sendLine() + if not s then return end + + if fifo2l + fifo1l == 0 then -- both FIFOs empty, so clear down s + s = nil + return + end + flushGarbage() + if #fifo2 < 4 then -- Flush FIFO1 into FIFO2 + table.insert(fifo2,table.concat(fifo1)) + fifo2l, fifo1, fifo1l = fifo2l + fifo1l, {}, 0 + end + rec = table.remove(fifo2,1)..(table.remove(fifo2,1) or '') ..(table.remove(fifo2,1) or '') .. (table.remove(fifo2,1) or '') + fifo2l = fifo2l - #rec + flushGarbage() + if srv_rt:getpeer()~=nil then + s:send(rec) + end + end + + local F1_SIZE = 256 + + function queueLine(str) + while #str > 0 do -- this is because str might be longer than the packet size! + k, l = F1_SIZE - fifo1l, #str + if #fifo1 >= 32 or (k < l and k < 16) then + table.insert(fifo2, table.concat(fifo1)) + fifo2l, fifo1, fifo1l, k = fifo2l + fifo1l, {}, 0, F1_SIZE + end + if l > k+16 then -- also tolerate a size overrun of 16 bytes to avoid a split + chunk, str = str:sub(1,k), str:sub(k+1) + else + chunk, str = str, '' + end + table.insert(fifo1, chunk) + fifo1l = fifo1l + #chunk + end + if not s and socket then + s = socket + sendLine() + else + flushGarbage() + end + end + + function receiveLine(s, line) + node.input(line) + end + + function disconnect(_,zerr) + node.output(nil) + gpio.write(zLED, gpio.HIGH) + print("................disconnect") + + if socket~=nil then + -- if http_post~=nil then http_post(influxdb_url,"energy,memory=srv_rt_no_nil_"..yellow_id.." ram="..node.heap()) end + print("................disconnect 2e", socket, socket:getpeer()) + socket:on("connection", nil) + socket:on("reconnection", nil) + socket:on("disconnection", nil) + socket:on("receive", nil) + socket:on("sent", nil) + + socket=nil + end + + -- fifo1, fifo1l, fifo2, fifo2l, s = nil, nil, nil, nil, nil + print("disconnected... "..zerr..", "..node.heap()) + -- if debug_rec~=nil then debug_rec("disconnect, disconnected, "..zerr..", "..node.heap()) end + + + -- node, table, tmr, uwrite, tostring = nil, nil, nil, nil, nil + -- insert, remove, concat, heap, gc = nil, nil, nil, nil, nil + -- fifo1, fifo1l, fifo2, fifo2l = nil, nil, nil, nil + -- rec = nil + -- s = nil + -- socket = nil + -- flushGarbage = nil + -- sendLine = nil + -- queueLine = nil + -- receiveLine = nil + -- zconnection = nil + -- disconnect = nil + -- -- telnet_listener=nil + + + + fifo1, fifo1l, fifo2, fifo2l = nil, nil, nil, nil + rec = nil + k = nil + l = nil + s = nil + chunk = nil + socket = nil + flushGarbage = nil + sendLine = nil + queueLine = nil + receiveLine = nil + zconnection = nil + disconnect = nil + telnet_listener=nil + srv_rt=nil + + + -- collectgarbage() + rt_connect() + end + + --zzz + function zconnection(s) + print("socket: ",socket) + if socket~=nil then + -- if http_post~=nil then http_post(influxdb_url,"energy,memory=srv_rt_no_nil_"..yellow_id.." ram="..node.heap()) end + print(socket:getpeer()) + end + + local zstr="zconnection, Oups, on ne devrait jamais passer par là to NodeMCU world." + print(zstr) if debug_rec~=nil then debug_rec(zstr) end + socket=nil + end + + socket:on("connection", zconnection) + socket:on("receive", receiveLine) + socket:on("disconnection", disconnect) + socket:on("sent", sendLine) + + node.output(queueLine, 0) + -- print(queueLine, 0) +end + diff --git a/DeepSleep/Pet_tracker_2/0_tst5_socat.lua b/DeepSleep/Pet_tracker_2/0_tst5_socat.lua new file mode 100644 index 0000000..0daa852 --- /dev/null +++ b/DeepSleep/Pet_tracker_2/0_tst5_socat.lua @@ -0,0 +1,115 @@ +--[[ +tests connection reverse telnet commande à faire tourner sur le GATEWAY ! + +1ere console +pour une liaison directe: +socat TCP-LISTEN:23064,fork,reuseaddr STDIO +pour une console sur un port: +socat TCP-LISTEN:23043,reuseaddr,fork TCP-LISTEN:23000,reuseaddr,bind=127.0.0.1 + +2e console +telnet -r localhost 23000 +]] + +--[[ +tests connection reverse telnet commande à faire tourner sur le GATEWAY ET sur sa MACHINE ! + +1ere console sur le GATEWAY +socat TCP-LISTEN:23043,reuseaddr,fork TCP-LISTEN:23000,reuseaddr,bind=127.0.0.1 + +2e console sur sa MACHINE +ssh -L 23000:localhost:23000 user@GATEWAY + +3e console sur sa MACHINE (~.return pour sortir !) +telnet -r localhost 23000 +ou sur MAC +telnet -rN localhost 23000 +]] + +print("\n 0_tst5_socat.lua zf200628.1458 \n") + +function rt_connect() + -- print("................rt_connect") + collectgarbage() + local zlaps=tmr.now()/1000000-ztime_connect + -- print("time of retry connect... "..zlaps) + -- if debug_rec~=nil then debug_rec("time of retry connect... "..zlaps..", "..node.heap()) end + if zlaps>1 then + local zstr="trying connect to "..console_host..":"..console_port..", "..node.heap() + -- if debug_rec~=nil then debug_rec(zstr) end + if verbose==verbose then + gpio.write(zLED, gpio.LOW) tmr.delay(10000) gpio.write(zLED, gpio.HIGH) + -- print(zstr) + end + if http_post~=nil then http_post(influxdb_url,"energy,memory=socat_try_con_"..yellow_id.." ram="..node.heap()) end + ztime_connect=tmr.now()/1000000 + + srv_rt=nil + srv_rt = net.createConnection(net.TCP, 0) + + srv_rt:on("connection", function(sck) + print("................connection") + if debug_rec~=nil then debug_rec("rt_connect, srv_rt:on, connected on, "..node.heap()) end + collectgarbage() + -- if verbose then + gpio.write(zLED, gpio.LOW) + print("connected on "..console_host..":"..console_port..", "..node.heap()) + print(node.heap()) + -- end + if http_post~=nil then http_post(influxdb_url,"energy,memory=socat_connected_"..yellow_id.." ram="..node.heap()) end + dofile("0_rtelnet1.lua") + telnet_listener(sck) + print("Welcome to NodeMCU world.") + end) + + srv_rt:on("reconnection", function(sck) + -- print(";;;;;;;;;;;;;;;;reconnection") + srv_rt:on("connection", nil) + srv_rt:on("reconnection", nil) + end) + + -- srv_rt:on("disconnection", function(sck) + -- print(";;;;;;;;;;;;;;;;disconnection") + -- end) + -- + -- srv_rt:on("receive", function(sck) + -- print(";;;;;;;;;;;;;;;;receive") + -- end) + -- + -- srv_rt:on("sent", function(sck) + -- print(";;;;;;;;;;;;;;;;sent") + -- end) + + + srv_rt:connect(console_port,console_host) + else + print("on ne se reconnecte pas vite 1x...") + end + collectgarbage() +end + + + + +function rt_launch() + -- if http_post~=nil then http_post(influxdb_url,"energy,memory=tmr_socat1_"..yellow_id.." ram="..node.heap()) end + if srv_rt~=nil then + -- if http_post~=nil then http_post(influxdb_url,"energy,memory=srv_rt_no_nil_"..yellow_id.." ram="..node.heap()) end + if console_port ~= srv_rt:getpeer() then + rt_connect() + end + else + rt_connect() + end +end + + +tmr_socat1=tmr.create() +tmr_socat1:alarm(20*1000, tmr.ALARM_AUTO , rt_launch) + + +ztime_connect=tmr.now()/1000000-10 + +rt_launch() + +print("Revers telnet server running...\n") diff --git a/DeepSleep/Pet_tracker_2/README.md b/DeepSleep/Pet_tracker_2/README.md new file mode 100644 index 0000000..ba6e000 --- /dev/null +++ b/DeepSleep/Pet_tracker_2/README.md @@ -0,0 +1,163 @@ +# Mesure de hauteur d'eau dans un réservoir + +zf200627.1330 + + + +## Table of Contents +* [Buts](#buts) +* [Astuces de mesures de la distance au moyen du senseur ultrason](#astuces-de-mesures-de-la-distance-au-moyen-du-senseur-ultrason) + * [Schéma](#schéma) + * [Astuces](#astuces) +* [Installation](#installation) +* [Utilisation](#utilisation) + * [Upload Lua code](#upload-lua-code) + * [Secrets pour le projet](#secrets-pour-le-projet) + * [Rename initz.lua pour le boot automatique](#rename-initzlua-pour-le-boot-automatique) + * [Utilisation de la console du NodeMCU en remote](#utilisation-de-la-console-du-nodemcu-en-remote) + * [Visualisation sur Grafana/InfluxDB](#visualisation-sur-grafanainfluxdb) + + +## Buts + +Petit projet pour mesurer la hauteur d'eau dans un réservoir de 100l au moyen d'un senseur à ultrason utilisé pour de la robotique récréative. + +Le but est de mesurer la distance entre le haut du bidon et la surface de l'eau dans le bidon et ainsi pouvoir en déduire le pourcentage de remplissage du bidon. + +![Image](https://raw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/water-level/water-level_ruru_1/img/20200625_163032.jpg) +Senseur à ultrason, très bon marché, permettant de mesurer la distance + + +![Image](https://raw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/water-level/water-level_ruru_1/img/20200625_160818.jpg) +NodeMCU autonome, alimenté ici par une batterie, faisant la lecture de la hauteur d'eau et envoyant le résultat dans une DB InfluxDB via le WIFI + + +![Image](https://raw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/water-level/water-level_ruru_1/img/20200625_164022.jpg) +Banc test dans le jardin pour vérifier le bon fonctionnement du système + +![Image](https://raw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/water-level/water-level_ruru_1/img/grafana2020-06-25.16.54.32.png) +Graphique obtenu lors du banc test avec de l'eau dans le jardin + + +

+On peut voir ici, avec ce projet assez complet, toutes les possibilités offertes de la programmation des NodeMCU en LUA, en mode événementiel.
+Choses qui ne seraient pas possible si on l'avait fait en C++ (mode Arduino), comme par exemple: + +* crontab, horloge pour les mesures +* envoi des données sur la DB InfluxDB +* serveur reverse TELNET, traversant tous les routers sans devoir en modifier la configuration, permettant d'accéder à la console série (USB) du NodeMCU + +Toutes les fonctions sont bien séparées dans des scripts, cela *complexifie* le projet mais ce qui facilite la portabilité entre les projets et aussi sa mise au point. + + + +## Astuces de mesures de la distance au moyen du senseur ultrason + +Dans ce projet il y a 1x NodeMCU qui mesure la hauteur d'eau dans le bidon au moyen d'un senseur à ultrason utilisé pour de la robotique récréative très bon marché, 0.70FS + +https://www.aliexpress.com/item/32477198302.html + +https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf + +Il n'y a pas de *module* NodeMCU pour ce senseur, mais son utilisation en Lua est vraiment très simple, il suffit juste d'envoyer une *pulse* de 10uS sur la pin *trig* et de *connecter* une interruption du NodeMCU sur la pin *echo*.
+Après une simple règle de trois en relation avec la vitesse du son dans l'air et on a la distance en cm. + + +### Schéma + +![Image](https://raw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/water-level/water-level_ruru_1/schemas/schema.png) + +Le schéma est vraiment très simple ! + + +### Astuces + +* La seul problématique dans ce projet c'est que le senseur DOIT absolument être alimenté en 5V et que le NodeMCU lui est en 3.3V.
+Il faut donc lui ajouter une petite résistance, R1, d'adaptation du niveau pour le signal pour l'interruption du NodeMCU. + + +## Installation + +Il faut *flasher* le NodeMCU avec ce firmware: + +https://github.com/zuzu59/NodeMCU_Lua/blob/master/Firmware/nodemcu-master-19-modules-2019-12-31-16-40-12-float.bin + + +Avec ces modules: + +https://github.com/zuzu59/NodeMCU_Lua/blob/master/Firmware/nodemcu-master-19-modules-2019-12-31-16-40-12-float.pdf + + +## Utilisation + +### Upload Lua code +Après avoir *flashé* le NodeMCU avec le bon *firmware* il faut télécharger tous les fichiers \*.lua sur le NodeMCU. + + +### Secrets pour le projet +Mais il faut aussi bien *remplir* et charger sur le NodeMCU, le fichier des secrets du projet: +``` +secrets_project.lua +``` + +ainsi que le fichier des secrets pour le WIFI +``` +secrets_wifi.lua +``` +Tout en sachant que les variables utilisées pour les secrets sont utiles pour: + +* **znode_chipid == nnn then**
+C'est l'id du NodeMCU que chaque NodeMCU ont gravé dans leur mémoire, on peut le lire avec cette commande: +``` +=node.chipid() +``` + +* **node_id = "ttt"**
+C'est le nom de *fonction* du NodeMCU qui sera *visible* dans la DB InfluxDB + +* **yellow_id = nn**
+C'est le *numéro* du NodeMCU que l'on indique sur une *petite étiquette jaune collée* sur le NodeMCU. Ce *numéro* permet par la suite de connaitre très facilement le numéro du *port* utilisé pour le *reverse telnet* quand on veut accéder à la console série du NodeMCU + +* **-- thingspeak_url="http://api.thingspeak.com/update?api_key=kkk"**
+Pas utilisé dans ce projet + +* **influxdb_url="http://uuu:8086/write?db=ddd&u=admin&p=ppp"**
+Secrets utilisés pour envoyer des données sur le DB InfluxDB + +* **console_host = "uuu" console_port = 23000+yellow_id**
+Serveur utilisé pour le *tremplin* du reverse telnet utilisé pour accéder à la console série du NodeMCU au moyen d'un *socat*. L'information d'utilisation se trouve dans le fichier 0_tst5_socat.lua + +* **-- zdyndns_host = "hhh" zdyndns_port = nnn**
+Pas utilisé dans ce projet + + +### Rename initz.lua pour le boot automatique +Ne pas oublier après avoir vérifié que tout fonctionne bien de *renommer* le fichier **initz.lua** en **init.lua** afin que quand le NodeMCU puisse démarrer automatiquement le code et bien fonctionner de manière autonome. + + +### Utilisation de la console du NodeMCU en remote + +Très pratique pour le debug, on peut directement modifier le code source Lua du NodeMCU en remote via un *reverse telnet*. Plus d'info dans le fichier 0_tst5_socat.lua. +On peut aussi modifier le code Lua du NodeMCU en remote avec l'utilitaire *luatools.py* + + +### Visualisation sur Grafana/InfluxDB +![Image](https://raw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/water-level/water-level_ruru_1/img/grafana2020-06-25.16.54.32.png) +Graphique obtenu lors du banc test avec de l'eau dans le jardin + +La totale en détail + +https://github.com/zuzu59/docker-influxdb-grafana + + + + + +pense bête: + +``` +file.open("hello.lua","w+") +file.writeline([[print("hello nodemcu")]]) +file.writeline([[print(node.heap())]]) +file.close() +``` diff --git a/DeepSleep/Pet_tracker_2/_secrets_project.lua_ b/DeepSleep/Pet_tracker_2/_secrets_project.lua_ new file mode 100644 index 0000000..aa77c40 --- /dev/null +++ b/DeepSleep/Pet_tracker_2/_secrets_project.lua_ @@ -0,0 +1,35 @@ +-- Petit script pour configurer les secrets dans ce projet +-- et que l'on n'aimerait pas être exportés sur Internet (github) +-- Il faut donc modifier le .gitignore avec secrets*.lua +-- il faut le renommer en 'secrets_project.lua' et sera exécuté +-- par 'wifi_init.lua' au moment du boot + +function secrets_project() + print("\n secrets_project.lua zf200625.1146 \n") + + zLED=4 zBTN=3 node_id = "generic" + znode_chipid=node.chipid() print("znode_chipid:",znode_chipid) + + if znode_chipid == iii then node_id = "sonoff_1" zLED=7 end + + if znode_chipid == iii then node_id = "sonoff_2" zLED=7 end + + if znode_chipid == iii then + node_id = "level1" + yellow_id = nn + -- thingspeak_url="http://api.thingspeak.com/update?api_key=kkk" + influxdb_url="http://uuu:8086/write?db=ddd&u=admin&p=ppp" + print("influxdb_url: "..influxdb_url) + console_host = "uuu" console_port = 23000+yellow_id + -- zdyndns_host = "hhh" zdyndns_port = nnn + end + + znode_chipid=nil + print("node_id: "..node_id..", console_port: "..console_port) +end +secrets_project() +secrets_project=nil + +--[[ +=node.chipid() +]] diff --git a/DeepSleep/Pet_tracker_2/_secrets_wifi.lua_ b/DeepSleep/Pet_tracker_2/_secrets_wifi.lua_ new file mode 100644 index 0000000..7b67d80 --- /dev/null +++ b/DeepSleep/Pet_tracker_2/_secrets_wifi.lua_ @@ -0,0 +1,18 @@ +-- Petit script pour configurer les secrets utilisés pour le wifi +-- et que l'on n'aimerait pas être exportés sur Internet (github) +-- Il faut donc modifier le .gitignore avec eus_params* et secret* +-- il faut le renommer en 'secrets_wifi.lua' et sera exécuté +-- par 'wifi_init.lua' une fois pour la configuration du WIFI + +function secrets_wifi() + print("\n secrets_wifi.lua zf191222.2002 \n") + f= "eus_params.lua" if file.exists(f) then p = dofile(f) end + if p ~= nil then + cli_ssid = p.wifi_ssid cli_pwd = p.wifi_password p=nil + else + cli_ssid = "" cli_pwd = "" + end + ap_ssid="sss" ap_pwd="ppp" +end + +secrets_wifi() diff --git a/DeepSleep/Pet_tracker_2/_zlocal_cmd.txt b/DeepSleep/Pet_tracker_2/_zlocal_cmd.txt new file mode 100644 index 0000000..47aae1a --- /dev/null +++ b/DeepSleep/Pet_tracker_2/_zlocal_cmd.txt @@ -0,0 +1,79 @@ +zf200621.2337 + +srv_rt:on("connection", nil) + + + + +=node.heap() +rt_connect() + + fifo1, fifo1l, fifo2, fifo2l = nil, nil, nil, nil + rec = nil + k = nil + l = nil + s = nil + chunk = nil + socket = nil + flushGarbage = nil + sendLine = nil + queueLine = nil + receiveLine = nil + zconnection = nil + disconnect = nil + telnet_listener=nil + srv_rt=nil +=node.heap() + + + + + + + + + + +=node.heap() +dofile("0_rtelnet1.lua") +=node.heap() +telnet_listener=nil +=node.heap() +srv_rt=nil +=node.heap() + + + +for k,v in ipairs(debug.getregistry()) do print(k,v) end + + + +node.stripdebug(3) +node.compile('0_tst4_socat.lua') + +print(srv_rt) +print(srv_rt:getpeer()) +srv_rt:close() + +print(socket) +print(socket:getpeer()) +socket:close() + +verbose=true +node.output(nil) + +http_post(influxdb_url,"energy,value=test1_"..yellow_id.." val=1") print("toto",node.heap(),#t_zurl) + + +=srv_rt:getaddr() +tmr_socat1:unregister() +for k,v in pairs(_G) do print(k,v) end + +total_allocated, estimated_used = node.egc.meminfo() +print(total_allocated, estimated_used) + +print(console_port) + +srv_rt = nil collectgarbage() + + diff --git a/DeepSleep/Pet_tracker_2/_zremote_cmd.txt b/DeepSleep/Pet_tracker_2/_zremote_cmd.txt new file mode 100644 index 0000000..d6d2618 --- /dev/null +++ b/DeepSleep/Pet_tracker_2/_zremote_cmd.txt @@ -0,0 +1,301 @@ +# Quelques commandes remote (luatool) à envoyer avec le plugin Atom-IDE-terminal de l'éditeur Atom +# zf200704.2310 + + +Todo à faire pour ce projet ! + +??? + +# si luatool ne marche pas sur le MAC, il faut lire ceci: +# https://docs.google.com/document/d/1q64uK3IMOgEDdKaIAttbYuFt4GuLQ06k3FLeyfCsWLg/edit#heading=h.bmefcu67uwj0 + +# raccourcis clavier +# CTRL+ALT+ENTER envoie au terminal la ligne de l'éditeur +# SHIT+CTRL+` ouvre le terminal (attention, ne pas oublier de copier le *path* dans le *tree* et le changer) +# ALT+CMD+F bascule entre le terminal et l'éditeur + +# définitions à faire AVANT ! +#export luatool_tty="/dev/cu.wchusbserial1410" + +#export zIP="192.168.0.182" +#export zport="23" + +export zIP="localhost" +export zport="23000" + + +# ouvrir et fermer (ALT+N+.) une session telnet sur le NodeMCU avec l'adresse zIP) +telnet -rN $zIP $zport +~. +--node.restart() +collectgarbage() +=node.heap() +for k,v in pairs(_G) do print(k,v) end + + +################################ +# commandes lua pour ce projet # +################################ +# pour les tests en direct sur la gateway +ssh ubuntu@www.zuzu-test.ml +socat TCP-LISTEN:23069,fork,reuseaddr STDIO +################################ +# pour les tests en remote +killall -9 ssh +ssh ubuntu@www.zuzu-test.ml killall -9 socat + +ssh ubuntu@www.zuzu-test.ml socat TCP-LISTEN:23069,reuseaddr,fork TCP-LISTEN:23000,reuseaddr,bind=127.0.0.1 & +# SHIFT+CMD+K SHIFT+CMD+K ALT+CMD+F + +watch -n 1 'ssh ubuntu@www.zuzu-test.ml netstat -nat |grep 230' + +# ALT+CMD+F CTRL+C ALT+CMD+F + +export zIP="localhost" +export zport="23000" + +ssh -N -L 23000:localhost:23000 ubuntu@www.zuzu-test.ml & + +telnet -rN $zIP $zport + +verbose=false +~. + +=node.heap() +verbose=true +node.restart() + +dofile("head.lua") +zhead("0_ultra_son.lua") + +./luatool.py --ip $zIP:$zport -f boot.lua +./luatool.py --ip $zIP:$zport -f 0_get_power.lua +./luatool.py --ip $zIP:$zport -f 0_cron.lua +./luatool.py --ip $zIP:$zport -f 0_http_post.lua +./luatool.py --ip $zIP:$zport -f 0_tst5_socat.lua +./luatool.py --ip $zIP:$zport -f 0_ultra_son.lua + +./luatool.py --ip $zIP:$zport --zrestart + + += node.bootreason() +# https://nodemcu.readthedocs.io/en/master/modules/node/#nodebootreason + +for k,v in pairs(_G) do print(k,v) end +verbose=true +#zdyn + + + + +./luatool.py --ip $zIP:$zport -f api_sonoff.html +http://192.168.0.182 + +./luatool.py --ip $zIP:$zport -f dir.lua + +telnet -rN $zIP $zport +verbose=false +verbose=true +~. + +=node.heap() +collectgarbage() +=node.heap() + + +dofile("dir.lua") +dir() +for k,v in pairs(_G) do print(k,v) end +dofile("wifi_info.lua") + +node.restart() + +~. +./luatool.py --ip $zIP:$zport -f head.lua +telnet -rN $zIP $zport +dofile("head.lua") +zhead("boot.lua") + + + +verbose=true +verbose=false +zsort_rssi() zshow() + + +#commandes luatool pour ce projet le .137 est à jour avec la nouvelle version du wifi ! +~. +./luatool.py --ip $zIP:$zport -l +./luatool.py --ip $zIP:$zport -f wifi_init.lua + + +./luatool.py --ip $zIP:$zport -f secrets_wifi.lua +./luatool.py --ip $zIP:$zport -f initz.lua -t init.lua +./luatool.py --ip $zIP:$zport -f boot.lua +./luatool.py --ip $zIP:$zport -f boot2.lua +./luatool.py --ip $zIP:$zport -f wifi_init.lua +./luatool.py --ip $zIP:$zport -f set_time.lua +./luatool.py --ip $zIP:$zport -f wifi_info.lua +./luatool.py --ip $zIP:$zport -f c.lua +./luatool.py --ip $zIP:$zport -f cat.lua +./luatool.py --ip $zIP:$zport -f flash_led_xfois.lua +./luatool.py --ip $zIP:$zport -f head.lua + +./luatool.py --ip $zIP:$zport -f b.lua +./luatool.py --ip $zIP:$zport -f web_srv2.lua +./luatool.py --ip $zIP:$zport -f z_index.html + + +./luatool.py --ip $zIP:$zport -f wifi_get_conf.html +./luatool.py --ip $zIP:$zport -f wifi_set_conf.html + + +./luatool.py --ip $zIP:$zport -f z_page1.html +./luatool.py --ip $zIP:$zport -f z_page2.html +./luatool.py --ip $zIP:$zport -f z_page3.html +./luatool.py --ip $zIP:$zport -f z_page4.html + +./luatool.py --ip $zIP:$zport --delete wifi_ap_start.lua +./luatool.py --ip $zIP:$zport --delete wifi_cli_conf.lua +./luatool.py --ip $zIP:$zport --delete wifi_cli_start.lua +./luatool.py --ip $zIP:$zport --delete dir.lua +./luatool.py --ip $zIP:$zport --delete initz.lua +./luatool.py --ip $zIP:$zport --delete wifi_conf.lua + + + +dofile("wifi_info.lua") +--node.restart() +for k,v in pairs(_G) do print(k,v) end +t=12 +t=nil +print(pcall(function () print("2"..t) end)) + + + +# ici c'est maintenant ;-) +~. +./luatool.py --ip $zIP:$zport -f b.lua +#./luatool.py --ip $zIP:$zport --zrestart +telnet -rN $zIP $zport +zsort_rssi() zshow() +print(ztrig_rssi) +ztrig_rssi=-1000 +ztrig_rssi=-90 + + + +# test de la gestion des erreurs +~. +./luatool.py --ip $zIP:$zport -f c.lua +#./luatool.py --ip $zIP:$zport --zrestart +telnet -rN $zIP $zport +status, err = pcall(function () dofile("c.lua") end) if status==false then print("Error: ",err) end +zerr=nil +zerr=1 +ztmr_tst_err:unregister() + + + + +ztmr_tst_err:unregister() +for k,v in pairs(_G) do print(k,v) end + +./luatool.py --ip $zIP --zrestart + + +# faire un cat d'un fichier sur le NodeMCU +dofile("cat.lua") +cat("boot2.lua") + + +# commandes luatool +./luatool.py -h +./luatool.py --ip $zIP:$zport -i +./luatool.py --ip $zIP:$zport -l +./luatool.py --ip $zIP:$zport -f toto.lua -d +./luatool.py --ip $zIP:$zport --delete toto.lua + + + +**************************************************************************** + + +# création des tunnels ssh +ATTENTION: dans un premier terminal ! +Pour Bolo à Ruchonnet: +ssh -t -L 2323:localhost:2323 ubuntu@www.zuzu-test.ml ssh -N -L 2323:192.168.8.102:23 ubuntu@localhost -p 20223 + +Pour le Crêt +ssh -N -L 2323:192.168.0.137:23 admin@z.zufferey.com -p 1822 +ssh -N -L 2323:192.168.0.122:23 admin@z.zufferey.com -p 1822 +ssh -N -L 2323:192.168.0.118:23 admin@z.zufferey.com -p 1822 + +ATTENTION: dans un deuxième terminal ! +export zIP="localhost" +export zport="2323" +telnet -rN $zIP $zport +~. +=node.heap() + +verbose=false +verbose=true + +dofile("dir2.lua") +dir() +filec("head.lua") + +dofile("head.lua") +zhead("dir2.lua") + +dofile("cat.lua") +cat("head.lua") + +~. +--node.restart() +=node.heap() + + +status, err = pcall(function () fonction_a_tester() end) if status==false then print("Error: ",err) end +status, err = pcall(function () toto() end) if status==false then print("Error: ",err) end + + + +Gestion de la passerelle SSH reverse +Puis depuis une autre console on peut faire directement pour aller sur l'OpiZ (ici le 20223): +ssh -t ubuntu@www.zuzu-test.ml ssh ubuntu@localhost -p 20223 + +ou + +1ère console +On établit le tunnel local avec l'OpiZ +ssh -N -L 20223:localhost:20223 ubuntu@www.zuzu-test.ml + + +2ème console, on utilise le tunnel OpiZ en local sur sa machine +pour aller sur l'OpiZ +ssh ubuntu@localhost -p 20223 + +pour copier sa clef SSH depuis un MAC +./ssh-copy-id -i ~/.ssh/id_rsa.pub 'ubuntu@localhost -p 20223' +après on devrait pouvoir se connecter sans devoir entrer son password à chaque fois +ssh ubuntu@localhost -p 20223 + +ou, on établit un tunnel pour telnet sur un NodeMCU +ssh -L 2323:192.168.0.137:23 ubuntu@localhost -p 20223 +puis +telnet -rN localhost 2323 + +ou, on établit un tunnel pour le rpimonotor sur l'OpiZ +ssh -N -L 8888:192.168.0.113:8888 ubuntu@localhost -p 20223 +puis +http://localhost:8888 + +ou, on établit un tunnel proxy Socket 5 pour le modem 4G HUAWEI sur l'OpiZ +ssh -N -D 8080 ubuntu@localhost -p 20223 +puis depuis le browser FireFox avec le plugin FoxyProxy Socket 5 sur localhost port 8080 +http://192.168.8.1 + + + +. diff --git a/DeepSleep/Pet_tracker_2/a.lua b/DeepSleep/Pet_tracker_2/a.lua new file mode 100644 index 0000000..2e94a02 --- /dev/null +++ b/DeepSleep/Pet_tracker_2/a.lua @@ -0,0 +1,40 @@ +-- Scripts pour tester l'écoute des AP WIFI + +print("\n a.lua zf181211.0016 \n") + +--f= "wifi_ap_stop.lua" if file.exists(f) then dofile(f) end +--f= "wifi_cli_conf.lua" if file.exists(f) then dofile(f) end +--f= "wifi_cli_start.lua" if file.exists(f) then dofile(f) end +--f= "telnet_srv.lua" if file.exists(f) then dofile(f) end +--f= "web_ide2.lua" if file.exists(f) then dofile(f) end +--f= "dsleep.lua" if file.exists(f) then dofile(f) end + + +-- print AP list in new format +function a() + ztime() + function listap(t) + print("") + for k,v in pairs(t) do + print(k.." : "..v) + end + print("") + end + wifi.sta.getap(1, listap) +end + +--a() + +--[[ +-- Print AP list that is easier to read +function listap(t) -- (SSID : Authmode, RSSI, BSSID, Channel) + print("\n\t\t\tSSID\t\t\t\t\tBSSID\t\t\t RSSI\t\tAUTHMODE\t\tCHANNEL") + for bssid,v in pairs(t) do + local ssid, rssi, authmode, channel = string.match(v, "([^,]+),([^,]+),([^,]+),([^,]*)") + print(string.format("%32s",ssid).."\t"..bssid.."\t "..rssi.."\t\t"..authmode.."\t\t\t"..channel) + end +end +wifi.sta.getap(1, listap) + + +]] diff --git a/DeepSleep/Pet_tracker_2/a_test_power_wifi.lua b/DeepSleep/Pet_tracker_2/a_test_power_wifi.lua new file mode 100644 index 0000000..a1a9a81 --- /dev/null +++ b/DeepSleep/Pet_tracker_2/a_test_power_wifi.lua @@ -0,0 +1,57 @@ +-- Scripts pour tester la consommation des différents mode du WIFI + +print("\n a_test_power_wifi zf181209.1718 \n") + +f= "wifi_ap_stop.lua" if file.exists(f) then dofile(f) end +f= "wifi_cli_conf.lua" if file.exists(f) then dofile(f) end +f= "wifi_cli_start.lua" if file.exists(f) then dofile(f) end +--f= "telnet_srv.lua" if file.exists(f) then dofile(f) end +--f= "web_ide2.lua" if file.exists(f) then dofile(f) end +--f= "dsleep.lua" if file.exists(f) then dofile(f) end + + +print("mode physique: ", wifi.getphymode()) +print("defaut mode: ", wifi.getdefaultmode()) +print("wifi stat status: ", wifi.sta.status()) + + +-- print AP list in old format (format not defined) +function listap(t) + for k,v in pairs(t) do + print(k.." : "..v) + end +end +wifi.sta.getap(listap) + +-- Print AP list that is easier to read +function listap(t) -- (SSID : Authmode, RSSI, BSSID, Channel) + print("\n"..string.format("%32s","SSID").."\tBSSID\t\t\t\t RSSI\t\tAUTHMODE\tCHANNEL") + for ssid,v in pairs(t) do + local authmode, rssi, bssid, channel = string.match(v, "([^,]+),([^,]+),([^,]+),([^,]+)") + print(string.format("%32s",ssid).."\t"..bssid.."\t "..rssi.."\t\t"..authmode.."\t\t\t"..channel) + end +end +wifi.sta.getap(listap) + + + + +-- print AP list in new format +function listap(t) + for k,v in pairs(t) do + print(k.." : "..v) + end +end +wifi.sta.getap(1, listap) + +-- Print AP list that is easier to read +function listap(t) -- (SSID : Authmode, RSSI, BSSID, Channel) + print("\n\t\t\tSSID\t\t\t\t\tBSSID\t\t\t RSSI\t\tAUTHMODE\t\tCHANNEL") + for bssid,v in pairs(t) do + local ssid, rssi, authmode, channel = string.match(v, "([^,]+),([^,]+),([^,]+),([^,]*)") + print(string.format("%32s",ssid).."\t"..bssid.."\t "..rssi.."\t\t"..authmode.."\t\t\t"..channel) + end +end +wifi.sta.getap(1, listap) + + diff --git a/DeepSleep/Pet_tracker_2/boot.lua b/DeepSleep/Pet_tracker_2/boot.lua new file mode 100644 index 0000000..f3f6149 --- /dev/null +++ b/DeepSleep/Pet_tracker_2/boot.lua @@ -0,0 +1,65 @@ +-- Scripts à charger après le boot pour démarrer son projet + +function boot() + print("\n boot.lua zf200720.1828 \n") + print("On lance le boot...") + collectgarbage() print(node.heap()) + local f + -- f = "0_http_post.lua" if file.exists(f) then dofile(f) end + -- collectgarbage() print(node.heap()) + + -- local _, boot_reason = node.bootreason() + -- zarg_boot= "energy,memory=boot_"..yellow_id.." ram="..node.heap().."\n" + -- zarg_boot=zarg_boot.."energy,value=boot_reason_"..yellow_id.." val="..boot_reason + -- http_post(influxdb_url,zarg_boot) + + -- f = "0_zdyndns.lua" if file.exists(f) then dofile(f) end + -- print(node.heap()) collectgarbage() print(node.heap()) + + -- f="0_btn_flipflop.lua" if file.exists(f) then dofile(f) end + -- collectgarbage() print(node.heap()) + + -- f="0_ultra_son.lua" if file.exists(f) then dofile(f) end + -- collectgarbage() print(node.heap()) + + -- f="0_cron.lua" if file.exists(f) then dofile(f) end + -- collectgarbage() print(node.heap()) + + verbose = true + print("verbose: ",verbose,"\nle boot est lancé...") + gpio.write(zLED, gpio.HIGH) + f=nil boot=nil +end + +-- function debug_rec(zdebug) +-- local sec, usec = rtctime.get() local tm = rtctime.epoch2cal(sec + 2*3600) +-- local ztm = string.format("%04d/%02d/%02d %02d:%02d:%02d", tm["year"], tm["mon"], tm["day"], tm["hour"], tm["min"], tm["sec"]) +-- file.open("00_debug.txt", "a+") file.writeline(ztm.."."..usec..", "..zdebug) file.close() +-- end +-- +-- function rec_boot() +-- sntp.sync(nil, nil, nil, 1) +-- tmr_rec_boot1=tmr.create() +-- tmr_rec_boot1:alarm(1*1000, tmr.ALARM_AUTO, function() +-- print("beep...") +-- if rtctime.get() > 0 then +-- tmr_rec_boot1:unregister() +-- print("Voilà on à l'heure, on peut enregistrer la raison du boot...") +-- local _, zboot_reason, zboot_detail = node.bootreason() +-- debug_rec("boot reason: "..zboot_reason) +-- tmr_rec_boot1=nil rec_boot=nil +-- collectgarbage() print(node.heap()) +-- end +-- end) +-- end + +verbose=true +if rec_boot~=nil then rec_boot() end +boot() +collectgarbage() print(node.heap()) + + +--[[ +verbose = true +verbose = false +]] diff --git a/DeepSleep/Pet_tracker_2/cat.lua b/DeepSleep/Pet_tracker_2/cat.lua new file mode 100644 index 0000000..856a52d --- /dev/null +++ b/DeepSleep/Pet_tracker_2/cat.lua @@ -0,0 +1,18 @@ +-- fonction cat() pour afficher le contenu d'un fichier dans la flash +print("\n cat.lua zf192026.0858 \n") + +function cat(zfile) + print("\n"..zfile.."\n-------------------------------") + + zfilei = file.open(zfile, "r") + i=1 + zline=file.readline() + repeat +-- print(i..": "..string.sub(zline,1,string.len(zline)-1)) + print(string.sub(zline,1,string.len(zline)-1)) + i=i+1 zline=file.readline() + until zline== nil + file.close(zfilei) + + print("-------------------------------") +end diff --git a/DeepSleep/Pet_tracker_2/dir.lua b/DeepSleep/Pet_tracker_2/dir.lua new file mode 100644 index 0000000..86a73d1 --- /dev/null +++ b/DeepSleep/Pet_tracker_2/dir.lua @@ -0,0 +1,31 @@ +-- fonction dir() pour juste afficher les fichiers avec leur taille + +print("\n dir.lua zf191223.1455 \n") + +function dir() + local zdir={} + local pfile = file.list() + for k,v in pairs(pfile) do + zdir[#zdir+1] = k..string.rep(" ",24-string.len(k)).." : "..v + end + table.sort(zdir) for i=1, #zdir do print(zdir[i]) end + size_file=nil chksum_file=nil k=nil +end + +dir() +print("\nusage:") +print(" dir()") + +--[[ +dir() +dirc() +filec("dir2.lua") + +=node.heap() +clear_dir() +=node.heap() + +for k,v in pairs(_G) do print(k,v) end + +status, err = pcall(function () print(zhash("il était une fois trois petits cochons roses...")) end) if status==false then print("Error: ",err) end +]] diff --git a/DeepSleep/Pet_tracker_2/dir3.lua b/DeepSleep/Pet_tracker_2/dir3.lua new file mode 100644 index 0000000..1dd61ea --- /dev/null +++ b/DeepSleep/Pet_tracker_2/dir3.lua @@ -0,0 +1,52 @@ +-- fonction dir_vers() pour afficher toutes les versions de tous les fichiers *.lua sur le NodeMCU ! +-- fonction filec(fichier) pour afficher la version d'un seul fichiers sur le NodeMCU ! + +function dir3() + + print("\n 0_dir3.lua zf200611.1714 \n") + + function file_vers(name_file) + local z="" + if string.find(name_file,"%.lua") then + z=name_file..":" + -- print("fichier: "..name_file) + local f,i1,i2,j1,j2,k,t = f,i1,i2,j1,j2,k,t + f = file.open(name_file, "r") + while true do + local t = f:readline() if t == nil then break end + -- recherche de l'entête de version [print("\n ] + -- ATTENTION, il faut échapper la '(' avec un % et convertir le '\' en char(92) + k='print%("'..string.char(92)..'n ' + i1,j1 = string.find(t,k) + if i1 ~= nil then + k=string.char(92)..'n"%)' + i2,j2 = string.find(t,k,j1) + z=name_file..": "..string.sub(t,j1+1,i2-2) + break + end + end + f:close() + uart.write(0,".") + end + return z + end + + zdir={} list_files={} + local k,v = k,v local pfile = file.list() + for k,v in pairs(pfile) do + zdir[#zdir+1] = file_vers(k) + end + table.sort(zdir) for i=1, #zdir do print(zdir[i]) end + + dir_vers=nil file_vers=nil list_files=nil zdir=nil + dir3=nil + +end +dir3() + +--[[ + +status, err = pcall(function () print(zhash("il était une fois trois petits cochons roses...")) end) if status==false then print("Error: ",err) end + +]] + diff --git a/DeepSleep/Pet_tracker_2/dsleep.lua b/DeepSleep/Pet_tracker_2/dsleep.lua new file mode 100644 index 0000000..14453b3 --- /dev/null +++ b/DeepSleep/Pet_tracker_2/dsleep.lua @@ -0,0 +1,64 @@ +-- Teste le deep sleep ! +-- s'endore pendant xx secondes après xx secondes + +-- ATTENTION: il faut connecter la pin 0 à la pin RESET avec une résistance de 1k ! + +print("\n dsleep.lua zf181211.0018 \n") + +f= "flash_led_xfois.lua" if file.exists(f) then dofile(f) end + +function dsleep_on() + print("timer dsleep on...") + ztmr_SLEEP = tmr.create() + tmr.alarm(ztmr_SLEEP, 10*1000, tmr.ALARM_SINGLE, function () + print("Je dors...") + tmr.delay(100*1000) +-- node.dsleep(4*1000*1000) + rtctime.dsleep(30*1000*1000) + end) +end + +function dsleep_off() + print("timer dsleep off...") + tmr.unregister(ztmr_SLEEP) +end + +function watch_wifi_on() + dsleep_on() + ztmr_watch_wifi_on=tmr.create() + tmr.alarm(ztmr_watch_wifi_on, 1000, tmr.ALARM_AUTO , function() + if wifi.sta.getip() == nil then +-- print("Unconnected... (on)") + else + tmr.stop(ztmr_watch_wifi_on) + print("Connected... (on)") +-- f= "wifi_info.lua" if file.exists(f) then dofile(f) end + watch_wifi_off() + end + end) +end + +function watch_wifi_off() + dsleep_off() + tmr.unregister(ztmr_watch_wifi_on) + ztmr_watch_wifi_off=tmr.create() + tmr.alarm(ztmr_watch_wifi_off, 1000, tmr.ALARM_AUTO , function() + if wifi.sta.getip() == nil then + tmr.stop(ztmr_watch_wifi_off) + print("Unconnected... (off)") + watch_wifi_on() + tmr.unregister(ztmr_watch_wifi_off) + else +-- print("Connected... (off)") + xfois =2 + blink_LED () + end + end) +end + +print("Coucou, je suis réveillé...") +print("Et il est: ") +ztime() + +watch_wifi_on() + diff --git a/DeepSleep/Pet_tracker_2/head.lua b/DeepSleep/Pet_tracker_2/head.lua new file mode 100644 index 0000000..0478b8c --- /dev/null +++ b/DeepSleep/Pet_tracker_2/head.lua @@ -0,0 +1,19 @@ +-- fonction cat() pour afficher les 10 premières lignes d'un fichier dans la flash +print("\n head.lua zf192028.1516 \n") + +function zhead(zfile) + print("\n"..zfile.."\n-------------------------------") + + zfilei = file.open(zfile, "r") + i=1 + zline=file.readline() + repeat +-- print(i..": "..string.sub(zline,1,string.len(zline)-1)) + print(string.sub(zline,1,string.len(zline)-1)) + i=i+1 zline=file.readline() + if i>10 then break end + until zline==nil + file.close(zfilei) + + print("-------------------------------") +end diff --git a/DeepSleep/Pet_tracker_2/initz.lua b/DeepSleep/Pet_tracker_2/initz.lua new file mode 100644 index 0000000..1e30574 --- /dev/null +++ b/DeepSleep/Pet_tracker_2/initz.lua @@ -0,0 +1,86 @@ +--Script de bootstrap, test au moment du boot qui a été la cause de boot. +-- Si la cause est un power on ou une connexion depuis l'IDE, alors +-- le script repair.lua pendant xx secondes avant de continuer +--Source: https://nodemcu.readthedocs.io/en/master/en/modules/node/#nodebootreason + +print("\n init.lua zf200612.1632 \n") + +verbose = true + +function initz() + + function initz_end() + print("initz_end...") + f= "wifi_init.lua" if file.exists(f) then dofile(f) end + f=nil initz=nil second_chance=nil hvbouton=nil initz_end=nil + print(node.heap()) collectgarbage() print(node.heap()) + print("initz_end out...") + end + + function hvbouton() + gpio.trig(zswitch, "none") zswitch=nil + print("hvbouton...") + print(tmr.now()) + if tmr.now() > 5000000 then + file.putcontents("_setup_wifi_", "toto") + print("on a demandé le setup wifi !") + end + initalarme1:unregister() initalarme1=nil second_chance=nil + gpio.write(zLED, gpio.HIGH) zLED=nil + reset_reason="hvbouton" + initz_end() + end + + function second_chance() + print("seconde chance...") + zLED=4 -- NodeMCU + --zLED=7 -- SonOff + gpio.write(zLED, gpio.LOW) gpio.mode(zLED, gpio.OUTPUT) + initalarme1=tmr.create() + initalarme1:alarm(10*1000, tmr.ALARM_SINGLE, function() + gpio.write(zLED, gpio.HIGH) zLED=nil + gpio.trig(zswitch, "none") zswitch=nil + reset_reason="seconde_chance" + initz_end() + end) + zswitch=3 --switch flash ou SonOff + gpio.mode(zswitch, gpio.INT, gpio.PULLUP) + gpio.trig(zswitch, "both", hvbouton) + end + + _, reset_reason = node.bootreason() + print("reset_reason: ",reset_reason) + if reset_reason == 0 then + print("power on") + second_chance() + elseif reset_reason == 4 then + print("node.restart") + initz_end() + elseif reset_reason == 5 then + print("dsleep wake up") + initz_end() + elseif reset_reason == 6 then + print("external reset") + second_chance() + else + print("autre raison") + second_chance() + end +end +initz() + +--[[ +zLED=7 +gpio.mode(zLED, gpio.OUTPUT) +gpio.write(zLED, gpio.LOW) -- actif ! +gpio.write(zLED, gpio.HIGH) + +zBTN=3 +gpio.mode(zBTN, gpio.INPUT) +print(gpio.read(zBTN)) + +zRELAY=6 +gpio.mode(zRELAY, gpio.OUTPUT) +gpio.write(zRELAY, gpio.HIGH) -- actif ! +gpio.write(zRELAY, gpio.LOW) +]] diff --git a/DeepSleep/Pet_tracker_2/luatool.py b/DeepSleep/Pet_tracker_2/luatool.py new file mode 100755 index 0000000..29e183f --- /dev/null +++ b/DeepSleep/Pet_tracker_2/luatool.py @@ -0,0 +1,408 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +version = "0.6.8 zf191225.1428" + +print("luatool.py ver " + version) + +#Améliorations +# Pour voir les améliorations il faut 'chercher' les zzz + + +# +# ESP8266 luatool +# Author e-mail: 4ref0nt@gmail.com +# Site: http://esp8266.ru +# Contributions from: https://github.com/sej7278 +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 51 Franklin +# Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import sys +import serial +from time import sleep +import socket +import argparse +from os.path import basename + + +tqdm_installed = True +try: + from tqdm import tqdm +except ImportError, e: + if e.message == 'No module named tqdm': + tqdm_installed = False + else: + raise + + + +class TransportError(Exception): + """Custom exception to represent errors with a transport + """ + def __init__(self, message): + self.message = message + + def __str__(self): + return self.message + +class AbstractTransport: + def __init__(self): + raise NotImplementedError('abstract transports cannot be instantiated.') + + def close(self): + raise NotImplementedError('Function not implemented') + + def read(self, length): + raise NotImplementedError('Function not implemented') + + def writeln(self, data, check=1): + raise NotImplementedError('Function not implemented') + + def writer(self, data): + ##zzz191124 enlève la fin de ligne afin de ne pas perturber la vérification finale + data = data.rstrip('\r\n') + self.writeln("file.writeline([==[" + data + "]==])\r") + + def performcheck(self, expected): + line = '' + char = '' + i = -1 + while char != chr(62): # '>' + char = self.read(1) + if char == '': + raise Exception('No proper answer from MCU') + if char == chr(13) or char == chr(10): # LF or CR + if line != '': + #zzz191124 line = line.strip() + # zzz191021 Affiche ce que l'on a reçu du NodeMCU + if args.verbose: + print("\n\nzread0957: {" + line + "\n}\n") + + if line+'\r' == expected and not args.bar: + sys.stdout.write(" -> ok") + elif line+'\r' != expected: + if line[:4] == "lua:": + sys.stdout.write("\r\n\r\nLua ERROR: %s" % line) + raise Exception('ERROR from Lua interpreter\r\n\r\n') + else: + expected = expected.split("\r")[0] + sys.stdout.write("\r\n\r\nERROR") + sys.stdout.write("\r\n send string : '%s'" % expected) + sys.stdout.write("\r\n expected echo : '%s'" % expected) + sys.stdout.write("\r\n but got answer : '%s'" % line) + sys.stdout.write("\r\n\r\n") + raise Exception('Error sending data to MCU\r\n\r\n') + line = '' + else: + line += char + if char == chr(62) and expected[i] == char: + char = '' + i += 1 + + +class SerialTransport(AbstractTransport): + def __init__(self, port, baud, delay): + self.port = port + self.baud = baud + self.serial = None + self.delay = delay + + try: + self.serial = serial.Serial(port, baud) + except serial.SerialException as e: + raise TransportError(e.strerror) + + self.serial.timeout = 3 + self.serial.interCharTimeout = 3 + + # zzz191021 juste après l'ouverture du port série, on attend le caractère '>' + line = '' + char = '' + i = -1 + while char != chr(62): # '>' + char = self.read(1) + if char == '': + raise Exception('No proper answer from MCU') + line += char + i += 1 + if args.verbose: + print("line: ." + line + ".") + + + def writeln(self, data, check=1): + # zzz191020 on fait une petite pause avant l'envoi de chaque ligne + sleep(self.delay) + if self.serial.inWaiting() > 0: + self.serial.flushInput() + if len(data) > 0 and not args.bar: + sys.stdout.write("\r\n->") + sys.stdout.write(data.split("\r")[0]) + ##zzz191124 attend encore un petit peu avant d'envoyer + sleep(self.delay) + self.serial.write(data) + sleep(self.delay) + # zzz191021 Affiche ce que l'on a envoyé au NodeMCU + if args.verbose: + print("\n\nzwrite0952: {" + data + "\n}\n") + if check > 0: + self.performcheck(data) + elif not args.bar: + sys.stdout.write(" -> send without check") + + def read(self, length): + return self.serial.read(length) + + def close(self): + self.serial.flush() + self.serial.close() + + +class TcpSocketTransport(AbstractTransport): + def __init__(self, host, port): + self.host = host + self.port = port + self.socket = None + + try: + self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + except socket.error as e: + raise TransportError(e.strerror) + + try: + self.socket.connect((host, port)) + except socket.error as e: + raise TransportError(e.strerror) + # read intro from telnet server (see telnet_srv.lua) + self.socket.recv(50) + + def writeln(self, data, check=1): + if len(data) > 0 and not args.bar: + sys.stdout.write("\r\n->") + sys.stdout.write(data.split("\r")[0]) + self.socket.sendall(data) + if check > 0: + self.performcheck(data) + elif not args.bar: + sys.stdout.write(" -> send without check") + + def read(self, length): + return self.socket.recv(length) + + def close(self): + self.socket.close() + + +def decidetransport(cliargs): + if cliargs.ip: + data = cliargs.ip.split(':') + host = data[0] + if len(data) == 2: + port = int(data[1]) + else: + port = 23 + return TcpSocketTransport(host, port) + else: + return SerialTransport(cliargs.port, cliargs.baud, cliargs.delay) + + +if __name__ == '__main__': + # parse arguments or use defaults + parser = argparse.ArgumentParser(description='ESP8266 Lua script uploader.') + parser.add_argument('--bar', action='store_true', help='Show a progress bar for uploads instead of printing each line') + parser.add_argument('--delay', default=0.025, help='Delay in seconds between each write, default 0.03 sec.', type=float) + parser.add_argument('--delete', default=None, help='Delete a lua/lc file from device.') + parser.add_argument('--ip', default=None, help='Connect via telnet server (--ip IP[:port])') + parser.add_argument('--zrestart', action='store_true', help='Restart the NodeMCU.') + parser.add_argument('-a', '--append', action='store_true', help='Append source file to destination file.') + parser.add_argument('-b', '--baud', default=115200, help='Baudrate, default 115200') + parser.add_argument('-c', '--compile', action='store_true', help='Compile lua to lc after upload') + parser.add_argument('-d', '--dofile', action='store_true', help='Run the Lua script after upload') + parser.add_argument('-e', '--echo', action='store_true', help='Echo output of MCU until script is terminated.') + parser.add_argument('-f', '--src', default='main.lua', help='Source file on computer, default main.lua') + parser.add_argument('-i', '--id', action='store_true', help='Query the modules chip id.') + parser.add_argument('-l', '--list', action='store_true', help='List files on device') + parser.add_argument('-p', '--port', default='/dev/ttyUSB0', help='Device name, default /dev/ttyUSB0') + parser.add_argument('-r', '--restart', action='store_true', help='Restart MCU after upload') + parser.add_argument('-t', '--dest', default=None, help='Destination file on MCU, default to source file name') + parser.add_argument('-v', '--verbose', action='store_true', help="Show progress messages.") + parser.add_argument('-w', '--wipe', action='store_true', help='Delete all lua/lc files on device.') + args = parser.parse_args() + + transport = decidetransport(args) + + if args.bar and not tqdm_installed: + sys.stdout.write("You must install the tqdm library to use the bar feature\n") + sys.stdout.write("To install, at the prompt type: \"pip install tqdm\"\n") + sys.exit(0) + + + if args.list: + # zzz191020 Amélioré la sortie du listing des fichiers + #transport.writeln("print('\\n-----');local l = file.list();for k,v in pairs(l) do print(k..', size:'..v)end;print('-----\\n')\r", 0) + # zzz191225 Amélioré encore la sortie du listing des fichiers (sort file) + transport.writeln("zdir={};pfile = file.list();for k,v in pairs(pfile) do zdir[#zdir+1] = k..string.rep(' ',24-string.len(k))..' : '..v end;table.sort(zdir);print('\\n-----');for i=1, #zdir do print(zdir[i]) end;print('-----\\n');zdir=nil;pfile=nil;k=nil;v=nil;i=nil\r", 0) + + while True: + char = transport.read(1) + if char == '' or char == chr(62): # '' or '>' + break + sys.stdout.write(char) + sys.exit(0) + + if args.id: + transport.writeln("=node.chipid()\r", 0) + id="" + while True: + char = transport.read(1) + if char == '' or char == chr(62): + break + if char.isdigit(): + id += char + print("\n"+id) + sys.exit(0) + + # zzz191020 Ajouté la fonction restart seule + if args.zrestart: + transport.writeln("node.restart()\r") + sys.exit(0) + + if args.wipe: + transport.writeln("local l = file.list();for k,v in pairs(l) do print(k)end\r", 0) + file_list = [] + fn = "" + while True: + char = transport.read(1) + if char == '' or char == chr(62): + break + if char not in ['\r', '\n']: + fn += char + else: + if fn: + file_list.append(fn.strip()) + fn = '' + for fn in file_list[1:]: # first line is the list command sent to device + if args.verbose: + sys.stderr.write("Delete file {} from device.\r\n".format(fn)) + transport.writeln("file.remove(\"" + fn + "\")\r") + sys.exit(0) + + if args.delete: + transport.writeln("file.remove(\"" + args.delete + "\")\r") + sys.exit(0) + + if args.dest is None: + args.dest = basename(args.src) + # zzz191020 Affiche le fichier à envoyer + print("File: " + args.src) + + # open source file for reading + try: + try: + f = open(args.src, "rt") + except: + import os + base_dir = os.path.dirname(os.path.realpath(__file__)) + f = open(os.path.join(base_dir, args.src), "rt") + os.chdir(base_dir) + except: + sys.stderr.write("Could not open input file \"%s\"\n" % args.src) + sys.exit(1) + + # Verify the selected file will not exceed the size of the serial buffer. + # The size of the buffer is 256. This script does not accept files with + # lines longer than 230 characters to have some room for command overhead. + num_lines = 0 + for ln in f: + if len(ln) > 230: + sys.stderr.write("File \"%s\" contains a line with more than 240 " + "characters. This exceeds the size of the serial buffer.\n" + % args.src) + f.close() + sys.exit(1) + num_lines += 1 + + # Go back to the beginning of the file after verifying it has the correct + # line length + f.seek(0) + + # set serial timeout + if args.verbose: + sys.stderr.write("Upload starting\r\n") + + # remove existing file on device + if args.append==False: + if args.verbose: + sys.stderr.write("Stage 1. Deleting old file from flash memory") + transport.writeln("file.open(\"" + args.dest + "\", \"w\")\r") + transport.writeln("file.close()\r") + transport.writeln("file.remove(\"" + args.dest + "\")\r") + else: + if args.verbose: + sys.stderr.write("[SKIPPED] Stage 1. Deleting old file from flash memory [SKIPPED]") + + + # read source file line by line and write to device + if args.verbose: + sys.stderr.write("\r\nStage 2. Creating file in flash memory and write first line") + if args.append: + transport.writeln("file.open(\"" + args.dest + "\", \"a+\")\r") + else: + transport.writeln("file.open(\"" + args.dest + "\", \"w+\")\r") + line = f.readline() + if args.verbose: + sys.stderr.write("\r\nStage 3. Start writing data to flash memory...") + if args.bar: + for i in tqdm(range(0, num_lines)): + #zzz191124 transport.writer(line.strip()) + transport.writer(line) + line = f.readline() + else: + while line != '': + #zzz191124 transport.writer(line.strip()) + transport.writer(line) + line = f.readline() + + # close both files + f.close() + if args.verbose: + sys.stderr.write("\r\nStage 4. Flush data and closing file") + transport.writeln("file.flush()\r") + transport.writeln("file.close()\r") + + # compile? + if args.compile: + if args.verbose: + sys.stderr.write("\r\nStage 5. Compiling") + transport.writeln("node.compile(\"" + args.dest + "\")\r") + transport.writeln("file.remove(\"" + args.dest + "\")\r") + + # restart or dofile + if args.restart: + transport.writeln("node.restart()\r") + + if args.dofile: # never exec if restart=1 + transport.writeln("dofile(\"" + args.dest + "\")\r", 0) + + if args.echo: + if args.verbose: + sys.stderr.write("\r\nEchoing MCU output, press Ctrl-C to exit") + while True: + sys.stdout.write(transport.read(1)) + + # close serial port + transport.close() + + # flush screen + sys.stdout.flush() + sys.stderr.flush() + if not args.bar: + sys.stderr.write("\r\n--->>> All done <<<---\r\n") diff --git a/DeepSleep/Pet_tracker_2/repair.lua b/DeepSleep/Pet_tracker_2/repair.lua new file mode 100644 index 0000000..691c123 --- /dev/null +++ b/DeepSleep/Pet_tracker_2/repair.lua @@ -0,0 +1,16 @@ +-- Scripts de seconde chance pour réparer une boucle dans le restart + +print("\n repair.lua zf181210.1456 \n") + +--f= "wifi_ap_start.lua" if file.exists(f) then dofile(f) end +--f= "telnet_srv.lua" if file.exists(f) then dofile(f) end + +--f= "az_init_led.lua" if file.exists(f) then dofile(f) end + + +--[[ +jobtimer1=tmr.create() +tmr.alarm(jobtimer1, 5*1000, tmr.ALARM_AUTO, function() + print("repair...") +end) +]] diff --git a/DeepSleep/Pet_tracker_2/restart.lua b/DeepSleep/Pet_tracker_2/restart.lua new file mode 100644 index 0000000..85f28eb --- /dev/null +++ b/DeepSleep/Pet_tracker_2/restart.lua @@ -0,0 +1,12 @@ +-- Scripts pour faire un soft reset + +print("\n restart.lua zf181209.1753 \n") + +restarttimer1=tmr.create() +tmr.alarm(restarttimer1, 2*1000, tmr.ALARM_SINGLE, function() + node.restart() +end) + +print("hello zuzu") + + diff --git a/DeepSleep/Pet_tracker_2/schemas/water-level.fzz b/DeepSleep/Pet_tracker_2/schemas/water-level.fzz new file mode 100644 index 0000000..75ab8bc Binary files /dev/null and b/DeepSleep/Pet_tracker_2/schemas/water-level.fzz differ diff --git a/DeepSleep/Pet_tracker_2/set_time.lua b/DeepSleep/Pet_tracker_2/set_time.lua new file mode 100644 index 0000000..88f1acb --- /dev/null +++ b/DeepSleep/Pet_tracker_2/set_time.lua @@ -0,0 +1,24 @@ +-- Scripts pour régler l'horloge quand on est connecté en WIFI + +print("\n set_time.lua zf181212.0841 \n") + +--f= "wifi_ap_stop.lua" if file.exists(f) then dofile(f) end +--f= "wifi_cli_conf.lua" if file.exists(f) then dofile(f) end +--f= "wifi_cli_start.lua" if file.exists(f) then dofile(f) end +--f= "telnet_srv.lua" if file.exists(f) then dofile(f) end +--f= "web_ide2.lua" if file.exists(f) then dofile(f) end +--f= "dsleep.lua" if file.exists(f) then dofile(f) end + + + +function set_time() + sntp.sync(nil, nil, nil, 1) +end + +function ztime() + tm = rtctime.epoch2cal(rtctime.get()+3600) + print(string.format("%04d/%02d/%02d %02d:%02d:%02d", tm["year"], tm["mon"], tm["day"], tm["hour"], tm["min"], tm["sec"])) +end + +set_time() + diff --git a/DeepSleep/Pet_tracker_2/upload_s.sh b/DeepSleep/Pet_tracker_2/upload_s.sh new file mode 100644 index 0000000..1097e1f --- /dev/null +++ b/DeepSleep/Pet_tracker_2/upload_s.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# Petit script pour télécharger facilement tout le binz via le port série +#zf191228.2313 + +# S'il y a des erreurs lors d'un téléchargement, il faut simplement augmenter un peu le délai ! +# Il est préférable de télécharger en premier les *gros* fichiers .lua ! + +# ATTENTION: cela efface tout le NodeMCU ! + +luatool_tty="/dev/cu.wchusbserial1410" + +echo "" +read -p "ATTENTION, cela va effacer tout le NodeMCU !" +read -p "Etes-vous vraiment certain ?" + +chmod +x luatool.py + +./luatool.py --port $luatool_tty -w +./luatool.py --port $luatool_tty -l +read -p "Est-ce bien vide ?" + +./luatool.py --port $luatool_tty --bar -f z_index.html +./luatool.py --port $luatool_tty --bar -f wifi_init.lua +./luatool.py --port $luatool_tty --bar -f wifi_info.lua +./luatool.py --port $luatool_tty --bar -f wifi_clear.html +./luatool.py --port $luatool_tty --bar -f web_srv2.lua +./luatool.py --port $luatool_tty --bar -f web_ide2.lua +./luatool.py --port $luatool_tty --bar -f telnet_srv2.lua +./luatool.py --port $luatool_tty --bar -f set_time.lua +./luatool.py --port $luatool_tty --bar -f secrets_wifi.lua +./luatool.py --port $luatool_tty --bar -f secrets_project.lua +./luatool.py --port $luatool_tty --bar -f head.lua +./luatool.py --port $luatool_tty --bar -f eus_params.lua +./luatool.py --port $luatool_tty --bar -f disp_temp.html +./luatool.py --port $luatool_tty --bar -f dir2.lua +./luatool.py --port $luatool_tty --bar -f cat.lua +./luatool.py --port $luatool_tty --bar -f boot2.lua +./luatool.py --port $luatool_tty --bar -f boot.lua +./luatool.py --port $luatool_tty --bar -f 0_send_data.lua +#./luatool.py --port $luatool_tty --bar -f 0_htu21d.lua +./luatool.py --port $luatool_tty --bar -f 0_cron.lua + +./luatool.py --port $luatool_tty -l +read -p "Pas eu d'erreur, on part à fond avec le init.lua ?" + +./luatool.py --port $luatool_tty --bar -f initz.lua -t init.lua +./luatool.py --port $luatool_tty -l +echo -e "\nC'est tout bon ;-)" diff --git a/DeepSleep/Pet_tracker_2/wifi_info.lua b/DeepSleep/Pet_tracker_2/wifi_info.lua new file mode 100644 index 0000000..7c0daa7 --- /dev/null +++ b/DeepSleep/Pet_tracker_2/wifi_info.lua @@ -0,0 +1,45 @@ +-- Petit script pour afficher les infos actuel du WIFI +print("\n wifi_info.lua zf200106.1803 \n") + +function wifi_info() + local zmodewifi=wifi.getmode() + + --wifi.NULLMODE, wifi.STATION, wifi.SOFTAP, wifi.STATIONAP + + if zmodewifi == wifi.NULLMODE then + print("WIFI OFF") + elseif zmodewifi == wifi.STATION then + print("WIFI mode CLI") + print("Connected IP:\n",wifi.sta.getip()) + local sta_config=wifi.sta.getconfig(true) + print("Current client config:") + print("\tssid:", sta_config.ssid) + print("\tpassword:", sta_config.pwd) + print("\tbssid:", sta_config.bssid) + elseif zmodewifi == wifi.SOFTAP then + print("WIFI mode AP\n") + print("AP IP: ", wifi.ap.getip()) + print("Current AP config:") + local ap_config=wifi.ap.getconfig(true) + print("\tssid:", ap_config.ssid) + print("\tpassword:", ap_config.pwd) + print("\tbssid:", wifi.ap.getmac()) + elseif zmodewifi == wifi.STATIONAP then + print("WIFI mode CLI+AP\n") + print("CLIENT IP:\n",wifi.sta.getip()) + local sta_config=wifi.sta.getconfig(true) + print("Current CLIENT config:") + print("\tssid:", sta_config.ssid) + print("\tpassword:", sta_config.pwd) + print("\tbssid:", sta_config.bssid.."\n") + print("AP IP: ", wifi.ap.getip()) + print("Current AP config:") + local ap_config=wifi.ap.getconfig(true) + print("\tssid:", ap_config.ssid) + print("\tpassword:", ap_config.pwd) + print("\tbssid:", wifi.ap.getmac()) + end + wifi_info=nil +end +wifi_info() + diff --git a/DeepSleep/Pet_tracker_2/wifi_init.lua b/DeepSleep/Pet_tracker_2/wifi_init.lua new file mode 100644 index 0000000..577e97f --- /dev/null +++ b/DeepSleep/Pet_tracker_2/wifi_init.lua @@ -0,0 +1,92 @@ +-- Petit script pour initaliser la couche WIFI + +function wifi_init() + print("\n wifi_init.lua zf200621.1608 \n") + + f= "secrets_wifi.lua" if file.exists(f) then dofile(f) end + f= "secrets_project.lua" if file.exists(f) then dofile(f) end + + function wifi_init_end() + tmr_wifi_init1:unregister() i=nil + f= "wifi_info.lua" if file.exists(f) then dofile(f) end + f=nil secrets_wifi=nil cli_pwd=nil cli_ssid=nil + tmr_wifi_init1=nil wifi_init=nil + print(node.heap()) collectgarbage() print(node.heap()) + -- f= "telnet_srv2.lua" if file.exists(f) then dofile(f) end + + f="0_tst5_socat.lua" if file.exists(f) then dofile(f) end + + -- f= "web_srv2.lua" if file.exists(f) then dofile(f) end + print(node.heap()) collectgarbage() print(node.heap()) + zdelay=1 if reset_reason=="seconde_chance" then zdelay=20 end + tmr_wifi_init3=tmr.create() + tmr_wifi_init3:alarm(zdelay*1000, tmr.ALARM_SINGLE, function() + gpio.write(zLED, gpio.LOW) + f= "boot.lua" if file.exists(f) then dofile(f) end + tmr_wifi_init3:unregister() tmr_wifi_init3=nil wifi_init_end=nil + reset_reason=nil zdelay=nil + end) + end + + if file.exists("_setup_wifi_") then + print("setup wifi...") + file.remove("_setup_wifi_") + wifi.sta.config{ssid="", pwd=""} wifi.sta.connect() + if zLED == nil then zLED = 4 end + gpio.write(zLED, gpio.HIGH) gpio.mode(zLED, gpio.OUTPUT) + tmr_wifi_init4=tmr.create() + tmr_wifi_init4:alarm(0.1*1000, tmr.ALARM_AUTO , function() + gpio.write(zLED, gpio.LOW) tmr.delay(10000) gpio.write(zLED, gpio.HIGH) + end) + tmr.create():alarm(90*1000, tmr.ALARM_SINGLE, function() + node.restart() + end) + enduser_setup.start(function() + print("on est sortit du setup wifi et on restart !") + node.restart() + end) + print("setup gadget lancé...") + else + wifi.setmode(wifi.STATION,true) + wifi.sta.config{ssid=cli_ssid, pwd=cli_pwd} wifi.sta.connect() + + -- wifi.setmode(wifi.STATIONAP,true) + -- if node_id == nil then node_id = "generic" ap_pwd = "12345678" end + -- wifi.ap.config({ ssid = ap_ssid.."_"..node_id, pwd = ap_pwd, save=true }) + -- ap_ssid=nil ap_pwd=nil + -- tmr_wifi_init2=tmr.create() + -- tmr_wifi_init2:alarm(60*1000, tmr.ALARM_SINGLE, function() + -- print("BOOOOUM, y'a plus de AP WIFI !") + -- wifi.setmode(wifi.STATION,true) tmr_wifi_init2=nil + -- print(node.heap()) collectgarbage() print(node.heap()) + -- end) + + gpio.write(zLED, gpio.HIGH) gpio.mode(zLED, gpio.OUTPUT) i=1 + tmr_wifi_init1=tmr.create() + tmr_wifi_init1:alarm(1*1000, tmr.ALARM_AUTO , function() + gpio.write(zLED, gpio.LOW) tmr.delay(10000) gpio.write(zLED, gpio.HIGH) + if wifi.sta.getip() == nil then + print(i,"Connecting to AP...") + i=i+1 + if i > 30 then + print("pas de wifi :-(") + file.putcontents("_setup_wifi_", "toto") + print("on restart pour le setup wifi") + node.restart() + --tmr_wifi_init2:unregister() tmr_wifi_init2=nil + --wifi.setmode(wifi.SOFTAP,true) + --wifi_init_end() + end + else + wifi_init_end() + end + end) + end +end + +wifi_init() + +--[[ +file.putcontents("_setup_wifi_", "toto") +file.remove("eus_params.lua") +]] diff --git a/zflash-esp-m3.sh b/zflash-esp-m3.sh new file mode 100755 index 0000000..51f88f5 --- /dev/null +++ b/zflash-esp-m3.sh @@ -0,0 +1,44 @@ +#!/bin/bash +#Petit script pour flasher facilement les ESP-M3 avec un firmware + +#ATTENTION: c'est pour ma structure, il faudra donc l'adapter + +#zf200720.1838 + + +#test si l'argument est vide +if [ -z "$1" ] + then + echo -e "\nSyntax: + +Pour le dernier firmware à la mode: +./zflash-esp-m3.sh ../../Firmware/nodemcu-master-16-modules-2019-12-01-22-17-07-float.bin +./zflash-esp-m3.sh ../../Firmware/nodemcu-master-11-modules-2019-12-15-16-45-47-float.bin +./zflash-esp-m3.sh ../../Firmware/nodemcu-master-18-modules-2019-12-17-20-28-32-float.bin +./zflash-esp-m3.sh ../../Firmware/nodemcu-master-12-modules-2019-12-21-11-05-58-float.bin +./zflash-esp-m3.sh ../../Firmware/nodemcu-master-19-modules-2019-12-31-16-40-12-float.bin +./zflash-esp-m3.sh ../../Firmware/nodemcu-master-19-modules-2020-06-17-17-22-55-float.bin +./zflash-esp-m3.sh ../../Firmware/nodemcu-master-19-modules-2020-06-17-18-07-17-float.bin + +Pour l'ancien qui supporte encore le DS18B20: +./zflash-esp-m3.sh ../../Firmware/nodemcu-master-20-modules-2019-06-01-12-50-39-float.bin + + + +" + exit +fi + +echo ---------- start zflash.sh + +cd ./Tools/esptool-master + +python esptool.py flash_id +sleep 2 + +python esptool.py erase_flash +sleep 2 + +python esptool.py write_flash -fm dout 0x00000 $1 +sleep 2 +# screen /dev/cu.wchusbserial1410 115200 diff --git a/zflash-eps01.sh b/zflash-esp01.sh similarity index 63% rename from zflash-eps01.sh rename to zflash-esp01.sh index ecaba3b..9ea9aeb 100755 --- a/zflash-eps01.sh +++ b/zflash-esp01.sh @@ -3,7 +3,7 @@ #ATTENTION: c'est pour ma structure, il faudra donc l'adapter -#zf191231.1912 +#zf200720.1838 #test si l'argument est vide @@ -12,14 +12,14 @@ if [ -z "$1" ] echo -e "\nSyntax: Pour le dernier firmware à la mode: -./zflash-eps01.sh ../../Firmware/nodemcu-master-16-modules-2019-12-01-22-17-07-float.bin -./zflash-eps01.sh ../../Firmware/nodemcu-master-11-modules-2019-12-15-16-45-47-float.bin -./zflash-eps01.sh ../../Firmware/nodemcu-master-18-modules-2019-12-17-20-28-32-float.bin -./zflash-eps01.sh ../../Firmware/nodemcu-master-12-modules-2019-12-21-11-05-58-float.bin -./zflash-eps01.sh ../../Firmware/nodemcu-master-19-modules-2019-12-31-16-40-12-float.bin +./zflash-esp01.sh ../../Firmware/nodemcu-master-16-modules-2019-12-01-22-17-07-float.bin +./zflash-esp01.sh ../../Firmware/nodemcu-master-11-modules-2019-12-15-16-45-47-float.bin +./zflash-esp01.sh ../../Firmware/nodemcu-master-18-modules-2019-12-17-20-28-32-float.bin +./zflash-esp01.sh ../../Firmware/nodemcu-master-12-modules-2019-12-21-11-05-58-float.bin +./zflash-esp01.sh ../../Firmware/nodemcu-master-19-modules-2019-12-31-16-40-12-float.bin Pour l'ancien qui supporte encore le DS18B20: -./zflash-eps01.sh ../../Firmware/nodemcu-master-20-modules-2019-06-01-12-50-39-float.bin +./zflash-esp01.sh ../../Firmware/nodemcu-master-20-modules-2019-06-01-12-50-39-float.bin