From b917672d489ff218a4625a2c8418a76c5ff7299e Mon Sep 17 00:00:00 2001 From: Christian Zufferey Date: Mon, 16 Sep 2019 15:37:33 +0200 Subject: [PATCH] =?UTF-8?q?Commenc=C3=A9=20=C3=A0=20tout=20refactoriser=20?= =?UTF-8?q?afin=20que=20cela=20soit=20plus=20facilement=20r=C3=A9utilisabl?= =?UTF-8?q?e.=20Cela=20ne=20fonctionne=20pas=20encore=20!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mesures/solar_pv_energy/0_cron.lua | 5 +- Mesures/solar_pv_energy/0_get_data.lua | 70 ++++++++++++++++++++ Mesures/solar_pv_energy/0_get_energy.lua | 56 ---------------- Mesures/solar_pv_energy/0_send_data.lua | 22 +++--- Mesures/solar_pv_energy/_secrets_energy.lua_ | 12 ++-- Mesures/solar_pv_energy/boot.lua | 8 +-- 6 files changed, 92 insertions(+), 81 deletions(-) create mode 100644 Mesures/solar_pv_energy/0_get_data.lua delete mode 100644 Mesures/solar_pv_energy/0_get_energy.lua diff --git a/Mesures/solar_pv_energy/0_cron.lua b/Mesures/solar_pv_energy/0_cron.lua index b56e2a0..f729ae4 100644 --- a/Mesures/solar_pv_energy/0_cron.lua +++ b/Mesures/solar_pv_energy/0_cron.lua @@ -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() diff --git a/Mesures/solar_pv_energy/0_get_data.lua b/Mesures/solar_pv_energy/0_get_data.lua new file mode 100644 index 0000000..972a5e3 --- /dev/null +++ b/Mesures/solar_pv_energy/0_get_data.lua @@ -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 diff --git a/Mesures/solar_pv_energy/0_get_energy.lua b/Mesures/solar_pv_energy/0_get_energy.lua deleted file mode 100644 index 0c13e9f..0000000 --- a/Mesures/solar_pv_energy/0_get_energy.lua +++ /dev/null @@ -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 diff --git a/Mesures/solar_pv_energy/0_send_data.lua b/Mesures/solar_pv_energy/0_send_data.lua index 77395f9..79b6af8 100644 --- a/Mesures/solar_pv_energy/0_send_data.lua +++ b/Mesures/solar_pv_energy/0_send_data.lua @@ -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()() ]] diff --git a/Mesures/solar_pv_energy/_secrets_energy.lua_ b/Mesures/solar_pv_energy/_secrets_energy.lua_ index 66ee4a7..06893c0 100644 --- a/Mesures/solar_pv_energy/_secrets_energy.lua_ +++ b/Mesures/solar_pv_energy/_secrets_energy.lua_ @@ -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() diff --git a/Mesures/solar_pv_energy/boot.lua b/Mesures/solar_pv_energy/boot.lua index c41fc89..8ebd274 100644 --- a/Mesures/solar_pv_energy/boot.lua +++ b/Mesures/solar_pv_energy/boot.lua @@ -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