Connaitre le délai restant (du délai allumage / extinction automatique)
Connaitre le délai restant (du délai allumage / extinction automatique)
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 !
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)
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.
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.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
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",
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)
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.
Je déplace ton sujet dans la section dédiée aux script.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
-
denis_brasseur
- Messages : 898
- Inscription : 24 déc. 2018, 17:05
- Localisation : (26)
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
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..Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
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...
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)
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
end2023-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)
Dernière modification par Keros le 22 août 2023, 17:09, modifié 1 fois.
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
tu as bien le "json load file ..." dans ton script ?
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
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 :
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)
Dernière modification par Keros le 22 août 2023, 17:41, modifié 1 fois.
Raison : Ajout des balises code
Raison : Ajout des balises code
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
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).
Regrde mon Tuto sur OpenWeatherMAp, c'est dedans (en plus cette commande dépend de ton système).
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
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
},
{
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
},
{