bien vu essaye avec la même orthographeoudini a écrit :Sauf erreur, tu nomme ton thermostat virtuel "Thermostat_confort" et tu appelle "Thermostat_Confort" dans le script.
Utilisation des capteurs virtuels en LUA
-
jackslayter
- Messages : 1040
- Inscription : 30 sept. 2014, 14:40
- Localisation : Isère (38)
Re: Utilisation des capteurs virtuels en LUA
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte
-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Utilisation des capteurs virtuels en LUA
Oh.. Oui bien vu.
Comme quoi, plus il y a d'yeux...
Comme quoi, plus il y a d'yeux...
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
Re: Utilisation des capteurs virtuels en LUA
Effectivement, merci Oudini.
Depuis le dernier essai de modif. de script, plus moyen de les exécuter !
j'en ai 3 différents, je les modifie sur mon PC et je les transfert via WinSCP, rien ne se passe, même après un reboot du Raspberry.
????
Depuis le dernier essai de modif. de script, plus moyen de les exécuter !
j'en ai 3 différents, je les modifie sur mon PC et je les transfert via WinSCP, rien ne se passe, même après un reboot du Raspberry.
????
Raspberry 3 - DOMOTICZ - RFXCOM RFXtrx433
Re: Utilisation des capteurs virtuels en LUA
Je suis complètement bloqué
depuis hier, sans rien faire de particulier a part modifier pour la Xième fois mon script, Domoticz c'est mis à ne plus l'exécuter....
J'avais pour habitude de le modifier sous Notepad+ via WinSCP, puis de le transférer dans le Raspberry, j'ai essayé de supprimer le fichier script et de le recréer via putty et nano en me disant que ça pouvait venir de là, mais rien de mieux !!
Je ne sais plus quoi tenter d'autre.
HELP please
depuis hier, sans rien faire de particulier a part modifier pour la Xième fois mon script, Domoticz c'est mis à ne plus l'exécuter....
J'avais pour habitude de le modifier sous Notepad+ via WinSCP, puis de le transférer dans le Raspberry, j'ai essayé de supprimer le fichier script et de le recréer via putty et nano en me disant que ça pouvait venir de là, mais rien de mieux !!
Je ne sais plus quoi tenter d'autre.
HELP please
Raspberry 3 - DOMOTICZ - RFXCOM RFXtrx433
-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Utilisation des capteurs virtuels en LUA
Juste pour info,
Depuis winscp, juste double clic sur le fichier,
Il s'ouvre dans notepad++
Je fais les changements,
Puis CTRL+S (enregistrer)
Et hop,
Plus simple/rapide que de jouer avec les transferts..
Idem pour la création,
Clic droit,
Créer nouveau fichier, je le nomme, il s'ouvre dans notepad++
Je pense à le passer aussitôt en UTF8
Je colle ou tape mon code,
Puis CTRL+S
..
Depuis winscp, juste double clic sur le fichier,
Il s'ouvre dans notepad++
Je fais les changements,
Puis CTRL+S (enregistrer)
Et hop,
Plus simple/rapide que de jouer avec les transferts..
Idem pour la création,
Clic droit,
Créer nouveau fichier, je le nomme, il s'ouvre dans notepad++
Je pense à le passer aussitôt en UTF8
Je colle ou tape mon code,
Puis CTRL+S
..
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
Re: Utilisation des capteurs virtuels en LUA
Effectivement je ne le faisais pas comme ça, merci du conseil
mais j'ai beau faire ce que tu me dis, toujours pareil pas moyen d’exécuter le moindre script-device
Pour les scrip-time ça fonctionne.
je désespère !
D'autres idées ?
mais j'ai beau faire ce que tu me dis, toujours pareil pas moyen d’exécuter le moindre script-device
Pour les scrip-time ça fonctionne.
je désespère !
D'autres idées ?
Raspberry 3 - DOMOTICZ - RFXCOM RFXtrx433
Re: Utilisation des capteurs virtuels en LUA
Vu que je ne m'en sort pas avec l’exécution des script-device, et qu'il apparait effectivement plus logique d'utiliser les script-time pour ce genre de gestion, je cherche à modifier mon script en conséquence.vil1driver a écrit :Ta première commande était bonne,
Je l'utilise..
Pour du chauffage on a pas besoin d'être aussi réactif, pas besoinde lancer le script toutes les x secondes...
1 fois par minute (script_time..) est bien suffisant.
Avec l'erreur 'devicechanged'. Tu avais juste à supprimer ce teste (y compris le end de cloture) et ça devrait aller.
@Vil1driver : Tu pourrait m'en dire plus sur la suppression du test 'devicechanged'
J'ai essayé la modif ci dessous sans succès :
Code : Tout sélectionner
local consigne_j = string.match(otherdevices_svalues['Thermostat_confort'], "(%d+%.*%d*)")
local consigne_n = string.match(otherdevices_svalues['Thermostat_nuit'], "(%d+%.*%d*)")
local hysteresis = 0.5
local sonde = 'Salle de bain'
local thermostat_j = 'Thermostat jour'
local radiateur = 'Radiateur Salle de bain'
local temperature = devicechanged[string.format('%s_Temperature', sonde)]
commandArray = {}
local temperature = devicechanged[string.format('%s_Temperature', sonde)]
if (otherdevices[thermostat_j]=='On') then
print('-- Gestion du thermostat confort pour la salle de bain --')
if (temperature < (consigne_j - hysteresis) ) then
print('Allumage du chauffage dans la salle de bain')
commandArray[radiateur]='Off'
elseif (temperature > (consigne_j + hysteresis)) then
print('Extinction du chauffage dans la salle de bain')
commandArray[radiateur]='On'
end
elseif (otherdevices[thermostat_j]=='Off') then
print('-- Gestion du thermostat absent pour la salle de bain --')
if (temperature < (consigne_n - hysteresis) ) then
print('Allumage du chauffage dans la salle de bain')
commandArray[radiateur]='Off'
elseif (temperature > (consigne_n + hysteresis)) then
print('Extinction du chauffage dans la salle de bain')
commandArray[radiateur]='On'
end
endEn cherchant un peu j'apprends dans le Wiki 'Event' sur le site de domoticz que les scripts-time ne recoivent pas la table devicechanged, d'ou certainement la raison de l'erreur, je modifie donc mon script comme ceci :Error: EventSystem: ...pi/domoticz/scripts/lua/script_time_gestion_temp_SdB.lua:11: attempt to index global 'devicechanged' (a nil value)
Code : Tout sélectionner
local temperature = otherdevices_svalues[string.format('%s_Temperature', sonde)]Code : Tout sélectionner
local temperature = string.sub(otherdevices_svalues[sonde],1,4)Code : Tout sélectionner
local temperature = tonumber(string.sub(otherdevices_svalues[sonde],1,4))Il ne se passe rien......
Nouvel essai, et la une nouvelle errreur :
Code : Tout sélectionner
local temperature = tonumber(string.sub(otherdevices_svalues['sonde'],1,4))Le diable est dans le détail et je lui trouverai la queueError: EventSystem: ...pi/domoticz/scripts/lua/script_time_gestion_temp_SdB.lua:10: bad argument #1 to 'sub' (string expected, got nil)
Mais peut être pas tout seul....... si une bonne âme passais par là...
Raspberry 3 - DOMOTICZ - RFXCOM RFXtrx433
Re: Utilisation des capteurs virtuels en LUA
Pour chopper les températures, j'utiliserais plutôt :
Code : Tout sélectionner
local temperature = otherdevices_temperature[sonde]
-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Utilisation des capteurs virtuels en LUA
cette commande remonte une valeur étrange.
ici pour 18.9°C ça me remonte 18.89999961853
je préfère l'autre méthode..
t'as juste à supprimer ce qui est en rouge pour passer du script device au script time
en vert la récupe des valeurs de thermostat et température
ici pour 18.9°C ça me remonte 18.89999961853
je préfère l'autre méthode..
t'as juste à supprimer ce qui est en rouge pour passer du script device au script time
en vert la récupe des valeurs de thermostat et température
-- Ce script permet de maintenir la température de la salle de bain entre 17°C et 18°C quand l'interrupteur
-- virtuel 'Thermostat jour' est activé et entre 18.5°C et 19.5°C quand l'interrupteur
-- virtuel 'Thermostat jour' est éteint.
--------------------------------
------ Variables à éditer ------
--------------------------------
local consigne_j = tonumber(otherdevices_svalues['Thermostat_confort']) --Température de consigne jour
local consigne_n = tonumber(otherdevices_svalues['Thermostat_nuit']) --Température de consigne nuit
local hysteresis = 0.5 --Valeur seuil pour éviter que le relai ne cesse de commuter dans les 2 sens
local sonde = 'Salle de bain' --Nom de la sonde de température
local thermostat_j = 'Thermostat jour' --Nom de l'interrupteur virtuel du thermostat pour le jour
--local thermostat_n = 'Thermostat nuit' --Nom de l'interrupteur virtuel du thermostat pour la nuit
local radiateur = 'Radiateur Salle de bain' --Nom du radiateur à allumer/éteindre
local pas = 0.5 --increment de la temperaure du thermostat
local remote = 'telecommande temp'
-- Capteur Temperature thermostat virtuel - nom et id
--local tempthermo = 'Temp Thermostat'
--local idx = 45
--------------------------------
-- Fin des variables à éditer --
--------------------------------
commandArray = {}
--if (devicechanged[remote]) then
-- nowtemp = tonumber(otherdevices_svalues[tempthermo])
-- if (devicechanged[remote]=='On') then
-- commandArray['UpdateDevice'] = idx .. '|0|' .. tostring(nowtemp+pas)
-- elseif (devicechanged[remote]=='Off') then
-- commandArray['UpdateDevice'] = idx .. '|0|' .. (tostring(nowtemp-pas))
-- end
--end
--La sonde Oregon 'Salon' emet toutes les 40 secondes. Ce sera approximativement la fréquence
-- d'exécution de ce script.
if (devicechanged[sonde]) then
-- nowtemp = tonumber(otherdevices_svalues[tempthermo])
local temperature = tonumber(string.sub(otherdevices_svalues[sonde],1,4)) --Temperature relevée dans la salle de bain
--Action si le "Thermostat" est actif en mode confort
if (otherdevices[thermostat_j]=='On') then
print('-- Gestion du thermostat confort pour la salle de bain --')
if (temperature < (consigne_j - hysteresis) ) then
print('Allumage du chauffage dans la salle de bain')
commandArray[radiateur]='Off'
elseif (temperature > (consigne_j + hysteresis)) then
print('Extinction du chauffage dans la salle de bain')
commandArray[radiateur]='On'
end
end
--Action si le "Thermostat" est actif en mode absent
if (otherdevices[thermostat_j]=='Off') then
print('-- Gestion du thermostat absent pour la salle de bain --')
if (temperature < (consigne_n - hysteresis) ) then
print('Allumage du chauffage dans la salle de bain')
commandArray[radiateur]='Off'
elseif (temperature > (consigne_n + hysteresis)) then
print('Extinction du chauffage dans la salle de bain')
commandArray[radiateur]='On'
end
end
end
return commandArray
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
Re: Utilisation des capteurs virtuels en LUA
Merci de vos réponse,
Ci dessous mon script complet :
signe_j - hysteresis) ) then
print('Allumage du chauffage dans la salle de bain')
commandArray[radiateur]='Off'
elseif (temperature > (consigne_j + hysteresis)) then
print('Extinction du chauffage dans la salle de bain')
commandArray[radiateur]='On'
end
elseif (otherdevices[thermostat_j]=='Off') then
print('-- Gestion du thermostat absent pour la salle de bain --')
if (temperature < (consigne_n - hysteresis) ) then
print('Allumage du chauffage dans la salle de bain')
commandArray[radiateur]='Off'
elseif (temperature > (consigne_n + hysteresis)) then
print('Extinction du chauffage dans la salle de bain')
commandArray[radiateur]='On'
end
end
return commandArray[sonde][/code]
J'ai essayé les 2 commandes de récupération de température que vous me proposez :
Avec celle ci, il ne se passe rien.... plus d'erreur mais pas de retour de changement d'état non plus (print)
Avec celle ci
je récupère l'erreur suivante
Ci dessous mon script complet :
Code : Tout sélectionner
local consigne_j = tonumber(otherdevices_svalues['Thermostat_confort'])
local consigne_n = tonumber(otherdevices_svalues['Thermostat_nuit'])
local hysteresis = 0.3
local sonde = 'Salle de bain'
local thermostat_j = 'Thermostat jour'
local radiateur = 'Radiateur Salle de bain'
commandArray = {}
--local temperature = tonumber(string.sub(otherdevices_svalues['sonde'],1,4))
local temperature = otherdevices_temperature[sonde]
if (otherdevices[thermostat_j]=='On') then
print('-- Gestion du thermostat confort pour la salle de bain --')
if (temperature < (con[code]print('Allumage du chauffage dans la salle de bain')
commandArray[radiateur]='Off'
elseif (temperature > (consigne_j + hysteresis)) then
print('Extinction du chauffage dans la salle de bain')
commandArray[radiateur]='On'
end
elseif (otherdevices[thermostat_j]=='Off') then
print('-- Gestion du thermostat absent pour la salle de bain --')
if (temperature < (consigne_n - hysteresis) ) then
print('Allumage du chauffage dans la salle de bain')
commandArray[radiateur]='Off'
elseif (temperature > (consigne_n + hysteresis)) then
print('Extinction du chauffage dans la salle de bain')
commandArray[radiateur]='On'
end
end
return commandArray[sonde][/code]
J'ai essayé les 2 commandes de récupération de température que vous me proposez :
Avec celle ci, il ne se passe rien.... plus d'erreur mais pas de retour de changement d'état non plus (print)
Code : Tout sélectionner
local temperature = otherdevices_temperature[sonde]Code : Tout sélectionner
--local temperature = tonumber(string.sub(otherdevices_svalues['sonde'],1,4))Pour info ma sonde de température de Salle de bain est une DS18b20, possédant une sonde Oregon j'ai fait l'essai de la remplacer dans le script pour récupérer sa consigne, le résultat est le même.Error: EventSystem: ...pi/domoticz/scripts/lua/script_time_gestion_temp_SdB.lua:10: bad argument #1 to 'sub' (string expected, got nil)
Raspberry 3 - DOMOTICZ - RFXCOM RFXtrx433