Rangé les dossiers bolo-thingspeak et bolo, commencé à rédiger le readme de bolo-thingspeak

This commit is contained in:
Christian Zufferey
2020-01-18 11:24:17 +01:00
parent 1f10958a8e
commit a2ce3854c4
31 changed files with 115 additions and 158 deletions

View File

@@ -1,11 +1,20 @@
# Reflashage d'un SonOff Basic avec un firmware Lua et les outils pour pouvoir le programmer à distance
# Mesure de température et d'humidité
Petit projet de reflashage d'un SonOff Basic avec un firmware Lua et les outils pour pouvoir le programmer à distance sans devoir le brancher sur le port série.
![Image](https://zraw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/Constellation_sondes_mesures.jpg)
ATTENTION, il faut mettre à jour toutes les URL des images !
Petit projet pour mesurer la température et l'humidité avec un capteur HTU21D et l'afficher sur ThingSpeak. Comme par exemple pour monitorer la température et l'humidité d'un local au cours du temps.
![Image](https://zraw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/exemple_de_mesures_1.png)
Exemple de sortie sur ThingSpeak
# ATTENTION, ce projet débute et la *base* de ce Readme est *emprunté* à un autre projet, il reste donc à le modifier !
zf200101.1112
@@ -13,21 +22,22 @@ zf200101.1112
![Image](https://zraw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/Constellation_sondes_mesures.jpg)
Constellation de sondes de mesures
![Image](https://raw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/htu21d_on_NodeMCU.jpg)
![Image](https://zraw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/htu21d_on_NodeMCU.jpg)
Montage du capteur HTU21D directement sur le NodeMCU, chose à ne PAS faire, car la température du NodeMCU fausse complètement les mesures d'humidité !
![Image](https://raw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/exemple_de_mesures_1.png)
Exemple de sortie sur Grafana
![Image](https://zraw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/exemple_de_mesures_1.png)
<br><br>
On peut voir ici, avec ce projet assez complet, toutes les possibilités offertes de la programmation d'un 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:
* configuration du WIFI via une page WEB servie par le NodeMCU
* serveur WEB *Active Server Pages ZYX*, permet de faire des pages HTML dynamiques avec du code LUA in line. Les pages HTML sont sauvées dans le système de fichiers de la FLASH du NodeMCU
* serveur WEB pour l'affichage de l'humidité et de la température
* serveur WEB pour l'IDE, modification du code source en remote directement depuis une page WEB, pas besoin d'IDE
@@ -37,17 +47,17 @@ Choses qui ne seraient pas possible si on l'avait fait en C++ (mode Arduino), co
Toutes les fonctions sont bien séparées dans des scripts, cela *complexifie* le projet mais cela facilite la portabilité entre les projets et aussi sa mise au point.
## Astuces de mesures
## Principes de mesures
On utilise un tout petit capteur, le **HTU21D**, d'humidité et de température I2C.
![Image](https://raw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/HTU21D.jpg)
![Image](https://zraw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/HTU21D.jpg)
Il est vraiment très bon marché (1.5$), simple à utiliser et super précis.
https://www.aliexpress.com/item/32480177429.html
![Image](https://raw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/super_definition_capteur_htu21d.jpg)
![Image](https://zraw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/super_definition_capteur_htu21d.jpg)
Incroyable la résolution de la mesure ! On peut observer ici l'arrivée le matin au salon, l'ouverture de la porte de la salle de bain après avoir pris la douche et l'ouverture de la fenêtre. Tout ceci dans la résolution de 1 à 3% de l'humidité relative
@@ -60,24 +70,90 @@ Datasheet:
https://cdn.sparkfun.com/assets/6/a/8/e/f/525778d4757b7f50398b4567.pdf
### Schéma
zzz
## Le cloud ThingSpeak
bla bla bla
Les conditions du gratuit
## Parties principales du code
Tout se passe dans ces 4x fichiers !
### Les secrets du projet
ThingSpeak
token !
chip id
### La mesure de température et d'humidité
### L'envoi des mesures dans le Cloud ThingSpeak
### L'horloge des mesures
## Installation
Il faut *flasher* le NodeMCU avec ce firmware:
https://github.com/zuzu59/NodeMCU_Lua/blob/master/Firmware/nodemcu-master-18-modules-2019-12-17-20-28-32-float.bin
https://github.com/zuzu59/NodeMCU_Lua/blob/master/Firmware/nodemcu-master-19-modules-2019-12-31-16-40-12-float.bin
Avec ces modules:
```
file gpio http i2c net node rtctime sntp tmr uart wifi
adc ads1115 bit enduser_setup file gpio http i2c mqtt net node ow rtctime sjson sntp tmr uart wifi ws2812
```
## Utilisation
### Visualisation des données dans Grafana
Exemple de sortie dans Grafana
### Configuration du WIFI du NodeMCU_Lua
https://snapshot.raintank.io/dashboard/snapshot/LUqdTJYLNuC6WatmJoN21yQSEQ0UJ0oy
xxx
### Configuration de ThingSpeak
token !
### Visualisation des données dans ThingSpeak
Exemple de sortie dans ThingSpeak
zzz
### Distribution des rôles de NodeMCU
@@ -89,13 +165,13 @@ secrets_projet.lua
```
### Exportation des données en CSV depuis Grafana
### Exportation des données en CSV depuis ThingSpeak
Quand on a trouvé la mesure qui nous convient sur Grafana, on peut l'exporter en CSV pour en faire un rapport dans un tableur par exemple.
zzz, on peut l'exporter xxx en CSV pour en faire un rapport dans un tableur par exemple.
![Image](https://raw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/exportation_data_csv.png)
![Image](https://zraw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/exportation_data_csv.png)
![Image](https://raw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/coisir_series_as_columns.png)
![Image](https://zraw.githubusercontent.com/zuzu59/NodeMCU_Lua/master/Mesures/humidity/bolo/img/coisir_series_as_columns.png)
### Affichage des températures/humidité en local sur le NodeMCU
@@ -135,7 +211,7 @@ telnet -rN 192.168.0.xxx
zf191221.0825
zf200116.1902
pense bête:

View File

@@ -5,21 +5,19 @@
-- par 'wifi_init.lua' au moment du boot
function secrets_project()
print("\n secrets_project.lua zf20011.1818 \n")
print("\n secrets_project.lua zf20015.1657 \n")
--zLED=4 -- NodeMCU
zLED=7 -- SonOff
zLED=4 -- NodeMCU
--zLED=7 -- SonOff
zRELAY=6 -- SonOff
influxdb_url="http://xxx:8086/write?db=yyy&u=uuu&p=ppp"
print("influxdb_url: "..influxdb_url)
influxdb_table="tutu"
print("influxdb_table: "..influxdb_table)
thingspeak_url="http://api.thingspeak.com/update?api_key=xxx"
node_id = "generic"
if node.chipid() == 6734851 then node_id = "sonoff_1" end
if node.chipid() == 6734851 then node_id = "sonoff_1" zLED=7 end
if node.chipid() == 16110605 then node_id = "sonoff_2" zLED=7 end
if node.chipid() == 3049119 then node_id = "adc_1" end
if node.chipid() == 3048906 then node_id = "bolo_1" end
print("node_id: "..node_id)
end
secrets_project()

View File

@@ -1,14 +1,17 @@
# Quelques commandes remote (luatool) à envoyer avec le plugin Atom-IDE-terminal de l'éditeur Atom
# zf200113.0734
# zf200116.1833
Todo à faire pour ce projet !
- terminer la page .html affichage de la température et de l'humidité
- trouver un moyen pour configurer la lED dans initz.lua sans le rendre dangereux en cas de problème (éviter le reflashing en cas de reboot loop)
- lancement ou arrêt du WEBIDE via la home page
- flip/flop du relais depuis la page api_sonoff
- arrêter de demander de connecter le WIFI automatiquement en mode station juste après le boot dans la config wifiinit (automatic connect)
- ajouter le contrôle flip/flop du btn sur RELAY
- arrêter de demander de connecter le WIFI automatiquement en mode station juste après le boot dans la config wifiinit (automatic connect)
- if verbose print partout dans *.lua
- le wifi setup ne fonctionne toujours pas quand il y a déjà un ap de connecté (problème du reboot quand adrs ip ok)!
v- ajouter fonction restart dans z_index.html (ATTENTION avec un argument restart, pas besoin de faire une page restart.html !)
v- ajouter l'affichage du node_id dans z_index.html
v- ajouter le web_srv2 dans boot au lieu de boot2
@@ -63,6 +66,7 @@ for k,v in pairs(_G) do print(k,v) end
# commandes lua pour ce projet
export zIP="192.168.0.182"
export zIP="192.168.4.1"
export zIP="192.168.4.4"
export zport="23"
./luatool.py --ip $zIP:$zport -f z_index.html

View File

@@ -1,8 +0,0 @@
-- Petit script pour faire office de crontab pour les
--mesures
print("\n 0_cron.lua zf191225.1803 \n")
cron1=tmr.create()
cron1:alarm(300*1000, tmr.ALARM_AUTO, function()
send_data()
end)

View File

@@ -1,34 +0,0 @@
-- Petit script pour envoyer les valeurs sur un serveur WEB (InfluxDB)
-- via un http GET
print("\n 0_send_data.lua zf191228.2310 \n")
function zpost(zarg)
if verbose then print("zarg: "..zarg) end
http.post(influxdb_url, 'Content-Type: application/x-www-form-urlencoded\r\n', zarg, function(code, data)
-- print("toto")
if (code < 0) then
print("HTTP request failed")
print("zuzu", code, data)
else
if verbose then print(code, data) end
end
-- print("tutu")
end)
end
function send_data()
if verbose then print("send_data: ") end
ztemp = readTemp() zhumd = readHumi()
if verbose then print("Temperature: "..ztemp.." °C") end
if verbose then print("Humidity: "..zhumd.." %") end
--zpost("bolo_ruru,capteur=th"..node_id.." humidity="..zhumd)
--zpost("bolo_ruru,capteur=th"..node_id.." temperature="..ztemp)
-- print("titi")
end
--[[
verbose=true
send_data()
]]

View File

@@ -1,46 +0,0 @@
-- Scripts à charger après le boot pour démarrer son projet
ATTENTION: n'existe plus depuis le 190108.1747 !
print("\n boot2.lua zf200106.2331 \n")
function boot2()
print("boot2 starting...")
boot2_tmr=nil boot2_tmr1=nil boot2_go=nil
print(node.heap()) collectgarbage() print(node.heap())
--f= "0_htu21d.lua" if file.exists(f) then dofile(f) end
--f= "0_send_data.lua" if file.exists(f) then dofile(f) end
--f= "0_cron.lua" if file.exists(f) then dofile(f) end
--f= "web_ide2.lua" if file.exists(f) then dofile(f) end
f=nil
verbose = true
boot2=nil
end
boot2_tmr1=tmr.create()
boot2_tmr1:alarm(1*1000, tmr.ALARM_AUTO , function()
if boot2_go then
boot2_tmr1:unregister() boot2()
end
end)
--[[
tmr.create():alarm(1*1000, tmr.ALARM_AUTO, function()
print(node.heap())
end)
]]
--[[
for k,v in pairs(_G) do print(k,v) end
]]

View File

@@ -1,35 +0,0 @@
-- programme pour faire clignoter x fois une LED avec un rapport on/off en mS
function flash_led_xfois()
print("\n flash_led_xfois.lua zf191221.1454 \n")
zTm_On_LED = 50 zTm_Off_LED = 100 nbfois = 0
zLED=4 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
end
flash_led_xfois()
--[[
xfois =2
blink_LED ()
]]

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 793 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 713 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 969 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 966 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 793 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 912 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 KiB

View File

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 969 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

View File

@@ -1,14 +1,16 @@
# Quelques commandes remote (luatool) à envoyer avec le plugin Atom-IDE-terminal de l'éditeur Atom
# zf200113.0734
# zf200116.1833
Todo à faire pour ce projet !
- trouver un moyen pour configurer la lED dans initz.lua sans le rendre dangereux en cas de problème (éviter le reflashing en cas de reboot loop)
- lancement ou arrêt du WEBIDE via la home page
- flip/flop du relais depuis la page api_sonoff
- arrêter de demander de connecter le WIFI automatiquement en mode station juste après le boot dans la config wifiinit (automatic connect)
- arrêter de demander de connecter le WIFI automatiquement en mode station juste après le boot dans la config wifiinit (automatic connect)
- ajouter le contrôle flip/flop du btn sur RELAY
- if verbose print partout dans *.lua
- le wifi setup ne fonctionne toujours pas quand il y a déjà un ap de connecté (problème du reboot quand adrs ip ok)!
v- ajouter fonction restart dans z_index.html (ATTENTION avec un argument restart, pas besoin de faire une page restart.html !)
v- ajouter l'affichage du node_id dans z_index.html
v- ajouter le web_srv2 dans boot au lieu de boot2