je voudrais vous présenter mes travaux avec Wiser de Schneider Electric.

Avec Domoticz en réseau j'attaque le module de gestion domotique wiser





Code : Tout sélectionner
---------------------------------------
---------- Variables publics ----------
---------------------------------------
-- Dans un premier temps veuillez créer ces variables utilisateurs pour les besoin système
-- Réglages/Plus d'option/Variable utilisateur = "Cycle_PresenceEquip" de type entier
-- Réglages/Plus d'option/Variable utilisateur = "MinutesAbsence001" de type entier
-- Réglages/Plus d'option/Variable utilisateur = "MinutesAbsence002" de type entier
-- Réglages/Plus d'option/Variable utilisateur = "MinutesAbsence003" de type entier et x en fonction du nombre d'équipements
---------------------------------------
------------ Configuration ------------
---------------------------------------
local nom_script = "PresenceEquip" -- Scipt LUA de type Time cycle de 1 minute
local Desc_script = "Détection de présence équipement"
local version = "1.00"
local debugging = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local NbPingPaquets = 2 -- (-C1) le ping s'arrêter après l'envoi de nombre paquets avant que la temporisation n'expire. Plus ce paramètre est grand et plus le ping sera présis mais prendra plus de temps
local TimeOut = 2 -- (-w1) temporisation en secondes du ping, avant que le ping ne se termine quel que soit le nombre de paquets envoyés ou reçus. Attention le temps total de ces temps pour tous les équipements ne doit pas dépasser 10 secondes
local VarTempsCycle = "Cycle_" .. nom_script -- Facultatif : Variable pour la mesure de temps de cycle du script
-- Dans un premier temps veuillez créer les variables Domoticz nommées "MinutesAbsence00x" de type entier, x commence de 1 jusqu'au nombre maxi d'équipement que vous souhaitez surveiller
---------------------------------------------------------------------------
---------------------------------------------------------------------------
-- Fonctions
---------------------------------------------------------------------------
-- Fonction des log
function voir_les_logs (s, debugging)
if (debugging) then
if s ~= nil then
print ("<font color='#0280e9'>".. s .."</font>")
else
print ("<font color='#f3031d'>aucune valeur affichable</font>")
end
end
end
--Fonction calcule la différence de temps (en secondes) entre maintenant et la date passée en paramètre.
function timedifference (s)
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
--------------------------------------------
-- Liste des équipements
--------------------------------------------
Equipement = {};
--{ nom de l'équipement, ip du périphérique, Temps de détection de l'absence de l'équipement en minutes }
Equipement[1] = {nom="Présence de M", ip = "192.168.0.100", TempsDetectionAbsence = 60} -- La particularité des smartphones est que pour des économie d'énergie le wifi se connecte seulement si l'écran est allumé. Ajustez TempsDetectionAbsence pour éviter les absences à chaque extinction de l'écran
Equipement[3] = {nom="Présence TV" , ip = "192.168.0.102", TempsDetectionAbsence = 1}
---------------------------------------------------------------------------
commandArray = {}
commandArray['Variable:' .. VarTempsCycle]= '600'
voir_les_logs("Info Script ".. nom_script .. " : " .. Desc_script .. " (v".. version ..") by MikeW",debugging)
--Test de préseces
for i, v in pairs(Equipement) do
local ping = false;
local string = 'ping -c' .. NbPingPaquets .. ' -w' .. TimeOut .. ' ' .. v.ip
voir_les_logs ("Info Script ".. nom_script .. " : " .. string, debugging)
ping = os.execute(string);
if (ping) then
if (otherdevices[v.nom]~='On') then
commandArray[v.nom]='On'
voir_les_logs ("Info Script ".. nom_script .. " : "..v.nom..", présence détectée", debugging)
end
commandArray['Variable:MinutesAbsence00' .. i] = '0'
else
if uservariables['MinutesAbsence00' .. i]<32768 then
commandArray['Variable:MinutesAbsence00' .. i] = tostring(tonumber(uservariables['MinutesAbsence00' .. i]) + 1)
end
if uservariables['MinutesAbsence00' .. i]>=v.TempsDetectionAbsence then
if (otherdevices[v.nom]~='Off') then
commandArray[v.nom]='Off'
voir_les_logs ("Info Script ".. nom_script .. " : "..v.nom..", absence détectée", debugging)
end
end
end
end
commandArray['Variable:' .. VarTempsCycle]=tostring(timedifference(tostring(uservariables_lastupdate[VarTempsCycle])))
return commandArrayCode : Tout sélectionner
---------------------------------------
---------- Variables publics ----------
---------------------------------------
-- Dans un premier temps veuillez créer ces variables utilisateurs pour les besoin système
-- Réglage/Plus d'option/Variable utilisateur = "StepWiser" de type entier
-- Réglage/Plus d'option/Variable utilisateur = "Cycle_CmdWiser" de type entier
-- Réglage/Plus d'option/Variable utilisateur = "RemoteCmdWiser" de type entier
---------------------------------------
------------ Configuration ------------
---------------------------------------
local nom_script = "CmdWiser" -- Scipt LUA de type Device
local Desc_script = "Ecriture des commandes Wiser"
local version = "2.60"
local debugging = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local IpAddr = "192.168.0.2" -- adresse du Wiser
local LogAdmin = "admin" -- Login Wiser
local Mdp = "admin" -- mot de passe Wiser
local TempsSansActivite = 15 -- Temps sans activité des équipements
local JoursDeVacances = 2 -- Jours de vacances pour le passage du mode vacances
local RemoteCmd = uservariables["RemoteCmdWiser"] -- Commande Wiser provenant d'un autre script ajoutez -> commandArray['Variable:RemoteCmdWiser']=tostring(otherdevices_idx['Votre actionneur']), pour relancer la commande de votre actionneur dans vos scripts
local VarTempsCycle = "Cycle_" .. nom_script -- Facultatif : Variable pour la mesure de temps de cycle du script
-- Rebonds d'écritures après lecture des données
-- Si vous constatez ce type d'effets dans les logs ajustez le paramètre "TempoApresLecWiser" qui bloque ce problème
--17:41:00.457 dzVents: Info Script MajCapteursWiser : Lecture des données de températures Wiser, dernière lecture il y à 358 sec
--17:41:31.510 dzVents: Info Script CmdWiser : Start requete = /usr/bin/curl -H "Content-Type: application/json" -X POST -d '{"targetTemp":[{"locationId":"Cuisine","targetValue":19.00}]}' http://admin:admin@192.168.0.2/rpc/hvac/set_loc_temp
--17:41:31.735 (Wiser) Thermostat (Csg de la cuisine)
local TempoApresLecWiser = 100 -- Temps en secondes après la lecture des données Wiser : Ajustez ce temps pour éviter les rebonds de commandes apres la lecture Wiser
-- Liste des requêtes disponibles Wiser -- /rpc/mode/set_home_mode | Wiser <- Ecriture du mode de chauffe
-- /rpc/hvac/set_loc_temp | Wiser <- Ecriture d'une consigne de température
-- /rpc/loadmanagement/set_appliance_state | Wiser <- Commande d'un équipement de type Interupteur
-- Sur un navigateur internet lancer "http://192.168.0.2/rpc/loadmanagement/get_appliances" (avec l'IP du votre Wiser) pour trouver les applianceId de vos équipements
-- Favorisez FireFoxe qui traduit directement le Json
-- Attention quand vous ajoutez des nouveaux équipements, il est possible que votre Wiser reclasse vos équipements, l'ordre de vos équipements peut bouger. Contrôler l'ordre après votre ajout.
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
-- Fonction des log
function voir_les_logs (s, debugging)
if (debugging) then
if s ~= nil then
print ("<font color='#01CC43'>".. s .."</font>")
else
print ("<font color='#f3031d'>aucune valeur affichable</font>")
end
end
end
-- Fonction commande d'équipement Wiser
function CmdCapteur(ID_Equip, IdxEquip, Type, Valeur001, Valeur002, FonctionReqWiser)
if (uservariables["StepWiser"]==0) then
if (Type == "PrisePilotée") then
local Cmd = "true"
if (Valeur001~="nil") or (RemoteCmd==IdxEquip) then
if Valeur001 == "On" then
Cmd = "true"
else
Cmd = "false"
end
Req = '/usr/bin/curl -H "Content-Type: application/json" -X POST -d \'{"applianceState":[{"applianceId":"' .. ID_Equip .. '","state":' .. Cmd .. '}]}\' http://' .. LogAdmin .. ':' .. Mdp .. '@' .. IpAddr .. FonctionReqWiser
local config=assert(io.popen(Req))--Commande Json dans la requête HTTP : {"applianceState":[{"applianceId":"' .. ID_Equip .. '","state":' .. Cmd .. '}]}
voir_les_logs("Info Script ".. nom_script .. " : Start requete = " .. Req ,true)
end
end
if (Type == "ModeChauffe") then
local Cmd = '{"homeMode":"schedule","antiFreeze":false}'--Commande Json
if (Valeur001~="nil") or (RemoteCmd==IdxEquip) then
if (Valeur001 == "Off") then
Cmd = '{"homeMode":"energysaver","antiFreeze":false}'--Commande Json
end
if (Valeur001 == "Manuel") then
Cmd = '{"homeMode":"manual","antiFreeze":false}'--Commande Json
end
if (Valeur001 == "Vacances") then
Cmd = '{"homeMode":"holiday","antiFreeze":true,"endTime":' .. os.time()+ tonumber(Valeur002) * 24 * 60 * 60 ..'}'--Commande Json
end
if (Cmd == '{"homeMode":"schedule","antiFreeze":false}') then
commandArray['Jours de vacances']="Off"
commandArray['Simulation']='Set Level: 0'
end
Req = '/usr/bin/curl -H "Content-Type: application/json" -X POST -d \'' .. Cmd .. '\' http://' .. LogAdmin .. ':' .. Mdp .. '@' .. IpAddr .. FonctionReqWiser
local config=assert(io.popen(Req))
voir_les_logs("Info Script ".. nom_script .. " : Start requete = " .. Req ,true)
end
end
if (Type == "ConsigneTemp") then
if (Valeur001~="nil") or (RemoteCmd==IdxEquip) then
local Cmd = '{"targetTemp":[{"locationId":"'.. ID_Equip .. '","targetValue":' .. Valeur002 .. '}]}'--Commande Json
Req = '/usr/bin/curl -H "Content-Type: application/json" -X POST -d \'' .. Cmd .. '\' http://' .. LogAdmin .. ':' .. Mdp .. '@' .. IpAddr .. FonctionReqWiser
local config=assert(io.popen(Req))
voir_les_logs("Info Script ".. nom_script .. " : Start requete = " .. Req ,true)
end
end
if (RemoteCmd==IdxEquip) then
commandArray['Variable:RemoteCmdWiser']='0'
end
end
end
--Fonction calcule la différence de temps (en secondes) entre maintenant et la date passée en paramètre.
function timedifference (s)
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
--------------------------------------------
commandArray = {}
commandArray['Variable:' .. VarTempsCycle]= '600'
voir_les_logs("Info Script ".. nom_script .. " : " .. Desc_script .. " (v".. version ..") by MikeW",debugging)
if (uservariables["StepWiser"]==0) and (timedifference(otherdevices_lastupdate["Mode de chauffage"]) > TempsSansActivite * 60) then
-- Pour ajouter votre consigne wiser ajouter une ligne comme celles suvantent avec les nom de votre installation
-- ajoutez aussi une ligne avec votre configuration juste après "if (uservariables["StepWiser"]==1 and"
-- CmdCapteur("Nom de l'équipement dans Wiser", "ConsigneTemp", tostring(devicechanged["Nom de votre capteur virtuel dans Domoticz"]), "/rpc/hvac/set_loc_temp")
if tonumber(otherdevices_svalues["Batteries du Rad salle à manger"]:match("([^;]+)"))>0 then
CmdCapteur("Salle à manger", otherdevices_idx["Csg de la salle a manger"], "ConsigneTemp", tostring(devicechanged["Csg de la salle a manger"]), tostring(tonumber(string.format("%.2f",tostring(otherdevices_svalues["Csg de la salle a manger"])))), "/rpc/hvac/set_loc_temp")
end
if tonumber(otherdevices_svalues["Batteries du Rad du salon"]:match("([^;]+)"))>0 then
CmdCapteur("Salon", otherdevices_idx["Csg du salon"], "ConsigneTemp", tostring(devicechanged["Csg du salon"]), tostring(tonumber(string.format("%.2f",tostring(otherdevices_svalues["Csg du salon"])))), "/rpc/hvac/set_loc_temp")
end
if tonumber(otherdevices_svalues["Batteries du Rad du salon"]:match("([^;]+)"))>0 then
CmdCapteur("Buanderie", otherdevices_idx["Csg de la Buanderie"], "ConsigneTemp", tostring(devicechanged["Csg de la Buanderie"]), tostring(tonumber(string.format("%.2f",tostring(otherdevices_svalues["Csg de la Buanderie"])))), "/rpc/hvac/set_loc_temp")
end
-- CmdCapteur("Nom de l'équipement dans Wiser", "ConsigneTemp", tostring(devicechanged["Nom de votre capteur virtuel dans Domoticz"]), "/rpc/mode/set_home_mode")
CmdCapteur("", otherdevices_idx["Mode de chauffage"], "ModeChauffe", tostring(devicechanged["Mode de chauffage"]),tonumber(JoursDeVacances), "/rpc/mode/set_home_mode")
-- Sur un navigateur internet lancer "http://192.168.0.2/rpc/loadmanagement/get_appliances" (avec l'IP du votre Wiser) pour trouver les applianceId de vos équipements
-- CmdCapteur("applianceId", "PrisePilotée", tostring(devicechanged["Nom de votre capteur virtuel dans Domoticz"]), "/rpc/loadmanagement/set_appliance_state")
CmdCapteur("124b00042a2401-11", otherdevices_idx["Interrupteur Divers 1"], "PrisePilotée", tostring(devicechanged["Interrupteur Divers 1"]),0, "/rpc/loadmanagement/set_appliance_state")
CmdCapteur("124b00011fbf67-11", otherdevices_idx["Interrupteur Divers 2"], "PrisePilotée", tostring(devicechanged["Interrupteur Divers 2"]),0, "/rpc/loadmanagement/set_appliance_state")
end
-- Test lecture en cours pour éviter larsen informatique
-- Ajoutez votre équipement à cette liste
if (uservariables["StepWiser"]==1 and
(timedifference(otherdevices_lastupdate["Csg du salon"]) > TempoApresLecWiser) and
(timedifference(otherdevices_lastupdate["Csg de la Buanderie"]) > TempoApresLecWiser) and
(timedifference(otherdevices_lastupdate["Interrupteur Divers 1"]) > TempoApresLecWiser) and
(timedifference(otherdevices_lastupdate["Interrupteur Divers 2"]) > TempoApresLecWiser) and
(timedifference(otherdevices_lastupdate["Mode de chauffage"]) > TempoApresLecWiser)
) then
commandArray['Variable:StepWiser']='0'
end
-- Initialisation des commandes Wiser en cas de blockage des commandes Manu, ajoutez -> commandArray['Variable:RemoteCmdWiser']="-1", dans votre script pour initialiser les commandes Wiser
if (RemoteCmd==-1) and
(otherdevices["Interrupteur Divers 1"]=="Off") and -- On controle les interrupteurs car Wiser initilise les inters pendant son initialisation, si un inter est à on wiser va le mettre à off
(otherdevices["Interrupteur Divers 2"]=="Off") then
commandArray['Variable:RemoteCmdWiser']=tostring(otherdevices_idx['Mode de chauffage'])
end
-- Selection du nombre de jours de vacances par un capteur virtuel Inter Sellecteur Off; 1 Jour; 2 Jours ext ...
if tostring(devicechanged['Jours de vacances'])~="Off" and tostring(devicechanged['Jours de vacances'])~="nil" then
JoursDeVacances = tostring(string.format("%.0f",string.gsub(otherdevices['Jours de vacances'], "%D", "")))
CmdCapteur("", otherdevices_idx["Mode de chauffage"], "ModeChauffe", "Vacances",tonumber(JoursDeVacances), "/rpc/mode/set_home_mode")
end
if (tostring(devicechanged['Jours de vacances'])=="Off") and tostring(otherdevices['Mode de chauffage'])~="Program"then
CmdCapteur("", otherdevices_idx["Mode de chauffage"], "ModeChauffe", "Program",0, "/rpc/mode/set_home_mode")
end
commandArray['Variable:' .. VarTempsCycle]=tostring(timedifference(tostring(uservariables_lastupdate[VarTempsCycle])))
return commandArrayCode : Tout sélectionner
-- Attention sur cette version nous utilisons l'état des Batteries pour savoir si nous pouvons intéroger certains capteurs avec Batteries (vannes thermostatiques). L'état des batteries est mis à jour par Wiser une à deux fois par jour
---------------------------------------
---------- Variables publics ----------
---------------------------------------
-- Dans un premier temps veuillez créer ces variables utilisateurs pour les besoin système
-- Réglage/Plus d'option/Variable utilisateur = "StepWiser" de type entier
-- Réglage/Plus d'option/Variable utilisateur = "Cycle_CmdAuto" de type entier
-- Réglage/Plus d'option/Variable utilisateur = "CycleTime001" de type Chaîne
---------------------------------------
------------ Configuration ------------
---------------------------------------
local nom_script = "MajCapteursWiser" -- Scipt LUA de type Time cycle de 1 minute
local Desc_script = "Récupération des données Wiser"
local version = "3.01"
local debugging = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local MajCycle = false -- true pour une mise à jour des capteurs à chaque tour de cycle ou false pour une mise à jour sur exception
local IpAddr = "192.168.0.2" -- Adresse IP du Wiser
local LogAdmin = "admin" -- Login installateur Wiser
local Mdp = "admin" -- Mot de passe installateur Wiser
local system = "Synology" -- Systeme d'exploitation sur lequel est éxécuté ce script : linux, windows, synology pour le chemin vers JSON.LUA
local BpModeEco = "Mode de chauffage" -- Nom de votre capteur virtuel mode de chauffe wiser, Indiquez ici le nom du capteur virtuel Mode de chauffe
local IndexJson = 1 -- Index de réponse des requetes HTTP en Json
local TempsMajCapteur = 5 -- Temps de mise à jour des mesures en minutes : exemple les mesures de températures wiser sont maj par le Wiser tout les 5 minutes
local VarTempsCycle = "Cycle_" .. nom_script -- Facultatif : Variable pour la mesure de temps de cycle du script
-- Liste des requêtes disponibles Wiser -- /rpc/hvac/get_all_loc_temp | Wiser -> Liste des équipements de température
-- /rpc/homedevice/device_list | Wiser -> Lecture des de tout les équipements
-- /rpc/loadmanagement/get_appliances | Wiser -> Liste des équipements Interupteur
-- /rpc/mode/get_home_mode | Wiser -> Lecture du mode de chauffe en cours
-- Sur un navigateur internet lancez -> "http://192.168.0.2/rpc/hvac/get_all_loc_temp" (avec l'IP du votre Wiser) pour trouver les IndexJson températures de vos pièces
-- retour en Json
-- Exemple : {"hcMode":"manual","locationTempDetails":[
--{"locationId":"Cuisine",
--"locationName":"Cuisine",
--"unit":"C",
-- Votre pièce dite Cuisine est donc le premier IndexBlock = 1 et ainsi suite
-- idème pour la Fonction "http://192.168.0.2/rpc/homedevice/device_list" qui vous donne votre liste d'équipements installés
-- ou bien "http://192.168.0.2/rpc/loadmanagement/get_appliances" qui vous donne votre liste des Interrupteurs
-- Attention quand vous ajoutez des nouveaux équipements, il est possible que votre Wiser reclasse vos équipements, l'ordre de vos équipements peut bouger. Contrôler l'ordre après votre ajout.
--------------------------------------------
if system == "Windows" then
json = (loadfile "c:\\Domoticz\\scripts\\lua\\json.lua")() -- Pour Windows
elseif system == "Synology" then
json = (loadfile "/volume1/@appstore/domoticz/var/scripts/lua/JSON.lua")() -- Pour Synology
else
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- Pour Linux
end
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
-- Fonction des log
function voir_les_logs (s, debugging)
if (debugging) then
if s ~= nil then
print ("<font color='#01CC43'>".. s .."</font>")
else
print ("<font color='#f3031d'>aucune valeur affichable</font>")
end
end
end
-- Fonction de mise à jour des données Wiser
function MajCapteur(IndexBlock, Capteur001, Capteur002, Type, Name, Valeur001, UnitCapteur001, Valeur002, UnitCapteur002)
if (Type == "PrisePilotée") then
ModeInter = "Off"
if (Valeur001 == "true") then
ModeInter="On"
end
voir_les_logs("Info Script ".. nom_script .. " : Lecture BlocJson Wiser " .. Type .. " : Num " .. IndexBlock .. ", " .. Name .. "| " .. Type .. " = " .. ModeInter ,debugging)
if (otherdevices[Capteur001]~=ModeInter) then
voir_les_logs("Info Script ".. nom_script .. " : Ecriture " .. Capteur001 .." = " .. tostring(ModeInter),debugging)
commandArray[Capteur001]=ModeInter
commandArray['Variable:StepWiser']='1'
end
else
if (UnitCapteur002 ~= "") then
if (Capteur001~="") then
voir_les_logs("Info Script ".. nom_script .. " : Lecture BlocJson Wiser : Num " .. IndexBlock .. ", " .. Name .. "| " .. Type .. " = " .. Valeur001 .. UnitCapteur001 .. " / " .. Valeur002 .. UnitCapteur002 ,debugging)
update(Type, Capteur001,Valeur001,Valeur002,UnitCapteur001,UnitCapteur002)
end
if (Capteur002~="") then
update(Type .. "2", Capteur002,Valeur001,Valeur002,UnitCapteur001,UnitCapteur002)
end
else
if (Capteur001~="") then
voir_les_logs("Info Script ".. nom_script .. " : Lecture BlocJson Wiser : Num " .. IndexBlock .. ", " .. Name .. "| " .. Type .. " = " .. Valeur001 .. " " .. UnitCapteur001 ,debugging)
update(Type, Capteur001,Valeur001,0,UnitCapteur001,UnitCapteur002)
end
if (Capteur002~="") then
update(Type .. "2", Capteur002,Valeur001,0,UnitCapteur001,UnitCapteur002)
end
end
end
end
-- Fonctions tabeau de commandes de domoticz pour Wiser
function update(Type, dev, value1, value2, Unit1 , Unit2)
local Val1, Val2 = otherdevices_svalues[dev]:match("([^;]+);([^;]+)")
if tostring(Val1)=="nil" then
Val1=tonumber(otherdevices_svalues[dev])
end
if (Unit2 =="") then
if ( ( tonumber(tostring(string.format("%.1f",tostring(Val1)))) ~= tonumber(tostring(string.format("%.1f",tostring(value1)))) )
or MajCycle) then
commandArray['Variable:StepWiser']='1'
voir_les_logs("Info Script ".. nom_script .. " : Ecriture sur le block " .. Type .. " " .. string.format("%.1f",tostring(Val1)) .. Unit1 .. " : " .. dev .. " = Val1 <- ".. tostring(string.format("%.1f",tostring(value1))) .. Unit1 .. " BolckJson N" .. tostring(IndexJson) ,debugging)
local cmd = tostring(otherdevices_idx[dev] .. '|0|'.. tostring(string.format("%.1f",tostring(value1))) ..';'.. tostring(string.format("%.1f",tostring(value2))) ..';'.. '1')
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
end
else
if ( ( tonumber(tostring(string.format("%.1f",tostring(Val1)))) ~= tonumber(tostring(string.format("%.1f",tostring(value1)))) ) or
( tonumber(tostring(string.format("%.1f",tostring(Val2)))) ~= tonumber(tostring(string.format("%.1f",tostring(value2)))) )
or MajCycle) then
commandArray['Variable:StepWiser']='1'
voir_les_logs("Info Script ".. nom_script .. " : Ecriture sur le block " .. Type .. " " .. string.format("%.1f",tostring(Val1)) .. Unit1 .. " ; " .. string.format("%.1f",tostring(Val2)) .. Unit2 .. " : " .. dev .. " = Val1 <- ".. tostring(string.format("%.1f",tostring(value1))) .. Unit1 .. " = Val2 <- ".. tostring(string.format("%.1f",tostring(value2))) .. Unit2 .. " BolckJson N" .. tostring(IndexJson) ,debugging)
local cmd = tostring(otherdevices_idx[dev] .. '|0|'.. tostring(string.format("%.1f",tostring(value1))) ..';'.. tostring(string.format("%.1f",tostring(value2))) ..';'.. '1')
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
end
end
end
-- Fonction construction de la requête HTTP
function RequeteHTTP(FonctionReqWiser)
local Req = '/usr/bin/curl http://' .. LogAdmin .. ':' .. Mdp .. '@' .. IpAddr .. FonctionReqWiser
voir_les_logs("Info Script ".. nom_script .. " : Start requete = " .. Req,debugging)
return Req
end
--Fonction calcule la différence de temps (en secondes) entre maintenant et la date passée en paramètre.
function timedifference (s)
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
--------------------------------------------
voir_les_logs("Info Script ".. nom_script .. " : " .. Desc_script .. " (v".. version ..") by MikeW",debugging)
commandArray = {}
commandArray['Variable:' .. VarTempsCycle]= '600'
-- Test de mise à jour sous conditions
if (timedifference(tostring(uservariables_lastupdate['CycleTime001'])) > TempsMajCapteur *60) or MajCycle then
voir_les_logs("Info Script ".. nom_script .. " : Lecture des données de températures Wiser, derniére lecture il y à " .. timedifference(tostring(uservariables_lastupdate['CycleTime001'])) .. " Sec" ,debugging)
----------------------Niveaux de Batteries---------------------------------
local config=assert(io.popen(RequeteHTTP("/rpc/homedevice/device_list")))
local blocjson = config:read('*all')
config:close()
local jsonValeur = json:decode(blocjson)
-- Pour ajouter votre consigne "vanne thermostatiques" wiser ajouter une ligne comme celles suvantes avec les noms de votre installation
-- MajCapteur(IndexJson, "Nom de votre 1er capteur virtuel", "Nom de votre 2eme capteur virtuel", "Batteries", tostring(jsonValeur.device[IndexJson].name),tostring(((tonumber(jsonValeur.device[IndexJson].batteryLevel) +1)*100)/7),"%", 0,"")
IndexJson = 2
MajCapteur(IndexJson, "Batteries du Rad de la cuisine", "", "Batteries", tostring(jsonValeur.device[IndexJson].name),tostring(((tonumber(jsonValeur.device[IndexJson].batteryLevel) +1)*100)/7),"%", 0,"")
IndexJson = IndexJson + 1
MajCapteur(IndexJson, "Batteries du Rad 001", "", "Batteries", tostring(jsonValeur.device[IndexJson].name),tostring(((tonumber(jsonValeur.device[IndexJson].batteryLevel) +1)*100)/7),"%", 0,"")
IndexJson = IndexJson + 1
MajCapteur(IndexJson, "Batteries du Rad 002", "", "Batteries", tostring(jsonValeur.device[IndexJson].name),tostring(((tonumber(jsonValeur.device[IndexJson].batteryLevel) +1)*100)/7),"%", 0,"")
IndexJson = IndexJson + 1
MajCapteur(IndexJson, "Batteries du Rad 003", "", "Batteries", tostring(jsonValeur.device[IndexJson].name),tostring(((tonumber(jsonValeur.device[IndexJson].batteryLevel) +1)*100)/7),"%", 0,"")
IndexJson = IndexJson + 1
MajCapteur(IndexJson, "Batteries du Rad du salon", "", "Batteries", tostring(jsonValeur.device[IndexJson].name),tostring(((tonumber(jsonValeur.device[IndexJson].batteryLevel) +1)*100)/7),"%", 0,"")
IndexJson = IndexJson + 1
MajCapteur(IndexJson, "Batteries du Rad de la buanderie", "", "Batteries", tostring(jsonValeur.device[IndexJson].name),tostring(((tonumber(jsonValeur.device[IndexJson].batteryLevel) +1)*100)/7),"%", 0,"")
IndexJson = IndexJson + 1
MajCapteur(IndexJson, "Batteries du Bouton mode eco", "", "Batteries", tostring(jsonValeur.device[IndexJson].name),tostring(((tonumber(jsonValeur.device[IndexJson].batteryLevel) +1)*100)/7),"%", 0,"")
-------------------------------Mesures Wiser------------------------------------
local config=assert(io.popen(RequeteHTTP("/rpc/hvac/get_all_loc_temp")))
local blocjson = config:read('*all')
config:close()
local jsonValeur = json:decode(blocjson)
-- Pour ajouter votre mesure sur "vanne thermostatiques" wiser ajouter une ligne comme celles suvantes avec les noms de votre installation
-- MajCapteur(IndexJson, "Nom de votre 1er capteur virtuel", "Nom de votre 2eme capteur virtuel", "Mesure et Vanne", tostring(jsonValeur.locationTempDetails[IndexJson].locationName),jsonValeur.locationTempDetails[IndexJson].currentValue,"°C", jsonValeur.locationTempDetails[IndexJson].valve[1].valvePosition,"%")
IndexJson = 1
if tonumber(otherdevices_svalues["Batteries du Rad du salon"]:match("([^;]+)"))>0 then
MajCapteur(IndexJson, "T du salon / Vanne", "", "Mesure et Vanne", tostring(jsonValeur.locationTempDetails[IndexJson].locationName),jsonValeur.locationTempDetails[IndexJson].currentValue,"°C", jsonValeur.locationTempDetails[IndexJson].valve[1].valvePosition,"%")
end
IndexJson = IndexJson + 1
if tonumber(otherdevices_svalues["Batteries du Rad de la buanderie"]:match("([^;]+)"))>0 then
MajCapteur(IndexJson, "T de la Buanderie / Vanne", "", "Mesure et Vanne", tostring(jsonValeur.locationTempDetails[IndexJson].locationName),jsonValeur.locationTempDetails[IndexJson].currentValue,"°C", jsonValeur.locationTempDetails[IndexJson].valve[1].valvePosition,"%")
end
IndexJson = IndexJson + 1
if tonumber(otherdevices_svalues["Batteries du Rad de l entrée"]:match("([^;]+)"))>0 then
MajCapteur(IndexJson, "T de l entree / Vanne", "", "Mesure et Vanne", tostring(jsonValeur.locationTempDetails[IndexJson].locationName),jsonValeur.locationTempDetails[IndexJson].currentValue,"°C", jsonValeur.locationTempDetails[IndexJson].valve[1].valvePosition,"%")
end
IndexJson = IndexJson + 1
if tonumber(otherdevices_svalues["Batteries du Rad de la cuisine"]:match("([^;]+)"))>0 then
MajCapteur(IndexJson, "T de la cuisine / Vanne", "", "Mesure et Vanne", tostring(jsonValeur.locationTempDetails[IndexJson].locationName),jsonValeur.locationTempDetails[IndexJson].currentValue,"°C", jsonValeur.locationTempDetails[IndexJson].valve[1].valvePosition,"%")
end
-----------------------------Consignes Wiser------------------------------------
-- Pour ajouter votre consigne wiser ajouter une ligne comme celles suvantes avec les noms de votre installation
-- MajCapteur(IndexJson, "Nom de votre 1er capteur virtuel", "Nom de votre 2eme capteur virtuel", "Consigne", tostring(jsonValeur.locationTempDetails[IndexJson].locationName),jsonValeur.locationTempDetails[IndexJson].targetValue,"°C", 0,"")
IndexJson = 1
MajCapteur(IndexJson, "CT du salon", "Csg du salon", "Consigne", tostring(jsonValeur.locationTempDetails[IndexJson].locationName),jsonValeur.locationTempDetails[IndexJson].targetValue,"°C", 0,"")
IndexJson = IndexJson + 1
MajCapteur(IndexJson, "CT de la Buanderie", "Csg de la Buanderie", "Consigne", tostring(jsonValeur.locationTempDetails[IndexJson].locationName),jsonValeur.locationTempDetails[IndexJson].targetValue,"°C", 0,"")
IndexJson = IndexJson + 1
MajCapteur(IndexJson, "CT de la cuisine", "Csg de la cuisine", "Consigne", tostring(jsonValeur.locationTempDetails[IndexJson].locationName),jsonValeur.locationTempDetails[IndexJson].targetValue,"°C", 0,"")
--------------------------------------------------------------------------------
-- Fin de mise à jour sous conditions
commandArray['Variable:CycleTime001'] = tostring(os.date('%Y-%m-%d %H:%M:%S'))
end
-- Mise à jour toutes les minutes
----------------------Etats interrupteurs Wiser---------------------------------
local config=assert(io.popen(RequeteHTTP("/rpc/loadmanagement/get_appliances")))
local blocjson = config:read('*all')
config:close()
local jsonValeur = json:decode(blocjson)
-- Pour ajouter l'état de votre "interrupteur" wiser ajouter une ligne comme celles suvantes avec les noms de votre installation
-- MajCapteur(IndexJson, "Nom de votre 1er capteur virtuel", "Nom de votre 2eme capteur virtuel", "PrisePilotée", tostring(jsonValeur.applianceDetails[IndexJson].locationName),tostring(jsonValeur.applianceDetails[IndexJson].state),"", 0,"")
IndexJson = 1
MajCapteur(IndexJson, "Interrupteur Divers 1", "", "PrisePilotée", tostring(jsonValeur.applianceDetails[IndexJson].locationName),tostring(jsonValeur.applianceDetails[IndexJson].state),"", 0,"")
IndexJson = IndexJson + 1
MajCapteur(IndexJson, "Interrupteur Divers 2", "", "PrisePilotée", tostring(jsonValeur.applianceDetails[IndexJson].locationName),tostring(jsonValeur.applianceDetails[IndexJson].state),"", 0,"")
IndexJson = 1
MajCapteur(IndexJson, "P Interrupteur Divers 1", "", "PuissancePrise", tostring(jsonValeur.applianceDetails[IndexJson].locationName),tostring(jsonValeur.applianceDetails[IndexJson].powerConsump),"W", 0,"")
IndexJson = IndexJson + 1
MajCapteur(IndexJson, "P Interrupteur Divers 2", "", "PuissancePrise", tostring(jsonValeur.applianceDetails[IndexJson].locationName),tostring(jsonValeur.applianceDetails[IndexJson].powerConsump),"W", 0,"")
----------------------Mode de chauffege Wiser-----------------------------------
local config=assert(io.popen(RequeteHTTP("/rpc/mode/get_home_mode")))
local blocjson = config:read('*all')
config:close()
local jsonValeur = json:decode(blocjson)
voir_les_logs("Info Script ".. nom_script .. " : Lecture du mode de chauffe Wiser : Mode = ".. jsonValeur.homeMode ,debugging)
RHomeMode = 'Set Level: 0'
CHomeMode = "Off"
if (tostring(jsonValeur.homeMode) == "schedule") then
RHomeMode='Set Level: 20'
CHomeMode = "Program"
end
if (tostring(jsonValeur.homeMode) == "holiday") then
RHomeMode='Set Level: 30'
CHomeMode = "Vacances"
end
if (tostring(jsonValeur.homeMode) == "manual") then
RHomeMode='Set Level: 10'
CHomeMode = "Manuel"
end
if (otherdevices[BpModeEco]~=CHomeMode) then
commandArray['Variable:StepWiser']='1'
voir_les_logs("Info Script ".. nom_script .. " : Ecriture du mode = " .. RHomeMode,debugging)
commandArray[BpModeEco]=RHomeMode
if CHomeMode ~= "Vacances" then
commandArray['Jours de vacances']="Off"
commandArray['Simulation']='Set Level: 0'
else
commandArray['Simulation']='Set Level: 10'
end
end
--------------------------------------------------------------------------------
commandArray['Variable:' .. VarTempsCycle]=tostring(timedifference(tostring(uservariables_lastupdate[VarTempsCycle])))
return commandArrayCode : Tout sélectionner
-- Mesure de l'écart de température de nuit
if (tonumber(os.date('%H'))<3) then
commandArray['Variable:EcartTempNuit']='0'
elseif (uservariables["EcartTempNuit"]==0) then
commandArray['Variable:EcartTempNuit']= tostring(tonumber(uservariables["TempNuitDerniere"])- tonumber(string.format("%.2f",otherdevices_temperature['Température extérieur'])))
commandArray['Variable:TempNuitDerniere']= tostring(tonumber(string.format("%.2f",otherdevices_temperature['Température extérieur'])))
endCode : Tout sélectionner
---------------------------------------
---------- Variables publics ----------
---------------------------------------
-- Dans un premier temps veuillez créer ces variables utilisateurs pour les besoin système
-- Réglage/Plus d'option/Variable utilisateur = "Cycle_CmdAuto" de type entier
-- Réglage/Plus d'option/Variable utilisateur = "RemoteCmdWiser" de type entier
-- Réglage/Plus d'option/Variable utilisateur = "TempNuitDerniere" de type decimal
-- Réglage/Plus d'option/Variable utilisateur = "EcartTempNuit" de type decimal
---------------------------------------
------------ Configuration ------------
---------------------------------------
local nom_script = "CmdAuto" -- Scipt LUA de type Device
local Desc_script = "Commandes Auto Domoticz"
local version = "1.40"
local debugging = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local JoursDeVacances = 2 -- Jours de vacances pour le passage du mode vacances
local TempMode3Pers = tostring(otherdevices_temperature["CT de la Buanderie"]) -- Température des pièces sans présences
local TempNormal = tostring(otherdevices_temperature["CT de la suite parentale"]) -- Température de retour à la normal après mode personnes
local TempsSansActivite = 15 -- Temps sans activité des équipements
local VarTempsCycle = "Cycle_" .. nom_script -- Variable pour la mesure de temps de cycle du script
local EcartTempNuit = 3 -- Ecrat de température pour le mode boost en °C
local HeureBoost = 1 -- Temps de boost pour les écarts de températures de la nuit 1h 2h ou 3h
local leverSoleil = string.sub(os.date("!%X",60*timeofday['SunriseInMinutes']), 1, 5) -- retourne l'heure du lever de soleil ex: "06:41"
local coucherSoleil = string.sub(os.date("!%X",60*timeofday['SunsetInMinutes']), 1, 5) -- retourne l'heure du coucher de soleil ex: "22:15"
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
-- Fonction des log
function voir_les_logs (s, debugging)
if (debugging) then
if s ~= nil then
print ("<font color='#0280e9'>".. s .."</font>")
else
print ("<font color='#f3031d'>aucune valeur affichable</font>")
end
end
end
--Fonction calcule la différence de temps (en secondes) entre maintenant et la date passée en paramètre.
function timedifference (s)
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
-- Commandes sur capteurs
function update(Type, dev, value1, value2, Unit)
voir_les_logs("Info Script ".. nom_script .. " : Ecriture sur le block type Consigne : " .. dev .. " = ValTemp <- ".. value1 .. Unit ,true)
local cmd = tostring(otherdevices_idx[dev] .. '|0|'.. value1)
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
end
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
--------------------------------------------
commandArray = {}
commandArray['Variable:' .. VarTempsCycle]= '600'
voir_les_logs("Info Script ".. nom_script .. " : " .. Desc_script .. " (v".. version ..") by MikeW",debugging)
-- Selection du mode de présence 2 ou 3 ou 6 personnes
if (timedifference(otherdevices_lastupdate['Nombre de personnes']) > 10 * 60) and (timedifference(otherdevices_lastupdate["Mode de chauffage"]) > TempsSansActivite * 60) then
if (timedifference(otherdevices_lastupdate['Nombre de personnes']) < 12 * 60) then
commandArray['Variable:RemoteCmdWiser']="-1"
end
if (tostring(otherdevices['Nombre de personnes'])=="3 personnes") or (tostring(otherdevices['Nombre de personnes'])=="2 personnes") then
if (tostring(tonumber(string.format("%.2f",tostring(string.gsub(otherdevices_svalues["Csg de la chamb 001"], "%a", ""))))) ~=tostring(tonumber(string.format("%.2f",tostring(TempMode3Pers))))) and tonumber(otherdevices_svalues["Batteries du Rad de 001"]:match("([^;]+)"))>0 then
voir_les_logs("Info Script ".. nom_script .. " : Ecriture sur le block type Consigne : Csg de la chamb 001" .. " = ValTemp <- ".. TempMode3Pers .. "°C" ,true)
local cmd = tostring('18|0|'.. string.format("%.2f",tostring(TempMode3Pers)))
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
commandArray['Variable:RemoteCmdWiser']=tostring(otherdevices_idx['Csg de la chamb 001'])
end
if (tostring(string.format("%.2f",tostring(string.gsub(otherdevices_svalues["Csg de la chamb 003"], "%a", ""))))~=tostring(string.format("%.2f",tostring(TempMode3Pers)))) and tonumber(otherdevices_svalues["Batteries du Rad d Inès et Loo"]:match("([^;]+)"))>0 then
voir_les_logs("Info Script ".. nom_script .. " : Ecriture sur le block type Consigne : Csg de la chamb 003" .. " = ValTemp <- ".. TempMode3Pers .. "°C" ,true)
local cmd = tostring('16|0|'.. string.format("%.2f",tostring(TempMode3Pers)))
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
commandArray['Variable:RemoteCmdWiser']=tostring(otherdevices_idx['Csg de la chamb 003'])
end
end
if (tostring(otherdevices['Nombre de personnes'])=="2 personnes") then
if (tostring(string.format("%.2f",tostring(string.gsub(otherdevices_svalues["Csg de la chamb 002"], "%a", "")))) ~=tostring(string.format("%.2f",tostring(TempMode3Pers)))) and tonumber(otherdevices_svalues["Batteries du Rad de 002"]:match("([^;]+)"))>0 then
voir_les_logs("Info Script ".. nom_script .. " : Ecriture sur le block type Consigne : Csg de la chamb 002" .. " = ValTemp <- ".. TempMode3Pers .. "°C" ,true)
local cmd = tostring('17|0|'.. string.format("%.2f",tostring(TempMode3Pers)))
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
commandArray['Variable:RemoteCmdWiser']=tostring(otherdevices_idx['Csg de la chamb 002'])
end
end
if (tostring(otherdevices['Nombre de personnes'])=="6 personnes") and ((timedifference(otherdevices_lastupdate['Nombre de personnes']) < 60 * 60)) then
if (tonumber(string.format("%.2f",tostring(string.gsub(otherdevices_svalues["Csg de la chamb 001"], "%a", "")))) ~=tonumber(string.format("%.2f",tostring(TempNormal)))) and tonumber(otherdevices_svalues["Batteries du Rad de 001"]:match("([^;]+)"))>0 then
voir_les_logs("Info Script ".. nom_script .. " : Ecriture sur le block type Consigne : Csg de la chamb 001" .. " = ValTemp <- ".. TempNormal .. "°C" ,true)
local cmd = tostring('18|0|'.. string.format("%.2f",tostring(TempNormal)))
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
commandArray['Variable:RemoteCmdWiser']=tostring(otherdevices_idx['Csg de la chamb 001'])
end
if (tonumber(string.format("%.2f",tostring(string.gsub(otherdevices_svalues["Csg de la chamb 003"], "%a", ""))))~=tonumber(string.format("%.2f",tostring(TempNormal)))) and tonumber(otherdevices_svalues["Batteries du Rad d Inès et Loo"]:match("([^;]+)"))>0 then
voir_les_logs("Info Script ".. nom_script .. " : Ecriture sur le block type Consigne : Csg de la chamb 003" .. " = ValTemp <- ".. TempNormal .. "°C" ,true)
local cmd = tostring('16|0|'.. string.format("%.2f",tostring(TempNormal)))
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
commandArray['Variable:RemoteCmdWiser']=tostring(otherdevices_idx['Csg de la chamb 003'])
end
end
if ((tostring(otherdevices['Nombre de personnes'])=="6 personnes") or (tostring(otherdevices['Nombre de personnes'])=="3 personnes")) and ((timedifference(otherdevices_lastupdate['Nombre de personnes']) < 60 * 60)) then
if (tonumber(string.format("%.2f",tostring(string.gsub(otherdevices_svalues["Csg de la chamb 002"], "%a", "")))) ~=tonumber(string.format("%.2f",tostring(TempNormal)))) and tonumber(otherdevices_svalues["Batteries du Rad de 002"]:match("([^;]+)"))>0 then
voir_les_logs("Info Script ".. nom_script .. " : Ecriture sur le block type Consigne : Csg de la chamb 002" .. " = ValTemp <- ".. TempNormal .. "°C" ,true)
local cmd = tostring('17|0|'.. string.format("%.2f",tostring(TempNormal)))
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
commandArray['Variable:RemoteCmdWiser']=tostring(otherdevices_idx['Csg de la chamb 002'])
end
end
end
-- Surveillance des non utilisations des prises pilotées pour l'économie d'énergie
Equip001 = 'Interrupteur Divers 1'
if (timedifference(otherdevices_lastupdate['P ' .. Equip001]) > TempsSansActivite * 60) and tonumber(string.format("%.1f",string.gsub(string.sub(tostring(otherdevices['P '.. Equip001]), 1, 3),";",".")))>0 and tonumber(string.format("%.1f",string.gsub(string.sub(tostring(otherdevices['P '.. Equip001]), 1, 3),";",".")))<10 and otherdevices[Equip001]~="Off" then
commandArray[Equip001]="Off"
voir_les_logs("Info Script ".. nom_script .. " : Ecriture sur le block type Interrupteur : Arrêt de " .. Equip001 .. ", sur détection d'inactivité" ,true)
end
Equip001 = 'Inter TV'
if (timedifference(otherdevices_lastupdate['P ' .. Equip001]) > TempsSansActivite * 60) and tonumber(string.format("%.1f",string.gsub(string.sub(tostring(otherdevices['P '.. Equip001]), 1, 3),";",".")))>0 and tonumber(string.format("%.1f",string.gsub(string.sub(tostring(otherdevices['P '.. Equip001]), 1, 3),";",".")))<40 and otherdevices[Equip001]~="Off" then
commandArray[Equip001]="Off"
voir_les_logs("Info Script ".. nom_script .. " : Ecriture sur le block type Interrupteur : Arrêt de " .. Equip001 .. ", sur détection d'inactivité" ,true)
end
Equip001 = 'Interrupteur Divers 2'
if (timedifference(otherdevices_lastupdate['P ' .. Equip001]) > TempsSansActivite * 60) and tonumber(string.format("%.1f",string.gsub(string.sub(tostring(otherdevices['P '.. Equip001]), 1, 3),";",".")))>0 and tonumber(string.format("%.1f",string.gsub(string.sub(tostring(otherdevices['P '.. Equip001]), 1, 3),";",".")))<2 and otherdevices[Equip001]~="Off" then
commandArray[Equip001]="Off"
voir_les_logs("Info Script ".. nom_script .. " : Ecriture sur le block type Interrupteur : Arrêt de " .. Equip001 .. ", sur détection d'inactivité" ,true)
end
-- Gestion du mode Boost
local TempBoost = 22
if (tostring(otherdevices['Boost chauffage'])~="Off") then
if (timedifference(otherdevices_lastupdate['Boost chauffage']) > string.format("%.0f",string.gsub(otherdevices['Boost chauffage'], "%D", "")) * 60 * 60) then
commandArray['Boost chauffage']='Set Level: 0'
commandArray['Variable:RemoteCmdWiser']="-1"
else
if (string.format("%.2f",tostring(otherdevices["Csg du salon"]))~=string.format("%.2f",tostring(TempBoost))) then
update('','Csg du salon',string.format("%.2f",tostring(TempBoost)),'','°C')
end
if (string.format("%.2f",tostring(otherdevices["Csg de la cuisine"])) ~=string.format("%.2f",tostring(TempBoost))) then
update('','Csg de la cuisine',string.format("%.2f",tostring(TempBoost)),'','°C')
end
end
end
if (uservariables["EcartTempNuit"]>=EcartTempNuit and
tonumber(string.format("%.2f",otherdevices_temperature['Température extérieur']))<1) and
tonumber(os.date('%H'))<5
then
commandArray['Boost chauffage']='Set Level: ' .. HeureBoost .. '0'
end
-- Gestion du mode simulation
local ActionneurSimul001 = 'Interrupteur Divers 1'
local ActionneurSimul002 = 'Interrupteur Divers 2'
local CmdSimul001 = ""
local CmdSimul002 = ""
if (otherdevices['Simulation']=='présence') then
if (timeofday['Nighttime']) then
if ((tonumber(os.date('%M')) == 20) or (tonumber(os.date('%M')) == 39) or (tonumber(os.date('%M')) == 58)) and (tonumber(os.date('%S')) > 40) and
(tonumber(os.date('%H'))>5 and tonumber(os.date('%H'))<23) then
local NbAction = math.random(5)
if (NbAction == 1) then
CmdSimul001="On"
CmdSimul002="On"
end
if (NbAction == 2) or (NbAction == 4) then
CmdSimul001="On"
CmdSimul002="Off"
end
end
else
CmdSimul001="Off"
CmdSimul002="Off"
end
else
if (timedifference(otherdevices_lastupdate['Simulation']) < 2 * 60) then
CmdSimul001="Off"
CmdSimul002="Off"
end
end
if (timedifference(otherdevices_lastupdate['Simulation']) < 5 * 60) or (otherdevices['Simulation']=='présence') then
if (otherdevices[ActionneurSimul001]~=CmdSimul001) and CmdSimul001~="" then
commandArray[ActionneurSimul001]=CmdSimul001
end
if (otherdevices[ActionneurSimul002]~=CmdSimul002) and CmdSimul002~="" then
commandArray[ActionneurSimul002]=CmdSimul002
end
end
commandArray['Variable:' .. VarTempsCycle]=tostring(timedifference(tostring(uservariables_lastupdate[VarTempsCycle])))
return commandArrayCode : Tout sélectionner
---------------------------------------
---------- Variables publics ----------
---------------------------------------
-- Dans un premier temps veuillez créer ces variables utilisateurs pour les besoin système
-- Réglage/Plus d'option/Variable utilisateur = "Cycle_CmdManu" de type entier
---------------------------------------
------------ Configuration ------------
---------------------------------------
local nom_script = "CmdManu" -- Scipt LUA de type Time
local Desc_script = "Commandes Manu groupées Domoticz"
local version = "1.00"
local debugging = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local JoursDeVacances = 2 -- Jours de vacances pour le passage du mode vacances
local TempsSansActivite = 60 -- Temps sans activité des équipements
local VarTempsCycle = "Cycle_" .. nom_script -- Facultatif : Variable pour la mesure de temps de cycle du script
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
-- Fonction des log
function voir_les_logs (s, debugging)
if (debugging) then
if s ~= nil then
print ("<font color='#0280e9'>".. s .."</font>")
else
print ("<font color='#f3031d'>aucune valeur affichable</font>")
end
end
end
--Fonction calcule la différence de temps (en secondes) entre maintenant et la date passée en paramètre.
function timedifference (s)
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
-- Commandes sur capteurs
function update(Type, dev, value1, value2, Unit)
voir_les_logs("Info Script ".. nom_script .. " : Ecriture sur le block type Consigne : " .. dev .. " = ValTemp <- ".. value1 .. Unit ,true)
local cmd = tostring(otherdevices_idx[dev] .. '|0|'.. value1)
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
end
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
--------------------------------------------
commandArray = {}
commandArray['Variable:' .. VarTempsCycle]= '600'
voir_les_logs("Info Script ".. nom_script .. " : " .. Desc_script .. " (v".. version ..") by MikeW",debugging)
-- Selection du mode manu RDC
if (tostring(otherdevices['Mode Manu RDC'])~="Off") and (tostring(otherdevices['Boost chauffage'])=="Off") then
if (timedifference(otherdevices_lastupdate['Mode Manu RDC']) > TempsSansActivite * 60) then
commandArray['Mode Manu RDC']='Set Level: 0'
else
local TempManu = string.format("%.2f",string.sub(tostring(otherdevices['Mode Manu RDC']), 5, 7))
if (string.format("%.2f",tostring(otherdevices["Csg du salon"]))~=string.format("%.2f",tostring(TempManu))) then
update('','Csg du salon',string.format("%.2f",tostring(TempManu)),'','°C')
end
if (string.format("%.2f",tostring(otherdevices["Csg de la cuisine"])) ~=string.format("%.2f",tostring(TempManu))) then
update('','Csg de la cuisine',string.format("%.2f",tostring(TempManu)),'','°C')
end
end
end
commandArray['Variable:' .. VarTempsCycle]=tostring(timedifference(tostring(uservariables_lastupdate[VarTempsCycle])))
return commandArrayCode : Tout sélectionner
---------------------------------------
---------- Variables publics ----------
---------------------------------------
-- Dans un premier temps veuillez créer ces variables utilisateurs pour les besoin système
-- Réglage/Plus d'option/Variable utilisateur = "Cycle_InfosMails" de type entier
---------------------------------------
------------ Configuration ------------
---------------------------------------
local nom_script = "InfosMails" -- Scipt LUA de type Device
local Desc_script = "Gestion des mails maintenance"
local version = "1.10"
local debugging = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local TempsSansActivite = 15 -- Temps sans activité des équipements
local Personne001 = 'mail001@hotmail.fr' -- Mail de la première personne
local Personne002 = 'mail002@hotmail.fr' -- Mail de la seconde personne
local Titre = 'Serveur de la maison' -- Nom de l'équipement domotique
local NiveauBasBatteire = 25 -- Niveau bas des batteries pour la surveillance de remplacement en %
local IntervalMail = 18 -- Interval de temps d'envoie de mail en secondes
local VarTempsCycle = "Cycle_" .. nom_script -- Facultatif : Variable pour la mesure de temps de cycle du script
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
-- Fonction des log
function voir_les_logs (s, debugging)
if (debugging) then
if s ~= nil then
print ("<font color='#0280e9'>".. s .."</font>")
else
print ("<font color='#f3031d'>aucune valeur affichable</font>")
end
end
end
--Fonction calcule la différence de temps (en secondes) entre maintenant et la date passée en paramètre.
function timedifference (s)
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
-- Fonction d'envoie de mail
function InfoMail_cmd( dev, Objet, Mail001, Mail002, Message)
if (dev~='nil') then
local Sujet = Titre .. ' : ' .. Objet .. ' '.. tostring(dev)
voir_les_logs("Info Script ".. nom_script .. " : envoie du message mail ; " .. Sujet .. " à " .. tostring(Mail001),true)
commandArray[1]={['SendEmail']= Sujet .. '#Bonjour, <BR><BR> ' .. Message .. '<BR> <BR> <BR> ' .. Titre .. '#' .. Mail001}
if (Mail002~='') then
voir_les_logs("Info Script ".. nom_script .. " : envoie du message mail ; " .. Sujet .. " à " .. tostring(Mail002),true)
commandArray[2]={['SendEmail']= Sujet .. '#Bonjour, <BR><BR> ' .. Message .. '<BR> <BR> <BR> ' .. Titre .. '#' .. Mail002}
end
end
end
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
--------------------------------------------
commandArray = {}
commandArray['Variable:' .. VarTempsCycle]= '600'
local CapteurVirtuel = 'nil'
voir_les_logs("Info Script ".. nom_script .. " : " .. Desc_script .. " (v".. version ..") by MikeW",debugging)
-- Infos divers états
-- Si action sur mode manu
CapteurVirtuel = 'Mode Manu RDC'
if (tostring(devicechanged[CapteurVirtuel])~="nil") and (tostring(devicechanged[CapteurVirtuel])~="Off") then
InfoMail_cmd(CapteurVirtuel, 'modification de la commande',Personne001,Personne002, 'le système de chauffage est passé en ' .. tostring(otherdevices[CapteurVirtuel]) .. ' pour le RDC' )
end
-- Si action sur Mode de chauffage
CapteurVirtuel = 'Mode de chauffage'
if (tostring(devicechanged[CapteurVirtuel])~="nil") then
InfoMail_cmd(CapteurVirtuel, 'modification de la commande',Personne001,Personne002, 'le système de chauffage est passé en ' .. tostring(otherdevices[CapteurVirtuel]) .. '' )
end
-- Si action Nombre de personnes
CapteurVirtuel = 'Nombre de personnes'
if (tostring(devicechanged[CapteurVirtuel])~="nil") then
InfoMail_cmd(CapteurVirtuel, 'modification de la commande',Personne001,Personne002, 'la maison est passée en mode ' .. tostring(otherdevices[CapteurVirtuel]) .. '' )
end
-- Infos niveaux de batteries
CapteurVirtuel = 'Batteries du Rad de la cuisine'
if ((timedifference(otherdevices_lastupdate[CapteurVirtuel]) < IntervalMail) and tonumber(string.format("%.1f",string.gsub(string.sub(tostring(otherdevices[CapteurVirtuel]), 1, 3),";",".")))<NiveauBasBatteire) then
InfoMail_cmd(CapteurVirtuel, 'Etat des ',Personne001, Personne002, 'Niveau de ' .. tostring(CapteurVirtuel) .. ' à ' .. string.format("%.1f",string.gsub(string.sub(tostring(otherdevices[CapteurVirtuel]), 1, 3),";",".")) .. '%')
end
CapteurVirtuel = 'Batteries du Rad du salon'
if ((timedifference(otherdevices_lastupdate[CapteurVirtuel]) < IntervalMail) and tonumber(string.format("%.1f",string.gsub(string.sub(tostring(otherdevices[CapteurVirtuel]), 1, 3),";",".")))<NiveauBasBatteire) then
InfoMail_cmd(CapteurVirtuel, 'Etat des ',Personne001, Personne002, 'Niveau de ' .. tostring(CapteurVirtuel) .. ' à ' .. string.format("%.1f",string.gsub(string.sub(tostring(otherdevices[CapteurVirtuel]), 1, 3),";",".")) .. '%')
end
CapteurVirtuel = 'Batteries du Rad de la buanderie'
if ((timedifference(otherdevices_lastupdate[CapteurVirtuel]) < IntervalMail) and tonumber(string.format("%.1f",string.gsub(string.sub(tostring(otherdevices[CapteurVirtuel]), 1, 3),";",".")))<NiveauBasBatteire) then
InfoMail_cmd(CapteurVirtuel, 'Etat des ',Personne001, Personne002, 'Niveau de ' .. tostring(CapteurVirtuel) .. ' à ' .. string.format("%.1f",string.gsub(string.sub(tostring(otherdevices[CapteurVirtuel]), 1, 3),";",".")) .. '%')
end
commandArray['Variable:' .. VarTempsCycle]=tostring(timedifference(tostring(uservariables_lastupdate[VarTempsCycle])))
return commandArray