Luminosité théorique extérieure

Vous avez crée 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.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
Répondre
Neutrino
Messages : 1275
Enregistré le : 10 juil. 2015, 15:42
Localisation : Challans (85)
Contact :

Luminosité théorique extérieure

Message par Neutrino » 09 janv. 2016, 18:47

EDIT 25/07/2019 : Version prenant en compte les nouveautés DzVents 2.4.0 avec DarkSky au lieu de Wunderground
Soleil.lua

Code : Tout sélectionner

--[[
	Prerequisits
	==================================
	Domoticz v3.8837 or later (dzVents version 2.4 or later)

	CHANGE LOG: See https://easydomoticz.com/forum/viewtopic.php?f=17&t=1340

Virtual Lux sensor and other real-time solar data

-- Authors  ----------------------------------------------------------------
	V1.0 - Sébastien Joly - Great original work
	V1.1 - Neutrino - Adaptation to Domoticz
	V1.2 - Jmleglise - An acceptable approximation of the lux below 1° altitude for Dawn and dusk + translation + several changes to be more userfriendly.
	V1.3 - Jmleglise - No update of the Lux data when <=0 to get the sunset and sunrise with lastUpdate
	V1.4 - use the API instead of updateDevice to update the data of the virtual sensor to be able of using devicechanged['Lux'] in our scripts. (Due to a bug in Domoticz that doesn't catch the devicechanged event of the virtual sensor)
	V1.5 - xces - UTC time calculation.
	V2.0 - BakSeeDaa - Converted to dzVents and changed quite many things.
	V2.5 - DarkSky instead of Wunderground
]]--

-- Variables to customize ------------------------------------------------
local countryCode = 'FR'							-- Country code for Wunderground API
local idxSolarAzimuth = 304						-- (Integer) Virtual Azimuth Device ID
local idxSolarAltitude = 305					-- (Integer) Your virtual Solar Altitude Device I
local dsAPIkey = '9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx6'		-- Dark Sky API Key
local WMOID = '07300'									-- (String) Nearest synop station for ogimet.
local logToFile = false									-- (Boolean) Set to true if you also wish to log to a file. It might get big by time. 
local tmpLogFile = '/var/tmp/logSun.txt'-- Logging to this file if logging to file is activated
local fetchIntervalDayMins = 4 -- Day time scraping interval. Never set this below 4 if you have a free WU API account.
local fetchIntervalNightMins = 30 -- Night time scraping interval. 

-- Optional Domoticz devices
local idxLux = 303 -- (Integer) Domoticz virtual Lux device ID
--local idxCloudCover = 555 -- (Integer) Domoticz Cloud Cover (PERCENTAGE TYPE) sensor device ID

local latitude = 46	-- Latitude. (Decimal number) Decimal Degrees. E.g. something like 50.748485
local longitude = -1	-- Longitude. (Decimal number) Decimal Degrees. E.g.something like 12.629728.
local altitude = 61	-- Altitude. (Integer) Meters above sea level.

local warnNoCloudDataHours = 24 -- Warn limit (hours) if no cloud cover report has been received.

-- Please don't make any changes below this line (Except for setting logging level)

local scriptName = 'solarData'
local scriptVersion = '2.5.0'

return {
	active = true,
	logging = {
		--level = domoticz.LOG_DEBUG, -- Uncomment to override the dzVents global logging setting
		marker = scriptName..' '..scriptVersion
	},
	on = {
		timer = {
			'every '..tostring(fetchIntervalDayMins)..' minutes at daytime',
			'every '..tostring(fetchIntervalNightMins)..' minutes at nighttime',
		},
		httpResponses = {
			scriptName..'Ogimet',
			scriptName..'DS',
		},
	},
	data = {
		lastOkta = {initial=0},
		lastOgimetTime = {initial='198001010000'}
	},
	execute = function(domoticz, item)
		if item.isTimer then
			local url = 'https://api.darksky.net/forecast/'..dsAPIkey..'/'..latitude..','..longitude..'?units=ca&exclude=hourly,minutely,daily,alerts,flags'
			domoticz.log('Requesting new weather data from DarkSky...', domoticz.LOG_DEBUG)
			domoticz.openURL({url = url, method = 'GET', callback = scriptName..'DS'}).afterSec(10)

			local ogimetDelay = 1140 -- Minimum anticipated Ogimet data lag (19 minutes)
			local qOgimetTime = os.date('!%Y%m%d%H', os.time()- ogimetDelay)..'00'
			local lastOgimetTime = domoticz.data.lastOgimetTime
			if qOgimetTime > lastOgimetTime then
				-- There might be recent ogimet data to fetch
				qOgimetTime = os.date('!%Y%m%d%H', os.time()-(12*3600+ogimetDelay))..'00' -- Twelve hours of data
				if domoticz.data.lastOgimetTime > qOgimetTime then
					qOgimetTime = domoticz.data.lastOgimetTime:sub(1, -2)..'1' -- Add 1 minute to it
				end
				-- Get synopCode (surface synopCodetic observations) message from Ogimet web site
				url ='http://www.ogimet.com/cgi-bin/getsynop?block='..WMOID..'&begin='..qOgimetTime
				domoticz.log('Requesting new cloud cover data from Ogimet...', domoticz.LOG_DEBUG)
				domoticz.openURL({url = url, method = 'GET', callback = scriptName..'Ogimet'}).afterSec(5)
			else
				domoticz.log('No need to request new cloud cover data from Ogimet. Using old data with UTC time stamp: '..lastOgimetTime, domoticz.LOG_DEBUG)
			end
		end

		if not item.isHTTPResponse then return end

		local response = item
		if (not response.ok) or (not response.isJSON and response.trigger ~= scriptName..'Ogimet') then
			domoticz.log('Last http response was not what expected. Trigger: '..response.trigger, domoticz.LOG_ERROR)
			domoticz.log(response.data, domoticz.LOG_ERROR)
			return
		end

		if response.trigger == scriptName..'Ogimet' then

			domoticz.log('Ogimet data has been received', domoticz.LOG_DEBUG)

			local function split(s, delimiter)
				local result = {}
				for match in (s..delimiter):gmatch('(.-)'..delimiter) do
					table.insert(result, match)
				end
				return result
			end

			-- In meteorology, an okta is a unit of measurement used to describe the amount of cloud cover
			-- at any given location such as a weather station. Sky conditions are estimated in terms of how many
			-- eighths of the sky are covered in cloud, ranging from 0 oktas (completely clear sky) through to 8 oktas
			-- (completely overcast). In addition, in the synop code there is an extra cloud cover indicator '9'
			-- indicating that the sky is totally obscured (i.e. hidden from view),
			-- usually due to dense fog or heavy snow.
	
			-- Find the okta value for the last valid line in the response
			-- The response may contain multiple rows and some of them may not be valid.
			local okta, ogimetTime

			for line in response.data:gmatch("[^\r\n]+") do
				if line == nil then break end
				if (string.find(line,'NIL=') == nil)
				and (string.find(line,'Status: 500') == nil)
				and (string.find(line, WMOID) ~= nil) then
					local s = split(line, ',')
					if s and #s >= 7 then
						local x = string.sub(split(s[7], ' ')[5], 1, 1)
						if x ~= '/' then
							okta = x
							ogimetTime = s[2]..s[3]..s[4]..s[5]..s[6]
						end
					end
				end
			end

			local lastOgimetTime = domoticz.data.lastOgimetTime 
	
			if (not ogimetTime) or (lastOgimetTime >= ogimetTime) then 
				local lastOkta = domoticz.data.lastOkta

				domoticz.log('Using the saved Okta value: '..lastOkta..' with UTC timestamp: '..lastOgimetTime, domoticz.LOG_DEBUG)
				okta = lastOkta
				-- No cloud data. Shall we throw an error?
				local tLastOgimetTime = os.time({ year = tonumber(lastOgimetTime:sub(1,4)), month = tonumber(lastOgimetTime:sub(5,6)), 
						day = tonumber(lastOgimetTime:sub(7,8)), hour = tonumber(lastOgimetTime:sub(9,10)), min = tonumber(lastOgimetTime:sub(11,12)) })
				local elapsed_time = os.difftime(os.time(os.date("!*t")), tLastOgimetTime)
				if elapsed_time >= 3600 * warnNoCloudDataHours then
					domoticz.log('We\'ve got no cloud data from WMOID: '..WMOID..' for more than '..tostring(domoticz.utils.round(elapsed_time/3600))..' hours. Maybe you should look for a more reliable weather station to query. Read the Wiki how to do that.', domoticz.LOG_ERROR)
				end
			else
				okta = okta == '9' and 8 or okta
				-- We store the last fetched value here to be used as a backup value
				domoticz.log('Using the newly fetched Okta value: '..okta..' with UTC timestamp: '..ogimetTime, domoticz.LOG_DEBUG)
				domoticz.data.lastOkta = okta
				domoticz.data.lastOgimetTime = ogimetTime
			end
			return
		end

		if response.trigger ~= scriptName..'DS' then return end

		domoticz.log('DarkSky API json data has been received', domoticz.LOG_DEBUG)

		local function leapYear(year)   
			return year%4==0 and (year%100~=0 or year%400==0)
		end

		local dsAPIData = response.json
		if not dsAPIData then
			domoticz.log('Could not find any dsAPIData in the DS API response', domoticz.LOG_ERROR)
			return
		end

		local arbitraryTwilightLux = 6.32 -- W/m² egal 800 Lux (the theoritical value is 4.74 but I have more accurate result with 6.32...)
		local constantSolarRadiation = 1361 -- Solar Constant W/m²

		-- In case of that latitude, longitude and altitude has not been defined in the configuration,
		-- we simply use the values that is returned for the current observation location.
		-- Reading longitude, latitude and altitude from the observation_location instead of from 
		-- display_location. API documentation is not so clear about what display_location is.
		--if not latitude then latitude = wuAPIData.current_observation.observation_location.latitude end
		--if not longitude then longitude = wuAPIData.current_observation.observation_location.longitude end
		--if not altitude then
		--	altitude = wuAPIData.current_observation.observation_location.elevation
		--	altitude = domoticz.utils.round(tonumber((altitude:gsub('[%a%s]',''))) / 3.2808, 1)
		--end

		--local WULocWMO = wuAPIData.current_observation.display_location.wmo
		local relativePressure = dsAPIData.currently.pressure -- if you have an another way to get the Pressure, (local barometer ...) then you may optimize the script and avoid the call to api.darksky)

		local year = os.date('%Y')
		local numOfDay = os.date('%j')
		local nbDaysInYear = (leapYear(year) and 366 or 365)

		local angularSpeed = 360/365.25
		local declination = math.deg(math.asin(0.3978 * math.sin(math.rad(angularSpeed) *(numOfDay - (81 - 2 * math.sin((math.rad(angularSpeed) * (numOfDay - 2))))))))
		local timeDecimal = (os.date('!%H') + os.date('!%M') / 60) -- Coordinated Universal Time  (UTC)
		local solarHour = timeDecimal + (4 * longitude / 60 )    -- The solar Hour
		local hourlyAngle = 15 * ( 12 - solarHour )          -- hourly Angle of the sun
		local sunAltitude = math.deg(math.asin(math.sin(math.rad(latitude))* math.sin(math.rad(declination)) + math.cos(math.rad(latitude)) * math.cos(math.rad(declination)) * math.cos(math.rad(hourlyAngle))))-- the height of the sun in degree, compared with the horizon

		local azimuth = math.acos((math.sin(math.rad(declination)) - math.sin(math.rad(latitude)) * math.sin(math.rad(sunAltitude))) / (math.cos(math.rad(latitude)) * math.cos(math.rad(sunAltitude) ))) * 180 / math.pi -- deviation of the sun from the North, in degree
		local sinAzimuth = (math.cos(math.rad(declination)) * math.sin(math.rad(hourlyAngle))) / math.cos(math.rad(sunAltitude))
		if(sinAzimuth<0) then azimuth=360-azimuth end
		local sunstrokeDuration = math.deg(2/15 * math.acos(- math.tan(math.rad(latitude)) * math.tan(math.rad(declination)))) -- duration of sunstroke in the day . Not used in this calculation.
		local RadiationAtm = constantSolarRadiation * (1 +0.034 * math.cos( math.rad( 360 * numOfDay / nbDaysInYear ))) -- Sun radiation  (in W/m²) in the entrance of atmosphere.
		-- Coefficient of mitigation M
		local absolutePressure = relativePressure - domoticz.utils.round((altitude/ 8.3),1) -- hPa
		local sinusSunAltitude = math.sin(math.rad(sunAltitude))
		local M0 = math.sqrt(1229 + math.pow(614 * sinusSunAltitude,2)) - 614 * sinusSunAltitude
		local M = M0 * relativePressure/absolutePressure

		domoticz.log('', domoticz.LOG_INFO)
		domoticz.log('==============  SUN  LOG ==================', domoticz.LOG_INFO)
		--domoticz.log(city .. ', latitude: ' .. latitude .. ', longitude: ' .. longitude, domoticz.LOG_INFO)
		domoticz.log('Home altitude = ' .. tostring(altitude) .. ' m', domoticz.LOG_DEBUG)
		--domoticz.log('WU Location WMO = ' .. WULocWMO, domoticz.LOG_INFO)
		domoticz.log('Angular Speed = ' .. angularSpeed .. ' per day', domoticz.LOG_DEBUG)
		domoticz.log('Declination = ' .. declination .. '°', domoticz.LOG_DEBUG)
		domoticz.log('Universal Coordinated Time (UTC) '.. timeDecimal ..' H.dd', domoticz.LOG_DEBUG)
		domoticz.log('Solar Hour '.. solarHour ..' H.dd', domoticz.LOG_DEBUG)
		domoticz.log('Altitude of the sun = ' .. sunAltitude .. '°', domoticz.LOG_INFO)
		domoticz.log('Angular hourly = '.. hourlyAngle .. '°', domoticz.LOG_DEBUG)
		domoticz.log('Azimuth of the sun = ' .. azimuth .. '°', domoticz.LOG_INFO)
		domoticz.log('Duration of the sun stroke of the day = ' .. domoticz.utils.round(sunstrokeDuration,2) ..' H.dd', domoticz.LOG_DEBUG)
		domoticz.log('Radiation max in atmosphere = ' .. domoticz.utils.round(RadiationAtm,2) .. ' W/m²', domoticz.LOG_DEBUG)
		domoticz.log('Local relative pressure = ' .. relativePressure .. ' hPa', domoticz.LOG_DEBUG)
		domoticz.log('Absolute pressure in atmosphere = ' .. absolutePressure .. ' hPa', domoticz.LOG_DEBUG)
		domoticz.log('Coefficient of mitigation M = ' .. M ..' M0 = '..M0, domoticz.LOG_DEBUG)
		domoticz.log('', domoticz.LOG_INFO)

		local function split(s, delimiter)
			local result = {}
			for match in (s..delimiter):gmatch('(.-)'..delimiter) do
				table.insert(result, match)
			end
			return result
		end

		local okta = domoticz.data.lastOkta
		local Kc = 1-0.75*math.pow(okta/8,3.4)  -- Factor of mitigation for the cloud layer

		local directRadiation, scatteredRadiation, totalRadiation, Lux, weightedLux
		if sunAltitude > 1 then -- Below 1° of Altitude , the formulae reach their limit of precision.
			directRadiation = RadiationAtm * math.pow(0.6,M) * sinusSunAltitude
			scatteredRadiation = RadiationAtm * (0.271 - 0.294 * math.pow(0.6,M)) * sinusSunAltitude
			totalRadiation = scatteredRadiation + directRadiation
			Lux = totalRadiation / 0.0079  -- Radiation in Lux. 1 Lux = 0,0079 W/m²
			weightedLux = Lux * Kc   -- radiation of the Sun with the cloud layer
		elseif sunAltitude <= 1 and sunAltitude >= -7  then -- apply theoretical Lux of twilight
			directRadiation = 0
			scatteredRadiation = 0
			arbitraryTwilightLux=arbitraryTwilightLux-(1-sunAltitude)/8*arbitraryTwilightLux
			totalRadiation = scatteredRadiation + directRadiation + arbitraryTwilightLux 
			Lux = totalRadiation / 0.0079  -- Radiation in Lux. 1 Lux = 0,0079 W/m²
			weightedLux = Lux * Kc   -- radiation of the Sun with the cloud layer
		elseif sunAltitude < -7 then  -- no management of nautical and astronomical twilight...
			directRadiation = 0
			scatteredRadiation = 0
			totalRadiation = 0
			Lux = 0
			weightedLux = 0  --  should be around 3,2 Lux for the nautic twilight. Nevertheless.
		end

		domoticz.log('SYNOP Station = ' .. WMOID, domoticz.LOG_INFO)
		domoticz.log('Okta = '..okta, domoticz.LOG_INFO)
		domoticz.log('Kc = ' .. Kc, domoticz.LOG_DEBUG)
		domoticz.log('Direct Radiation = '.. domoticz.utils.round(directRadiation,2) ..' W/m²', domoticz.LOG_INFO)
		domoticz.log('Scattered Radiation = '.. domoticz.utils.round(scatteredRadiation,2) ..' W/m²', domoticz.LOG_DEBUG)
		domoticz.log('Total radiation = ' .. domoticz.utils.round(totalRadiation,2) ..' W/m²', domoticz.LOG_DEBUG)
		domoticz.log('Total Radiation in lux = '.. domoticz.utils.round(Lux,2)..' Lux', domoticz.LOG_DEBUG)
		domoticz.log('Total weighted lux  = '.. domoticz.utils.round(weightedLux,2)..' Lux', domoticz.LOG_INFO)

		-- No update if Lux is already 0. So lastUpdate of the Lux sensor will keep the time when Lux has reached 0.
		-- (Kind of timeofday['SunsetInMinutes'])
		if idxLux and domoticz.devices(idxLux).lux + domoticz.utils.round(weightedLux, 0) > 0 then
			domoticz.devices(idxLux).updateLux(domoticz.utils.round(weightedLux,0))
		end
		domoticz.devices(idxSolarAzimuth).updateCustomSensor(domoticz.utils.round(azimuth,0))
		domoticz.devices(idxSolarAltitude).updateCustomSensor(domoticz.utils.round(sunAltitude,0))
		local oktaPercent = domoticz.utils.round(okta*100/8)
		local fetchIntervalMins = (domoticz.time.matchesRule('at daytime') and fetchIntervalDayMins or fetchIntervalNightMins)
		if idxCloudCover and ((domoticz.devices(idxCloudCover).percentage ~= oktaPercent)
		or (domoticz.devices(idxCloudCover).lastUpdate.minutesAgo >= (60 - fetchIntervalMins))) then
			domoticz.devices(idxCloudCover).updatePercentage(oktaPercent)
		end 

		if logToFile then
			local logDebug = os.date('%Y-%m-%d %H:%M:%S',os.time())
			logDebug=logDebug..' Azimuth:' .. azimuth .. ' Height:' .. sunAltitude
			logDebug=logDebug..' Okta:' .. okta..'  KC:'.. Kc
			logDebug=logDebug..' Direct:'..directRadiation..' inDirect:'..scatteredRadiation..' TotalRadiation:'..totalRadiation..' LuxCloud:'.. domoticz.utils.round(weightedLux,2)
			os.execute('echo '..logDebug..' >>'..tmpLogFile)  -- compatible Linux & Windows
		end

	end
}


EDIT : Dernière version du script dans le Wiki officiel grâce à JML : http://www.domoticz.com/wiki/Real-time_ ... structions
EDIT 2 : Une version traduite pour dzVents est disponible par BakSeeDaa. Attention, cette version utilise des fichiers temporaires à mettre sur un RAMDISK si vous êtes sur SD. => http://www.domoticz.com/wiki/Real-time_ ... the_script

Bonjour à tous,

Suite à la demande de l'un d'entre vous, je vais partager mon script qui calcule de manière théorique la luminosité extérieure.
Je n'ai rien inventé, juste adapté le script de Sebastien Joly dont les explications sont ici : http://www.domotique-info.fr/2015/09/ou ... ecenter-2/

Ce script renvoie une valeur théorique en Lux de la luminosité extérieure basée sur la longitude, la latitude, le jour de l'année et la nébulosité.
Au début, j'avais tout mis dans le même script LUA, mais Domoticz avait tendance à figer pendant quelques secondes à chaque calcul, rendant l'interface lourde.
J'ai donc séparé le lancement et la récupération des données dans 2 scripts LUA.
Il faut d'abord créer une variable utilisateur nommée 'octa' de type entier. Vous pouvez l'initialiser à 0.
---SCRIPTS SUPPRIME -----
C'est marrant de voir enfin la luminosité remonter :)
Fichiers joints
Capture2.PNG
Capture2.PNG (190.87 Kio) Vu 11714 fois
Capture.PNG
Capture.PNG (109.05 Kio) Vu 11714 fois
Modifié en dernier par Neutrino le 03 sept. 2017, 13:01, modifié 5 fois.
Ma maison à plein d'IP ! :mrgreen:

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


jml
Messages : 21
Enregistré le : 08 janv. 2016, 22:18

Re: Luminosité théorique extérieure

Message par jml » 09 janv. 2016, 19:20

Excellente idée d'avoir modifié le script d'origine pour remplacer gmaps & openweathermap par wunderground.

Neutrino
Messages : 1275
Enregistré le : 10 juil. 2015, 15:42
Localisation : Challans (85)
Contact :

Re: Luminosité théorique extérieure

Message par Neutrino » 09 janv. 2016, 20:03

Ouai, autant ne faire qu'une seule requête :)
Au passage, je viens de corriger une coquille dans soleil.lua, j'ai mis à jour le premier poste.
J'avais laissé une variable en dure :oops:
c'est cette ligne la bonne :

Code : Tout sélectionner

local WMOID = jsonLocation.current_observation.display_location.wmo
Ma maison à plein d'IP ! :mrgreen:

jml
Messages : 21
Enregistré le : 08 janv. 2016, 22:18

Re: Luminosité théorique extérieure

Message par jml » 09 janv. 2016, 22:57

D'autres coquilles et questions :

- à la ligne 184. La bonne ligne ne serait elle pas Octa = uservariables['octa'] (et pas Octa=arg[1]) ?
D'ailleurs, à ce sujet, le script d'origine, faisait un autre choix. Si Octa == / alors forcé à 8. Vous avez implémenté un nouveau système prenant la valeur précédente. Est-ce qu'il n'y a pas des cas particuliers type eclipse solaire ... qui expliqueraient la solution d'origine ?

- ligne 194 : une autre valeur en dur (l'IDX de la uservariable). Plutot à remonter au début , en variable à personnaliser : local idxUserVarOcta

- le WMOID. Là encore vous avez amélioré le script d'origine en obtenant l'ID de la station d'observation à partir de wunderground. Or dans mon cas, le WMOID obtenu ne fait pas partie des stations présentes sur ogimet. http://www.ogimet.com/gsynop_nav.phtml.en Savez-vous si je peux quand même l'utiliser. A toute fin utile, pour les autres lecteurs du forum, il est important de lire le post d'origine sur le choix de la station http://www.domotique-info.fr/2015/09/ou ... ecenter-2/ §4.3

- D'autres données mériteraient d'être exploitées de ce script (en uservariable par exemple) : l'Azimut (Orientation du soleil) ou encore l'Elevation du soleil. Très utile pour automatiser des volets roulants ou persiennes.
D'ailleurs vous n'avez pas repris les ligne 225, 226, 227 du script d'origine. Y a t-il une raison ?

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Neutrino
Messages : 1275
Enregistré le : 10 juil. 2015, 15:42
Localisation : Challans (85)
Contact :

Re: Luminosité théorique extérieure

Message par Neutrino » 10 janv. 2016, 00:09

Je vais répondre en grasentre les questions, ce sera plus simple ;)
jml a écrit :D'autres coquilles et questions :

- à la ligne 184. La bonne ligne ne serait elle pas Octa = uservariables['octa'] (et pas Octa=arg[1]) ?

Cette ligne est commentée, la suivante correspond justement à ce que tu mets (désolé, je n'ai pas l'habitude de vouvoyer sur ce forum)

D'ailleurs, à ce sujet, le script d'origine, faisait un autre choix. Si Octa == / alors forcé à 8. Vous avez implémenté un nouveau système prenant la valeur précédente. Est-ce qu'il n'y a pas des cas particuliers type eclipse solaire ... qui expliqueraient la solution d'origine ?

Bon, les éclipses, c'est pas tous le temps, donc j'en tiens pas compte. La station que j'interroge renvoyais souvent '/' sans vraiment de raison. J'ai palier à ce problème ainsi.

- ligne 194 : une autre valeur en dur (l'IDX de la uservariable). Plutot à remonter au début , en variable à personnaliser : local idxUserVarOcta

Ouai c'est vrai :) j'ai posté le script un peu vite et j'avais oublié ce détail. La séparation du script en 2 date de 5 jours, j'ai pas pris le temps de nettoyer le code. :oops:

- le WMOID. Là encore vous avez amélioré le script d'origine en obtenant l'ID de la station d'observation à partir de wunderground. Or dans mon cas, le WMOID obtenu ne fait pas partie des stations présentes sur ogimet. http://www.ogimet.com/gsynop_nav.phtml.en Savez-vous si je peux quand même l'utiliser. A toute fin utile, pour les autres lecteurs du forum, il est important de lire le post d'origine sur le choix de la station http://www.domotique-info.fr/2015/09/ou ... ecenter-2/ §4.3

Bizarre ça, il faudra peut-être passer par une autre station codée "en dur" et présente sur ogimet, sinon, on perd la nébulosité en OCTA.

- D'autres données mériteraient d'être exploitées de ce script (en uservariable par exemple) : l'Azimut (Orientation du soleil) ou encore l'Elevation du soleil. Très utile pour automatiser des volets roulants ou persiennes.

Pourquoi pas ! J'avais fait l'impasse sur ces données car je règle mes volets roulants suivant la température et luminosité intérieure/extérieure.
J'ai supprimé ces passages pour optimiser le code à l'époque.


D'ailleurs vous n'avez pas repris les ligne 225, 226, 227 du script d'origine. Y a t-il une raison ?

Je ne vois pas ces lignes, tu peux les reposter ?
Ma maison à plein d'IP ! :mrgreen:

jackslayter
Messages : 941
Enregistré le : 30 sept. 2014, 14:40
Localisation : Isère (38)

Re: Luminosité théorique extérieure

Message par jackslayter » 13 janv. 2016, 08:53

il y a des lib à installer?
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte

Neutrino
Messages : 1275
Enregistré le : 10 juil. 2015, 15:42
Localisation : Challans (85)
Contact :

Re: Luminosité théorique extérieure

Message par Neutrino » 13 janv. 2016, 19:33

A part curl, rien d'autre n'est nécessaire.
Ma maison à plein d'IP ! :mrgreen:

jackslayter
Messages : 941
Enregistré le : 30 sept. 2014, 14:40
Localisation : Isère (38)

Re: Luminosité théorique extérieure

Message par jackslayter » 14 janv. 2016, 14:44

il faut que les scripts JSON.lua et soleil.lua soit propriétaire ROOT?
pour l'instant ça marche pas chez moi
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte

Neutrino
Messages : 1275
Enregistré le : 10 juil. 2015, 15:42
Localisation : Challans (85)
Contact :

Re: Luminosité théorique extérieure

Message par Neutrino » 14 janv. 2016, 20:23

Ce n'est pas nécessaire.
Les scripts sont positionnés dans /home/pi/domoticz/scripts/lua
Qu'obtiens tu si tu lances

Code : Tout sélectionner

lua /home/pi/domoticz/scripts/lua/soleil.lua 0
?
Ma maison à plein d'IP ! :mrgreen:

jackslayter
Messages : 941
Enregistré le : 30 sept. 2014, 14:40
Localisation : Isère (38)

Re: Luminosité théorique extérieure

Message par jackslayter » 14 janv. 2016, 20:40

Code : Tout sélectionner

pi@raspberrypi ~/domoticz/scripts/lua $ lua /home/pi/domoticz/scripts/lua/solei.lua 0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2599  100  2599    0     0   6093      0 --:--:-- --:--:-- --:--:--  8465
=====================================
2016-01-14 20:38:07
Altitude = 310.00000000 m
NiemeJourDeLAnnee = 014
2016 est bissextile.
Vitesse angulaire = 0.98562628336756 par jour
La déclinaison = -21.245468368153°
Temps universel decimal (UTC)19.633333333333 H.dd
Temps solaire 20.005555534667 H.dd
Angle Horaire = -120.08333302°
Hauteur du soleil = -35.880621703504°
Azimut du soleil = 275.51551842095°
La durée d'insolation journalière = 8.91 H.dd
Radiation max en atmosphère = 1405.94 W/m²
Pression relative locale = 1015 hPa
Pression absolue atmosphère = 977.7 hPa
Coefficient d'attenuation = 748.95552861257
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   256    0   256    0     0   2045      0 --:--:-- --:--:-- --:--:--  3459
Horodatage UTC = 201601141800
Station SYNOP = 07486
8 Octa
curl: (7) couldn't connect to host
Kc = 0.25
mon api est bonne
et mon idx aussi car il a marché jusqu’à 8h15
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre