[LUA] Envoyer 2 fois les commandes On/Off (send twice)

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.
Thierry_06
Messages : 167
Inscription : 02 janv. 2017, 11:02
Localisation : Alpes maritimes

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

Message par Thierry_06 »

Bonjour

J'ai un problème avec le script de Vil1driver modifié par papoo pour les volets roulants
J'explique :

- pour tous les interrupteurs ça fonctionne parfaitement comme on peut le voir sur le log

- pour les volets roulants ( somfy avec RFXCom)

si je demande la fermeture du volet , le script envoie bien l'ordre de fermer mais la seconde commande ( qui logiquement devrait être la même) est stop

Une bonne âme pourrait il m'indiquer la voie à suivre pour résoudre ce problème

Code : Tout sélectionner

2018-08-23 10:48:30.032 (RFXCOM) Lighting 6 (Applique_Salon)
2018-08-23 10:48:30.018 Status: User: Admin initiated a switch command (1/Applique_Salon/On)
2018-08-23 10:48:30.086 Status: LUA: TWICE : Applique_Salon -> On
2018-08-23 10:48:30.088 Status: EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_device_twice.lua
2018-08-23 10:48:31.106 (RFXCOM) Lighting 6 (Applique_Salon)
2018-08-23 10:48:31.131 Status: LUA: TWICE : Applique_Salon -> On
2018-08-23 10:48:31.132 Status: EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_device_twice.lua
2018-08-23 10:48:32.160 (RFXCOM) Lighting 6 (Applique_Salon)
2018-08-23 10:48:42.884 (RFXCOM) Temp (Temp Chauffage)
2018-08-23 10:48:44.052 (RFXCOM) Temp (Temp Eau Chaude)
2018-08-23 10:48:47.841 (RFXCOM) Lighting 6 (Applique_Salon)
2018-08-23 10:48:47.822 Status: User: Admin initiated a switch command (1/Applique_Salon/Off)
2018-08-23 10:48:47.889 Status: LUA: TWICE : Applique_Salon -> Off
2018-08-23 10:48:47.890 Status: EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_device_twice.lua
2018-08-23 10:48:48.935 (RFXCOM) Lighting 6 (Applique_Salon)
2018-08-23 10:48:48.989 Status: LUA: TWICE : Applique_Salon -> Off
2018-08-23 10:48:48.990 Status: EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_device_twice.lua
2018-08-23 10:48:50.031 (RFXCOM) Lighting 6 (Applique_Salon)



2018-08-23 10:48:59.243 (RFXCOM) RFY (Volet_roulant_Chambre_1)
2018-08-23 10:48:59.232 Status: User: Admin initiated a switch command (6/Volet_roulant_Chambre_1/Off)
2018-08-23 10:48:59.297 Status: LUA: TWICE : Volet_roulant_Chambre_1 -> Open
2018-08-23 10:48:59.299 Status: EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_device_twice.lua
2018-08-23 10:49:00.345 (RFXCOM) RFY (Volet_roulant_Chambre_1)
2018-08-23 10:49:00.399 Status: LUA: TWICE : Volet_roulant_Chambre_1 -> Stopped
2018-08-23 10:49:00.400 Status: EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_device_twice.lua
2018-08-23 10:49:01.437 (RFXCOM) RFY (Volet_roulant_Chambre_1)
2018-08-23 10:49:14.201 (RFXCOM) Temp (Temp Exterieur Lampe)

Le script utilisé

Code : Tout sélectionner

 script_device_twice.lua
--
-- ce script permet de doubler les commandes envoyees aux switchs 
-- de sorte a  fiabiliser leur fonctionnement
-- domoticz agit alors comme un repeteur


--------------------------------
------ Tableau a editer ------
--------------------------------

 local ip = '192.168.xxx.xxx:xxxx'   -- user:pass@ip:port de domoticz
 
 local switch={} 
  
   switch['0']='Cafetiere'
   switch['1']='Entree'
   switch['2']='Applique_Salon'
   switch['3']='Bandeau_Cuisine'
   switch['4']='Eclairage_Jardin'
   switch['5']='Module_Kyala'
   switch['6']='Globe'
   switch['7']='Lampadaire_Boule'
   switch['8']='PC_Ventilateur'
   switch['9']='Prise_commandee'
   switch['10']='Volet_roulant_Salon'
   switch['11']='Volet_roulant_Cuisine'
   switch['12']='Volet_roulant_Chambre_1'
   switch['13']='Volet_roulant_Chambre_2'
 


-- etc..
      
--------------------------------
-- Fin du tableau a editer --
--------------------------------

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(switch) do

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

Mon installation Pi4+ OS Raspbian
Rfxcom(pour VR Somfy)+ 2 Zigbee 3.0 USB dongle Plus(Sonoff) + Esp12(avec sonde ds1820/GY30 + Tasmota)
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

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

Message par vil1driver »

Je n'utilise pas somfy mais n'est ce pas le fonctionnement normal ?
2 commandes identiques successives ne font pas stop ?
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
Thierry_06
Messages : 167
Inscription : 02 janv. 2017, 11:02
Localisation : Alpes maritimes

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

Message par Thierry_06 »

Bonjour

Non deux appuis successifs ne fait pas stopper le volet . Il y a un bouton monté un bouton descente et un bouton stop .
Avant j'avais dans un scenario de départ de la maison la répétition de la même commande de fermeture des volets à 4 secondes d'intervalle parce que mes volets sont un peu récalcitrant ils n’obéissent pas toujours au premier ordre ( comme les enfants ;) )

Et là , je voulais améliorer et uniformiser la procédure ..... et ça ne marche pas .
Mon installation Pi4+ OS Raspbian
Rfxcom(pour VR Somfy)+ 2 Zigbee 3.0 USB dongle Plus(Sonoff) + Esp12(avec sonde ds1820/GY30 + Tasmota)
miralant
Messages : 157
Inscription : 02 mars 2018, 14:33

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

Message par miralant »

Bonjour,

J'ai un problème sur la création des variables (dans le log)

Code : Tout sélectionner

2019-02-10 18:21:04.869 Error: Error opening url: 192.168.1.21:8080/json.htm?type=command¶m=saveuservariable&vname=TWICE_Salon%5FLampadaire_On&vtype=2&vvalue=2019%2D02%2D09+22%3A17%3A45
J'avoue que je vois pas pourquoi il me transforma la chaine (apres command, le caractère bizarre). Si je lance la commande de l'API en corrigeant via un navigateur, ma variable est bien crée.
baliku
Messages : 12
Inscription : 31 mai 2018, 18:39

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

Message par baliku »

Bonjour,

Merci encore pour tout ton travail sur domoticz c'est vraiment agréable...

Bref, j'ai quelques questions sur ce script (qui vient en complément du PID) :
-Le script doit il être en Trigger :ALL ou DEVICE ?
-dans les log je n'ai pas d'erreur mais dans les 2 cas j'ai :
2019-12-01 15:19:06.839 Status: LUA: TWICE : création variable manquante TWICE_TSdB1_On
2019-12-01 15:19:06.839 Status: LUA: TWICE : création variable manquante TWICE_TSdB2_On
2019-12-01 15:19:06.839 Status: LUA: TWICE : création variable manquante TWICE_TCh1_On
2019-12-01 15:19:06.839 Status: LUA: TWICE : création variable manquante TWICE_TCh2_On
2019-12-01 15:19:06.839 Status: LUA: TWICE : création variable manquante TWICE_TCh3_On
2019-12-01 15:19:06.839 Status: EventSystem: Fetching URL 192.168.1.10:8084/json.htm?type=command&param=saveuservariable&vname=TWICE_TCh2_On&vtype=2&vvalue=2019%2D12%2D01+15%3A10%3A02 after 0.2 seconds...
2019-12-01 15:19:06.840 Status: EventSystem: Fetching URL 192.168.1.10:8084/json.htm?type=command&param=saveuservariable&vname=TWICE_TCh3_On&vtype=2&vvalue=2019%2D12%2D01+15%3A10%3A03 after 0.2 seconds...
2019-12-01 15:19:06.840 Status: EventSystem: Fetching URL 192.168.1.10:8084/json.htm?type=command&param=saveuservariable&vname=TWICE_TSdB1_On&vtype=2&vvalue=2019%2D12%2D01+15%3A10%3A04 after 0.2 seconds...
2019-12-01 15:19:06.840 Status: EventSystem: Fetching URL 192.168.1.10:8084/json.htm?type=command&param=saveuservariable&vname=TWICE_TSdB2_On&vtype=2&vvalue=2019%2D12%2D01+15%3A10%3A05 after 0.2 seconds...
2019-12-01 15:19:06.840 Status: EventSystem: Fetching URL 192.168.1.10:8084/json.htm?type=command&param=saveuservariable&vname=TWICE_TCh1_On&vtype=2&vvalue=2019%2D12%2D01+15%3A10%3A01 after 0.2 seconds...
2019-12-01 15:19:06.840 Status: EventSystem: Script event triggered: Send_Twice
qui se répète indéfiniment toute les secondes, est-ce normal ?
-Les variables TWICE_TSdB1_On n'apparaissent pas dans variable utilisateur, dois-je les créer pour arrêter ça ?

En tous cas merci encore.
NAS Syno, Last Stable Ver°
RFLink 433.92+NRF24L01 : 6 THN132N, 5 KIT_FP433TEMP / ++MiLights / ++DI-O
HarmonyHub : FreeRev
2 Amp Marantz & Plusieurs Heos HOME
KLF200 : 5 Somfy IO
IFTTT : GoogleAgenda
Blockly, DzVents, Bash
Tasker
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

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

Message par vil1driver »

Salut,

La commande pour créer les variables n'est plus bonne.. Je corrige.

Le Trigger est indiqué : device

Ps: ce script est incompatible avec le PID, les 2 script ne doivent pas agir sur les mêmes devices
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
multinet
Messages : 24
Inscription : 09 févr. 2016, 13:07

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

Message par multinet »

Bonjour

Suite à une mise a jour de domoticz en 2021.1 ce scripts semble ne plus fonctionner (on off en boucle)

qq aurait il un scripts à jour?

merci!
victor81
Messages : 152
Inscription : 25 juin 2017, 09:59
Localisation : Tarn

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

Message par victor81 »

je deterre le post
ca a l'air de fonctionner pour la derniere version stable 2022.1
en tout cas pas d'erreur dans les log

edit: de temps en temps, il tourne en boucle
comme je l'utilise pour des chauffages, je vais l'arreter du coup ;)
Rpi 3b jessie sur ssd, rflink48, domoticz 4.9700, YANA
ma presentation: https://easydomoticz.com/forum/viewtopi ... =21&t=6449
Flying Domotic
Messages : 772
Inscription : 10 mars 2020, 15:26

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

Message par Flying Domotic »

Si les équipements commandés sont sensibles aux ratés (genre chauffage), il faut peut être se poser la question de la technologie à utiliser ? En tous cas, la radio ne semble pas adaptée, à te lire ;-)

ZigBee peut être ?
Répondre