Page 1 sur 2

script LUA

Publié : 23 mars 2017, 16:33
par nicopro33250
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.

Re: script LUA

Publié : 23 mars 2017, 19:46
par aleph0
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

Re: script LUA

Publié : 23 mars 2017, 21:04
par nicopro33250
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 ?

Re: script LUA

Publié : 24 mars 2017, 18:54
par nicopro33250
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

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

Publié : 24 mars 2017, 19:12
par aleph0
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

Re: script LUA

Publié : 24 mars 2017, 19:37
par nicopro33250
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

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 = {}



Re: script LUA

Publié : 24 mars 2017, 19:40
par nicopro33250
es ce que tu pourra me rajouter les paragraphe pour déclencher le ON de 5% ?
attention toutes la valeurs doivent etre en secondes

Re: script LUA

Publié : 24 mars 2017, 19:42
par aleph0
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...

Re: script LUA

Publié : 24 mars 2017, 20:44
par nicopro33250
ha ok, mais le on for il me faudra le donner en seconde , 1 minute c'est trop long

Re: script LUA

Publié : 24 mars 2017, 21:33
par aleph0
le on for il me faudra le donner en seconde , 1 minute c'est trop long
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 :
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 ;) surtout qu'il faut pouvoir calculer juste même dans le cas où l'on a 2 Off ou 2 On successif !