Obtenir état actionneur Enocean et piotage par Push

Bonjour,

Je cherche dans le fichier status.xml de mon IPX, les balises repérant les 2 contacts de mon actionneur Ubiwizz Enocean.

Je n’arrive pas à les trouver. Où se cachent-ils ?

Par ailleurs, je voudrais pouvoir les commander par des push. Quelle serait la commande à passer pour ce faire ?

Je n’ai rien trouvé sur le forum ni dans le wiki qui en parle. J’ai mal cherché ?

Merci de votre aide.

Bien cdlt

Bonne question.

/api/xdevices.json?SetEnoPC=1 pour allumer l’actionneur 1
/api/xdevices.json?ClearEnoPC=1 pour éteindre l’actionneur 1

(Trouvé dans la doc de l’API de la V4)

1 « J'aime »

Merci.

Je n’avais pas la bonne version de la doc. Pour obtenir l’état, c’est la commande :
/api/xdevices.js on?Get=XENO (sans clef)

Mais contrairement à ce qui est indiqué, il faut entrer la clef. Et il y a de fortes chances pour qu’il en soit de même pour les commandes que tu as citées.

Mais c’est quand même étrange que la quasi totalité des infos du X-Eno soient remontées dans le status.xml et pas l’état des actionneurs. Une idée @Benjamin_GCE ?

Bonjour,

Suite à l’ajout des 76 interrupteurs de la version 35, il y a eu un décalage. Je vais les ajouter à la suite (de 120 à 143) dans la prochaine version.

Vous pouvez également les retrouver dans le « io.xml ».

Tout dépend si vous l’avez activé ou non.

Cordialement,

Benjamin

3 « J'aime »

Bonjour,

Ok je me doutais qu’il pouvait y avoir un lien avec la v.35.

Est-il possible à partir d’un widget HTML d’accéder directement au contenu du io.xml qui est visiblement rechargé très souvent ? Ou faut-il créer une source de données ?

Je suppose que les bits concernés sont à partir du 120 dans la chaine .

La clef est activée, mais la doc laisse penser qu’il n’y a pas besoin de l’indiquer dans la commande du fait de l’indication « (sans clef) ». Peut-être à corriger dans la doc.

Bonsoir,

J’ai trouvé comment récupérer l’état de mes actionneurs Enocean via une source de données io.xml que j’ajoute au Dashboard (en attendant que Benjamin me donne peut-être une méthode pour accéder directement sans passer par une source de données si c’est possible).

Si je charge une variable avec :
var Act1 = parseInt(datasources["io.xml"]["response"]["eno"].slice(120,121),2);

Je récupère bien la valeur numérique que je peux manipuler, afficher…

Par contre la même ligne au sein d’une fonction init() appelée dans un window.onload ne marche pas, j’ai une erreur :
ReferenceError: datasources is not defined

NB : la fonction est entre 2 balises et même si je place la déclaration en dehors de la fonction j’ai un message similaire.

La fonction datasource n’est pas accessible depuis cet endroit.
Je ne sais pas comment contourner le pb… :worried:

Une idée ?

Pourrais-tu en dire plus ? Je ne suis pas sûr de comprendre le contexte.

Bonsoir,

Ce widget fonctionne :

var act1 = parseInt(datasources["io.xml"]["response"]["eno"].slice(120,121),2);
return`
${act1}
`;

Si j’utilise celui-ci (qui n’est pas fait pour fonctionner mais pour tester) :

<script>
var act1 = parseInt(datasources["io.xml"]["response"]["eno"].slice(120,121),2);
</script>
${act1}

J’obtiens à chaque mise à jour de la datasource le message d’erreur

ReferenceError: datasources is not defined

image

Même chose si j’essaye de créer une fonction dans la balise <script>.

Tu vois d’où ça peut venir ?

J’ai toutefois trouvé une solution pour contourner le pb sans avoir à déclarer de fonction. Mais je suis curieux de savoir pourquoi cette erreur…

PS : tu sais comment accéder au contenu du io.xml sans le charger en tant que datasource ?

Je pense que c’est parce que la variable « datasources » est injectée par l’IHM de l’IPX lorsqu’elle « render » le widget HTML.

Si tu utilises <script>, tu changes de contexte et la variable datasources n’est plus accessible.

1 « J'aime »

Ok, pas grave.

J’ai réussi à contourner en indiquant directement les commandes à envoyer dans un onclick (2 newAJAXCommand pour changer les états) sans faire de fonction.

Au final, le widget HTML suivant :

var act1 = parseInt(datasources["io.xml"]["response"]["eno"].slice(120,121),2);
var act2 = parseInt(datasources["io.xml"]["response"]["eno"].slice(121,122),2);
var etat = (act1*2+act2*3)%4;
const cmd_Set = "newAJAXCommand('http://192.168.205.70/api/xdevices.json?key=apikey&SetEnoPC=";
const cmd_Clr = "newAJAXCommand('http://192.168.205.70/api/xdevices.json?key=apikey&ClearEnoPC=";
const cmd0 = cmd_Clr+"1');"+cmd_Clr+"2');";
const cmd1 = cmd_Set+"1');"+cmd_Set+"2');";
const cmd2 = cmd_Set+"1');"+cmd_Clr+"2');";
const cmd3 = cmd_Clr+"1');"+cmd_Set+"2');";
var colorfp = ['#C9C5C5','#C9C5C5','#C9C5C5','#C9C5C5'];
colorfp[etat] = '#3FB740';
var etatfp = ['Confort', 'Eco', 'Hors Gel', 'Arrêt']
return`
<div id="fp_eno" style="margin-left:12px; margin-top:6px">
    <h2 class="section-title">Fil pilote Couloir</h2>
    <p></p>
    <input value=${etatfp[etat]} id="fpText" class="bouton2" style="margin-bottom: 15px; width: 110px; background-color: rgb(68, 68, 68);" type="button"></input>
    <br>
    <div id="fp_d13" onclick=${cmd3} class="police-switch" style="font-size: 25px; width: 40px; color: ${colorfp[3]};"></div>
    <div id="fp_d12" onclick=${cmd2} class="police-snowflake-alt2" style="font-size: 30px; position: relative; top: -27.5px; left: 40px; width: 40px; color: ${colorfp[2]};"></div>
    <div id="fp_d11" onclick=${cmd1} class="police-moon_fill" style="font-size: 25px; width: 40px; position: relative; top: -55px; left: 90px; color: ${colorfp[1]};"></div>
    <div id="fp_d10" onclick=${cmd0} class="pol-sunny18" style="font-size: 35px; width: 40px; position: relative; top: -85.5px; left: 130px; color: ${colorfp[0]}"></div>
</div>
`;

m’a permis de refaire un widget « Fil Pilote » interactif pour mon radiateur piloté via Enocean :
image

Et ça fonctionne !

3 « J'aime »

Bonjour,

Je viens d’essayer de simplifier le code en pilotant les 2 contacteurs dans la même commande puisqu’a priori c’est possible. J’ai donc remplacé les 6 lignes décrivant les commandes par celles-ci :

const cmd0 = "newAJAXCommand('http://192.168.205.70/api/xdevices.json?key=apikey&ClearEnoPC=1&ClearEnoPC=2')";
const cmd1 = "newAJAXCommand('http://192.168.205.70/api/xdevices.json?key=apikey&SetEnoPC=1&SetEnoPC=2')";
const cmd2 = "newAJAXCommand('http://192.168.205.70/api/xdevices.json?key=apikey&SetEnoPC=1&ClearEnoPC=2')";
const cmd3 = "newAJAXCommand('http://192.168.205.70/api/xdevices.json?key=apikey&ClearEnoPC=1&SetEnoPC=2')";

et là, c’est le drame !

Tous les appuis sur les différents boutons d’état fonctionnent, sauf Eco qui fait bien basculer l’actionneur 1 mais pas le 2, ce qui passe le chauffage en « Arrêt ». Dans la console, on voit bien la commande partir, mais l’actionneur 2 ne bascule pas (sauf très rares exceptions, celle de la 5ème ligne de GET dans l’image ci-dessous).

38

Je pense que cela cache un bug au niveau du X-ENO. Pourriez-vous regarder @gce ?
Cela rejoint ce que j’ai déjà pu constater, avec mon ancien système basé sur des SV, d’absence de certains basculement des actionneurs lors de la concomitance de 2 ordres

1 « J'aime »

Bonjour,

Le correctif est en ligne :

Cordialement,

Benjamin

1 « J'aime »

Merci @Benjamin_GCE,

Et avez-vous une idée/solution par rapport au bug que je rencontre concernant le pilotage simultané des 2 actionneurs du même micro-module Ubiwizz décrit ci-dessus ?

NB : j’ai fait une demande au Helpdesk pour ce pb.

Bien cdlt