[DzVents] Luminosité théorique extérieure

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
gloupy31
Messages : 91
Inscription : 08 févr. 2016, 15:58
Localisation : Toulouse (31)

Re: Luminosité théorique extérieure

Message par gloupy31 »

Merci Neutrino !

j'ai corrigé mon erreur et le terminal affiche les bonnes données !! Par contre le capteur virtuel ne se met pas à jour ... J'ai pourtant bien déclaré l'idx du capteur dans le script time. une idée ??


---------------------------------
-- Script de collecte de quelques indicateurs solaire
-- Auteur : Sébastien Joly
-- Adapté pour Domoticz par Neutrino
-- Date : 29 août 2015
-- Eléments de calculs :
-- http://www.plevenon-meteo.info/techniqu ... ement.html
-- http://herve.silve.pagesperso-orange.fr/solaire.htm
-- http://www.domotique-info.fr/2015/09/ou ... ecenter-2/
---------------------------------

--Variables à éditer--------------
local idxLux = '240' --Capteur virtuel de Luminosité
--------------------------------

commandArray = {}

time = os.date("*t")


if ((time.min % 5)==0) then
if (timeofday['Nighttime']) then
--il fait nuit
LuxPondere = 0
--mise à jour du dispositif
commandArray[1] = {['UpdateDevice'] = idxLux..'|0|' .. tostring(LuxPondere)}
else
Raspberry PI2, RFXCOM 433E,10 volets somfy rts, 2 prises phénix,Domoticz, STATION METEO OREGON,capteur Temp piscine et Pir Vil1driver (anémomètre,pluvio,cap temp) , MacBook pro !!! :D
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Luminosité théorique extérieure

Message par Neutrino »

Tu l'as modifier dans soleil.lua aussi ?
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
fabd
Messages : 100
Inscription : 11 janv. 2016, 10:14

Re: Luminosité théorique extérieure

Message par fabd »

c'est chez moi ou impossible de sauvegarder le script ?

J'ai fait un bete CTRL C CTRL V, puis SAVE

et il ne sauvegarde pas.

Je supprime tout le contenu, puis SAVE, ca sauvegarde

Je remet le code, ca ne sauvergarde pas :o) (aucun message, aucune action se passe)

sous FF ou IE
gloupy31
Messages : 91
Inscription : 08 févr. 2016, 15:58
Localisation : Toulouse (31)

Re: Luminosité théorique extérieure

Message par gloupy31 »

Neutrino a écrit :Tu l'as modifier dans soleil.lua aussi ?

Hélas oui : j'ai fait les modifs sur les variables comme ci dessous :

--Variables à éditer--------------
local Ville = "Toulouse" --Ville de référence
local idxLux = '240' --Capteur virtuel de Luminosité
local idxOcta = '0' -- idx de la variable Utilisateur
local wuAPIkey = "44e093d0a5161cb0"
local DEBUG = 'OUI'

si je fais un test avec Json à 5, ça se met à jour mais ensuite plus rien !!
Pièces jointes
Capture d’écran 2016-08-01 à 16.13.30.png
Capture d’écran 2016-08-01 à 16.13.30.png (34.56 Kio) Consulté 9873 fois
Raspberry PI2, RFXCOM 433E,10 volets somfy rts, 2 prises phénix,Domoticz, STATION METEO OREGON,capteur Temp piscine et Pir Vil1driver (anémomètre,pluvio,cap temp) , MacBook pro !!! :D
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Luminosité théorique extérieure

Message par Neutrino »

Code : Tout sélectionner

local idxOcta = '0' -- idx de la variable Utilisateur
ça, c'est pas normal, l'idx d'une variable utilisateur est forcément supérieur à 0
tu l'a bien créée et initialisée ?
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
gloupy31
Messages : 91
Inscription : 08 févr. 2016, 15:58
Localisation : Toulouse (31)

Re: Luminosité théorique extérieure

Message par gloupy31 »

Neutrino a écrit :

Code : Tout sélectionner

local idxOcta = '0' -- idx de la variable Utilisateur
ça, c'est pas normal, l'idx d'une variable utilisateur est forcément supérieur à 0
tu l'a bien créée et initialisée ?

Exact , je viens de remplacer l'idx du script par 1 et la variable se met à à l'heure tous les 5 mn mais toujours rien au niveau du capteur virtuel !

Je l'ai crée avec la valeur 0 et elle est passée toute seule à 7 !
Pièces jointes
Capture d’écran 2016-08-01 à 17.00.33.png
Capture d’écran 2016-08-01 à 17.00.33.png (62.32 Kio) Consulté 9863 fois
Raspberry PI2, RFXCOM 433E,10 volets somfy rts, 2 prises phénix,Domoticz, STATION METEO OREGON,capteur Temp piscine et Pir Vil1driver (anémomètre,pluvio,cap temp) , MacBook pro !!! :D
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Luminosité théorique extérieure

Message par Neutrino »

Si tu relances lua soleil.lua, ça renvoie quoi ?
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
gloupy31
Messages : 91
Inscription : 08 févr. 2016, 15:58
Localisation : Toulouse (31)

Re: Luminosité théorique extérieure

Message par gloupy31 »

Neutrino a écrit :Si tu relances lua soleil.lua, ça renvoie quoi ?
ça renvoie cette trame !

pi@raspberrypi:~/domoticz/scripts/lua $ lua soleil.lua
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2536 100 2536 0 0 5364 0 --:--:-- --:--:-- --:--:-- 5361
=====================================
2016-08-01 17:12:33
Toulouse, 43.63000107, 1.37000000
Altitude = 153.00000000 m
NiemeJourDeLAnnee = 214
2016 est bissextile.
Vitesse angulaire = 0.98562628336756 par jour
La déclinaison = 17.7060391081°
Temps universel decimal (UTC)15.2 H.dd
Temps solaire 15.291333333333 H.dd
Angle Horaire = -49.37°
Hauteur du soleil = 41.212207491181°
Azimut du soleil = 253.95771701708°
La durée d'insolation journalière = 14.36 H.dd
Radiation max en atmosphère = 1321.13 W/m²
Pression relative locale = 1021 hPa
Pression absolue atmosphère = 1002.6 hPa
Coefficient d'attenuation = 1.5440169485846
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 111 0 111 0 0 934 0 --:--:-- --:--:-- --:--:-- 940
Horodatage UTC = 201608011400
Station SYNOP = 07630
7 Octa
{
"status" : "OK",
"title" : "UpdateUserVariable"
}
Kc = 0.52369115797991
Radiation totale en lux pondéré = 34148.45 Lux
RadiationDirecte = 395.54 W/m²
Radiation Diffuse = 119.6 W/m²
Radiation totale = 515.14 W/m²
Radiation totale en lux = 65207.23 Lux
Le rayonnement solaire avec pondération = 269.77
pi@raspberrypi:~/domoticz/scripts/lua $
Raspberry PI2, RFXCOM 433E,10 volets somfy rts, 2 prises phénix,Domoticz, STATION METEO OREGON,capteur Temp piscine et Pir Vil1driver (anémomètre,pluvio,cap temp) , MacBook pro !!! :D
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Luminosité théorique extérieure

Message par Neutrino »

gloupy31 a écrit :Radiation totale en lux pondéré = 34148.45 Lux
Donc, la valeur est bien calculée !
Poste ton script en entier entre des balises 'code' stp.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
gloupy31
Messages : 91
Inscription : 08 févr. 2016, 15:58
Localisation : Toulouse (31)

Re: Luminosité théorique extérieure

Message par gloupy31 »

Neutrino a écrit :
gloupy31 a écrit :Radiation totale en lux pondéré = 34148.45 Lux
Donc, la valeur est bien calculée !
Poste ton script en entier entre des balises 'code' stp.
Le voilà !! pourtant je n'ai fait qu'un copier/coller et juste modifié les variables et rentré mon adresse ip locale sur la fin du script :shock:

--Variables à éditer--------------
local Ville = "Toulouse" --Ville de référence
local idxLux = '240' --Capteur virtuel de Luminosité
local idxOcta = '1' -- idx de la variable Utilisateur
local wuAPIkey = "44e093d0a5161cb0"
local DEBUG = 'OUI'

--import des fontions pour lire le JSON
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()

-- Fonction déterminant si année bissextile
function AnneeBissextile(annee)
return annee%4==0 and (annee%100~=0 or annee%400==0)
end

---------------------------------
-- Fonction spliter
function split(s, delimiter)
result = {};
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
table.insert(result, match);
end
return result;
end


---------------------------------
-- Fonction Arrondir
function arrondir(num, dec)
if num == 0 then
return 0
else
local mult = 10^(dec or 0)
return math.floor(num * mult + 0.5) / mult
end
end

---------------------------------
-- Procedure principale
---------------------------------

---------------------------------
-- Meteo API Wunderground
local config=assert(io.popen('curl http://api.wunderground.com/api/'..wuAP ... le..'.json'))
local location = config:read('*all')
config:close()
local jsonLocation = json:decode(location)

local Latitude = jsonLocation.current_observation.display_location.latitude
local Longitude = jsonLocation.current_observation.display_location.longitude
local Altitude = jsonLocation.current_observation.display_location.elevation
PressionRelative = jsonLocation.current_observation.pressure_mb

----------------------------------
local An = os.date("%Y")
local NiemeJourDeLAnnee = os.date("%j")
---------------------------------
DateHeure = os.date("%Y-%m-%d %H:%M:%S", os.time())
-- Début debug
if( DEBUG == 'OUI') then
print("=====================================")
print(os.date("%Y-%m-%d %H:%M:%S", os.time()))
print(Ville .. ", " .. Latitude .. ", " .. Longitude)
print("Altitude = " .. tostring(Altitude) .. " m")
print("NiemeJourDeLAnnee = " .. NiemeJourDeLAnnee)
end
---------------------------------
--calcul de l'année bissextile
if AnneeBissextile(An) == true then
if( DEBUG == 'OUI') then
print( An .. " est bissextile.")
end
JourDansLAnnee = 366
else
if( DEBUG == 'OUI') then
print( An .. " n'est pas bissextile.")
end
JourDansLAnnee = 365
end
---------------------------------
-- Vitesse angulaire = Combien de degrés par jour
VitesseAngulaire = 360/365.25 ----JourDansLAnnee -- ou approximativement 365.25
if( DEBUG == 'OUI') then
print("Vitesse angulaire = " .. VitesseAngulaire .. " par jour")
end
---------------------------------
-- Formule Declinaison = ArcSin(0,3978 x Sin(Va x (j - (81 - 2 x Sin(Va� x (j - 2))))))
local Declinaison = math.deg(math.asin(0.3978 * math.sin(math.rad(VitesseAngulaire) *(NiemeJourDeLAnnee - (81 - 2 * math.sin((math.rad(VitesseAngulaire) * (NiemeJourDeLAnnee - 2))))))))
if( DEBUG == 'OUI') then
print("La déclinaison = " .. Declinaison .. "°")
end
---------------------------------
-- Temps universel décimal (UTC)
TempsDecimal = (os.date("!%H") + os.date("!%M") / 60)
if( DEBUG == 'OUI') then
print("Temps universel decimal (UTC)".. TempsDecimal .." H.dd")
end
---------------------------------
-- Temps solaire
HeureSolaire = TempsDecimal + (4 * Longitude / 60 )
if( DEBUG == 'OUI') then
print("Temps solaire ".. HeureSolaire .." H.dd")
end
---------------------------------
-- Angle horaire du soleil
AngleHoraire = 15 * ( 12 - HeureSolaire )
if( DEBUG == 'OUI') then
print("Angle Horaire = ".. AngleHoraire .. "°")
end
---------------------------------
-- La hauteur du soleil (Elévation ou altitude)
HauteurSoleil = math.deg(math.asin(math.sin(math.rad(Latitude))* math.sin(math.rad(Declinaison)) + math.cos(math.rad(Latitude)) * math.cos(math.rad(Declinaison)) * math.cos(math.rad(AngleHoraire))))
if( DEBUG == 'OUI') then
print("Hauteur du soleil = " .. HauteurSoleil .. "°")
end
local Azimut = math.acos((math.sin(math.rad(Declinaison)) - math.sin(math.rad(Latitude)) * math.sin(math.rad(HauteurSoleil))) / (math.cos(math.rad(Latitude)) * math.cos(math.rad(HauteurSoleil) ))) * 180 / math.pi
local SinAzimut = (math.cos(math.rad(Declinaison)) * math.sin(math.rad(AngleHoraire))) / math.cos(math.rad(HauteurSoleil))
if(SinAzimut<0) then
Azimut=360-Azimut
end
if( DEBUG == 'OUI') then
print("Azimut du soleil = " .. Azimut .. "°")
end
---------------------------------
-- La durée d'insolation journalière - non stockée en VG
DureeInsolation = math.deg(2/15 * math.acos(- math.tan(math.rad(Latitude)) * math.tan(math.rad(Declinaison))))
DureeInsolation = arrondir(DureeInsolation,2)
if( DEBUG == 'OUI') then
print("La durée d'insolation journalière = " .. DureeInsolation .." H.dd")
end
---------------------------------
-- Constantes Solaire
ConstanteRatiationSolaire = 1361 -- W/m²
ConstanteRadiationLux = 200000 -- Lux
---------------------------------
-- Rayonnement solaire (en W/m²) présent à l'entrée de l'atmosphère.
RadiationAtm = ConstanteRatiationSolaire * (1 +0.034 * math.cos( math.rad( 360 * NiemeJourDeLAnnee / JourDansLAnnee )))
if( DEBUG == 'OUI') then
print("Radiation max en atmosphère = " .. arrondir(RadiationAtm,2) .. " W/m²")
end
---------------------------------
-- Coefficient d'attenuation M
PressionAbsolue = PressionRelative - arrondir((Altitude/ 8.3),1) -- hPa
SinusHauteurSoleil = math.sin(math.rad(HauteurSoleil))
M0 = math.sqrt(1229 + math.pow(614 * SinusHauteurSoleil,2)) - 614 * SinusHauteurSoleil
M = M0 * PressionRelative/PressionAbsolue
if( DEBUG == 'OUI') then
print("Pression relative locale = " .. PressionRelative .. " hPa")
print("Pression absolue atmosphère = " .. PressionAbsolue .. " hPa")
print("Coefficient d'attenuation = " .. M )
end
---------------------------------
-- Récupérer message SYNOP sur le site Ogimet
heureUTCmoins1 = os.date("!%H")-1
if string.len(heureUTCmoins1) == 1 then
heureUTCmoins1 = "0" .. heureUTCmoins1
end
UTC = os.date("%Y%m%d").. heureUTCmoins1.."00" -- os.date("!%M")
local WMOID = jsonLocation.current_observation.display_location.wmo
local ogimet=assert(io.popen('curl "http://www.ogimet.com/cgi-bin/getsynop? ... gin='..UTC..'"'))
local synop = ogimet:read('*all')
ogimet:close()
rslt = split(synop,",")
CodeStation = rslt[1]
rslt = split(synop, " "..CodeStation.. " ")
Trame = string.gsub(rslt[2], "=", "")
Trame = CodeStation .." ".. Trame
rslt = split(Trame, " ")
if( DEBUG == 'OUI') then
print("Horodatage UTC = " .. UTC)
print("Station SYNOP = " .. WMOID)
end
---------------------------------
-- Récupérer le premier caractere du 3eme mot = Nebulosité en Octa
Octa = string.sub(rslt[3], 1, 1)
--print(rslt[3])
-- 0 Pas de couverture nuageuse
-- 1-8 Huitième
-- 9 Brouillard
-- / Couverture indiscernable
-- cas particulier si valeur indéterminé un slash est renvoyé.
if Octa == "/" then
-- si la couverture est indiscernable, on reprend l'ancienne valeur
-- cela evite les violentes cassures dans la courbe
--Octa = uservariables['octa']
Octa = arg[1]
elseif Octa == "9" then
Octa = 8
end
if( DEBUG == 'OUI') then
print( Octa .. " Octa")
end
-- stockage de la variable octa
--commandArray['Variable:octa']=tostring(Octa)
os.execute('/usr/bin/curl "http://192.168.16.43:8080/json.htm?type ... ring(Octa)..'"')


---------------------------------
-- Facteur d'atténuation des couches nuageuses Kc
-- Kc=1-(0.75*((OCTA)**(3.4))
Kc=1-0.75*(math.pow(Octa/8,3.4))
if( DEBUG == 'OUI') then
print("Kc = " .. Kc)
end
---------------------------------
-- Au lever/coucher du soleil, on atteind les limites de précisions de ces calculs.
-- J'interrompts donc le calcul de radiation dès 1°.
if HauteurSoleil > 1 then
-- Radiation directe
RadiationDirecte = RadiationAtm * math.pow(0.6,M) * SinusHauteurSoleil
-- Radiation Diffuse
RadiationDiffuse = RadiationAtm * (0.271 - 0.294 * math.pow(0.6,M)) * SinusHauteurSoleil
-- Radiation totale
RadiationTotale = RadiationDiffuse + RadiationDirecte
-- Radiation en Lux : -- 1 Lux = 0,0079 W/m²
Lux = RadiationTotale / 0.0079
--Lux = ConstanteRadiationLux / ConstanteRatiationSolaire * RadiationTotale
-- Le rayonnement solaire avec ciel nuageux
RTOTC = RadiationTotale * Kc
-- Radiation en Lux pondéré
-- LuxPondere = ConstanteRadiationLux / ConstanteRatiationSolaire * RTOTC
LuxPondere = RTOTC / 0.0079
print("Radiation totale en lux pondéré = ".. arrondir(LuxPondere,2).." Lux")
if( DEBUG == 'OUI') then
print("RadiationDirecte = ".. arrondir(RadiationDirecte,2) .." W/m²")
print("Radiation Diffuse = ".. arrondir(RadiationDiffuse,2) .." W/m²")
print("Radiation totale = " .. arrondir(RadiationTotale,2) .." W/m²")
print("Radiation totale en lux = ".. arrondir(Lux,2).." Lux")
print("Le rayonnement solaire avec pondération = " .. arrondir(RTOTC,2))
end
else
--le soleil est trop bas
RTOTC = 0
LuxPondere = 0
end
--mise à jour du dispositif
os.execute('/usr/bin/curl "http://192.168.16.43/json.htm?type=comm ... uxPondere)..' -s -o /dev/null')
Raspberry PI2, RFXCOM 433E,10 volets somfy rts, 2 prises phénix,Domoticz, STATION METEO OREGON,capteur Temp piscine et Pir Vil1driver (anémomètre,pluvio,cap temp) , MacBook pro !!! :D
Répondre