[LUA] commande vannes POPP/DANFOSS

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.
Euton
Messages : 137
Inscription : 18 sept. 2019, 09:33

[LUA] commande vannes POPP/DANFOSS

Message 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)
Dernière modification par Euton le 14 mai 2021, 09:22, modifié 1 fois.
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
Urbann
Messages : 59
Inscription : 23 oct. 2018, 17:01

Re: [LUA] et commande vannes POPP/DANFOSS

Message 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.
Euton
Messages : 137
Inscription : 18 sept. 2019, 09:33

Re: [LUA] et commande vannes POPP/DANFOSS

Message 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.
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
Urbann
Messages : 59
Inscription : 23 oct. 2018, 17:01

Re: [LUA] et commande vannes POPP/DANFOSS

Message 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
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] et commande vannes POPP/DANFOSS

Message par Keros »

Tu as des erreurs dans les logs de DomoticZ ?
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Urbann
Messages : 59
Inscription : 23 oct. 2018, 17:01

Re: [LUA] et commande vannes POPP/DANFOSS

Message par Urbann »

Non pas d'erreur dans les log et quand je lance manuellement la commande json dans le navigateur , ça fonctionne :?:
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] et commande vannes POPP/DANFOSS

Message 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 ?
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Urbann
Messages : 59
Inscription : 23 oct. 2018, 17:01

Re: [LUA] et commande vannes POPP/DANFOSS

Message 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.
Euton
Messages : 137
Inscription : 18 sept. 2019, 09:33

Re: [LUA] et commande vannes POPP/DANFOSS

Message par Euton »

Bonsoir,

Je viens de faire un essais chez moi ça marche
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
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: [LUA] et commande vannes POPP/DANFOSS

Message 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.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Répondre