Bon après quelques heures à me creuser les méninges j'ai trouvé une solution pour knxweb, solution qui n'est pas la panacée :
1 - créer un objet en DPT29.xxx relié à la GA concernant le télégramme sur 6 bytes.
2 - créer un second objet en DPT12.xxx relié à la même GA. cet objet étant en 32 bits il ne contiendra que la valeur de la consommation.
3 - créer un pour chaque index (2 pour le J/N et 6 pour le E/J/P + J/N) un objet en DPT 12.xxx relié à AUCUNE GA.
Pour extraire l'index il suffit de passer par le script LUA suivant :
index= tonumber(string.sub(string.sub('00'..string.format('%x', 4294967295 and objet_enDPT29),-8),1,2))
Ce script peut-être lancé par une règle qui se déclenchera à chaque changement de valeur de l'objet en DPT29.001
Pour le moment je n'arrive pas à lancer ce script sans erreur mais c'est par manque d'information sur la syntaxe à utiliser au niveau de la règle dans knxweb.
J'utilise la syntaxe suivante :
![CDATA[set(obj("DT_EDF_IDX-Tarif"), tonumber(string.sub(string.sub('00'..string.format('%x', 4294967295 and obj("MachaineenDPT229001"),5,1),16))]]
qui semble ne rien retourner alors que le script fonctionne parfaitement sous l'interpréteur LUA ?
Une fois l'index récupéré, il suffira de prendre la valeur contenue dans le second objet créé et de l'assigner dans le bon objet créé en 3.
On peux même imaginer passer tous les objets au script LUA et faire une série de IF ... THEN ... ELSE dans le script afin de mettre la valeur dans le bon objet en fonction de l'index .... un truc dans ce style :
function extract_idx (dpt229 , conso, idx1a, idx2a)
value= tonumber(string.sub(string.sub('00'..string.format('%x', 4294967295 and dpt229),-8),1,2));
if (value ~= nil) then
idx_tar=value;
end;
if (value==1) then
idx1=conso;
idx2=idx2a;
else
idx1=idx1a;
idx2=conso;
end;
ghost=conso;
return idx_tar, idx1, idx2, ghost;
end;
obj("Idx-tarif"),obj("Conso-Idx1"),obj'"Conso-Idx2"),obj("EDF_trigger")=extract_idx (obj("EDF_DPT229"), obj("EDF_Conso"),obj("Conso-Idx1"), obj("Conso-Idx2"));
Pour le moment ce script fait planter linknx ..... alors qu'il fonctionne parfaitement avec l'interpréteur SciTE
1 - créer un objet en DPT29.xxx relié à la GA concernant le télégramme sur 6 bytes.
2 - créer un second objet en DPT12.xxx relié à la même GA. cet objet étant en 32 bits il ne contiendra que la valeur de la consommation.
3 - créer un pour chaque index (2 pour le J/N et 6 pour le E/J/P + J/N) un objet en DPT 12.xxx relié à AUCUNE GA.
Pour extraire l'index il suffit de passer par le script LUA suivant :
index= tonumber(string.sub(string.sub('00'..string.format('%x', 4294967295 and objet_enDPT29),-8),1,2))
Ce script peut-être lancé par une règle qui se déclenchera à chaque changement de valeur de l'objet en DPT29.001
Pour le moment je n'arrive pas à lancer ce script sans erreur mais c'est par manque d'information sur la syntaxe à utiliser au niveau de la règle dans knxweb.
J'utilise la syntaxe suivante :
![CDATA[set(obj("DT_EDF_IDX-Tarif"), tonumber(string.sub(string.sub('00'..string.format('%x', 4294967295 and obj("MachaineenDPT229001"),5,1),16))]]
qui semble ne rien retourner alors que le script fonctionne parfaitement sous l'interpréteur LUA ?
Une fois l'index récupéré, il suffira de prendre la valeur contenue dans le second objet créé et de l'assigner dans le bon objet créé en 3.
On peux même imaginer passer tous les objets au script LUA et faire une série de IF ... THEN ... ELSE dans le script afin de mettre la valeur dans le bon objet en fonction de l'index .... un truc dans ce style :
function extract_idx (dpt229 , conso, idx1a, idx2a)
value= tonumber(string.sub(string.sub('00'..string.format('%x', 4294967295 and dpt229),-8),1,2));
if (value ~= nil) then
idx_tar=value;
end;
if (value==1) then
idx1=conso;
idx2=idx2a;
else
idx1=idx1a;
idx2=conso;
end;
ghost=conso;
return idx_tar, idx1, idx2, ghost;
end;
obj("Idx-tarif"),obj("Conso-Idx1"),obj'"Conso-Idx2"),obj("EDF_trigger")=extract_idx (obj("EDF_DPT229"), obj("EDF_Conso"),obj("Conso-Idx1"), obj("Conso-Idx2"));
Pour le moment ce script fait planter linknx ..... alors qu'il fonctionne parfaitement avec l'interpréteur SciTE
Le perfectionnement de soi et l'accession à sa légende personnelle passe obligatoirement par le partage de son savoir et de son expérience avec les profanes en demande d'initiation. (R. Bach)