Je mets à jour ce fil avec ce que j’ai fait:
Creation d’un vitruel avec 60 info numeriques nommée OneMinute_0 à OneMinute_59
Facultatif dans le même virtuelle: 12 info numérique nommée 5Minute_0 à 5Minute_11:
Dans data/customTemplates Dashboard, creation des fichiers:
cmd.info.numeric.Pluie1h_OW_5Minute.html et cmd.info.numeric.Pluie1h_OW_1Minute.html
cmd.info.numeric.Pluie1h_OW_1Minute.html:
<div style="min-width:1px;width:1px;margin-left: 1.5px;margin-right: 1.5px" class="cmd cmd-widget vgauge #history#" data-type="info" data-subtype="numeric"data-template="vertical" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
<div class="title #hide_name#">
<div class="cmdName">#name_display#</div>
</div>
<div class="content-sm" data-cmd_id="#id#">
<div class="vgauge-chart">
<div class="vgauge-bckg">
<style>
[data-cmd_id="#id#"] .vgauge-bckg {
width: 3px;
background: rgb(50, 50, 50);}
</style>
<div class="vgauge-value">
<style>
[data-cmd_id="#id#"] .vgauge-value {
margin-left: 0px;
background: rgb(0, 155, 255);
width: 3px;}
</style>
</div>
</div>
</div>
</div>
<div class="cmdStats #hide_history#">
<span title='{{Min}}' class='tooltips'>#minHistoryValue#</span>|<span title='{{Moyenne}}' class='tooltips'>#averageHistoryValue#</span>|<span title='{{Max}}' class='tooltips'>#maxHistoryValue#</span> <i class="#tendance#"></i>
</div>
<template>
<div>color : rgb(0,155,255) ({{couleur de l'indicateur de valeur}})</div>
<div>maxscale : 4 ({{echelle max}})</div>
</template>
<script>
jeedom.cmd.update['#id#'] = function(_options) {
var position = _options.display_value
var minValue = 0
var maxValue = 4
if ($.issetWidgetOptParam('#maxscale#', 'maxscale')) {
maxValue = '#maxscale#'
}
if (position > maxValue) position = maxValue
if (position < minValue) position = minValue
var height = ((position - minValue) * 100) / (maxValue - minValue)
height = Math.round(parseFloat(height) * 10) / 10
var cmd = $('.cmd[data-cmd_id=#id#]')
cmd.attr('title','{{Date de valeur}} : '+_options.valueDate+'<br/>{{Date de collecte}} : '+_options.collectDate)
cmd.find('.vgauge-value').height(height+'%')
cmd.find('.state strong').first().text(_options.display_value)
}
jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#'});
if ($.issetWidgetOptParam('#color#', 'color')) {
$('.cmd[data-cmd_id=#id#] .vgauge-value').css('background', '#color#')
}
</script>
</div>
cmd.info.numeric.Pluie1h_OW_5Minute.html:
<div style="min-width:1px;width:1px;" class="cmd cmd-widget vgauge #history#" data-type="info" data-subtype="numeric"data-template="vertical" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
<div class="title #hide_name#">
<div class="cmdName">#name_display#</div>
</div>
<div class="content-sm" data-cmd_id="#id#">
<div class="vgauge-chart">
<div class="vgauge-bckg">
<style>
[data-cmd_id="#id#"] .vgauge-bckg {
width: 5px;
background: rgb(50, 50, 50);}
</style>
<div class="vgauge-value">
<style>
[data-cmd_id="#id#"] .vgauge-value {
margin-left: 0px;
background: rgb(0, 155, 255);
width: 5px;
}
</style>
</div>
</div>
</div>
</div>
<!--<div class="value" data-cmd_id="#id#">
<div class="state"><strong>#state#</strong> <strong>#unite#</strong></div>
</div>-->
<div class="cmdStats #hide_history#">
<span title='{{Min}}' class='tooltips'>#minHistoryValue#</span>|<span title='{{Moyenne}}' class='tooltips'>#averageHistoryValue#</span>|<span title='{{Max}}' class='tooltips'>#maxHistoryValue#</span> <i class="#tendance#"></i>
</div>
<template>
<div>color : rgb(0,155,255) ({{couleur de l'indicateur de valeur}})</div>
<div>maxscale : 4 ({{echelle max}})</div>
</template>
<script>
jeedom.cmd.update['#id#'] = function(_options) {
var position = _options.display_value
//var minValue = ('#minValue#' == '') ? 0 : parseInt('#minValue#')
//var maxValue = ('#maxValue#' == '') ? 100 : parseInt('#maxValue#')
var minValue = 0
var maxValue = 4
if ($.issetWidgetOptParam('#maxscale#', 'maxscale')) {
maxValue = '#maxscale#'
}
if (position > maxValue) position = maxValue
if (position < minValue) position = minValue
var height = ((position - minValue) * 100) / (maxValue - minValue)
height = Math.round(parseFloat(height) * 10) / 10
var cmd = $('.cmd[data-cmd_id=#id#]')
cmd.attr('title','{{Date de valeur}} : '+_options.valueDate+'<br/>{{Date de collecte}} : '+_options.collectDate)
cmd.find('.vgauge-value').height(height+'%')
cmd.find('.state strong').first().text(_options.display_value)
}
jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#'});
if ($.issetWidgetOptParam('#color#', 'color')) {
$('.cmd[data-cmd_id=#id#] .vgauge-value').css('background', '#color#')
}
</script>
</div>
Configuration de chaque info du virtuel avec le widget idoine (à faire pour les 60 info one_minutes et les 12 info 5_minutes):
Creation d’un scénario bloc code:
Declencheur
Code (confirguer APIKEY et les coordonées GPS):
$scenario->setLog("Start");
$Equipement = eqLogic::byLogicalId('Pluie1h_OW', 'virtual');
if (!is_object($Equipement)) {
$scenario->setLog(" * eqlogic exist pas");
$Equipement = new virtual();
$Equipement->setName("Pluie1h_OW");
$Equipement->setLogicalId('Pluie1h_OW');
$Equipement->setEqType_name('virtual');
//id of parent jeedom object
$Equipement->setObject_id(3); // Objet parent = environnement
$Equipement->setIsEnable(1);
$Equipement->setIsVisible(1);
$Equipement->save();
}
$vId=$Equipement->getId();
$scenario->setLog(" * id : $vId");
$visibility_1m=1;
for ($i = 0; $i < 60; $i++){
$virtuelCmd=$Equipement->getCmd(null,'OneMinute_'.$i);
if (!is_object($virtuelCmd)) {
$virtuelCmd = new virtualCmd();
$virtuelCmd->setName('OneMinute_'.$i);
$virtuelCmd->setOrder($i+2);
$virtuelCmd->setEqLogic_id($vId);
$virtuelCmd->setLogicalId('OneMinute_'.$i);
$virtuelCmd->setType('info');
$virtuelCmd->setSubType('numeric');
$virtuelCmd->setTemplate('dashboard', 'customtemp::Pluie1h_OW_OneMinute');
$virtuelCmd->setDisplay('showNameOndashboard', 0);
$Equipement->checkAndUpdateCmd('OneMinute_'.$i, 0);
}
$virtuelCmd->setTemplate('dashboard', 'customtemp::Pluie1h_OW_OneMinute');
$virtuelCmd->setisVisible($visibility_1m);
$virtuelCmd->save();
}
for ($i = 0; $i < 12; $i++){
$virtuelCmd=$Equipement->getCmd(null,'5Minute_'.$i);
if (!is_object($virtuelCmd)) {
$virtuelCmd = new virtualCmd();
$virtuelCmd->setName('5Minute_'.$i);
$virtuelCmd->setOrder($i+62);
$virtuelCmd->setEqLogic_id($vId);
$virtuelCmd->setLogicalId('5Minute_'.$i);
$virtuelCmd->setType('info');
$virtuelCmd->setSubType('numeric');
$virtuelCmd->setTemplate('dashboard', 'customtemp::Pluie1h_OW_5Minute');
$virtuelCmd->setDisplay('showNameOndashboard', 0);
$Equipement->checkAndUpdateCmd('5Minute_'.$i, 0);
}
$visibility_5m=($visibility_1m == 0 ? 1 :0);
$virtuelCmd->setisVisible($visibility_5m);
$virtuelCmd->save();
}
//Update des valeurs
$APIKEY="x2x2x2x2x2x2"; // A creer directement dans openweather
$latitude="47.7345";
$longitude="1.23456";
$url="https://api.openweathermap.org/data/2.5/onecall?lat=".$latitude."&lon=".$longitude."&exclude=daily,current,hourly,alerts&units=metric&appid=".$APIKEY;
$request_http = new com_http($url);
$ret = $request_http->exec();
$ret = json_decode($ret, true);
foreach($ret['minutely'] as $level) $pluie1h_full[] = round($level['precipitation'],2);
//$pluie1h_full=[4.044,0.7438,0.6832,0.6226,0.562,0.5226,0.4832,0.4438,0.4044,0.365,0.3394,0.3138,0.2882,0.2626,0.237,0.2162,0.1954,0.1746,0.1538,0.133,0.1194,0.1058,0,0,0,0,0,0,0,0,4.044,0,4.044,0.7438,0.6832,0.6226,0.562,0.5226,0.4832,0.4438,0.4044,0.365,0.3394,0.3138,0.2882,0.2626,0.237,0.2162,0.1954,0.1746,0.1538,0.133,0.1194,0.1058,0,0,0,0,0,0,0];
for ($i = 0; $i < 12; $i++) $pluie1h_5min[]=round(max(array_slice($pluie1h_full,$i*5,5)),2); //60 infos pluie par heure (1 par minute) regroupées par 5 minutes
//$Equipement = eqLogic::byString($Virtual);
$ListeCommandes = $Equipement->getCmd(); //creation de la liste des commandes
foreach($ListeCommandes as $commandes) {
if (is_numeric($commandes->getName())){
$commandes->event($pluie1h_5min[$commandes->getName()]); //Met la valeur pluie[x] dans chaque commande info [x]
}
}
//$Equipement = eqLogic::byString('#[Environnement][Pluie1h_OW]#');
$ListeCommandes = $Equipement->getCmd(); //creation de la liste des commandes
$var1m=$var5m=0;
foreach($ListeCommandes as $commandes) {
if ($commandes->getLogicalId()=='OneMinute_'.$var1m){
$commandes->event($pluie1h_full[$var1m]); //Met la valeur pluie[x] dans chaque commande info [x]
$var1m++;
}
if ($commandes->getLogicalId()=='5Minute_'.$var5m){
$commandes->event($pluie1h_5min[$var5m]); //Met la valeur pluie[x] dans chaque commande info [x]
$var5m++;
}
}
/*$liste=implode(',',$pluie1h_full);
$scenario->setLog($liste);
$liste=implode(',',$pluie1h_5min);
$scenario->setLog($liste);*/
Pour à la fin obtenir ça (1 barre par minute mais possibilité d’afficher les info vituel toutes les 5 minutes)