[DzVents] Altitude et azimut du soleil sans API

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.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

[DzVents] Altitude et azimut du soleil sans API

Message par papoo »

voici un script qui permet le calcul de l'altitude et de l'azimut du soleil sans aucune API.
2019-08-04 20_20_21-Window.png
2019-08-04 20_20_21-Window.png (22.12 Kio) Consulté 7451 fois
le script s'appuie sur les données de géolocalisation inscrites dans les paramètres mais vous pouvez les inscrire en dur afin de calculer la position du soleil pour un autre lieu que celui configuré. les formules sont issues de stackoverflow.
Vous pouvez comparer les résultats de ce script avec le site <a href="https://www.suncalc.org/">suncalc.org</a>


le script complet

Code : Tout sélectionner

--[[ sunAzimuth.lua for [ dzVents >= 2.4.14 (domoticz >= V4.10444)]

author/auteur = papoo
update/mise à jour = 04/08/2019
creation = 04/08/2019

place this DZvents script in /domoticz/scripts/dzVents/scripts/ directory
script dzvents à placer dans le répertoire /domoticz/scripts/dzVents/scripts/
https://pon.fr/dzvents-altitude-et-azimut-du-soleil-sans-api/
https://github.com/papo-o/domoticz_scripts/blob/master/dzVents/scripts/sunAzimuth.lua
https://easydomoticz.com/forum/viewtopic.php?f=17&t=8787
--]]


local scriptName        = 'sun azimuth'
local scriptVersion     = '1.0'

local solarAltitude     = 'Altitude du soleil' -- name or idx without '' of the sun altitude device, nil if not used
local solarAzimuth       = 'Azimut du soleil' -- name or idx without '' of the sun azimuth device, nil if not used

return {
    active = true,
    on = { timer =   {'every minute'}},
    logging =   {    level    =   domoticz.LOG_DEBUG,
                    -- level    =   domoticz.LOG_INFO,             -- Seulement un niveau peut être actif; commenter les autres
                    -- level    =   domoticz.LOG_ERROR,            -- Only one level can be active; comment others    
                    -- level    =   domoticz.LOG_MODULE_EXEC_INFO,
                marker = scriptName..' v'..scriptVersion }, 

    execute = function(domoticz)

        local function logWrite(str,level)             -- Support function for shorthand debug log statements
            domoticz.log(tostring(str),level or domoticz.LOG_DEBUG)
        end

        local latitude  = domoticz.settings.location.latitude
        --local latitude  = '45.83'
        logWrite('latitude : '..latitude)
        local longitude = domoticz.settings.location.longitude
        --local longitude = '1.26'
        logWrite('longitude : '..longitude)
        
        local function sunposition(latitude, longitude, time)-- solar altitude, azimuth (degrees)
        --source https://stackoverflow.com/questions/35467309/position-of-the-sun-azimuth-in-lua
            time = time or os.time()
            if type(time) == 'table' then time = os.time(time) end

            local date = os.date('*t', time)
            local timezone = (os.time(date) - os.time(os.date('!*t', time))) / 3600
            if date.isdst then timezone = timezone + 1 end

            local utcdate = os.date('*t', time - timezone * 3600)
            local latrad = math.rad(latitude)
            local fd = (utcdate.hour + utcdate.min / 60 + utcdate.sec / 3600) / 24
            local g = (2 * math.pi / 365.25) * (utcdate.yday + fd)
            local d = math.rad(0.396372 - 22.91327 * math.cos(g) + 4.02543 * math.sin(g) - 0.387205 * math.cos(2 * g)
              + 0.051967 * math.sin(2 * g) - 0.154527 * math.cos(3 * g) + 0.084798 * math.sin(3 * g))
            local t = math.rad(0.004297 + 0.107029 * math.cos(g) - 1.837877 * math.sin(g)
              - 0.837378 * math.cos(2 * g) - 2.340475 * math.sin(2 * g))
            local sha = 2 * math.pi * (fd - 0.5) + t + math.rad(longitude)

            local sza = math.acos(math.sin(latrad) * math.sin(d) + math.cos(latrad) * math.cos(d) * math.cos(sha))
            local saa = math.acos((math.sin(d) - math.sin(latrad) * math.cos(sza)) / (math.cos(latrad) * math.sin(sza)))

            return 90 - math.deg(sza), math.deg(saa)
        end

        local function getSunPos(lat, long, time)
            findTime = {}
            findTime.hour, findTime.min = time.hour, time.min
            fixedAzimuthLast, fixedAzimuth = 0, 0
            for i=0,23 do
                for j=0,59 do
                    time.hour, time.min = i, j
                    local altitude, azimuth = sunposition(lat, long, time)
                    -- fix azimuth
                    if fixedAzimuthLast < azimuth then 
                        fixedAzimuthLast = azimuth
                        fixedAzimuth = fixedAzimuthLast
                    else
                        fixedAzimuth = fixedAzimuthLast + (180 - azimuth)
                    end
                    -- find azimuth at target time
                    if findTime.hour == i and findTime.min == j then
                        -- final result
                        return altitude, fixedAzimuth
                    end
                end
            end
        end

        altitude, azimuth = getSunPos(latitude, longitude, os.date('*t', os.time()))
        logWrite('solar altitude : '..domoticz.utils.round(altitude),2)
        logWrite('solar azimut : '..domoticz.utils.round(azimuth),2)
        if (solarAltitude) and (altitude) then domoticz.devices(solarAltitude).updateCustomSensor(altitude) end
        if (solarAzimuth) and (azimuth) then domoticz.devices(solarAzimuth).updateCustomSensor(azimuth) end

    end -- execute function
}


deux icônes pour personnaliser vos custom devices
https://github.com/papo-o/domoticz_scri ... ter/Icons/
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
lolo6112
Messages : 54
Inscription : 17 juil. 2016, 16:12

Re: DZVents : Altitude et azimut du soleil sans API

Message par lolo6112 »

HS
Où comment avoir bientôt sa propre station météo sans aucun sensor :lol: :lol: :lol:
Désolé Papoo mais il fallait que je le fasse, tu me tues des fois avec tout ce que tu fais :mrgreen:
Fin du HS

Bonne journée.
Jeff
Messages : 1007
Inscription : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: DZVents : Altitude et azimut du soleil sans API

Message par Jeff »

Merci pour ce partage, il va me servir pour la future domotisation de mes volets plein sud.
En plus je n'ai utilisé jamais de scripts dzvents, ca me changera...
Bon la maison devrait être prête en décembre, c'est plutôt celui de la gestion du froid que je vais devoir gérer :lol:
Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
Thierry_06
Messages : 167
Inscription : 02 janv. 2017, 11:02
Localisation : Alpes maritimes

Re: DZVents : Altitude et azimut du soleil sans API

Message par Thierry_06 »

Bonjour

Bien le script , mais il y a un léger problème quand on regarde les courbes.
Autant l'altitude du soleil est une belle sinusoïde , autant l'azimut laisse à désirer
Image1.gif
Image1.gif (284.47 Kio) Consulté 7380 fois
Ou alors il me manque qq chose pour faire fonctionner le script

La courbe avec Darksky
Image2.gif
Image2.gif (140.96 Kio) Consulté 7380 fois
Bonne soirée
Mon installation Pi4+ OS Raspbian
Rfxcom(pour VR Somfy)+ 2 Zigbee 3.0 USB dongle Plus(Sonoff) + Esp12(avec sonde ds1820/GY30 + Tasmota)
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : Altitude et azimut du soleil sans API

Message par papoo »

effectivement le graph n'est pas correctement "corrigé" entre minuit et 4 heures du matin
mais la plage d'utilisation de ces données se situe entre le levé et le couché du soleil.
j'essayerai de corriger cela mais je ne suis pas super fort (quel euphémisme :D ) en géométrie
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Jeff
Messages : 1007
Inscription : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: DZVents : Altitude et azimut du soleil sans API

Message par Jeff »

Script installé, j'ai eu l'erreur pour récupérer ma latitude et ma longitude automatiquement de ma config de domoticz, je les ai mis manuellement, ca marche.

Merci pour le partage et les icônes en prime :D
Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : Altitude et azimut du soleil sans API

Message par papoo »

Jeff a écrit : 15 août 2019, 18:09 j'ai eu l'erreur pour récupérer ma latitude et ma longitude automatiquement de ma config de domoticz,
Réglages => Paramètres => Système => localisation
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Jeff
Messages : 1007
Inscription : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: DZVents : Altitude et azimut du soleil sans API

Message par Jeff »

papoo a écrit : 15 août 2019, 18:22
Jeff a écrit : 15 août 2019, 18:09 j'ai eu l'erreur pour récupérer ma latitude et ma longitude automatiquement de ma config de domoticz,
Réglages => Paramètres => Système => localisation
Quand même papoo, j'en suis pas rendu là après 4 ans de domoticz :shock:
Par contre c'est mon 1er script dzvent, je n'ai pas cherché plus que cela non plus...
Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : Altitude et azimut du soleil sans API

Message par papoo »

désolé de commencer la résolution d'erreurs par les bases, mais ne connaissant pas le niveau de chacun, il me faut bien commencer quelque part.
ta version de dzvents ne serait elle pas inférieure à la version 2.4.14 ? si c'est le cas ne cherche pas plus. domoticz.settings.lattitude et domoticz.settings.longitude ne fonctionne qu'a partir de cette version.
comme indiqué en haut du script, version domoticz superieure ou égale à la V4.10444
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Jeff
Messages : 1007
Inscription : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: DZVents : Altitude et azimut du soleil sans API

Message par Jeff »

Non c'est très sympa de ta part mais cela m'a un peu vexé, je traine ici depuis qqs années...
Version DZ : 4.97
Version dzVents 2.4.6

Je regarderais un peu plus en détail demain.

Du coup j'en ai aussi profiter pour tester ton script moustique, j'ai modifié le niveau des alertes, car en alerte orange sur le 35, ça m'était du jaune sur DZ. J'ai refait mon code couleur qui allait bien par rapport à la légende du département qui allait de vert, jaune, orange et rouge. Pas de pourpre !

En tout cas merci de prendre du temps pour nous aider et tes partages sont au top ;)
Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
Répondre