DZVents : Altitude et azimut du soleil sans API

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]
papoo
Messages : 1908
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

DZVents : Altitude et azimut du soleil sans API

Message par papoo » 06 août 2019, 21:17

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) Vu 729 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

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.


lolo6112
Messages : 26
Enregistré le : 17 juil. 2016, 16:12

Re: DZVents : Altitude et azimut du soleil sans API

Message par lolo6112 » 07 août 2019, 13:24

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 : 711
Enregistré le : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: DZVents : Altitude et azimut du soleil sans API

Message par Jeff » 07 août 2019, 16:02

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: 4.9700; RFXCOM Rfxtrx433e ext/1007 ; Zwave (Z-stick GEN5, Fibaro...), Zigbee2MQTT.

Thierry_06
Messages : 67
Enregistré le : 02 janv. 2017, 11:02
Localisation : Alpes maritimes

Re: DZVents : Altitude et azimut du soleil sans API

Message par Thierry_06 » 09 août 2019, 20:28

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) Vu 658 fois
Ou alors il me manque qq chose pour faire fonctionner le script

La courbe avec Darksky
Image2.gif
Image2.gif (140.96 Kio) Vu 658 fois
Bonne soirée

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.


papoo
Messages : 1908
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : Altitude et azimut du soleil sans API

Message par papoo » 12 août 2019, 22:24

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 : 711
Enregistré le : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: DZVents : Altitude et azimut du soleil sans API

Message par Jeff » 15 août 2019, 18:09

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: 4.9700; RFXCOM Rfxtrx433e ext/1007 ; Zwave (Z-stick GEN5, Fibaro...), Zigbee2MQTT.

papoo
Messages : 1908
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : Altitude et azimut du soleil sans API

Message par papoo » 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
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

Jeff
Messages : 711
Enregistré le : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: DZVents : Altitude et azimut du soleil sans API

Message par Jeff » 15 août 2019, 22:33

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: 4.9700; RFXCOM Rfxtrx433e ext/1007 ; Zwave (Z-stick GEN5, Fibaro...), Zigbee2MQTT.

papoo
Messages : 1908
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : Altitude et azimut du soleil sans API

Message par papoo » 15 août 2019, 22:39

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 : 711
Enregistré le : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: DZVents : Altitude et azimut du soleil sans API

Message par Jeff » 15 août 2019, 22:56

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: 4.9700; RFXCOM Rfxtrx433e ext/1007 ; Zwave (Z-stick GEN5, Fibaro...), Zigbee2MQTT.

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