[Résolu]-DZVENTS- compréhension - préambule du script et data persistantes
Publié : 27 mai 2024, 19:13
Bonjour à tous,
J'utilise domoticz et les scripts dzvents depuis déjà un bon moment, jusqu'à présent avec très peu de soucis ou de limitations (je ne suis pas allergique au code, quel que soit le langage).
Je me retrouve embêté par un cas d'application peut-être trop tordu, et peut-être même qu'il existe une meilleure solution, mais je me lance dans ma description.
Pour simplifier la gestion des plans, des devices, des matériels, j'utilise beaucoup de devices virtuels définis une fois pour toutes (InterrupteurSalon) et j'utilise un script pour associer chaque dummy avec un vrai device (exemple: Shelly1PM-Cuisine). Je m'en sers pour beaucoup de devices de types et d'origines différents : interrupteurs (beaucoup de Shelly, mais aussi des devices zigbee), détecteurs de mouvement (zigbee ou issus de mes caméras), ...
Vu le nombre et la variété de devices, j'utilise des tables de correspondance, j'y reviens juste après.
Pour que le script fonctionne, j'ai besoin de la liste de tous les devices (virtuels ou vrais), de leur statut ("virtuel" ou "vrai") mais aussi de leur association).
Voici à quoi ressemble mon script, avec pas mal de travail dans le préambule du script :
Mon problème :
parfois, certains devices se retrouvent dans la liste des triggers, mais ne sont plus dans les tables de correspondance. Le script plante en me disant que la valeur correspondante dans la table est nil (en gros, clé pas trouvée dans la table), et je ne peux plus accéder
J'ai essayé d'utiliser des data persistantes, sans problème de mise en oeuvre mais sans succès (même problème au final).
D'où mes questions :
- quand et combien de fois est exécuté le préambule des scripts dzvents ?
- comment gérer ce problème de data persistantes définies dans le préambule ?
- y a-t-il un meilleur moyen de générer ces données, sachant que je veux éviter de devoir répéter des infos à plusieurs endroits ?
J'ai regardé du côté des devices esclaves, mais il m'a semblé que ça ne pouvait pas m'aider.
Désolé si je n'arrive pas à expliquer mieux mon soucis. N'hésitez pas à poser des questions si vous pensez pouvoir m'aider là-dessus, j'ai toujours réussi à intéresser assez de personnes pour m'aider à résoudre mes soucis, ce qui me rend encore plus attaché à domoticz, tout ce qui tourne autour mais aussi ce forum.
Par avance, merci pour votre aide
J'utilise domoticz et les scripts dzvents depuis déjà un bon moment, jusqu'à présent avec très peu de soucis ou de limitations (je ne suis pas allergique au code, quel que soit le langage).
Je me retrouve embêté par un cas d'application peut-être trop tordu, et peut-être même qu'il existe une meilleure solution, mais je me lance dans ma description.
Pour simplifier la gestion des plans, des devices, des matériels, j'utilise beaucoup de devices virtuels définis une fois pour toutes (InterrupteurSalon) et j'utilise un script pour associer chaque dummy avec un vrai device (exemple: Shelly1PM-Cuisine). Je m'en sers pour beaucoup de devices de types et d'origines différents : interrupteurs (beaucoup de Shelly, mais aussi des devices zigbee), détecteurs de mouvement (zigbee ou issus de mes caméras), ...
Vu le nombre et la variété de devices, j'utilise des tables de correspondance, j'y reviens juste après.
Pour que le script fonctionne, j'ai besoin de la liste de tous les devices (virtuels ou vrais), de leur statut ("virtuel" ou "vrai") mais aussi de leur association).
Voici à quoi ressemble mon script, avec pas mal de travail dans le préambule du script :
Code : Tout sélectionner
PairesVirtuels = {
-- les associations uniques
['InterrupteurCuisine'] = "Shelly1PM-Cuisine",
['LEDSalon'] = "Zigbee-LED1",
-- etc
}
-- association spécifiques aux caméras : deux devices par caméra
for i, alias in pairs( {
['1'] = 'Entree',
['2'] = 'Garage',
-- etc
} ) do
for _, accessoire in ipairs( {'ModeConfidentiel-', 'Detecteur-'}) do
PairesVirtuels[accessoire.. alias] = 'VRAI-'.. accessoire .. i
end
end
-- les différents tables de correspondance :
isReal = {}
AllDevices = {}
for k,v in pairs(PairesVirtuels) do
table.insert(AllDevices, k)
table.insert(AllDevices, v)
isReal[v] = True
isReal[k] = False
end
-- symmetrisation de la table pour avoir la correspondance dans les deux sens
for k,v in pairs(PairesVirtuels) do
PairesVirtuels[v] = k
end
return {
on = { devices = AllDevices }
execute = function(domoticz, trigger)
-- traitements generiques pour assurer la synchro
-- j'utilise PairesVirtuels pour retrouver le "jumeau" et isReal pour savoir qui est le vrai device
end
}
Mon problème :
parfois, certains devices se retrouvent dans la liste des triggers, mais ne sont plus dans les tables de correspondance. Le script plante en me disant que la valeur correspondante dans la table est nil (en gros, clé pas trouvée dans la table), et je ne peux plus accéder
J'ai essayé d'utiliser des data persistantes, sans problème de mise en oeuvre mais sans succès (même problème au final).
D'où mes questions :
- quand et combien de fois est exécuté le préambule des scripts dzvents ?
- comment gérer ce problème de data persistantes définies dans le préambule ?
- y a-t-il un meilleur moyen de générer ces données, sachant que je veux éviter de devoir répéter des infos à plusieurs endroits ?
J'ai regardé du côté des devices esclaves, mais il m'a semblé que ça ne pouvait pas m'aider.
Désolé si je n'arrive pas à expliquer mieux mon soucis. N'hésitez pas à poser des questions si vous pensez pouvoir m'aider là-dessus, j'ai toujours réussi à intéresser assez de personnes pour m'aider à résoudre mes soucis, ce qui me rend encore plus attaché à domoticz, tout ce qui tourne autour mais aussi ce forum.
Par avance, merci pour votre aide