Lua et Chauffage Vanne DANFOSS

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Jeff
Messages : 1007
Inscription : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: Lua et Chauffage Vanne DANFOSS

Message 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 ;)
Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
lmet
Messages : 252
Inscription : 30 juin 2017, 18:16
Localisation : Val d'Oise
Contact :

Re: Lua et Chauffage Vanne DANFOSS

Message 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
Domoticz : V4.10717
Zigate : V4.11230 plugin:4.5.4 firmware:031a
Mon petit blog domotique
Euton
Messages : 137
Inscription : 18 sept. 2019, 09:33

Re: Lua et Chauffage Vanne DANFOSS

Message 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
Domoticz version : 2024.7 (build 16178)
dzVents Version: 3.1.8
Python version : 3.11.2

Raspberry Pi OS : v12 (Bookworm)

Avec Domoticz depuis 28/11/2015
Euton
Messages : 137
Inscription : 18 sept. 2019, 09:33

Re: Lua et Chauffage Vanne DANFOSS

Message 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
Domoticz version : 2024.7 (build 16178)
dzVents Version: 3.1.8
Python version : 3.11.2

Raspberry Pi OS : v12 (Bookworm)

Avec Domoticz depuis 28/11/2015
lmet
Messages : 252
Inscription : 30 juin 2017, 18:16
Localisation : Val d'Oise
Contact :

Re: Lua et Chauffage Vanne DANFOSS

Message 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
Domoticz : V4.10717
Zigate : V4.11230 plugin:4.5.4 firmware:031a
Mon petit blog domotique
lmet
Messages : 252
Inscription : 30 juin 2017, 18:16
Localisation : Val d'Oise
Contact :

Re: Lua et Chauffage Vanne DANFOSS

Message 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 ;)
Domoticz : V4.10717
Zigate : V4.11230 plugin:4.5.4 firmware:031a
Mon petit blog domotique
Euton
Messages : 137
Inscription : 18 sept. 2019, 09:33

Re: Lua et Chauffage Vanne DANFOSS

Message 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é
Domoticz version : 2024.7 (build 16178)
dzVents Version: 3.1.8
Python version : 3.11.2

Raspberry Pi OS : v12 (Bookworm)

Avec Domoticz depuis 28/11/2015
lmet
Messages : 252
Inscription : 30 juin 2017, 18:16
Localisation : Val d'Oise
Contact :

Re: Lua et Chauffage Vanne DANFOSS

Message 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
Domoticz : V4.10717
Zigate : V4.11230 plugin:4.5.4 firmware:031a
Mon petit blog domotique
Euton
Messages : 137
Inscription : 18 sept. 2019, 09:33

Re: Lua et Chauffage Vanne DANFOSS

Message 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
Domoticz version : 2024.7 (build 16178)
dzVents Version: 3.1.8
Python version : 3.11.2

Raspberry Pi OS : v12 (Bookworm)

Avec Domoticz depuis 28/11/2015
lmet
Messages : 252
Inscription : 30 juin 2017, 18:16
Localisation : Val d'Oise
Contact :

Re: Lua et Chauffage Vanne DANFOSS

Message 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é 4648 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).
Domoticz : V4.10717
Zigate : V4.11230 plugin:4.5.4 firmware:031a
Mon petit blog domotique
Répondre