[DzVents] Alerte UV et temps d’exposition en toute sécurité

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] Alerte UV et temps d’exposition en toute sécurité

Message par papoo »

script permettant de vous alerter sur la dangerosité des UV en indiquant le temps d’exposition en toute sécurité pour un type de peau donné.
J’ai un capteur d’UV sur lequel je me base pour exécution de ce script mais vous pouvez utiliser les données disponible depuis certaines API telle que darsky du moment que vous avez un device indiquant le niveau d’UV.
2019-08-31 15_06_37-Domoticz.png
2019-08-31 15_06_37-Domoticz.png (10.15 Kio) Consulté 5308 fois
Ce script se base sur la classification de Fitzpatrick permettant de classer les individus selon la réaction de leur peau lors d’une exposition solaire

Le script complet

Code : Tout sélectionner

--[[ UValert.lua 
author/auteur = papoo
update/mise à jour = 01/09/2019
création = 31/08/2019
https://pon.fr/dzvents-alerte-uv-et-temps-dexposition-en-toute-securite
https://github.com/papo-o/domoticz_scripts/blob/master/domoticzVents/scripts/UValert.lua
https://easydomoticz.com/forum/


skinType determination : Fitzpatrick Skin Types & Safe Exposure Time Calculation
The most commonly used scheme to classify a person’s skin type by their response to sun exposure in terms of the degree of burning and tanning was developed by Thomas B. Fitzpatrick, MD, PhD. As a meter of fact even the skin color of Emoji characters based on the Fitzpatrick scale.

Skin Type    Color    Typical Features    Tanning Ability    Ethnicity    Time to Burn (mins)

I    Very fair skin, white; red or blond hair; light-colored eyes; freckles likely    Always burns, does not tan    Scandinavian, Celtic    (200 * 2.5)/(3 * UVI)

II    Fair skin, white; light eyes; light hair    Burns easily, tans poorly    Northern European (Caucasian)    (200 * 3)/(3 * UVI)

III    Fair skin, cream white; any eye or hair color (very common skin type)    Tans after initial burn    Darker Caucasian (Central Europe)    (200 * 4)/(3 * UVI)

IV    Olive skin, typical Mediterranean Caucasian skin; dark brown hair; medium to heavy pigmentation    Burns minimally, tans easily    Mediterranean, Asian, Hispanic    (200 * 5)/(3 * UVI)

V    Brown skin, typical Middle Eastern skin; dark hair; rarely sun sensitive    Rarely burns, tans darkly easily    Middle eastern, Latin, light-skinned African-American, Indian    (200 * 8)/(3 * UVI)

VI    Black skin; rarely sun sensitive    Never burns, always tans darkly    Dark-skinned African American    (200 * 15)/(3 * UVI)


--]]

--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local UVdevice      = 'UV'          -- UV device name
local skinType      = 3             -- personalize with your skin type
local UValertDevice = 'Alerte UV'   -- Alert device name
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local scriptName        = 'Alerte aux UV'
local scriptVersion     = '1.01'
return {
    active  = true,
        on      =   {
                        devices = {UVdevice}
                    },
        -- on  =   {
                    -- timer           =   { "every minutes" },
                -- },

    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, device)
        local round = domoticz.utils.round
        local UV_AlertText
        local function logWrite(str,level)             -- Support function for shorthand debug log statements
            domoticz.log(tostring(str),level or domoticz.LOG_DEBUG)
        end

        local function UV_Index2Alert(index)                            -- Levels as from KNMI
            local alert = domoticz.ALERTLEVEL_RED
            if     index <= 1 then alert = domoticz.ALERTLEVEL_GREY   -- very low
            elseif index <= 3 then alert = domoticz.ALERTLEVEL_GREEN  -- low
            elseif index <= 6 then alert = domoticz.ALERTLEVEL_YELLOW -- mod
            elseif index <= 8 then alert = domoticz.ALERTLEVEL_ORANGE -- high
            else                   alert = domoticz.ALERTLEVEL_RED    -- very high
            end
            return alert
        end

        local function safeTimeExposure(uvIndex, skinType)
            local coef
            if      skinType == 6 then coef = 15
            elseif  skinType == 5 then coef = 8
            elseif  skinType == 4 then coef = 5
            elseif  skinType == 3 then coef = 4
            elseif  skinType == 2 then coef = 3
            else                       coef = 2.5 end
            local   time2Burn = domoticz.utils.round(( 200 * coef) / (3 * uvIndex))
            return  time2Burn
        end
        -- -- on device trigger
        local UVindex = device.uv 

        -- --on timer trigger
        --local UVindex = domoticz.devices(UVdevice).uv

        logWrite('UV index : '..UVindex)
        logWrite('safeTimeExposure : '..safeTimeExposure(UVindex,skinType)..' minutes')

    -- Construct Alertlevel and text and update UV alert device (type = Alert)
        if UVindex > 0 then 
            UV_AlertText = 'Exposition maximale : '..safeTimeExposure(UVindex,skinType)..' mn (peau type ' .. skinType ..')'
        else
            UV_AlertText = 'Exposition maximale : Pas de limite, index UV : '..UVindex
        end
        if UValertDevice ~= nil then
            if (domoticz.devices(UValertDevice).color ~= UV_Index2Alert(UVindex) or domoticz.devices(UValertDevice).lastUpdate.minutesAgo > 1440) then 
                domoticz.devices(UValertDevice).updateAlertSensor(UV_Index2Alert(UVindex), UV_AlertText) 
                logWrite('update alert device')
            else
                logWrite('no update needed')
            end
        end
    end
}


domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Gaz
Messages : 224
Inscription : 17 oct. 2015, 10:30

Re: DZVents : Alerte UV et temps d’exposition en toute sécurité

Message par Gaz »

Quel capteur d’UV tu utilises ?
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : Alerte UV et temps d’exposition en toute sécurité

Message par papoo »

Une uvn 800 de Oregon Scientific
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Gaz
Messages : 224
Inscription : 17 oct. 2015, 10:30

Re: DZVents : Alerte UV et temps d’exposition en toute sécurité

Message par Gaz »

Super, merci bien.
Gardaux
Messages : 109
Inscription : 05 oct. 2017, 13:42
Localisation : Bouches du Rhône

Re: DZVents : Alerte UV et temps d’exposition en toute sécurité

Message par Gardaux »

Bonjour,
Quel type d'interrupteur utilisez vous dans DOMOTICZ ?
Merci par avance
---------------------------------------------------------------------------------------------------
Domoticz + Raspberry Pi3 x2 + RFXCOM (IFTTT)
Domoticz + Synology + RFLink
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : Alerte UV et temps d’exposition en toute sécurité

Message par papoo »

@Gardaux
désolé je n'ai pas compris le sens de la question vis à vis des alertes UV. pourrais tu préciser?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Gardaux
Messages : 109
Inscription : 05 oct. 2017, 13:42
Localisation : Bouches du Rhône

Re: DZVents : Alerte UV et temps d’exposition en toute sécurité

Message par Gardaux »

Oups j'ai trouvé mon dispositif doit être du type "Alerte" ! :oops:
Désolé !!!
---------------------------------------------------------------------------------------------------
Domoticz + Raspberry Pi3 x2 + RFXCOM (IFTTT)
Domoticz + Synology + RFLink
pierre78@dom
Messages : 23
Inscription : 23 sept. 2019, 20:34

Re: DZVents : Alerte UV et temps d’exposition en toute sécurité

Message par pierre78@dom »

Bonsoir,
je suis votre communauté depuis quelques mois.
Merci tout d'abord pour tout ce travail et cette mine d'or laissée à disposition ;)
j'ai une petite question concernant ce script.
j'ai voulu l'utiliser avec le capteur UV de la météo de DARKSKY.
Sauf erreur de ma part, avec ce capteur, le script ne fonctionne pas.
J'ai le message d'erreur suivant:
2019-09-23 21:39:43.475 Error: EventSystem: in DIV ALERT UV: [string "--[[ UValert.lua ..."]:39: attempt to index global 'domoticz' (a nil value)
la ligne 39 correspond à: " logging = { level = domoticz.LOG_DEBUG, "
J'ai d'autres scripts avec cette "ligne" (récupéré sur ce site: exemple: icône des différentes lunes...) et ils fonctionnent donc je ne pense pas que l'erreur vienne de là.
J'ai crée ce script en LUA en mode DEVICE.
Je suis sur Raspberry PI3b+ Domoticz 4.10717
Je pense que le problème vient du capteur UV DARKSKY qui remonte une information sous forme :
"0.0;0.0" "4.0;4.0" (lorsque l'on va dans le panneau des script, qu'on les ferme tous pour voir la liste des capteurs et les états).

Existe t il un moyen de convertir cet index via un autre capteur virtuel ou autre?
Ou l'erreur vient d'autre part et j'ai fais une mauvaise manip?


Merci d'avance
Pierre
Raspberry PI3b+
-1 clé ZIGBEE2mQTT
-HONEYWELL 4 détecteurs feu
-AQARA 4 détecteurs fuite /4 capteurs température/5 capteurs fenêtre (2 pr alarme)
-PHILIPS HUE 3 dimmer/3 MOTIONS/6 ampoules blanc/3 bandes LED RGB
-SONOFF basic / POW r2
-SONOS 4 PLAY1
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : Alerte UV et temps d’exposition en toute sécurité

Message par papoo »

bizarre
dans le script d'origine la ligne 39 n'est pas celle la
aurais tu supprimer une partie du script avant de l’utiliser?
recommence peut etre en ne modifiant que la variable UVdevice en ligne 33

Code : Tout sélectionner

local UVdevice      = 'UV'          -- UV device name
pour l'adapter a ton device darksky
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
pierre78@dom
Messages : 23
Inscription : 23 sept. 2019, 20:34

Re: DZVents : Alerte UV et temps d’exposition en toute sécurité

Message par pierre78@dom »

Merci pour ce retour rapide.
j'ai recommencé, simplifier les noms mais rien n'y fait...
le capteur UV de DARSKY se nomme maintenant 'UV'
le capteur ALERTE UV crée à partir d'un matériel de type "dummy" est un périphérique de type "alerte" nommé "Alerte UV"
j'ai repris ton script sans rien changer.
Le capteur UV est actuellement sur 0 ... est-ce que cela a une incidence??
uv.PNG
uv.PNG (8.37 Kio) Consulté 4959 fois
le capteur Alerte UV est toujours gris et ne remonte pas d'informations
le fait de lancer le script ne change pas sa date de dernière mise à jour.
alerte uv.PNG
alerte uv.PNG (7.16 Kio) Consulté 4959 fois
et j'ai toujours le même message d"erreur dans les log:
log.PNG
log.PNG (27.69 Kio) Consulté 4959 fois
Cela ne peut pas être dû au device DARKSKY qui remonte la donnée "0.0 UVI"?
Capture1.PNG
Capture1.PNG (6.34 Kio) Consulté 4959 fois
Pour te répondre, oui j'avais supprimer de la 15 a la 25l qui ne me semblait pas obligatoire (étant donné qu'elles sont en verte...). Néanmoins je débute, j'ai peut-être mal compris certains points... Je suis tes publications depuis quelques semaines, j'apprends doucement :D et je te remercie encore une fois pour tous ces projets !

Cordialement
Pierre
Raspberry PI3b+
-1 clé ZIGBEE2mQTT
-HONEYWELL 4 détecteurs feu
-AQARA 4 détecteurs fuite /4 capteurs température/5 capteurs fenêtre (2 pr alarme)
-PHILIPS HUE 3 dimmer/3 MOTIONS/6 ampoules blanc/3 bandes LED RGB
-SONOFF basic / POW r2
-SONOS 4 PLAY1
Répondre