Re: Activer un planning avec un script ?
Publié : 02 nov. 2016, 16:49
Oula! Merci pour toutes ces reponses! en plus avec le script qui va bien! c'est top !
Merci
Merci
Reprenez le contrôle de votre domotique
https://easydomoticz.com/forum/
Code : Tout sélectionner
--[[
name : script_time_tous_les_volets.lua
auteur : papoo
version : 1.20
date de création : 08/08/2016
Date de mise à jour : 30/10/16
Principe : permet d'automatiser la gestion des volets roulants
en fonction de l'heure de levé et couché du soleil
et forte luminosité (fonction désactivée dans l'attente d'un capteur lux physique)
]]--
---------------------------------------------------------------------------
-- Les différents états d'un volet Stopped Open Closed
---------------------------------------------------------------------------
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local debugging = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local ip = '192.168.10.240:8080' -- user:pass@ip:port de domoticz
local sonde_ext = 'Temperature exterieure' -- nom de la sonde de température extérieure
--local lumiere = tonumber(otherdevices_svalues['Lux']) -- nom du bloc Lux de wheather underground
--local lux_max = tonumber(90000) -- seuil à parti duquel on ferme les volets en pleine journée
local delai_apres_leve_soleil = tonumber(75) -- delai en minutes pour l'ouverture des volets après levé du soleil
local delai_apres_couche_soleil = tonumber(45) -- delai en minutes pour la fermeture des volets après couché du soleil
local inter_vacances = ' Vacances' --Penser à créer un interrupteur Vacances valeur 'On' pour en vacances
local timerID ='2' -- id du timer douche
---------------------------------------------------------------------------
-- Tableau des volets
---------------------------------------------------------------------------
local les_volets = {};
-- 1ere volet : nom du device volet 1
les_volets[1] = {volet="Salon sur Rue", idx=361, Type="somfy"} -- Possibilité d'ajouter des équipements en relation, comme température piece, etat ouverture fenetre, etc (séparé par une virgule)
-- 2eme volet : nom du device volet 2
les_volets[2] = {volet="Salon sur Jardin", idx=362, Type="somfy"} -- exemple {volet="Salon sur Jardin", temperature="Temperature Salon", fenetre="Fenetre Salon sur Jardin"}
-- 3eme volet : nom du device volet 3
les_volets[3] = {volet="Cuisine", idx=363, Type="somfy"} -- La déclaration de l'idx {idx=xxx} ne sert qu'en cas d'utilisation de la commande via json, (ligne à décommenter)
-- 4eme volet : nom du device volet 4
les_volets[4] = {volet="Chambre Parents", idx=364, Type="somfy"}
-- 5eme volet : nom du device volet 5
les_volets[5] = {volet="Chambre 2", idx=365, Type="somfy"}
-- 6eme volet : nom du device volet 6
les_volets[6] = {volet="Chambre 3", idx=473, Type="velux"}
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local indexArray=0
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
function voir_les_logs (s, debugging)
if (debugging) then
if s ~= nil then
print ("<font color='#f3031d'>".. s .."</font>")
else
print ("<font color='#f3031d'>aucune valeur affichable</font>")
end
end
end
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
commandArray = {}
if ( otherdevices['Vacances'] == 'On') then
--activation du planning volet douche
commandArray[indexArray]={['OpenURL']=ip..'/json.htm?type=command¶m=enabletimer&idx='.. timerID}
indexArray=indexArray+1
time=os.time()
local minutes=tonumber(os.date('%M',time))
local hours=tonumber(os.date('%H',time))
local NowInMinutes = hours * 60 + minutes;
if (minutes<10) then minutes='0'..minutes..'' end
if (hours<10) then hours='0'..hours..'' end
local now=''..hours..':'..minutes
local temperature_exterieure = otherdevices_temperature[sonde_ext]
print ("=========== Gestion Des Volets (v1.0) ===========")
voir_les_logs("--- --- --- Heure actuelle : "..now.."("..NowInMinutes..")",debugging)
voir_les_logs('--- --- --- Température extérieure : '..temperature_exterieure,debugging)
voir_les_logs("--- --- --- Heure de couché du soleil en minutes : "..timeofday['SunsetInMinutes'],debugging);
voir_les_logs("--- --- --- Heure de fermeture des stores en minutes : "..timeofday['SunsetInMinutes']+ delai_apres_couche_soleil,debugging)
voir_les_logs("--- --- --- Heure de levé du soleil en minutes : "..timeofday['SunriseInMinutes'],debugging);
voir_les_logs("--- --- --- Heure d'ouverture des stores en minutes : "..timeofday['SunriseInMinutes'] + delai_apres_leve_soleil,debugging)
--voir_les_logs("--- --- --- Lux : "..lumiere,debugging);
for k,v in pairs(les_volets) do-- On parcourt chaque volet
voir_les_logs('--- --- ---',debugging);
print ('--- --- --- Gestion du volet : '..v.volet)
voir_les_logs('--- --- --- Position du volet : '..otherdevices[v.volet],debugging)
-- Pendant la Journée
if (tonumber(NowInMinutes) > timeofday['SunriseInMinutes'] + delai_apres_leve_soleil and tonumber(NowInMinutes) < timeofday['SunsetInMinutes'] + delai_apres_couche_soleil) then --Pendant la journée
voir_les_logs('--- --- --- Apres le levé du soleil',debugging)
if ( otherdevices[v.volet]=='Closed' or otherdevices[v.volet]=='Stopped' ) then
voir_les_logs ('--- --- --- Le volet : "'..v.volet..'" doit être ouvert',debugging)
voir_les_logs ('--- --- --- Le volet dont l\'idx est : "'..v.idx..'" doit être Ouvert',debugging)
print('--- --- --- Le volet est Fermé ==> Ouverture');
--oss = "curl 'http://127.0.0.1:8080/json.htm?type=command¶m=switchlight&idx='..v.idx..'&switchcmd=Off'
--os.execute(oss)
if ( v.Type == "somfy") then
commandArray[v.volet]='Off'
else
commandArray[v.volet]='On'
end
end
--[[if ( lumiere > lux_max ) then
voir_les_logs ('--- --- --- Le volet : "'..v.volet..'" doit être fermé',debugging)
-- voir_les_logs ('--- --- --- Le volet idx : "'..v.volet.idx..'" doit être fermé',debugging)
print('--- --- --- Le volet est ouvert ==> fermeture');
--oss = "curl 'http://127.0.0.1:8080/json.htm?type=command¶m=switchlight&idx='..v.idx..'&switchcmd=On'
--os.execute(oss)
if ( v.Type == "somfy") then
commandArray[v.volet]='On'
else
commandArray[v.volet]='Off'
end
end]]--
end
-- Pendant la Nuit
if (tonumber(NowInMinutes) < timeofday['SunriseInMinutes'] + delai_apres_leve_soleil or tonumber(NowInMinutes) > timeofday['SunsetInMinutes'] + delai_apres_couche_soleil) then --Pendant la nuit
voir_les_logs('--- --- --- Apres le couché du soleil',debugging)
if ( otherdevices[v.volet]=='Open' or otherdevices[v.volet]=='Stopped' ) then
voir_les_logs ('--- --- --- Le volet : "'..v.volet..'" doit être fermé',debugging)
voir_les_logs ('--- --- --- Le volet dont l\'idx est : "'..v.idx..'" doit être Fermé',debugging)
print('--- --- ---Le volet est ouvert ==> fermeture')
--oss = "curl 'http://127.0.0.1:8080/json.htm?type=command¶m=switchlight&idx='..v.idx..'&switchcmd=On'
--os.execute(oss)
if ( v.Type == "somfy") then
commandArray[v.volet]='On'
else
commandArray[v.volet]='Off'
end
end
end
end -- end For
voir_les_logs('--- --- ---',debugging);
print ("=========== Fin de gestion des volets ===========")
else
--désactivation du planning volet douche
commandArray[indexArray]={['OpenURL']=ip..'/json.htm?type=command¶m=disabletimer&idx='.. timerID}
indexArray=indexArray+1
end -- if vacances
return commandArray Code : Tout sélectionner
-- script_device_Vacances.lua
---------------
-- Variables --
---------------
local ip = '127.0.0.1:8080'
local indexArray = 0
commandArray = {}
local schedules = {};
schedules[1] = {name="Radiateur Salon", idx=16, time="07.30"}
schedules[2] = {name="Radiateur Salon", idx=17, time="09.30"}
schedules[3] = {name="Radiateur Salon", idx=18, time="17.00"}
schedules[4] = {name="Radiateur Salon", idx=19, time="23.30"}
schedules[5] = {name="Radiateur Salon", idx=20, time="08.30"}
schedules[6] = {name="Radiateur SDB", idx=21, time="07.00"}
schedules[7] = {name="Radiateur SDB", idx=22, time="09.00"}
schedules[8] = {name="Radiateur SDB", idx=23, time="08.30"}
schedules[9] = {name="Radiateur SDB", idx=24, time="10.30"}
if devicechanged['Vacances'] == 'On' then
for k,v in pairs(schedules) do
commandArray[indexArray]={['OpenURL']=ip..'/json.htm?type=command¶m=disabletimer&idx='.. v.idx}
indexArray=indexArray+1
print("Disabling timer for ".. v.name .." at ".. v.time)
end
elseif devicechanged['Vacances'] == 'Off' then
for k,v in pairs(schedules) do
commandArray[indexArray]={['OpenURL']=ip..'/json.htm?type=command¶m=enabletimer&idx='.. v.idx}
indexArray=indexArray+1
print("Enabling timer for ".. v.name .." at ".. v.time)
end
end
return commandArrayHello,Damsee a écrit : Par contre et pour répondre à lost, mes plannings et idx sont fixes mais cela me convient car je ne les change par tous les jours
Code : Tout sélectionner
http://chezmoi.com/json.htm?type=schedulesCode : Tout sélectionner
{
"result" : [
{
"Active" : "true",
"Date" : "",
"Days" : 128,
"DevName" : "Fermeture des volets",
"DeviceRowID" : 1,
"Hue" : 0,
"IsThermostat" : "false",
"Level" : 100,
"MDay" : 0,
"Month" : 0,
"Occurence" : 0,
"Randomness" : "false",
"ScheduleDate" : "2017-02-06 18:29:00",
"Time" : "00:30",
"TimerCmd" : 0,
"TimerID" : 2,
"TimerType" : 4,
"TimerTypeStr" : "After Sunset",
"Type" : "Scene"
},
{
"Active" : "true",
"Date" : "",
"Days" : 27,
"DevName" : "Ouverture des volets",
"DeviceRowID" : 3,
"Hue" : 0,
"IsThermostat" : "false",
"Level" : 100,
"MDay" : 0,
"Month" : 0,
"Occurence" : 0,
"Randomness" : "false",
"ScheduleDate" : "2017-02-07 08:35:00",
"Time" : "08:35",
"TimerCmd" : 0,
"TimerID" : 4,
"TimerType" : 2,
"TimerTypeStr" : "On Time",
"Type" : "Scene"
},
{
"Active" : "false",
"Date" : "",
"Days" : 128,
"DevName" : "Ouverture des volets SIMULATEUR",
"DeviceRowID" : 2,
"Hue" : 0,
"IsThermostat" : "false",
"Level" : 100,
"MDay" : 0,
"Month" : 0,
"Occurence" : 0,
"Randomness" : "true",
"ScheduleDate" : "",
"Time" : "08:30",
"TimerCmd" : 0,
"TimerID" : 1,
"TimerType" : 2,
"TimerTypeStr" : "On Time",
"Type" : "Scene"
}
],
"status" : "OK",
"title" : "Schedules"
}Code : Tout sélectionner
http://chezmoi.com/json.htm?type=command¶m=disabletimer&idx=4Code : Tout sélectionner
{
"status" : "OK",
"title" : "DisableTimer"
}Pourtant, ca semble correct et le switch "Ouverture des volets" devrait voir sa ligne de planning de 8h35 invalidée (et elle seule, attention: 1 ligne planning=1 idx timer).JRCondat a écrit :Y'a pas comme un bug dans l'API Json ?
(...)
Et donc quand je veux désactiver un planning dans le cas présent le 4, je fais :En retour j'ai ce qu'il y a ci-dessous mais le planning ne passe pas à false pour autantCode : Tout sélectionner
http://chezmoi.com/json.htm?type=command¶m=disabletimer&idx=4![]()
Code : Tout sélectionner
{ "status" : "OK", "title" : "DisableTimer" }