Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

Alerte Rafales de vent / Horaires / Codage PHP / debug

Réservé à la création de scénarios dans JEEDOM
ikariya
Timide
Messages : 50
Inscription : 27 août 2017, 09:33

Alerte Rafales de vent / Horaires / Codage PHP / debug

Message par ikariya » 03 mai 2018, 10:14

Bonjour,
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);
Le principal problème c'est que dans le mail de windy, l'année est pas précisée, résultat ça peut poser des pb pour des alertes reçues fin décembre (ce qui est la periode la plus propice aux tempetes !).

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.

Avatar de l’utilisateur
fwehrle
Actif
Messages : 2824
Inscription : 01 juil. 2015, 11:03
Localisation : Strasbourg

Re: Alerte Rafales de vent / Horaires / Codage PHP / debug

Message par fwehrle » 03 mai 2018, 10:54

Je ne connaissais pas windy. Merci.
Par contre, pourquoi tu te complique la vie alors qu'ils ont une api?
https://api.windy.com/myapps
Tu peux peut-être juste utiliser le plugin script pour récupérer l'info qui t'intéresse à intervalle régulier.
J'essayerais.

Envoyé de mon Nexus 6P en utilisant Tapatalk

Jeedom 3 sur Debian 9 en VM Proxmox 5 sur NUC Intel.
(Anciennement sur Docker sur Syno DS-415+ / MariaDB / DSM 6)
Teleinfo / RFXCom / Stick ZWave / IPX / Serveur Traccar / Blea

ikariya
Timide
Messages : 50
Inscription : 27 août 2017, 09:33

Re: Alerte Rafales de vent / Horaires / Codage PHP / debug

Message par ikariya » 03 mai 2018, 13:56

j'ai pas reussi a trouver rapidement comment obtenir une donnée de prédiction en un lieu donné avec leur API, ça renvoie pas du JSON
j'ai trouvé ça plus simple de bricoler à partir du mail

Pour le moment j'ai controuné la boucle hn PHP en remettant des bouts de script scenario au milieu si/alors/sinon mais ça oblige a passer les variables du PHP en variables scénarios et de les rappeler a chaque fois dans les divers bouts de code php. bref ça marche a peu pres mais c'est pas très élégant !

Xistof
Timide
Messages : 118
Inscription : 13 janv. 2018, 19:59

Re: Alerte Rafales de vent / Horaires / Codage PHP / debug

Message par Xistof » 25 avr. 2019, 16:53

je déterre ce sujet, mais est-ce que tu pourrais présenter ta solution ?
je suis dans la même problématique que toi, j'aimerai récupérer les données du site pour me faire une alerte :)

Répondre

Revenir vers « Scénarios »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 6 invités