Page 1 sur 2
[RESOLU]Problème sript lua vmc
Publié : 28 févr. 2024, 11:26
par chuyard
Bonjour, je cherche de l'aide pour un script de gestion de vmc. IL fonctionnait en Blockly.
Seule la partie appelée 'wc' fonctionne à peu près, Si je passe la 'vmc_pv' et 'porte_wc' à plus de 10 minutes il n'y a pas d'arrêt.
Pour la partie "hygro' rien ne fonctionne malgré de nombreux essais sur les 'lignes test ' . Entre autres choses je ne sais pas si il faut utiliser le signe '%' pour l'hygrométrie. Ceci est mon premier script .lua.
Toutes les aides et les critiques constructives sont les bienvenues.
Code : Tout sélectionner
local hr_sdb_humidity = otherdevices_humidity['hr_s-d-b'] or ''
local hr_cuisine_humidity = otherdevices_humidity['hr_cuisine'] or ''
local porte_wc = otherdevices['porte_wc'] or ''
commandArray = {}
--wc
if devicechanged['wc'] == 'Open' then
print('porte WC ouverte. Activation de la VMC.')
commandArray['porte_wc'] = 'On FOR 10'
commandArray['vmc_pv'] = 'On FOR 10'
--humidité
if --hr_sdb_humidity > '63%' or hr_cuisine_humidity > '63%' then
hr_sdb_humidity > '45' or hr_cuisine_humidity > '63' then --ligne test
print('Humidité élevée. Activation de la VMC_pv.')
commandArray['vmc_pv'] = 'On'
if --hr_sdb_humidity > '80%' or hr_cuisine_humidity > '80%' then
hr_sdb_humidity > '80' or hr_cuisine_humidity > '80' then --ligne test
print('Humidité très élevée. Désactivation de la vmc_pv et activation de la vmc_gv.')
commandArray['vmc_pv'] = 'Off'
commandArray['vmc_gv'] = 'On'
if --hr_sdb_humidity < '60%' and hr_cuisine_humidity < '60%' and 'porte_wc' =='Off' then
hr_sdb_humidity < '40' and hr_cuisine_humidity < '60' then --ligne test
print('Conditions normales. Désactivation de la VMC_pv et de la vmc_gv')
commandArray['vmc_pv'] = 'Off'
commandArray['vmc_gv'] = 'Off'
end
end
end
end
return commandArray
Merci
Re: problème sript lua vmc
Publié : 28 févr. 2024, 12:24
par dj1benji
Bonjour,
Pour moi, il ne faut pas utilisé le %
de plus, les chiffres ne doivent pas être entre apostrophe, si tu les mets, tu définis la valeur en texte et non en chiffre, et un texte n'est pas supérieur à un autre.
le ligne
Code : Tout sélectionner
hr_sdb_humidity > '45' or hr_cuisine_humidity > '63' then --ligne test
devient donc
Code : Tout sélectionner
hr_sdb_humidity > 45 or hr_cuisine_humidity > 63 then --ligne test
Re: problème sript lua vmc
Publié : 28 févr. 2024, 13:17
par chuyard
Bonjour, merci pour ton aide. Cela na rien changé. le script semble ne pas démarrer et pas de message d'erreur dans les logs.
Code : Tout sélectionner
local hr_sdb_humidity = otherdevices_humidity['hr_sdb'] or ''
local hr_cuisine_humidity = otherdevices_humidity['hr_cuisine'] or ''
local porte_wc = otherdevices['porte_wc'] or ''
commandArray = {}
--wc
if devicechanged['wc'] == 'Open' then
print('porte WC ouverte. Activation de la VMC.')
commandArray['porte_wc'] = 'On FOR 8'
commandArray['vmc_pv'] = 'On FOR 8'
--humidité
if --hr_sdb_humidity > 63 or hr_cuisine_humidity > 63 then
hr_sdb_humidity > 45 or hr_cuisine_humidity > 63 then --ligne test
print('Humidité élevée. Activation de la VMC_pv.')
commandArray['vmc_pv'] = 'On'
if --hr_sdb_humidity > 80 or hr_cuisine_humidity > '80then
hr_sdb_humidity > 80 or hr_cuisine_humidity > 80 then --ligne test
print('Humidité très élevée. Désactivation de la vmc_pv et activation de la vmc_gv.')
commandArray['vmc_pv'] = 'Off'
commandArray['vmc_gv'] = 'On'
if --hr_sdb_humidity < 60 and hr_cuisine_humidity < 60 and 'porte_wc' =='Off' then
hr_sdb_humidity < 40 and hr_cuisine_humidity < 60 then --ligne test
print('Conditions normales. Désactivation de la VMC_pv et de la vmc_gv')
commandArray['vmc_pv'] = 'Off'
commandArray['vmc_gv'] = 'Off'
end
end
end
end
return commandArray
Re: problème sript lua vmc
Publié : 28 févr. 2024, 13:41
par denis_brasseur
Dans ton script, tes end ne sont pas placé au bon endroit, tu devrais avoir ceci :
Code : Tout sélectionner
if devicechanged['wc'] == 'Open' then
print('porte WC ouverte. Activation de la VMC.')
commandArray['porte_wc'] = 'On FOR 8'
commandArray['vmc_pv'] = 'On FOR 8'
end
--humidité
if --hr_sdb_humidity > 63 or hr_cuisine_humidity > 63 then
hr_sdb_humidity > 45 or hr_cuisine_humidity > 63 then --ligne test
print('Humidité élevée. Activation de la VMC_pv.')
commandArray['vmc_pv'] = 'On'
end
if --hr_sdb_humidity > 80 or hr_cuisine_humidity > '80then
hr_sdb_humidity > 80 or hr_cuisine_humidity > 80 then --ligne test
print('Humidité très élevée. Désactivation de la vmc_pv et activation de la vmc_gv.')
commandArray['vmc_pv'] = 'Off'
commandArray['vmc_gv'] = 'On'
end
if --hr_sdb_humidity < 60 and hr_cuisine_humidity < 60 and 'porte_wc' =='Off' then
hr_sdb_humidity < 40 and hr_cuisine_humidity < 60 then --ligne test
print('Conditions normales. Désactivation de la VMC_pv et de la vmc_gv')
commandArray['vmc_pv'] = 'Off'
commandArray['vmc_gv'] = 'Off'
end
Re: problème sript lua vmc
Publié : 28 févr. 2024, 14:17
par Flying Domotic
Bonjour,
A priori, la forme du script semble peu commune. Pour que ça fonctionne, on peut s'appuyer sur l'exemple classique de type "Device", qu'on obtient par "Configuration" > "Plus d'options" > "Evenements", puis en cliquant sur le "+", et spécifiant "LUA" > "Device".
On doit récupérer ça :
Code : Tout sélectionner
--
-- Domoticz passes information to scripts through a number of global tables
--
-- device changed contains state and svalues for the device that changed.
-- devicechanged['yourdevicename'] = state
-- devicechanged['svalues'] = svalues string
--
-- otherdevices, otherdevices_lastupdate and otherdevices_svalues are arrays for all devices:
-- otherdevices['yourotherdevicename'] = "On"
-- otherdevices_lastupdate['yourotherdevicename'] = "2015-12-27 14:26:40"
-- otherdevices_svalues['yourotherthermometer'] = string of svalues
--
-- uservariables and uservariables_lastupdate are arrays for all user variables:
-- uservariables['yourvariablename'] = 'Test Value'
-- uservariables_lastupdate['yourvariablename'] = '2015-12-27 11:19:22'
--
-- other useful details are contained in the timeofday table
-- timeofday['Nighttime'] = true or false
-- timeofday['SunriseInMinutes'] = number
-- timeofday['Daytime'] = true or false
-- timeofday['SunsetInMinutes'] = number
-- globalvariables['Security'] = 'Disarmed', 'Armed Home' or 'Armed Away'
--
-- To see examples of commands see: http://www.domoticz.com/wiki/LUA_commands#General
-- To get a list of available values see: http://www.domoticz.com/wiki/LUA_commands#Function_to_dump_all_variables_supplied_to_the_script
--
-- Based on your logic, fill the commandArray with device commands. Device name is case sensitive.
--
commandArray = {}
-- loop through all the changed devices
for deviceName,deviceValue in pairs(devicechanged) do
print ("Device based event fired on '"..deviceName.."', value '"..tostring(deviceValue).."'");
-- if (deviceName=='myDevice') then
-- if deviceValue == "On" then
-- print("Device is On")
-- elseif deviceValue == "Off" then
-- commandArray['a device name'] = "On"
-- commandArray['another device name'] = "Off AFTER 10"
-- commandArray['Scene:MyScene'] = "Off"
-- commandArray['Group:My Group'] = "Off AFTER 30"
-- end
-- end
end
return commandArray
En s'inspirant de cet exemple, et de ton code, on peut écrire :
Code : Tout sélectionner
commandArray = {}
-- loop through all the changed devices
for deviceName,deviceValue in pairs(devicechanged) do
if (deviceName=='WC') then
if deviceValue == "On" then
print('porte WC ouverte. Activation de la VMC.')
commandArray['porte_wc'] = 'On FOR 8'
commandArray['vmc_pv'] = 'On FOR 8'
end
end
if (deviceName=='hr_cuisine' or deviceName=='hr_sdb' or deviceName=='porte_wc') then
local hr_sdb_humidity = otherdevices_humidity['hr_sdb'] or ''
local hr_cuisine_humidity = otherdevices_humidity['hr_cuisine'] or ''
local porte_wc = otherdevices['porte_wc'] or ''
if hr_sdb_humidity > 80 or hr_cuisine_humidity > 80 then
print('Humidité très élevée. Désactivation de la vmc_pv et activation de la vmc_gv.')
commandArray['vmc_pv'] = 'Off'
commandArray['vmc_gv'] = 'On'
elseif hr_sdb_humidity > 63 or hr_cuisine_humidity > 63 then
print('Humidité élevée. Activation de la VMC_pv.')
commandArray['vmc_gv'] = 'Off'
commandArray['vmc_pv'] = 'On'
elseif hr_sdb_humidity < 60 and hr_cuisine_humidity < 60 and porte_wc =='Off' then
print('Conditions normales. Désactivation de la VMC_pv et de la vmc_gv')
commandArray['vmc_pv'] = 'Off'
commandArray['vmc_gv'] = 'Off'
end
end
end
return commandArray
Quels sont les changements ?
1) on ne fait les tests que lors d'un changement des éléments intéressants (la porte des WC, les 2 humidités et le timer sur la porte des WC), au lieu de tous les changements de tous les éléments,
2) l'ordre des commandes des vitesses est systématiquement "off" puis "on", pour éviter d'avoir 2 "on" en même temps (par exemple au passage sous les 80%, où pv et gv seraient actifs en même temps)
3) l'ordre de test des humidités et les elseif évitent des cliquetis permanents des relais pv et gv, notamment lorsque l'humidité est > 80, le code actuel passant systématiquement en PV (>63) puis en GV (>80).
Re: problème sript lua vmc
Publié : 28 févr. 2024, 14:43
par chuyard
Merci à vous 3 tout fonctionne.
@Flying Domotic: Si le temps ne passe pas au beau, il me reste mon délestage et mon alarme congélateur à convertir en lua. Je pourrais tester ta solution. Si la forme de mon script semble peu commune ça vient sans doutes de mes souvenir de Basic et d'automatisme industriel.
Re: [RESOLU]problème sript lua vmc
Publié : 28 févr. 2024, 16:26
par salinois
Bonjour Chuyard,
ton projet m’intéresse, mon électricien m'a installé une VMC, mais j'ai l'impression qu'elle ne se coupe jamais.
Du fait , j'ai plusieurs questions:
1 - type de VMC (modele).
2 - quels capteurs pour l'humidité dans les différentes pièces .
3 - où et comment sont-ils installés.
4 - matériel utilisé ( j'ai déjà Domoticz qui tourne pour ma Météo et Linky )
Après, je verrai ,si je peux le faire avec ma VMC.
Salinois
Re:problème sript lua vmc
Publié : 29 févr. 2024, 14:38
par chuyard
Bonjour,
Pour la vmc c'est une simple flux Aldès qui a 25 ans. au départ elle fonctionnait en permanence en petite vitesse, pour gérer la grande vitesse j'utilisais 2 boutons poussoir avec une minuterie Crouzet (1s à 100h) réglée sur 30min qui commandais un relais avec contact inverseur.
pour la domotisation (uniquement pour la vmc): j'ai une clé Zigbee Sonoff, 2 capteurs de température Sonoff snbz-02, 2 ZbminiL2 Sonoff pour le pilotage des vitesses, 1 contacteur 16A.
j'utilise 1 Zbmini en // sur la minuterie pour la grande vitesse et le contacteur 16A pour la petite vitesse en série sur le contact NC du relais inverseur ce contacteur est piloté par le 2eme Zbmini pour la petite vitesse et l'arrêt de la vmc. le tout est dans un petit tableau modulaire à proximité de la vmc.
Ce montage m'a permis de conserver mes bp d'origine.
Si tu as besoin d'un schéma c'est possible.
Re: [RESOLU]problème sript lua vmc
Publié : 29 févr. 2024, 19:25
par salinois
merci pour ton retour,
alors, moi, j'ai deux VMC ( on va dire côté OUEST: Cuisine, 1 WC, 1 cellier et 1 Buanderie; et côté EST : 2 SdB et 2 WC)
elles sont dans les Combles et l'électricien a juste mis un disjoncteur au tableau Général ( 2 niveaux au dessous des VMC), ce sont des DECO DHU avec 2 vitesses aussi.
Mais je veux bien ton schéma.
a+
salinois
Re: [RESOLU]problème sript lua vmc
Publié : 29 févr. 2024, 23:22
par Flying Domotic
De mon côté, je n'ai qu'une seule vitesse sur ma VMS, mais j'ai mis un gradateur ZigBee dessus.
La logique que j'utilise est un peu différente ;
1) je mets la VMC en route lorsque l'humidité absolue d'une des salles de bains grimpe dans un délai court, et je l'arrête quand elle redescend d'au moins 75% de l'incrément, ou au bout d'une heure et demie,
2) je mets la VMC en route lorsque la température extérieure est plus chaude en hiver, et plus froide en été que la température intérieure
3) je vérifie que la VMC a tourné à route à minima 6h par jour, sinon je la mets en route au meilleur moment (température mini en été, maxi en hiver), jusqu'à atteindre les 6 h.
Un sélecteur permet de choisir entre :
- marche forcée
- arrêt forcé
- mode été
- mode hiver
- Sdb seulement (pas de température intérieure/extérieure, pas de minima de mise en route)
Les températures par heure sont extraites des prévisions météo chaque jour à minuit, et retenté chaque minute jusqu'à ce que ça marche.