Creation d'un timer modifiable facilement

Posez ici vos questions d'utilisation, de configuration de Domoticz, de bugs, de conseils sur le logiciel lui même dans son utilisation et son paramètrage Concernant le Raspberry ou les scripts de toute nature des forums spécifiques sont ouverts
quady42
Messages : 79
Enregistré le : 11 sept. 2016, 18:30

Creation d'un timer modifiable facilement

Message par quady42 »

Bonjour à tous,

Après quelques jours de recherches infructueuse, je me retourne vers vous.

Je suis à la recherche d'information pour la mise en place d'un timer réglable facilement depuis l'interface domoticz et idéalement depuis l'appli domoticz pour android.

Je souhaite piloté un relais de façon manuel avec un timer d’arrêt associé qui doit être réglable facilement.

Pour le fonctionnement : je choisie le temps voulu entre 30minutes et 12h (par tranche de 30 minutes idéalement mais un 0/100% ou un 0/720 minutes pourra faire l'affaire). Puis j'active l’interrupteur qui basculera à off à la fin du timer choisie.

Nota:J'ai quelques notion en code mais elles sont limitées...
Domoticz béta - Raspberry PI3 - RFXtrx433E - z-wave.me ZME_UZB1 - Clé 3G
SOMFY RTS -fibaro fgbs-001- wemos D1 mini ESPeasy
Sonoff : basic - S20 - Dual R2 - Pro 4 CH - Pro 4 Ch R2 tous en Tasmota
Xiaomi: Getway - Température - Incendie - fuite d'eau

Keros
Messages : 406
Enregistré le : 23 juil. 2019, 20:57

Re: Creation d'un timer modifiable facilement

Message par Keros »

Je vois la possibilité de le faire en programmation en LUA.

Taurais un device virtuel de type dimer pour sélectionner le temps que tu souhaites et un device virtuel de type push pour lancer un petit script : celui ci activerait l'interrupteur et enverrait la commande d'extinction au bout de XX secondes (calculer à partir du dimer).

quady42
Messages : 79
Enregistré le : 11 sept. 2016, 18:30

Re: Creation d'un timer modifiable facilement

Message par quady42 »

Merci pour ton retour,
J'ai commencer a faire quelque chose (en m'aidant du code https://easydomoticz.com/forum/viewtopi ... 10&t=10164) a l'aide d'un thermostat que je règle a une valeur X et j'applique le script si dessous pour faire un timer.
Ça fonctionne mais ce n'est pas a mon gout (Il faut aller dans l'onglet mesure pour le réglage du thermostat)...

Je préfère ta solution de dimmer mais je ne sais pas trop comment convertir 0/100% en minutes et ensuite faire le décompte en minute en partant du principe que 100% = 720 minutes (12h)

Code : Tout sélectionner

commandArray = {}
	
if otherdevices["Démarrage pompe onzion"]=='On' then
	print ("Print Mise en route pompe onzion")
	commandArray["Pompe onzion"]='On'
	secondes_systeme=string.sub(os.date("%X"), 7, 8)

	if tonumber(secondes_systeme)==0 then
		valeur=otherdevices_svalues['test pompe onzion']
		print ('valeur device 1 ='..valeur)
		valeur=valeur-1
		print('valeur -1 ='..valeur)
		commandArray['SetSetPoint:'..otherdevices_idx['test pompe onzion']] = tostring(valeur)
		print ('valeur device 2 ='..valeur)
	end
	print ('Print valeur device sortie if ='..valeur)
	
	
	if (valeur==0) then
		print ('Print arret pompe onzion')
		commandArray["Pompe onzion"]='Off'
		commandArray["Démarrage pompe onzion"]='Off'
	end
	
	--print("-------------------------------------------")
end
return commandArraycommandArray
Domoticz béta - Raspberry PI3 - RFXtrx433E - z-wave.me ZME_UZB1 - Clé 3G
SOMFY RTS -fibaro fgbs-001- wemos D1 mini ESPeasy
Sonoff : basic - S20 - Dual R2 - Pro 4 CH - Pro 4 Ch R2 tous en Tasmota
Xiaomi: Getway - Température - Incendie - fuite d'eau

Keros
Messages : 406
Enregistré le : 23 juil. 2019, 20:57

Re: Creation d'un timer modifiable facilement

Message par Keros »

Alors :
  • La minuterie
Un dimmer te donne une valeur de 1 à 100. Tu fais un règle de 3 et tu dois trouver la valeur correspondante pour 720.
  • La commande
Il existe deux commandes pour actionner ton device :

- soit tu actives ton device pour un certain temps
- soit tu allumes ton device et tout envoi une commande pour l'éteindre dans un certain temps

Les commandes LUA sont décrites dans le wiki : https://www.domoticz.com/wiki/LUA_commands

Tu as des liens dans ma signature qui pourront t'apporter des informations ;)

Le script me semble bien compliqué pour ton besoin :?

quady42
Messages : 79
Enregistré le : 11 sept. 2016, 18:30

Re: Creation d'un timer modifiable facilement

Message par quady42 »

Effectivement, le code utilisé est un peu tordu mais il a l’intérêt d’être visuel et de voir le temps restant dans le module thermostat.

Si je met comme consigne 360 (soit 6h) au bout d'une heure de fonctionnement dans le thermostat je n'ai plus que 300...

Et j'aimerai pourvoir agir de sorte sur le dimmer avec un régle de 3 "masquée"

En gros je souhaiterai voir baisser le dimmer d'1% toutes les 7 minutes si je considère 100% = 12h =720min.

Nota j'utilise 2 boutons de marche car le second permet aussi de faire de la marche "forcé" manuel sans passé par le minuteur
Domoticz béta - Raspberry PI3 - RFXtrx433E - z-wave.me ZME_UZB1 - Clé 3G
SOMFY RTS -fibaro fgbs-001- wemos D1 mini ESPeasy
Sonoff : basic - S20 - Dual R2 - Pro 4 CH - Pro 4 Ch R2 tous en Tasmota
Xiaomi: Getway - Température - Incendie - fuite d'eau

Keros
Messages : 406
Enregistré le : 23 juil. 2019, 20:57

Re: Creation d'un timer modifiable facilement

Message par Keros »

Là, tu complexifie le problème :D

Il faudrait peut-être voir le problème dans un autre sens. Je le ferai en faisant un minuteur : un script basé sur le temps enlèverait 1 au dimmer toutes les 7 minutes. Et quand il arriverait à zéro, cela lancerait une action via un script.

quady42
Messages : 79
Enregistré le : 11 sept. 2016, 18:30

Re: Creation d'un timer modifiable facilement

Message par quady42 »

Oui je crois que je vois un peu au dessus de me capacité car le lua n'est pas encore ma tasse de thé!

Je suis en train d'essayer de décomposé l'atome ... :lol:

Pour le moment je suis en train d'essayer de rajouter un compteur qui indiquera le temps restant en minute.
Et je garderai le dimmer a sa valeur de lancement dans un 1er temps ensuite je passerai à l’étape de faire varier le dimmer toutes les 7 minutes ... :roll:
Domoticz béta - Raspberry PI3 - RFXtrx433E - z-wave.me ZME_UZB1 - Clé 3G
SOMFY RTS -fibaro fgbs-001- wemos D1 mini ESPeasy
Sonoff : basic - S20 - Dual R2 - Pro 4 CH - Pro 4 Ch R2 tous en Tasmota
Xiaomi: Getway - Température - Incendie - fuite d'eau

Keros
Messages : 406
Enregistré le : 23 juil. 2019, 20:57

Re: Creation d'un timer modifiable facilement

Message par Keros »

C'est très bien, continu comme ça : fait de petites choses et avec tout ce que tu vas apprendre je suis certain que tu arriveras à faire ton timer ;)

quady42
Messages : 79
Enregistré le : 11 sept. 2016, 18:30

Re: Creation d'un timer modifiable facilement

Message par quady42 »

Bon finalement, j'ai tourné le problème autrement...
L'utilisateur final (mon père) voulait quelque chose de simple et surtout faisable depuis l'appli domoticz de son téléphone (se qui était pas possible avec l'utilisation du thermostat sur l'appli, où l'on peux seulement régler de 10 à 30 et le 0/100% n'était pas à son gout et obligeait à faire des calculs ...)
J'ai finalement utilisé un interrupteur à sélection où j'ai créer 12 possibilités. Ainsi on sélectionne le nombre d'heure du sélecteur puis on lance le départ du cycle à l'aide d'un push button virtuel.
Image

Code : Tout sélectionner

commandArray = {}
if devicechanged['Démarrage pompe onzion'] == 'On'  then

	if otherdevices['Temps de fonctionnement onzion inter'] == '1h'
	then
	     commandArray['Pompe onzion']='On FOR 60'
	     print ("Print Mise en route pompe onzion pour 1h")
	     
	elseif otherdevices['Temps de fonctionnement onzion inter'] == '2h'
	then
	     commandArray['Pompe onzion']='On FOR 120'
	     print ("Print Mise en route pompe onzion pour 2h")
	     
	elseif otherdevices['Temps de fonctionnement onzion inter'] == '3h'
	then
	     commandArray['Pompe onzion']='On FOR 180'
	     print ("Print Mise en route pompe onzion pour 3h")
	     
	elseif otherdevices['Temps de fonctionnement onzion inter'] == '4h'
	then
	     commandArray['Pompe onzion']='On FOR 240'
	     print ("Print Mise en route pompe onzion pour 4h")
	     
	elseif otherdevices['Temps de fonctionnement onzion inter'] == '5h'
	then
        commandArray['Pompe onzion']='On FOR 300'
	    print ("Print Mise en route pompe onzion pour 5h")
	     
	elseif otherdevices['Temps de fonctionnement onzion inter'] == '6h'
	then
        commandArray['Pompe onzion']='On FOR 360'
	    print ("Print Mise en route pompe onzion pour 6h")
	     
	elseif otherdevices['Temps de fonctionnement onzion inter'] == '7h'
	then
        commandArray['Pompe onzion']='On FOR 420'
	    print ("Print Mise en route pompe onzion pour 7h")
	    
	elseif otherdevices['Temps de fonctionnement onzion inter'] == '8h'
	then
        commandArray['Pompe onzion']='On FOR 480'
	    print ("Print Mise en route pompe onzion pour 8h")
	    
	elseif otherdevices['Temps de fonctionnement onzion inter'] == '9h'
	then
        commandArray['Pompe onzion']='On FOR 540'
	    print ("Print Mise en route pompe onzion pour 9h")
	    
	elseif otherdevices['Temps de fonctionnement onzion inter'] == '10h'
	then
        commandArray['Pompe onzion']='On FOR 600'
	    print ("Print Mise en route pompe onzion pour 10h")
	    
	elseif otherdevices['Temps de fonctionnement onzion inter'] == '11h'
	then
        commandArray['Pompe onzion']='On FOR 660'	     
	    print ("Print Mise en route pompe onzion pour 11h")
	    
	elseif otherdevices['Temps de fonctionnement onzion inter'] == '12h'
	then
        commandArray['Pompe onzion']='On FOR 720'	
	    print ("Print Mise en route pompe onzion pour 12h")
	    
    else 
        commandArray['Pompe onzion']='Off'	
		print ('Print arret pompe onzion')
		commandArray["Démarrage pompe onzion"]='Off'		
    end

    
end
Reste encore un petit problème... mon père voudrais pouvoir connaitre le temps restant de fonctionnement jusqu’à l’arrêt...

Mais dans le cas présent en utilisant la fonction "On FOR xx", est-il possible de connaitre ce temps restant pour pouvoir le pousser dans un compteur virtuel?
Fichiers joints
domo.PNG
domo.PNG (64.27 Kio) Vu 114 fois
Domoticz béta - Raspberry PI3 - RFXtrx433E - z-wave.me ZME_UZB1 - Clé 3G
SOMFY RTS -fibaro fgbs-001- wemos D1 mini ESPeasy
Sonoff : basic - S20 - Dual R2 - Pro 4 CH - Pro 4 Ch R2 tous en Tasmota
Xiaomi: Getway - Température - Incendie - fuite d'eau

quady42
Messages : 79
Enregistré le : 11 sept. 2016, 18:30

Re: Creation d'un timer modifiable facilement

Message par quady42 »

Bon finalement je me répond à moi même...
J'ai créer un autre script en // du 1er pour indiquer le temps restant dans un compteur virtuel

Code : Tout sélectionner

------------------- --------------------
--    Fonction différence de temps    --
------------------- --------------------
function timedifference (s)
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
--------------------------------------------------------------------------------------------------------

------------------- --------------------
-- Fonction arrondir à deux décimales --
------------------- --------------------
-- Le chiffre"x" (dec or x) correspond au nombre de décimales à prendre en compte dans le resultat
function arrondir(num, dec)
    if num == 0 then
    return 0
    else
    local mult = 10^(dec or 2)
    return math.floor(num * mult + 0.5) / mult
    end
end
---------------------------------------------------------------------------------------------------------

commandArray = {}

if otherdevices['Pompe onzion'] == 'On' then

    if(timedifference(otherdevices_lastupdate['Pompe onzion']) > 0 and otherdevices['Temps de fonctionnement onzion inter'] == '1h')
    then
    temps_en_heures = ((60-(timedifference(otherdevices_lastupdate['Pompe onzion'])/60))/60)
    temps_en_heures_arrondi=arrondir(temps_en_heures,1)
    print ('temps restant sur 1h='..temps_en_heures_arrondi)
    
    -- Envoi de la valeur dans le compteur "idx125" --
    commandArray['UpdateDevice'] = 121 .. '|0|' .. tostring(temps_en_heures_arrondi)
    
    elseif(timedifference(otherdevices_lastupdate['Pompe onzion']) > 0 and otherdevices['Temps de fonctionnement onzion inter'] == '2h')
    then
    temps_en_heures = ((120-(timedifference(otherdevices_lastupdate['Pompe onzion'])/60))/60)
    temps_en_heures_arrondi=arrondir(temps_en_heures,1)
    print ('temps restant sur 2h='..temps_en_heures_arrondi)
    
    -- Envoi de la valeur dans le compteur "idx125" --
    commandArray['UpdateDevice'] = 125 .. '|0|' .. tostring(temps_en_heures_arrondi)
    
    elseif(timedifference(otherdevices_lastupdate['Pompe onzion']) > 0 and otherdevices['Temps de fonctionnement onzion inter'] == '3h')
    then
    temps_en_heures = ((180-(timedifference(otherdevices_lastupdate['Pompe onzion'])/60))/60)
    temps_en_heures_arrondi=arrondir(temps_en_heures,1)
    print ('temps restant sur 3h='..temps_en_heures_arrondi)
    
    -- Envoi de la valeur dans le compteur "idx125" --
    commandArray['UpdateDevice'] = 125 .. '|0|' .. tostring(temps_en_heures_arrondi)
    
    elseif(timedifference(otherdevices_lastupdate['Pompe onzion']) > 0 and otherdevices['Temps de fonctionnement onzion inter'] == '4h')
    then
    temps_en_heures = ((240-(timedifference(otherdevices_lastupdate['Pompe onzion'])/60))/60)
    temps_en_heures_arrondi=arrondir(temps_en_heures,1)
    print ('temps restant sur 4h='..temps_en_heures_arrondi)
    
    -- Envoi de la valeur dans le compteur "idx125" --
    commandArray['UpdateDevice'] = 125 .. '|0|' .. tostring(temps_en_heures_arrondi)
    
    elseif(timedifference(otherdevices_lastupdate['Pompe onzion']) > 0 and otherdevices['Temps de fonctionnement onzion inter'] == '5h')
    then
    temps_en_heures = ((300-(timedifference(otherdevices_lastupdate['Pompe onzion'])/60))/60)
    temps_en_heures_arrondi=arrondir(temps_en_heures,1)
    print ('temps restant sur 5h='..temps_en_heures_arrondi)
    
    -- Envoi de la valeur dans le compteur "idx125" --
    commandArray['UpdateDevice'] = 125 .. '|0|' .. tostring(temps_en_heures_arrondi)
    
    elseif(timedifference(otherdevices_lastupdate['Pompe onzion']) > 0 and otherdevices['Temps de fonctionnement onzion inter'] == '6h')
    then
    temps_en_heures = ((360-(timedifference(otherdevices_lastupdate['Pompe onzion'])/60))/60)
    temps_en_heures_arrondi=arrondir(temps_en_heures,1)
    print ('temps restant sur 6h='..temps_en_heures_arrondi)
    
    -- Envoi de la valeur dans le compteur "idx125" --
    commandArray['UpdateDevice'] = 125 .. '|0|' .. tostring(temps_en_heures_arrondi)
    
    elseif(timedifference(otherdevices_lastupdate['Pompe onzion']) > 0 and otherdevices['Temps de fonctionnement onzion inter'] == '7h')
    then
    temps_en_heures = ((420-(timedifference(otherdevices_lastupdate['Pompe onzion'])/60))/60)
    temps_en_heures_arrondi=arrondir(temps_en_heures,1)
    print ('temps restant sur 7h='..temps_en_heures_arrondi)
    
    -- Envoi de la valeur dans le compteur "idx125" --
    commandArray['UpdateDevice'] = 125 .. '|0|' .. tostring(temps_en_heures_arrondi)
    
    elseif(timedifference(otherdevices_lastupdate['Pompe onzion']) > 0 and otherdevices['Temps de fonctionnement onzion inter'] == '8h')
    then
    temps_en_heures = ((480-(timedifference(otherdevices_lastupdate['Pompe onzion'])/60))/60)
    temps_en_heures_arrondi=arrondir(temps_en_heures,1)
    print ('temps restant sur 8h='..temps_en_heures_arrondi)

    -- Envoi de la valeur dans le compteur "idx125" --
    commandArray['UpdateDevice'] = 125 .. '|0|' .. tostring(temps_en_heures_arrondi)
    
    elseif(timedifference(otherdevices_lastupdate['Pompe onzion']) > 0 and otherdevices['Temps de fonctionnement onzion inter'] == '9h')
    then
    temps_en_heures = ((540-(timedifference(otherdevices_lastupdate['Pompe onzion'])/60))/60)
    temps_en_heures_arrondi=arrondir(temps_en_heures,1)
    print ('temps restant sur 9h='..temps_en_heures_arrondi)

    -- Envoi de la valeur dans le compteur "idx125" --
    commandArray['UpdateDevice'] = 125 .. '|0|' .. tostring(temps_en_heures_arrondi)
    
    elseif(timedifference(otherdevices_lastupdate['Pompe onzion']) > 0 and otherdevices['Temps de fonctionnement onzion inter'] == '10h')
    then
    temps_en_heures = ((600-(timedifference(otherdevices_lastupdate['Pompe onzion'])/60))/60)
    temps_en_heures_arrondi=arrondir(temps_en_heures,1)
    print ('temps restant sur 10h='..temps_en_heures_arrondi)
 
    -- Envoi de la valeur dans le compteur "idx125" --
    commandArray['UpdateDevice'] = 125 .. '|0|' .. tostring(temps_en_heures_arrondi)
    
    elseif(timedifference(otherdevices_lastupdate['Pompe onzion']) > 0 and otherdevices['Temps de fonctionnement onzion inter'] == '11h')
    then
    temps_en_heures = ((660-(timedifference(otherdevices_lastupdate['Pompe onzion'])/60))/60)
    temps_en_heures_arrondiarrondir(temps_en_heures,1)
    print ('temps restant sur 11h='..temps_en_heures_arrondi)

    -- Envoi de la valeur dans le compteur "idx125" --
    commandArray['UpdateDevice'] = 125 .. '|0|' .. tostring(temps_en_heures_arrondi)
    
    elseif(timedifference(otherdevices_lastupdate['Pompe onzion']) > 0 and otherdevices['Temps de fonctionnement onzion inter'] == '12h')
    then
    temps_en_heures = ((720-(timedifference(otherdevices_lastupdate['Pompe onzion'])/60))/60)
    temps_en_heures_arrondi=arrondir(temps_en_heures,1)
    print ('temps restant sur 12h='..temps_en_heures_arrondi)

    -- Envoi de la valeur dans le compteur "idx125" --
    commandArray['UpdateDevice'] = 125 .. '|0|' .. tostring(temps_en_heures_arrondi)
    
    elseif(timedifference(otherdevices_lastupdate['Pompe onzion']) > 0 and otherdevices['Temps de fonctionnement onzion inter'] == 'Off')
    then
    temps_en_heures = 0
    print ('Pompe Onzion en Marche Forcée')
    
    -- Envoi de la valeur dans le compteur "idx125" --
    commandArray['UpdateDevice'] = 125 .. '|0|' .. tostring(temps_en_heures)

    end
end
	    
return commandArray
Et désormais ça fonctionne bon je pense que ce même code pourrait être "condensé" mais bon on verra plus tard :)
Domoticz béta - Raspberry PI3 - RFXtrx433E - z-wave.me ZME_UZB1 - Clé 3G
SOMFY RTS -fibaro fgbs-001- wemos D1 mini ESPeasy
Sonoff : basic - S20 - Dual R2 - Pro 4 CH - Pro 4 Ch R2 tous en Tasmota
Xiaomi: Getway - Température - Incendie - fuite d'eau

Répondre