dzvents... je suis planté
Re: dzvents... je suis planté
Ton erreur vient d'un copier-coller de la ligne domoticz.data.xxxxxxxxxxxxxxxxxxx qui utilise "domoticz" comme nom de la variable qui contient les infos de DomoticZ.
Or cette variable, tu l'a déclarée au début du script avec la ligne execute = function(dz, item). Comme tu utilises l'abréviation "dz", il ne sait pas ce que c'est "domoticz" dans ta ligne 31.
Or cette variable, tu l'a déclarée au début du script avec la ligne execute = function(dz, item). Comme tu utilises l'abréviation "dz", il ne sait pas ce que c'est "domoticz" dans ta ligne 31.
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: dzvents... je suis planté
Excellent, merci!
Quand on n'est pas doué....
Quand on n'est pas doué....
Re: dzvents... je suis planté
C'est un piège de pouvoir le nom de cette variable. De base, c'est domoticz. Mais je comprends que c'est plus simple d'écrire dz et que c'est aussi plus lisible. Attention maintenant quand tu récupères des exemples de code...
Mais, à mon avis si tu vois à nouveau un nil value sur une variable domoticz, ça devrait vite faire tilt
Mais, à mon avis si tu vois à nouveau un nil value sur une variable domoticz, ça devrait vite faire tilt
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: dzvents... je suis planté
Merci pour votre aide!
J'ose à peine partager mon code tellement il est peu élégant, mais si ça peut aider quelqu'un qui cherche à couper/rallumer sa clim Mitsubishi en fonction de la position de ses fenêtres (tout en utilisant MELCloud), voici :
J'ose à peine partager mon code tellement il est peu élégant, mais si ça peut aider quelqu'un qui cherche à couper/rallumer sa clim Mitsubishi en fonction de la position de ses fenêtres (tout en utilisant MELCloud), voici :
Code : Tout sélectionner
return
{
on =
{
devices =
{
'FO5MIN',-- Détection de fenêtres ouvertes
'MELCloud - Chambre - Mode',
},
},
data =
{
Clim_Chambre_avant_ouverture = { initial = 'Off'}
},
logging =
{
level = domoticz.LOG_DEBUG, -- change to domoticz.LOG_ERROR when script is tested and OK
marker = 'Chambre ouverte',
},
execute = function(dz, item)
local trigger = item.isDevice and item.name or item.trigger
Window_open = dz.devices('FO5MIN').state
AirconChambre = dz.devices('MELCloud - Chambre - Mode')
dz.log('The rule that triggered the event was: ' .. trigger )
dz.log('Valeur FO5MIN : ' .. Window_open )
dz.log('Mode clim chambre " '.. AirconChambre.levelName .. ' "')
dz.log('Clim chambre avant ouverture"' .. dz.data.Clim_Chambre_avant_ouverture .. ' "')
if(Window_open == 'On' and trigger == 'FO5MIN' and AirconChambre.levelName ~= 'Off')
then
dz.data.Clim_Chambre_avant_ouverture = AirconChambre.levelName
dz.log('La fenêtre est ouverte et la clim était en ' .. dz.data.Clim_Chambre_avant_ouverture)
AirconChambre.switchSelector('Off').checkFirst()
dz.log('Je viens d\'arrêter la clim')
elseif(Window_open == 'Off' and trigger == 'FO5MIN' and AirconChambre.levelName == 'Off')
then
dz.log('La fenêtre vient de se refermer et la clim était en ' .. dz.data.Clim_Chambre_avant_ouverture)
AirconChambre.switchSelector(dz.data.Clim_Chambre_avant_ouverture).checkFirst()
dz.log('Je viens de redémarrer la clim, elle est en '.. AirconChambre.levelName)
elseif(Window_open == 'On' and trigger == 'MELCloud - Chambre - Mode' and AirconChambre.levelName ~= 'Off')
then
dz.log('le scheduler demande à mettre la clim de la chambre en mode ' .. AirconChambre.levelName)
dz.data.Clim_Chambre_avant_ouverture = AirconChambre.levelName
dz.log('Je viens de préparer le redémarrage de la clim chambre qui sera sur '.. dz.data.Clim_Chambre_avant_ouverture)
AirconChambre.switchSelector('Off').checkFirst()
dz.log('Et j\'arrête la clim de la chambre')
elseif(Window_open == 'Off' and trigger == 'MELCloud - Chambre - Mode' and AirconChambre.levelName == 'Off')
then
dz.data.Clim_Chambre_avant_ouverture = AirconChambre.levelName
dz.log('Clim à l\'arrêt et fenêtres fermées, clim avant ouverture = '.. dz.data.Clim_Chambre_avant_ouverture)
end
end
}Re: dzvents... je suis planté
Pourquoi dis-tu qu'il est peu élégant ? Il fonctionne, c'est le principal
Merci du partage
Merci du partage
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: dzvents... je suis planté
Parti à fond depuis que j'ai compris quelques trucs, me voilà encore avec des nil...
J'ai un script qui marche bien... tant que les lignes en commentaire le restent...
En pratique, histoire de préserver les filtres de clim, je détecte quand on fait de la cuisine (par l'augmentation du point de rosée d'un thermomètre situé au dessus des plaques de cuisson, vous saurez tout), et si le point de rosée monte de 2° entre 2 échantillonnages, j'arrête la clim. Le redémarrage se fait par appui sur un bouton, mais j'aimerais bien automatiser cela en enregistrant la valeur de point de rosée qui a fait déclencher dans une variable utilisateur, et récupérer cette variable dans un autre script (comme par hasard celui que j'ai partagé avant) pour pouvoir faire redémarrer la clim une fois le point de rosée devenu à sa valeur d'origine.
Et là, c'est le drame, ça ne marche pas, pour Domoticz, "item.dewPoint" est une valeur Nil, (pourtant la comparaison de valeurs fonctionne puisque je passe "if") et je ne m'en sors pas.
Une idée?
J'ai un script qui marche bien... tant que les lignes en commentaire le restent...
En pratique, histoire de préserver les filtres de clim, je détecte quand on fait de la cuisine (par l'augmentation du point de rosée d'un thermomètre situé au dessus des plaques de cuisson, vous saurez tout), et si le point de rosée monte de 2° entre 2 échantillonnages, j'arrête la clim. Le redémarrage se fait par appui sur un bouton, mais j'aimerais bien automatiser cela en enregistrant la valeur de point de rosée qui a fait déclencher dans une variable utilisateur, et récupérer cette variable dans un autre script (comme par hasard celui que j'ai partagé avant) pour pouvoir faire redémarrer la clim une fois le point de rosée devenu à sa valeur d'origine.
Et là, c'est le drame, ça ne marche pas, pour Domoticz, "item.dewPoint" est une valeur Nil, (pourtant la comparaison de valeurs fonctionne puisque je passe "if") et je ne m'en sors pas.
Une idée?
Code : Tout sélectionner
return
{
on =
{
devices =
{
'Hotte cuisine',
},
},
data =
{
lastValue =
{
initial = 0,
},
--variables =
--{
--'Kitchen_hood_triggering_dewpoint',
--},
},
logging =
{
level = domoticz.LOG_ERROR, --LOG_DEBUG, -- change to domoticz.LOG_ERROR when script is tested and OK
marker = 'dewPoint-rise',
},
execute = function(dz, item)
AirconSejour = dz.devices('MELCloud - Séjour - Mode')
AirconStop = dz.devices ('Aircon off')
dz.log('\nDevicename: ' .. item.name .. ', nValue: ' .. item.nValue .. ', sValue: ' .. item.sValue ..
'\nDevicetype: ' .. item.deviceType .. ', deviceSubType: ' .. item.deviceSubType ..
'\nlastValue: ' .. dz.data.lastValue, dz.LOG_DEBUG )
if item.dewPoint > dz.data.lastValue + 2 then
--dz.log(dz.data.lastValue)
--dz.Kitchen_hood_triggering_dewpoint.value = item.dewPoint
AirconSejour.switchSelector('Off').checkFirst()
AirconStop.switchOn().forSec(10)
end
if dz.data.lastValue ~= item.dewPoint then
dz.data.lastValue = item.dewPoint
end
end
}Re: dzvents... je suis planté
Tu as fait des lignes de debug, c'est super !! Mais ce serait mieux si on pouvait les avoir
Le but du débogage est de savoir les valeurs des variables au moment de l'exécution pour essayer de comprendre ce qui peut ce passer.
Le but du débogage est de savoir les valeurs des variables au moment de l'exécution pour essayer de comprendre ce qui peut ce passer.
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: dzvents... je suis planté
Ah oui, en effet!!
Quand je supprime tous les commentaires y compris :
--dz.Kitchen_hood_triggering_dewpoint.value = item.dewPoint
j'obtiens:
Voici en supprimant tous les commentaires à l'exception de :
--dz.Kitchen_hood_triggering_dewpoint.value = item.dewPoint
Quand je supprime tous les commentaires y compris :
--dz.Kitchen_hood_triggering_dewpoint.value = item.dewPoint
j'obtiens:
Code : Tout sélectionner
2022-02-19 19:36:55.774 Error: dzVents: Error: (3.1.8) dewPoint-rise: An error occurred when calling event handler Table cuisson ON Aircon off
2022-02-19 19:36:55.774 Error: dzVents: Error: (3.1.8) dewPoint-rise: ...zVents/generated_scripts/Table cuisson ON Aircon off.lua:42: attempt to index a nil value (field 'Kitchen_hood_triggering_dewpoint')--dz.Kitchen_hood_triggering_dewpoint.value = item.dewPoint
Code : Tout sélectionner
2022-02-19 19:32:43.620 Status: dzVents: Info: dewPoint-rise: ------ Start internal script: Table cuisson ON Aircon off: Device: "Hotte cuisine (dummy)", Index: 434
2022-02-19 19:32:43.622 Status: dzVents: Debug: dewPoint-rise: Processing device-adapter for MELCloud - Séjour - Mode: Switch device adapter
2022-02-19 19:32:43.623 Status: dzVents: Debug: dewPoint-rise: Processing device-adapter for Aircon off: Switch device adapter
2022-02-19 19:32:43.624 Status: dzVents: Debug: dewPoint-rise:
2022-02-19 19:32:43.624 Devicename: Hotte cuisine, nValue: 0, sValue: 23.40;46;1;994;4
2022-02-19 19:32:43.624 Devicetype: Temp + Humidity + Baro, deviceSubType: THB1 - BTHR918, BTHGN129
2022-02-19 19:32:43.624 lastValue: 12.989999771118
2022-02-19 19:32:43.624 Status: dzVents: Info: dewPoint-rise: ------ Finished Table cuisson ON Aircon off
2022-02-19 19:32:53.506 ($temperature Hotte cuisine) Updating device from 0:'23.44' to have values 0:'23.41'.
2022-02-19 19:32:53.541 ($humidity Hotte cuisine) Updating device from 63:'1' to have values 48:'1'.Re: dzvents... je suis planté
En fait, il te manque une info important dans ton debug : la valeur de item.dewPoint C'est elle que tu utilises après.
Si tu as une erreur quand tu essayes de l'afficher dans les logs, C'est que la syntaxe item.dewPoint ne fonctionne pas pour ton dispositif.
Si tu as une erreur quand tu essayes de l'afficher dans les logs, C'est que la syntaxe item.dewPoint ne fonctionne pas pour ton dispositif.
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: dzvents... je suis planté
Trouvé...
On n'écrit pas :
dz.Kitchen_hood_triggering_dewpoint.value = item.dewPoint
Mais on écrit :
dz.variables('Kitchen_hood_triggering_dewpoint').set(item.dewPoint)
On n'écrit pas :
dz.Kitchen_hood_triggering_dewpoint.value = item.dewPoint
Mais on écrit :
dz.variables('Kitchen_hood_triggering_dewpoint').set(item.dewPoint)