Bonjour,
je vous propose aujourd’hui de calculer les différentes phases lunaires avec un script dzvents, sans aucun appel à une quelconque API.
L’affichage des différentes phases se fera par l’intermédiaire d’un switch selector
configuration du switch selector
Ce sélecteur aura 8 niveaux
– level 10 correspondant à Nouvelle lune
– level 20 correspondant à Premier croissant
– level 30 correspondant à Premier quartier
– level 40 correspondant à Gibbeuse croissante
– level 50 correspondant à Pleine lune
– level 60 correspondant à Gibbeuse décroissante
– level 70 correspondant à Dernier quartier
– level 80 correspondant à Dernier croissant
cochez la case « Cacher le niveau Off »
pour afficher un icone personnalisé à chaque nouvelle phase lunaire il vous faut un script indépendant
pensez à modifier la référence des icones (129 à 136 dans ce script) pour afficher vos icones ainsi que la référence au switch selector (dans l’exemple ci dessous l’idx 2479)
pour connaitre le numéro de chaque icone, comptez vos icônes perso en commençant à 101 pour le premier.
-- moonSelectorIcons.lua -- source : https://www.domoticz.com/forum/viewtopic.php?f=59&t=27501&p=210819&hilit=seticon#p210819 -- update/mise à jour = 29/07/2019 local scriptName = 'moonSelectorIcons' local scriptVersion = ' 1.0' return { active = true, on = { devices = {2479}, -- change to your device(s) separated by a comma like {2479,2480} }, logging = { level = domoticz.LOG_DEBUG, -- Seulement un niveau peut être actif; commenter les autres -- level = domoticz.LOG_INFO, -- Only one level can be active; comment others -- level = domoticz.LOG_ERROR, -- level = domoticz.LOG_MODULE_EXEC_INFO, marker = scriptName..' v'..scriptVersion }, execute = function(domoticz, item) local function logWrite(str,level) domoticz.log(tostring(str),level or domoticz.LOG_DEBUG) end local icons = { [10] = 129,-- level correspondant à Nouvelle lune [20] = 130,-- level correspondant à Premier croissant [30] = 131,-- level correspondant à Premier quartier [40] = 132,-- level correspondant à Gibbeuse croissante [50] = 133,-- level correspondant à Pleine lune [60] = 134,-- level correspondant à Gibbeuse décroissante [70] = 135,-- level correspondant à Dernier quartier [80] = 136,-- level correspondant à Dernier croissant } local function setIcon(iconNumber) local url = domoticz.settings['Domoticz url'] .. '/json.htm?type=setused&used=true&name=' .. domoticz.utils.urlEncode(item.name) .. '&description=' .. domoticz.utils.urlEncode(item.description) .. -- Required. If not set it will be blanked out. '&idx=' .. item.id .. '&switchtype=' .. item.switchTypeValue .. '&customimage=' .. iconNumber logWrite(url) return domoticz.openURL(url) end logWrite('lastLevel'.. tostring(item.lastLevel)) logWrite('level'.. tostring(item.level)) if item.level ~= item.lastLevel then setIcon(icons[item.level]) else domoticz.log('No Icon change necessary' .. item.id,domoticz.LOG_DEBUG) end end }
le script complet
--[[ author/auteur = papoo update/mise à jour = 04/08/2019 creation = 04/08/2019 source https://github.com/JamesSherburne/MoonPhasesLua/blob/master/main.lua --]] local scriptName = 'moon phase' local scriptVersion = '1.0' local MoonPhaseSelector = 2479 --local Waning_Crescent = "Waning Crescent" -- level 80 MoonPhase Selector switch local Waning_Crescent = "Dernier croissant" -- level 80 MoonPhase Selector switch --local Last_Quarter = "Last Quarter" -- level 70 MoonPhase Selector switch local Last_Quarter = "Dernier quartier" -- level 70 MoonPhase Selector switch --local Waning gibbous = "Waning gibbous" -- level 60 MoonPhase Selector switch local Waning gibbous = "gibbeuse décroissante" -- level 60 MoonPhase Selector switch --local Full_Moon = "Full Moon" -- level 50 MoonPhase Selector switch local Full_Moon = "Pleine une" -- level 50 MoonPhase Selector switch --local Waxing_gibbous = "Waxing gibbous" -- level 40 MoonPhase Selector switch local Waxing_gibbous = "Gibbeuse croissante" -- level 40 MoonPhase Selector switch --local First_Moon = "First Moon" -- level 30 MoonPhase Selector switch local First_Moon = "Premier quartier" -- level 30 MoonPhase Selector switch --local Waxing_crescent = "Waxing crescent" -- level 20 MoonPhase Selector switch local Waxing_crescent = "Premier croissant" -- level 20 MoonPhase Selector switch --local New_Moon = "New Moon" -- level 10 MoonPhase Selector switch local New_Moon = "Nouvelle lune" -- level 10 MoonPhase Selector switch return { active = true, on = { timer = {'every hour'}}, 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 function julianDate(d, m, y) local mm, yy, k1, k2, k3, j yy = y - math.floor((12 - m) / 10) mm = m + 9 if (mm >= 12) then mm = mm - 12 end k1 = math.floor(365.25 * (yy + 4712)) k2 = math.floor(30.6001 * mm + 0.5) k3 = math.floor(math.floor((yy / 100) + 49) * 0.75) - 38 j = k1 + k2 + d + 59 if (j > 2299160) then j = j - k3 end return j end local function moonAge(d, m, y) local j, ip, ag j = julianDate(d, m, y) ip = (j + 4.867) / 29.53059 ip = ip - math.floor(ip) if (ip < 0.5) then ag = ip * 29.53059 + 29.53059 / 2 else ag = ip * 29.53059 - 29.53059 / 2 end logWrite(ag) return ag end local day = os.date("%d") local month = os.date("%m") local year = os.date("%Y") local theMoon = moonAge(day,month,year) logWrite(theMoon) if theMoon >= 29 then moonText = New_Moon level = 10 elseif theMoon < 29 and theMoon > 23 then moonText = Waning_Crescent level = 80 elseif theMoon < 23 and theMoon > 22 then moonText = Last_Quarter level = 70 elseif theMoon < 22 and theMoon > 15 then moonText = Waning_gibbous level = 60 elseif theMoon < 15 and theMoon > 13 then moonText = Full_Moon level = 50 elseif theMoon < 13 and theMoon > 8 then moonText = Waxing_gibbous level = 40 elseif theMoon < 8 and theMoon > 6 then moonText = First_Moon level = 30 elseif theMoon < 6 and theMoon > 1 then moonText = Waxing_crescent level = 20 else moonText = New_Moon level = 10 end logWrite(moonText) logWrite(level) if (MoonPhaseSelector) then if (domoticz.devices(MoonPhaseSelector).lastLevel ~= level) then domoticz.devices(MoonPhaseSelector).switchSelector(level) logWrite("update selector device") else logWrite("no update needed") end end end -- execute function }
retrouver la dernière version de ce script sur
retrouver la dernière version du script moonSelectorIcons.lua sur
et le pack d’icônes pour personnaliser votre switch selector