Quantcast
Channel: Domotique – pon.fr
Viewing all articles
Browse latest Browse all 66

DZVents : Phases lunaires sans API

$
0
0

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

 Site Officiel :   github.com

retrouver la dernière version du script moonSelectorIcons.lua sur

 Site Officiel :   github.com

et le pack d’icônes pour personnaliser votre switch selector

 Site Officiel :   github.com

Viewing all articles
Browse latest Browse all 66

Trending Articles