script LUA
-
nicopro33250
- Messages : 36
- Inscription : 31 déc. 2014, 00:07
script LUA
bonjour à tous ,
j'aurais besoin d'aide de qq'un qui sait écrire un script lua
j'ai aucune connaissance en programmation mais j'ai l'impression que ce n'est pas très complexe.
les devices sont :
prise 1
inter virtuel 1
l'action à effectuer est la suivante :
si inter virtuel 1 est activé
alors à 23h00 vérifier combien de temps prise 1 a été à l'état ON depuis 00h00, puis imprimer la valeur dans le log
à 00h10 du jour suivant mettre prise 1 à ON pendant 5% du temps trouvé précédemment puis remettre à OFF
voilà
s'il fonctionne ce script me permettra d'augmenter de 5% par jour la durée de fonctionnement de la prise 1 qui en réalité commande un distributeur d'aliment pour lapin. ça permet de donner chaque jour un peu plus et suivre la croissance des jeunes lapins.
j'aurais besoin d'aide de qq'un qui sait écrire un script lua
j'ai aucune connaissance en programmation mais j'ai l'impression que ce n'est pas très complexe.
les devices sont :
prise 1
inter virtuel 1
l'action à effectuer est la suivante :
si inter virtuel 1 est activé
alors à 23h00 vérifier combien de temps prise 1 a été à l'état ON depuis 00h00, puis imprimer la valeur dans le log
à 00h10 du jour suivant mettre prise 1 à ON pendant 5% du temps trouvé précédemment puis remettre à OFF
voilà
s'il fonctionne ce script me permettra d'augmenter de 5% par jour la durée de fonctionnement de la prise 1 qui en réalité commande un distributeur d'aliment pour lapin. ça permet de donner chaque jour un peu plus et suivre la croissance des jeunes lapins.
Re: script LUA
Intéressant ton problème ! Est-ce que "prise 1" est susceptible d'être manipulée manuellement ou seulement par script ? Le deuxième cas simplifiera le calcul de la durée !
Toujours pour simplifier, il vaudrait mieux faire le calcul à minuit plutôt qu'à 23h...
Pis si tu donne à ton lapin que 5% de ce qu'il a mangé la veille, je te dénonce à L214 :-p
Toujours pour simplifier, il vaudrait mieux faire le calcul à minuit plutôt qu'à 23h...
Pis si tu donne à ton lapin que 5% de ce qu'il a mangé la veille, je te dénonce à L214 :-p
-
nicopro33250
- Messages : 36
- Inscription : 31 déc. 2014, 00:07
Re: script LUA
merci
alors oui la prise est actionné déjà par un évènement à 8h et 18h et il y a un delay off qui me sert à ajuster la tempo.
pas de pb pour faire la calcul à minuit
pas besoin non plus d'alerter la L214 . car ils ont de toute manière la dose de base à 8h00 et 18h puis les 5% à 00h10 , ce qui est intéressant c'est que c'est évolutif car les 5% rentrent dans le calcul le jour suivant , ainsi cette dose de complément donné à 00h10 sera de plus en plus forte.
et c'est exactement ce que je cherche.
penses tu que c'est faisable ?
alors oui la prise est actionné déjà par un évènement à 8h et 18h et il y a un delay off qui me sert à ajuster la tempo.
pas de pb pour faire la calcul à minuit
pas besoin non plus d'alerter la L214 . car ils ont de toute manière la dose de base à 8h00 et 18h puis les 5% à 00h10 , ce qui est intéressant c'est que c'est évolutif car les 5% rentrent dans le calcul le jour suivant , ainsi cette dose de complément donné à 00h10 sera de plus en plus forte.
et c'est exactement ce que je cherche.
penses tu que c'est faisable ?
-
nicopro33250
- Messages : 36
- Inscription : 31 déc. 2014, 00:07
Re: script LUA
je viens de trouver ça dans un autre sujet qui permet de calculer le temps de fonctionnement du ON .
je vais tester, si ça marche ça ferait déjà la moitié du boulo.
j'espère que qq'un pourra m'aider pour la suite.
c'est frustrant d'être bloqué si près du but
je vais tester, si ça marche ça ferait déjà la moitié du boulo.
j'espère que qq'un pourra m'aider pour la suite.
c'est frustrant d'être bloqué si près du but
Code : Tout sélectionner
-- Ce script permet de remonter la durée de fonctionnement de la chaudière dans un capteur virtuel de type "Counter Incremental"
--------------------------------
------ Variables à éditer ------
--------------------------------
local switch = 'test' -- Nom de l'interrupteur virtuel Chauffage dans Domoticz
local counter = 38 -- Numéro idx du Counter Incremental dans Domoticz
local current_date = (os.date("%d/%m/%Y")) -- Date courante
local current_heure = (os.date("%X")) -- Heure courante
--------------------------------
-- Fin des variables à éditer --
--------------------------------
-------------------
-- Fonction time --
-------------------
time = os.date("*t")
function timedifference(d)
s = otherdevices_lastupdate[d]
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 = {}
-----------------------------------------------------------------------------------------------------
--------------------Calcul du temps de fonctionnement de la chaudière -------------------------------
-----------------------------------------------------------------------------------------------------
-- Si chauffage ON incrémentation de la variable Domoticz "Total_compteur" --
if (otherdevices[switch]=='On') then
commandArray['Variable:Total_compteur']= tostring(uservariables["Total_compteur"] +1)
end
-- Envoi de la varaible valeur Total_compteur dans le Custom Counter Valeur_Compteur --
Valeur_Compteur = tostring(uservariables["Total_compteur"])
-- Envoi de la valeur dans le compteur "counter" --
commandArray['UpdateDevice'] = counter .. '|0|' .. tostring(Valeur_Compteur)
-- Envoi des informations dans le LOG si chauffage ON --
if (otherdevices[switch]=='On') then
print("")
print("Cumul du temps de fonctionnement du chauffage "..Valeur_Compteur.." Minutes".." // "..math.floor((Valeur_Compteur/60)).. " Heures")
print("")
end
return commandArray
Re: script LUA
Oui, voilà : si l'interrupteur peut être actionné de n'importe quelle façon, cette méthode est la plus fiable !
Attention au compteur incremental, qui ne se remet pas à 0 facilement. Je te conseillerai de mettre simplement la durée dans une variable, ce sera suffisant et puis simple dans ton cas.
Ensuite, il ne reste plus qu'à faire un autre paragraphe au script, qui à 00:00 qui balance un "On FOR n", où n=round(0.05*durée_en_minute) et remet la variable durée à 0
Attention au compteur incremental, qui ne se remet pas à 0 facilement. Je te conseillerai de mettre simplement la durée dans une variable, ce sera suffisant et puis simple dans ton cas.
Ensuite, il ne reste plus qu'à faire un autre paragraphe au script, qui à 00:00 qui balance un "On FOR n", où n=round(0.05*durée_en_minute) et remet la variable durée à 0
-
nicopro33250
- Messages : 36
- Inscription : 31 déc. 2014, 00:07
Re: script LUA
es ce que tu peux me dire ce qu'il faut changer dans ce morceaux du code pour avoir la valeur en secondes et pas en minutes
pour l'instant ça s'imprime bien dans le log
pour l'instant ça s'imprime bien dans le log
Code : Tout sélectionner
------------------- --------------------
-- 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 = {}
-
nicopro33250
- Messages : 36
- Inscription : 31 déc. 2014, 00:07
Re: script LUA
es ce que tu pourra me rajouter les paragraphe pour déclencher le ON de 5% ?
attention toutes la valeurs doivent etre en secondes
attention toutes la valeurs doivent etre en secondes
Re: script LUA
C'est pas là qu'il faut changer, il faudrait remplacer uservariables["Total_compteur"] +1 par uservariables["Total_compteur"] + 60
Mais ça n'a aucun intérêt dans ton cas : le script étant exécuté toutes les minutes, tu n'auras pas une précision supérieure à la minute. Puis à la fin, pour le On FOR, tu as besoin de minutes...
Mais ça n'a aucun intérêt dans ton cas : le script étant exécuté toutes les minutes, tu n'auras pas une précision supérieure à la minute. Puis à la fin, pour le On FOR, tu as besoin de minutes...
-
nicopro33250
- Messages : 36
- Inscription : 31 déc. 2014, 00:07
Re: script LUA
ha ok, mais le on for il me faudra le donner en seconde , 1 minute c'est trop long
Re: script LUA
Pas possible, c'est domoticz qui attends un nombre entier de minutes pour cette commande. Si tu dois envoyer "prise 1" pour quelques secondes seulement, il faut envoyer 2 ordres :le on for il me faudra le donner en seconde , 1 minute c'est trop long
On
Off AFTER n
là, n est en secondes
Mais du coup ça veut dire que la précision d'une minute sur le script de calcul du temps de marche est trop grossière pour ton besoin. Dans ce cas, il ne faut pas utiliser la méthode de ce script mais une autre qui consiste à faire le calcul du temps entre les On et les Off : C'est beaucoup plus amusant au niveau prog