Code widget (v4) HTML

Salut,

Question code widget (v4) HTML

J’ai écris un widget pour la température.

Pour récupérer le min j’ai ajouté une info virtuelle

min = minBetween(#[Extérieur][Température Extérieur Sud][temperature]#,#annee#-#mois#-#jour# 00:00:00,#annee#-#mois#-#jour# 23:59:59)

Ensuite dans le code je récupère cette info, pour mettre à jour la bonne balise via javascript

Bien sur je recupère également la température

Ce qui m’embête, c’est que je suis obligé à chaque fois pour tous mes capteurs de temp, d’ajouter les infos MIN et MAX. J’aimerai utiliser directement la formule dans le code javascript du widget, pour faire directement le calcul du min et max en fonction de l’info temp, comment faire ?

Merci pour votre aide

Ci dessous le code (encore en développement)

`Texte préformaté`

bonjour regarde le widget de @moafrancky34

Salut, merci pour les infos.
Je débute en Javascript, pourrais-tu m’expliquer cette partie du code.
Notamment, as tu un lien ou sont recenser les fonctions dispo jeedom, comme history.get
Et je ne comprend pas sle success ?

jeedom.history.get ({
cmd_id:id,
dateStart:start,
dateEnd:end,
success: function(resultat){
}

Merci pour ton aide

il ny a pas de doc « api js »
c’est en farfouillant dans le code (j’en trouve encore)

ligne 23

créé un html dans un design
ou via plug html display

remplace dans le code id = 10
par un id d’une commande de ton équipements (action ou info)

<div>
	<script>
      jeedom.cmd.byId({ 
            id: 10,
      })
	</script>
</div>

sauvegarde
ça va rien faire
tu mets ton navigateur en mode dev
(sous chrome f12)
tu clic sur l’onglet console / info / objet
tu vas avoir plein d’info
image
donc c’est success qui suivra pour reprendre l’info qui t’intéresse.

etc, etc,

si tu fais pareil avec jeedom.history.get
(sans rien)
tu verras dans la console log
qu’il te manque id,start,end
image

ect. ect

tu vas je l’espère comprendre je veux récupérer
eqLogic_id (id de l’equipement) de ma commande (1er screen)

      <div class="myrow">
        <script>
                jeedom.cmd.byId({ 
            id: 10,
                  success:  function(resultat){
 $('.myrow').empty().text(resultat.eqLogic_id);


                    }
      })
	</script>
</div>

maintenant comme sur le lien plus haut
d’un info api js à une info api js

      <div class="myrow">
        <script>
	jeedom.cmd.byId({ 
	id: 10,
		success:  function(resultat){
 //$('.myrow').empty().text(resultat.eqLogic_id);
                    
			jeedom.eqLogic.byId ({
			id: resultat.eqLogic_id, // id objet
				success:  function(resultat_info) {
				$('.myrow').empty().text(resultat_info.status.lastCommunication);
                  }
			})

		}

	})
	</script>
</div>

maintenant me voila avec la dernière communication de l’equipement
lastCommunication

Merci pour ces infos !

Et pour le temps que tu as pris pour moi :slight_smile:

Je regarde tout ça demain en détail

Avec toute ces infos, j’ai réussi à avancer et à comprendre.
J’ai ajouté ce code pour récupérer les heures du min et du max, qu’en penses tu ?

A bientôt

/* Fonction Jeedom pour récuperer l'historique */
  function getHistory(id, start, end) {
    /* Appel de la fonction Jeedom */
    jeedom.history.get ({ 
    cmd_id:id,
    dateStart:start,
    dateEnd:end,
      success:  function(resultat){
        /* Fonction Ajax asynchrone */
        $('.cmd[data-cmd_id=#id#] .min').empty().text(resultat.minValue);
        $('.cmd[data-cmd_id=#id#] .max').empty().text(resultat.maxValue);
        /*Ici on va rechercher l'heure du min et du max */
        var now = new Date()
        var TimeZoneOffset = now.getTimezoneOffset()
        /*On commence par mettre le tableau data à plat et on recherche les index du tableau des valeurs min et max */
        var IndexMin = resultat.data.flat().indexOf(resultat.minValue);
        var IndexMax = resultat.data.flat().indexOf(resultat.maxValue);
        /* on va sauvegarder pour les deux valeurs, le temps exprimé en ms depuis 1er Janvier 1970 00:00:00 de notre timezone */
        /* la valeur se trouve dans l'index n-1 (c'est la première dimension du tableau, et on a mis le tableau à plat) */
        /* on ajoute à cette valeur la différence entre UTC et notre timezone, pour la transformer en UTC */
        var TimeMinMs = resultat.data.flat()[IndexMin-1] + (TimeZoneOffset*60*1000);
        var TimeMaxMs = resultat.data.flat()[IndexMax-1] + (TimeZoneOffset*60*1000);
        /* On calcule en ms depuis combien de temps ont été enregistré ces valeurs */
        var SinceMin = Date.now() - TimeMinMs
        var SinceMax = Date.now() - TimeMaxMs
        /* on va extraire le nombre d'heures entières */
        var SinceMinHeure = Math.trunc(SinceMin / 1000 / 3600)
        var SinceMaxHeure = Math.trunc(SinceMax / 1000 / 3600)
        /* on va extraire le nombre de minutes entières */
        var SinceMinMinute = Math.trunc( ( (SinceMin / 1000 / 3600) - SinceMinHeure ) *60)
        var SinceMaxMinute = Math.trunc( ( (SinceMax / 1000 / 3600) - SinceMaxHeure ) *60)
        /* On va enfin calculer l'heure du min et du max */
        var HeureMin = new Date()
        HeureMin.setHours(now.getHours()-SinceMinHeure, now.getMinutes()-SinceMinMinute)
        var HeureMax = new Date()
        HeureMax.setHours(now.getHours()-SinceMaxHeure, now.getMinutes()-SinceMaxMinute)
        /* On affiche */
        $('.cmd[data-cmd_id=#id#] .minheure').empty().text(HeureMin);
        $('.cmd[data-cmd_id=#id#] .maxheure').empty().text(HeureMax);
      }
    })
  }
1 J'aime

le calcul du temps c’est quelque chose de galère (gros pavé )

félicitations peu importe si le résultat correspond à la méthode dite « c’est comme ça qu’il faut faire »

je suis incapable de donner des leçons, je suis comme toi je me débrouille, et j aime cherché, comprendre.

c’est pas notre profession mais on a compris, et on le fait à notre niveau, notre logique par apport à se qu’on trouve comme moyen.

dans se code j’avais opté par :

var minidate = new Date(resulat.data[index][0]);
minidate=minidate.toLocaleString('fr-FR',options);

l’option est le format de sortie de la requêtes (24h, 1ans,…)
ex 1 ans
options = {timeZone: "UTC",month: "long", day: "numeric"};

https://forum.jeedom.com/viewtopic.php?f=25&t=35100&sid=2a79989fdd966ee9243a091137b4f110&start=220#p778253

ça s’implique pour une sortie de date specifique

tu trouveras d’autres api js dans modal/PHP
à l’intérieur du code php
toutes les fenêtres de jeedom : liste variable, …
(j’ai juste vu pas eu le temps de tester en detail)