[TUTO] Application web dynamique

Proposer ou rechercher un tutoriel concernant le Raspberry Pi

Modérateur : Francois

Répondre
guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: [TUTO] Application web dynamique

Message par guillaume9344 » dim. 28 mai 2017 16:40

Ca y est , j'ai refait fonctionner la leçon 6. je suis reparti d'une image de rasbian propre (jessie 2017/04/10) et je n'ai pas fais d'upgrade, mis a jour node et npm, charger le nouveau fichier lecon6 et lancé npm install , tous a bien fonctionné du premier coup. pour info ,les numéros de pin à utiliser dans le config.json est la numérotation bcm ,la commande gpio readall donne les numéros des pins soit bcm soit wripi soit gpio.
Bud ,encore merci pour votre aide.
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

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

Re: [TUTO] Application web dynamique

Message par Bud Spencer » lun. 29 mai 2017 20:57

Merci pour le retour Guillaume.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

stéph
Messages : 1
Enregistré le : lun. 14 août 2017 10:24

Re: [TUTO] Application web dynamique

Message par stéph » lun. 14 août 2017 10:24

Hello world


Envoyé de mon iPad en utilisant Tapatalk

james6
Messages : 1
Enregistré le : mer. 13 sept. 2017 04:37

Re: [TUTO] Application web dynamique

Message par james6 » mer. 13 sept. 2017 04:43

Une petite combine quand vous avez de gros fichiers Json et que vous avez la flemme de chercher les erreurs. Vous pouvez les passer par cette moulinette pour voir si ils sont cohérants : json formatter https://jsonformatter-online.com

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

Re: [TUTO] Application web dynamique

Message par Bud Spencer » mer. 13 sept. 2017 10:08

Merci pour l'info James.
Sur la lecon 6, j'avais proposé le contrôle json a partir du site http://jsonlint.com/, mais celui que tu proposes est bien plus complet. Il permet aussi la conversion xml et affiche clairement l'arborescence de la structure json donc Je le garde :-)
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

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

Re: [TUTO] Application web dynamique

Message par Bud Spencer » dim. 8 oct. 2017 14:15

Comme c’est dimanche et qu’il ne fait pas beau, j’en profite pour vous ajouter ce petit truc. J’ai retrouvé ce petit script que j’avais écrit pour un de mes sites NodeJS distant. Son rôle est de gérer l’update d’un dns dynamique. Il y a bien sur beaucoup de box qui ont cette fonction, mais sur le site en question ce n’est pas le cas. Il est en place sur un site depuis plus d’un an avec un DynHost de chez OVH. Tout semble démontrer qu’il fonctionne parfaitement car depuis, j’ai toujours eu accès à mes sites distant qui l’utilisent. Il fonctionne aussi avec NoIp.

Voilà donc comment fonctionne ce script :
Il fait d’abord un dns lookup sur mon domaine dynamique pour récupérer l’adresse ip correspondante. Ensuite, il fait une requête http sur le site de mon domaine public en appelant une page lui renvois l’ip publique (truc genre monip mais hébergé par moi). La page php appelée est toute simple et ne contient que ça :

Code : Tout sélectionner

<?php echo $_SERVER['REMOTE_ADDR'];?>
Si les 2 adresses sont identiques, cela s’arrête là, par contre, si elles sont différentes, le script fait une requête d’update pour mettre à jour le dyn.dns

Tout ça peut paraître un peu compliqué pour faire l’update de l’ip d’un dyn.dns, mais d’une part, je trouve cela beaucoup plus propre que d’updater arbitrairement toute les x minutes même si l’ip n’a pas changée et d’autre part, cela me permet de connecter mon PI sur n’importe quel site sans me soucier de savoir si la box permet l’update. Cela permet aussi d’avoir plusieurs domaines dynamiques. Le petit plus est une page web qui donne l’adresse du dyn.dns ainsi que la date et l’heure du dernier changement d’ip et surtout l’avantage ultime de tout avoir dans un seul et même projet sans dépendre de rien d’autre que de nodejs.

En fait, si je mets ce script c’est plus pour son coté didactique qui vient complémenter le tuto en donnant un exemple concret de 3 nouveaux npm qui sont ‘dns’, ‘request’ et ‘events’ ainsi qu’une méthode qui permet d’écrire des objets avec évènements dans des fichiers séparés.
L’objet créé utilise son propre timer et à chaque opération, il déclenche un évènement qui est interprété par le script principale. Dans l’exemple avec la page web fournie, à chaque réception d’un évènement de l’objet, le script principale transmet les données aux clients web sur un socket pour la mise à jour dynamique des pages. L’objet expose aussi 3 fonctions (check, run et stop) que le client peut exploiter pour dialoguer avec l’objet.

Le fichier dynip.js et le fichier dynip.html sont dans le zip ainsi qu’un fichier dynip.txt qui contient les explications pour la mise en œuvre.
dynip.zip
(3 Kio) Téléchargé 248 fois
Voici le code concret que j’utilise pour mon DynHost OVH et l’aperçu de la page web qui va avec.
dynip_ovh.png
dynip_ovh.png (39.36 Kio) Vu 8403 fois
dynip.png
dynip.png (23.34 Kio) Vu 8403 fois
On voit que l'ip dynamique à changée ce matin à 11h10 et que le 'timer control' est actif

Bon dimanche ;)
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

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

Re: [TUTO] Application web dynamique

Message par Bud Spencer » dim. 15 oct. 2017 12:09

On m’a fait remarquer à juste titre (Merci Christian) que la plupart des web-service public qui retournent l’ip publique utilisent le plus souvent la notation JSON. Comme j’étais le seul à utiliser ce script et que j’hébergeais moi-même mon propre service, cela ne me gênais pas mais pour ceux qui n’ont pas cette possibilité c’est plus gênant. J’ai donc modifié le script pour le rendre plus ‘cohérant’.

Désormais, la variable config.urlip doit soit contenir une adresse qui retourne l’ip publique dans une structure json {"ip": "xxx.xxx.xxx.xxx"} ou peut aussi être laissée vide. Voici quelques url publiques qui retournent l'ip publique dans le bon format:

Jsonip.com
freegeoip.net/json/
api.ipify.org/?format=json

Si vous voulez comme moi héberger votre propre service sur un site public, voilà un exemple de code php qui remplace l’ancien :

Code : Tout sélectionner

<?php 
header('Content-Type: application/json');
$data->ip = $_SERVER['REMOTE_ADDR'];
echo json_encode($data);
?>
En laissant cette variable vide, cela by-pass le contrôle de l’ip du domaine par le dns lockup et la comparaison avec l’ip publique. Dans ce cas d’utilisation, cela met à jour l’ip du dyn.dns de façon systématique à chaque check. Ce qui revient à un simple updater. Dans ce cas d’utilisation, les balises URL IP Publique, Dernier Contrôle, Adresse IP publique et Adresse IP du Domaine deviennent obsolète dans la page web puisque qu’elles ne sont jamais initialisées.

J’en ai profité pour ‘nettoyer’ un peu le code et le rendre plus conforme. Je laisse l’ancien à titre didactique pour ceux qui veulent faire des comparaisons.
dynip.zip
(3.4 Kio) Téléchargé 241 fois
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

drean
Messages : 20
Enregistré le : lun. 1 févr. 2016 19:17

Re: [TUTO] Application web dynamique

Message par drean » mar. 19 déc. 2017 21:35

bonjour

comme promis je vous fournis mes fichiers qui tournent sur ma framboise depuis 5 semaines sans aucun plantage. Finalement c'est la partie matériel qui est le plus chi...
en sortie des cartes relais statiques ( acheter sur internet ) pour passer du 5V au 220V et en entrée des relais classique pour passer du 220V au 3.7V( carte faite sur une plaque perforée ).
je commande 8 volets roulants, dans ma maison il y en a 9 donc va falloir faire autrement que par le gpio, je pense passer par i2c ce qui me permettra de gérer la citerne d'eau de pluie, la porte du garage, les 9 volets et plus si affinité.
vous verrez que je n'ai rien inventé c'est presque du copier coller.
encore merci à toi Bud c'est grâce à ton tuto que ça a marché.

à plus tard pour la version i2c

André
volets.zip
(3.8 Kio) Téléchargé 233 fois

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

Re: [TUTO] Application web dynamique

Message par Bud Spencer » sam. 23 déc. 2017 10:14

Merci pour le retour drean.

J’ai regardé ton code, et effectivement, même c’est juste une adaptation de la leçon n°6 cela t’a permis de découvrir ce genre de solution. Pour interfacer le hardware, regarde du côté du mcp23017 (i2c) ou mieux encore, le mcp23S17 (spi). Ce sont des expander 16 i/o adressables très facile à mettre en œuvre. Si je trouve un peu de temps, je rajouterais une leçon d’exemple pour l’usage d’un de ces composants en utilisant nodejs.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

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

Re: [TUTO] Application web dynamique

Message par Bud Spencer » lun. 15 janv. 2018 22:03

Un petit bout de code vite fait qui utilise un mcp23s17 (16 I/O expander spi). Cette fois ci je n’ai pas utilisé la lib wiringPi (pas réinstallée et pas envie), mais un autre npm qui repose sur la lib bcm2835. Pour l’installer, c’est comme les autres modules à savoir ‘npm install rpio’ depuis la racine du projet. Pour test, cette fonction peut simplement être rajoutée dans la leçon 6 et être appelée par un http://adressedupi:port/23s17
mcp23s17.gif
mcp23s17.gif (37.6 Kio) Vu 7430 fois
mcp23s17_reshttp.gif
mcp23s17_reshttp.gif (9.16 Kio) Vu 7430 fois
L’exemple initialise la librairie et la spi sur le CS0 à une vitesse de 6.25Mhz (si vous testez avec des grands fils sur une plaque d’essais pourrite, vous pouvez remplacer (64) par (128) pour réduire la vitesse de moitié. Ensuite il initialise les I/O du chips : Port A en entrée avec pull-up et port B en sortie.
La dernière partie du code lit la valeur des entrées du port A puis écrit le résultat sur le port B et retourne le résultat de la lecture du port B au format Json. Pour faire mumuse et voir que cela fonctionne il suffit de relier tour à tour les pins du port A à la masse et rafraichir la page.
Bien entendu ce n’est pas exploiter tel quel. C’est juste une démo simpliste des différentes commandes utiles pour initialiser la spi et le composant et dialoguer avec les I/O. Pour rappel, on peut adresser 8 mcp23S17 sur une spi avec un seul CS, ce qui fait 128 I/O avec seulement 4 fils reliés au PI (hors alimentation du composant et masse commune). Pour la démo, les broche A2,A1 et A0 sont à mettre à la masse et la broche /reset bien évidement au +

Référence :
Datasheet mcp23s17 : http://ww1.microchip.com/downloads/en/D ... 01952C.pdf
NPM rpio : https://www.npmjs.com/package/rpio
Lib. BCM2835 : http://www.airspayce.com/mikem/bcm2835/index.html

Vala, c’est tout pour ce soir ;)
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 »