Commencé à tout refactoriser afin que cela soit plus facilement réutilisable. Cela ne fonctionne pas encore !

This commit is contained in:
Christian Zufferey
2019-09-16 15:37:33 +02:00
parent d69ae11a6e
commit b917672d48
6 changed files with 92 additions and 81 deletions

View File

@@ -1,5 +1,6 @@
-- Petit script pour faire office de crontab pour les mesures de température
print("\n 0_cron_temp.lua zf190728.1054 \n")
-- Petit script pour faire office de crontab pour les
--mesures
print("\n 0_cron.lua zf190916.1506 \n")
cron1=tmr.create()
cron1:alarm(10*1000, tmr.ALARM_AUTO, function()

View File

@@ -0,0 +1,70 @@
-- Lit le convertisseur ADC connecté sur le transformateur de courant
-- pour mesurer le courant électrique de l'installation PV
print("\n 0_get_data.lua zf190916.1534 \n")
-- Astuce de mesure:
-- au lieu de découper la sinusoïde en 100 parties, c'est à dire toutes
-- les 0.2ms (5'000x /s), pour en faire l'intégrale. On lit l'adc toutes
-- les 11ms (91x /s) beaucoup plus lentement.
-- Comme la sinusoïde fait 20ms et est répétitive, on balaye (par décalage)
-- statistiquement la sinusoïde.
-- On redresse l'alternance par rapport à la masse fictive (env 0.5),
-- ce qui nous permet d'estimer une valeur RMS du courant
-- quelque soit sa forme !
-- On le somme sur 2.1 secondes avec une moyenne glissante sur 3 valeurs
zadc_min=1024 zadc_max=0 zadc_sum=0 znb_mes=0
if adc.force_init_mode(adc.INIT_ADC)
then
node.restart()
return
end
tmr_read_adc=tmr.create()
tmr_read_adc:alarm(11, tmr.ALARM_AUTO, function()
read_adc()
end)
tmr_calc_rms=tmr.create()
tmr_calc_rms:alarm(2.1*1000, tmr.ALARM_AUTO, function()
calc_rms()
end)
zadc1=0 zadc2=0 zadc3=0
function read_adc()
zadc=adc.read(0)
zadc1=zadc2 zadc2=zadc3 zadc3=zadc
zadc=math.floor((zadc1+zadc2+zadc3)/3)
if zadc<=zadc_min then zadc_min=zadc end
if zadc>=zadc_max then zadc_max=zadc end
zadc=zadc-zadc_offset
if zadc<=0 then zadc=zadc*-1 end
zadc_sum=zadc_sum+zadc znb_mes=znb_mes+1
end
zadc_offset=548
zpow_cal=409
zadc_cal=192
zadc_err=-4
zadc_rms1=0 zadc_rms2=0 zadc_rms3=0
function calc_rms()
zadc_rms=math.floor(zadc_sum/znb_mes)+zadc_err
-- zadc_rms1=zadc_rms2 zadc_rms2=zadc_rms3 zadc_rms3=zadc_rms
-- zadc_rms=math.floor((zadc_rms1+zadc_rms2+zadc_rms3)/3)
-- if zadc_rms<=0 then zadc_rms=0 end
zadc_offset=math.floor((zadc_min+zadc_max)/2)
zpower=math.floor(zadc_rms*zpow_cal/zadc_cal)
print(zadc_min,zadc_max,zadc_offset,zadc_rms,zpower.."W")
zadc_min=1024 zadc_max=0 zadc_sum=0 znb_mes=0
end

View File

@@ -1,56 +0,0 @@
-- Lit le convertisseur ADC pour mesurer le courant électrique de l'installation PV
print("\n 0_get_energy.lua zf190910.0108 \n")
-- Astuce de mesure:
-- on lit l'adc toutes les 11ms, soit 91x par seconde
-- comme l'alternance fait 20ms, on balaye (déphasage) statistiquement l'alternance
-- on redresse l'alternance par rapport à la masse fictive (env 0.5)
-- ce qui nous permet d'estimer une valeur RMS du courant
-- quelque soit sa forme !
-- on le fait sur 2.1 secondes avec une moyenne glissante sur 3 valeurs
zadc_min=1024 zadc_max=0 zadc_sum=0 znb_adc=0
if adc.force_init_mode(adc.INIT_ADC)
then
node.restart()
return
end
tmr_read_adc=tmr.create()
tmr_read_adc:alarm(11, tmr.ALARM_AUTO, function()
read_adc()
end)
tmr_calc_rms=tmr.create()
tmr_calc_rms:alarm(2.1*1000, tmr.ALARM_AUTO, function()
calc_rms()
end)
function read_adc()
zadc=adc.read(0)
if zadc<=zadc_min then zadc_min=zadc end
if zadc>=zadc_max then zadc_max=zadc end
zadc=zadc-zadc_offset
if zadc<=0 then zadc=zadc*-1 end
zadc_sum=zadc_sum+zadc znb_adc=znb_adc+1
end
zadc_offset=548
zpow_cal=409
zadc_cal=192
zadc_err=-4
za1=0 za2=0 za3=0
function calc_rms()
zadc_rms=math.floor(zadc_sum/znb_adc)+zadc_err
za1=za2 za2=za3 za3=zadc_rms zadc_rms=math.floor((za1+za2+za3)/3)
if zadc_rms<=0 then zadc_rms=0 end
zadc_offset=math.floor((zadc_min+zadc_max)/2)
zpower=math.floor(zadc_rms*zpow_cal/zadc_cal)
print(zadc_min,zadc_max,zadc_offset,zadc_rms,zpower.."W")
zadc_min=1024 zadc_max=0 zadc_sum=0 znb_adc=0
end

View File

@@ -1,17 +1,13 @@
-- Petit script pour envoyer les valeurs de température sur un serveur WEB via un http GET
print("\n 0_send_temp.lua zf190806.1541 \n")
-- Petit script pour envoyer les valeurs sur un serveur WEB (InfluxDB)
-- via un http GET
print("\n 0_send_data.lua zf190916.1504 \n")
function send_temp()
print("send_web_temp: ")
function send_data()
print("send_data: ")
zurl="http://www.xxx.ml:8086/write?db=xxx&u=admin&p=xxx"
print("zurl: "..zurl)
zarg="energy,compteur=1 puissance="..zpuissance
zarg="energy,compteur=2 puissance="..zpuissance
print("zarg: "..zarg)
http.post(zurl, 'Content-Type: application/x-www-form-urlencoded\r\n', zarg, function(code, data)
-- print("toto")
if (code < 0) then
@@ -22,11 +18,9 @@ function send_temp()
end
-- print("tutu")
end)
-- print("titi")
-- print("titi")
end
--[[
send_temp()
function send_data()()
]]

View File

@@ -1,16 +1,18 @@
-- Petit script pour configurer les choses secrètes que l'on n'aimerait
-- pas être exportées sur Internet (github)
-- faut donc le mettre ailleurs que dans le dépôt !
-- donc on ne met PAS des secrets dans le code !
-- faut le mettre ailleurs que dans le dépôt !
-- il faut le renommer en 'secrets_energy.lua' et sera exécuté
-- par 'boot.lua' au moment du boot
function secrets()
print("\n secrets_temp_zf_out_sud.lua zf190727.1006 \n")
print("\n secrets_energy.lua zf190916.1458 \n")
cli_ssid="xxx"
cli_pwd="xxx"
thingspeak_url="http://api.thingspeak.com/update?api_key=xxx&"
hub_url="http://192.168.0.180/api_hub_temp.html?"
zfield=1 ou 2 ou 3 !
influxdb_url="http://xxx.yyy.zzz:8086/write?db=xxx&u=admin&p=xxx"
print("influxdb_url: "..influxdb_url)
end
secrets()

View File

@@ -1,6 +1,6 @@
-- Scripts à charger après le boot pour démarrer son appli
print("\n boot.lua zf190910.1342 \n")
print("\n boot.lua zf190916.1523 \n")
function heartbeat()
f= "flash_led_xfois.lua" if file.exists(f) then dofile(f) end
@@ -24,9 +24,9 @@ f= "telnet_srv2.lua" if file.exists(f) then dofile(f) end
f= "web_ide2.lua" if file.exists(f) then dofile(f) end
f= "web_srv2.lua" if file.exists(f) then dofile(f) end
--f= "0_get_energy.lua" if file.exists(f) then dofile(f) end
--f= "0_send_temp.lua" if file.exists(f) then dofile(f) end
--f= "0_cron_temp.lua" if file.exists(f) then dofile(f) end
--f= "0_get_data.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=nil
--heartbeat=nil