Page 1 sur 2
Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 19 août 2023, 15:09
par Tintin77
Bonjour,
Je cherche à connaitre le délai d'allumage et le délai d'extinction restant pour un device.
L'objectif est d'être notifié quelques minutes avant qu'un appareil ne s'éteigne automatiquement (via l'option "Délai d'extinction" du device).
Savez-vous comment Domoticz détermine cette information ?
Il me semble possible de calculer cette information en utilisant la date de dernière mise à jour du device, son statut, et l'horodatage actuel. Voyez-vous une méthode plus simple ?
Merci d'avance pour votre aide !
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 19 août 2023, 22:19
par Keros
Bonjour Tintin77 et bienvenu sur le forum
Je ne connais pas fonction native dans DomoticZ permettant de faire ce que tu souhaites.
Néanmoins, oui, via un script, tu dois pouvoir faire cette détermination du délai avant extinction.
Il serait possible, via un script de paramétrer l'envoi d'une notification avec un délai Temps -X minutes mais ça peut vite devenir compliqué si la minuterie peut être relancée.
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 20 août 2023, 10:18
par Tintin77
Merci Keros pour votre retour.
J'ai tenté de réaliser un script, lancé toutes les minutes. Il me reste encore quelques réglages à affiner. Notamment de récupérer la valeur du paramètre "delais exctinction" [AddjValue]. Car c'est l'un des rares paramètres non disponible avec Dzevent... Dommage !
En attendant je suis obligé de passer par une variable utilisateur mais c'est moins pratique.
Pour info si qqn à une idée, voici l'information que je chercher à récupérer :
Requête :
http://192.168.1.10:8080/json.htm?type=devices&rid=254
Résultat :
{
"ActTime" : 1322519236,
"ServerTime" : "2023-08-20 10:13:56",
"app_version" : "2023.1",
"result" :
[
{
"AddjMulti" : 1.0,
"AddjMulti2" : 1.0,
"AddjValue" : 10800.0,
"AddjValue2" : 0.0,
"BatteryLevel" : 255,
"CustomImage" : 2,
"Data" : "Off",
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 20 août 2023, 11:53
par Keros
La donnée est dans un Json que tu peux récupérer dans ton script. Tu peux regrader comment faire avec mon tuto OpenWeatherMap (lien dans ma signature).
Je déplace ton sujet dans la section dédiée aux script.
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 21 août 2023, 06:11
par denis_brasseur
Je partage une fonction de mon fichier modules.lua permettant de récupérer les valeurs d'un dispositif
Code : Tout sélectionner
curl = '/usr/bin/curl -m 15 ' -- ne pas oublier l'espace à la fin
domoticzIP = '192.168.1.xxx'
domoticzPORT = '80yy'
domoticzURL = 'http://'..domoticzIP..':'..domoticzPORT
function jsonInfos(device)
local rid = assert(io.popen(curl..'"'..domoticzURL..'/json.htm?type=command¶m=getdevices&rid='..otherdevices_idx[device]..'"'))
local list = rid:read('*all')
rid:close()
return json:decode(list).result[1]
end
Code : Tout sélectionner
--récupèrer les infos json du périphérique
-- usage
local device = jsonInfos('mon device')
-- print(device.Name)
-- print(device.Status)
print(device.AddjValue)
-- etc..
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 22 août 2023, 15:58
par Tintin77
Merci ! C'est exactement ce qu'il me manque. Mais je n'arrive pas à le faire fonctionner

je pense que le problème vient du fait que mon script est fait dans Dzvents, et non dans un fichier lua

(
J'ai temporairement simplifié pour me faciliter le débogage, mais je ne trouve pas comment remplacer la commande json de toute façon. retour à la case départ...
Code : Tout sélectionner
function jsonInfos(device)
--local rid = assert(io.popen(curl..'"'..domoticzURL..'/json.htm?type=command¶m=getdevices&rid='..device..'"'))
rid = assert(io.popen(curl..'"'..domoticzURL..'/json.htm?type=devices&rid=435"'))
local list = rid:read('*all')
rid:close()
return json:decode(list).result[1] << ligne 17
end
2023-08-22 15:55:26.753 Error: dzVents: Error: (3.1.8) : An error occurred when calling event handler AUTO_OFF_ALERT_TEST
2023-08-22 15:55:26.753 Error: dzVents: Error: (3.1.8) : ...cripts\dzVents\generated_scripts/AUTO_OFF_ALERT_TEST.lua:17: attempt to index a nil value (global 'json')
2023-08-22 15:55:28.315 zWave com6: Usage (Unknown)
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 22 août 2023, 17:13
par Keros
tu as bien le "json load file ..." dans ton script ?
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 22 août 2023, 17:40
par Tintin77
Bonjour, Je ne sais pas à quoi vous faites allusion. Je n'ai rien qui ressemble à ça dans mon script en tout cas.
Je ne sais pas dans quelle mesure avoir tout le code peux aider à répondre à cette question :
Code : Tout sélectionner
return {
on = {
devices = {
'Chime'
}
},
logging = {
level = domoticz.LOG_INFO,
marker = 'ALERTE AUTO-OFF TEST >>> ',
},
execute = function(domoticz, timer)
-- TEST API -----------------------------------------------------------------------------------------
curl = '/usr/bin/curl -m 15 ' -- ne pas oublier l'espace à la fin
domoticzIP = '192.168.1.xx'
domoticzPORT = '80xx'
domoticzURL = 'http://'..domoticzIP..':'..domoticzPORT
function jsonInfos(device)
--local rid = assert(io.popen(curl..'"'..domoticzURL..'/json.htm?type=command¶m=getdevices&rid='..device..'"'))
rid = assert(io.popen(curl..'"'..domoticzURL..'/json.htm?type=devices&rid=35"'))
local list = rid:read('*all')
rid:close()
return json:decode(list).result[1]
end
--récupèrer les infos json du périphérique
-- usage
local device = jsonInfos('Switch-Lumiere1')
-- print(device.Name)
-- print(device.Status)
print(device.AddjValue)
-- etc..
-- TEST API -----------------------------------------------------------------------------------------
function TempsRestantAutoOff(zDevice, zDeviceAlerte, zVariable, zCompteur)
if domoticz.devices(zDevice).state == 'On' then
zDelai_off = domoticz.variables('exctinction_tv').value
zDelai_off = zDelai_off / 60
zlastUpdate = domoticz.devices(zDevice).lastUpdate.minutesAgo
zTempsRestant = zDelai_off - zlastUpdate
domoticz.log(zDevice.." - Variable delai d'exctinction automatique : "..zDelai_off..' minutes')
domoticz.log(zDevice..' - Temps restant avant exctinction : '..zTempsRestant..' minutes')
domoticz.variables(zVariable).set(zTempsRestant)
domoticz.devices(zCompteur).updateCounter(zTempsRestant)
if (zTempsRestant == zMinAvantAlerte) then
domoticz.log('Il reste 10 minutes ! Alerte déclenchée')
domoticz.devices(zDeviceAlerte).toggleSwitch().forSec(3).repeatAfterSec(3, 3)
end
else
domoticz.log(zDevice..' est éteint. Rien à faire.')
domoticz.variables(zVariable).set(0)
domoticz.devices(zCompteur).updateCounter(0)
end
end
zDevice = 'Switch-Lumiere1'
zDeviceAlerte = 'Switch-Lumiere2'
zVariable = 'exctinction_tv_tps_restant_test'
zCompteur = 'Tps restant test'
zMinAvantAlerte = 10
local OnLanceLafonction = TempsRestantAutoOff(zDevice, zDeviceAlerte, zVariable, zCompteur)
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 22 août 2023, 17:44
par Keros
Il te manque la brique pour intégrer la fonction permettant de décortiquer les Json.
Regrde mon Tuto sur OpenWeatherMAp, c'est dedans (en plus cette commande dépend de ton système).
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 22 août 2023, 18:18
par Tintin77
Merci pour cette précision. J'ai essayé de tout reprendre depuis le début, en m'inspirant de votre cote, et avec l'api openweather dans un premier temps, mais je n'arrive pas non plus à le faire fonctionner.
C'est toujours la même erreur, au niveau de cette ligne : "temp = jsonValeur.current.temp"
2023-08-22 18:15:42.693 Error: dzVents: Error: (3.1.8) ALERTE AUTO-OFF TEST >>> : An error occurred when calling event handler AUTO_OFF_ALERT_TEST
2023-08-22 18:15:42.693 Error: dzVents: Error: (3.1.8) ALERTE AUTO-OFF TEST >>> : ...cripts\dzVents\generated_scripts/AUTO_OFF_ALERT_TEST.lua:27: attempt to index a nil value (global 'jsonValeur')
return {
on = {
devices = {
'Chime', 'DO1open'
}
},
logging = {
level = domoticz.LOG_INFO,
marker = 'ALERTE AUTO-OFF TV TEST >>> ',
},
execute = function(domoticz, timer)
api = 'xx'
lat = 'xx'
long = 'xx'
json = (loadfile "scripts/lua/JSON.lua")() -- Relative path for most systems
config=assert(io.popen('/usr/bin/curl "
https://api.openweathermap.org/data/2.5 ... its=metric"'))
blocjson = config:read('*all')
config:close()
jsonValeur = json:decode(blocjson)
temp = jsonValeur.current.temp <<< LIGNE 27
Print(temp)
J'ai testé l'appel en directe de l'API openweather qui fonctionne bien avec l'URL indiquée :
{
"lat": ,
"lon": ,
"timezone": "Europe/Paris",
"timezone_offset": 7200,
"current": {
"dt": ,
"sunrise": ,
"sunset": ,
"temp": 303.38,
"feels_like": 304.07,
"pressure": 1019,
"humidity": 47,
"dew_point": 290.82,
"uvi": 1.71,
"clouds": 0,
"visibility": 10000,
"wind_speed": 3.13,
"wind_deg": 60,
"wind_gust": 3.13,
"weather": [
{
"id": 800,
"main": "Clear",
"description": "ciel dégagé",
"icon": "01d"
}
]
},
"minutely": [
{
"dt": 1692721080,
"precipitation": 0
},
{