jjacques68 Posté(e) le 12 mai 2020 Signaler Partager Posté(e) le 12 mai 2020 (modifié) Hello tout le monde ! Voici un QA permettant d'avoir l'azimut du soleil. Un grand merci à l'auteur original du code cité dans le header du script du QA. Je l'ai adapté pour mes besoins à savoir. Connaitre l'azimut du soleil, c'est tout. Je me suis permis d'enlever les autres valeurs qui ne m'interraissaient pas vraiment. Il s'agit d'un QA de type "Multilevel sensor". Donc la valeur qu'il retourne est celle de l'azimut. Il utilise la localisation de la HC3, donc bien penser à la paramétrer dans les réglages. Il faut saisir l'altitude : (ligne 41) local Altitude = 310 J'ai créé un offset (self.offset) dans le code d'initialisation du QA afin d'avoir plus de précisions sur l'angle (étrangement constaté chez moi). (ligne 15) self.offset = -10 Dans mon cas, il est donc fixé à -10°... à vous de voir chez vous --------------------------------- -- Script de collecte de quelques indicateurs solaire -- Auteur : Sébastien Joly -- Date : 29 août 2015 -- Eléments de calculs : -- http://www.plevenon-meteo.info/technique/theorie/enso/ensoleillement.html -- http://herve.silve.pagesperso-orange.fr/solaire.htm -- adpaté par Jean-Jacques NEFF pour la HC3 le 24/03/2020 --------------------------------- function QuickApp:onInit() __TAG = "QA_"..plugin.mainDeviceId.."_Indicateur Solaire" self:debug("onInit") self.offset = -10 self:Main() end --------------------------------- -- Fonction déterminant si année bissextile --------------------------------- function QuickApp:AnneeBissextile(annee) return annee%4==0 and (annee%100~=0 or annee%400==0) end --------------------------------- -- Fonction Arrondir --------------------------------- function QuickApp: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 local location = api.get("/settings/location") local Ville = location.city local Latitude = location.latitude local Longitude = location.longitude local Altitude = 310 --------------------------------- -- MAIN --------------------------------- function QuickApp:Main() -- Début debug self:trace("=====================================") self:trace(os.date("%Y-%m-%d %H:%M:%S", os.time())) self:trace(Ville .. ", " .. Latitude .. ", " .. Longitude) self:trace("Altitude = " .. tostring(Altitude) .. " m") local NiemeJourDeLAnnee = os.date("%j") --------------------------------- -- Vitesse angulaire = Combien de degrés par jour --------------------------------- VitesseAngulaire = 360/365.25 ----JourDansLAnnee -- ou approximativement 365.25 self:trace("Vitesse angulaire = " .. VitesseAngulaire .. " par jour") --------------------------------- -- 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)))))))) self:trace("La déclinaison = " .. Declinaison .. "°") --------------------------------- -- Temps universel décimal (UTC) --------------------------------- TempsDecimal = (os.date("!%H") + os.date("!%M") / 60) self:trace("Temps universel decimal (UTC)".. TempsDecimal .." H.dd") --------------------------------- -- Temps solaire --------------------------------- HeureSolaire = TempsDecimal + (4 * Longitude / 60 ) self:trace("Temps solaire ".. HeureSolaire .." H.dd") --------------------------------- -- Angle horaire du soleil --------------------------------- AngleHoraire = 15 * ( 12 - HeureSolaire ) self:trace("Angle Horaire = ".. AngleHoraire .. "°") --------------------------------- -- 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)))) self:trace("Hauteur du soleil = " .. HauteurSoleil .. "°") self:updateView("LBL_Hauteur", "text", "Hauteur = "..tostring(self:arrondir(HauteurSoleil,0)) .. "°") 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 self:trace("Azimut du soleil = " .. Azimut .. "°") --affichage sans offset self:updateView("LBL_Azimut", "text", "Azimut = "..tostring(self:arrondir(Azimut,0)+self.offset).."°") self:updateProperty("value", self:arrondir(Azimut,0)+self.offset) self:updateProperty("unit", " °") self:updateView("LBL_Update", "text", os.date("%d/%m/%Y %H:%M:%S",os.time())) self:trace("=====================================") --bouclage toutes les minutes fibaro.setTimeout(60*1000, function() self:Main() end) end Pour accéder à la valeur azimut, il suffit de le faire dans une scène ou un QA avec une simple commande : MonAzimut = fibaro.getValue(ID_du_QA, "value") Voici le fichier téléchargeable : Indicateur_Solaire.fqa et son icone : EDIT : j'ai supprimé l'accès "openweathermap" qui n'était plus utile... Modifié le 12 mai 2020 par jjacques68 4 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
antoniopll Posté(e) le 25 mai 2020 Signaler Partager Posté(e) le 25 mai 2020 C'est super, je viens de le mettre dans mon HC3 et ça marche très bien. Je peux penser à de nombreuses utilisations: stores, luminaires... Avec quoi l'utilisez-vous? 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
jjacques68 Posté(e) le 25 mai 2020 Auteur Signaler Partager Posté(e) le 25 mai 2020 pour la part que pour les volets... s'il fait trop chaud intérieur/extérieur et qu'il y a du soleil, je ferme. je réouvre selon l'azimut... 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
mprinfo Posté(e) le 9 juin 2020 Signaler Partager Posté(e) le 9 juin 2020 J'ai quelques remarques à faire sur ce qaIl serait bien deMettre offset et altitude dans les variables QAIl y a trop de self:trace je pense que l'on doit mettre juste le strict minimum afin de ne pas surchargé inutilement le debutC'est super lorsque l'on a quelques QASuper travail merci pour le partage Envoyé de mon BLA-L29 en utilisant Tapatalk Lien vers le commentaire Partager sur d’autres sites More sharing options...
jjacques68 Posté(e) le 9 juin 2020 Auteur Signaler Partager Posté(e) le 9 juin 2020 oui les traces je les ai commenté... juste gardé l'essentiel... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Jetcyrus Posté(e) le 9 juin 2020 Signaler Partager Posté(e) le 9 juin 2020 Bonsoir a tous Je te remercie encore jjacques68 pour ton aide. Je l'utilise pour mes volets quand il fais chaud les volet ce ferme coter soleil et s ouvre cote ombre tout au long de la journée. Je pense utiliser la hauteur du soleil pour faire differencier entre l été et l hiver pour effectuer le scenario inverse en hiver. profiter un max du soleil et éviter un max la déperdition de température coté ombre. pour essayer d apprendre jai bidouiller ton QA et fait juste un autre pour la hauteur du soleil. Hauteur_Soleil.fqa Je débute je tatonne par deduction je sais que c est loin d être parfait mais ca marche lol 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés