Enregistre valeur à heure fixe dans une table sur le web

Rechercher
Boutique en ligne, solution e-commerce, script PHP et PERL : RAYNETTE

Enregistre valeur à heure fixe dans une table sur le web

Par papy71  -  13 reponses  -  Le 07/02/2019 18:27  -  Editer  - 

Bonjour,
PHP, PD0, HTML et Arduino sert dans mon programme.
j'ai un programme qui enregistre sur 24 h ma température sur un serveur dans une table 'temp' -> Id, date, Max, Min .
je récupère les valeurs Max et Min entre 23h58 et 23h 59 pour les sauvegarder dans une table 'annuelle' puis efface les enregistrements de la table 'temp'.
Mon programme tourne bien, j'ai ce que je veux sur la carte SD du Shield, mais sur le web, c'est bon uniquement si je suis connecté. si mon ordi est en arrêt ou en veille, cela ne fonctionne pas.
J'ai une carte Arduino et son shield ethernet avec un programme qui passe par " GET /add.php?temp1= " les valeurs à une page add.php, je récupère ces valeurs pour ma table 'temp'.
Ensuite avec une page index.php, je défini l'heure, je cherche le Max et Min puis fait mon insert dans la table 'annuelle', et j'affiche cette table à l'écran.
Questions:
- Dois-je enregistrer l'heure du serveur? Comment?. (je ne veux pas d'une horloge dans mon montage).
- Est-ce uniquement la question de l'heure qui empêche l'autonomie de mon programme sur le serveur ?
Je l'avoue, étant manuel, j'ai du mal à comprendre les échanges entre l'ordi, l'arduino, la box et le serveur.
Je cherche conseilles et explications, car pour le moment je suis bloqué et en fouillant sur le net, je ne trouve pas de réponses adéquates. (beauxoup trop de sites sont obsolètes).
Merci d'avance pour votre aide.
Cordialement.

 

Réponses apportées à cette discussion

Par Cyrano  -  Le 08/02/2019 03:43  -  Haut de page  - 

Bonjour,
ce genre de fonctionnalité se couple typiquement avec un tâche cron (les tâches planifiées sous Linux)

Pour faire ça, on crée généralement un code en PHP, code exécutable en ligne de commande, et la ligne de commande servant à le déclencher devra être appelé par une tâche planifiée sur le serveur. De cette manière, il n'y a plus besoin de se connecter quand on veut procéder à un relevé et on ne se connecte plus que pour consulter les données indépendamment du processus d'enregistrement.

Ce qu'il faut bien saisir, c'est qu'en PHP, on ne peut pas créer de programme autonome, il faut faire appel à un autre système qui le soit et qui puisse éventuellement faire exécuter du code PHP.

Une tâche cron se programme assez simplement en indiquant la fréquence et l'heure à laquelle doit être exécutée la ligne de commande. Selon l'hébergeur, on peut ou non avoir accès aux tâches cron, tous les hébergeurs ne le proposent pas. Certains le proposent mais mettent des restrictions sur les horaires, ainsi chez OVH, on peut définir l'heure, mais pas la minute de l'exécution, donc on pourrait dire à 23 heures, mais pas à 58 minutes, donc ça pourrait s'exécuter aussi bien à 23h01 qu'à 23h25 ou 23h55.
On trouve pas mal de tutos simples pour programmer une tâche cron. Pour le reste, s'il y a d'autres questions, je pourrai peut-être apporter quelques éléments s'il en manque.

 
Par papy71  -  Le 08/02/2019 09:49  -  Haut de page  - 

Bonjour,
Merci Cyrano pour cette réponse, j'avais entrevue cron et compris que c'était plus orienté Linux. Je suis sous Win 10.
Existe t-il une façon de faire avec ma configuration.
Serveur hébergé chez Alwaydata, php 7.2.9 phpMyadmin 4.8.5 Win 10 (64)

Mes programmes PDO tournent, mais je suis bloqué aussi bien pour enregistrer la télé-info, mes capteurs et pour les messages d'alertes. Je n'ai pas de problème en tapant dans un URL afin de faire les tests.
Avez vous une solution, une passerelle pour franchir ce stade, je pense que je ne suis pas le seul (sous Windows) à avoir rencontré ce problème....
Merci d'avance pour votre aide.

 
Par Cyrano  -  Le 08/02/2019 10:01  -  Haut de page  - 

Il faudrait commencer par vérifier si j'ai correctement compris l'idée générale : les températures sont enregistrées sur une machine locale via Arduino puis envoyées chaque jour vers l'application PHP sur le serveur où elles sont alors enregistrées ?

Je ne suis en réalité pas sur de bien visualiser le schéma fonctionnel du processus général...

 
Par papy71  -  Le 08/02/2019 16:45  -  Haut de page  - 

j'ai posté une réponse à 15h28, mais je ne vois rien, donc ne recommence, mes excuse si deux fois de suite...

Arduino envoie par les température à une page PHP qui elle enregistre sur une table placée dans base de donnée.

1 - je n'enregistre rien sur mon ordinateur.
2 - ma température est enregistrée toutes les 15 minutes dans une table journalière "temp" qui est dans une BD alwaysdata.
3 - vers minuit je veux sauvegarder le Max et Min dans une table de sauvegarde " annuelle " dans la même BD. puis remise à zéro de la table "temp".

Mes observations:
- si je laisse mon ordi en veille, les enregistrements se font bien toutes les 15 mn dans ma table "temp" mais pas de Max Min dans ma table "annuelle" vers les monuits.

maintenant si je programme un enregistrement de Max Min entre 15h14 et 15h15 et que je suis connecté à ma page php du site , là j'ai bien mon Max et Min enregistré dans "annuelle" . Vérifier dans MySQL.

la même procédure, mais pas la page de site connectée, les valeurs Max et Min ne sont pas enregistrées.

Est-ce plus clair ainsi, merci pour l'aide.

 
Par Cyrano  -  Le 08/02/2019 16:52  -  Haut de page  - 

Plus ou moins : si je comprends bien, Arduino n'envoie les données vers le serveur que si l'ordinateur est en fonction ? Ça voudrait donc dire que l'équipement Arduino n'est pas autonome.

Je ne connais pas Arduino, je n'ai jamais touché à ces équipements, ce n'est pas du tout mon rayon. Mais du coup, j'ignore comment ça se programme. Logiquement, les questions que ça m'inspire sont relativement simples : est-ce que l'arduino se connecte seul à Internet pour envoyer les données ? Quelles interactions existent entre Arduino et l'ordinateur , indépendamment de la connexion au serveur ?

 
Par papy71  -  Le 08/02/2019 19:01  -  Haut de page  - 

En finalité, l'Arduino est simplement relié avec la box pour être sur le réseau internet. pour fonctionner il lui faut du 5 volts, et uniquement une liaison pour le chargement d'un programme, une fois charge l'arduino n'a plus besoin d'un ordi.

Mais dans mon cas, c'est relié à mon ordi pour la mise au point, le problème me semble être au niveau de l'heure qui est lue sur mon ordi donc, vous avez raison de parler de CRON pour effectuer une opération php à heure fixe. En finalité, il n'y aura pas d'ordinateur là où je vais installer mon montage.

Le programme Arduino assure la connexion, entre la sonde de température et le serveur. Elle passe, par la méthode POST ou GET , les valeurs de tempéture à une page.php qui elle est sur le serveur. Cette page doit assurer la transmission des données après traitement aux tables.

Je pense que mon problème est un problème php, j'ai la connexion avec le serveur et le passage des données. Le serveur répond qu'il a bien reçu l'information dès la déconnexion.

Y voyez-vous un peu mieux dans cette logique où moi même j'ai du mal a suivre. Pour info l'Arcuino UNO ne peut pas faire de lecture de table ou autres traitements, il passe par du PHP ou PYNTHON, et autres langages. Il est juste suffisant pour la gestion des capteurs, assurer une connexion et envoyer les infos des capteurs.

 
Par Cyrano  -  Le 08/02/2019 19:07  -  Haut de page  - 

Je n'y vois pas beaucoup plus clair.

Ce que je visualise pour l'instant :
- un Arduino qui gère un capteur de température, programmable pour collecter la température à certaines heures, et pour se connecter et envoyer les données collectées vers le serveur;
- un ordinateur dont finalement on a pas besoin pour faire fonctionner le tout;
- Un serveur distant avec un code PHP pur recevoir les données et effecuer les enregistrement dans la base de données.

C'est bien ça ?

 
Par papy71  -  Le 08/02/2019 19:18  -  Haut de page  - 

Oui, vous êtes dans la bonne logique.
Je pense que la page php qui a pour consigne de faire une opération à un moment donné n'a pas de référence pour ce moment donné.
CRON va pour linux, mais avez-vous une 'passerelle' afin de récupérer l'heure du serveur.
Je pense que beaucoup tourne en local ou sur un équipement propre à chacun, mais dans mon cas, j'ai besoin de passer par un fournisseur d'accès et une vase de donnée.

 
Par Cyrano  -  Le 08/02/2019 23:06  -  Haut de page  - 

Si je me fie à mon intuition, on se moque de l'heure du serveur, l'heure qui compte, c'est celle du relevé de la température, donc normalement, c'est une heure envoyée par Arduino. Et logiquement, si l'équipement Arduino est autonome, il n'y a nul besoin d'un cron, c'est l'équipement qui est programmé pour envoyer ses relevés à telle ou telle heure.

Coté serveur, il y a une requête HTTP (l'appel de la page de traitement par l'équipement Arduino) avec des données en GET ou en POST voire les deux, et la page traite ces données pour procéder aux enregistrements.

Mais là, il faut donc vérifier la programmation de l'Arduino :
- liste et structure des données envoyées;
- url de la page vers laquelle c'est envoyé
Et normalement, il n'y a besoin de rien d'autre. Mais je ne pourrai pas aider sur la programmation de l'Arduino, je n'ai absolument aucune idée du fonctionnement de ces équipements

 
Par papy71  -  Le 09/02/2019 10:05  -  Haut de page  - 

Bonjour,

Merci Cyrano, je vais regarder mon problème en le reprenant de zéro. Mais je crains qu'il va me falloir un script pour que cette opération soit exécutée.
Des que possible, je passerai la résolution du problème, cela pourra servir a d'autres personnes...
Encore merci.
A bientôt.

 
Par Cyrano  -  Le 09/02/2019 22:43  -  Haut de page  - 

Ok, je suggère d'effectuer une recherche sur « programmation Arduino » dans un moteur de recherche pour voir éventuellement des exemples. Mais au préalable, je crois important de vérifier et de définir clairement les données que doit collecter et transmettre l'Arduino et sous quelle forme (données GET ou POST, tableau, JSON etc..)

Bon courage, désolé de ne pouvoir proposer mieux.

 
Par papy71  -  Le 28/02/2019 22:48  -  Haut de page  - 

Bonsoir Cyrano,

Enfin, j'ai une solution...
Comme je ne voulais pas d'horloge ( RTC ) dans mon montage, il me fallait l'heure d'un serveur. Cron était une possibilité mais sous Linux. Il y a maintenant une passerelle pour Windows, mais j'avoue que c'était compliqué à mettre en oeuvre. Après plusieurs recherches j'ai trouvé avec " NTP " (Network Time Protocol).
Mon programme Arduino appel un serveur Européen et 2 bibliothèques TimeLib.h, EthernetUdp.h. Puis avec un passage GET dans une page PHP je relève tous les 15 mn mon heure et ma température. Puis avec une autre page PHP, je sauvegarde Max-Min de la journée pour compléter autre table et efface la table de relevé de la journée.
Cela fonctionne bien sans connexion à mon ordinateur.
Merci pour les conseils Cyrano.
Je n'ose pas dire à bientôt, cela serait synonyme d'un nouveau problème
PHP - PDO pour l'écriture de mon programme PHP-MySql qui tourne bien mais que je veux mettre au gout du jour.

 
Par Cyrano  -  Le 28/02/2019 22:53  -  Haut de page  - 

Bonsoir Papy71,
je suis content d'apprendre que ça fonctionne.

Quant à la prochaine, qui sait, mais ce sera probablement sur un probleme d'une autre nature.

Bonne continuation

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !