Commencé une nouvelle version de pet tracker qui n'utilise pas le module rtc-mem
J'utilisais la possibilité de sauvegarder le flag de dsleep dans la rtc-mem afin de pouvoir différencier lors du boot si c'est un reset ou une sortie de sommeil profond. Maintenant je vais partir du principe que quand il y a un *hardware RESET* c'est forcément une sortie de dsleep. Si on veut avoir la *seconde chance* lors de la procédure de boot, il faudra utiliser le *power on RESET*
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
# Mesure de hauteur d'eau dans un réservoir
|
||||
# Enregistre sur la FLASH tous les AP WIFI vu lors du réveil du NodeMCU
|
||||
|
||||
zf200627.1330
|
||||
Version qui utilise la fonctionnalité d'enregistrer dans la mémoire rtc-mem un flag qui permet de détecter lors du boot si l'on sort du *sommeil profond*. Car quand le NodeMCU sort du *sommeil profond*, c'est une pin D0 qui fait un RESET une résistance de 1k !
|
||||
Nécessite donc d'avoir le module rtc-mem dans le firmware du NodeMCU
|
||||
|
||||
zf200725.1140
|
||||
|
||||
<!-- TOC titleSize:2 tabSpaces:2 depthFrom:1 depthTo:6 withLinks:1 updateOnSave:1 orderedList:0 skip:1 title:1 charForUnorderedList:* -->
|
||||
## Table of Contents
|
||||
* [Buts](#buts)
|
||||
* [Problématiques](#problématiques)
|
||||
* [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)
|
||||
@@ -19,6 +22,28 @@ zf200627.1330
|
||||
<!-- /TOC -->
|
||||
|
||||
## Buts
|
||||
Petit projet pour *géolocaliser* un chat lors de ses sorties à l'extérieur afin de *voir* où il va.
|
||||
|
||||
Le but étant de fixer un NodeMCU avec un collier au coup d'un chat et d'enregistrer sur la FLASH tous les AP WIFI vu lors de la sortie.
|
||||
|
||||
Après, en post traitement sur l'ordi, on arrive à faire la corrélation AP WIFI coordonnées GPS et pourvoir tracer (géolocaliser) la sortie du chat sans avoir besoin d'utiliser un module GPS qui est trop gros pour le mettre dans un collier.
|
||||
|
||||
|
||||
## Problématiques
|
||||
La problématique c'est que le NodeMCU doit fonctionner sur une batterie très petite, 400mA/h de capacité.
|
||||
|
||||
Le NodeMCU doit donc *dormir* la plus part du temps si l'on veut pouvoir utiliser le *pet tracker* sur plusieurs jours sans devoir recharger la batterie à chaque sortie.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ATTENTION, tout le reste provient d'un autre readme ! zf200725.1116
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
116
DeepSleep/Pet_tracker_3/0_dsleep2.lua
Normal file
116
DeepSleep/Pet_tracker_3/0_dsleep2.lua
Normal file
@@ -0,0 +1,116 @@
|
||||
-- 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 zf200725.1053 \n")
|
||||
|
||||
zLED=4
|
||||
f= "flash_led_xfois.lua" if file.exists(f) then dofile(f) end
|
||||
|
||||
function ztime()
|
||||
tm = rtctime.epoch2cal(rtctime.get()+2*3600)
|
||||
return (string.format("%04d/%02d/%02d %02d:%02d:%02d", tm["year"], tm["mon"], tm["day"], tm["hour"], tm["min"], tm["sec"]))
|
||||
end
|
||||
|
||||
function dsleep_on()
|
||||
print("timer dsleep on...")
|
||||
-- ztmr_SLEEP = tmr.create()
|
||||
-- ztmr_SLEEP:alarm(2*1000, tmr.ALARM_SINGLE, function ()
|
||||
print("Il est "..ztime().." et je vais dormir...")
|
||||
tmr.delay(100*1000)
|
||||
-- node.dsleep(4*1000*1000)
|
||||
-- print(node.bootreason())
|
||||
rtcmem.write32(10, 43690) --flag pour détecter le réveil dsleep au moment du boot
|
||||
-- print("le flag est à "..rtcmem.read32(10))
|
||||
wifi.setmode(wifi.NULLMODE,true)
|
||||
rtctime.dsleep(4*1000*1000)
|
||||
-- end)
|
||||
end
|
||||
|
||||
--[[
|
||||
dsleep_on()
|
||||
print(node.bootreason())
|
||||
print("le flag est à "..rtcmem.read32(10))
|
||||
|
||||
f= "wifi_info.lua" if file.exists(f) then dofile(f) end
|
||||
|
||||
function ztime()
|
||||
tm = rtctime.epoch2cal(rtctime.get()+2*3600)
|
||||
print(string.format("%04d/%02d/%02d %02d:%02d:%02d", tm["year"], tm["mon"], tm["day"], tm["hour"], tm["min"], tm["sec"]))
|
||||
end
|
||||
|
||||
print(ztime())
|
||||
|
||||
|
||||
]]
|
||||
|
||||
-- on se réveil, vérifie si on peut avoir du réseau autrement on va redormir
|
||||
function dsleep_wake_up()
|
||||
print("Coucou, je suis réveillé... et il est "..ztime())
|
||||
if wifi.sta.getip() == nil then
|
||||
print("Unconnected...")
|
||||
f = "0_wifi_scan.lua" if file.exists(f) then dofile(f) end
|
||||
wifi.setmode(wifi.STATION)
|
||||
scan_wifi()
|
||||
else
|
||||
print("Connected...")
|
||||
end
|
||||
-- f= "wifi_info.lua" if file.exists(f) then dofile(f) end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
function zcat_logs_ap_wifi()
|
||||
zfilei = file.open(z_logs_ap_wifi, "r")
|
||||
zline=file.readline()
|
||||
repeat
|
||||
print(string.sub(zline,1,string.len(zline)-1))
|
||||
zline=file.readline()
|
||||
until zline== nil
|
||||
file.close(zfilei)
|
||||
end
|
||||
|
||||
|
||||
-- function dsleep_off()
|
||||
-- print("timer dsleep off...")
|
||||
-- ztmr_SLEEP:unregister()
|
||||
-- end
|
||||
|
||||
-- function watch_wifi_on()
|
||||
-- dsleep_on()
|
||||
-- ztmr_watch_wifi_on = tmr.create()
|
||||
-- ztmr_watch_wifi_on:alarm(1*1000, tmr.ALARM_AUTO , function()
|
||||
-- if wifi.sta.getip() == nil then
|
||||
-- -- print("Unconnected... (on)")
|
||||
-- else
|
||||
-- ztmr_watch_wifi_on:stop()
|
||||
-- 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()
|
||||
-- ztmr_watch_wifi_on:unregister()
|
||||
-- ztmr_watch_wifi_off = tmr.create()
|
||||
-- ztmr_watch_wifi_off:alarm(1*1000, tmr.ALARM_AUTO , function()
|
||||
-- if wifi.sta.getip() == nil then
|
||||
-- ztmr_watch_wifi_off:stop()
|
||||
-- print("Unconnected... (off)")
|
||||
-- watch_wifi_on()
|
||||
-- ztmr_watch_wifi_off:unregister()
|
||||
-- else
|
||||
-- -- print("Connected... (off)")
|
||||
-- xfois = 2
|
||||
-- blink_LED ()
|
||||
-- end
|
||||
-- end)
|
||||
-- end
|
||||
|
||||
-- watch_wifi_on()
|
||||
|
||||
dsleep_wake_up()
|
||||
148
DeepSleep/Pet_tracker_3/0_rtelnet1.lua
Normal file
148
DeepSleep/Pet_tracker_3/0_rtelnet1.lua
Normal file
@@ -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
|
||||
|
||||
115
DeepSleep/Pet_tracker_3/0_tst5_socat.lua
Normal file
115
DeepSleep/Pet_tracker_3/0_tst5_socat.lua
Normal file
@@ -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")
|
||||
56
DeepSleep/Pet_tracker_3/0_wifi_scan.lua
Normal file
56
DeepSleep/Pet_tracker_3/0_wifi_scan.lua
Normal file
@@ -0,0 +1,56 @@
|
||||
-- Scripts pour tester l'écoute des AP WIFI
|
||||
|
||||
print("\n wifi_scan.lua zf200725.1053 \n")
|
||||
|
||||
f= "secrets_project.lua" if file.exists(f) then dofile(f) end
|
||||
|
||||
-- https://www.epochconverter.com/
|
||||
ztime2020 = 1577836800 -- Unix time pour 1.1.2020 0:0:0 GMT
|
||||
|
||||
-- sauvegarde les données dans la flash du NodeMCU
|
||||
function save_flash(zstr_ap_wifi)
|
||||
ztime1 = tostring(rtctime.get() + 2*3600 - ztime2020)
|
||||
local zstr = ztime1..", "..zstr_ap_wifi
|
||||
if verbose then print("saving to flash: "..zstr) end
|
||||
file.open(z_logs_ap_wifi, "a+") file.writeline(zstr) file.close()
|
||||
end
|
||||
|
||||
-- print AP list in new format
|
||||
function scan_wifi()
|
||||
print(ztime())
|
||||
function listap(t)
|
||||
print("start display liste ap wifi...")
|
||||
for k,v in pairs(t) do
|
||||
-- local ssid, rssi, authmode, channel = string.match(v, "([^,]+),([^,]+),([^,]+),([^,]*)")
|
||||
-- print(ssid,rssi)
|
||||
-- print(k.." : "..v)
|
||||
-- local zstr = k..", "..v
|
||||
local zstr = v
|
||||
save_flash(zstr)
|
||||
end
|
||||
print("end display...")
|
||||
dsleep_on()
|
||||
end
|
||||
print("wifi scan...")
|
||||
wifi.sta.getap(1, listap)
|
||||
end
|
||||
|
||||
--[[
|
||||
scan_wifi()
|
||||
]]
|
||||
|
||||
|
||||
|
||||
--[[
|
||||
-- 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)
|
||||
|
||||
|
||||
]]
|
||||
191
DeepSleep/Pet_tracker_3/README.md
Normal file
191
DeepSleep/Pet_tracker_3/README.md
Normal file
@@ -0,0 +1,191 @@
|
||||
# Enregistre sur la FLASH tous les AP WIFI vu lors du réveil du NodeMCU
|
||||
|
||||
Version qui part du principe que quand la *boot reason* est un RESET c'est par défaut une sortie de *sommeil profond*. Car quand le NodeMCU sort du *sommeil profond*, c'est une pin D0 qui fait un RESET une résistance de 1k !
|
||||
|
||||
Cela simplifie beaucoup la phase de réveil.
|
||||
|
||||
Mais a pour corolaire de ne plus pouvoir faire de RESET et espérer arriver dans la partie seconde chance de la procédure de démarrage.
|
||||
|
||||
zf200725.1144
|
||||
|
||||
<!-- TOC titleSize:2 tabSpaces:2 depthFrom:1 depthTo:6 withLinks:1 updateOnSave:1 orderedList:0 skip:1 title:1 charForUnorderedList:* -->
|
||||
## Table of Contents
|
||||
* [Buts](#buts)
|
||||
* [Problématiques](#problématiques)
|
||||
* [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)
|
||||
<!-- /TOC -->
|
||||
|
||||
## Buts
|
||||
Petit projet pour *géolocaliser* un chat lors de ses sorties à l'extérieur afin de *voir* où il va.
|
||||
|
||||
Le but étant de fixer un NodeMCU avec un collier au coup d'un chat et d'enregistrer sur la FLASH tous les AP WIFI vu lors de la sortie.
|
||||
|
||||
Après, en post traitement sur l'ordi, on arrive à faire la corrélation AP WIFI coordonnées GPS et pourvoir tracer (géolocaliser) la sortie du chat sans avoir besoin d'utiliser un module GPS qui est trop gros pour le mettre dans un collier.
|
||||
|
||||
|
||||
## Problématiques
|
||||
La problématique c'est que le NodeMCU doit fonctionner sur une batterie très petite, 400mA/h de capacité.
|
||||
|
||||
Le NodeMCU doit donc *dormir* la plus part du temps si l'on veut pouvoir utiliser le *pet tracker* sur plusieurs jours sans devoir recharger la batterie à chaque sortie.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ATTENTION, tout le reste provient d'un autre readme ! zf200725.1116
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
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.
|
||||
|
||||

|
||||
Senseur à ultrason, très bon marché, permettant de mesurer la distance
|
||||
|
||||
|
||||

|
||||
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
|
||||
|
||||
|
||||

|
||||
Banc test dans le jardin pour vérifier le bon fonctionnement du système
|
||||
|
||||

|
||||
Graphique obtenu lors du banc test avec de l'eau dans le jardin
|
||||
|
||||
|
||||
<br><br>
|
||||
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. <br>
|
||||
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*. <br>
|
||||
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
|
||||
|
||||

|
||||
|
||||
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. <br>
|
||||
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**<br>
|
||||
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"**<br>
|
||||
C'est le nom de *fonction* du NodeMCU qui sera *visible* dans la DB InfluxDB
|
||||
|
||||
* **yellow_id = nn**<br>
|
||||
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"**<br>
|
||||
Pas utilisé dans ce projet
|
||||
|
||||
* **influxdb_url="http://uuu:8086/write?db=ddd&u=admin&p=ppp"**<br>
|
||||
Secrets utilisés pour envoyer des données sur le DB InfluxDB
|
||||
|
||||
* **console_host = "uuu" console_port = 23000+yellow_id**<br>
|
||||
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**<br>
|
||||
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
|
||||

|
||||
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()
|
||||
```
|
||||
35
DeepSleep/Pet_tracker_3/_secrets_project.lua_
Normal file
35
DeepSleep/Pet_tracker_3/_secrets_project.lua_
Normal file
@@ -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()
|
||||
]]
|
||||
18
DeepSleep/Pet_tracker_3/_secrets_wifi.lua_
Normal file
18
DeepSleep/Pet_tracker_3/_secrets_wifi.lua_
Normal file
@@ -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()
|
||||
16
DeepSleep/Pet_tracker_3/_zlocal_cmd.txt
Normal file
16
DeepSleep/Pet_tracker_3/_zlocal_cmd.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
zf200724.1053
|
||||
|
||||
print(ztime())
|
||||
dsleep_on()
|
||||
|
||||
zcat_logs_ap_wifi()
|
||||
|
||||
print(node.bootreason())
|
||||
print("le flag est à "..rtcmem.read32(10))
|
||||
|
||||
f= "wifi_info.lua" if file.exists(f) then dofile(f) end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
301
DeepSleep/Pet_tracker_3/_zremote_cmd.txt
Normal file
301
DeepSleep/Pet_tracker_3/_zremote_cmd.txt
Normal file
@@ -0,0 +1,301 @@
|
||||
# Quelques commandes remote (luatool) à envoyer avec le plugin Atom-IDE-terminal de l'éditeur Atom
|
||||
# zf200720.2019
|
||||
|
||||
|
||||
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:23010,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
|
||||
|
||||
|
||||
|
||||
.
|
||||
77
DeepSleep/Pet_tracker_3/boot.lua
Normal file
77
DeepSleep/Pet_tracker_3/boot.lua
Normal file
@@ -0,0 +1,77 @@
|
||||
-- Scripts à charger après le boot pour démarrer son projet
|
||||
|
||||
function boot()
|
||||
print("\n boot.lua zf200722.1944 \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 = "set_time.lua" if file.exists(f) then dofile(f) end
|
||||
print(node.heap()) collectgarbage() print(node.heap())
|
||||
|
||||
f = "0_dsleep2.lua" if file.exists(f) then dofile(f) end
|
||||
print(node.heap()) collectgarbage() print(node.heap())
|
||||
|
||||
-- f = "0_wifi_scan.lua" if file.exists(f) then dofile(f) end
|
||||
-- print(node.heap()) collectgarbage() print(node.heap())
|
||||
|
||||
-- f = "flash_led_xfois.lua" if file.exists(f) then dofile(f) end
|
||||
-- print(node.heap()) collectgarbage() print(node.heap())
|
||||
|
||||
-- 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
|
||||
]]
|
||||
38
DeepSleep/Pet_tracker_3/flash_led_xfois.lua
Normal file
38
DeepSleep/Pet_tracker_3/flash_led_xfois.lua
Normal file
@@ -0,0 +1,38 @@
|
||||
-- programme pour faire clignoter x fois une LED avec un rapport on/off
|
||||
|
||||
function flash_led_xfois()
|
||||
print("\n flash_led_xfois.lua zf200722.1139 \n")
|
||||
|
||||
--zLED=0 --NodeMCU
|
||||
--zLED=4 --EPS-M3
|
||||
zTm_On_LED = 50 --> en ms
|
||||
zTm_Off_LED = 100 --> en ms
|
||||
nbfois = 0
|
||||
gpio.write(zLED, gpio.HIGH)
|
||||
gpio.mode(zLED, gpio.OUTPUT)
|
||||
ztmr_Flash_LED = tmr.create()
|
||||
|
||||
function blink_LED ()
|
||||
if nbfois >= xfois then
|
||||
-- print(nbfois)
|
||||
nbfois = 0
|
||||
else
|
||||
if gpio.read(zLED)==gpio.HIGH then
|
||||
gpio.write(zLED, gpio.LOW)
|
||||
-- tmr.alarm(ztmr_Flash_LED, zTm_Off_LED, tmr.ALARM_SINGLE, blink_LED)
|
||||
ztmr_Flash_LED:alarm(zTm_Off_LED, tmr.ALARM_SINGLE, blink_LED)
|
||||
else
|
||||
gpio.write(zLED, gpio.HIGH)
|
||||
nbfois = nbfois+1
|
||||
-- tmr.alarm(ztmr_Flash_LED, zTm_On_LED, tmr.ALARM_SINGLE, blink_LED)
|
||||
ztmr_Flash_LED:alarm(zTm_On_LED, tmr.ALARM_SINGLE, blink_LED)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
xfois =2
|
||||
blink_LED ()
|
||||
end
|
||||
|
||||
flash_led_xfois()
|
||||
|
||||
49
DeepSleep/Pet_tracker_3/goodies/0_cron.lua
Normal file
49
DeepSleep/Pet_tracker_3/goodies/0_cron.lua
Normal file
@@ -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()
|
||||
]]
|
||||
45
DeepSleep/Pet_tracker_3/goodies/0_http_post.lua
Normal file
45
DeepSleep/Pet_tracker_3/goodies/0_http_post.lua
Normal file
@@ -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
|
||||
57
DeepSleep/Pet_tracker_3/goodies/a_test_power_wifi.lua
Normal file
57
DeepSleep/Pet_tracker_3/goodies/a_test_power_wifi.lua
Normal file
@@ -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)
|
||||
|
||||
|
||||
18
DeepSleep/Pet_tracker_3/goodies/cat.lua
Normal file
18
DeepSleep/Pet_tracker_3/goodies/cat.lua
Normal file
@@ -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
|
||||
31
DeepSleep/Pet_tracker_3/goodies/dir.lua
Normal file
31
DeepSleep/Pet_tracker_3/goodies/dir.lua
Normal file
@@ -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
|
||||
]]
|
||||
52
DeepSleep/Pet_tracker_3/goodies/dir3.lua
Normal file
52
DeepSleep/Pet_tracker_3/goodies/dir3.lua
Normal file
@@ -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
|
||||
|
||||
]]
|
||||
|
||||
19
DeepSleep/Pet_tracker_3/goodies/head.lua
Normal file
19
DeepSleep/Pet_tracker_3/goodies/head.lua
Normal file
@@ -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
|
||||
16
DeepSleep/Pet_tracker_3/goodies/repair.lua
Normal file
16
DeepSleep/Pet_tracker_3/goodies/repair.lua
Normal file
@@ -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)
|
||||
]]
|
||||
12
DeepSleep/Pet_tracker_3/goodies/restart.lua
Normal file
12
DeepSleep/Pet_tracker_3/goodies/restart.lua
Normal file
@@ -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")
|
||||
|
||||
|
||||
91
DeepSleep/Pet_tracker_3/initz.lua
Normal file
91
DeepSleep/Pet_tracker_3/initz.lua
Normal file
@@ -0,0 +1,91 @@
|
||||
--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 zf200722.1526 \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")
|
||||
if rtcmem.read32(10) == 43690 then
|
||||
print("dsleep wake up")
|
||||
f = "0_dsleep2.lua" if file.exists(f) then dofile(f) end
|
||||
else
|
||||
second_chance()
|
||||
end
|
||||
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)
|
||||
]]
|
||||
408
DeepSleep/Pet_tracker_3/luatool.py
Executable file
408
DeepSleep/Pet_tracker_3/luatool.py
Executable file
@@ -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")
|
||||
91
DeepSleep/Pet_tracker_3/oldies/0_dsleep.lua
Normal file
91
DeepSleep/Pet_tracker_3/oldies/0_dsleep.lua
Normal file
@@ -0,0 +1,91 @@
|
||||
-- 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 zf200722.1133 \n")
|
||||
|
||||
zLED=4
|
||||
f= "flash_led_xfois.lua" if file.exists(f) then dofile(f) end
|
||||
|
||||
function ztime()
|
||||
tm = rtctime.epoch2cal(rtctime.get()+2*3600)
|
||||
print(string.format("%04d/%02d/%02d %02d:%02d:%02d", tm["year"], tm["mon"], tm["day"], tm["hour"], tm["min"], tm["sec"]))
|
||||
end
|
||||
|
||||
function dsleep_on()
|
||||
print("timer dsleep on...")
|
||||
ztmr_SLEEP = tmr.create()
|
||||
ztmr_SLEEP:alarm(2*1000, tmr.ALARM_SINGLE, function ()
|
||||
print("Je dors...")
|
||||
tmr.delay(100*1000)
|
||||
-- node.dsleep(4*1000*1000)
|
||||
-- print(node.bootreason())
|
||||
rtcmem.write32(10, 43690) --flag pour détecter le réveil dsleep
|
||||
-- print("le flag est à "..rtcmem.read32(10))
|
||||
wifi.setmode(wifi.NULLMODE,true)
|
||||
rtctime.dsleep(4*1000*1000)
|
||||
end)
|
||||
end
|
||||
|
||||
--[[
|
||||
dsleep_on()
|
||||
print(node.bootreason())
|
||||
print("le flag est à "..rtcmem.read32(10))
|
||||
|
||||
f= "wifi_info.lua" if file.exists(f) then dofile(f) end
|
||||
|
||||
function ztime()
|
||||
tm = rtctime.epoch2cal(rtctime.get()+2*3600)
|
||||
print(string.format("%04d/%02d/%02d %02d:%02d:%02d", tm["year"], tm["mon"], tm["day"], tm["hour"], tm["min"], tm["sec"]))
|
||||
end
|
||||
|
||||
print(ztime())
|
||||
|
||||
|
||||
]]
|
||||
|
||||
function dsleep_off()
|
||||
print("timer dsleep off...")
|
||||
ztmr_SLEEP:unregister()
|
||||
end
|
||||
|
||||
function watch_wifi_on()
|
||||
dsleep_on()
|
||||
ztmr_watch_wifi_on = tmr.create()
|
||||
ztmr_watch_wifi_on:alarm(1*1000, tmr.ALARM_AUTO , function()
|
||||
if wifi.sta.getip() == nil then
|
||||
-- print("Unconnected... (on)")
|
||||
else
|
||||
ztmr_watch_wifi_on:stop()
|
||||
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()
|
||||
ztmr_watch_wifi_on:unregister()
|
||||
ztmr_watch_wifi_off = tmr.create()
|
||||
ztmr_watch_wifi_off:alarm(1*1000, tmr.ALARM_AUTO , function()
|
||||
if wifi.sta.getip() == nil then
|
||||
ztmr_watch_wifi_off:stop()
|
||||
print("Unconnected... (off)")
|
||||
watch_wifi_on()
|
||||
ztmr_watch_wifi_off:unregister()
|
||||
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()
|
||||
|
||||
BIN
DeepSleep/Pet_tracker_3/schemas/water-level.fzz
Normal file
BIN
DeepSleep/Pet_tracker_3/schemas/water-level.fzz
Normal file
Binary file not shown.
19
DeepSleep/Pet_tracker_3/set_time.lua
Normal file
19
DeepSleep/Pet_tracker_3/set_time.lua
Normal file
@@ -0,0 +1,19 @@
|
||||
-- Scripts pour régler l'horloge quand on est connecté en WIFI
|
||||
|
||||
print("\n set_time.lua zf2007222.110755 \n")
|
||||
|
||||
function set_time()
|
||||
sntp.sync(nil, nil, nil, 1)
|
||||
end
|
||||
|
||||
function ztime()
|
||||
tm = rtctime.epoch2cal(rtctime.get()+2*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()
|
||||
|
||||
--[[
|
||||
print(ztime())
|
||||
]]
|
||||
|
||||
48
DeepSleep/Pet_tracker_3/upload_s.sh
Normal file
48
DeepSleep/Pet_tracker_3/upload_s.sh
Normal file
@@ -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 ;-)"
|
||||
45
DeepSleep/Pet_tracker_3/wifi_info.lua
Normal file
45
DeepSleep/Pet_tracker_3/wifi_info.lua
Normal file
@@ -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()
|
||||
|
||||
92
DeepSleep/Pet_tracker_3/wifi_init.lua
Normal file
92
DeepSleep/Pet_tracker_3/wifi_init.lua
Normal file
@@ -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")
|
||||
]]
|
||||
Reference in New Issue
Block a user