Page 1 sur 1

Récupérer le futur évènement

Publié : 14 sept. 2019, 19:50
par pj66
Bonjour,

Peut-on récupérer l'info du futur événement de l'agenda ?
Je voudrais récupérer l'information pour modifier un widget sur le ramassage de mes poubelles :mrgreen: qui n'est pas toujours avec un passage alterné : jaune-bleue-jaune-bleue
mais qui peut être des fois : bleue bleue bleue jaune

L'info du prochain passage est bien dispo sur le futur événement ,Poubelle bleue mardi 17.09 ...

Image

mais je ne sais pas comment l'exploiter pour modifier le widget en conséquence
Merci

Re: Récupérer le futur évènement

Publié : 15 sept. 2019, 09:55
par Cruise
Bonjour
On peut récupérer l'information via un bloc code dans un scénario.
Un exemple pour récupérer les événements et leur date de lancement pour un calendrier d'id 179 :

Code : Tout sélectionner

$id_calendar=179;
$events=[];
$calendar=eqLogic::byId($id_calendar);
if(isset($calendar)) {
  $events=$calendar->getEvents();
  }
if(isset($events) && is_array($events) && count($events)>0) {
   foreach ($events as $event) {
     $evenement = $event->getName(); // nom de l'evenement
     $nextstart=$event->nextOccurrence('start'); // prochain declenchement de l'evenement
     $scenario->setLog('Evénement '.$evenement.' programmé le '.$nextstart);
     }
   }
Reste à utiliser l'information ensuite pour modifier le widget.

Re: Récupérer le futur évènement

Publié : 15 sept. 2019, 18:26
par pj66
Impec ; Merci pour l'info
Je me suis donc farci ce qu'est un bloc code.
Effectivement par le biais d'un scénario je retrouve mon info manquante.
==> bien qu'elle ne se trouve pas en 1ere position dans les différents événements à venir.
C'est pas gagné ... :roll:

Re: Récupérer le futur évènement

Publié : 24 oct. 2019, 19:31
par pj66
Bonsoir

:? Beh comme j'avais dit c'est pas gagné ...
voici mon code un peu modifié par rapport à celui de Cruise

et la variable(poubelle) enregistrée est le dernier événement :roll:
c-a-d Poubelle Jaune Eté programmé le 2020-06-11 18:00:00 mais ce n'est pas ça que je veux !

Code : Tout sélectionner

$id_calendar=311;
$events=[];
$calendar=eqLogic::byId($id_calendar);
if(isset($calendar)) {
  $events=$calendar->getEvents();
  }
if(isset($events) && is_array($events) && count($events)>0) {
   foreach ($events as $event) {
     $scenario->setData(Poubelle,$event->getName());
     $evenement = $event->getName(); // nom de l'evenement
     $nextstart=$event->nextOccurrence('start'); // prochain declenchement de l'evenement
     $scenario->setLog('Evénement '.$evenement.' programmé le '.$nextstart);
     }
   }
Voici le log

Code : Tout sélectionner

------------------------------------
[2019-10-24 19:11:48][SCENARIO] Start : Scenario lance manuellement.
[2019-10-24 19:11:48][SCENARIO] Exécution du sous-élément de type [action] : code
[2019-10-24 19:11:48][SCENARIO] Exécution d'un bloc code
[2019-10-24 19:11:49][SCENARIO] Evénement Poubelle Bleue Hivers programmé le 2019-10-28 18:00:00
[2019-10-24 19:11:49][SCENARIO] Evénement Poubelle Jaune Hivers programmé le 2019-10-30 18:00:00
[2019-10-24 19:11:49][SCENARIO] Evénement Poubelle Bleue Eté Mardi programmé le 2020-06-02 18:00:00
[2019-10-24 19:11:49][SCENARIO] Evénement Poubelle Bleue Eté Samedi programmé le 2020-06-06 18:00:00
[2019-10-24 19:11:49][SCENARIO] Evénement Poubelle Jaune Eté programmé le 2020-06-11 18:00:00
[2019-10-24 19:11:49][SCENARIO] Fin correcte du scénario
Je voudrais récupérer l'info :
Poubelle Bleue Hivers sur la ligne Poubelle Bleue Hivers programmé le 2019-10-28 18:00:00
c-à-d le prochain évènement.
Désolé , ch'suis pas programmeur , c'est du chinois pour moi

Merci d'avance

Re: Récupérer le futur évènement

Publié : 24 oct. 2019, 20:41
par Naboleo
pj66 a écrit :
24 oct. 2019, 19:31
Je voudrais récupérer l'info :
Poubelle Bleue Hivers sur la ligne Poubelle Bleue Hivers programmé le 2019-10-28 18:00:00
c-à-d le prochain évènement.
Désolé , ch'suis pas programmeur , c'est du chinois pour moi

Merci d'avance
Salut,

Tu peux essayer ça

Code : Tout sélectionner

$id=139; //ID du calendrier
$event_names= ["Poubelle Bleue Hivers"];//Noms des événements séparés par des virgules
$events=[];
$calendar=eqLogic::byId($id);
$scenario->setLog("id :".$id);

if(isset($calendar)) {
	$events=$calendar->getEvents();
}

if(isset($events) && is_array($events) && count($events)>0) {
	foreach ($events as $event) {
		foreach ($event_names as $event_name) {
			if($event->getName() == $event_name)
            {
              	$EvtName=str_replace(" ","_",$event->getName());
				$nextstart=$event->nextOccurrence('start');
				$nextend=$event->nextOccurrence('end');
                $scenario->setLog("Check ID=".$event->getID()." : ".$EvtName);
                $scenario->setData($EvtName."_start", "");
                $scenario->setData($EvtName."_stop", "");
                if(isset($nextend))
                {
					$nextstart=(isset($nextstart)) ? $nextstart : "En cours";
					$scenario->setData($EvtName."_start", $nextstart);
					$scenario->setData($EvtName."_stop", $nextend);
					$scenario->setLog("Next : ".$EvtName." ".$nextstart." to ".$nextend);
					unset($event_names[array_search($event_name,$event_names)]);
				}
				break ;
			}
		}
	}
}	
A la fin tu dois avoir 2 variables jeedom : Poubelle_Bleue_Hivers_start et Poubelle_Bleue_Hivers_stop

Re: Récupérer le futur évènement

Publié : 24 oct. 2019, 21:51
par pj66
Bonsoir,
Ouai , j'ai les 2 variables mais ,j'aurais aimé que la valeur de la variable soit "Poubelle bleue" ou " poubelle jaune" en fonction du prochain évènement.
Là j'ai l'heure de début et de fin mais que de la bleue
Image
Que se passera t-il quand se sera au tour de la jaune ?
Merci pour ta patience

Re: Récupérer le futur évènement

Publié : 25 oct. 2019, 01:08
par Naboleo
pj66 a écrit :
24 oct. 2019, 21:51
Bonsoir,
Ouai , j'ai les 2 variables mais ,j'aurais aimé que la valeur de la variable soit "Poubelle bleue" ou " poubelle jaune" en fonction du prochain évènement.
Merci pour ta patience
Pour l'affichage dans l’ordre d'arrivée des événements, le widget fait déjà le boulot.
Capture.PNG
Capture.PNG (5.97 Kio) Consulté 3560 fois
Donc je vois pas trop quel est ton besoin (le moyen de le faire est à déterminer et ça veut peu-être dire que le meilleur moyen c'est pas du code)

Pour les autres événements (jaune etc), regarde le 1er commentaire :

Code : Tout sélectionner

$event_names= ["Poubelle Bleue Hivers"];//Noms des événements séparés par des virgules
Donc à toi de mettre ce que tu veux dans les crochets.
Maintenant pour aller juste un peu plus loin, comme tu vas avoir les dates et heures dans 4 variables, tu vas pouvoir comparer la plus proche dans un virtuel info par exemple :

Code : Tout sélectionner

strtotime(variable(Poubelle_Bleue_Hivers_start))
Te donne un nombre plus ou moins grand

Re: Récupérer le futur évènement

Publié : 25 oct. 2019, 10:46
par Naboleo
Bon j'avais un peu de temps ce matin ... j'ai testé rapidement
Il faut corriger les 2 noms d’événements

Code : Tout sélectionner

$id=139; //ID du calendrier
$event_names= ["Poubelle verte","Poubelle jaune"];//Noms des événements séparés par des virgules
$events=[];
$calendar=eqLogic::byId($id);
$scenario->setLog("id :".$id);

if(isset($calendar)) {
	$events=$calendar->getEvents();
}
$firstdate="";
$firstevent="";
if(isset($events) && is_array($events) && count($events)>0) {
	foreach ($events as $event) {
		foreach ($event_names as $event_name) {
			if($event->getName() == $event_name)
            {
				$nextstart=$event->nextOccurrence('start');
				$scenario->setLog("Check ID=".$event->getID()." : ".$event_name." le ".$nextstart);
				if(strtotime($nextstart) <= strtotime($firstdate) || $firstdate == "")
				{
					$firstdate=$nextstart;
					$firstevent=$event_name;
				}
				break ;
			}
		}
	}
	$scenario->setData("Prochain Evenement", $firstevent);
  	$scenario->setLog("Prochain Evenement : ".$firstevent);
}

Re: Récupérer le futur évènement

Publié : 25 oct. 2019, 22:36
par pj66
Bonsoir,

Impec :!: ! MERCI :!:
J'ai changé les 2 noms d'évènements , j'ai bien la valeur désirée dans la variable créée.

Le but des variables est de faire changer mon widget "poubelle"
==> le widget du calendrier suffit ,je suis d'accord il affiche en 1er le prochain évènement mais je voulais un widget poubelle en +.

J'arrange mes scénarios et je te tiens informé quand ce sera au tour de l'autre poubelle à être sortie.

Merci encore !