papo-o / domoticz_scripts

DZvents, LUA, Python and Shell scripts for Domoticz
https://pon.fr
37 stars 36 forks source link

2019-11-08 07:04:00.558 Error: EventSystem: in script_device_givre.lua: [string "--[[ ..."]:128: attempt to compare nil with number #3

Closed romain1206 closed 5 years ago

romain1206 commented 5 years ago

bonjour,

j'ai cette erreur qui reviens chaque minute

 2019-11-08 21:50:34.995 Error: EventSystem: in alerteGivre.lua: [string "--[[..."]:37: attempt to index global 'domoticz' (a nil value) 

voici l'extrait

` 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 },`

merci d'avance

papo-o commented 5 years ago

Bonjour Romain pourrais tu poster l'ensemble de ton script modifié stp? l'extrait que tu posts est une partie de script dzvents alors que tu nous indique que ton problème est sur un script purement LUA, script_device_givre.lua

papo-o commented 5 years ago

tu peux aussi commenter complètement logging voir si cela résoud ton problème

-- 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 },
papo-o commented 5 years ago

si tu utilises le script DZvents alerteGivre.lua, il doit être placé dans le répertoire /home/pi/domoticz/scripts/dzVents/scripts/

romain1206 commented 5 years ago

voila le script complet

`--[[ ~/home/pi/domoticz/scripts/dzVents/scripts/alerteGivre.lua auteur : papoo MAJ : 05/05/2019 création : 06/05/2016 Principe : Calculer via les informations température et hygrométrie d'une sonde extérieure le point de rosée, le point de givre et l'humidité absolue pour générer une alerte givre cohérente. http://pon.fr/dzvents-alerte-givre-et-calcul-humidite-absolue http://easydomoticz.com/forum/viewtopic.php?f=21&t=1085&start=10#p17545 https://github.com/papo-o/domoticz_scripts/blob/master/dzVents/scripts/alerteGivre.lua ]]--


------------ Variables à éditer ------------

local device_temp_ext = 'temp_humidite_barometre' -- nom (entre ' ') ou idx de la sonde de température/humidité extérieure local device_dew_point = nil -- nom (entre ' ') ou idx de l'éventuel dummy température point de rosée si vous souhaitez le suivre sinon nil local device_freeze_point = 'point_de_givre' -- nom (entre ' ') ou idx du dummy température point de givre si vous souhaitez le suivre sinon nil local device_hum_abs = 'Humidité absolue' -- nom (entre ' ') ou idx de l'éventuel dummy humidité absolue si vous souhaitez le suivre sinon nil local device_freeze_alert = 'alerte_givre' -- nom (entre ' ') ou idx du dummy alert point de givre local thresholdHumidity = 2.8 -- seuil humidité absolue en dessous duquel il est peu probable qu'il givre local subject = "/!\ Attention /!\" -- sujet des notifications local scriptName = 'Alerte Givre' local scriptVersion = '2.2' local message = '.'

return { active = true, -- false, on = { timer = { 'at 22:00', 'at 07:01', 'at 07:15'}, -- heures de déclenchement des notifications en cas de givre devices = { device_temp_ext } -- nom de la sonde de température/humidité extérieure' },

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, item)

    local SubSystem = "TELEGRAM"
                        --[[ Systèmes de notification disponibles :
                            GOOGLE_CLOUD_MESSAGING, HTTP, KODI, LOGITECH_MEDIASERVER, NMA, PROWL, PUSHALOT, PUSHBULLET,PUSHOVER, PUSHSAFER, TELEGRAM
                            Pour une notification sur plusieurs systèmes, séparez les systèmes par une virgule.
                            Exemple :"PUSHBULLET, HTTP"
                        --]]

----------- Fin variables à éditer ---------

    function split(s, delimiter)
    result = {};
    for match in (s..delimiter):gmatch("(.-)"..delimiter) do
        table.insert(result, match);
    end

    return result;
    end
    function notificationTable(str)
    --NSS_GOOGLE_CLOUD_MESSAGING, NSS_HTTP, NSS_KODI, NSS_LOGITECH_MEDIASERVER, NSS_NMA,NSS_PROWL, NSS_PUSHALOT, NSS_PUSHBULLET, NSS_PUSHOVER, NSS_PUSHSAFER, NSS_TELEGRAM

        if (str) then
        str = string.gsub (str,"GCM", domoticz.NSS_GOOGLE_CLOUD_MESSAGING)
        str = string.gsub (str,"GOOGLE_CLOUD_MESSAGING", domoticz.NSS_GOOGLE_CLOUD_MESSAGING)
        str = string.gsub (str,"HTTP", domoticz.NSS_HTTP)
        str = string.gsub (str,"LMS", domoticz.NSS_LOGITECH_MEDIASERVER)
        str = string.gsub (str,"LOGITECH_MEDIASERVER", domoticz.NSS_LOGITECH_MEDIASERVER)
        str = string.gsub (str,"NMA", domoticz.NSS_NMA)
        str = string.gsub (str,"PROWL", domoticz.NSS_PROWL)
        str = string.gsub (str,"PUSHALOT", domoticz.NSS_PUSHALOT)
        str = string.gsub (str,"PUSHOVER", domoticz.NSS_PUSHOVER)
        str = string.gsub (str,"PUSHSAFER", domoticz.NSS_PUSHSAFER)
        str = string.gsub (str,"PUSHBULLET", domoticz.NSS_PUSHBULLET)
        str = string.gsub (str,"TELEGRAM", domoticz.NSS_TELEGRAM)
        end
    return (split(str,','))
    end

    function freezing_point(dp, t)
        if not dp or not t or dp > t then
            return nil, " La température du point de rosée est supérieure à la température. Puisque la température du point de rosée ne peut être supérieure à la température de l'air , l\'humidité relative a été fixée à nil."
        end
        T = t + 273.15
        Td = dp + 273.15
        return domoticz.utils.round((Td + (2671.02 /((2954.61/T) + 2.193665 * math.log(T) - 13.3448))-T)-273.15, 2)
    end

    function hum_abs(t,hr)
        -- https://carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-humidity-to-absolute-humidity/
        -- Formule pour calculer l'humidité absolue
        -- Dans la formule ci-dessous, la température (T) est exprimée en degrés Celsius, l'humidité relative (hr) est exprimée en %, et e est la base des logarithmes naturels 2.71828 [élevée à la puissance du contenu des crochets]:
        -- Humidité absolue (grammes / m3 ) =  (6,122 * e^[(17,67 * T) / (T + 243,5)] * rh * 2,1674))/(273,15 + T)
        -- Cette formule est précise à 0,1% près, dans la gamme de température de -30 ° C à + 35 ° C
        ha = domoticz.utils.round((6.112 * math.exp((17.67 * t)/(t+243.5)) * hr * 2.1674)/ (273.15 + t),1)
        return ha
    end

    temperature = domoticz.devices(device_temp_ext).temperature
    humidity = domoticz.devices(device_temp_ext).humidity
    dewPoint = domoticz.utils.round(domoticz.devices(device_temp_ext).dewPoint, 2)
    freezingPoint = freezing_point(dewPoint, temperature)
    absHumidity = hum_abs(temperature,humidity)
    domoticz.log("--- --- --- Température Ext :     ".. domoticz.utils.round(temperature, 2) .." °C", domoticz.LOG_DEBUG)
    domoticz.log("--- --- --- Humidité :            ".. humidity .." %", domoticz.LOG_DEBUG)
    domoticz.log("--- --- --- point de rosée :      ".. dewPoint .." °C", domoticz.LOG_DEBUG)
    domoticz.log("--- --- --- point de givre :      ".. freezingPoint .." °C", domoticz.LOG_DEBUG)
    domoticz.log("--- --- --- Humidité Absolue :    ".. absHumidity .." g/m³", domoticz.LOG_DEBUG)

    if device_dew_point    ~= nil  then domoticz.devices(device_dew_point).updateTemperature(dewPoint) end -- Mise à jour point de rosée
    if device_freeze_point ~= nil  then domoticz.devices(device_freeze_point).updateTemperature(freezingPoint) end -- Mise à jour point de givrage
    if device_hum_abs      ~= nil  then domoticz.devices(device_hum_abs).updateCustomSensor(absHumidity) end -- Mise à jour humidité absolue

    if(tonumber(temperature) <= 1 and tonumber(freezingPoint) <= 0) and absHumidity > thresholdHumidity then
        domoticz.log("--- --- --- Givre --- --- ---", domoticz.LOG_DEBUG)
        message = "Présence de givre"
        if tonumber(domoticz.devices(device_freeze_alert).color) ~= 4 then domoticz.devices(device_freeze_alert).updateAlertSensor(domoticz.ALERTLEVEL_RED, freezingPoint.."°C") end

    elseif(tonumber(temperature) <= 1 and tonumber(freezingPoint) <= 0) and absHumidity < thresholdHumidity then
        domoticz.log("--- --- --- Givre peu probable --- --- ---", domoticz.LOG_DEBUG)
        message = "Givre peu probable malgré la température"
        if tonumber(domoticz.devices(device_freeze_alert).color) ~= 3 then domoticz.devices(device_freeze_alert).updateAlertSensor(domoticz.ALERTLEVEL_YELLOW, freezingPoint.."°C") end

    elseif(tonumber(temperature) <= 3 and tonumber(freezingPoint) <= 0 )then
        domoticz.log("--- --- --- Risque de Givre --- --- ---", domoticz.LOG_DEBUG)
        message = "Risque de givre"
        if tonumber(domoticz.devices(device_freeze_alert).color) ~= 2 then domoticz.devices(device_freeze_alert).updateAlertSensor(domoticz.ALERTLEVEL_ORANGE, freezingPoint.."°C") end
    else
        domoticz.log("--- --- --- Aucun risque de Givre --- --- ---", domoticz.LOG_DEBUG)
        message = nil
        if tonumber(domoticz.devices(device_freeze_alert).color) ~= 1 then domoticz.devices(device_freeze_alert).updateAlertSensor(domoticz.ALERTLEVEL_GREEN, 'Pas de givre') end
    end

    --if ((item.trigger == 'at 06:25') or (item.trigger == 'at 07:01') or (item.trigger == 'at 07:15')) and message ~= nil then
    if (item.isTimer) then domoticz.log("--- --- --- La règle qui a déclenché l'événement était :".. item.trigger .." --- --- ---", domoticz.LOG_DEBUG) end
    if (item.isTimer) and (message ~= nil) then
        domoticz.log("--- --- --- notification alerte Givre --- --- ---", domoticz.LOG_DEBUG)
        if SubSystem == nil then
            domoticz.notify(subject, message)
        else
        domoticz.notify(subject, message, domoticz.PRIORITY_NORMAL, domoticz.SOUND_INTERMISSION,"",  notificationTable(SubSystem))
        end
    end

end } `

pour créer le script, j'ai simplement créer depuis l'interface domoticz (bouton+ lua - time)

j'ai bien essayé de commenter la partie logging mais j'ai cette erreur

2019-11-10 10:54:00.530 Error: EventSystem: Lua script alerteGivre.lua did not return a commandArray

romain1206 commented 5 years ago

en commentant complétement la partie logging, j'ai cette erreur

2019-11-10 10:55:00.520 Error: EventSystem: in alerteGivre.lua: [string "--[[..."]:44: expected near '='

papo-o commented 5 years ago

il y a deux types de script LUA 1 ceux en pur LUA commençant par script_time ou script_device 2 ceux utilisant le framework DZvents. alerteGivre.lua est un script DZvents.

je pense que tu utilises l’éditeur interne à domoticz si c'est le cas il te faut recréer un script dzvents de type timer et non un script lua de type timer 2019-11-10 11_37_17-Window

romain1206 commented 5 years ago

je te remercie de tes explications, ca fonctionne parfaitement maintenant

2019-11-10 13:25:00.216 Status: dzVents: Debug: Alerte Givre v2.2: --- --- --- Température Ext : 9.2 °C 2019-11-10 13:25:00.216 Status: dzVents: Debug: Alerte Givre v2.2: --- --- --- Humidité : 75 % 2019-11-10 13:25:00.216 Status: dzVents: Debug: Alerte Givre v2.2: --- --- --- point de rosée : 5 °C 2019-11-10 13:25:00.216 Status: dzVents: Debug: Alerte Givre v2.2: --- --- --- point de givre : 3.85 °C 2019-11-10 13:25:00.217 Status: dzVents: Debug: Alerte Givre v2.2: --- --- --- Humidité Absolue : 6.7 g/m³ 2019-11-10 13:25:00.217 Status: dzVents: Debug: Alerte Givre v2.2: Processing device-adapter for point_de_givre: Temperature device adapter 2019-11-10 13:25:00.218 Status: dzVents: Debug: Alerte Givre v2.2: Processing device-adapter for Humidité absolue: Custom sensor device adapter 2019-11-10 13:25:00.218 Status: dzVents: Debug: Alerte Givre v2.2: --- --- --- Aucun risque de Givre --- --- --- 2019-11-10 13:25:00.218 Status: dzVents: Debug: Alerte Givre v2.2: Processing device-adapter for alerte_givre: Alert sensor adapter 2019-11-10 13:25:00.218 Status: dzVents: Debug: Alerte Givre v2.2: --- --- --- La règle qui a déclenché l'événement était :at 13:25 --- --- --- 2019-11-10 13:25:00.218 Status: dzVents: Info: Alerte Givre v2.2: ------ Finished alerteGivre1 2019-11-10 13:25:00.219 Status: EventSystem: Script event triggered: /var/domoticz/dzVents/runtime/dzVents.lua comment on reconnait un script dz events ?

papo-o commented 5 years ago

un script dzvents ne comporte pas de commandArray et sont nom ne commence pas par script_

romain1206 commented 5 years ago

merci de ces informations, j'ai appris des choses

et un grand merci de partager tes scripts

papo-o commented 5 years ago

heureux que cela fonctionne pour toi