Page 1 sur 2

[LUA] commande vannes POPP/DANFOSS

Publié : 23 sept. 2019, 20:38
par Euton
Bonjour,

A l'aide de ce forum je terminé un code de gestion des timers (planning) et contrôle des températures par script LUA.
Un périphérique virtuel de type sélecteur me permet de choisir directement des valeurs et de-validation/validation des planning des vannes.

Code : Tout sélectionner

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

-- Mode Auto

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=enablesetpointtimer&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

-- Mode Absent (14°C)

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=disablesetpointtimer&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

-- Mode Ete (Vannes ouverte 28°C)

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=disablesetpointtimer&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
Il suffit de copier ce code dans l'éditeur de Domoticz en LUA et choisir un nom de type device puis mettre le Trigger sur DEVICE
Reste plus qu'a créer un Périphérique virtuel de type SELECTEUR et son nom sera le même que dans ce code (Exemple : Mode chauffage)

Re: [LUA] et commande vannes POPP/DANFOSS

Publié : 11 nov. 2019, 17:50
par Urbann
Bonjour
J'utilise moi aussi des Popp Danfos et le script de Euton m'a bien aidé. Merci.
Cependant c'était la première fois que j'utilise du LUA et j'ai galéré.
Je vais essayer d'apporter ma modeste contribution pour ceux qui veulent se lancer.
Ce que j'ai fini par comprendre, c'est que le script va activer ou désactiver les plannings (schedules) qui ont déjà été mis en place pour chaque thermostat dans chaque pièces.
Pour cela il faut trouver leur ID respectif en utilisant cette commande JSON à taper dans la barre d'adresse d'un navigateur.
http://VotreIP:8080/json.htm?type=sched ... thermostat
On note tous les ID sur un petit papier
Ensuite il suffit de compléter les ID entre les accolades dans la ligne
local timer_id = {"28","29"}
Ne pas oublier de renseigner son IP à la 1ere ligne

Code : Tout sélectionner

local mon_ip = "192.x.x.x:8080"
commandArray = {}

-- Mode Présent

if (devicechanged['Nom du bouton'] == 'Présent') then
    local timer_id = {"28","29"} -- remplacer 28 et 29 et compléter les ID
    for i,v in ipairs (timer_id) do
        cmd_timer    = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=enablesetpointtimer&idx=" .. v ..'"' --cela va activer les plannings
        print ("Commande envoyée : " .. cmd_timer)
        ret = os.execute (cmd_timer)
    end
    local timer_id = {"38"}
    for i,v in ipairs (timer_id) do
        cmd_timer    = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=disablesetpointtimer&idx=" .. v ..'"' ----cela va désactiver les plannings
        print ("Commande envoyée : " .. cmd_timer)
        ret = os.execute (cmd_timer)
    end
    
-- Mode Absent

elseif (devicechanged['Nom du bouton'] == 'Absent') then
    local timer_id = {"38"}
    for i,v in ipairs (timer_id) do
        cmd_timer    = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=enablesetpointtimer&idx=" .. v ..'"'
        print ("Commande envoyée : " .. cmd_timer)
        ret = os.execute (cmd_timer)
    end
    local timer_id = {"28","29"}
    for i,v in ipairs (timer_id) do
        cmd_timer    = "curl " .. '"' .. mon_ip .. "/json.htm?type=command&param=disablesetpointtimer&idx=" .. v ..'"'
        print ("Commande envoyée : " .. cmd_timer)
        ret = os.execute (cmd_timer)
    end
end
return commandArray
Voila, j'espère que ce sera un bon raccourci pour ceux qui comme moi veulent se lancer à intégrer un script dans leur installation.

Re: [LUA] et commande vannes POPP/DANFOSS

Publié : 26 nov. 2019, 18:33
par Euton
Bonjour,

Heureux d’apprendre que ce script a pu être utile à quelqu’un d’autre que moi.
Effectivement je l’ai posé là avec très peu de commentaires mais vous avez réussit en vous en sortir car il n’est pas trop compliqué.
Maintenant que vous avez rajouter des commentaires ça devrait être encore plus simple pour une autre personne.

Re: [LUA] et commande vannes POPP/DANFOSS

Publié : 15 déc. 2020, 09:20
par Urbann
Bonjour Euton
Le script pour les thermostats ne fonctionne plus depuis hier et je n'arrive pas à trouver pourquoi
Je n'ai pas fait de modif sur le script
par contre j'ai fais quelques manips sur Domoticz comme changer mettre à jour la version de Pyton mais je ne pense pas que cela en soit la cause...
Quand je change le sélecteur, j'ai la trace dans les logs
Quand je lance manuellement la commande json dans le navigateur , ça fonctionne
Quand c'est le script qui lance la commande ça ne marche pas :evil:

Une idée ??
Merci

Re: [LUA] et commande vannes POPP/DANFOSS

Publié : 15 déc. 2020, 12:43
par Keros
Tu as des erreurs dans les logs de DomoticZ ?

Re: [LUA] et commande vannes POPP/DANFOSS

Publié : 15 déc. 2020, 18:57
par Urbann
Non pas d'erreur dans les log et quand je lance manuellement la commande json dans le navigateur , ça fonctionne :?:

Re: [LUA] et commande vannes POPP/DANFOSS

Publié : 15 déc. 2020, 19:29
par Keros
Tu as des ping dans ton programme pour s'assurer qu'il s'exécute et faire du débogage ?

Ton script est dans l'interface de DomoticZ ou c'est un fichier dans le dossier script ?

Re: [LUA] et commande vannes POPP/DANFOSS

Publié : 19 déc. 2020, 10:53
par Urbann
Tout est là
cmd_timer est la variable construite dans la boucle (voir le script complet au dessus dans la conversation)

print ("Commande envoyée : " .. cmd_timer)
ret = os.execute (cmd_timer)

la ligne print est visible dans les log
par contre la ligne en dessous est sans effet.

Pourtant je n'ai pas changé ce script qui fonctionnait bien depuis 1 an.
En recopiant la commande Json dans les log et en la collant dans le navigateur, ça fonctionne.

Pour répondre à KEROS, le script est placé dans les événements.

Re: [LUA] et commande vannes POPP/DANFOSS

Publié : 20 déc. 2020, 21:40
par Euton
Bonsoir,

Je viens de faire un essais chez moi ça marche

Re: [LUA] et commande vannes POPP/DANFOSS

Publié : 21 déc. 2020, 05:03
par denis_brasseur
Pour envoyer certaines commande en json depuis LUA, il me faut envoyer également le user et le mot de passe, alors que la ligne de commande dans le navigateur fonctionne sans ces parametres :

Code : Tout sélectionner

os.execute(curl..'-u '..domoticzUSER..':'..domoticzPSWD..' "'..domoticzURL..'/json.htm?type=command&param=updateuservariable&vname='..name..'&vtype=2&vvalue='..value..'" &')
Traduction de l’ API/JSON de Domoticz
Format
Le format général à respecter est de la forme :

http://<username:password@>domoticz-ip<:port>/json.htm?api-call
<username:password@> = le login et le password de Domoticz (optionnel).
domoticz-ip =l’ IP-adresse de Domoticz.
<:port> =le port de votre Domoticz (optionnel).
api-call, la chaine à envoyer pour faire le job.