rfxcom - volet somfy - LUA script

Forum dédié au Rfxcom et consorts utilisant les fréquences 433 et 866 MHz.
Pour les questions concernant les RFLINK, merci d'utiliser le forum spécifique en dessous.
antoninocanta
Messages : 6
Inscription : 23 sept. 2016, 11:50

rfxcom - volet somfy - LUA script

Message 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
frenchyyii
Messages : 310
Inscription : 16 oct. 2015, 06:29

Re: rfxcom - volet somfy - LUA script

Message 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
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: rfxcom - volet somfy - LUA script

Message 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... :oops:
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: RE: Re: rfxcom - volet somfy - LUA script

Message 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... :oops:
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.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: rfxcom - volet somfy - LUA script

Message 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...
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: rfxcom - volet somfy - LUA script

Message 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

Code : Tout sélectionner

commandArray[Index]={['Nom_du_Volet']='Off'}
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.
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
antoninocanta
Messages : 6
Inscription : 23 sept. 2016, 11:50

Re: rfxcom - volet somfy - LUA script

Message 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 ;)
Ninipc
Messages : 101
Inscription : 28 nov. 2016, 20:07

Re: rfxcom - volet somfy - LUA script

Message 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.
StephaneM
Messages : 14
Inscription : 14 nov. 2016, 00:53

Re: rfxcom - volet somfy - LUA script

Message 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é...
Répondre