Transformer un script LUA en DZVETNS

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 <\>.
kisskool
Messages : 70
Inscription : 01 juin 2021, 11:24

Re: Transformer un script LUA en DZVETNS

Message par kisskool »

JE pense que j'ai un problème au niveau du controle de la pompe, j'ai l'impression qu'il compare la longueur des chaines de caractere plutot que le nombre et je ne sais pas comment mettre un "tonumber" comme en LUA

Code : Tout sélectionner

--------------------------------
 ------ Variables à éditer ------
 --------------------------------

local M3 = 4
local M3H = 3
local duree_cycle = tonumber(M3)/tonumber(M3H)*60 --M3 piscine / débit M3 pompe *60
local C01=0.1*duree_cycle -- si <10°
local C02=0.5*duree_cycle -- si 10-14°
local C03=1*duree_cycle -- si 15-20°
local C04=2*duree_cycle -- si 20-28°
local C05=3*duree_cycle -- si >28°
local H_Raz = 10	-- Heure de remise à zéro du compteur.
local scriptName = 'Script_PISCINE_DZVENT'
local scriptVersion = '1.0'
local newValue = value
local counterDivider = 1 -- x is depending on the counter divider set for the device

---------------------------------------------------------------------------------------------------------------------------------------------
-----*****************EN TEST************ VARIABLE *****************EN TEST************---------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
--local T_eau=domoticz.devices('Sortie_piscine').temperature()

return {
	on = {
	   	timer = {
	   	    'every 10 minutes at 10:30-22:00',
		}
		--devices = { 340 }
	},
	-- custom logging level for this script
    logging = {
                --level   = domoticz.LOG_DEBUG,
                level   = domoticz.LOG_INFO,             -- Seulement un niveau peut être actif; commenter les autres
                -- level   = domoticz.LOG_ERROR,            -- Only one level can be active; comment others
                -- level   = domoticz.LOG_MODULE_EXEC_INFO,
                marker	= scriptName..' v'..scriptVersion
   },



execute = function(domoticz, item)

---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------calcul du temps de filtration en fonction de la temperature-------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------

        ----------------------------------------------------------------------------------------------------------
            if (domoticz.devices('Sortie_piscine').temperature) < 10 then 
             domoticz.variables('Var_Piscine_bes').set(C01)
        ----------------------------------------------------------------------------------------------------------
            elseif (domoticz.devices('Sortie_piscine').temperature) >= 10 and (domoticz.devices('Sortie_piscine').temperature) < 14 then
             domoticz.variables('Var_Piscine_bes').set(C02)
        ----------------------------------------------------------------------------------------------------------
            elseif (domoticz.devices('Sortie_piscine').temperature) >= 14 and (domoticz.devices('Sortie_piscine').temperature) < 20 then
             domoticz.variables('Var_Piscine_bes').set(C03)
        ----------------------------------------------------------------------------------------------------------
            elseif (domoticz.devices('Sortie_piscine').temperature) >= 20 and (domoticz.devices('Sortie_piscine').temperature) < 28 then
             domoticz.variables('Var_Piscine_bes').set(C04)
        ----------------------------------------------------------------------------------------------------------
            elseif (domoticz.devices('Sortie_piscine').temperature) >= 28 then
             domoticz.variables('Var_Piscine_bes').set(C05)
        ----------------------------------------------------------------------------------------------------------
            end

---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------commande de la pompe-------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
		
    if domoticz.devices('Pompe mode manu').state == 'Off' then
        domoticz.log ('************************************************************')
        domoticz.log ('*********************Mode Manu désactivé********************')
        domoticz.log ('************************************************************')
			if (domoticz.variables('Var_Piscine_bes').value > domoticz.variables('Var_Piscine_tmp').value) then 
			    domoticz.devices('Filtration piscine').switchOn().forMin(5)
			    domoticz.log ('************************************************************')
                domoticz.log ('**************************POMPE_ON**************************')
                domoticz.log ('************************************************************')
            else
                domoticz.devices('Filtration piscine').switchOff()
                domoticz.log ('************************************************************')
                domoticz.log ('***********************POMPE_OFF****************************')
                domoticz.log ('************************************************************')
			end
    else
    domoticz.log ('************************************************************')
    domoticz.log ('*********************Mode Manu activé***********************')
    domoticz.log ('************************************************************')
	end		

---------------------------------------------------------------------------------------------------------------------------------------------
-----*****************EN TEST************ Remise à zero du compteur quotidien *****************EN TEST************---------------------------
---------------------------------------------------------------------------------------------------------------------------------------------

		
			if (os.date('%H',time) == (H_Raz)) then
			    domoticz.log ('RAZ Compteur', domoticz.LOG_INFO)
                local valeur = 0
                local variable = domoticz.variables('Var_Piscine_tmp')
                variable.set(valeur);
			end
			
---------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------Affichage de controle dans le LOG------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------

    domoticz.log ('************************************************************')
    domoticz.log ('********  Valeur du scenario 1 -> '..C01..' si <10°  ***************')
    domoticz.log ('********      Valeur du scenario 2 -> '..C02..' si 10-14°  ************')
    domoticz.log ('********      Valeur du scenario 3 -> '..C03..' si 15-20°  ************')
    domoticz.log ('********     Valeur du scenario 4 -> '..C04..' si 20-28°  ***********')
    domoticz.log ('********      Valeur du scenario 5 -> '..C05..' si >28°  *************')
    domoticz.log ('************************************************************')
    domoticz.log ('************************* '  ..os.date('%H'..'h'..'%M',time)..'*****************************')
    domoticz.log ('************************************************************')
    domoticz.log ('********  Besoin.: '..domoticz.variables('Var_Piscine_bes').value..' mn *********************************')
    domoticz.log ('********  Réalisé: '..domoticz.variables('Var_Piscine_tmp').value..' mn *********************************')
    domoticz.log ('********  Reste..: '..domoticz.variables('Var_Piscine_bes').value - domoticz.variables('Var_Piscine_tmp').value..' mn **********************************')
	domoticz.log ('******** '..domoticz.devices('Sortie_piscine').temperature..' Sortie *****************************')
    domoticz.log ('******** '..domoticz.devices('Entree_piscine').temperature..' Entrée *****************************')
    domoticz.log ('************************************************************')
    domoticz.log ('************************************************************')
    
end
}
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Transformer un script LUA en DZVETNS

Message par Neutrino »

Le plus simplement du monde :

Code : Tout sélectionner

tonumber(chaine)
;)
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Transformer un script LUA en DZVETNS

Message par Keros »

Concernant la partie Remise à zero du compteur quotidien, ce que tu as fait va fonctionner (au niveau du déclenchement), mais c'est dommage de ne pas utiliser les fonctions native du DzVents. Voir l'utilisation des timers.

Pour info, toutes les lignes domoticz.devices('xxx') doivent être après execute = function(domoticz, item) sinon, cela fait appel à la variable domoticz qui n'est pas connue. --local T_eau=domoticz.devices('Sortie_piscine').temperature() est commentée, mais elle ne fonctionnera jamais là, d'où l'erreur que tu avais avant.
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
kisskool
Messages : 70
Inscription : 01 juin 2021, 11:24

Re: Transformer un script LUA en DZVETNS

Message par kisskool »

Et oui j'avais bien pensé utiliser un truc du genre at 10:00, etc mais je ne sais pas si je peux utiliser ni comment utiliser plusieurs declencheur timer dans le même script, est-ce qu'il existe un truc genre qui remplace le IF ?
at 10:00 domoticz.log ('RAZ Compteur', domoticz.LOG_INFO)
local valeur = 0
local variable = domoticz.variables('Var_Piscine_tmp')
variable.set(valeur);
end

Pour les variables je l'ai mis au bon endroit mais ca veut pas...
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: Transformer un script LUA en DZVETNS

Message par boum »

Un autre soucis de ton code est que la remise à zéro ne peut pas être faite à 10h vu que le script n'est pas déclenché à cette heure. Par contre, elle se fera à 10h30, 10h40 et 10h50.

Pour le déclencheur supplémentaire, il suffit de faire :

Code : Tout sélectionner

-- [...]
local razTrigger = 'at 10:03' 
return {
	on = {
	   	timer = {
	   	   razTrigger,
	   	    'every 10 minutes at 10:30-22:00',
		}
	},
-- [...]
execute = function(domoticz, item)
    -- Remise à zéro
    if item.trigger == razTrigger then
                domoticz.log ('RAZ Compteur', domoticz.LOG_INFO)
                local variable = domoticz.variables('Var_Piscine_tmp')
                variable.set(0);
                return -- arrête l'exécution du script immédiatement dans ce cas
    end
-- [...]
end
}
kisskool a écrit : Pour les variables je l'ai mis au bon endroit mais ca veut pas...
Ce n'est pas une fonction, pas de parenthèses après temperature

Code : Tout sélectionner

local T_eau=domoticz.devices('Sortie_piscine').temperature -- pas de ()
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
kisskool
Messages : 70
Inscription : 01 juin 2021, 11:24

Re: Transformer un script LUA en DZVETNS

Message par kisskool »

Je pense qu'avec ce post tu viens de me faire gagner plusieurs heures !
Pour la variable j'ai essayé tellement de trucs qu'il restait un peu de caca....

Merci beaucoup ! Je vais essayer tous ça !
Répondre