Page 1 sur 1
rfxcom - volet somfy - LUA script
Publié : 24 nov. 2016, 11:55
par antoninocanta
Bonjour à tous,
Je possède plusieurs volet somfy, tous sont lié à mon rfxcom et domoticz.
J'ai ensuite lier une deuxième fois tout mes volets, avec un code RF identique pour tous, afin de créer un bouton unique pour ouvrir et dessendre tout les volets en même temps. Je sais qu'il existe une méthode plus simple, de créer un scénario "groupe" etc, mais avec cette méthode je n'avais pas les mêmes bouton et on ne les retrouve pas dans intérrupteur... de plus je trouve plus simple que le rfxcom envoie une seul instruction et que tous les volets l'intérprète en même temps.
Malheureusement, cela à le gros désavantage de ne modifier l'état que d'un seul périphérique, le volet "TOUT" :s si j'abaisse le volet "TOUT", tout les volet se baisse mais dans domoticz, aucun des autres bouton ne se met dans l'état fermé.
J'ai donc essayer de créer un script LUA, mais je n'arrive pas a trouver la bonne syntaxe pour changer l'état des boutons, sans forcément lancer la commande !... Je veux juste modifier l'état sans autres actions.
J'ai essayer avec
commandArray['UpdateDevice']='idx|nValue|sValue'
-> commandArray['UpdateDevice']='54|Closed|Bonjour'
Alors déjà je ne sais pas à quoi correspondais nvalue et svalue mais j'ai tout de même essayer xD
Et alors quand je fais cela, le device se corrompt, les commandes marche mais l'état reste toujours à "Stopped" et le seul moyen que j'ai de le récupérer est de le supprimer, de recréer un device avec l'ancien id rf que j'ai garder (00 01 1F par exemple)
Quelqu'un aurait la bonne syntaxe ou bien une autre commande ?
Merci, bien à vous
Re: rfxcom - volet somfy - LUA script
Publié : 24 nov. 2016, 13:30
par frenchyyii
Je ne sais pas si ça peut te servir mais voici le code que j'utilisais pour changer les boutons d'état de mon ampli ainsi que mes boutons virtuels de sources vidéos; et ceci en fonction des états des autres boutons:
Code : Tout sélectionner
-- chargement des modules
package.path = package.path..";/home/pi/domoticz/scripts/lua/?.lua"
require "modules"
commandArray = {}
if devicechanged['Denon Mode DVD'] == 'On' then
switchOff('Denon Mode VCR')
switchOff('Denon Mode TV')
end
if devicechanged['Denon Mode TV'] == 'On' then
switchOff('Denon Mode VCR')
switchOff('Denon Mode DVD')
end
if devicechanged['Denon Mode VCR'] == 'On' then
switchOff('Denon Mode DVD')
switchOff('Denon Mode TV')
end
if devicechanged['Kodi / Zidoo to TV'] == 'On' then
switchOff('TV to Kodi')
switchOff('TV to Zidoo')
switchOn('Denon Mode TV')
end
if devicechanged['TV to Kodi'] == 'On' then
switchOff('TV to Zidoo')
switchOff('Kodi / Zidoo to TV')
switchOn('Denon Mode DVD')
end
if devicechanged['TV to Zidoo'] == 'On' then
switchOff('TV to Kodi')
switchOff('Kodi / Zidoo to TV')
switchOn('Denon Mode VCR')
end
return commandArray
Re: rfxcom - volet somfy - LUA script
Publié : 25 nov. 2016, 06:16
par Seb13
Salut,
J'ai aussi des volets Somfy mais je passe par un script Shell ou un groupe, je ne comprends pas l’intérêt de passer par Lua...

Re: RE: Re: rfxcom - volet somfy - LUA script
Publié : 26 nov. 2016, 07:21
par deennoo
Seb13 a écrit :Salut,
J'ai aussi des volets Somfy mais je passe par un script Shell ou un groupe, je ne comprends pas l’intérêt de passer par Lua...

Lua c'est en natif dans domoticz...tu as meme un editeur Lua integré dans la section evenement.
En shell ? Cela va t'apporter quoi ? Developpe stp.
Re: rfxcom - volet somfy - LUA script
Publié : 26 nov. 2016, 07:55
par Seb13
ah oui... je n'avais pas vu l'éditeur Lua intégré...
Le fait de passer par le Shell, cela me permet d'avoir le code et de pouvoir faire une sauvegarde, maintenant, on peut le faire aussi via l'éditeur Lua.
Maintenant, je connais mieux le shell que Lua aussi...
En fait, j'ai répondu pour comprendre ce qui pousse les gens à passer par Lua et non le shell...
Re: rfxcom - volet somfy - LUA script
Publié : 26 nov. 2016, 09:27
par Chrominator
J'ai des volets Somfy.
J'ai plusieurs scripts LUA qui les manœuvrent, dont le suivant :
Ce script me sert l'été pour desserrer un peu les volets la nuit et permettre à l'air extérieur de rafraîchir la pièce si la température extérieure est plus basse qu'à l'intérieur.
La commande que j'utilise pour agir sur le volet est
pour l'ouvrir, avec On pour le fermer.
De manière classique, index est incrémenté de 1 à chaque nouveau volet à manœuvrer dans le même script.
Le script est là :
Code : Tout sélectionner
--[[ Script to loosen the blinds in case of heat wave
~/domoticz/scripts/lua/script_time_loosen_blinds.lua
-- Autors ----------------------------------------------------------------
V1.0 - Chrominator
-- Require --------------------------------------------------------------
Devices : Names of all blinds to loose
Outside temperature
Inside temperature
-- Versions -------------------------------------------------------------
2016-08-25 : Initial version
]]--
-- Variables to customize ------------------------------------------------
local MinTemp = 24 -- No action below this temperature
local BlindDelay = 5 -- Time to loose blinds
local OutsideTemp = tonumber(otherdevices_svalues['Température extérieure'])
local InsideTemp = tonumber(otherdevices_svalues['Température chambre parents'])
Index = 0
DEBUG = 0
-- Below , edit at your own risk ------------------------------------------
commandArray = {}
function LooseBlind(Blind, Delay)
-- Prevent from opening a blind already opened previously
if (otherdevices[Blind] == 'Closed') then
if (DEBUG == 1) then
print('-- Loose ' .. Blind)
end
Index = Index + 1
commandArray[Index]={[Blind]='Off'}
Index = Index + 1
commandArray[Index]={[Blind]='Stop AFTER ' .. Delay}
end
end
if (DEBUG == 1) then
print('================ LOOSEN BLINDS LOG ====================')
print("Outside temperature=" .. OutsideTemp)
print("Inside Temperature=" .. InsideTemp.. " Threshold " .. MinTemp)
end
if (InsideTemp > MinTemp) then
if (OutsideTemp < InsideTemp) then
LooseBlind('Volet bureau', BlindDelay)
LooseBlind('Volet Chambre Parents', BlindDelay)
LooseBlind('Volet Chambre 1', BlindDelay)
LooseBlind('Volet Salon Est', BlindDelay)
LooseBlind('Volet Chambre 2', BlindDelay)
LooseBlind('Volet Cuisine', BlindDelay)
end
end
if (DEBUG == 1) then
print('============== END LOOSE BLINDS LOG ==================')
end
return commandArray
A propos du test de l'état du volet dans ce script, c'est l'état du volet dans Domoticz qui est testé, pas l'état réel du volet (il n'y a pas de capteur d'état sur un volet Somfy).
En clair, si on utilise une télécommande manuellement, Domoticz agira sans tenir compte de l'état réel du volet.
Re: rfxcom - volet somfy - LUA script
Publié : 28 nov. 2016, 15:53
par antoninocanta
Bonjour à tous,
Voila petit retour sur la situation, j'ai trouvé un moyen de parvenir à mes fins ^^
Tout d'abord, Merci pour vos script, mais ce qui m'intéressais moi c'était de juste faire un update de l'état, sans exécuter l'action qu'il y a derrière...
Après avoir gratter un peu, j'ai vu qu'il était possible d'éditer la DB de domoticz pour voir la valeur des champs. Il suffit d'éditer une sauvegarde que l'on a fait de la DB avec un éditeur quelconque (je l'ai fait avec dblite manager sous firefox). De la, on peux voir que les volet somfy peuvent avoir 3 valeurs différentes pour la nValue des volets :
0 stopped
1 ouvert
3 fermé
La sValue doit être vide, sinon c'est à ce moment que le bouton se corrompt et qu'il n'est plus possible de l'utiliser !
La méthode propre pour un update de l'état dans la DB est celle que j'ai poster au début :
commandArray['UpdateDevice']='idx|nValue|sValue'
Malheureusement, si il manque le sValue, la commande ne fonctionne pas :s
et si on met un sValue, même un espace blanc, le boutton ne marche plus...
Et je n'ai pas voulu me risquer à un sal update de la DB en dehors de domoticz xD
Ce qui a foncitonné est l'utilisation d'une api embarquée de domoticz. j'ai donc fait cela dans un script shell :
curl "
http://127.0.0.1:8080/json.htm?type=com ... 6&nvalue=1"
Voila, bien à vous

Re: rfxcom - volet somfy - LUA script
Publié : 30 nov. 2016, 19:13
par Ninipc
Salut,
je précède comme ca:
viewtopic.php?p=26536&sid=c66ac5337e593 ... ad7#p26536
Si ca peut t'aider. Et ca me change l'état des inter individuels en même temps.
Re: rfxcom - volet somfy - LUA script
Publié : 09 déc. 2016, 12:49
par StephaneM
antoninocanta a écrit :J'ai ensuite lier une deuxième fois tout mes volets, avec un code RF identique pour tous.../...Malheureusement, cela à le gros désavantage de ne modifier l'état que d'un seul périphérique, le volet "TOUT" :s si j'abaisse le volet "TOUT", tout les volet se baisse mais dans domoticz, aucun des autres bouton ne se met dans l'état fermé.../...J'ai donc essayer de créer un script LUA
Nul besoin de créer un script LUA pour cela, il suffit de mettre le "Volet Tout" comme dispositif esclave de tous vos autres volets et le problème est réglé...