[TUTO] Application web dynamique

Proposer ou rechercher un tutoriel concernant le Raspberry Pi

Modérateur : Francois

Artemus24
Raspinaute
Messages : 902
Enregistré le : ven. 15 sept. 2017 19:15

Re: [TUTO] Application web dynamique

Message par Artemus24 » sam. 15 janv. 2022 13:30

Salut à tous.

Beau travaille Bud. :)

Cordialement.
Artemus24.
@+
--> RPI4B/8GB + Argon FanHAt
--> Rpi3A+, Rpi3B+
--> RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
--> RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
--> RPi0v1.3, RPi0W, Rpi0WH + Tuner TV HAT

Bud Spencer
Raspinaute
Messages : 1069
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Message par Bud Spencer » dim. 16 janv. 2022 10:50

Merci Artemus ;)

Avant de passer à l’écriture du programme principale, je vais m’assurer que tous mes petits objets fonctionnent correctement. Pour ça j'avais déjà écrit un petit fichier de test pour chacun d’eux. Ça pourra toujours servir en cas de panne ou s’il y avait besoin de modifier leurs fonctionnements.

Le premier à passer au banc c’est l’objet sun du module Openweathermap. J'ai appelé le fichier test_sun.js ( 1 ) . Comme l’objet est totalement indépendant, j’ai juste à créer une instance de celui-ci et m’abonner à ses évènements. Une sortie console dans chaque abonnement est suffisante pour voir ce qu’il se passe.

Je l’exécute par une commande node test_sun.js et au bout de quelques secondes cela me revoit ‘erreur’ :shock: ( 3 ) . Comme j’ai passé 1 en paramètre ticksmn, je laisse quand meme tourner le code une minute pour voir si la ré-interrogation de l’api se fait bien puisque je n'ais pas eu de reponse valable. C’est bien le cas, mais toujours 'erreur' en réponse. Le pourquoi est tout simple. Quand j’avais fait mes tests de cet objet, j’avais volontairement bugger l’url pour m’assurer que l’évènements ‘error’ fonctionnait bien et j’avais tout simplement oublié de l’enlever. ( 2 ) Sur la ligne de construction de l’url, j’avais mis ‘’&long=’’ au lieu de ‘’&lon=’' pour le paramètre de longitude. J’enlève donc de g et je relance le test qui cette fois ci me revoit bien un objet json avec 3 timestamp en ms ( 3 ). J’attends un peu plus d’une minute pour etre sur que la ré-interrogation de l’api ne se fait pas et c’est bon.
test_sun.png
test_sun.png (60.69 Kio) Vu 847 fois
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Bud Spencer
Raspinaute
Messages : 1069
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Message par Bud Spencer » dim. 16 janv. 2022 11:34

Le test suivant est pour le capteur jour/nuit. Ici meme procédure puisque cet objet est lui aussi totalement indépendant. J’importe rpio, puis Je créer une instance de cjn et je m’abonne à son évènement Comme par défaut la propriété Jour est false et qu’il fait bien jour dans mon bureau, je laisse tourner le truc une dizaine de minute. Quand je reviens voir, j’ai bien reçu un et un seul évènement avec Jour à true. Je recouvre le capteur avec une petite boite et je reviens quelques minutes plus tard. J’ai bien reçu un nouvel évènement avec jour à false. Quelques petits essais en recouvrant ou pas le capteur pendant seulement 1 ou 2 minutes me confirme le bon fonctionnement, à savoir que le capteur est interrogé toutes les minutes et que le changement de la propriété Jour ne s’effectue qu’après x lecture successive dans le meme état.
test_cjn.png
test_cjn.png (24.38 Kio) Vu 846 fois
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Bud Spencer
Raspinaute
Messages : 1069
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Message par Bud Spencer » dim. 16 janv. 2022 11:58

Je passe au test du Panel. Ici, la sortie est beaucoup plus bavarde puisque l’évènements est levé toutes les secondes. Ça fait d’une pierre trois coup puisque ce timing me permet de faire clignoter la led d’alive, de scruter l’état du bouton inverseur sans avoir besoin de mettre en place d’interruption et cela déclenchera un envoi sur le socket vers les clients qui pourront afficher l’heure du serveur à la seconde, ce qui sera un bon moyen de contrôle du bon fonctionnement du programme quand ils seront sur une pages. Je profite d’avoir câblé le hard pour m’assurer que la position du bouton est bien prise en charge, j’ai bien la led d’alive qui clignote et la led de wifi qui est allumé. J’en profite aussi pour tester la reconnexion automatique du wifi en le désactivant sur ma box et tout fonctionne normalement. La led wifi s’éteint quand il ni a plus de reseau et se rallume quand celui-ci est rétabli.
test_panel.png
test_panel.png (40.75 Kio) Vu 844 fois
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Bud Spencer
Raspinaute
Messages : 1069
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Message par Bud Spencer » mar. 18 janv. 2022 19:12

Quand j’avais posté le code de l’objet Porte, j’avais dit qu’il y avait un truc qui me gratouillait. C’est tout bête, mais si vous regarder le code que j’avais fait, vous pouvez remarquer que pendant que la porte est en mouvement, je scrutais l’état des IO concerné toutes les 500ms. Le but étant d’arrêter au plus vite le moteur quand une fin de course est détectée. Le problème, c’était qu’à chaque lecture de la méthode readstatus par le timer (donc toutes les 500ms), l’évènement était levé. Dans l’absolu, rien de bien grave, mais moi ça me gratouillait … J’ai donc repris ce code et je l’ais modifié pour que l’évènement ne soit levé qu’en cas de changement d’une des io. J’en ai profité pour remplacer les 0 et 1 de rlon et rldn par des booleans (plus propre) et réduit le nombre de variables utile au strict minimum. J’ai aussi ajouter la prise en charge de l’état de la porte au cas où l’on n’utilise pas de contact de fin de course.

EDIT :

Décidément, il ne me plaisait pas le code de cette porte. Donc je l’ai réécrit.
Un des interet majeur de la poo, c’est justement de permettre de faire abstraction de ce qu’il se passe à l’interieur du code d’un objet pour n’en exposer que ce que l’on a besoin a l’exterieur. Cet objet est une porte, donc ou en sont les relais et les fdc, on s'en fout, la seule chose que l’on a besoin de savoir, c’est si elle est ouverte, fermée ou en mouvement dans un sens ou dans l’autre. Pour ce qui est des actions, on a juste besoin de pouvoir l’ouvrir ou la fermer.
J’ai donc réécrit le code de cette porte pour n’exposer que ce qu’il y a besoin d’avoir. J’ai réduit la lecture des 4 IO utilisées au strict minimum. Quand la porte monte ou descend, la seule chose que je dois surveiller c’est l’état de la fin de course du sens où va la porte, ni plus ni moins. Avec cette réflexion, le code est beaucoup plus simple et consommera beaucoup moins de ressource pendant les rotations du moteur :

Avant, pendant que la porte était en mouvement, toutes les 500 ms on avait 4 lecture de GPIO , 15 évaluations. Avec ce nouveau code simplifié , 1 lecture gpio , 2 évaluations.
porte.png
porte.png (107.69 Kio) Vu 774 fois
Modifié en dernier par Bud Spencer le dim. 23 janv. 2022 16:20, modifié 3 fois.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Bud Spencer
Raspinaute
Messages : 1069
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Message par Bud Spencer » mar. 18 janv. 2022 19:19

Pour le petit fichier de test de l'objet porte, comme j'avais déjà validé le Panel donc je l'utilise pour pouvoir utiliser mon bouton et ca donne ca :
test_porte.png
test_porte.png (28.56 Kio) Vu 813 fois
Il ne me reste plus qu'a mettre tout ca dans la marmite d'un programme principale et ecrire une paire de pages html.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Répondre

Retourner vers « Tutoriels »