Page 4 sur 5

Re: Envoyer 2 fois les commandes On/Off

Publié : 20 déc. 2015, 22:41
par ganq
Super, ca fonctionne...

Merci bcp.

Re: Envoyer 2 fois les commandes On/Off

Publié : 09 janv. 2016, 22:37
par Aryman
Bonjour,

Je viens d'essayer ce script mais j'ai toujours une erreur du type. Je débute en LUA et ce n'est pas facile pour trouver l'erreur.
EventSystem: /home/pi/domoticz/scripts/lua/script_device_twice.lua:61: attempt to concatenate a nil value
La ligne du script correspond a :
commandArray['OpenURL']=ip..'/json.htm?type=command&param=saveuservariable&vname=TWICE_'..urlencode(valeur)..'&vtype=2&vvalue='..urlencode(otherdevices_lastupdate[valeur])

Merci pour votre aide

Re: Envoyer 2 fois les commandes On/Off

Publié : 10 janv. 2016, 10:07
par vil1driver
salut,

mauvais nommage du switch ?

Publié : 10 janv. 2016, 10:53
par deennoo
Attention aux accents, j'ai du les enlever chez moi

Re: Envoyer 2 fois les commandes On/Off

Publié : 12 janv. 2016, 10:07
par Merangle
Bonjour

Ayant également des problèmes de switch qui font la sourde d'oreille, j'ai mis en oeuvre le script de vil1driver.
Cependant, même en doublant la commande, parfois l'ordre ne passe pas.

J'ai constaté qu'en arrêtant puis redémarrant le switch manuellement, la commande passe: ce n'est donc pas un problème de portée du RFXcom ou de réception.
Je me proposais donc d'améliorer le script en émettant la commande inverse de celle que je veux émettre puis la commande correcte.
(par exemple si je veux 'On' , je fais d'abord 'Off' puis 'On') d'où le script

Code : Tout sélectionner

             if (chaine=='On') then                                                                                                                                                  
                        commandArray[1]={['Radiateur Parents']='Off'} -- on renvoie la commande inverse                                                                                 
                        commandArray[2]={['Radiateur Parents']='On AFTER 2'} -- on renvoie la commande normale                                                                          
                else                                                                                                                                                                    
                        commandArray[1]={['Radiateur Parents']='On'} -- on renvoie la commande inverse                                                                                  
                        commandArray[2]={['Radiateur Parents']='Off AFTER 2'} -- on renvoie la commande normale  
Mais le switch n'exécute pas la commande inverse

Code : Tout sélectionner

2016-01-12 09:52:15	On
2016-01-12 09:52:11	On
Extrait de la log : le 09:52:11 correspond à la commande initiale envoyée par le script de contrôle du switch en fonction de la consigne
le 09:52:15 correspond au commandArray[2]={['Radiateur Parents']='On AFTER 2'} émis par le script Twice

la commande commandArray[1]={['Radiateur Parents']='Off'} ne semble pas être prise en compte
Auriez-vous une suggestion pour simuler par script ce qui fonctionne manuellement ?

Merci

Re: Envoyer 2 fois les commandes On/Off

Publié : 07 mars 2016, 10:43
par netstf
Bonjour , j'ai une erreur sur le script peut on m eclairer ?

Error: EventSystem: /home/pi/domoticz/scripts/lua/script_device_twice.lua:71: attempt to concatenate a nil value

Code : Tout sélectionner

-- script_device_twice.lua
--
-- ce script permet de doubler les commandes envoyées à certain périphériques
-- de sorte à fiabiliser leur fonctionnement
-- domoticz agit alors comme un répeteur


--------------------------------
------ Tableau à éditer ------
--------------------------------

 local ip = '192.168.0.17:8080'   -- user:pass@ip:port de domoticz
 
 local switchs={}   

   switchs['0']='Volet cuisine'
   switchs['1']='Volet salon'
   switchs['2']='Volet Salle à manger'
   switchs['3']='Volet ElostF'
   switchs['4']='Volet Maxime'
   switchs['5']='PHILIPS salle manger'
   switchs['6']='PHILIPS salon'
   switchs['7']='Luminaire'
   switchs['8']='Radiateur Sejour'
   switchs['9']='Radiateur Maxime'
   switchs['10']='Radiateur EloStF'
   switchs['11']='Enceinte Bluetooth'
   switchs['12']='Webcam Maxime'
   switchs['13']='Camera'
   switchs['14']='VMC'


      
--------------------------------
-- Fin du tableau à éditer --
--------------------------------

time = os.date("*t")  

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['TWICE_'..valeur..'_On'] == nil) then
            commandArray[tonumber(key)]={['OpenURL']=ip..'/json.htm?type=command&param=saveuservariable&vname=TWICE_'..urlencode(valeur)..'_On&vtype=2&vvalue='..urlencode(otherdevices_lastupdate[valeur])}
            print('TWICE : création variable manquante TWICE_'..valeur..'_On')
         elseif(uservariables['TWICE_'..valeur..'_Off'] == nil) then
            commandArray[tonumber(key)]={['OpenURL']=ip..'/json.htm?type=command&param=saveuservariable&vname=TWICE_'..urlencode(valeur)..'_Off&vtype=2&vvalue='..urlencode(otherdevices_lastupdate[valeur])}
            print('TWICE : création variable manquante TWICE_'..valeur..'_Off')   
         elseif (devicechanged[valeur] and timedifference(uservariables['TWICE_'..valeur..'_'..otherdevices[valeur]]) > 5) then
            commandArray[valeur] = otherdevices[valeur]..' AFTER 1'
            commandArray['Variable:TWICE_'..valeur..'_'..otherdevices[valeur]]=otherdevices_lastupdate[valeur]
            print('TWICE : '..valeur.. ' -> ' ..otherdevices[valeur])
         end
         
               
   end



return commandArray 
Merci

Re: Envoyer 2 fois les commandes On/Off (send twice)

Publié : 14 mai 2016, 22:32
par papoo
j'ai légèrement modifié le script pour qu'il prenne en compte mes volets
en effet leur état n'est pas On et Off mais Open, closed ou Stopped. j'ai donc remplacé l'appel en dur des variables On et Off par l'état du device (otherdevices[valeur]) pour le test d'existence et la création de la variable associée

Code : Tout sélectionner

		if(uservariables['TWICE_'.. valeur ..'_'.. otherdevices[valeur]] == nil) then
            commandArray[tonumber(key)]={['OpenURL']=ip..'/json.htm?type=command&param=saveuservariable&vname=TWICE_'..urlencode(valeur)..'_'.. otherdevices[valeur] ..'&vtype=2&vvalue='..urlencode(otherdevices_lastupdate[valeur])}
            print('TWICE : creation variable manquante TWICE_'..valeur..'_'.. otherdevices[valeur])
        elseif(uservariables['TWICE_'.. valeur..'_'.. otherdevices[valeur]] == nil) then
            commandArray[tonumber(key)]={['OpenURL']=ip..'/json.htm?type=command&param=saveuservariable&vname=TWICE_'..urlencode(valeur)..'_'..otherdevices[valeur]..'&vtype=2&vvalue='..urlencode(otherdevices_lastupdate[valeur])}
            print('TWICE : creation variable manquante TWICE_'..valeur..'_'.. otherdevices[valeur])   

Re: Envoyer 2 fois les commandes On/Off (send twice)

Publié : 23 janv. 2018, 14:35
par olixelle
Hello,

juste un petit merci pour ton script, ca fait le boulot :)

Re: Envoyer 2 fois les commandes On/Off (send twice)

Publié : 04 mars 2018, 20:50
par phalseb
Bonjour,

J'ai un petit soucis avec le script malheureusement il bug chez moi.

Les variables sont bien crées, j'ai juste modifier le script
local ip = '192.168.1.XX:XXXX' -- user:pass@ip:port de domoticz
(XX: je suis parano même si c'est une ip interne, je n'aime pas les notés sur internet ;-) )

local switchs={}

switchs['0']='Lampe A'
switchs['1']='Lampe B'
switchs['2']='Lampe C'
switchs['3']='Lampe D'
-- switchs['4']='chauffage salon'
-- switchs['5']='chauffage salle de bain'

Mon soucis:
je n'ai pas de "retour d'état" lorsque j'utilise les télécommandes
et pour les lampes B, C, et D lorsque je les utilise dans domoticz elles s'allument puis sétegnent ou inversément.

Avez vous eu ce genre de problème?
Merci de votre aide

Seb

Re: Envoyer 2 fois les commandes On/Off (send twice)

Publié : 01 août 2018, 11:34
par boby69300
Bonjour,

Tout d'abord merci pour ce script, qui a solutionné mes problèmes. J'ai galéré un peu avec les variables qui ne voulaient pas se créer automatiquement :shock: , donc pour contourner ce problème j'ai simplement tapé les url dans un navigateur pour afficher le status du switch et j'ai rafraichit la page pour me voir signaler que la variable existait déjà (= variable créée :) :) ).

Je partage aussi ce que j'ai pu constater et qui pourrait expliquer pourquoi certains modules chacon ont du mal à fonctionner correctement, en particulier le 54755 de chez DI-O qui fut un des tous premiers sur le marché. J'ai constaté qu'avec 2 modules cote à cote (ok, non recommandé suivant la notice :!: ), un des modules fonctionnait très bien, et l'autre avait de multiples ratés. Il se trouve que ces modules ont des dates de fabrication différentes au dos (juillet 2014 vs août 2017), et malheureusement le plus récent a une conception revue à la baisse :roll: :

Image

A gauche le plus ancien, à droite le plus récent, on remarque bien les efforts de simplification de DI-O, mais cela se fait certainement au détriment de la fiabilité du signal reçu.

On remarque aussi que la protection thermique du relais à simplement disparu:
Image

Pas terrible de la part de DI-O, mais c'est le jeu de démarrer avec un produit robuste pour attaquer le marché avant de faire plein de productivités techniques pour engranger un max de profit... Bref, si vous avez des modules de 2014, il se peut qu'ils se comportent mieux que ceux plus récents, surtout mis cote à cote. Sinon, il faut soigner votre installation, et espacer au maximum les modules (au moins 8 mètres).