Correction de script LUA
Re: Correction de script LUA
Merci pour ta réponse, ça valide ce que je pensais faire.
Bonne journée.
A+
Fab
Re: Correction de script LUA
C'est dimanche, le temps est minable sur la Bretagne, je remets le nez dedans.
Et un script pour la piscine:
Code : Tout sélectionner
commandArray={}
local heure = os.date("%H:%M")
now=os.date("*t")
local Var = uservariables['Filtration']
---------------------------------------------------------------------------------------
if now.min % 1 == 0 then -- exécution toutes les minutes
local t = tonumber(string.format("%.1f", otherdevices_temperature['Temp. piscine']))
print("Temp.piscine " .. t..' °C')
print("Heure " .. heure)
print("Durée filtration " .. Var..' min.')
if (t <= 12 and (heure == "09:00" or heure == "17:00")) and otherdevices['D1-Filtration']=='Off' then
commandArray['D1-Filtration']='On FOR 30'
commandArray['SendNotification']='Filtration piscine#En marche pour 30 minutes.##0###GCM'
elseif t > 12 and (heure == "07:00" or heure == "09:00" or heure == "11:00" or heure == "13:00" or heure == "15:00" or heure == "17:00" or heure == "19:00" or heure == "21:00") and otherdevices['D1-Filtration']=='Off' then
commandArray['D1-Filtration']='On FOR 'Var''
commandArray['SendNotification']='Filtration piscine#En marche pour .. 'Var' .. minutes.##0###GCM'
end
end
return commandArraySi quelqu'un peut me le confirmer sachant qu'il y a une erreur ici je pense
Code : Tout sélectionner
(t <= 12 and (heure == "10:06" or heure == "17:00"))A+
Fab
-
denis_brasseur
- Messages : 898
- Inscription : 24 déc. 2018, 17:05
- Localisation : (26)
Re: Correction de script LUA
Je ne vois rien d'anormal, pour moi cela signifie que la condition sera respecté si la température de la piscine est <= à 12 °, et qu'il est (10:06 ou 17:00). Cela est cohérent avec une exécution toute les minutes.f0emm a écrit : 10 févr. 2019, 10:08 Le script le plus important de mon système domotique qui doit être d'une fiabilité à toute épreuve.
Si quelqu'un peut me le confirmer sachant qu'il y a une erreur ici je penseBon dimanche à tous.Code : Tout sélectionner
(t <= 12 and (heure == "10:06" or heure == "17:00"))
A+
Fab
Je ne connait pas la logique que tu veux appliquer, mais je ne vois pas d'erreur dans cette ligne.
Cette ligne :
Code : Tout sélectionner
commandArray['SendNotification']='Filtration piscine#En marche pour .. 'Var' .. minutes.##0###GCM'Code : Tout sélectionner
commandArray['SendNotification']='Filtration piscine#En marche pour '..Var..' minutes.##0###GCM'La commande
Code : Tout sélectionner
commandArray['D1-Filtration']='On FOR 30'Code : Tout sélectionner
commandArray['D1-Filtration']='On' -- mise en route de la pompe
commandArray['D1-Filtration']='Off AFTER 1800' -- arrêt au bout de 1800 s (30 mn)denis
Re: Correction de script LUA
Encore merci pour ton aide.
Plusieurs soucis :
Code : Tout sélectionner
commandArray['D1-Filtration']='On' -- mise en route de la pompe
commandArray['D1-Filtration']='Off AFTER 1800' -- arrêt au bout de 1800 s (30 mn)Peut être ma configuration qui veut ça étant donné que le ON/OFF de cet inter actionne par json un ON Push donc ON/OFF inter = ON/ON.
-> Réglé par un 'On FOR 30'
Mon nouveau script :
Code : Tout sélectionner
commandArray={}
local heure = os.date("%H:%M")
now=os.date("*t")
---------------------------------------------------------------------------------------
if now.min % 1 == 0 then -- exécution toutes les minutes
local t = tonumber(string.format("%.1f", otherdevices_temperature['Temp. piscine']))
local matemperature = tonumber(string.format("%.1f", otherdevices_temperature['Temp. piscine']))
local Duree = matemperature /16*60
print("Temp.piscine " .. t..' °C')
print("Heure " .. heure)
print("Durée filtration " .. Duree..' min.')
-- Si température piscine est inf. ou égale à 12 and heure égal 09:00 ou 17:00 and D1 Filtration=Off
if t <= 12 and (heure == "14:56" or heure == "17:00") and otherdevices['D1-Filtration']=='Off' then
commandArray['D1-Filtration']='On FOR 'Duree'' -- arrêt au bout de variable
commandArray['SendNotification']='Filtration piscine#En marche pour '.. Duree ..' minutes.##0###GCM'
-- Si température piscine est supérieure à 12 and heure égal 07:00 ..... 21:00 and D1 Filtration=Off
elseif t > 12 and (heure == "07:00" or heure == "09:00" or heure == "11:00" or heure == "13:00" or heure == "15:00" or heure == "17:00" or heure == "19:00" or heure == "21:00") and otherdevices['D1-Filtration']=='Off' then
commandArray['D1-Filtration']='On FOR 'Duree'' -- arrêt au bout de variable
commandArray['SendNotification']='Filtration piscine#En marche pour '.. Duree ..' minutes.##0###GCM'
end
end
return commandArrayCode : Tout sélectionner
Filtration auto: [string "commandArray={}..."]:19: attempt to call local 'Duree' (a number value)
2019-02-10 15:12:28.735 Status: LUA: Durée filtration 41.25 min.Après ça ce script sera au top !
Merci.
Bon dimanche.
A+
Fab
Re: Correction de script LUA
il était temps depuis 8h ce matin.
Pour le ON for:
Code : Tout sélectionner
'On FOR '..Duree..''Le script au complet :
Code : Tout sélectionner
commandArray={}
local heure = os.date("%H:%M")
now=os.date("*t")
---------------------------------------------------------------------------------------
if now.min % 1 == 0 then -- exécution toutes les minutes
local t = tonumber(string.format("%.1f", otherdevices_temperature['Temp. piscine']))
local matemperature = tonumber(string.format("%.1f", otherdevices_temperature['Temp. piscine']))
local Duree = matemperature /16*60
print("Temp.piscine " .. t..' °C')
print("Heure " .. heure)
print("Durée filtration " .. Duree..' min.')
-- Si température piscine est inf. ou égale à 12 and heure égal 09:00 ou 17:00 and D1 Filtration=Off
if t <= 12 and (heure == "09:00" or heure == "17:00") and otherdevices['D1-Filtration']=='Off' then
commandArray['D1-Filtration']='On FOR 30' -- arrêt au bout de 30 minutes
commandArray['SendNotification']='Filtration piscine#En marche pour 30 minutes.##0###GCM'
-- Si température piscine est supérieure à 12 and heure égal 07:00 ..... 21:00 and D1 Filtration=Off
elseif t > 12 and (heure == "07:00" or heure == "09:00" or heure == "11:00" or heure == "13:00" or heure == "15:00" or heure == "17:00" or heure == "19:00" or heure == "21:00") and otherdevices['D1-Filtration']=='Off' then
commandArray['D1-Filtration']='On FOR '..Duree..'' -- arrêt au bout du temps calculé 'Duree'
commandArray['SendNotification']='Filtration piscine#En marche pour '.. Duree ..' minutes.##0###GCM'
end
end
return commandArrayIl me reste le hors gel qui je pense est bon :
Code : Tout sélectionner
commandArray={}
local heure = os.date("%H:%M")
now=os.date("*t")
-----------------------------------------------
if now.min % 1 == 0 then -- exécution toutes les minutes
local t1 = tonumber(string.format("%.1f", otherdevices_temperature['Temp. piscine']))
local t2 = tonumber(string.format("%.1f", otherdevices_temperature['Temp. exterieur']))
if otherdevices['D1-Filtration']=='Off' and (t1 <= 5 and t2 <= -3) then
commandArray['D1-Filtration']='On FOR 30' -- mise en route de la pompe
commandArray['SendNotification']='Filtration piscine#Hors gel : mise en marche pour 30 minutes.##0###GCM'
end
end
return commandArrayCode : Tout sélectionner
commandArray={}
local heure = os.date("%H:%M")
now=os.date("*t")
---------------------------------------------------------------------------------------
if now.min % 1 == 0 then -- exécution toutes les minutes
local t = tonumber(string.format("%.1f", otherdevices_temperature['Temp. piscine']))
local t2 = tonumber(string.format("%.1f", otherdevices_temperature['Temp. exterieur']))
local matemperature = tonumber(string.format("%.1f", otherdevices_temperature['Temp. piscine']))
local Duree = matemperature /16*60
print("Temp.piscine " .. t..' °C')
print("Heure " .. heure)
print("Durée filtration " .. Duree..' min.')
-- Si température piscine est inf. ou égale à 12 and heure égal 09:00 ou 17:00 and D1 Filtration=Off
if t <= 10 and (heure == "09:00" or heure == "17:00") and otherdevices['D1-Filtration']=='Off' then
commandArray['D1-Filtration']='On FOR 30' -- arrêt au bout de variable
commandArray['SendNotification']='Filtration piscine#En marche pour 30 minutes.##0###GCM'
-- Si température piscine est supérieure à 12 and heure égal 07:00 ..... 21:00 and D1 Filtration=Off
elseif t > 10 and (heure == "07:00" or heure == "09:00" or heure == "11:00" or heure == "13:00" or heure == "15:00" or heure == "17:00" or heure == "19:00" or heure == "21:00") and otherdevices['D1-Filtration']=='Off' then
commandArray['D1-Filtration']='On FOR '..Duree..'' -- arrêt au bout de variable
commandArray['SendNotification']='Filtration piscine#En marche pour '.. Duree ..' minutes.##0###GCM'
-- Hors gel
elseif (t <= 5 and t2 <= -3) and otherdevices['D1-Filtration']=='Off' then
commandArray['D1-Filtration']='On FOR 30' -- mise en route de la pompe
commandArray['SendNotification']='Filtration piscine#Hors gel : mise en marche pour 30 minutes.##0###GCM'
end
end
return commandArrayA+
Fab
-
denis_brasseur
- Messages : 898
- Inscription : 24 déc. 2018, 17:05
- Localisation : (26)
Re: Correction de script LUA
Oui, c'est cohérent, même l’ordre n'est pas important, puisque pour les 3 conditions, les 3 actions sont identiques.f0emm a écrit : 10 févr. 2019, 15:35 D'ailleurs je dois pouvoir l'incorporer au premier script avec un deuxième 'elseif' ?
Tu peux simplifier (mais çà ne change absolument rien au fonctionnement) en sortant le test if otherdevices['D1-Filtration']=='Off' des 3 boucles, puisque tu fais 3 fois ce test.
Code : Tout sélectionner
--si D1 Filtration=Off
if otherdevices['D1-Filtration']=='Off' then
-- Hors gel
if (t <= 5 and t2 <= -3) then
-- Si température piscine est inf. ou égale à 12 and heure égal 09:00 ou 17:00
else if (t <= 10 and (heure == "09:00" or heure == "17:00")) then
-- Si température piscine est supérieure à 12 and heure égal 07:00 ..... 21:00 and D1 Filtration=Off
elseif (t > 10 and (heure == "07:00" or heure == "09:00" or heure == "11:00" or heure == "13:00" or heure == "15:00" or heure == "17:00" or heure == "19:00" or heure == "21:00")) then
end
endCode : Tout sélectionner
local heure = os.date("%H:%M")
now=os.date("*t")
commandArray={}
---------------------------------------------------------------------------------------
if now.min % 1 == 0 then -- exécution toutes les minutes
local t = tonumber(string.format("%.1f", otherdevices_temperature['Temp. piscine']))
local t2 = tonumber(string.format("%.1f", otherdevices_temperature['Temp. exterieur']))
local matemperature = tonumber(string.format("%.1f", otherdevices_temperature['Temp. piscine']))
local Duree = matemperature /16*60
print("Temp.piscine " .. t..' °C')
print("Heure " .. heure)
print("Durée filtration " .. Duree..' min.')
--si D1 Filtration=Off
if otherdevices['D1-Filtration']=='Off' then
-- Hors gel
if (t <= 5 and t2 <= -3) then
commandArray['D1-Filtration']='On FOR 30' -- mise en route de la pompe
commandArray['SendNotification']='Filtration piscine#Hors gel : mise en marche pour 30 minutes.##0###GCM'
-- Si température piscine est inf. ou égale à 10 and heure égal 09:00 ou 17:00
else if (t <= 10 and (heure == "09:00" or heure == "17:00")) then
commandArray['D1-Filtration']='On FOR 30' -- arrêt au bout de variable
commandArray['SendNotification']='Filtration piscine#En marche pour 30 minutes.##0###GCM'
-- Si température piscine est supérieure à 10 and heure égal 07:00 ..... 21:00 and D1 Filtration=Off
elseif (t > 10 and (heure == "07:00" or heure == "09:00" or heure == "11:00" or heure == "13:00" or heure == "15:00" or heure == "17:00" or heure == "19:00" or heure == "21:00")) then
commandArray['D1-Filtration']='On FOR '..Duree -- arrêt au bout de variable
commandArray['SendNotification']='Filtration piscine#En marche pour '.. Duree ..' minutes.##0###GCM'
end
end
end
return commandArrayUn simple détail, ça ne change rien a ce que tu a fait.
Re: Correction de script LUA
Bon, et bien après pas moins de 12h de taf ce script est abouti.
Encore merci Denis de me donner de ton temps.
Quel sera le prochain script ?
Je m'en ferais bien un qui active mon éclairage quand je rentre de nuit à la maison mais pour l'instant je ne trouve pas le géorepérage de l'appli Domoticz sur smartphone très précis.
Entrée/sortie du périmètre aléatoire.
Je vais essayer de trouver autre chose.
Bonne soirée
A+
Fab
Re: Correction de script LUA
J'ai essayé pas mal de chose mais rien ne veut fonctionner.
Je souhaiterais rajouter 20 minutes à l'heure du coucher du soleil.
Code : Tout sélectionner
local heure = os.date("%H:%M")
-- retourne l'heure du coucher de soleil ex: "22:15"
coucherSoleil = string.sub(os.date("!%X",60*timeofday['SunsetInMinutes']), 1, 5)
local coucherSoleil2 = (coucherSoleil + 00:20)Encore une subtilité !
Merci.
Bonne soirée.
A+
Fab
-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Correction de script LUA
L'heure du coucher en minute t'es donné par
Code : Tout sélectionner
timeofday['SunsetInMinutes']
Code : Tout sélectionner
timeofday['SunsetInMinutes'] + 20
Code : Tout sélectionner
60 * (timeofday['SunsetInMinutes'] + 20)
Code : Tout sélectionner
coucherSoleil2 = string.sub(os.date("!%X",60*(timeofday['SunsetInMinutes']+20)), 1, 5)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
Re: Correction de script LUA
Je vais réessayer, j'ai trouvé cette méthode tout à l'heure sur la toile mais elle ne fonctionnait pas.
J'ai peut être zapé quelque chose.
Merci.
Bonne soirée.
A+
Fab