Création d'une commande "historisée dans le futur"

Bonjour,

Je cherche à savoir si il est possible de créer une commande de prévision qui permet d’afficher des valeurs dans le futur sous forme de graphique type historique. Il me semble que le @Bison l’a fait dans le #plugin-solcast , et que le #plugin-jeedomconnect permet de l’afficher facilement mais je ne sais pas comment créer la commande.
Ce serait pour afficher les prévisions météo sous forme de courbe (température, pluie) que je récupère du plugin meteofrance ou de l’api openweather via un script.

Bonjour,

Il faut au préalable autoriser cette fonctionnalité dans Jeedom
Réglages > Système > Configuration puis onglet Equipements : cocher « Autoriser les dates dans le futur »

Voici ensuite un scénario simple (bloc code) qui permet de :

  • définir un tableau de valeurs
  • parcourir ce tableau pour envoyer à la commande (id 34363) ces valeurs aux heures 00:00:00, 01:00:00, 02:00:00, etc … (de la journée en cours)
$a = array(0,0,0,0,0,0,0,150,300,600,400,1000,1200,900,700,500,300,100,50,20,0,0,0,0);

foreach ($a as $key => $value) {
  	$d = date('Y-m-d '.$key.':00:00');
  	cmd::byId(34363)->event($value, $d);
}
1 « J'aime »

Merci pour ta réactivité, je vais tester de ce pas :smiling_face: !

Donc dans mon cas précis de prévision pluie dans l’heure il faut donc que je mette dans les valeurs de l’array les valeurs numériques de prévision, et que j’arrive à les associer à l’heure correspondante qui est « heure actuelle + 5 minutes », « +10 minutes », …:thinking: .

Il faut combiner date et strtotime, je te laisse chercher et si tu trouves pas, dis moi.

1 « J'aime »

Ya moyen que ce soit encore plus simple car mon plugin de prévision me fournit aussi dans une commande la première heure de prévision sous la forme HHMM (1550 pour 15h50). Il fait que j’arrive à transformer ça en HH:mm:ss pour que ça remplace $key dans l’expression date du bloc foreach.

Un petit coup de pouce pour arriver à transformer le string « 1550 » en « aujourd’hui 15h50 + x minutes » le tout au format ‹ Y-m-d hh:mm:ss › ?
Je me mélange les pinceaux entre les string, les datetime, les strtodate :exploding_head:

J’arrive à ça :

$tmp_date = cmd::byId(1268)->execCmd();
$str_datetime = date('Y-m-d '.substr($tmp_date,0,2).':'.substr($tmp_date,2,2).':00');

Ce qui donne 2023-08-13 15:50:00
Mais ensuite j’arrive pas à ajouter x minutes à ce str_datetime.

Essai voir ça : date('Y-m-d H:i:s', strtotime($str_datetime . '+10 minute')) pour ajouter … 10 minutes :innocent:

1 « J'aime »

Au top merci !
Allez j’abuse : j’ai trouvé la commande pour vider l’historique (sinon ça se superpose) mais j’arrive pas à définir les bornes start et end comme « now - 24h » et « now +24h » (je prends large :slight_smile: ).

Édit : j’ai réussi tout seul comme un grand :stuck_out_tongue: (bizarre on peut ajouter/soustraire des ‹ minute › mais pas des ‹ heure › ? )

history::removes(1509,$_startTime=date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s') . '-1240 minute')), $_endTime=date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s') . '+1240 minute')));

Si bien sûr, avec « hour »

Quel c** je fais :smiley:

Mais non mais non.

Je présume que tu n’as pas fini mais si ta question de départ a trouvé réponse, selectionne la solution pour fermer le sujet.

Bonne soirée

Ouiiii j’ai fini ! Je vais écrire un tuto pour Jeedomconnect parceque je sais que y a des fans de ce genre de petit trick.

En tous cas merci pour ton aide!

Édit : mon code complet pour les archives du forum :

history::removes(1509,$_startTime=date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s') . '-24 hour')), $_endTime=date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s') . '+24 hour')));

$tmp_date = cmd::byId(1268)->execCmd();
$str_datetime = date('Y-m-d '.substr($tmp_date,0,2).':'.substr($tmp_date,2,2).':00');


$a = array(
  $value=cmd::byId(1270)->execCmd()-1,
  $value=cmd::byId(1272)->execCmd()-1,
  $value=cmd::byId(1274)->execCmd()-1,
  $value=cmd::byId(1276)->execCmd()-1,
  $value=cmd::byId(1278)->execCmd()-1,
  $value=cmd::byId(1280)->execCmd()-1,
  $value=cmd::byId(1282)->execCmd()-1,
  $value=cmd::byId(1284)->execCmd()-1,       $value=cmd::byId(1286)->execCmd()-1);

foreach ($a as $key => $value) {	
  if ($key<=6)
  {$d = date('Y-m-d H:i:s', strtotime($str_datetime . '+'.($key*5).' minute')); }
  else
  {$d = date('Y-m-d H:i:s', strtotime($str_datetime . '+'.($key*10-30).' minute')); }
cmd::byId(1509)->event($value, $d); }  
}

En gros :

  • je vide l’historique
  • je récupère la string de l’heure de début de prévision et je la transforme en date (et en heure-minute surtout)
  • je récupère les prévisions de pluie (intensité de 1 à 4 que je ramène de 0 à 3 avec -1) dans l’array
  • pour chaque prévision je lui attribue une date en commençant à l’heure de début de prévision et en incrémentant de 5 minutes
  • cas particulier : à partir de la 6e prévision le créneau passe à 10 minutes donc la formule d’incrément change, d’où le if/else.

Y a sûrement plus clean mais ça fonctionne :slight_smile:

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.