Page 2 sur 4

Re: Lua et Chauffage Vanne DANFOSS

Publié : 19 sept. 2019, 20:23
par Jeff
Aller un peu d'effort et de lecture.
Quand on regarde ta ligne du timer id et l'exemple qu'on t'a donné, il y a 2 erreurs : L / l et ( / {
Il faut un peu se relire et chercher surtout quand on débute ;)

Re: Lua et Chauffage Vanne DANFOSS

Publié : 19 sept. 2019, 20:28
par lmet
A vue de nez tu modifies le code à la main.
le mot clef local ne prend pas de L majuscule.
un tableau est déclaré avec des accolades {} et non des parenthèses ()
tu peux utiliser localhost : 127.0.0.1:8080 pour l'IP
lua est intransigeant avec la syntaxe et sensible à la casse, pour être sûr utilise plutôt "Tout sélectionner" puis un copier/coller

Re: Lua et Chauffage Vanne DANFOSS

Publié : 21 sept. 2019, 10:47
par Euton
Bonjour Jeff et Imet,

Oui c'est un copier/coller qui produit ce genre d'erreur de syntaxe :o
Ayant réalisé ce projet depuis de longtemps, il n'existait pas l'éditeur. Maintenant je vais l'utilisé car il est très bien :)

je vais vérifié tout le code et je vous tient au courant
Merci

Re: Lua et Chauffage Vanne DANFOSS

Publié : 21 sept. 2019, 15:39
par Euton
bonjour,

Donc voici ou j'en suis :

Code : Tout sélectionner

local mon_ip = "127.0.0.1:8080"
commandArray = {}
if (devicechanged['Mode chauffage'] == 'Auto') then
    local timer_id = {"11","16","17","10","12","13","14","15","8","9"}
    for i,v in ipairs (timer_id) do
        cmd_timer    = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=enabletimer&idx=" .. v ..'"'
        print ("Commande envoyée : " .. cmd_timer)
        ret = os.execute (cmd_timer)
    end
    local idx_id = {"37","40","74","43"}
    for i,v in ipairs (idx_id) do
        cmd_setpoint  = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=setsetpoint&idx=" .. v .. "setpoint=19" .. '"'
        print ("Commande envoyée : " .. cmd_setpoint)
        ret = os.execute (cmd_setpoint)
    end

elseif (devicechanged['Mode chauffage'] == 'Confort') then
    local timer_id = {"11","16","17","10","12","13","14","15","8","9"}
    for i,v in ipairs (timer_id) do
        cmd_timer   = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=disabletimer&idx=" .. v ..'"'
        print ("Commande envoyée : " .. cmd_timer)
        ret = os.execute (cmd_timer)
    end
    local idx_id = {"37","40","74","43"}
    for i,v in ipairs (idx_id) do
        cmd_setpoint  = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=setsetpoint&idx=" .. v .. "setpoint=21" .. '"'
        print ("Commande envoyée : " .. cmd_setpoint)
        ret = os.execute (cmd_setpoint)
    end

elseif (devicechanged['Mode chauffage'] == 'Eco') then
    local timer_id = {"11","16","17","10","12","13","14","15","8","9"}
    for i,v in ipairs (timer_id) do
        cmd_timer   = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=disabletimer&idx=" .. v ..'"'
        print ("Commande envoyée : " .. cmd_timer)
        ret = os.execute (cmd_timer)
    end
    local idx_id = {"37","40","74","43"}
    for i,v in ipairs (idx_id) do
        cmd_setpoint  = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=setsetpoint&idx=" .. v .. "setpoint=14" .. '"'
        print ("Commande envoyée : " .. cmd_setpoint)
        ret = os.execute (cmd_setpoint)
    end

elseif (devicechanged['Mode chauffage'] == 'Absent') then
    local timer_id = {"11","16","17","10","12","13","14","15","8","9"}
    for i,v in ipairs (timer_id) do
        cmd_timer   = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=disabletimer&idx=" .. v ..'"'
        print ("Commande envoyée : " .. cmd_timer)
        ret = os.execute (cmd_timer)
    end
    local idx_id = {"37","40","74","43"}
    for i,v in ipairs (idx_id) do
        cmd_setpoint  = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=setsetpoint&idx=" .. v .. "setpoint=10" .. '"'
        print ("Commande envoyée : " .. cmd_setpoint)
        ret = os.execute (cmd_setpoint)
    end

elseif (devicechanged['Mode chauffage'] == 'Ete') then
    local timer_id = {"11","16","17","10","12","13","14","15","8","9"}
    for i,v in ipairs (timer_id) do
        cmd_timer   = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=disabletimer&idx=" .. v ..'"'
        print ("Commande envoyée : " .. cmd_timer)
        ret = os.execute (cmd_timer)
    end
    local idx_id = {"37","40","74","43"}
    for i,v in ipairs (idx_id) do
        cmd_setpoint  = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=setsetpoint&idx=" .. v .. "setpoint=28" .. '"'
        print ("Commande envoyée : " .. cmd_setpoint)
        ret = os.execute (cmd_setpoint)
    end
return commandArray
end
et les logs :

Code : Tout sélectionner

2019-09-21 15:36:00.572 Error: EventSystem: in script_device_chauffage.lua: [string "local mon_ip = "127.0.0.1:8080"..."]:3: attempt to index global 'devicechanged' (a nil value)
et quand je change le selecteur d'etat voici les logs :

Code : Tout sélectionner

2019-09-21 15:41:53.216 Status: User: Admin initiated a switch command (75/Mode chauffage/Set Level)
2019-09-21 15:41:53.476 Status: LUA: Commande envoyée : curl "127.0.0.1:8080/json.htm?type=command&param=disabletimer&idx=11"
2019-09-21 15:41:53.554 Status: Incoming connection from: 127.0.0.1
2019-09-21 15:41:53.562 Status: LUA: Commande envoyée : curl "127.0.0.1:8080/json.htm?type=command&param=disabletimer&idx=16"
2019-09-21 15:41:53.647 Status: LUA: Commande envoyée : curl "127.0.0.1:8080/json.htm?type=command&param=disabletimer&idx=17"
2019-09-21 15:41:53.732 Status: LUA: Commande envoyée : curl "127.0.0.1:8080/json.htm?type=command&param=disabletimer&idx=10"
2019-09-21 15:41:53.818 Status: LUA: Commande envoyée : curl "127.0.0.1:8080/json.htm?type=command&param=disabletimer&idx=12"
2019-09-21 15:41:53.908 Status: LUA: Commande envoyée : curl "127.0.0.1:8080/json.htm?type=command&param=disabletimer&idx=13"
2019-09-21 15:41:53.993 Status: LUA: Commande envoyée : curl "127.0.0.1:8080/json.htm?type=command&param=disabletimer&idx=14"
2019-09-21 15:41:53.225 Error: SQLHelper: Error script not found '/home/pi/domoticz/scripts/lua/script_device_chauffage.lua'
2019-09-21 15:41:54.083 Status: LUA: Commande envoyée : curl "127.0.0.1:8080/json.htm?type=command&param=disabletimer&idx=15"
2019-09-21 15:41:54.204 Status: LUA: Commande envoyée : curl "127.0.0.1:8080/json.htm?type=command&param=disabletimer&idx=8"
2019-09-21 15:41:54.307 Status: LUA: Commande envoyée : curl "127.0.0.1:8080/json.htm?type=command&param=disabletimer&idx=9"
2019-09-21 15:41:54.400 Status: LUA: Commande envoyée : curl "127.0.0.1:8080/json.htm?type=command&param=setsetpoint&idx=37setpoint=14"
2019-09-21 15:41:54.486 Status: LUA: Commande envoyée : curl "127.0.0.1:8080/json.htm?type=command&param=setsetpoint&idx=40setpoint=14"
2019-09-21 15:41:54.566 Status: LUA: Commande envoyée : curl "127.0.0.1:8080/json.htm?type=command&param=setsetpoint&idx=74setpoint=14"
2019-09-21 15:41:54.651 Status: LUA: Commande envoyée : curl "127.0.0.1:8080/json.htm?type=command&param=setsetpoint&idx=43setpoint=14"
2019-09-21 15:42:00.417 Error: EventSystem: in script_device_chauffage.lua: [string "local mon_ip = "127.0.0.1:8080"..."]:3: attempt to index global 'devicechanged' (a nil value)
Question : Doit on mettre le code dans un fichier LUA en le dossier script de Domoticz ou avec l'editeur cela suffit ?

Merci d'avance

Re: Lua et Chauffage Vanne DANFOSS

Publié : 21 sept. 2019, 16:58
par lmet
Salut,
Bravo :D
Tu as mis le end après le return commandArray d'où l'erreur en ligne 3
Oui l'éditeur suffit par contre je ne m'explique pas l'erreur par rapport au fichier ... Je regarde

Re: Lua et Chauffage Vanne DANFOSS

Publié : 21 sept. 2019, 17:20
par lmet
Dans le cas du setpoint tu as deux valeurs à envoyer le timer_idx et la valeur de la température
Pour cela je ferais plutôt comme ça :

Code : Tout sélectionner

local timer_temp_id = {37,28,40,28,74,28,43,28}
        for i = 1, #timer_temp_id, 2 do 
            cmd_timer = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=setsetpoint&idx="..timer_temp_id[i].."&setpoint="..timer_temp_id[i+1] ..'"'
            print ("Commande envoyée : " .. cmd_timer)
            ret = os.execute (cmd_timer)    
        end
Tu pourras ainsi différencier la consigne en fonction du timer
A priori pas besoin de guillemets dans la déclaration du tableau lua s'en occupe ;)

Re: Lua et Chauffage Vanne DANFOSS

Publié : 21 sept. 2019, 18:11
par Euton
re bonjour,

ta boucle For marche parfaitement pour le setpoint :)

Code : Tout sélectionner

local mon_ip = "127.0.0.1:8080"
commandArray = {}
if (devicechanged['Mode chauffage'] == 'Auto') then
    local timer_id = {"11","16","17","10","12","13","14","15","8","9"}
    for i,v in ipairs (timer_id) do
        cmd_timer    = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=enabletimer&idx=" .. v ..'"'
        print ("Commande envoyée : " .. cmd_timer)
        ret = os.execute (cmd_timer)
    end
    local timer_temp_id = {37,19,40,18,74,25,43,19}
        for i = 1, #timer_temp_id, 2 do 
            cmd_timer = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=setsetpoint&idx="..timer_temp_id[i].."&setpoint="..timer_temp_id[i+1] ..'"'
            print ("Commande envoyée : " .. cmd_timer)
            ret = os.execute (cmd_timer)    
        end

elseif (devicechanged['Mode chauffage'] == 'Confort') then
    local timer_id = {"11","16","17","10","12","13","14","15","8","9"}
    for i,v in ipairs (timer_id) do
        cmd_timer   = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=disabletimer&idx=" .. v ..'"'
        print ("Commande envoyée : " .. cmd_timer)
        ret = os.execute (cmd_timer)
    end
    local timer_temp_id = {37,21,40,21,74,25,43,19}
        for i = 1, #timer_temp_id, 2 do 
            cmd_timer = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=setsetpoint&idx="..timer_temp_id[i].."&setpoint="..timer_temp_id[i+1] ..'"'
            print ("Commande envoyée : " .. cmd_timer)
            ret = os.execute (cmd_timer)    
        end

elseif (devicechanged['Mode chauffage'] == 'Eco') then
    local timer_id = {"11","16","17","10","12","13","14","15","8","9"}
    for i,v in ipairs (timer_id) do
        cmd_timer   = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=disabletimer&idx=" .. v ..'"'
        print ("Commande envoyée : " .. cmd_timer)
        ret = os.execute (cmd_timer)
    end
    local timer_temp_id = {37,14,40,14,74,14,43,14}
        for i = 1, #timer_temp_id, 2 do 
            cmd_timer = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=setsetpoint&idx="..timer_temp_id[i].."&setpoint="..timer_temp_id[i+1] ..'"'
            print ("Commande envoyée : " .. cmd_timer)
            ret = os.execute (cmd_timer)    
        end

elseif (devicechanged['Mode chauffage'] == 'Absent') then
    local timer_id = {"11","16","17","10","12","13","14","15","8","9"}
    for i,v in ipairs (timer_id) do
        cmd_timer   = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=disabletimer&idx=" .. v ..'"'
        print ("Commande envoyée : " .. cmd_timer)
        ret = os.execute (cmd_timer)
    end
    local timer_temp_id = {37,10,40,10,74,10,43,10}
        for i = 1, #timer_temp_id, 2 do 
            cmd_timer = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=setsetpoint&idx="..timer_temp_id[i].."&setpoint="..timer_temp_id[i+1] ..'"'
            print ("Commande envoyée : " .. cmd_timer)
            ret = os.execute (cmd_timer)    
        end

elseif (devicechanged['Mode chauffage'] == 'Ete') then
    local timer_id = {"11","16","17","10","12","13","14","15","8","9"}
    for i,v in ipairs (timer_id) do
        cmd_timer   = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=disabletimer&idx=" .. v ..'"'
        print ("Commande envoyée : " .. cmd_timer)
        ret = os.execute (cmd_timer)
    end
    local timer_temp_id = {37,28,40,28,74,28,43,28}
        for i = 1, #timer_temp_id, 2 do 
            cmd_timer = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=setsetpoint&idx="..timer_temp_id[i].."&setpoint="..timer_temp_id[i+1] ..'"'
            print ("Commande envoyée : " .. cmd_timer)
            ret = os.execute (cmd_timer)    
        end
end
return commandArray
par contre j'ai toujours cette erreur dans les logs :

Code : Tout sélectionner

2019-09-21 18:11:00.696 Error: EventSystem: in script_device_chauffage.lua: [string "local mon_ip = "127.0.0.1:8080"..."]:3: attempt to index global 'devicechanged' (a nil value)
en tout cas merci de tes propositions qui m'on déjà bien fait avancé

Re: Lua et Chauffage Vanne DANFOSS

Publié : 21 sept. 2019, 18:26
par lmet
Ça avance, content pour toi :) C'est la boucle for et non For (on dirait que tu a fais du Basic ;) )
Pour l'erreur concernant le fichier je sèche un peu, depuis le début j'ai toujours utilisé l'éditeur intégré, quelqu'un saura sans doute te répondre.
Par contre Sauf erreur, en mode "Absent" et en mode "Ete" tu sembles faire la même chose. Tu peux gagner 13 lignes

Code : Tout sélectionner

elseif (devicechanged['Mode chauffage'] == 'Absent' or devicechanged['Mode chauffage'] == 'Ete') then
…
Pour activer/désactiver un timer c'est la même commande sauf le mot enable/disable qui change dans la commande tu peux donc créer une fonction à placer avant le commandArray {}

Code : Tout sélectionner

-- mode = enable , disable
function settimer (mode, value)
    cmd_timer = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=" .. mode .. "timer&idx=" .. value ..'"'
    return cmd_timer
end
que tu pourras appeler ainsi par exemple :

Code : Tout sélectionner

commandArray {}
...
local timer_id = {"11","16","17","10","12","13","14","15","8","9"}
for i = 1, #timer_id do
	cmd_timer = settimer ("enable", timer_id[i]) -- ou
	-- cmd_timer = settimer ("disable", timer_id[i])
	print ("Commande envoyée : " .. cmd_timer)    
end
...
return commandArray

Re: Lua et Chauffage Vanne DANFOSS

Publié : 21 sept. 2019, 18:48
par Euton
re bonjour Imet,

j'ai survolé des cours de programmation il y a 20 ans, mais ce sont que des souvenirs.

Concernant Ete et Absent la valeur de température des setpoint change (Ete 28° et Absent 10°)

NB : (ta boucle doit faire le job mais domoticz n'envoie pas la bonne commande)

https://www.domoticz.com/forum/viewtopi ... 43#p118939

il parle du problème concernant l'activation ou la désactivation des timers qui ne fonctionne pas, par contre je ne comprends pas la solution.

Euton

Re: Lua et Chauffage Vanne DANFOSS

Publié : 21 sept. 2019, 19:35
par lmet
De ce que je crois comprendre tu as l'idx du module mais tu as aussi un idx pour chaque entrée appelé timerID. En tapant :

Code : Tout sélectionner

http://<IP_DZ:port>/json.htm?type=schedules&filter=device
tu obtiens l'ensemble des timerID et si tu envoies une commande tu peux désactiver/activer une entrée.
Après si cela active ou désactive réellement la ligne concernée j'avoue que je n'ai pas testé.
img_004.jpg
img_004.jpg (143.44 Kio) Consulté 4641 fois
Par contre si ça marche j'ai intérêt de le réactiver si je veux la paix des ménages (C'est le radiateur de la salle de bains et mon épouse est frileuse).