[LUA] Un 3éme bouton stop pour une télécommande 2 boutons

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.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

[LUA] Un 3éme bouton stop pour une télécommande 2 boutons

Message par papoo »

Hier mon WAF est redescendu à un niveau critique. les télécommandes 2 boutons ne permettent pas d’arrêter les stores en position intermédiaire. Je me doutais bien que ce problème finirait par arriver.
Je me suis donc lancé dans un petit script pour améliorer cela.
Mes deux stores velux sont pilotés par des télécommandes deux boutons, montée et descente.
il me faut donc détecter un deuxième appui sur l'un des boutons dans le délai qu'il faut au store pour monter ou descendre (60 secondes)
ces stores sont actionnés par une platine VRT via le réseau IP filaire avec 3 commandes : montée (action 1) arret (action 2) et descente (action 3) mais ce script doit être facilement adaptable à d'autres systèmes.
Le script créé les variables dont il a besoin pour fonctionner et permet la gestion de plusieurs télécommandes (variable "switchs")

Code : Tout sélectionner

--[[ script_device_CMD2boutons.lua
auteur : papoo
version : 1.10
MAJ : 01/08/2016
Création : 31/07/2016
Principe :
 ce script permet de simuler un troisième bouton "STOP" sur une télécommande 2 boutons,
 si un deuxième appui sur le même bouton est effectué en moins d'une minute.
 Associé à un boitier VRT pour la commande de deux volets roulants, ce script permettra l'arrêt du volet concerné
 URL post : http://easydomoticz.com/forum/viewtopic.php?f=17&t=2273#p20697
 ]]--

--------------------------------
------ Tableau des variables à éditer ------
--------------------------------

 local ip = '192.168.1.240:8080'   -- user:pass@ip:port de domoticz
 local vrt = '192.168.1.247' -- Adresse IP du VRT
 local switchs={} ;   
	switchs[0] = {nom="Telecommande 1", canal="1"} 
	switchs[1] = {nom="Telecommande 2", canal="2"}
	-- switchs[3]=''

local debugging = false  -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir      
--------------------------------
-- Fin du tableau des variables à éditer --
--------------------------------
local indexArray=0	
time = os.date("*t")  

function voir_les_logs (s)
    if (debugging) then 
		if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>");
		else
		print ("<font color='#f3031d'>aucune valeur affichable</font>");
		end
    end
end	
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

function urlencode(str)
   if (str) then
   str = string.gsub (str, "\n", "\r\n")
   str = string.gsub (str, "([^%w ])",
   function (c) return string.format ("%%%02X", string.byte(c)) end)
   str = string.gsub (str, " ", "+")
   end
   return str
end 

commandArray = {}


   for key, valeur in pairs(switchs) do
		if(uservariables['CMD_'.. valeur.nom ..'_'.. otherdevices[valeur.nom]] == nil) then
            commandArray[indexArray]={['OpenURL']=ip..'/json.htm?type=command&param=saveuservariable&vname=CMD_'..urlencode(valeur.nom)..'_'.. otherdevices[valeur.nom] ..'&vtype=2&vvalue='..urlencode(otherdevices_lastupdate[valeur.nom])}
			indexArray=indexArray+1
			voir_les_logs("--- --- --- creation variable manquante CMD_"..valeur.nom.."_".. otherdevices[valeur.nom] .."  --- --- --- ",debugging);
        elseif (devicechanged[valeur.nom] and timedifference(uservariables['CMD_'..valeur.nom..'_'..otherdevices[valeur.nom]]) < 60) then
		   commandArray[indexArray]={['OpenURL']= vrt.."/ctrl.cgi?vr"..valeur.canal.."=2"}
			indexArray=indexArray+1		   
            voir_les_logs("--- --- --- Deuxieme appui sur la telecommande ".. valeur.nom ..",  arret du volet --- --- --- ",debugging);		
        elseif(devicechanged[valeur.nom] and uservariables['CMD_'.. valeur.nom..'_'.. otherdevices[valeur.nom]] ~= nil ) then
			commandArray[indexArray] = {['Variable:CMD_'.. valeur.nom..'_'..otherdevices[valeur.nom]] = tostring(otherdevices_lastupdate[valeur.nom])}	
			indexArray=indexArray+1				
		voir_les_logs("--- --- --- mise a jour variable CMD_".. valeur.nom .."_"..otherdevices[valeur.nom].."  --- --- --- ",debugging);	
        end
    end



return commandArray 
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Répondre