Bonjour,
Je souhaite récupérer, via un code php, le prochain evenement à venir donc à partir de maintenant dans un agenda (plugin Agenda de Jeedom appli domotique) pour piloter le chauffage…
J’ai récupéré le code ci-après, il fonctionne mais il me contraint à préciser le nom de l’évènement dans le code (TEST2). Si j’enlève les lignes de codes pour ne plus préciser le nom de l’evenement recherché, il me récupère le premier evenement chrono de mon agenda.
Voici le premier code initial :
$id=42; //ID du calendrier
$event_names= ["TEST2"];//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 ;
}
}
}
}
Si je lui spécifie le nom de l’évènement (premier code ci-dessus), il me récupère bien le prochain à partir de maintenant moyennant le nom de l’evenement qui est une contrainte car il ne sera pas fixe à l’usage. Si je ne précise pas le nom de l’évènement (deuxième code ci-après), il me récupère le premier évènement de mon agenda.
VOici le deuxième code :
$id=42; //ID du calendrier
$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) {
$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 ;
}
}
Le résultat pour mon premier code est :
[2023-12-30 10:27:19][SCENARIO] -- Start : Scenario lance manuellement.
[2023-12-30 10:27:19][SCENARIO] - Exécution du sous-élément de type [action] : code
[2023-12-30 10:27:19][SCENARIO] Exécution d'un bloc code
[2023-12-30 10:27:19][SCENARIO] id :42
[2023-12-30 10:27:19][SCENARIO] Check ID=28 : TEST3
[2023-12-30 10:27:19][SCENARIO] Check ID=32 : TEST3
[2023-12-30 10:27:19][SCENARIO] Next : TEST3 2023-12-31 09:30:00 to 2023-12-31 10:30:00
[2023-12-30 10:27:19][SCENARIO] Fin correcte du scénario
il me détecte bien tous les évènements de mon agenda intitulés « TEST3 » mais sur la ligne Next en résultat, il me ressort bien uniquement le prochain à partir de maintenant (ID évènement 32)
Le résultat pour le deuxième code est :
[2023-12-30 10:27:44][SCENARIO] -- Start : Scenario lance manuellement.
[2023-12-30 10:27:44][SCENARIO] - Exécution du sous-élément de type [action] : code
[2023-12-30 10:27:44][SCENARIO] Exécution d'un bloc code
[2023-12-30 10:27:45][SCENARIO] id :42
[2023-12-30 10:27:45][SCENARIO] Check ID=28 : TEST3
[2023-12-30 10:27:45][SCENARIO] Fin correcte du scénario
Il me récupère le premier évènement de mon agenda intitulé « TEST3 » (Evenement ID28) alors que le prochain evenement à partir de maintenant est l’evenement « TEST3 » également mais avec l’ID32. De plus, je n’ai plus la ligne Next en résultat.
Je ne comprend pas pourquoi il me sort plus la ligne Next ?
Il faudrait que je précise en code la notion de recherche « à partir de maintenant » mais mes compétences et connaissance en PHP sont bien insuffisantes malheureusement, j’ai tenté de nombreux tests depuis des semaines sans succès.