Différences entre les versions de « La mesure du temps »

De GCE Electronics
Aller à la navigation Aller à la recherche
 
(169 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{sommaire|niveau=1|flottant=left}}
 
{{Infobox IPX800
{{sommaire|niveau=2|flottant=left}}
 
==Présentation=={{Infobox IPX800
| titre = LE TEMPS
| titre = LE TEMPS
| image = Contribution.png
| image = IPX chrono pres.JPG
| famille = Widgets
| famille = Widgets
| date-create = 07/11/2020
| date-create = 07/11/2020
| date-update = 07/11/2020
| date-update = 11/11/2020
| auteur = fgtoul
| auteur = fgtoul
}}
}}
==Présentation==
L'ipx800 propose des fonctionnalités permettant la mesure du temps.


Dans cet article, nous verrons comment utiliser ces différentes fonctions afin de déclencher des scènes à heures fixes, à intervalle régulier, ou encore de créer des retardateurs, des temporisations ou des chronomètres
L'ipx800 propose des fonctionnalités permettant la mesure du temps.
 
Dans cet article, nous verrons comment utiliser ces différentes fonctions afin de  
 
* mettre l'horloge interne à l'heure,
* déclencher des scènes à heures fixes,  
* exécuter une commande à intervalle régulier,  
* utiliser des retardateurs, des temporisations,
* créer des compteurs horaires, des comptes à rebours.
 
 
En dernière partie de cet article, je vous propose quelques widgets personnalisés, que vous pourrez adapter à vos besoins.
 
Bref, vous l'avez compris, nous allons prendre notre temps [[fichier:smile.png|18px]]
 
 


[[fichier:IPX-mesure-du-temps.JPG|center|700px]]
[[fichier:IPX-mesure-du-temps.JPG|center|500px]]


==Horloge interne==
==Horloge interne==
===Mode automatique===
===Mode automatique===
L'ipx800 possède une horloge interne compatible avec les serveurs de temps NTP ('''N'''etwork '''T'''ime '''P'''rotocol). Elle est donc capable de mettre régulièrement son horloge à l'heure exacte et commute automatiquement à l'heure d'été ou à l'heure d'hiver.
L'ipx800 possède une horloge interne compatible avec les serveurs de temps NTP ('''N'''etwork '''T'''ime '''P'''rotocol). Elle est donc capable de mettre régulièrement son horloge à l'heure exacte et commute automatiquement à l'heure d'été ou à l'heure d'hiver.
Ligne 39 : Ligne 55 :
L'Horloge interne de l'Ipx800 V4 maintiendra l'heure à jour au fil du temps, mais une légère dérive est possible. Il convient alors de faire une remise à l'heure régulièrement.
L'Horloge interne de l'Ipx800 V4 maintiendra l'heure à jour au fil du temps, mais une légère dérive est possible. Il convient alors de faire une remise à l'heure régulièrement.


Sur les sites sans connexion Internet, il est possible d'installer des serveurs NTP autonomes GPS ou Radio. Ceci permettra la mise à l'heure automatique en toute circonstance.


===Le widget===
===Le widget===
Ligne 46 : Ligne 63 :


===Les plages horaires===
===Les plages horaires===
====Création d'une plage horaire====


Pour déclencher des actions en fonction du calendrier ou de l'heure, l'IPX800 propose des périphériques de type ''Plages Horaires''.
Pour déclencher des actions en fonction du calendrier ou de l'heure, l'IPX800 propose des périphériques de type ''Plages Horaires''.
Ligne 51 : Ligne 70 :
Ces plages horaires doivent être initialisées dans le menu Périphériques et peuvent être utilisées dans les scénarios.
Ces plages horaires doivent être initialisées dans le menu Périphériques et peuvent être utilisées dans les scénarios.


Pour plus d'information, je vous invite à lire la documentation de l'IPX800 V4.
Pour plus d'information sur la création d'une plage horaire, je vous invite à lire la documentation de l'IPX800 V4.


[[fichier:TimerV4.JPG]]
[[fichier:TimerV4.JPG]]


==Délais et Retards==
====Utilisation dans les scénarios====
 
Supposons que nous voulions démarrer un aérateur, tous les jours entre 7:00 et 9:00.
Configurons une plage horaire comme ci-dessus, et créons un scénario pour créer le lien avec la sortie relais qui pilote cet aérateur.
 
[[fichier:plageHoraire.JPG]]
 
Dans le bloc ''Plage horaire'', sélectionnons la plage horaire, puis affectons le relais dans le champ ''Résultat''.
 
A 7:00 chaque jour, le périphérique ''Plage Horaire'' passe à l'état ON. La condition de l'événement du scénario est Vraie, le Relais passe à l'état ON. L'aérateur peut rafraîchir l'atmosphère.
 
A 9:00 chaque jour, le périphérique ''Plage Horaire'' repasse à l'état OFF, ce qui rend la condition fausse dans le scénario. La commande OFF est alors appliquée au relais, l'aérateur est arrêté.
 
==Délais et temporisations==


===Définitions===
===Définitions===
L'ipx800 permet le réglage de temporisations et de retardements sur ses sorties relais et ses sorties virtuelles.
L'ipx800 permet le réglage de retards et de temporisations sur ses sorties relais et ses sorties virtuelles.
Ces paramètres, nommés Ta et Tb, doivent être réglés via le menu ''Périphériques''
 
Ces paramètres, respectivement appelés Ta et Tb, doivent être réglés via le menu ''Périphériques''.
 
Exemple avec les sorties virtuelles :


[[fichier:SVTaTb.JPG]]


* '''Le paramètre Ta''' représente le retard à l'enclenchement. Sa valeur représente le nombre d'unités de temps (secondes ou dixièmes de secondes) qui s'écouleront avant que la sortie passe à l'état ON, consécutivement à une commande ou un événement.


Mon but n'est pas ici de vous expliquer leur fonctionnement, cependant je vous invite à lire [[Jouons_un_peu_:_Les_Temporisations_Ta_et_Tb|cet article]] pour plus d'informations.
  Remarque :
  Pendant le décompte, les indicateurs d'état affichent le texte 'TA' [[fichier:indicateurTA.JPG|33px|indicateur de sortie sur le dashboard]].
  Vous pouvez également observer cette instance de passage à l'état ON dans le fichier Status.xml grâce aux entrées nommées ''outaon'' pour chaque sortie physique,  et ''votaon'' pour chaque sortie virtuelle.
 
  [[fichier:outtaon.jpg|175px|border|Status.xml : TA pour sorties physiques]]  [[fichier:votaon.jpg|159px|border|Status.xml : TA pour sorties virtuelles]]
   
  La valeur 0 signifie qu'aucun décompte n'est en cours, la valeur 1 indique un décompte en cours.
 
  Status.xml est accessible à l'adresse <nowiki>http://IP_IPX800/user/status.xml</nowiki>
 
* '''Le paramètre Tb''' représente le temps qui s'écoulera avant que la sortie physique ou virtuelle ne repasse automatiquement à l'état OFF.
 
 
 
Mon but n'est pas ici de vous expliquer leur fonctionnement, cependant, si vous souhaitez un complément d'information, je vous invite à lire '''[[Jouons_un_peu_:_Les_Temporisations_Ta_et_Tb|cet article]]'''.


===L'unité de temps===
===L'unité de temps===
Ligne 70 : Ligne 121 :
Dans le menu Réseau, ouvrez l'onglet ''Paramètres''
Dans le menu Réseau, ouvrez l'onglet ''Paramètres''


En bas d'écran, cochez la case ''Division Ta/Tb'' si vous souhaitez que le temps soit mesuré en dixièmes de secondes.
En bas d'écran, cochez la case ''Division Ta/Tb'' si vous souhaitez que le temps soit mesuré en '''dixièmes de secondes'''.


Par défaut, cette case est décochée, l'ipx800 mesure le temps en secondes.
Par défaut, cette case est décochée, l'ipx800 mesure le temps en '''secondes'''.


[[fichier:DivisionTaTb.JPG]]
[[fichier:DivisionTaTb.JPG]]


===Le paramètre Ta===
===Les sorties virtuelles clignotantes ===
Le paramètre '''Ta''' représente le retard à l'enclenchement. Sa valeur représente le nombre d'unités de temps qui s'écouleront avant que la sortie passe à l'état ON, consécutivement à une commande ou un événement.
 
Lorsqu'une sortie physique ou virtuelle reçoit une commande ON alors que Ta est configuré, elle commence à décompter le temps imparti avant de passer à l'état ON.
 
 
Remarque :
Pendant le décompte, vous pouvez observer cette instance de passage à l'état ON dans le fichier Status.xml grâce aux entrées nommées ''outaon'' pour les sorties physiques, et ''votaon'' pour les sorties virtuelles.
La valeur 0 signifie qu'aucun décompte n'est en cours, la valeur 1 indique un décompte en cours.
Le fichier Status.xml présente un paramètre pour chaque sortie physique et chaque sortie virtuelle.
Il est accessible à l'adresse <nowiki>http://IP_IPX800/user/status.xml</nowiki>


===Le paramètre Tb===
Pour mesurer un intervalle de temps grâce à l'ipx800, il faut avoir recours à une sortie virtuelle que nous ferons passer alternativement de l'état ON à l'état OFF, selon un rythme bien défini, grâce aux paramètres '''Ta''' et '''Tb''' de cette sortie. Le rythme imposé constituera alors une sorte de métronome que nous pourrons utiliser dans nos scénarios afin d'exécuter des commandes à intervalle de temps régulier.
Le paramètre '''Tb''' représente le temps qui s'écoulera avant que la sortie physique ou virtuelle ne repasse automatiquement à l'état OFF.


[[Fichier:metronome.jpg|32px|chrono]]


===Les sorties virtuelles clignotantes===
Pour mesurer un intervalle de temps grâce à l'ipx800, il faut avoir recours à une sortie virtuelle que nous ferons passer alternativement de l'état ON à l'état OFF, selon un rythme bien défini. Ce rythme appliqué aux changements d'état, vous l'avez compris, sera défini grâce aux paramètres '''Ta''' et '''Tb''' de cette sortie.


====Création d'une sortie virtuelle clignotante====
====Création d'une sortie virtuelle clignotante====
Ligne 105 : Ligne 142 :


Il ne reste plus qu'à créer un scénario pour réactiver cette sortie virtuelle à chaque fois qu'elle repasse à l'état OFF.
Il ne reste plus qu'à créer un scénario pour réactiver cette sortie virtuelle à chaque fois qu'elle repasse à l'état OFF.
Nous pourrons alors enclencher une action à chaque fois que cette sortie changera d'état. Nous obtenons alors une sorte de cadenceur que nous pourrons utiliser dans tous nos autres scénarios.


[[fichier:SvClignotante1.JPG]]
[[fichier:SvClignotante1.JPG]]


====Création d'un chronomètre simple====
====Création d'un chronomètre simple====
Pour créer notre chronomètre, nous aurons bien sûr besoin de notre sortie virtuelle clignotante, mais aussi d'un compteur qui pourra enregistrer le nombre de secondes écoulées.
Pour créer notre chronomètre, nous avons bien sûr besoin de notre sortie virtuelle clignotante, mais aussi d'un compteur pour enregistrer le nombre de secondes écoulées.
 
Ce compteur est incrémenté à chaque fois que la sortie virtuelle change d'état.
Ce compteur est incrémenté à chaque fois que la sortie virtuelle change d'état.


Ligne 126 : Ligne 163 :
Supposons que nous voulions mesurer le temps de fonctionnement d'une pompe, celle-ci étant connectée à un relais de l'ipx800 v4.
Supposons que nous voulions mesurer le temps de fonctionnement d'une pompe, celle-ci étant connectée à un relais de l'ipx800 v4.


il suffit d'ajouter une condition dans la clause événement de notre scénario pour que notre chronomètre démarre en même temps que la pompe.
il suffit d'ajouter le relais de la pompe dans la clause ''événement'' de notre scénario afin que notre chronomètre démarre en même temps que la pompe.


Lorsque le relais repassera à l'état OFF, notre chronomètre s'arrêtera. La valeur du compteur représentera alors le temps de fonctionnement, en secondes.
Lorsque le relais repasse à l'état OFF, notre chronomètre s'arrête. La valeur du compteur représente alors le temps de fonctionnement, en secondes.


[[fichier:SVclignotante4.JPG]]
[[fichier:SVclignotante4.JPG]]
Ligne 134 : Ligne 171 :
====Création d'un compte à rebours simple====
====Création d'un compte à rebours simple====


Sur le même principe que notre chronomètre, nous avons besoin d'une ''sortie virtuelle clignotante' et d'un compteur.
Sur le même principe que notre chronomètre, nous avons besoin d'une ''sortie virtuelle clignotante'' et d'un compteur.
En initialisant ce compteur à une valeur donnée, il suffira de le décrémenter de 1 unité de temps à chaque fois que notre sortie virtuelle passera à l'état OFF, jusqu'à ce que le compteur revienne à zéro.
En initialisant ce compteur à une valeur donnée, il suffira de le décrémenter de 1 unité de temps à chaque fois que notre sortie virtuelle clignotante passera à l'état OFF, jusqu'à ce que le compteur revienne à zéro.
La valeur 0 du compteur inhibera le décompte.
La valeur 0 du compteur inhibera le décompte.


Ligne 142 : Ligne 179 :
[[fichier:SVclignotante2.JPG]]
[[fichier:SVclignotante2.JPG]]


Affectons notre sortie virtuelle clignotante aux blocs ''Sortie virtuelle'' et assignons notre compteur de temps au bloc correspondant.
Affectons notre sortie virtuelle clignotante aux deux blocs ''Sortie virtuelle'' et assignons notre compteur de temps au bloc correspondant.
Configurez une décrémentation correspondante à 1 seconde, selon votre unité de temps.
 
Configurons une décrémentation correspondant à 1 seconde, selon votre unité de temps.


[[fichier:SVclignotante3b.JPG]]
[[fichier:SVclignotante3b.JPG]]
Ligne 149 : Ligne 187 :
====Utilisation du compte à rebours====
====Utilisation du compte à rebours====


Créer un compte à rebours ayant toujours la même valeur au démarrage n'a de sens sur l'IPX800 V4 que si vous souhaitez exploiter la valeur du décompte en cours, ce que ne permettent ni Ta, ni Tb.
Pour notre exemple, nous souhaitons éteindre un sèche-serviette soufflant de salle de bain 30 secondes après avoir quitté la pièce. Nous avons besoin d'une sortie virtuelle clignotante (ta=0 tb=1) et d'une seconde sortie virtuelle, sur laquelle nous paramètrerons Ta=0 et Tb=0. Nommons la VO2.
 
Voici les scénarios à créer
 
* Scène 1 : déclenchons notre compte à rebours lorsque le relais pilotant l'éclairage passe à l'état OFF<br><br>Attribuons le relais qui pilote notre éclairage au bloc correspondant. <br><br>[[fichier:SV_rebour2b.JPG]]<br><br>Définissez la commande d'initialisation du compteur dans le bloc correspondant. Le compteur devra être initialisé à 30 pour notre exemple. <br><br>[[fichier:SV_rebour3.JPG]]
 
 
* Scène 2 : tant que le compteur est supérieur ou égal à 1, maintenons la sortie virtuelle VO2 à l'état ON.<br><br>[[fichier:SV_rebour4.JPG]]<br><br>Dans le bloc Compteur, renseignons '''1''' dans le champ ''valeur''<br><br>Attribuons la sortie virtuelle VO2 au bloc correspondant
 
 
* Scène 3 : Décrémentons notre compteur toutes les secondes lorsque notre sortie clignotante repasse à l'état OFF<br><br>[[fichier:SV_rebour5.JPG]]<br><br>En événement, attribuez la sortie virtuelle clignotante au 1er bloc, puis la sortie virtuelle VO2 au second bloc.<br><br>En résultat, attribuez la sortie virtuelle clignotante au bloc correspondant.<br><br>Définissez une commande de Décrémentation dans le bloc 'Compteur'<br><br>[[fichier:SVclignotante3b.JPG]]


Cependant, pour notre exemple, supposons que nous souhaitions éteindre un sêche-serviette soufflant de salle de bain 30 secondes après avoir quitté la pièce. Nous aurons besoin d'une seconde sortie virtuelle, sur laquelle nous paramètrerons Ta=0 et Tb=0.


* déclenchons notre compte à rebours lorsque le relais pilotant l'éclairage passe à l'état OFF<br><br>Attribuons le relais qui pilote notre éclairage au bloc correspondant. <br><br>[[fichier:SV_rebour2b.JPG]]<br><br>Définissez la commande d'initialisation du compteur dans le bloc correspondant. Le compteur devra être initialisé à 30 pour notre exemple. <br><br>[[fichier:SV_rebour3.JPG]]
* Scène 4 : il ne reste plus qu'à éteindre le sèche_serviette à la fin du décompte, lorsque la sortie virtuelle VO2 passe à l'état OFF<br><br>[[fichier:SV_rebour6.JPG]]<br><br>Attribuons la sortie virtuelle VO2 au bloc idoine,<br><br>Attribuons le relais du sèche-serviette en résultat.


* tant que le compteur est supérieur ou égal à 1, maintenons la sortie virtuelle n°2 à l'état ON.
====Compte à rebours variable====
Dans '''[[Compte_à_rebours_variable|cet article]]''', vous trouverez l'exemple d'un compte à rebours variable.


[[fichier:SV_rebour4.JPG]]
Merci @Teebex pour cette puissante fonctionnalité aux usages multiples.


Personnellement, je l'utilise afin de piloter manuellement la filtration de la piscine, en marche forcée pour une durée variable en fonction des besoins. La plage de temps est incrémentée heure par heure, jusqu'à 8 maximum. Dès que la valeur du compteur est supérieure ou égale à 1, la filtration se met en marche pour la durée fixée et s'arrête automatiquement lorsque le décompte est terminé.


* Décrémentons notre compteur toutes les secondes lorsque notre sortie clignotante repasse à l'état OFF
[[fichier:ReboursVariable.JPG]]


Ce widget, comportant un code complexe, sera présenté plus bas dans une version simplifiée.


Dans [[Compte_à_rebours_variable[cet article]], vous trouverez l'exemple d'un compte à rebours variable. Merci @Teebex pour cette puissante fonctionnalité aux usages multiples.
==Quelques Widgets personnalisés==


==Quelques Widgets==
'''Attention : Dans ce qui va suivre, nous allons voir comment mesurer le temps et afficher le résultat des mesures à l'écran. Nous utiliserons pour cela les fonctions Ta et Tb sur les relais ou sorties virtuelles, et une source de données qui va solliciter assez fréquemment le fichier Status.xml de l'ipx800.<br>Utilisez ces widgets avec parcimonie, n'utilisez pas plusieurs fois le même compteur interne.'''


Nous allons créer quelques widgets en code HTML afin d'afficher nos mesures de temps (chronomètres, Ta, Tb, ...)
Nous allons créer quelques widgets en code HTML afin d'afficher nos mesures de temps (chronomètres, Ta, Tb, ...).


Pour cela, vous devez d'abord créer une source de données sur le dashboard.Nommez cette source '''STATUS'''
 
Pour cela, vous devez d'abord créer une source de données sur le dashboard.Nommez cette source '''STATUS'''.
 
La mesure du temps par ces méthodes dépend des performances de votre Ipx800. Des écarts de quelques secondes peuvent parfois être constatés.


[[fichier:DataSTATUS.JPG]]
[[fichier:DataSTATUS.JPG]]


===Affichage du retard Ta d'une sortie===


Le décompte du temps Ta d'une sortie se fait dans la memoire de l'IPX800 et ne permet pas à l'utilisateur de connaître le temps restant.
===Widget 1 : Affichage du temps de fonctionnement de l'ipx800===
 
[[fichier:Wuc0Widget2.JPG]]
 
 
Dans le fichier Status.xml, l'ipx800 v4  met à notre disposition le paramètre ''wuc0'' qui représente le temps écoulé depuis son dernier redémarrage.
 
Il est exprimé en secondes.
 
Nous allons créer un petit widget de type HTML, qui récupèrera cette valeur et la convertira en Jours, heures, minutes et secondes et calculera la date du dernier démarrage.
 
Vous devez avoir créé la Source de données STATUS au préalable.
 
 
Ajoutez un widget type HTML, 1 bloc de hauteur puis collez le code ci-dessous.
 
<div class="mw-collapsible mw-collapsed" data-expandtext="{{int:show}}" data-collapsetext="{{int:hide}}" style="width:730px;">
  '''Afficher le code du widget'''
 
<div class="mw-collapsible-content">
 
<source>
function appendLeadingZeroes(n){
  if(n <= 9){
    return "0" + n;
  }
  return n
}
 
let reste=datasources["STATUS"]["response"]["wuc0"];
var lastReboot = new Date( Date.now() - (reste * 1000) );
let formatted_date = appendLeadingZeroes(lastReboot.getDate()) + "/" + appendLeadingZeroes(lastReboot.getMonth() + 1) + "/" + lastReboot.getFullYear()  + " " + appendLeadingZeroes(lastReboot.getHours()) + ":" + appendLeadingZeroes(lastReboot.getMinutes()) + ":" + appendLeadingZeroes(lastReboot.getSeconds())
 
    let result='';
    let nbJ=Math.floor(reste/(3600*24));
    reste -= nbJ*24*3600;
    let nbH=Math.floor(reste/3600);
    reste -= nbH*3600;
    let nbM=Math.floor(reste/60);
    reste -= nbM*60;
    let nbS=reste;
 
    if (nbJ>=0)
        result=result+appendLeadingZeroes(nbJ)+'j ';
    if (nbH>=0)
        result=result+appendLeadingZeroes(nbH)+'h ';
    if (nbM>=0)
        result=result+appendLeadingZeroes(nbM)+'m ';
    if (nbS>=0)
        result=result+appendLeadingZeroes(nbS)+'s';
 
return `
<link href="https://fonts.googleapis.com/css2?family=Space+Mono:wght@400&display=swap" rel="stylesheet">
<center> 
<div style="font-family: 'Space Mono', monospace;font-size:18px;margin-top:5px;">${result}</div>
<br>
<div style="font-family: 'Space Mono', monospace;font-size:10px;">${formatted_date}</div>
</center>
`;
 
</source>
</div></div>
 
===Widget 2 : Affichage du retard Ta d'une sortie===
 
[[fichier:TaWidget2.JPG]]
 
Le décompte du temps Ta d'une sortie se fait dans la mémoire de l'IPX800 et ne permet pas à l'utilisateur de connaître le temps restant.
 
Nous devons par conséquent utiliser une sortie virtuelle clignotante et un compteur.
 
Pour afficher le temps restant, il serait logique d'utiliser un compte à rebours initialisé au même nombre de secondes que le paramètre Ta, puis laisser les secondes s'écouler jusqu'à 0.
 
Cependant, Ta peut prendre une valeur maximale de 13743 unités de temps alors que les commandes s'appliquant aux compteurs ne peuvent utiliser que des valeurs inférieures à 256. Il faudrait donc intervenir plusieurs fois sur un même compteur pour l'initialiser à une valeur supérieure à 256.
 
Nous utiliserons donc un chronomètre classique. Nous obtiendrons le temps restant avant le changement d'état de la sortie, en faisant une soustraction de  la valeur du compteur à la valeur de Ta.
 
Pour notre exemple, nous souhaitons démarrer un réchauffeur 180 secondes après la pompe de circulation. Pour ne pas trop solliciter l'IPX800, nous ferons clignoter notre Sortie virtuelle toutes les 5 secondes seulement, le compteur sera donc incrémementé de 5 en 5.
 
Le démarrage de la pompe de circulation est le déclencheur. A ce moment, une commande ON est envoyée au relais du réchauffeur, le comptage commence simultanément puisque c'est à et instant précis que l'IPX800 commence le décompte du Ta.
 
Nous utiliserons
* une sortie virtuelle clignotante (Ta=0 Tb=5s) que nous nommerons SV1,
* une sortie virtuelle avec Ta=0, Tb=0, que nous nommerons SV2,
* un compteur CPT1,
* une sortie Relais, connectée à la pompe de circulation, nommé RELAIS1,
* une sortie relais connectée au réchauffeur, nommée RELAIS2, configurée avec Ta=30s
 
'''Ecrivons les 4 scénarios nécessaires.'''
 
Ces scénarios étant similaires aux exemples fournis plus haut, nous allons utiliser une transcription simplifiée.
 
'''Scène 1 :''' Déclencheur<br>événement : RELAIS1<br>Action : ON/OFF<br>Résultat : RELAIS2 , SV2
 
'''Scène 2 :''' Incrémentation<br>événement : NON SV1<br>Action : ON<br>Résultat : CPT1 (Incrémentation = 5)
 
'''Scène 3 :''' Entretien SV clignotante<br>événement : SV2 ET NON SV1<br>Action : ON<br>Résultat : SV1
 
'''Scène 4 :''' Arrêt du comptage<br>événement : RELAIS2<br>Action : OFF<br>Résultat : SV2
 
'''Créons un widget de type HTML 1 bloc et collons le code'''
 
Les 3 premières lignes doivent être adaptées en fonction des ressources utilisées sur l'Ipx800
 
 
<div class="mw-collapsible mw-collapsed" data-expandtext="{{int:show}}" data-collapsetext="{{int:hide}}" style="width:730px;">
  '''Afficher le code du widget'''
 
<div class="mw-collapsible-content">
 
<source>
let rly=1;//Relais du rechauffeur / renseignez 0 pour Relais 1
let rst=180 - datasources["STATUS"]["response"]["cpt0"];//ici nous utilisons le compteur n°1 de l'ipx800
let r=datasources["STATUS"]["response"]["led"+rly];
 
return `
<span style="margin-left:8px;">Temps restant avant activation :</span> 
<div style="font-size:18px;margin-top:10px;margin-left:20px;width:150px;text-align:right;background-color:#333">${rst}</div>
<div class="indicator-light2  led${rly]  ledta${rly} ${r==1 ? 'on' : ''}" style="position:absolute;left:190px;top:10px;"></div>
`;
</source>
</div></div>
 
===Widget 3 : Affichage du délai Tb d'une sortie===
 
[[fichier:TbWidget.JPG]]
 
Comme pour Ta, la valeur résiduelle de Tb en cours de décompte n'est pas accessible par l'utilisateur. Il faut donc avoir recours à un chronomètre externe.
 
'''Exemple :'''
Le radiateur soufflant de la salle de bains est relié à un relais de l'IPX800, sur lequel nous avons programmé une temporisation Tb=600 afin que tout se coupe automatiquement après 10 minutes de fonctionnement.
 
Si nous voulons afficher le temps de fonctionnement restant à chaque mise en marche, nous devons déclencher un comptage lors de la mise en route du chauffage, c'est à dire lorsque le relais passe ON. C'est en effet à cet instant précis que l'IPX800 commence le décompte de la temporisation.
 
Nous utiliserons
* une sortie virtuelle clignotante (Ta=0, Tb=5s) que nous nommerons SV1,
* une sortie virtuelle avec Ta=0, Tb=0, que nous nommerons SV2,
* un compteur CPT1,
* une sortie relais connectée au radiateur soufflant, nommée RELAIS2, configurée avec Tb=600s
 
'''Ecrivons les 4 scénarios nécessaires.'''
 
 
'''Scène 1 :''' Déclencheur<br>événement : RELAIS2<br>Action : ON<br>Résultat :  SV2 , CPT1 (Set = 0)
 
'''Scène 2 :''' Incrémentation<br>événement : NON SV1<br>Action : ON<br>Résultat : CPT1 (Incrémentation = 5)
 
'''Scène 3 :''' Entretien SV clignotante<br>événement : SV2 ET NON SV1<br>Action : ON<br>Résultat : SV1
 
'''Scène 4 :''' Arrêt du comptage<br>événement : NON RELAIS2<br>Action : OFF<br>Résultat : SV2
 
'''Créons un widget de type HTML 1 bloc et collons le code'''
les 3 premières lignes doivent être adaptées aux rssources utilisées.
 
<div class="mw-collapsible mw-collapsed" data-expandtext="{{int:show}}" data-collapsetext="{{int:hide}}" style="width:730px;">
  '''Afficher le code du widget'''
 
<div class="mw-collapsible-content">
 
<source>
let rly=2; //numéro du relais connecté au radiateur / renseignez 0 pour le relais n°1
let rst=600 - datasources["STATUS"]["response"]["cpt0"]; //renseignez cpt0 pour compteur n°1
let r=datasources["STATUS"]["response"]["led"+rly];
 
return `
<span style="margin-left:8px;">Secondes restant avant désactivation :</span> 
<div style="font-size:18px;margin-top:10px;margin-left:20px;width:150px;text-align:right;background-color:#333">${rst}</div>
<div class="indicator-light2  led${rly} ledta${rly} ${r==1 ? 'on' : ''}" style="position:absolute;left:190px;top:10px;"></div>
`;
</source>
</div></div>
 
===Widget 4 : Affichage d'un compteur horaire de fonctionnement ===
 
[[fichier:CptHWidget.JPG]] [[fichier:CptHWidget2.JPG]]
 
Le comptage du temps de fonctionnement d'un appareil est en soi assez simple : il suffit de chronométrer le temps pendant lequel le relais correspondant reste à l'état ON.
 
Pour notre exemple, nous souhaitons comptabiliser le temps de fonctionnement de la pompe à chaleur, connectée au relais 1 de notre IPX800.
 
Le passage à l'état ON du relais est le déclencheur. Nous ferons alors 'clignoter' notre sortie virtuelle jusqu'à l'ouverture du relais.
 
Nous utiliserons
* une sortie virtuelle clignotante (Ta=0 Tb=1s) que nous nommerons SV1,
* une sortie virtuelle pour modifier le format d'affichage (décimal ou sexagésimal)
* un compteur CPT1,
* une sortie Relais, connectée à la pompe à chaleur, nommée RELAIS1,
 
 
'''Ecrivons les 3 scénarios nécessaires.'''
 
 
'''Scène 1 :''' Déclencheur<br>événement : RELAIS1 <br>Action : ON<br>Résultat : SV1
 
'''Scène 2 :''' Incrémentation<br>événement : NON SV1<br>Action : ON<br>Résultat : CPT1 (Incrémentation = 1)
 
'''Scène 3 :''' Entretien SV clignotante<br>événement : RELAIS1 ET NON SV1<br>Action : ON<br>Résultat : SV1
 
 
'''Créons un widget de type HTML 1 bloc et collons le code'''
 
Les 3 premières lignes de code sont à adapter en fonction des ressources utilisées sur l'Ipx800.
 
<div class="mw-collapsible mw-collapsed" data-expandtext="{{int:show}}" data-collapsetext="{{int:hide}}" style="width:730px;">
  '''Afficher le code du widget'''
 
<div class="mw-collapsible-content">
 
<source>
let d=datasources["STATUS"]["response"];//nommez la source de données
let reste=d["cpt0"];//renseignez cpt0 pour le compteur n°1
let vOut=46;//renseignez 46 pour SV n47 / choix du format d'affichage
 
 
//ne rien modifier ci-dessous
let result='';
let affichage=d["vout"+vOut]==1; //0 pour un affichage numérique ; 1 pour un affichage sexagésimal
let l='',l1='';
 
if (affichage){
    l="hh:mm:ss";
    l1='on';
    let nbH=Math.floor(reste/3600);
    reste -= nbH*3600;
    let nbM=Math.floor(reste/60);
    reste -= nbM*60;
    let nbS=reste;
    if (nbH>=10){result= nbH + ':';
        }else{
                result= ("0"+nbH).substring(("0"+nbH).length, ("0"+nbH).length - 2)+':';
        }
result=result+("0"+nbM).substring(("0"+nbM).length, ("0"+nbM).length - 2)+':';
    result=result+("0"+nbS).substring(("0"+nbS).length, ("0"+nbS).length - 2);
}else{
result=parseFloat(reste/3600).toFixed(2);
    l="0000.00";
}
return `
<link href="https://fonts.googleapis.com/css2?family=Space+Mono:wght@400&display=swap" rel="stylesheet">
<input type="button" id="bouton2" class="bouton2 vout${vOut} btnV4vout${vOut} ${l1}" style="padding: 2px 0.5em 2px 0.5em;font-size:10px;position:absolute;margin-left:5px;margin-top: -25px;width: 85px;font-size:14px;text-align:center;" name="0000.00|hh:mm:ss" onclick="newAJAXCommand('io.cgi?vout=${vOut}');" value="${l}">
<center> 
<div style="font-family: 'Space Mono', monospace;font-size:28px;margin-top:35px;">${result}</div>
</center>
`;
 
</source>
</div></div>
 
===Widget 5 : Compte à rebours variable===
 
Nous allons créer un widget pour utiliser le compte à rebours variable.
 
Pour plus d'explications sur son fonctionnement, je vous invite à lire [[Compte à rebours variable|l'article de @Teebex]].
 
Comme je l'ai dit plus haut, j'utilise ce code pour piloter la marche forcée de la filtration de piscine avec temporisation.
 
C'est donc l'exemple que nous prendrons ici, avec un code simplifié.
 
 
[[fichier:ReboursV.JPG]]
 
nous aurons besoin de
* Pour le compte à rebours :
** 1 compteur que nous nommerons CPT1
** 1 sortie virtuelle clignotante toutes les minutes (Ta=0 Tb=60), nous la nommerons SV1
** 1 sortie relais connectée à la pompe de filtration, nous la nommerons RELAIS1
* Pour définir la durée du compte à rebours :
** 1 sortie virtuelle pour ajouter 1 heure, nous la nommerons SV5
** 1 sortie virtuelle pour ôter 1 heure, nous la nommerons SV6
** 1 sortie virtuelle pour la remise à 0, nous la nommerons SV7
 
'''Créons les scénarios nécessaires au compte à rebours :'''
 
'''scène 1 :''' démarrage / arrêt du compte à rebours
Evénement : CPT1 (Valeur = 1)
Action : ON/OFF
Résultat : RELAIS1
 
'''Scène 2 :''' Décompte des minutes
Evénement :NON SV1 ET RELAIS1
Action :ON
Résultat : CPT1 (Décrémentation 1) ; SV1


Nous devons par conséquent utiliser une sortie virtuelle clignotante et un compteur qui serviront de chronomètre.


===Affichage du délai Tb d'une sortie===
'''Créons les scénarios pour la gestion de la durée :'''


Comme pour Ta, la valeur de Tb n'est pas accessible par l'utilisateur. Il faut donc avoir recours à un chronomètre externe.
'''Scène 3 :''' Ajout 1 heure / Max=23h
Evénement : SV5 ET NON CPT1(valeur 1321)
Action : ON
Résultat : CPT1 (Incrémentation 60)
 
'''Scène 4 :''' retrait 1 heure
Evénement : SV6 ET CPT1(valeur 60)
Action : ON
Résultat : CPT1 (Décrémentation 60)
 
'''Scène 5 :''' RAZ
Evénement : SV6
Action : ON
Résultat : CPT1 (Set 0)
 
'''Créons un widget de type HTML 2 blocs et collons le code'''
 
Les 4 premières lignes de code sont à adapter en fonction des ressources utilisées sur l'Ipx800.
 
<div class="mw-collapsible mw-collapsed" data-expandtext="{{int:show}}" data-collapsetext="{{int:hide}}" style="width:730px;">
  '''Afficher le code du widget'''
 
<div class="mw-collapsible-content">


===Affichage d'un compteur horaire de fonctionnement ===
<source>
let vOutPlus=8; //sortie virtuelle pour +1h renseignez 8 pour la sortie virtuelle n9
let vOutMoins=9; // sortie virtuelle pour -1h renseignez 9 pour la sortie virtuelle n10
let vOutRAZ=13; // sortie virtuelle pour RàZ renseignez 13 pour la sortie virtuelle n14
let reste=datasources["STATUS"]["response"]["cpt5"]; //renseignez cpt5 pour le compteur n6
   
   
let result='';
let nbH=Math.floor(reste/60);
reste -= nbH*60;
let nbM=reste;
result= ("0"+nbH).substring(("0"+nbH).length, ("0"+nbH).length - 2)+' : ';
result=result+("0"+nbM).substring(("0"+nbM).length, ("0"+nbM).length - 2);


===Chronomètre complet===
return `
<span style="font-size:12px;">     
<p style="margin-left:15px;" >Marche forcée temporisée
<input type="button" id="bouton2" class="bouton2 vout${vOutPlus} btnV4vout${vOutPlus}" style="padding: 2px 0.5em 2px 0.5em;font-size:10px;position:absolute;margin-left:5px;margin-top: -5px;width: 35px;font-size:14px;text-align:center;" name="+1h|+1h" onclick="newAJAXCommand('io.cgi?vout=${vOutPlus}');" value="+1h">
<input type="button" id="bouton2" class="bouton2 vout${vOutMoins} btnV4vout${vOutMoins}" style="padding: 2px 0.5em 2px 0.5em;font-size:10px;position:absolute;margin-left:43px;margin-top: -5px;width: 35px;font-size:14px;" name="-1h|-1h" onclick="newAJAXCommand('io.cgi?vout=${vOutMoins}');" value="-1h">
<input type="button" id="bouton2" class="bouton2 vout${vOutRAZ} btnV4vout${vOutRAZ}" style="padding: 2px 0.5em 2px 0.5em;font-size:10px;position:absolute;margin-left:81px;margin-top: -5px;width: 35px;font-size:14px;" name="RàZ|RàZ" onclick="newAJAXCommand('io.cgi?vout=${vOutRAZ}');" value="RàZ">
</p>
</span>
<center> 
<div style="font-family: 'Orbitron', sans-serif;font-size:32px;margin-top:20px">${result}</div>
</center>
`;
</source>
</div></div>


===Compte à rebours variable===


===Assistant nettoyage filtre piscine===
'''Remarque : si vous configurez Tb=1 sur la sortie virtuelle SV1, vous obtenez un compte à rebours variable, incrémenté minute par minute.

Version actuelle datée du 14 juin 2022 à 08:27

Présentation

LE TEMPS

IPX chrono pres.JPG
Nom LE TEMPS
Famille Widgets
Wiki créé le 07/11/2020
Wiki mis à jour le 11/11/2020
Auteur fgtoul

L'ipx800 propose des fonctionnalités permettant la mesure du temps.

Dans cet article, nous verrons comment utiliser ces différentes fonctions afin de

  • mettre l'horloge interne à l'heure,
  • déclencher des scènes à heures fixes,
  • exécuter une commande à intervalle régulier,
  • utiliser des retardateurs, des temporisations,
  • créer des compteurs horaires, des comptes à rebours.


En dernière partie de cet article, je vous propose quelques widgets personnalisés, que vous pourrez adapter à vos besoins.

Bref, vous l'avez compris, nous allons prendre notre temps Smile.png


IPX-mesure-du-temps.JPG

Horloge interne

Mode automatique

L'ipx800 possède une horloge interne compatible avec les serveurs de temps NTP (Network Time Protocol). Elle est donc capable de mettre régulièrement son horloge à l'heure exacte et commute automatiquement à l'heure d'été ou à l'heure d'hiver. Pour le réglage du serveur NTP, connectez vous à l'ipx800 v4 en administrateur et allez dans le menu "Système" Ouvrez la configuration de l'horloge

NTP.JPG

Sauvegardez.

L'ipx800 V4 se met à l'heure immédiatement si l'accès à internet est fonctionnel.

Mode manuel

Si l'ipx800 n'a pas d'accès à Internet, vous pouvez mettre son horloge à l'heure manuellement.

Renseignez le champ DATE et le champ HEURE puis sauvegardez.

NTPmanuel.JPG

L'ipx800 règle immédiatement son horloge.

L'Horloge interne de l'Ipx800 V4 maintiendra l'heure à jour au fil du temps, mais une légère dérive est possible. Il convient alors de faire une remise à l'heure régulièrement.

Sur les sites sans connexion Internet, il est possible d'installer des serveurs NTP autonomes GPS ou Radio. Ceci permettra la mise à l'heure automatique en toute circonstance.

Le widget

L'IPX800 V4 propose des widgets permettant l'affichage de la date et de l'heure sur le dashboard.

IPX800V4 horloge.PNG

Les plages horaires

Création d'une plage horaire

Pour déclencher des actions en fonction du calendrier ou de l'heure, l'IPX800 propose des périphériques de type Plages Horaires.

Ces plages horaires doivent être initialisées dans le menu Périphériques et peuvent être utilisées dans les scénarios.

Pour plus d'information sur la création d'une plage horaire, je vous invite à lire la documentation de l'IPX800 V4.

TimerV4.JPG

Utilisation dans les scénarios

Supposons que nous voulions démarrer un aérateur, tous les jours entre 7:00 et 9:00. Configurons une plage horaire comme ci-dessus, et créons un scénario pour créer le lien avec la sortie relais qui pilote cet aérateur.

PlageHoraire.JPG

Dans le bloc Plage horaire, sélectionnons la plage horaire, puis affectons le relais dans le champ Résultat.

A 7:00 chaque jour, le périphérique Plage Horaire passe à l'état ON. La condition de l'événement du scénario est Vraie, le Relais passe à l'état ON. L'aérateur peut rafraîchir l'atmosphère.

A 9:00 chaque jour, le périphérique Plage Horaire repasse à l'état OFF, ce qui rend la condition fausse dans le scénario. La commande OFF est alors appliquée au relais, l'aérateur est arrêté.

Délais et temporisations

Définitions

L'ipx800 permet le réglage de retards et de temporisations sur ses sorties relais et ses sorties virtuelles.

Ces paramètres, respectivement appelés Ta et Tb, doivent être réglés via le menu Périphériques.

Exemple avec les sorties virtuelles :

SVTaTb.JPG

  • Le paramètre Ta représente le retard à l'enclenchement. Sa valeur représente le nombre d'unités de temps (secondes ou dixièmes de secondes) qui s'écouleront avant que la sortie passe à l'état ON, consécutivement à une commande ou un événement.
 Remarque :
 Pendant le décompte, les indicateurs d'état affichent le texte 'TA' indicateur de sortie sur le dashboard.
 Vous pouvez également observer cette instance de passage à l'état ON dans le fichier Status.xml grâce aux entrées nommées outaon pour chaque sortie physique,   et votaon pour chaque sortie virtuelle.
 
  Status.xml : TA pour sorties physiques  Status.xml : TA pour sorties virtuelles
   
 La valeur 0 signifie qu'aucun décompte n'est en cours, la valeur 1 indique un décompte en cours.
 
 Status.xml est accessible à l'adresse http://IP_IPX800/user/status.xml
  • Le paramètre Tb représente le temps qui s'écoulera avant que la sortie physique ou virtuelle ne repasse automatiquement à l'état OFF.


Mon but n'est pas ici de vous expliquer leur fonctionnement, cependant, si vous souhaitez un complément d'information, je vous invite à lire cet article.

L'unité de temps

Vous pouvez choisir l'unité de temps dans la configuration de l'Ipx800 V4.

Dans le menu Réseau, ouvrez l'onglet Paramètres

En bas d'écran, cochez la case Division Ta/Tb si vous souhaitez que le temps soit mesuré en dixièmes de secondes.

Par défaut, cette case est décochée, l'ipx800 mesure le temps en secondes.

DivisionTaTb.JPG

Les sorties virtuelles clignotantes

Pour mesurer un intervalle de temps grâce à l'ipx800, il faut avoir recours à une sortie virtuelle que nous ferons passer alternativement de l'état ON à l'état OFF, selon un rythme bien défini, grâce aux paramètres Ta et Tb de cette sortie. Le rythme imposé constituera alors une sorte de métronome que nous pourrons utiliser dans nos scénarios afin d'exécuter des commandes à intervalle de temps régulier.

chrono


Création d'une sortie virtuelle clignotante

Dans le menu Périphériques, sélectionnez une sortie virtuelle disponible et configurez sa temporisation Tb à 1 seconde.

(Attention, si vous avez coché le paramètre division Ta/Tb (voir plus haut), il faut valoriser Tb à 10).

SVclignotante.JPG

Il ne reste plus qu'à créer un scénario pour réactiver cette sortie virtuelle à chaque fois qu'elle repasse à l'état OFF.

SvClignotante1.JPG

Création d'un chronomètre simple

Pour créer notre chronomètre, nous avons bien sûr besoin de notre sortie virtuelle clignotante, mais aussi d'un compteur pour enregistrer le nombre de secondes écoulées.

Ce compteur est incrémenté à chaque fois que la sortie virtuelle change d'état.

Pour cela, créons un scénario simple :

SVclignotante2.JPG

Affectons notre sortie virtuelle clignotante aux blocs Sortie virtuelle et assignons notre compteur de temps au bloc correspondant. Configurez un incrément correspondant à 1 seconde, selon votre unité de temps.

SVclignotante3.JPG

Utilisation du chronomètre

Supposons que nous voulions mesurer le temps de fonctionnement d'une pompe, celle-ci étant connectée à un relais de l'ipx800 v4.

il suffit d'ajouter le relais de la pompe dans la clause événement de notre scénario afin que notre chronomètre démarre en même temps que la pompe.

Lorsque le relais repasse à l'état OFF, notre chronomètre s'arrête. La valeur du compteur représente alors le temps de fonctionnement, en secondes.

SVclignotante4.JPG

Création d'un compte à rebours simple

Sur le même principe que notre chronomètre, nous avons besoin d'une sortie virtuelle clignotante et d'un compteur. En initialisant ce compteur à une valeur donnée, il suffira de le décrémenter de 1 unité de temps à chaque fois que notre sortie virtuelle clignotante passera à l'état OFF, jusqu'à ce que le compteur revienne à zéro. La valeur 0 du compteur inhibera le décompte.

Créons le scénario nécessaire au décompte :

SVclignotante2.JPG

Affectons notre sortie virtuelle clignotante aux deux blocs Sortie virtuelle et assignons notre compteur de temps au bloc correspondant.

Configurons une décrémentation correspondant à 1 seconde, selon votre unité de temps.

SVclignotante3b.JPG

Utilisation du compte à rebours

Pour notre exemple, nous souhaitons éteindre un sèche-serviette soufflant de salle de bain 30 secondes après avoir quitté la pièce. Nous avons besoin d'une sortie virtuelle clignotante (ta=0 tb=1) et d'une seconde sortie virtuelle, sur laquelle nous paramètrerons Ta=0 et Tb=0. Nommons la VO2.

Voici les scénarios à créer

  • Scène 1 : déclenchons notre compte à rebours lorsque le relais pilotant l'éclairage passe à l'état OFF

    Attribuons le relais qui pilote notre éclairage au bloc correspondant.

    SV rebour2b.JPG

    Définissez la commande d'initialisation du compteur dans le bloc correspondant. Le compteur devra être initialisé à 30 pour notre exemple.

    SV rebour3.JPG


  • Scène 2 : tant que le compteur est supérieur ou égal à 1, maintenons la sortie virtuelle VO2 à l'état ON.

    SV rebour4.JPG

    Dans le bloc Compteur, renseignons 1 dans le champ valeur

    Attribuons la sortie virtuelle VO2 au bloc correspondant


  • Scène 3 : Décrémentons notre compteur toutes les secondes lorsque notre sortie clignotante repasse à l'état OFF

    SV rebour5.JPG

    En événement, attribuez la sortie virtuelle clignotante au 1er bloc, puis la sortie virtuelle VO2 au second bloc.

    En résultat, attribuez la sortie virtuelle clignotante au bloc correspondant.

    Définissez une commande de Décrémentation dans le bloc 'Compteur'

    SVclignotante3b.JPG


  • Scène 4 : il ne reste plus qu'à éteindre le sèche_serviette à la fin du décompte, lorsque la sortie virtuelle VO2 passe à l'état OFF

    SV rebour6.JPG

    Attribuons la sortie virtuelle VO2 au bloc idoine,

    Attribuons le relais du sèche-serviette en résultat.

Compte à rebours variable

Dans cet article, vous trouverez l'exemple d'un compte à rebours variable.

Merci @Teebex pour cette puissante fonctionnalité aux usages multiples.

Personnellement, je l'utilise afin de piloter manuellement la filtration de la piscine, en marche forcée pour une durée variable en fonction des besoins. La plage de temps est incrémentée heure par heure, jusqu'à 8 maximum. Dès que la valeur du compteur est supérieure ou égale à 1, la filtration se met en marche pour la durée fixée et s'arrête automatiquement lorsque le décompte est terminé.

ReboursVariable.JPG

Ce widget, comportant un code complexe, sera présenté plus bas dans une version simplifiée.

Quelques Widgets personnalisés

Attention : Dans ce qui va suivre, nous allons voir comment mesurer le temps et afficher le résultat des mesures à l'écran. Nous utiliserons pour cela les fonctions Ta et Tb sur les relais ou sorties virtuelles, et une source de données qui va solliciter assez fréquemment le fichier Status.xml de l'ipx800.
Utilisez ces widgets avec parcimonie, n'utilisez pas plusieurs fois le même compteur interne.

Nous allons créer quelques widgets en code HTML afin d'afficher nos mesures de temps (chronomètres, Ta, Tb, ...).


Pour cela, vous devez d'abord créer une source de données sur le dashboard.Nommez cette source STATUS.

La mesure du temps par ces méthodes dépend des performances de votre Ipx800. Des écarts de quelques secondes peuvent parfois être constatés.

DataSTATUS.JPG


Widget 1 : Affichage du temps de fonctionnement de l'ipx800

Wuc0Widget2.JPG


Dans le fichier Status.xml, l'ipx800 v4 met à notre disposition le paramètre wuc0 qui représente le temps écoulé depuis son dernier redémarrage.

Il est exprimé en secondes.

Nous allons créer un petit widget de type HTML, qui récupèrera cette valeur et la convertira en Jours, heures, minutes et secondes et calculera la date du dernier démarrage.

Vous devez avoir créé la Source de données STATUS au préalable.


Ajoutez un widget type HTML, 1 bloc de hauteur puis collez le code ci-dessous.

 Afficher le code du widget


function appendLeadingZeroes(n){
  if(n <= 9){
    return "0" + n;
  }
  return n
}

let reste=datasources["STATUS"]["response"]["wuc0"];
var lastReboot = new Date( Date.now() - (reste * 1000) );
let formatted_date = appendLeadingZeroes(lastReboot.getDate()) + "/" + appendLeadingZeroes(lastReboot.getMonth() + 1) + "/" + lastReboot.getFullYear()  + " " + appendLeadingZeroes(lastReboot.getHours()) + ":" + appendLeadingZeroes(lastReboot.getMinutes()) + ":" + appendLeadingZeroes(lastReboot.getSeconds())

    let result='';
    let nbJ=Math.floor(reste/(3600*24));
    reste -= nbJ*24*3600;
    let nbH=Math.floor(reste/3600);
    reste -= nbH*3600;
    let nbM=Math.floor(reste/60);
    reste -= nbM*60;
    let nbS=reste;

    if (nbJ>=0)
        result=result+appendLeadingZeroes(nbJ)+'j ';
    if (nbH>=0)
        result=result+appendLeadingZeroes(nbH)+'h ';
    if (nbM>=0)
        result=result+appendLeadingZeroes(nbM)+'m ';
    if (nbS>=0)
        result=result+appendLeadingZeroes(nbS)+'s';

return `
<link href="https://fonts.googleapis.com/css2?family=Space+Mono:wght@400&display=swap" rel="stylesheet">
<center>   
<div style="font-family: 'Space Mono', monospace;font-size:18px;margin-top:5px;">${result}</div>
<br>
<div style="font-family: 'Space Mono', monospace;font-size:10px;">${formatted_date}</div>
</center>
`;

Widget 2 : Affichage du retard Ta d'une sortie

TaWidget2.JPG

Le décompte du temps Ta d'une sortie se fait dans la mémoire de l'IPX800 et ne permet pas à l'utilisateur de connaître le temps restant.

Nous devons par conséquent utiliser une sortie virtuelle clignotante et un compteur.

Pour afficher le temps restant, il serait logique d'utiliser un compte à rebours initialisé au même nombre de secondes que le paramètre Ta, puis laisser les secondes s'écouler jusqu'à 0.

Cependant, Ta peut prendre une valeur maximale de 13743 unités de temps alors que les commandes s'appliquant aux compteurs ne peuvent utiliser que des valeurs inférieures à 256. Il faudrait donc intervenir plusieurs fois sur un même compteur pour l'initialiser à une valeur supérieure à 256.

Nous utiliserons donc un chronomètre classique. Nous obtiendrons le temps restant avant le changement d'état de la sortie, en faisant une soustraction de la valeur du compteur à la valeur de Ta.

Pour notre exemple, nous souhaitons démarrer un réchauffeur 180 secondes après la pompe de circulation. Pour ne pas trop solliciter l'IPX800, nous ferons clignoter notre Sortie virtuelle toutes les 5 secondes seulement, le compteur sera donc incrémementé de 5 en 5.

Le démarrage de la pompe de circulation est le déclencheur. A ce moment, une commande ON est envoyée au relais du réchauffeur, le comptage commence simultanément puisque c'est à et instant précis que l'IPX800 commence le décompte du Ta.

Nous utiliserons

  • une sortie virtuelle clignotante (Ta=0 Tb=5s) que nous nommerons SV1,
  • une sortie virtuelle avec Ta=0, Tb=0, que nous nommerons SV2,
  • un compteur CPT1,
  • une sortie Relais, connectée à la pompe de circulation, nommé RELAIS1,
  • une sortie relais connectée au réchauffeur, nommée RELAIS2, configurée avec Ta=30s

Ecrivons les 4 scénarios nécessaires.

Ces scénarios étant similaires aux exemples fournis plus haut, nous allons utiliser une transcription simplifiée.

Scène 1 : Déclencheur
événement : RELAIS1
Action : ON/OFF
Résultat : RELAIS2 , SV2
Scène 2 : Incrémentation
événement : NON SV1
Action : ON
Résultat : CPT1 (Incrémentation = 5)
Scène 3 : Entretien SV clignotante
événement : SV2 ET NON SV1
Action : ON
Résultat : SV1
Scène 4 : Arrêt du comptage
événement : RELAIS2
Action : OFF
Résultat : SV2

Créons un widget de type HTML 1 bloc et collons le code

Les 3 premières lignes doivent être adaptées en fonction des ressources utilisées sur l'Ipx800


 Afficher le code du widget


let rly=1;//Relais du rechauffeur / renseignez 0 pour Relais 1
let rst=180 - datasources["STATUS"]["response"]["cpt0"];//ici nous utilisons le compteur n°1 de l'ipx800
let r=datasources["STATUS"]["response"]["led"+rly];

return `
<span style="margin-left:8px;">Temps restant avant activation :</span>  
<div style="font-size:18px;margin-top:10px;margin-left:20px;width:150px;text-align:right;background-color:#333">${rst}</div>
<div class="indicator-light2  led${rly]  ledta${rly} ${r==1 ? 'on' : ''}" style="position:absolute;left:190px;top:10px;"></div>
`;

Widget 3 : Affichage du délai Tb d'une sortie

TbWidget.JPG

Comme pour Ta, la valeur résiduelle de Tb en cours de décompte n'est pas accessible par l'utilisateur. Il faut donc avoir recours à un chronomètre externe.

Exemple : Le radiateur soufflant de la salle de bains est relié à un relais de l'IPX800, sur lequel nous avons programmé une temporisation Tb=600 afin que tout se coupe automatiquement après 10 minutes de fonctionnement.

Si nous voulons afficher le temps de fonctionnement restant à chaque mise en marche, nous devons déclencher un comptage lors de la mise en route du chauffage, c'est à dire lorsque le relais passe ON. C'est en effet à cet instant précis que l'IPX800 commence le décompte de la temporisation.

Nous utiliserons

  • une sortie virtuelle clignotante (Ta=0, Tb=5s) que nous nommerons SV1,
  • une sortie virtuelle avec Ta=0, Tb=0, que nous nommerons SV2,
  • un compteur CPT1,
  • une sortie relais connectée au radiateur soufflant, nommée RELAIS2, configurée avec Tb=600s

Ecrivons les 4 scénarios nécessaires.


Scène 1 : Déclencheur
événement : RELAIS2
Action : ON
Résultat : SV2 , CPT1 (Set = 0)
Scène 2 : Incrémentation
événement : NON SV1
Action : ON
Résultat : CPT1 (Incrémentation = 5)
Scène 3 : Entretien SV clignotante
événement : SV2 ET NON SV1
Action : ON
Résultat : SV1
Scène 4 : Arrêt du comptage
événement : NON RELAIS2
Action : OFF
Résultat : SV2

Créons un widget de type HTML 1 bloc et collons le code les 3 premières lignes doivent être adaptées aux rssources utilisées.

 Afficher le code du widget


let rly=2; //numéro du relais connecté au radiateur / renseignez 0 pour le relais n°1
let rst=600 - datasources["STATUS"]["response"]["cpt0"]; //renseignez cpt0 pour compteur n°1
let r=datasources["STATUS"]["response"]["led"+rly];

return `
<span style="margin-left:8px;">Secondes restant avant désactivation :</span>  
<div style="font-size:18px;margin-top:10px;margin-left:20px;width:150px;text-align:right;background-color:#333">${rst}</div>
<div class="indicator-light2  led${rly} ledta${rly} ${r==1 ? 'on' : ''}" style="position:absolute;left:190px;top:10px;"></div>
`;

Widget 4 : Affichage d'un compteur horaire de fonctionnement

CptHWidget.JPG CptHWidget2.JPG

Le comptage du temps de fonctionnement d'un appareil est en soi assez simple : il suffit de chronométrer le temps pendant lequel le relais correspondant reste à l'état ON.

Pour notre exemple, nous souhaitons comptabiliser le temps de fonctionnement de la pompe à chaleur, connectée au relais 1 de notre IPX800.

Le passage à l'état ON du relais est le déclencheur. Nous ferons alors 'clignoter' notre sortie virtuelle jusqu'à l'ouverture du relais.

Nous utiliserons

  • une sortie virtuelle clignotante (Ta=0 Tb=1s) que nous nommerons SV1,
  • une sortie virtuelle pour modifier le format d'affichage (décimal ou sexagésimal)
  • un compteur CPT1,
  • une sortie Relais, connectée à la pompe à chaleur, nommée RELAIS1,


Ecrivons les 3 scénarios nécessaires.


Scène 1 : Déclencheur
événement : RELAIS1
Action : ON
Résultat : SV1
Scène 2 : Incrémentation
événement : NON SV1
Action : ON
Résultat : CPT1 (Incrémentation = 1)
Scène 3 : Entretien SV clignotante
événement : RELAIS1 ET NON SV1
Action : ON
Résultat : SV1


Créons un widget de type HTML 1 bloc et collons le code

Les 3 premières lignes de code sont à adapter en fonction des ressources utilisées sur l'Ipx800.

 Afficher le code du widget


let d=datasources["STATUS"]["response"];//nommez la source de données
let reste=d["cpt0"];//renseignez cpt0 pour le compteur n°1
let vOut=46;//renseignez 46 pour SV n47 / choix du format d'affichage


//ne rien modifier ci-dessous
let result='';
let affichage=d["vout"+vOut]==1; //0 pour un affichage numérique ; 1 pour un affichage sexagésimal
let l='',l1='';

if (affichage){
    l="hh:mm:ss";
    l1='on';
    let nbH=Math.floor(reste/3600);
    reste -= nbH*3600;
    let nbM=Math.floor(reste/60);
    reste -= nbM*60;
    let nbS=reste;
    if (nbH>=10){result= nbH + ':';
        }else{
                 result= ("0"+nbH).substring(("0"+nbH).length, ("0"+nbH).length - 2)+':';
        }
	result=result+("0"+nbM).substring(("0"+nbM).length, ("0"+nbM).length - 2)+':';
    result=result+("0"+nbS).substring(("0"+nbS).length, ("0"+nbS).length - 2);
}else{
	result=parseFloat(reste/3600).toFixed(2);
    l="0000.00";
}
return `
<link href="https://fonts.googleapis.com/css2?family=Space+Mono:wght@400&display=swap" rel="stylesheet">
<input type="button" id="bouton2" class="bouton2 vout${vOut} btnV4vout${vOut} ${l1}" style="padding: 2px 0.5em 2px 0.5em;font-size:10px;position:absolute;margin-left:5px;margin-top: -25px;width: 85px;font-size:14px;text-align:center;" name="0000.00|hh:mm:ss" onclick="newAJAXCommand('io.cgi?vout=${vOut}');" value="${l}">
<center>   
<div style="font-family: 'Space Mono', monospace;font-size:28px;margin-top:35px;">${result}</div>
</center>
`;

Widget 5 : Compte à rebours variable

Nous allons créer un widget pour utiliser le compte à rebours variable.

Pour plus d'explications sur son fonctionnement, je vous invite à lire l'article de @Teebex.

Comme je l'ai dit plus haut, j'utilise ce code pour piloter la marche forcée de la filtration de piscine avec temporisation.

C'est donc l'exemple que nous prendrons ici, avec un code simplifié.


ReboursV.JPG

nous aurons besoin de

  • Pour le compte à rebours :
    • 1 compteur que nous nommerons CPT1
    • 1 sortie virtuelle clignotante toutes les minutes (Ta=0 Tb=60), nous la nommerons SV1
    • 1 sortie relais connectée à la pompe de filtration, nous la nommerons RELAIS1
  • Pour définir la durée du compte à rebours :
    • 1 sortie virtuelle pour ajouter 1 heure, nous la nommerons SV5
    • 1 sortie virtuelle pour ôter 1 heure, nous la nommerons SV6
    • 1 sortie virtuelle pour la remise à 0, nous la nommerons SV7

Créons les scénarios nécessaires au compte à rebours :

scène 1 : démarrage / arrêt du compte à rebours
Evénement : CPT1 (Valeur = 1)
Action : ON/OFF
Résultat : RELAIS1
Scène 2 : Décompte des minutes
Evénement :NON SV1 ET RELAIS1
Action :ON
Résultat : CPT1 (Décrémentation 1) ; SV1


Créons les scénarios pour la gestion de la durée :

Scène 3 : Ajout 1 heure / Max=23h
Evénement : SV5 ET NON CPT1(valeur 1321)
Action : ON
Résultat : CPT1 (Incrémentation 60)
Scène 4 : retrait 1 heure
Evénement : SV6 ET CPT1(valeur 60)
Action : ON
Résultat : CPT1 (Décrémentation 60)
Scène 5 : RAZ
Evénement : SV6
Action : ON
Résultat : CPT1 (Set 0)

Créons un widget de type HTML 2 blocs et collons le code

Les 4 premières lignes de code sont à adapter en fonction des ressources utilisées sur l'Ipx800.

 Afficher le code du widget


let vOutPlus=8; //sortie virtuelle pour +1h renseignez 8 pour la sortie virtuelle n9
let vOutMoins=9; // sortie virtuelle pour -1h renseignez 9 pour la sortie virtuelle n10
let vOutRAZ=13; // sortie virtuelle pour RàZ renseignez 13 pour la sortie virtuelle n14
let reste=datasources["STATUS"]["response"]["cpt5"]; //renseignez cpt5 pour le compteur n6
    
    
let result='';
let nbH=Math.floor(reste/60);
reste -= nbH*60;
let nbM=reste;
result= ("0"+nbH).substring(("0"+nbH).length, ("0"+nbH).length - 2)+' : ';
result=result+("0"+nbM).substring(("0"+nbM).length, ("0"+nbM).length - 2);

return `
<span style="font-size:12px;">       
<p style="margin-left:15px;" >Marche forcée temporisée
<input type="button" id="bouton2" class="bouton2 vout${vOutPlus} btnV4vout${vOutPlus}" style="padding: 2px 0.5em 2px 0.5em;font-size:10px;position:absolute;margin-left:5px;margin-top: -5px;width: 35px;font-size:14px;text-align:center;" name="+1h|+1h" onclick="newAJAXCommand('io.cgi?vout=${vOutPlus}');" value="+1h">
<input type="button" id="bouton2" class="bouton2 vout${vOutMoins} btnV4vout${vOutMoins}" style="padding: 2px 0.5em 2px 0.5em;font-size:10px;position:absolute;margin-left:43px;margin-top: -5px;width: 35px;font-size:14px;" name="-1h|-1h" onclick="newAJAXCommand('io.cgi?vout=${vOutMoins}');" value="-1h">
<input type="button" id="bouton2" class="bouton2 vout${vOutRAZ} btnV4vout${vOutRAZ}" style="padding: 2px 0.5em 2px 0.5em;font-size:10px;position:absolute;margin-left:81px;margin-top: -5px;width: 35px;font-size:14px;" name="RàZ|RàZ" onclick="newAJAXCommand('io.cgi?vout=${vOutRAZ}');" value="RàZ">
</p>
</span>
<center>  
<div style="font-family: 'Orbitron', sans-serif;font-size:32px;margin-top:20px">${result}</div>
</center>
`;


Remarque : si vous configurez Tb=1 sur la sortie virtuelle SV1, vous obtenez un compte à rebours variable, incrémenté minute par minute.