Activer un planning avec un script ?
Re: Activer un planning avec un script ?
Oula! Merci pour toutes ces reponses! en plus avec le script qui va bien! c'est top !
Merci
Merci
Re: Activer un planning avec un script ?
@deennoo
je pense que j'ai rédigé mon exemple un peu vite, il doit te manquer des ' de chaque coté de ta timerID
je ne vois que cette différence par rapport à mon script complet qui fonctionne correctement
n’hésite pas à me dire ce que tu ne comprend pas
je pense que j'ai rédigé mon exemple un peu vite, il doit te manquer des ' de chaque coté de ta timerID
je ne vois que cette différence par rapport à mon script complet qui fonctionne correctement
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 Re: Activer un planning avec un script ?
Pourquoi le volet douche n'est pas actionné comme les autres me direz vous?
mon alim pilotant mes deux velux via un module IP VRT n'est pas assez puissante pour commander les deux volets en même temps. J'ai donc mis un planning sur ce volet pour la fermeture qui est actif toute l'année.
mais ma femme n'aime pas que le volet s'ouvre alors que nous ne somme pas levé. Ses horaires d'embauche variants souvent, difficile de "coller" avec ses horaires et plus sympa pour elle d'ouvrir lorsqu'elle le souhaite. mais du coup en mode vacances pas de planning d'ouverture. d'où cette fonction très utile pour n'activer le planning ouverture qu'en mode vacances hors de la maison. c'est un peu capillotracté comme résonnement mais cela me donne entière satisfaction. je compte encore améliorer mon script pour ajouter la gestion de la lumière extérieure via un capteur lux physique (quand je l'aurais fabriqué) ainsi qu'une future gestion d'actions manuelles pendant le mode vacances. exemple si quelqu'un passe arroser les plantes et souhaite ouvrir les volets alors qu'ils sont fermés via le script, actuellement ils vont se refermer en moins d'une minute. mais c'est pour plus tard, j'ai d'autres priorités et les vacances sont finies
vous noterez aussi que la commande de mes volets somfy est inversée par rapport à celle de mes velux, si vous souhaitez utiliser mon script prenez en compte cette particularité
mon alim pilotant mes deux velux via un module IP VRT n'est pas assez puissante pour commander les deux volets en même temps. J'ai donc mis un planning sur ce volet pour la fermeture qui est actif toute l'année.
mais ma femme n'aime pas que le volet s'ouvre alors que nous ne somme pas levé. Ses horaires d'embauche variants souvent, difficile de "coller" avec ses horaires et plus sympa pour elle d'ouvrir lorsqu'elle le souhaite. mais du coup en mode vacances pas de planning d'ouverture. d'où cette fonction très utile pour n'activer le planning ouverture qu'en mode vacances hors de la maison. c'est un peu capillotracté comme résonnement mais cela me donne entière satisfaction. je compte encore améliorer mon script pour ajouter la gestion de la lumière extérieure via un capteur lux physique (quand je l'aurais fabriqué) ainsi qu'une future gestion d'actions manuelles pendant le mode vacances. exemple si quelqu'un passe arroser les plantes et souhaite ouvrir les volets alors qu'ils sont fermés via le script, actuellement ils vont se refermer en moins d'une minute. mais c'est pour plus tard, j'ai d'autres priorités et les vacances sont finies
vous noterez aussi que la commande de mes volets somfy est inversée par rapport à celle de mes velux, si vous souhaitez utiliser mon script prenez en compte cette particularité
Re: Activer un planning avec un script ?
Bonjour,
Je m'inscris, débutant sous domoticz, car c'est aussi un truc qui me pose pb...
J'ai aussi ce problème d'activation/désactivation d'un planning complet par device. Bien vu l'API JSON qui permettrait de faire cela, mais le hic c'est qu'il s'agit de 6 radiateurs pilotés finement pour optimiser selon présence/optimiser l'usage heures creuses.
Et comme c'est un idx de timer par entrée de planning, c'est vraiment difficile (je dois en avoir une bonne dizaine par switch)! Pas question de faire un truc statique en prime, car les plannings peuvent être édités et les idx bouger.
Bref, sans doute possible en scriptant mais d'une je ne connais pas encore LUA et puis c'est quand même un manque dans l'API json que de ne pas pouvoir invalider cela par device.
Il y a bien le planning normal/vacances, mais c'est insuffisant. Plus de plannings alternatifs seraient sans doute une autre manière de faire d'ailleurs.
Sur le forum en anglais, j'ai posé aussi la question... et vu un manip tapant directement dans la BD de domoticz mais pas sain de le faire dans son dos. D'ailleurs, je pense que domoticz a un cacha de cette BD (pour de temps en temps écrire les données de graphe etc) car parfois, toutes les invalidations en direct via la BD se retrouvent ré-activées!
Bref, s'il y a une solution à laquelle je n'ai pas pensé... merci de m'en faire part!
Cdt
Je m'inscris, débutant sous domoticz, car c'est aussi un truc qui me pose pb...
J'ai aussi ce problème d'activation/désactivation d'un planning complet par device. Bien vu l'API JSON qui permettrait de faire cela, mais le hic c'est qu'il s'agit de 6 radiateurs pilotés finement pour optimiser selon présence/optimiser l'usage heures creuses.
Et comme c'est un idx de timer par entrée de planning, c'est vraiment difficile (je dois en avoir une bonne dizaine par switch)! Pas question de faire un truc statique en prime, car les plannings peuvent être édités et les idx bouger.
Bref, sans doute possible en scriptant mais d'une je ne connais pas encore LUA et puis c'est quand même un manque dans l'API json que de ne pas pouvoir invalider cela par device.
Il y a bien le planning normal/vacances, mais c'est insuffisant. Plus de plannings alternatifs seraient sans doute une autre manière de faire d'ailleurs.
Sur le forum en anglais, j'ai posé aussi la question... et vu un manip tapant directement dans la BD de domoticz mais pas sain de le faire dans son dos. D'ailleurs, je pense que domoticz a un cacha de cette BD (pour de temps en temps écrire les données de graphe etc) car parfois, toutes les invalidations en direct via la BD se retrouvent ré-activées!
Bref, s'il y a une solution à laquelle je n'ai pas pensé... merci de m'en faire part!
Cdt
Re: Activer un planning avec un script ?
Merci Papoo ! Ton exemple de script m'a bien aidé pour la gestion de mon mode "Vacances"
Je vous pose mon adaptation du script si cela peut intéresser qqun.
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
Je vous pose mon adaptation du script si cela peut intéresser qqun.
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
-- 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 commandArrayRe: Activer un planning avec un script ?
Hello,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
Depuis j'avais fait ceci:
http://www.domoticz.com/forum/viewtopic ... 05#p109305
L'avantage, c'est que c'est générique. La liste des IDX timer, par périphérique sous planning, est construite dynamiquement. Donc les plannings peuvent changer, tant que le nom du périh ne change pas cela continuera à fonctionner.
En plus, si on a une convention de nommage, les wildcards dans les noms étant acceptés on peut grouper et par exemple valider/invalider les plannings "radiateur*" en 1 seule commande.
J'ai rajouté un peu de complexité, pas forcément utile à tous et qui peut se supprimer le cas échéant, pour ré-activation automatique (perfectible, sans doute que je ferais évoluer cela pour que tout soit dans le script python et non séparé dans un time lua).
En, fait j'utilise ceci via un switch sélecteur qui invalide les plannings et arrête les radiateurs pour des durées de 3/6/9/12h. Ce qui me sert quand je mets la cheminée en route.
Re: Activer un planning avec un script ?
Y'a pas comme un bug dans l'API Json ?
Lorsque je fais :
La réponse est :
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 autant
Lorsque je fais :
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"
}Re: Activer un planning avec un script ?
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" }
Maintenant, je n'utilises pas de scenes et gère tous les matériels séparément. Donc si bug il y a c'est peut-être lié à cette particularité?
Re: Activer un planning avec un script ?
Bonjour,
J'ai configuré ma commande:
"http://192.168.200.21:8080/json.htm?typ ... mer&idx=16"
elle fonctionne très bien, par contre j'ai configuré un interrupteur ça ne fonctionne pas
Une idée?
Merci
J'ai configuré ma commande:
"http://192.168.200.21:8080/json.htm?typ ... mer&idx=16"
elle fonctionne très bien, par contre j'ai configuré un interrupteur ça ne fonctionne pas
Une idée?
Merci