[LUA] Envoyer 2 fois les commandes On/Off (send twice)
Re: Envoyer 2 fois les commandes On/Off
Super, ca fonctionne...
Merci bcp.
Merci bcp.
domoticien amateur option bidouille
Re: Envoyer 2 fois les commandes On/Off
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¶m=saveuservariable&vname=TWICE_'..urlencode(valeur)..'&vtype=2&vvalue='..urlencode(otherdevices_lastupdate[valeur])
Merci pour votre aide
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¶m=saveuservariable&vname=TWICE_'..urlencode(valeur)..'&vtype=2&vvalue='..urlencode(otherdevices_lastupdate[valeur])
Merci pour votre aide
B+ / Rfxcom / Zwave / DIO / FIBARO / SMART HOME / OREGON
-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Envoyer 2 fois les commandes On/Off
salut,
mauvais nommage du switch ?
mauvais nommage du switch ?
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
Re: Envoyer 2 fois les commandes On/Off
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
Mais le switch n'exécute pas la commande inverse
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
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
Code : Tout sélectionner
2016-01-12 09:52:15 On
2016-01-12 09:52:11 On
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
Synology DS212 + RFXTrx433 + AEon Stick S2
Oregon - Thgr122Nx / Chacon - module 1000w - détecteur de fumée 34131 / OWL -CM180 / Greenwave Multiprise
Oregon - Thgr122Nx / Chacon - module 1000w - détecteur de fumée 34131 / OWL -CM180 / Greenwave Multiprise
Re: Envoyer 2 fois les commandes On/Off
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
Merci
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¶m=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¶m=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
Re: Envoyer 2 fois les commandes On/Off (send twice)
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
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¶m=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¶m=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)
Hello,
juste un petit merci pour ton script, ca fait le boulot
juste un petit merci pour ton script, ca fait le boulot
Re: Envoyer 2 fois les commandes On/Off (send twice)
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
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)
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
, 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
:

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:

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).
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
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

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:

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).
Dernière modification par boby69300 le 13 sept. 2018, 08:54, modifié 1 fois.