[LUA] Un 3éme bouton stop pour une télécommande 2 boutons
Publié : 01 août 2016, 21:44
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")
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¶m=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