[DzVents] Luminosité théorique extérieure
Re: Luminosité théorique extérieure
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
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 !!! 
Re: Luminosité théorique extérieure
Tu l'as modifier dans soleil.lua aussi ?
Re: Luminosité théorique extérieure
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
) (aucun message, aucune action se passe)
sous FF ou IE
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
sous FF ou IE
Re: Luminosité théorique extérieure
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 (34.56 Kio) Consulté 9869 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 !!! 
Re: Luminosité théorique extérieure
Code : Tout sélectionner
local idxOcta = '0' -- idx de la variable Utilisateur
tu l'a bien créée et initialisée ?
Re: Luminosité théorique extérieure
Neutrino a écrit :ça, c'est pas normal, l'idx d'une variable utilisateur est forcément supérieur à 0Code : Tout sélectionner
local idxOcta = '0' -- idx de la variable Utilisateur
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 (62.32 Kio) Consulté 9859 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 !!! 
Re: Luminosité théorique extérieure
Si tu relances lua soleil.lua, ça renvoie quoi ?
Re: Luminosité théorique extérieure
ça renvoie cette trame !Neutrino a écrit :Si tu relances lua soleil.lua, ça renvoie quoi ?
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 !!! 
Re: Luminosité théorique extérieure
Donc, la valeur est bien calculée !gloupy31 a écrit :Radiation totale en lux pondéré = 34148.45 Lux
Poste ton script en entier entre des balises 'code' stp.
Re: Luminosité théorique extérieure
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 scriptNeutrino a écrit :Donc, la valeur est bien calculée !gloupy31 a écrit :Radiation totale en lux pondéré = 34148.45 Lux
Poste ton script en entier entre des balises 'code' stp.
--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 !!! 