Page 2 sur 4

Re: Rflink et somfy RTS : affichage états et log

Posté : 25 oct. 2017, 21:22
par fredandrick65
Je me répond a moi même
j ai fait en LUA du coup pour éviter ces redondances

Code : Tout sélectionner

-- script_device_Synchro_VR.lua

commandArray = {}
-------------------------
----  Synchro VR 01  ----
-------------------------
local TC = 'Telis 01' -- nom de la télécommande volet 01
local IT = 'Volet 01 Terrasse' -- nom du dummy volet 01
local VR = 'RTS Volet 01 Terrasse' -- nom dde l inter rflink volet 01
if devicechanged[TC]=='On' then
	print (TC..' passe à On')
	commandArray[IT] = 'On'
end
if devicechanged[TC]=='Off' then
	print (TC..' passe à Off')
	commandArray[IT] = 'Off'
end
if devicechanged[TC]=='Stop' then
	print (TC..' passe à Stop')
	commandArray[IT] = 'Stop'
end
if devicechanged[IT]=='On' then
	print (IT..' passe à On')
	commandArray[VR] = 'On'
end
if devicechanged[IT]=='Off' then
	print (IT..' passe à Off')
	commandArray[VR] = 'Off'
end
if devicechanged[IT]=='Stop' then
	print (IT..' passe à Stop')
	commandArray[VR] = 'Off'
	commandArray[VR] = 'Stop'
end-------------------------
----  Synchro VR 02  ----
-------------------------
local TC = 'Telis 02'
local IT = 'Volet 02 Salon TV'
local VR = 'RTS Volet 02 Salon TV'
if devicechanged[TC]=='On' then
	print (TC..' passe à On')
	commandArray[IT] = 'On'
end
if devicechanged[TC]=='Off' then
	print (TC..' passe à Off')
	commandArray[IT] = 'Off'
end
if devicechanged[TC]=='Stop' then
	print (TC..' passe à Stop')
	commandArray[IT] = 'Stop'
end
if devicechanged[IT]=='On' then
	print (IT..' passe à On')
	commandArray[VR] = 'On'
end
if devicechanged[IT]=='Off' then
	print (IT..' passe à Off')
	commandArray[VR] = 'Off'
end
if devicechanged[IT]=='Stop' then
	print (IT..' passe à Stop')
	commandArray[VR] = 'Off'
	commandArray[VR] = 'Stop'
end-------------------------
--	etc...
return commandArray
il doit y avoir plus simple mais ca fonctionne
pour le Stop c'est pas encore au top mais je vais y travailler

Re: Rflink et somfy RTS : affichage états et log

Posté : 25 oct. 2017, 22:32
par cyberbob
Pourquoi il n'y a pas la variable utilisateur "volet manuel" comme dans le blockly du début ?
Cette variable de type entier avait été au préalable créée dans le menu "Réglages/plus d'option/variable utilisateurs" de domoticz.
Dans le blockly elle prend la valeur soit 0 ou 1, et elle change d'état lorsque une télécommande est utilisée, ou non.
Le but en fait est :
- Lorsque une télécommande est utilisée : on met a jour l'inter virtuel et NON le rflink puisque c'est la télécommande qui envoie l'ordre (sinon on va envoyé 2 ordres au volet : redondance)
- Lorsque l'inter virtuel est utilisé : on commande aussi l'inter du rflink puisque c'est lui qui va commander le volet.

En faisant de cette manière, l'inter virtuel affiche l'état réel du volet, et on voit quand la télécommande a été utilisée avec l'inter de celle-ci.
Cela fonctionne correctement, je compte le faire en lua mais lorsque plusieurs volet seront installé...

Re: Rflink et somfy RTS : affichage états et log

Posté : 28 oct. 2017, 11:25
par fredandrick65
J ai effectivement modifié mon script lua, pour en faire deux en fait

script_device_Synchro_VR_Part1.lua qui gère les Telis et met a jour la Variable utilisateur

Code : Tout sélectionner

-- Fred & Rick - 2017
-- script_device_Synchro_VR_Part1.lua

commandArray = {}

------------------------------------------------------------------
-------  Synchro VR 01  ------------------------------------------
------------------------------------------------------------------

local TC = 'Telis 01'
local IT = 'Volet 01 Terrasse'
local VarMan = 'Volet Manuel 01'
local VarMan2 = 'Variable:Volet Manuel 01'

if devicechanged[TC]=='On' then
	print (TC..' passe à On ------------- Fermeture du volet via Telis')
	commandArray[#commandArray + 1] = {[IT] = 'On'}
	commandArray[#commandArray + 1] = {[VarMan2] = '1'}
end

if devicechanged[TC]=='Off' then
	print (TC..' passe à Off ------------- Ouverture du volet via Telis')
	commandArray[#commandArray + 1] = {[IT] = 'Off'}
	commandArray[#commandArray + 1] = {[VarMan2] = '1'}
end

if devicechanged[TC]=='Stop' then
	print (TC..' passe à Stop ------------- Arret du volet via Telis')
	commandArray[#commandArray + 1] = {[IT] = 'Stop'}
	commandArray[#commandArray + 1] = {[VarMan2] = '1'}
end

------------------------------------------------------------------
-------  Synchro VR 02  ------------------------------------------
------------------------------------------------------------------

local TC = 'Telis 02'
local IT = 'Volet 02 Salon TV'
local VarMan = 'Volet Manuel 02'
local VarMan2 = 'Variable:Volet Manuel 02'

if devicechanged[TC]=='On' then
	print (TC..' passe à On ------------- Fermeture du volet via Telis')
	commandArray[#commandArray + 1] = {[IT] = 'On'}
	commandArray[#commandArray + 1] = {[VarMan2] = '1'}
end

if devicechanged[TC]=='Off' then
	print (TC..' passe à Off ------------- Ouverture du volet via Telis')
	commandArray[#commandArray + 1] = {[IT] = 'Off'}
	commandArray[#commandArray + 1] = {[VarMan2] = '1'}
end

if devicechanged[TC]=='Stop' then
	print (TC..' passe à Stop ------------- Arret du volet via Telis')
	commandArray[#commandArray + 1] = {[IT] = 'Stop'}
	commandArray[#commandArray + 1] = {[VarMan2] = '1'}
end

-- etc...................

return commandArray

script_device_Synchro_VR_Part2.lua qui gère les Volets eux même et remet a Zéro la Variable utilisateur

Code : Tout sélectionner

-- Fred & Rick - 2017
-- script_device_Synchro_VR_Part2.lua

commandArray = {}

------------------------------------------------------------------
-------  Synchro VR 01  ------------------------------------------
------------------------------------------------------------------

local IT = 'Volet 01 Terrasse'
local VR = 'RTS Volet 01 Terrasse'
local VarMan = 'Volet Manuel 01'
local VarMan2 = 'Variable:Volet Manuel 01'

if devicechanged[IT]=='On' and uservariables[VarMan] == '0' then
	print (IT..' passe à On ----- Fermeture du volet via Domoticz')
	commandArray[#commandArray + 1] = {[VR] = 'On'}
end

if devicechanged[IT]=='Off' and uservariables[VarMan] == '0' then
	print (IT..' passe à Off ----- Ouverture du volet via Domoticz')
	commandArray[#commandArray + 1] = {[VR] = 'Off'}
end

if devicechanged[IT]=='Stop' and uservariables[VarMan] == '0' then
	print (IT..' passe à Stop ----- Arret du volet via Domoticz')
	commandArray[#commandArray + 1] = {[VR] = 'Stop'}
end

if devicechanged[IT]=='On' or devicechanged[IT]=='Off' or devicechanged[IT]=='Stop' then
	commandArray[#commandArray + 1] = {[VarMan2] = '0'}
end


------------------------------------------------------------------
-------  Synchro VR 02  ------------------------------------------
------------------------------------------------------------------

local IT = 'Volet 02 Salon TV'
local VR = 'RTS Volet 02 Salon TV'
local VarMan = 'Volet Manuel 02'
local VarMan2 = 'Variable:Volet Manuel 02'

if devicechanged[IT]=='On' and uservariables[VarMan] == '0' then
	print (IT..' passe à On ----- Fermeture du volet via Domoticz')
	commandArray[#commandArray + 1] = {[VR] = 'On'}
end

if devicechanged[IT]=='Off' and uservariables[VarMan] == '0' then
	print (IT..' passe à Off ----- Ouverture du volet via Domoticz')
	commandArray[#commandArray + 1] = {[VR] = 'Off'}
end

if devicechanged[IT]=='Stop' and uservariables[VarMan] == '0' then
	print (IT..' passe à Stop ----- Arret du volet via Domoticz')
	commandArray[#commandArray + 1] = {[VR] = 'Stop'}
end

if devicechanged[IT]=='On' or devicechanged[IT]=='Off' or devicechanged[IT]=='Stop' then
	commandArray[#commandArray + 1] = {[VarMan2] = '0'}
end

--etc...

return commandArray
IMPRTANT: Les variables utilisateur doivent être de type chaine pour mes deux script.
J ai scinder en deux le script, car sinon (a ce que j'ai compris) la variable utilisateur n est mis a jour que a la fin de l'exécution du script et cela ne fonctionne donc pas correctement.
Il doit y avoir plus simple mais cela fonctionne.

merci a Cyberbob

Re: Rflink et somfy RTS : affichage états et log

Posté : 28 oct. 2017, 16:44
par cyberbob
Content que cela fonctionne aussi pour toi en script LUA.
Mais dommage qu'il a fallu le scinder en 2 scripts, car le script en blockly fonctionne en un seul.
Je suppose que les variables fonctionne suivant le même principe en Lua que en Blockly.
Enfin n'oublie pas de posté ton script lua si tu trouve une amélioration.

Et pourquoi avoir utilisé cette syntaxe :
commandArray[#commandArray + 1] = {[IT] = 'On'}

Au lieu de :
commandArray[IT] = 'On'

Quel est la différence ?

Re: Rflink et somfy RTS : affichage états et log

Posté : 29 oct. 2017, 08:48
par fredandrick65
cyberbob a écrit :Et pourquoi avoir utilisé cette syntaxe :
commandArray[#commandArray + 1] = {[IT] = 'On'}

Au lieu de :
commandArray[IT] = 'On'

Quel est la différence ?
Si j ai bien tout compris (car je ne suis pas un expert) les commandArray ne s'effectuent qu'à la fin du script et su tu modifie deux fois le même device il n'y a que le dernier qui fonctionne, avec commandArray[#commandArray + 1] cela crée une table de commandArray qui est executer dans l ordre a la fin .
Donc pour moi pas besoin de réfléchir si il va y avoir plusieurs modification sur le même élément.

Je vais re-tester en lua sur un seul Script.
Par contre pour moi ton Blocky ne fonctionne pas correctement pour 2 de mes 6 volets.
la dernière commande est systématiquement renvoyé.

Code : Tout sélectionner

2017-10-23 23:19:00.610 EventSystem: Event triggered: Synchro Volet 04_4
2017-10-23 23:19:00.618 RFLink Sending: 10;RTS;f4a444;4;ON
2017-10-23 23:19:30.678 EventSystem: Event triggered: Synchro Volet 04_4
2017-10-23 23:19:30.705 RFLink Sending: 10;RTS;f4a444;4;ON
Impossible de comprendre pourquoi.

Re: Rflink et somfy RTS : affichage états et log

Posté : 04 nov. 2017, 23:59
par cyberbob
J'ai remarqué dans certains cas avec les variables user un fonctionnement incompréhensible.
On pourrais, dans ce cas-ci d'utilisation, s'en passer et prendre un inter virtuel a la place.
Si l'on ne veux pas que l'inter apparaisse dans l'écran des inter, on peut la masquer dans Réglages/plus d'options/plans/périphérique de remplacement/

Re: Rflink et somfy RTS : affichage états et log

Posté : 01 déc. 2018, 17:55
par jiemeb
Bonjour,
Pour avoir les log et l'etat des volets il faut modifier l'enregistrement de la clé dans la base de données.
en utilisant par exemple sqlitebrowser.
arreter le service domoticz et faire une copie de la base de donnée domoticz.db
puis lancer sqlitebroswer.
ouvrir la base de donnée domoticz.db et modifier la table DeviceStatus.
ajouter devant les données de deviceID de votre volet 2 Zero.
exemple DeviceID = 123456 devient 00123456.
Enregistrer les modification et quitter sqlitebrowser.
relancer domoticz et maintenant l'etat les log du volet fonctionne. ;)

Re: Rflink et somfy RTS : affichage états et log

Posté : 13 déc. 2018, 11:58
par Martial
jiemeb a écrit :
01 déc. 2018, 17:55
Bonjour,
Pour avoir les log et l'etat des volets il faut modifier l'enregistrement de la clé dans la base de données.
en utilisant par exemple sqlitebrowser.
arreter le service domoticz et faire une copie de la base de donnée domoticz.db
puis lancer sqlitebroswer.
ouvrir la base de donnée domoticz.db et modifier la table DeviceStatus.
ajouter devant les données de deviceID de votre volet 2 Zero.
exemple DeviceID = 123456 devient 00123456.
Enregistrer les modification et quitter sqlitebrowser.
relancer domoticz et maintenant l'etat les log du volet fonctionne. ;)
Bonjour et merci pour la combine que je n'ai pas encore mise en oeuvre (j'ai peur pour ma base, n'ayant pas de machine de test ...).
Est-ce que quelqu'un a essayé et approuvé la manip ?

Cordialement

Re: Rflink et somfy RTS : affichage états et log

Posté : 13 déc. 2018, 13:16
par jiemeb
Bonjour Martial,
je te conseille de faire une sauvegarde de ta base.
tu peux utiliser l'interface WEB de domotic avec reglages -> parametres -> sauvegarde / restauration.

je te conseille d'ailleurs de t’exercer a le faire sur un fichier Backup pour te familiariser avec l'outil sqlitebrowser

Cordialement

Re: Rflink et somfy RTS : affichage états et log

Posté : 13 déc. 2018, 13:32
par Martial
Bonjour Jiemeb,

Ca je sais faire et je fais systématiquement avant toute modification.
Cela n'empêche que je veux éviter de prendre des risques (je le fais déjà assez souvent comme ça), surtout si le problème peut se révéler plusieurs jours plus tard.
Sans vouloir être offensant, tu n'es pas un membre éminent du forum, donc je cherche des avis complémentaires.
Cordialement
Martial