rfxcom - volet somfy - LUA script
-
antoninocanta
- Messages : 6
- Inscription : 23 sept. 2016, 11:50
rfxcom - volet somfy - LUA script
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
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
-
frenchyyii
- Messages : 310
- Inscription : 16 oct. 2015, 06:29
Re: rfxcom - volet somfy - LUA script
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 commandArrayRe: rfxcom - volet somfy - LUA script
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...
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
Lua c'est en natif dans domoticz...tu as meme un editeur Lua integré dans la section evenement.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...
En shell ? Cela va t'apporter quoi ? Developpe stp.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
http://www.domo-attitude.fr
Re: rfxcom - volet somfy - LUA script
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...
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...
-
Chrominator
- Messages : 1042
- Inscription : 19 déc. 2015, 07:29
- Localisation : France
Re: rfxcom - volet somfy - LUA script
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à :
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.
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
Code : Tout sélectionner
commandArray[Index]={['Nom_du_Volet']='Off'}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
En clair, si on utilise une télécommande manuellement, Domoticz agira sans tenir compte de l'état réel du volet.
Un bon frein vaut mieux que deux sparadraps.
Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
-
antoninocanta
- Messages : 6
- Inscription : 23 sept. 2016, 11:50
Re: rfxcom - volet somfy - LUA script
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
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
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.
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
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é...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