[LUA] Calcul de DJU méthode Costic V2 avec création automatique du device

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 :

[LUA] Calcul de DJU méthode Costic V2 avec création automatique du device

Message par papoo »

je vous ai déjà proposé un script un peu compliqué pour que domoticz calcul les DJU chauffage, afin de pouvoir comparer votre consommation d’énergie selon la rigueur climatique de votre lieu de résidence.

Pourquoi un nouveau script alors que le précédent fonctionne très bien?
Pour le simplifier et permettre à tous de l'installer sans peine.

Il n'y a plus qu'un seul fichier à mettre en place et le device se créé automatiquement.


je vous rappelle le principe :
Un degré jour est calculé à partir des températures météorologiques extrêmes du lieu et du jour J : 
- Tn : température minimale du jour J mesurée à 2 mètres du sol sous abri et relevée entre J-1 (la veille) à 18h et J à 18h UTC. 
- Tx : température maximale du jour J mesurée à 2 mètres du sol sous abri et relevée entre J à 6h et J+1 (le lendemain) à 6h UTC. 
- S : seuil de température de référence choisi. 
- Moy = (Tn + Tx)/2 Température Moyenne de la journée
Pour un calcul de déficits de température par rapport au seuil choisi : 
- Si S > TX (cas fréquent en hiver) : DJ = S - Moy 
- Si S ≤ TN (cas exceptionnel en début ou en fin de saison de chauffe) : DJ = 0 
- Si TN < S ≤ TX (cas possible en début ou en fin de saison de chauffe) : DJ = ( S –TN ) * (0.08 + 0.42 * ( S –TN ) / ( TX – TN ))
<br>

Vous l'avez compris, il nous faut donc pour calculer les DJU d'une sonde extérieure placée sur l'exposition la plus défavorable (généralement la façade nord) à l'abri du soleil, si possible sous abri.
Mais si vous n'en disposez pas, la température extérieure donnée par DarkSky (par exemple) fonctionne aussi très bien. c'est d'ailleurs ma configuration sur mon PI de test.
pensez à éditer le nom de votre device température extérieure dans le script

Code : Tout sélectionner

local temp_ext  = 'Temperature exterieure' 	        -- nom de la sonde de température extérieure
le résultat en graphique
DJU methode costic.png
DJU methode costic.png (90.99 Kio) Consulté 9812 fois
Le script script_time_dju_methode_costic.lua est à placer dans votre répertoire /domoticz/scripts/lua/

Code : Tout sélectionner

--[[   
~/domoticz/scripts/lua/script_time_dju_methode_costic.lua
auteur : papoo
MAJ : 24/02/2018
création : 29/01/2018
Principe :
Calculer, via l'information température d'une sonde extérieure, les Degrés jour Chauffage méthode COSTIC

Création automatique du device compteur et des variables nécessaire au fonctionnement de ce script.
Seul pré-requis à la création d'un device par ce script, l'existence d'un hardware dummy dans votre domoticz.
Pour cela, uploadez ou créez ce script dans le répertoire domoticz/scripts/lua/ 
éditer éventuellement les noms des devices à créer, passez la variable script_actif à true, sauvegardez et vérifiez vos logs.

Un degré jour est calculé à partir des températures météorologiques extrêmes du lieu et du jour J : 
- Tn : température minimale du jour J mesurée à 2 mètres du sol sous abri et relevée entre J-1 (la veille) à 18h et J à 18h UTC. 
- Tx : température maximale du jour J mesurée à 2 mètres du sol sous abri et relevée entre J à 6h et J+1 (le lendemain) à 6h UTC. 
- S : seuil de température de référence choisi. 
- Moy = (Tn + Tx)/2 Température Moyenne de la journée
Pour un calcul de déficits  de température par rapport au seuil choisi : 
- Si S > TX (cas fréquent en hiver) : DJ = S - Moy 
- Si S ≤ TN (cas exceptionnel en début ou en fin de saison de chauffe) : DJ = 0 
- Si TN < S ≤ TX (cas possible en début ou en fin de saison de chauffe) : DJ = ( S – TN ) * (0.08 + 0.42 * ( S –TN ) / ( TX – TN ))


https://github.com/papo-o/domoticz_scripts/blob/master/Lua/script_time_dju_methode_costic.lua
https://pon.fr/calcul-de-dju-methode-costic/
http://easydomoticz.com/forum/viewtopic.php?f=17&t=5984
--]]
--------------------------------------------
------------ Variables à éditer ------------
-------------------------------------------- 
local debugging = false  			                -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local script_actif = true                           -- active (true) ou désactive (false) ce script simplement
local temp_ext  = 'Temperature exterieure' 	        -- nom de la sonde de température extérieure
local domoticzURL = '127.0.0.1:8080'                -- user:pass@ip:port de domoticz
local var_user_djc = 'dju_methode_costic'           -- nom de la variable utilisateur de type 2 (chaine) pour le stockage temporaire des données journalières DJC
local Tn = "Tn_methode_costic"                      -- température maximale du jour J relevée entre J à 6h et J+1 (le lendemain) à 6h UTC
local Tx = "Tx_methode_costic"                      -- température minimale du jour J relevée entre J-1 (la veille) à 18h et J à 18h UTC.
local Tn_hold = "Tn_Hold_methode_costic"            -- variable de stockage de la température mini.
local S = 18                                        -- seuil de température de non chauffage, par convention : 18°C
local cpt_djc = 'DJU méthode COSTIC' 				-- nom du  dummy compteur DJC en degré


--------------------------------------------
----------- Fin variables à éditer ---------
-------------------------------------------- 
commandArray = {}
local nom_script = 'Calcul Degrés jour Chauffage méthode COSTIC'
local version = '1.02'
local id
local djc

time=os.date("*t")

--------------------------------------------
---------------- Fonctions -----------------
-------------------------------------------- 
curl = '/usr/bin/curl -m 9 '
if (package.config:sub(1,1) == '/') then
     luaDir = debug.getinfo(1).source:match("@?(.*/)")
else
     luaDir = string.gsub(debug.getinfo(1).source:match("@?(.*\\)"),'\\','\\\\')
end
json = assert(loadfile(luaDir..'JSON.lua'))()-- chargement du fichier JSON.lua

--==============================================================================================
function voir_les_logs (s, debugging)
    if (debugging) then 
		if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>");
		else
		print ("<font color='#f3031d'>aucune valeur affichable</font>");
		end
    end
end	

--==============================================================================================
function round(value, digits)
	if not value or not digits then
		return nil
	end
		local precision = 10^digits
        return (value >= 0) and
		  (math.floor(value * precision + 0.5) / precision) or
		  (math.ceil(value * precision - 0.5) / precision)
end

--============================================================================================== 
function url_encode(str) -- encode la chaine str pour la passer dans une url 
   if (str) then
   str = string.gsub (str, "\n", "\r\n")
   str = string.gsub (str, "([^%w ])",
   function (c) return string.format ("%%%02X", string.byte(c)) end)
   str = string.gsub (str, " ", "+")
   end
   return str
end

--============================================================================================== 
function creaVar(vname,vtype,vvalue) -- pour créer une variable de type 2 nommée toto comprenant la valeur 10
	os.execute(curl..'"'.. domoticzURL ..'/json.htm?type=command&param=saveuservariable&vname='..url_encode(vname)..'&vtype='..vtype..'&vvalue='..url_encode(vvalue)..'" &')
end -- usage :  creaVar('toto','2','10') 

--==============================================================================================
function DeviceInfos(device)  
    --[[
    inspiré de  http://www.domoticz.com/forum/viewtopic.php?f=61&t=15556&p=115795&hilit=otherdevices_SwitchTypeVal&sid=dda0949f5f3d71cb296b865a14827a34#p115795
    Attributs disponibles :
    AddjMulti; AddjMulti2; AddjValue; AddjValue2; BatteryLevel; CustomImage; Data; Description; Favorite; 
    HardwareID; HardwareName; HardwareType; HardwareTypeVal; HaveDimmer; HaveGroupCmd; HaveTimeout; ID; 
    Image; IsSubDevice; LastUpdate; Level; LevelInt; MaxDimLevel; Name; Notifications; PlanID; PlanIDs; 
    Protected; ShowNotifications; SignalLevel; Status; StrParam1; StrParam2; SubType; SwitchType; 
    SwitchTypeVal; Timers; Type; TypeImg; Unit; Used; UsedByCamera; XOffset; YOffset; idx
    --]]
local config = assert(io.popen(curl..'"'.. domoticzURL ..'/json.htm?type=devices&rid='..otherdevices_idx[device]..'"'))
local blocjson = config:read('*all')
config:close()
local jsonValeur = json:decode(blocjson)
    if jsonValeur ~= nil then
        return json:decode(blocjson).result[1]    
    end       
end --[[usage : 
        local attribut = DeviceInfos(cpt_djc)
        if attribut.SwitchTypeVal == 0 then    end
    --]]
    
--==============================================================================================

--------------------------------------------
-------------- Fin Fonctions ---------------
-------------------------------------------- 
if script_actif == true then
    voir_les_logs("========= ".. nom_script .." (v".. version ..") =========",debugging)
    if otherdevices[cpt_djc] == nil then
        -- recherche d'un hardware dummy pour l'associer au futur compteur
    	local config = assert(io.popen(curl..'"'.. domoticzURL ..'/json.htm?type=hardware" &'))
        local blocjson = config:read('*all')
        config:close()
        local jsonValeur = json:decode(blocjson)
			if jsonValeur ~= nil then
			   for Index, Value in pairs( jsonValeur.result ) do
                   if Value.Type == 15 then -- hardware dummy = 15
                      voir_les_logs("--- --- --- idx hardware dummy  : ".. Value.idx .." --- --- ---",debugging)
                      voir_les_logs("--- --- --- Nom hardware dummy  : ".. Value.Name .." --- --- ---",debugging)                  
                      id = Value.idx
                   end  
			   end
			end
        if id ~= nil then 
            voir_les_logs("--- --- --- création du device RFXMeter  : ".. cpt_djc .. " --- --- ---",debugging) 
            os.execute(curl..'"'.. domoticzURL ..'/json.htm?type=createvirtualsensor&idx='..id..'&sensorname='..url_encode(cpt_djc)..'&sensortype=113"')                      
        end
    else     
        local attribut = DeviceInfos(cpt_djc)
        if attribut then
            if attribut.SwitchTypeVal == 0 then
                voir_les_logs("--- --- --- modification du device RFXMeter  : ".. cpt_djc .. " en compteur de type 3  --- --- ---",debugging) 
                os.execute(curl..'"'.. domoticzURL ..'/json.htm?type=setused&idx='..otherdevices_idx[cpt_djc]..'&name='..url_encode(cpt_djc)..'&switchtype=3&used=true"')
            end
        else
            voir_les_logs("--- --- --- impossible d\'extraire les caracteristiques du compteur ".. cpt_djc .."  --- --- ---",debugging)
        end
    end -- if otherdevices[cpt_djc]
    
    -- calcul DJCvoir_les_logs("--- --- --- Température Ext : "..temperature,debugging) 
    if otherdevices_svalues[temp_ext] ~= nil then
     
        if (uservariables[Tx] == nil) then creaVar(Tx,2,"-150")end
        if (uservariables[Tn] == nil) then creaVar(Tn,2,150)end
        if (uservariables[Tn_hold] == nil) then creaVar(Tn_hold,2,150)end
        
        if (uservariables[Tx] ~= nil) and (uservariables[Tn] ~= nil) and (uservariables[Tn_hold] ~= nil) then
            temperature = tonumber(string.match(otherdevices_svalues[temp_ext], "%d+%.*%d*"))
            voir_les_logs("--- --- --- Température Ext : "..temperature,debugging)
            voir_les_logs("--- --- ---  Tn : "..uservariables[Tn],debugging)
            voir_les_logs("--- --- ---  Tx : "..uservariables[Tx],debugging)
            voir_les_logs("--- --- --- Tn_hold : "..uservariables[Tn_hold],debugging)
            if temperature < S then --si la température extérieure est inférieure au seuil S défini dans les variables
            voir_les_logs("--- --- --- Température Extérieure inférieure au seuil de ".. S .."°c",debugging)
                if temperature < tonumber(uservariables[Tn]) then
                    voir_les_logs("--- --- --- Température Extérieure inférieure à Variable Tn : "..uservariables[Tn],debugging)
                    commandArray[#commandArray+1] = {['Variable:'.. Tn] = tostring(temperature)} -- mise à jour de la variable tn
                    voir_les_logs("--- --- --- mise à jour de la Variable Tn  --- --- --- ",debugging)
                elseif temperature > tonumber(uservariables[Tx]) then
                    voir_les_logs("--- --- --- Température Extérieure supérieure à Variable Tx : "..uservariables[Tx],debugging)
                    commandArray[#commandArray+1] = {['Variable:'.. Tx] = tostring(temperature)} -- mise à jour de la variable tx
                    voir_les_logs("--- --- --- mise à jour de la Variable Tx  --- --- --- ",debugging)	
                end
            end    
        end
    else
        voir_les_logs("--- --- le device : ".. temp_ext .." n\'existe pas --- ---",debugging)
    end -- fin si otherdevices_svalues[temp_ext] ~= nil 

if (time.min == 0 and time.hour == 2) then 
local temp_mini = tonumber(uservariables[Tn])
    commandArray[#commandArray+1] = {['Variable:'.. Tn_hold] = tostring(temp_mini)} -- mise à jour de la variable Tn_hold
    commandArray[#commandArray+1] = {['Variable:'.. Tn] = tostring(150)} -- ré-initialisation de la variable Tn
end
if (time.min == 01 and time.hour == 18) then 
    local temp_mini_hold = tonumber(uservariables[Tn_hold])
    if temp_mini ~= 150 then
        local temp_maxi = tonumber(uservariables[Tx])
        voir_les_logs("--- --- --- Tx ("..temp_maxi.."°C)  --- --- --- ",debugging)
        local moyenne = tonumber((temp_mini_hold + temp_maxi)/2)
        voir_les_logs("--- --- --- Moyenne ("..moyenne.."°C)  --- --- --- ",debugging)
        S = tonumber(S)

        if S > temp_maxi then
            djc = round(S - moyenne,0)
        voir_les_logs("--- --- --- Le Seuil de "..S.."°C est superieur a Tx ("..temp_maxi.."°C)  --- --- --- ",debugging)   
        voir_les_logs("--- --- --- Le Seuil de "..S.."°C est inferieur ou egal a Tn_hold ("..temp_mini_hold.."°C)  --- --- --- ",debugging)
        voir_les_logs("--- --- --- djc : "..djc,debugging)
        elseif temp_mini_hold < S and S < temp_maxi then 
            local a = S - temp_mini_hold
            voir_les_logs("--- --- --- a : "..a,debugging)
            local b = temp_maxi - temp_mini_hold
            voir_les_logs("--- --- --- b : "..b,debugging)
            djc = a * ( 0.08 + 0.42 * a / b )
            voir_les_logs("--- --- --- djc : "..djc,debugging)
            djc = round(djc,0)
            --djc = ( S – temp_mini_hold ) * (0.08 + 0.42 * ( S – temp_mini_hold ) / ( temp_maxi – temp_mini_hold ) )
            voir_les_logs("--- --- --- Le Seuil de "..S..")C est superieur a Tx ("..temp_maxi.."°C) est inferieur a Tn_hold  ("..temp_mini_hold.."°C)--- --- --- ",debugging)
        elseif S <= temp_mini_hold then
            djc = 0
        end
        local cpt_djc_index = otherdevices_svalues[cpt_djc]
        voir_les_logs("--- --- --- compteur avant mise à jour ".. cpt_djc .." : ".. cpt_djc_index .." DJU",debugging)
        cpt_djc_index = tonumber(cpt_djc_index) + djc
        voir_les_logs("--- --- --- mise à jour compteur ".. cpt_djc .." : ".. cpt_djc_index .." DJU",debugging)
        commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[cpt_djc] .. '|0|'..tostring(cpt_djc_index)} --mise à jour du compteur
        commandArray[#commandArray+1] = {['Variable:'.. Tx] = tostring(-150)} -- mise à jour de la variable Tx
    else
        voir_les_logs("--- --- --- Calcul impossible, il n\'y a pas de Température minimum enregistrée, attendre le prochain calcul",debugging)
    end
end

    -- fin calcul DJC
    -- --==============================================================================================

    voir_les_logs("======= Fin ".. nom_script .." (v".. version ..") =======",debugging)
end
return commandArray
Dernière modification par papoo le 24 févr. 2018, 22:36, modifié 2 fois.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: LUA : Calcul de DJU méthode Costic V2 avec création automatique du device

Message par vil1driver »

Salut,

Petite coquille repérée ;)

Code : Tout sélectionner

function voir_les_logs (s, debbuging)
    if (debugging) then 
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : Calcul de DJU méthode Costic V2 avec création automatique du device

Message par papoo »

merci, c'est corrigé
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
pigloox
Messages : 78
Inscription : 18 janv. 2016, 16:12

Re: LUA : Calcul de DJU méthode Costic V2 avec création automatique du device

Message par pigloox »

Salut,

Chez moi ton script tel quel me sort une drole d'erreur :

Code : Tout sélectionner

2018-03-04 15:18:00.878 Error: EventSystem: in [Ext.] DJU: [string "--[[ ..."]:60: cannot open --[[ 
~/domoticz/scripts/lua/script_time_dju_methode_costic.lua 
auteur : papoo 
MAJ : 24/02/2018 
création : 29/01/2018 
Principe : 
Calculer, via l'information température d'une sonde extérieure, les Degrés jour Chauffage méthode COSTIC 
Création automatique du device compteur et des variables nécessaire au fonctionnement de ce script. 
Seul pré-requis à la création d'un device par ce script, l'existence d'un hardware dummy dans votre domoticz. 
Pour cela, uploadez ou créez ce script dans le répertoire domoticz/scripts/lua/ 
éditer éventuellement les noms des devices à créer, passez la variable script_actif à true, sauvegardez et vérifiez vos logs. 
Un degré jour est calculé à partir des températures météorologiques extrêmes du lieu et du jour J : 
- Tn : température minimale du jour J mesurée à 2 mètres du sol sous abri et relevée entre J-1 (la veille) à 18h et J à 18h UTC. 
- Tx : température maximale du jour J mesurée à 2 mètres du sol sous abri et relevée entre J à 6h et J+1 (le lendemain) à 6h UTC. 
- S : seuil de température de référence choisi. 
- Moy = (Tn + Tx)/2 Température Moyenne de la journée 
Pour un calcul de déficits de température par rapport au seuil choisi : 
- Si S > TX (cas fréquent en hiver) : DJ = S - Moy 
- Si S ≤ TN (cas exceptionnel en début ou en fin de saison de chauffe) : DJ = 0 
- Si TN < S ≤ TX (cas possible en début ou en fin de saison de chauffe) : DJ = ( S – TN ) * (0.08 + 0.42 * ( S –TN ) / ( TX – TN )) 
https://github.com/papo-o/domoticz_scripts/blob/master/Lua/script_time_dju_methode_costic.lua 
https://pon.fr/calcul-de-dju-methode-costic/ 
http://easydomoticz.com/forum/viewtopic.php?f=17&t=5984 
--]] 
-------------------------------------------- 
------------ Variables à éditer ------------ 
-------------------------------------------- 
local debugging = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir 
local script_actif = true -- active (true) ou désactive (false) ce script simplement 
local temp_ext = "Chaudiere - Temp Ext Brute" -- nom de la sonde de température extérieure 
local domoticzURL = '127.0.0.1:8080' -- user:pass@ip:port de domoticz 
local var_user_djc = 'dju_methode_costic' -- nom de la variable utilisateur de type 2 (chaine) pour le stockage temporaire des données journalières DJC 
local Tn = "Tn_methode_costic" -- température maximale du jour J relevée entre J à 6h et J+1 (le lendemain) à 6h UTC 
local Tx = "Tx_methode_costic" -- température minimale du jour J relevée entre J-1 (la veille) à 18h et J à 18h UTC. 
local Tn_hold = "Tn_Hold_methode_costic" -- variable de stockage de la température mini. 
local S = 18 -- seuil de température de non chauffage, par convention : 18°C 
local cpt_djc = 'DJU méthode COSTIC' -- nom du dummy compteur DJC en degré 


-------------------------------------------- 
----------- Fin variables à éditer --------- 
-------------------------------------------- 
commandArray = {} 
local nom_script = 'Calcul Degrés jour Chauffage méthode COSTIC' 
local version = '1.02' 
local id 
local djc 

time=os.date("*t") 

-------------------------------------------- 
---------------- Fonctions ----------------- 
-------------------------------------------- 
curl = '/usr/bin/curl -m 9 ' 
if (package.config:sub(1,1) == '/') then 
luaDir = debug.getinfo(1).source:match("@?(.*/)") 
else 
luaDir = string.gsub(debug.getinfo(1).source:match("@?(.*\\)"),'\\','\\\\') 
end 
json = assert(loadfile(luaDir..'JSON.lua'))()-- chargement du fichier JSON.lua 

--============================================================================================== 
function voir_les_logs (s, debugging) 
if (debugging) then 
if s ~= nil then 
print ("".. s ..""); 
else 
print ("aucune valeur affichable"); 
end 
end 
end	

--============================================================================================== 
function round(value, digits) 
if not value or not digits then 
return nil 
end 
local precision = 10^digits 
return (value >= 0) and 
(math.floor(value * precision + 0.5) / precision) or 
(math.ceil(value * precision - 0.5) / precision) 
end 

--============================================================================================== 
function url_encode(str) -- encode la chaine str pour la passer dans une url 
if (str) then 
str = string.gsub (str, "\n", "\r\n") 
str = string.gsub (str, "([^%w ])", 
function (c) return string.format ("%%%02X", string.byte(c)) end) 
str = string.gsub (str, " ", "+") 
end 
return str 
end 

--============================================================================================== 
function creaVar(vname,vtype,vvalue) -- pour créer une variable de type 2 nommée toto comprenant la valeur 10 
os.execute(curl..'"'.. domoticzURL ..'/json.htm?type=command¶m=saveuservariable&vname='..url_encode(vname)..'&vtype='..vtype..'&vvalue='..url_encode(vvalue)..'" &') 
end -- usage : creaVar('toto','2','10') 

--============================================================================================== 
function DeviceInfos(device) 
--[[ 
inspiré de http://www.domoticz.com/forum/viewtopic.php?f=61&t=15556&p=115795&hilit=otherdevices_SwitchTypeVal&sid=dda0949f5f3d71cb296b865a14827a34#p115795 
Attributs disponibles : 
AddjMulti; AddjMulti2; AddjValue; AddjValue2; BatteryLevel; CustomImage; Data; Description; Favorite; 
HardwareID; HardwareName; HardwareType; HardwareTypeVal; HaveDimmer; HaveGroupCmd; HaveTimeout; ID; 
Image; IsSubDevice; LastUpdate; Level; LevelInt; MaxDimLevel; Name; Notifications; PlanID; PlanIDs; 
Protected; ShowNotifications; SignalLevel; Status; StrParam1;
Cependant, en indiquant le chemin complet de JSON.lua ça fonctionne

Code : Tout sélectionner

json = assert(loadfile('/home/pi/domoticz/scripts/lua/JSON.lua'))()-- chargement du fichier JSON.lua
Je suis sous stretch
Raspberry PI 3 & Raspbian 9 (Stretch) sur disque dur, Domoticz Beta Release,
RFX433E + USB Teleinfo + Zwave Stick
Modules Chacon DI-O, Fibaro, Qubino et sondes de températures
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : Calcul de DJU méthode Costic V2 avec création automatique du device

Message par papoo »

tu utilises l’éditeur de script interne non?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
pigloox
Messages : 78
Inscription : 18 janv. 2016, 16:12

Re: LUA : Calcul de DJU méthode Costic V2 avec création automatique du device

Message par pigloox »

Oui, pourtant tes scripts ont toujours fonctionné dedans, je vois pas ce qui change là. Je me trompe ?
Raspberry PI 3 & Raspbian 9 (Stretch) sur disque dur, Domoticz Beta Release,
RFX433E + USB Teleinfo + Zwave Stick
Modules Chacon DI-O, Fibaro, Qubino et sondes de températures
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : Calcul de DJU méthode Costic V2 avec création automatique du device

Message par papoo »

non tu as trouvé le problème et la solution

Code : Tout sélectionner

if (package.config:sub(1,1) == '/') then
     luaDir = debug.getinfo(1).source:match("@?(.*/)")
else
     luaDir = string.gsub(debug.getinfo(1).source:match("@?(.*\\)"),'\\','\\\\')
end
json = assert(loadfile(luaDir..'JSON.lua'))()-- chargement du fichier JSON.lua
permets de connaitre le chemin vers le fichier en cours d'execuion mais dans l'editeur interne il n'y as pas de fichier, le script est dans la base de données
du coup impossible de deviner le chemin vers json.lua, nécessaire à la création du device.
du coup lorsque tu insert en dur le chemin vers Lua ça fonctionne mais le script est moins universel (pas grave c'est le tiens)
j'ai pas encore trouvé comment trouver à tout les coup le chemin vers ce fichier.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
pigloox
Messages : 78
Inscription : 18 janv. 2016, 16:12

Re: LUA : Calcul de DJU méthode Costic V2 avec création automatique du device

Message par pigloox »

D'accord merci pour tes lumières et tes scripts toujours bien interressants et commentés
Raspberry PI 3 & Raspbian 9 (Stretch) sur disque dur, Domoticz Beta Release,
RFX433E + USB Teleinfo + Zwave Stick
Modules Chacon DI-O, Fibaro, Qubino et sondes de températures
Titof2375
Messages : 91
Inscription : 19 avr. 2017, 21:40

Re: LUA : Calcul de DJU méthode Costic V2 avec création automatique du device

Message par Titof2375 »

Oui toujours bien commenté.
Titof2375
Messages : 91
Inscription : 19 avr. 2017, 21:40

Re: LUA : Calcul de DJU méthode Costic V2 avec création automatique du device

Message par Titof2375 »

Est un sav au top.
Répondre