Développement interrupteur 3 positions vituel

Bonjour,

Ne sachant pas programmer en HTML j’aimerais savoir si quelqu’un aurait développé un interrupteur 3 positions (exemple auto-off-manu) qui suivant son état renverrait une valeur 1 ou 2 ou 3 sur une entrée analog virtuelle ?

Merci

Bonjour,
je me permets de relever 2 points qui rendraient votre widget fragile :

  • Les analogiques virtuelles ne sont accessibles que par PUSH. Votre widget devrait donc envoyer la valeur 1,2 ou 3 par PUSH, sur l’adresse IP externe de l’IPX800, ce qui impliquerait la mise en place d’une règle NAT sur votre routeur. C’est faisable mais pas très SECURE :frowning: et dépendant de votre réseau.

  • les analogiques virtuelles sont volatiles (non conservées en cas de reboot de l’ipx800).

je vous propose donc de travailler uniquement avec des sorties virtuelles :

  • Créez un widget avec 3 boutons de pilotage des sorties virtuelles (Bouton ON/OFF) , respectivement liés à 1 sortie virtuelle différente (SV1, SV2, SV3)

  • Ecrivez 3 scénarios :

    scène 1 : appui bouton 1
    événement : SV1
    action : OFF
    résultat : SV2 ; SV3

    scène 2 : appui bouton 2
    événement : SV2
    action : OFF
    résultat : SV1 ; SV3

    scène 3 : appui bouton 3
    événement : SV3
    action : OFF
    résultat : SV1 ; SV2

  • pour traiter les actions, il suffira alors de créer une scène en fonction des états des SV

    scène 4 : action sur valeur 1
    événement : SV1
    action : ON
    résultat : ce que vous voulez

    idem avec SV2 et SV3

Ce qui précède est sûrement le plus simple à mettre en œuvre et à maintenir, avec des ressources natives à l’IPX800.

Rien n’empêche, bien sûr, de développer un widget plus sexy à l’aide du HTML et CSS, avec effet 3D sur des toggle switches :slight_smile:
cdt

voici un widget vite fait, plus sexy :slight_smile:

image

  • créez une source de données STATUS sur le dashboard, vers le fichier status.xml
  • créez un widget type HTML de 2 blocs de hauteur
  • collez le code ci-dessous
  • renseignez les numéros de sorties virtuelles utilisées dans vos scénarios (saisir n° de la SV-1) dans les variables vout1, vout2 et vout3. L’exemple donne SV n°6, SV n°3 et SV n°4
  • renseignez les noms des 3 états dans le tableau titres
let vout1=5,vout2=2,vout3=3;  
let titres=["Filtration arrêtée","Filtration automatique","Filtration forcée"];
let labels=["0","A","I"];

//ne rien modifier ci-dessous
let st=0;let etat=["off","off","off"];
if (datasources["STATUS"]["response"]["vout" + vout1] ==1) {st=0;etat[0]="on";}
if (datasources["STATUS"]["response"]["vout" + vout2] ==1) {st=1;etat[1]="on";}
if (datasources["STATUS"]["response"]["vout" + vout3] ==1) {st=2;etat[2]="on";}
return `
<center>
<p style="font-size:16px;">${titres[st]}</p>
<div class="bouton2" style="width:141px;height:45px;border-radius:22px">
    <div class="indicator-light2 vout${vout1} voutta${vout1} ${etat[0]}" onclick="newAJAXCommand('io.cgi?vout=${vout1}');" style="width:30px;height:30px;margin-top:0px"></div>
    <div class="indicator-light2 vout${vout2} voutta${vout2} ${etat[1]}" onclick="newAJAXCommand('io.cgi?vout=${vout2}');" style="width:30px;height:30px;margin-top:0px"></div>
    <div class="indicator-light2 vout${vout3} voutta${vout3} ${etat[2]}" onclick="newAJAXCommand('io.cgi?vout=${vout3}');" style="width:30px;height:30px;margin-top:0px"></div>
    <div style="font-size:10px;">
       <div style="position:absolute;margin-left:15px;margin-top:36px;" >${labels[0]}</div>
       <div style="position:absolute;margin-left:62px;margin-top:36px;">${labels[1]}</div>
       <div style="position:absolute;margin-left:112px;margin-top:36px;">${labels[2]}</div>
    </div></div>
<center>
`;
  • Ecrivez 3 scénarios en remplaçant SV1 SV2 et SV3 par les SV utilisées :

    scène 1 : appui bouton 1
    événement : SV1
    action : OFF
    résultat : SV2 ; SV3

    scène 2 : appui bouton 2
    événement : SV2
    action : OFF
    résultat : SV1 ; SV3

    scène 3 : appui bouton 3
    événement : SV3
    action : OFF
    résultat : SV1 ; SV2

cdt

Nikel !!!
c’est ce que je cherchais.
Merci fgtoul, effectivement c’est plus « sexy », ça serait peut etre bien de développer un widget de ce genre nativement dans les V4 non ?

euh… petite question
je ne comprends pas la premiere étape « …vers le fichier status.xml »

créez une source de données comme ceci

Si vous ne la nommez pas STATUS, vous devrez mettre le nom à jour dans le code

aaaah ok !!!
j’avais pas bien saisi le truc du fichier status.xml, c’est un fichier qui se trouve dans l’IPX c’est ça ?
et le code utilise ce fichier pour fonctionner

Merci pour l’efficacité et la rapidité de la réponse !

oui c’est bien ça :slight_smile: .

Bonjour twido,

quand vous créez la source de données optimisez le délai de rafraichissement selon votre besoin.
Un délai de 3 secondes veut dire que votre widget affichera un changement d’état au maximum en 3 secondes.

Plus le délai et cours, plus c’est lourd pour l’IPX. A vous de voir selon votre config.

Bonne journée

oui, mais quand c’est un widget avec retour d’état, plus de 3s ça peut paraitre long pour avoir un retour.

En règle générale, si je n’ai que des données analogiques à récupérer dans mes widgets, j’allonge le délai entre 5 à 10s. Pour seulement de la météo, je mets 300s, mais pour des retours d’entrées/sorties, je mets souvent 3s.
J’ai même 0.5s sur un dashboard peu utilisé, sorte de monitoring de l’ipx800 avec tous les retours en html et graphique en temps réel, l’ipx800 supporte très bien :wink: , d’ailleurs, c’est le paramétrage utilisé pour le widget « Sonomètre » que j’ai développé et proposé dans le wiki

Voilà, widget en place et fonctionnel :grinning:
j’ai mis 1s pour le rafraichissement de la source de données ça me convient, d’autant que mon IPX n’est pas surchargé pour l’instant …:wink:

encore merci pour votre assistance, réctif et efficace ça fait plaisir .