Je sèche un peu alors je me permet de solliciter votre aide. Voila le contexte :
La maison est située dans un lieu assez venté et j'ai des brise soleil qui supportent mal les grosses rafales. L'idée est d'automatiser leur ouverture en cas d'alerte au vent.
La seule solution vraiment fonctionnelle que j'ai trouvé c'est de me créer une alerte sur windy, qui m'envoie un mail que je décortique via le plugin mail listenener dans un scénario dédié. J'ai pas voulu me lancer dans l'API de windy, par manque de temps.
Depuis quelques semaines que je travaille sur ce truc je trouve que les previsions de windy sont très fiables !
Pour faire ça j'ai introduit dans le scénario un bout de code PHP (que je ne connais pas du tout à la base) . Je me suis documenté et j'ai bien tatonné mais j'arrive a extraire les données qui m'interessent dans le mail reçu.
L'idée c'est donc de déterminer d'apres le sujet du mail, la date et l'heure de la prochaine alerte, puis de créer une notification le matin du jour de l'alerte, ou la veille au soir si l'alerte a lieu dans la nuit.
Pour ça je récuperer la date de la future alerte + la date du jour et je fais un écart entre les deux en minutes pour programmer une notification future directement dans le scénario.
Code : Tout sélectionner
/Recupere les infos de l'alerte dans le msujet du mail
$Recup_sujet = cmd::byString("#[Maison][Alerte Windy][Sujet]#");
$Sujet = $Recup_sujet->execCmd();
$scenario->setData("Sujet_Windy", $Sujet);
//Extrait les données du sujet et les mets en forme
$Heure_Windy = substr($Sujet, -8);
$Heure_Windy_OK = date( "H", strtotime( $Heure_Windy ) );
$Min_Windy_OK = date( "i", strtotime( $Heure_Windy ) );
$Date_Windy = substr($Sujet, -15, 6);
$Jour_Windy_OK = date ( "j", strtotime( $Date_Windy ) );
$Mois_Windy_OK = date ( "n", strtotime( $Date_Windy ) );
$Annee_Windy_OK = date ( "Y", strtotime( $Date_Windy ) );
// Date actuelle pour comparaison
$Heure_Today = date ( "H");
$Min_Today = date ( "i");
$Jour_Today = date ( "j");
$Mois_Today = date ( "n");
$Annee_Today = date ( "Y");
// Ecrit les valeurs dans des variables pour scénario pour les passer à la suite
$scenario->setData("Heure_Windy", $Heure_Windy_OK);
$scenario->setData("Min_Windy", $Min_Windy_OK);
$scenario->setData("Jour_Windy", $Jour_Windy_OK);
$scenario->setData("Mois_Windy", $Mois_Windy_OK);
$scenario->setData("Annee_Windy", $Annee_Windy_OK);
$scenario->setData("Heure_today", $Heure_Today);
$scenario->setData("Min_today", $Min_Today);
$scenario->setData("Jour_today", $Jour_Today);
$scenario->setData("Mois_today", $Mois_Today);
$scenario->setData("Annee_today", $Annee_Today);
// Mise en forme de la date d'alerte complète pour verification
$Date_Alerte_Windy = $Jour_Windy_OK ."-". $Mois_Windy_OK . "-" . $Annee_Windy_OK . " " . $Heure_Windy_OK. ":" . $Min_Windy_OK . ":00";
$scenario->setData("Date_Alerte_Windy", $Date_Alerte_Windy);
L'autre soucis c'est que comme ça sert a rien de recevoir des alertes dans la nuit, il faut pouvoir décaler les alertes à la veille au soir.
Tout ça passe par des boucles de controle sur les dates via des if/then et c'est ce que j'ai du mal a faire et comme on n'a pas (ou j'ai pas trouvé) de vraie console PHP, j'ai bpc de mal a débugger le truc.
si qqu'un a un exemple fonctionnel pour faire la/les chose suivantes en PHP ça me serait d'un grand secours :
Si (mois_alerte =1 et mois_courant = 12) alors année_alerte = année_courante + 1an
Si heure alerte > 21 et heure alerte <6 alors heure_alerte = 20 ET jour_alerte = jour_alerte - 1jour
J'ai epluché la doc PHP mais impossible de faire fonctionner ces boucles.