Page 1 sur 1

Aide noveau Domoticzien (alerteMeteoFrancePluie)

Publié : 29 avr. 2020, 08:43
par porto
Bonjour à tous,

Nouveau arrivé sur ce beau monde de la domotique mais ça ce complique !! :)
J'y connais pas grand chose en LUA, et en essayant quelques scripts je me suis rendu compte que ce n'est pas si simple que ça.

Exemple avec un des scripts de papo-o

https://github.com/papo-o/domoticz_scri ... ePluie.lua

J'ai créer les « Virtual Sensor » pour "Info Du Jour" et "Alerte Pluie" mais apparement il y a un probleme rien ne s'affiche et j'ai des messages d'erreur dans le log.
Dans Hardware j'ai cree des Dummy et les virtual sensor doivent etre de quel type ? Alert , Rain ?

Code : Tout sélectionner

 2020-04-29 08:30:01.607 Error: dzVents: Error: (3.0.1) météo France alerte pluie v3.03: Method updateText is not available for device "Info Du Jour" (deviceType=General, deviceSubType=Alert). If you believe this is not correct, please report.
2020-04-29 08:30:01.607 Error: dzVents: Error: (3.0.1) météo France alerte pluie v3.03: Method updateAlertSensor is not available for device "Alerte Pluie" (deviceType=Rain, deviceSubType=TFA). If you believe this is not correct, please report. 
Merci d'avance pour votre aide.
Soyez indulgent ce que pour vous c'est evident pour moi c'est l'obscurité totale, besoin donc de vos lumieres :idea: :idea: :D

Re: Aide noveau Domoticzien (alerteMeteoFrancePluie)

Publié : 29 avr. 2020, 11:34
par lavinch31
Bonjour Porto,

"Info Du Jour" est un capteur virtuel (dummy sensor) de type Texte
"Alerte Pluie" est un capteur virtuel ( dummy sensor) de type Alert

Re: Aide noveau Domoticzien (alerteMeteoFrancePluie)

Publié : 29 avr. 2020, 19:22
par porto
Bonjour,

@lavinch31 merci pour ce retour.
Je les ai crée et ils sont dans "devices" mais ils ne se actulisent pas, du a mon avis le message d'erreur dans le log, mais pourquoi ?

**Captures en piece jointe

Code : Tout sélectionner

2020-04-29 08:30:01.607 Error: dzVents: Error: (3.0.1) météo France alerte pluie v3.03: Method updateText is not available for device "Info Du Jour" (deviceType=General, deviceSubType=Alert). If you believe this is not correct, please report.
2020-04-29 08:30:01.607 Error: dzVents: Error: (3.0.1) météo France alerte pluie v3.03: Method updateAlertSensor is not available for device "Alerte Pluie" (deviceType=Rain, deviceSubType=TFA). If you believe this is not correct, please report.  
Cordialemnt

Re: Aide noveau Domoticzien (alerteMeteoFrancePluie)

Publié : 29 avr. 2020, 20:13
par denis_brasseur
Les 2 messages d'erreur portent bien sur la mise à jour des devices.
Il s'agit d'un code dzvents, et non pas lua en tant que tel.
Comment a tu créé ton script ? Quel type ?

Re: Aide noveau Domoticzien (alerteMeteoFrancePluie)

Publié : 29 avr. 2020, 21:12
par lavinch31
porto a écrit : 29 avr. 2020, 19:22 Bonjour,

@lavinch31 merci pour ce retour.
Je les ai crée et ils sont dans "devices" mais ils ne se actulisent pas, du a mon avis le message d'erreur dans le log, mais pourquoi ?

**Captures en piece jointe

Code : Tout sélectionner

2020-04-29 08:30:01.607 Error: dzVents: Error: (3.0.1) météo France alerte pluie v3.03: Method updateText is not available for device "Info Du Jour" (deviceType=General, deviceSubType=Alert). If you believe this is not correct, please report.
2020-04-29 08:30:01.607 Error: dzVents: Error: (3.0.1) météo France alerte pluie v3.03: Method updateAlertSensor is not available for device "Alerte Pluie" (deviceType=Rain, deviceSubType=TFA). If you believe this is not correct, please report.  
Cordialemnt

sur ta capture d'écran ,

- le device "info du jour" est de type "Alert" alors qu'il doit etre de type "Text"

- le device "Alerte pluie" est de type "Rain" alors qu'il doit etre de type "Alert"

selon tes log:

Code : Tout sélectionner

2020-04-29 08:30:01.607 Error: dzVents: Error: (3.0.1) météo France alerte pluie v3.03: Method updateText is not available for device "Info Du Jour" (deviceType=General, deviceSubType=Alert). If you believe this is not correct, please report.
-> le script cherche a mettre un jour le texte sur le device "info du jour" mais celui-ci est de type Alert , donc ça ne colle pas.

Code : Tout sélectionner

2020-04-29 08:30:01.607 Error: dzVents: Error: (3.0.1) météo France alerte pluie v3.03: Method updateAlertSensor is not available for device "Alerte Pluie" (deviceType=Rain, deviceSubType=TFA). If you believe this is not correct, please report.

-> le script cherche à mettre à jour le device "Alert Pluie" mais celui ci est est de type Rain , donc problème

Re: Aide noveau Domoticzien (alerteMeteoFrancePluie)

Publié : 30 avr. 2020, 08:58
par porto
Bonjour,

Merci beaucoup pour votre aide et le temps que vous consacrez a m'aider.

@denis_brasseur

Le script que j'essaie d'utiliser je l'ai telechargé ici: https://github.com/papo-o/domoticz_scri ... ts/scripts
Et je l'ai mis dans /home/pi/domoticz/scripts/dzVents/scripts

@lavinch31

En effet en mettant les choses comme elles doivent etre ça fonctionne mieux :lol: :lol: La c'est bon ;)

***Comment savoir quel type utiliser "Alert, Text, Rain ...." pour l' attribuer aux devices

Par exemple dans ce script :

horoscope.lua

Code : Tout sélectionner

--[[
name : horoscope.lua
auteur : papoo
Mise à jour : 31/03/2020
Création : 26/06/2016 =>V1.x https://github.com/papo-o/domoticz_scripts/blob/master/Lua/script_time_horoscope.lua
https://pon.fr/dzvents-horoscope-v2
https://easydomoticz.com/forum/viewtopic.php?f=17&t=9786
github : https://github.com/papo-o/domoticz_scripts/blob/master/dzVents/scripts/horoscope.lua
Principe :
Le script vérifie toutes les x heures les horoscopes du site  https://astro.rtl.fr/horoscope-jour-gratuit/ 
signe par signe et mets à jour les éventuels devices texte associés sur domoticz
Le texte est tronqué à ~ 240 caractères pour ne pas surcharger l'affichage. Les caractères html sont convertis

]]--
local les_horoscopes = {
            { device = 'Horoscope 1',  signe = 'belier'},
            { device = 'Horoscope 2',    signe = 'capricorne'},
            { device = 'Horoscope 3',  signe = 'vierge'},
            { device = 'Horoscope 4',    signe = 'balance'},
                        }

local site_url  = 'https://astro.rtl.fr/horoscope-jour-gratuit'  -- url
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local scriptName        = 'Horoscope'
local scriptVersion     = '2.01'

return {
    active = true,
    on  =   {
        timer           =   { 'every 6 hours' },--https://www.domoticz.com/wiki/DzVents:_next_generation_LUA_scripting#timer_trigger_rules
        httpResponses   =   { 'belier','taureau','gemeaux','cancer','lion','vierge','balance','scorpion','sagittaire','capricorne','verseau','poissons' }    -- Trigger
        --httpResponses   =   { 'cancer','capricorne' }    -- Trigger
    },
     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(dz, item)

        local function logWrite(str,level)              -- Support function for shorthand debug log statements
            dz.log(tostring(str),level or dz.LOG_DEBUG)
        end
--------------------------------------------
        local function TronquerTexte(texte, nb)  -- texte à tronquer, Nb maximum de caractère
        local sep ="[?;!.]"
        local DernierIndex = nil
        texte = string.sub(texte, 1, nb)
        local p = string.find(texte, sep, 1)
        DernierIndex = p
        while p do
            p = string.find(texte, sep, p + 1)
            if p then
                DernierIndex = p
            end
        end
        return(string.sub(texte, 1, DernierIndex))
        end
--------------------------------------------
function unescape(str)--remplace le code html
    if (str) then
        local ascii =  {
        [' '] =' ', ['¡'] ='¡', ['¢'] ='¢', ['£'] ='£', ['¤'] ='¤', ['¥'] ='¥', ['¦'] ='¦', ['§'] ='§', ['¨'] ='¨', ['©'] ='©', ['ª'] ='ª', ['«'] ='«', ['¬'] ='¬', ['­'] ='­',
        ['®'] ='®', ['¯'] ='¯', ['°'] ='°', ['±'] ='±', ['²'] ='²', ['³'] ='³', ['´'] ='´', ['µ'] ='µ', ['¶'] ='¶', ['·'] ='·', ['¸'] ='¸', ['¹'] ='¹', ['º'] ='º', ['»'] ='»',
        ['¼'] ='¼', ['½'] ='½', ['¾'] ='¾', ['¿'] ='¿', ['À'] ='À', ['Á'] ='Á', ['Â'] ='Â', ['Ã'] ='Ã', ['Ä'] ='Ä', ['Å'] ='Å', ['Æ'] ='Æ', ['Ç'] ='Ç', ['È'] ='È', ['É'] ='É',
        ['Ê'] ='Ê', ['Ë'] ='Ë', ['Ì'] ='Ì', ['Í'] ='Í', ['Î'] ='Î', ['Ï'] ='Ï', ['Ð'] ='Ð', ['Ñ'] ='Ñ', ['Ò'] ='Ò', ['Ó'] ='Ó', ['Ô'] ='Ô', ['Õ'] ='Õ', ['Ö'] ='Ö', ['×'] ='×',
        ['Ø'] ='Ø', ['Ù'] ='Ù', ['Ú'] ='Ú', ['Û'] ='Û', ['Ü'] ='Ü', ['Ý'] ='Ý', ['Þ'] ='Þ', ['ß'] ='ß', ['à'] ='à', ['á'] ='á', ['â'] ='â', ['ã'] ='ã', ['ä'] ='ä', ['å'] ='å',
        ['æ'] ='æ', ['ç'] ='ç', ['è'] ='è', ['é'] ='é', ['ê'] ='ê', ['ë'] ='ë', ['ì'] ='ì', ['í'] ='í', ['î'] ='î', ['ï'] ='ï', ['ð'] ='ð', ['ñ'] ='ñ', ['ò'] ='ò', ['ó'] ='ó',
        ['ô'] ='ô', ['õ'] ='õ', ['ö'] ='ö', ['÷'] ='÷', ['ø'] ='ø', ['ù'] ='ù', ['ú'] ='ú', ['û'] ='û', ['ü'] ='ü', ['ý'] ='ý', ['þ'] ='þ', ['ÿ'] ='ÿ', ['€'] ='€',['''] = "'" , ['"'] = '"', ['&']='&'
        }
        for code, char in pairs(ascii) do 
            str = str:gsub(code, char )
        end
        return str
    end
end

--------------------------------------------
        if (item.isTimer) then
            for index,record in pairs(les_horoscopes) do-- On parcourt chaque horoscope
                device = record.device
                if device ~= nil and device ~= '' and dz.devices(device).name ~= nil then
                    logWrite('--- --- --- traitement '..device..'  --- --- --')
                    signe = record.signe
                    dz.openURL({--https://www.domoticz.com/wiki/DzVents:_next_generation_LUA_scripting#httpResponses
                        url = site_url..'/'..signe,
                        callback = signe
                    })
                end
            end --for
        end

        if (item.isHTTPResponse and item.ok) then
                    logWrite('--- --- --- traitement   --- --- --')
            for index,record in pairs(les_horoscopes) do-- On parcourt chaque horoscope
                device = record.device
                if dz.utils.deviceExists(record.device) then
                    logWrite('--- --- --- traitement '..device..'  --- --- --')
                    signe = record.signe
                    if item.trigger == signe then
                        logWrite('--- --- --- traitement signe '..item.trigger..'  --- --- --')
                        for instance in item.data:gmatch("<body>(.-)</body>") do
                            div, horoscope=instance:match('<h2>En résumé</h2>(.-)<p class="text">(.-)</p>')
                        end
                        horoscope = TronquerTexte(unescape(horoscope), 240)
                        logWrite(horoscope)
                        dz.devices(record.device).updateText(horoscope or 'Pas d\'horoscope aujourd\'hui') 
                    end
                end
            end --for
        end

     end
    }

Cordialement

Re: Aide noveau Domoticzien (alerteMeteoFrancePluie)

Publié : 30 avr. 2020, 12:26
par lavinch31
porto a écrit : 30 avr. 2020, 08:58
***Comment savoir quel type utiliser "Alert, Text, Rain ...." pour l' attribuer aux devices

Par exemple dans ce script :

horoscope.lua

Code : Tout sélectionner

--[[
name : horoscope.lua
auteur : papoo
Mise à jour : 31/03/2020
Création : 26/06/2016 =>V1.x https://github.com/papo-o/domoticz_scripts/blob/master/Lua/script_time_horoscope.lua
https://pon.fr/dzvents-horoscope-v2
https://easydomoticz.com/forum/viewtopic.php?f=17&t=9786
github : https://github.com/papo-o/domoticz_scripts/blob/master/dzVents/scripts/horoscope.lua
Principe :
Le script vérifie toutes les x heures les horoscopes du site  https://astro.rtl.fr/horoscope-jour-gratuit/ 
signe par signe et mets à jour les éventuels devices texte associés sur domoticz
Le texte est tronqué à ~ 240 caractères pour ne pas surcharger l'affichage. Les caractères html sont convertis

]]--
local les_horoscopes = {
            { device = 'Horoscope 1',  signe = 'belier'},
            { device = 'Horoscope 2',    signe = 'capricorne'},
            { device = 'Horoscope 3',  signe = 'vierge'},
            { device = 'Horoscope 4',    signe = 'balance'},
                        }

local site_url  = 'https://astro.rtl.fr/horoscope-jour-gratuit'  -- url
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local scriptName        = 'Horoscope'
local scriptVersion     = '2.01'

return {
    active = true,
    on  =   {
        timer           =   { 'every 6 hours' },--https://www.domoticz.com/wiki/DzVents:_next_generation_LUA_scripting#timer_trigger_rules
        httpResponses   =   { 'belier','taureau','gemeaux','cancer','lion','vierge','balance','scorpion','sagittaire','capricorne','verseau','poissons' }    -- Trigger
        --httpResponses   =   { 'cancer','capricorne' }    -- Trigger
    },
     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(dz, item)

        local function logWrite(str,level)              -- Support function for shorthand debug log statements
            dz.log(tostring(str),level or dz.LOG_DEBUG)
        end
--------------------------------------------
        local function TronquerTexte(texte, nb)  -- texte à tronquer, Nb maximum de caractère
        local sep ="[?;!.]"
        local DernierIndex = nil
        texte = string.sub(texte, 1, nb)
        local p = string.find(texte, sep, 1)
        DernierIndex = p
        while p do
            p = string.find(texte, sep, p + 1)
            if p then
                DernierIndex = p
            end
        end
        return(string.sub(texte, 1, DernierIndex))
        end
--------------------------------------------
function unescape(str)--remplace le code html
    if (str) then
        local ascii =  {
        ['&nbsp;'] =' ', ['&iexcl;'] ='¡', ['&cent;'] ='¢', ['&pound;'] ='£', ['&curren;'] ='¤', ['&yen;'] ='¥', ['&brvbar;'] ='¦', ['&sect;'] ='§', ['&uml;'] ='¨', ['&copy;'] ='©', ['&ordf;'] ='ª', ['&laquo;'] ='«', ['&not;'] ='¬', ['&shy;'] ='­',
        ['&reg;'] ='®', ['&macr;'] ='¯', ['&deg;'] ='°', ['&plusmn;'] ='±', ['&sup2;'] ='²', ['&sup3;'] ='³', ['&acute;'] ='´', ['&micro;'] ='µ', ['&para;'] ='¶', ['&middot;'] ='·', ['&cedil;'] ='¸', ['&sup1;'] ='¹', ['&ordm;'] ='º', ['&raquo;'] ='»',
        ['&frac14;'] ='¼', ['&frac12;'] ='½', ['&frac34;'] ='¾', ['&iquest;'] ='¿', ['&Agrave;'] ='À', ['&Aacute;'] ='Á', ['&Acirc;'] ='Â', ['&Atilde;'] ='Ã', ['&Auml;'] ='Ä', ['&Aring;'] ='Å', ['&AElig;'] ='Æ', ['&Ccedil;'] ='Ç', ['&Egrave;'] ='È', ['&Eacute;'] ='É',
        ['&Ecirc;'] ='Ê', ['&Euml;'] ='Ë', ['&Igrave;'] ='Ì', ['&Iacute;'] ='Í', ['&Icirc;'] ='Î', ['&Iuml;'] ='Ï', ['&ETH;'] ='Ð', ['&Ntilde;'] ='Ñ', ['&Ograve;'] ='Ò', ['&Oacute;'] ='Ó', ['&Ocirc;'] ='Ô', ['&Otilde;'] ='Õ', ['&Ouml;'] ='Ö', ['&times;'] ='×',
        ['&Oslash;'] ='Ø', ['&Ugrave;'] ='Ù', ['&Uacute;'] ='Ú', ['&Ucirc;'] ='Û', ['&Uuml;'] ='Ü', ['&Yacute;'] ='Ý', ['&THORN;'] ='Þ', ['&szlig;'] ='ß', ['&agrave;'] ='à', ['&aacute;'] ='á', ['&acirc;'] ='â', ['&atilde;'] ='ã', ['&auml;'] ='ä', ['&aring;'] ='å',
        ['&aelig;'] ='æ', ['&ccedil;'] ='ç', ['&egrave;'] ='è', ['&eacute;'] ='é', ['&ecirc;'] ='ê', ['&euml;'] ='ë', ['&igrave;'] ='ì', ['&iacute;'] ='í', ['&icirc;'] ='î', ['&iuml;'] ='ï', ['&eth;'] ='ð', ['&ntilde;'] ='ñ', ['&ograve;'] ='ò', ['&oacute;'] ='ó',
        ['&ocirc;'] ='ô', ['&otilde;'] ='õ', ['&ouml;'] ='ö', ['&divide;'] ='÷', ['&oslash;'] ='ø', ['&ugrave;'] ='ù', ['&uacute;'] ='ú', ['&ucirc;'] ='û', ['&uuml;'] ='ü', ['&yacute;'] ='ý', ['&thorn;'] ='þ', ['&yuml;'] ='ÿ', ['&euro;'] ='€',['&#039;'] = "'" , ['&#034;'] = '"', ['&amp;']='&'
        }
        for code, char in pairs(ascii) do 
            str = str:gsub(code, char )
        end
        return str
    end
end

--------------------------------------------
        if (item.isTimer) then
            for index,record in pairs(les_horoscopes) do-- On parcourt chaque horoscope
                device = record.device
                if device ~= nil and device ~= '' and dz.devices(device).name ~= nil then
                    logWrite('--- --- --- traitement '..device..'  --- --- --')
                    signe = record.signe
                    dz.openURL({--https://www.domoticz.com/wiki/DzVents:_next_generation_LUA_scripting#httpResponses
                        url = site_url..'/'..signe,
                        callback = signe
                    })
                end
            end --for
        end

        if (item.isHTTPResponse and item.ok) then
                    logWrite('--- --- --- traitement   --- --- --')
            for index,record in pairs(les_horoscopes) do-- On parcourt chaque horoscope
                device = record.device
                if dz.utils.deviceExists(record.device) then
                    logWrite('--- --- --- traitement '..device..'  --- --- --')
                    signe = record.signe
                    if item.trigger == signe then
                        logWrite('--- --- --- traitement signe '..item.trigger..'  --- --- --')
                        for instance in item.data:gmatch("<body>(.-)</body>") do
                            div, horoscope=instance:match('<h2>En résumé</h2>(.-)<p class="text">(.-)</p>')
                        end
                        horoscope = TronquerTexte(unescape(horoscope), 240)
                        logWrite(horoscope)
                        dz.devices(record.device).updateText(horoscope or 'Pas d\'horoscope aujourd\'hui') 
                    end
                end
            end --for
        end

     end
    }
il faut fouiller dans le script, souvent l'info est dispo dans les commentaires du script.

en l’occurrence pour ce script l'info est au debut :

Code : Tout sélectionner

 .......mets à jour les éventuels devices texte associés sur domoticz........

Re: Aide noveau Domoticzien (alerteMeteoFrancePluie)

Publié : 30 avr. 2020, 17:46
par porto
@lavinch31
Merci beaucoup pour cette aide precieuse.
L'apprentissage est surement long mais avec l'aide de la communauté on y prends gout :D
Beaucoup de scripts interessants

Re: Aide noveau Domoticzien (alerteMeteoFrancePluie)

Publié : 02 mai 2020, 12:05
par aspro
Hello, un grand merci pour ces échanges, je viens d'installer le tout et ça fonctionne bien.
Bon, j'avoue humblement que Alerte pluie n'a fonctionné qu'après de lonnnnnngues minutes où je me suis finalement aperçu que : "Alerte pluie" et Alerte Pluie", c'était pas totalement la même chose... no comment, merci :lol: