Page 1 sur 4

Lua et Chauffage Vanne DANFOSS

Publié : 18 sept. 2019, 10:00
par Euton
Bonjour,

J'ai commencé à vouloir gérer avec un périphérique virtuel de type "selector" avec 5 possibilités : Auto, Confort, Eco, Absent et Ete.
Dans la case "action" je pointe sur un scipt LUA mais je ne suis pas un spécialiste de la programmation dont voici le code :

Code : Tout sélectionner

commandArray = {}
if (devicechanged['Mode chauffage'] == 'Auto') then
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=enabletimer&idx=12'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=enabletimer&idx=13'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080:/json.htm?type=command&param=enabletimer&idx=14'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=enabletimer&idx=15'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=enabletimer&idx=8'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=enabletimer&idx=9'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=enabletimer&idx=10'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=enabletimer&idx=11'&"
os.execute(oss)

oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=37&setpoint=19'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=40&setpoint=18'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=74&setpoint=25'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=43&setpoint=19'&"
os.execute(oss)

elseif (devicechanged['Mode chauffage'] == 'Confort') then
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=12'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=13'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=14'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=15'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=8'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=9'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=10'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=11'&"
os.execute(oss)

oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=37&setpoint=21'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=40&setpoint=21'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080json.htm?type=command&param=setsetpoint&idx=74&setpoint=25'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=43&setpoint=19'&"
os.execute(oss)


elseif (devicechanged['Mode chauffage'] == 'Eco') then
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=12'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=13'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=14'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=15'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=8'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=9'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=10'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=11'&"
os.execute(oss)

oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=37&setpoint=14'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=40&setpoint=14'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=74&setpoint=14'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=43&setpoint=14'&"
os.execute(oss)


elseif (devicechanged['Mode chauffage'] == 'Absent') then
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=12'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=13'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=14'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=15'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=8'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=9'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=10'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=11'&"
os.execute(oss)

oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=37&setpoint=10'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=40&setpoint=10'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=74&setpoint=10'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=43&setpoint=10'&"
os.execute(oss)

elseif (devicechanged['Mode chauffage'] == 'Ete') then
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=12'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=13'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=14'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=15'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=8'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=9'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=10'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=disabletimer&idx=11'&"
os.execute(oss)

oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=37&setpoint=28'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=40&setpoint=28'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=74&setpoint=28'&"
os.execute(oss)
oss = "curl 'http://Mon IP:8080/json.htm?type=command&param=setsetpoint&idx=43&setpoint=28'&"
os.execute(oss)

end
return commandArray
J’obtiens des erreurs dans les logs. Pourriez vous m'aider ?
Merci d'avance pour votre aide

Re: Lua et Chauffage Vanne DANFOSS

Publié : 19 sept. 2019, 01:10
par lmet
Salut,
Tu gères le chauffage d'un immeuble ?
mais je ne suis pas un spécialiste de la programmation
Je confirme ;)
Beaucoup de commandes sont redondantes et sont lancées en tâche de fond (&), il y a une raison ?
Ton script est bien de type "Device" ?
Sinon quels sont les messages d'erreur ?
Peut-être en dire un peu plus ...

Re: Lua et Chauffage Vanne DANFOSS

Publié : 19 sept. 2019, 04:58
par denis_brasseur
C'est vrai que sans log, cela va être difficile de t'aider.
Et utilise la balise </> pour poster ton code et gagner en lisibilité.
Et quelques explications seraient les bienvenues.

Re: Lua et Chauffage Vanne DANFOSS

Publié : 19 sept. 2019, 10:32
par Euton
Merci à tous de vos réponses

Bonjour lmet, denis_brasseur,

Non je ne gère pas un immeuble, j'ai 4 vannes en tout, 3 pour les chambres et 1 salle de bain.
Pour les commandes en taches de fond, ce n'est pas volontaire car je ne sais pas comment faire autrement.
Le nom de mon fichier est : script_device_chauffage.lua mis dans .../scripts/lua

Log lors d'un changement d'état :
2019-09-19 10:28:58.676 Error: Error executing script command (/home/pi/domoticz/scripts/lua/script_device_chauffage.lua). returned: 32256

Donc quand j'utilise les commandes, les setpoint de mes radiateurs sont bien pris en compte.

Merci
Euton

Re: Lua et Chauffage Vanne DANFOSS

Publié : 19 sept. 2019, 10:56
par denis_brasseur
Tu a essayé cette syntaxe ?

Code : Tout sélectionner

  os.execute(curl............  

Re: Lua et Chauffage Vanne DANFOSS

Publié : 19 sept. 2019, 12:15
par Euton
Re-bonjour denis_brasseur,

je l'ai remplacé @ip par "mon ip".

j'ai suivi tes recommandations et voila ce que j'ai dans les logs :
2019-09-19 12:11:12.660 Status: User: Admin initiated a switch command (75/Mode chauffage/Set Level)
2019-09-19 12:11:12.896 Status: Executing script: /home/pi/domoticz/scripts/lua/script_device_chauffage.lua
2019-09-19 12:11:12.921 Error: Error executing script command (/home/pi/domoticz/scripts/lua/script_device_chauffage.lua). returned: 32256
2019-09-19 12:11:12.922 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_device_chauffage.lua: /home/pi/domoticz/scripts/lua/script_device_chauffage.lua:19: attempt to call global 'curl' (a nil value)

Code : Tout sélectionner

commandArray = {}
if (devicechanged['Mode chauffage'] == 'Auto') then
os.execute(curl 'http://mon ip:8080/json.htm?type=command&param=enabletimer&idx=12')
os.execute(curl 'http://mon ip:8080/json.htm?type=command&param=enabletimer&idx=13')
os.execute(curl 'http://mon ip:8080/json.htm?type=command&param=enabletimer&idx=14')
os.execute(curl 'http://mon ip:8080/json.htm?type=command&param=enabletimer&idx=15')
os.execute(curl 'http://mon ip:8080/json.htm?type=command&param=enabletimer&idx=18')
os.execute(curl 'http://mon ip:8080/json.htm?type=command&param=enabletimer&idx=9')
os.execute(curl 'http://mon ip:8080/json.htm?type=command&param=enabletimer&idx=10')
os.execute(curl 'http://mon ip:8080/json.htm?type=command&param=enabletimer&idx=11')

os.execute(curl 'http://mon ip:8080/json.htm?type=command&param=setsetpoint&idx=37&setpoint=19')
os.execute(curl 'http://mon ip:8080/json.htm?type=command&param=setsetpoint&idx=40&setpoint=18')
os.execute(curl 'http://mon ip:8080/json.htm?type=command&param=setsetpoint&idx=74&setpoint=25')
os.execute(curl 'http://mon ip:8080/json.htm?type=command&param=setsetpoint&idx=43&setpoint=19')


elseif (devicechanged['Mode chauffage'] == 'Confort') then
...
end
return commandArray
D'après ce que je comprends le problème viendrait de cette commande

Code : Tout sélectionner

os.execute(curl 'http://mon ip:8080/json.htm?type=command&param=enabletimer&idx=12')
Merci
Euton

Re: Lua et Chauffage Vanne DANFOSS

Publié : 19 sept. 2019, 15:11
par lmet
Salut,

Voici un petit bout de code qui fonctionne chez-moi.
Cela va, en fonction de la ligne que tu dé-commentes, activer ou désactiver les timers.

Code : Tout sélectionner

local mon_ip = "127.0.0.1:8080"
commandArray = {}

if (devicechanged['Mode chauffage'] == 'Confort']) then
    local timer_id = {"8","9","10","11","12","13","14","15"}
    for i,v in ipairs (timer_id) do
        cmd_timer    = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=enabletimer&idx=" .. v ..'"'
        -- 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
end    
return commandArray
Nb : J'utilise l'éditeur intégré.

Re: Lua et Chauffage Vanne DANFOSS

Publié : 19 sept. 2019, 16:14
par Euton
re bonjour,

ce code il faut le mettre en LUA ou DzVents ?

Ok pour l'editeur intégré j'avais oublié, par contre il me dit qu'il y a un problème au niveau de

Code : Tout sélectionner

 ret = os.execute (cmd_timer) 
avec une croix rouge "unexpected identifier Local near "="

merci d'avance
Euton

Re: Lua et Chauffage Vanne DANFOSS

Publié : 19 sept. 2019, 18:08
par lmet
Oui, c'est du lua script de type "device"
Je vois une coquille dans le code précédent à remplacer par le code ci-dessous

Code : Tout sélectionner

if (devicechanged['Mode chauffage'] == 'Confort') then
P.S Il faut adapter le tableau en fonction de tes idx

Re: Lua et Chauffage Vanne DANFOSS

Publié : 19 sept. 2019, 20:04
par Euton
bonsoir,

le je suis perdu et voici ce que j'ai programmé :

Code : Tout sélectionner

local mon_ip = "X.X.X.X:8080"
commandArray = {}
if (devicechanged['Mode chauffage'] == 'Auto') then
	Local timer_id = ("12","13","14","15","18","9","10","11")
	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

os.execute(curl 'http://X.X.X.X:8080/json.htm?type=command&param=setsetpoint&idx=37&setpoint=19')
os.execute(curl 'http://X.X.X.X:8080/json.htm?type=command&param=setsetpoint&idx=40&setpoint=18')
os.execute(curl 'http://X.X.X.X:8080/json.htm?type=command&param=setsetpoint&idx=74&setpoint=25')
os.execute(curl 'http://X.X.X.X:8080/json.htm?type=command&param=setsetpoint&idx=43&setpoint=19')

elseif (devicechanged['Mode chauffage'] == 'Confort') then
.........
Voici les logs
2019-09-19 20:07:21.814 Error: EventSystem: in script_device_chauffage: [string "local mon_ip = "x.x.x.x:8080" ..."]:5: syntax error near 'timer_id'


Merci d'avance de me dire ce qu'il ne va pas