[TUTO] Application web dynamique

Proposer ou rechercher un tutoriel concernant le Raspberry Pi

Modérateur : Francois

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

Re: [TUTO] Application web dynamique

Message par Bud Spencer » dim. 22 avr. 2018 01:02

Aller, comme il ni a rien de plus reposant qu’un peu de code après une dure journée à glander au soleil je mis suis remis pour finir ca :mrgreen:

C’est donc un bon petit pi datalogger qui a les caractéristiques suivantes :
- 8 entrées analogique 12 bits 0 à 5 volts avec niveau d’alarme programmable sur sortie TTL (5v).
- 8 Entrée TTL (5v).
- Paramètres des entrés/sortie configurables par un fichier json (sensor.json).
- Fréquence d’acquisition ajustable à chaud (100, 250, 500, 1000, 2000, 5000 ms). Mode Pause.
- Buffer tournant de 72000 lignes de données (Une ligne = timestamp + 8 analogiques + 8 entrées + 8 sorties). Le buffer peut être vidé ou exporté pendant l’acquisition.
- Export de fichier horodaté au format CSV avec entête de colonnes.

- IHM WEB Temps réel avec accès par user/password.
- Affichage graphique des entrées (analogiques et digitales).
- Leds de visualisation des états entrés/sortie.
- Affichage des valeurs analogiques et des états entrés/sortie.
- Vitesse de défilement des graphique ajustable de 1 à 10 px/data.
- Affichage de l’état du buffer (%, valeurs et barre de progression).
- Affichage d’évènement système (connexions, température cpu, évènement de commande....)

Commandes disponible depuis l'IHM:
- Ajustement de la vitesse des graphiques ( + - ).
- Masquage individuel de courbe graphique pour chaque entrés.
- Téléchargement et effacement du buffer.
- Ajustement de la fréquence d’acquisition ( + - )
- Pause/reprise d’acquisition.
- Commande Reboot et shutdown du système.

Petits plus :
- Statuts complet en temps réel au format json (Web Service REST).
- Hardware : Conforme au schéma de la page précédente (il n’a pas changé).

Le programme est tout à fait fonctionnel meme si vous n’avez pas fabriqué ou câblé l’interface hardware (voir page précédente). Les I/o seront simplement toutes à 0. Le code est un peu plus rêche que pour le reste du tuto mais comme je l’ai dit au départ, ce n’est pas un cours de programmation et il appartient à chacun de se documenter sur le langage s’il y trouve son compte. Ceci dit, je reste dispo pour expliquer ce qui peut sembler nébuleux pour ceux qui ne comprendraient pas tout.

J’ai arrêté là, mais comme vous pouvez le voir sur la GUI, je trouve de nouvelles idées à chaque fois que je me remets dessus et j’en ai encore plein d’autre sous le coude. Qui sait, il y aura peut-être une version 0.0.2 ;-)
gui2.png
gui2.png (462.48 Kio) Vu 861 fois

Une petite vidéo pour voir ce que cela donne en vrai :-)
https://www.dailymotion.com/video/x6iq4r0

Installation : il suffit de dézipper le zip (...) dans un répertoire 'datalogger'. Ensuite, lancer la commande npm install depuis la racine du projet pour installer les dépendances npm.

Commande sudo node index.js pour démarrer le serveur (port 8080).

Pour accéder la page graphique : http://adressedupi:8080
Pour récupérer le statut en temps réel au format json (web service REST) : http://adressedupi:8080/statut
Pour télécharger le contenu du buffer au format csv : http://adressedupi:8080/logfile

pour l'accès web : utilisateur : bud , password : spencer
(vous pouvez changer ca dans le fichier index.js)

datalogger.zip
(653.34 Kio) Téléchargé 17 fois
Modifié en dernier par Bud Spencer le mer. 2 mai 2018 13:01, modifié 2 fois.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Data
Messages : 26
Enregistré le : lun. 23 juil. 2018 16:17
Contact :

Re: [TUTO] Application web dynamique

Message par Data » jeu. 9 août 2018 20:54

Bonsoir,
Avant tout, j'ai rarement vu un Tuto de cette qualité; merci pour ça.

J'ai suivit depuis le début (2jours) et codé; j'ai réussi a trouver mes erreurs (fautes de frappes) et les corriger.

Là je coince; lorsque j'entre npm install rpio ça m'envoi ballader avec ça:

Code : Tout sélectionner

 npm install rpio

> rpio@0.9.22 install /home/pi/myweb/node_modules/rpio
> node-gyp rebuild

make : on entre dans le répertoire « /home/pi/myweb/node_modules/rpio/build »
  CC(target) Release/obj.target/rpio/src/bcm2835.o
  CXX(target) Release/obj.target/rpio/src/rpio.o
In file included from ../../nan/nan.h:51:0,
                 from ../src/rpio.cc:17:
/home/pi/.node-gyp/8.11.3/include/node/node.h:483:3: fatal error: error writing to /tmp/ccwznMRV.s: Aucun espace disponible sur le périphérique
   }
   ^
/home/pi/.node-gyp/8.11.3/include/node/node.h:505:3: note: in expansion of macro ‘NODE_MODULE_X’
   NODE_MODULE_X(modname, regfunc, NULL, 0)  // NOLINT (readability/null_usage)
   ^~~~~~~~~~~~~
../src/rpio.cc:441:1: note: in expansion of macro ‘NODE_MODULE’
 NODE_MODULE(rpio, setup)
 ^~~~~~~~~~~
compilation terminated.
rpio.target.mk:94 : la recette pour la cible « Release/obj.target/rpio/src/rpio.o » a échouée
make: *** [Release/obj.target/rpio/src/rpio.o] Erreur 1
make : on quitte le répertoire « /home/pi/myweb/node_modules/rpio/build »
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:258:23)
gyp ERR! stack     at emitTwo (events.js:126:13)
gyp ERR! stack     at ChildProcess.emit (events.js:214:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:198:12)
gyp ERR! System Linux 4.14.52-v7+
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/pi/myweb/node_modules/rpio
gyp ERR! node -v v8.11.3
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok 
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! rpio@0.9.22 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the rpio@0.9.22 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/pi/.npm/_logs/2018-08-09T18_48_06_009Z-debug.log

C'est un manque de place sur ma carte SD à la compilation j'ai pourtant une carte de 64Gb!!

En voyant ça, je crois avoir trouvé l'erreur. Je reviens après un reboot

Bon j'ai maintenant réussi a installer rpio :D
Pour info, moi aussi je réalise de temps en temps des tutos et afin que cela soit juste je les teste. lors d'une réponse que l'ai faite: http://forums.framboise314.fr/viewtopic ... 271#p29271
où j'ai modifié mon /etc/fstab en mettant les tmp en ram avec 10Mb de ram par /tmp d'où mon manque de place.
En conclusion si quelqu'un a suivit et mon tuto et est ensuite venu suivre celui-ci; qu'il retire ces ligne de son /etc/fstab car je n'ai aucune idée de combien de place en tmp la compilation a besoin.

Le tuto fonctionne NICKEL! :mrgreen:
Data RasPi 3
Rasbian / Debian GNU/Linux
Code en PHP, HTML
Partager la connaissance est la véritable liberté!

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

Re: [TUTO] Application web dynamique

Message par Bud Spencer » lun. 13 août 2018 21:48

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

Data
Messages : 26
Enregistré le : lun. 23 juil. 2018 16:17
Contact :

Re: [TUTO] Application web dynamique

Message par Data » mar. 14 août 2018 13:19

J'essaie de réaliser une serre connectée. Je code depuis très très longtemps en html, php, et mysql. J'ai donc décidé de m'y mettre suite au diverses réponse dont celle de Guillaume9344 qui s'inspire de la leçon 6. Je n'arrive pas encore a saisir comment tu arrive a faire fonctionner le datalogger avec des input et output virtuels alors que je n'arrive pas a faire lire ma bête sonde DS18B20 alors que ce brol fonctionne en Python, C même avec php. Quand je vois les km de code en python+php et le timbre post de nodejs qui plus est est encore moins lourd que mon lighttpd c'est râlant.
Je persévère; en cherchant ici et là je suis tombé sur node-red. Connais tu? Si oui q'en penses tu?
Merci d'avance.
Data RasPi 3
Rasbian / Debian GNU/Linux
Code en PHP, HTML
Partager la connaissance est la véritable liberté!

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

Re: [TUTO] Application web dynamique

Message par Bud Spencer » jeu. 16 août 2018 10:07

Salut Data

Pour le datalogger, j’avais voulu un truc ‘universel’ qui soit capable d’utiliser n’importe quel type de mesure sans avoir à modifier le code, d’où l’usage de capteur analogiques au travers d’un adc. Les sondes que tu comptes utiliser ne répondent pas à ce critère, donc tu ne peux pas les connecter directement. Ceci dit Ajouter quelques sonde ‘propriétaire’ comme des DHTxx peut se faire très facilement en ajoutant une class dédié à chaque modèle sonde et en incluant la lecture dans l’event du timer.

Il existe des package npm pour ce genre de sonde (*) mais si tu sais les lires avec un code python ou c ou ce que tu veux d’autre, tu peux aussi récupérer leurs valeurs par un subprocess. Regarde la méthode que j’ai utilisée pour récupérer la temperature du cpu. Tu peux faire exactement la meme chose pour appeler un script ou un programme qui te retournerait l’état de tes sondes et intégrer ces valeurs comme variables dans ton code nodejs.


Si j’arrive à dénicher une DHT11 ou une DHT22 et je ferais un petit exemple d’usage.
[*) Exemple : https://www.npmjs.com/package/node-dht-sensor
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Data
Messages : 26
Enregistré le : lun. 23 juil. 2018 16:17
Contact :

Re: [TUTO] Application web dynamique

Message par Data » jeu. 16 août 2018 20:04

Merci des infos j'vais pensé aux modules npm et installé ceux ci je n'ai pas le temps cette semaine car je donne mon dernier stage sportifs avant la quille. Ceci dit, je dois encore vérifier le module dont tu fournis le lien car en python il y a un conflict avec la cam (que je n'utilise pas pour le momment) il faut blacklister le bmcxxxx.

J'aurai plus de temps merc'redi prochain.

En attendant j' ai créé mon journal intime là: http://forums.framboise314.fr/viewtopic ... 351#p29351
C'est un gros job en perspective mais je vai avoir le temps.

Encore merci.

Pour les DHT11 je peux t'en envoyer; chaque fois que je commande un DHT22 on me fourgue un 11 ;)
Data RasPi 3
Rasbian / Debian GNU/Linux
Code en PHP, HTML
Partager la connaissance est la véritable liberté!

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

Re: [TUTO] Application web dynamique

Message par Bud Spencer » mer. 29 août 2018 13:33

J’ai vu sur ton ‘journal intime’ que tu avais trouvé des exemples pour utiliser tes sondes avec NodeJS. Avec ça et les exemples de codes du tuto, tu as maintenant tout ce qu’il te faut pour réaliser ton projet de serre connectée. Je te souhaite d’arriver à te sentir à l’aise avec la programmation de NodeJS. Si tu y arrives, tu vas vraiment te rendre compte que ce n’est pas un si gros job que ça et aussi que c’est l’outils idéal pour réaliser ce genre de chose notamment sur un rikikipI et à quel point il est devenu totalement obsolète d’utiliser les classiques php+python pour ça.

Merci pour les sondes DHT11, mais je vais passer directement sur des DHT22.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

adelantejm
Messages : 28
Enregistré le : ven. 5 oct. 2018 09:11

Re: [TUTO] Application web dynamique

Message par adelantejm » lun. 8 oct. 2018 09:11

Bonjour à tous,

Tout ceci est super et c'est ce que je voudrais faire.
Malheureusement je me suis mis péniblement au C++ (avec l'Arduino) et je voudrais bien ne pas repartir à zéro avec java.
Y aurait-il l'équivalent de tous vos travaux en C++ sur RPI bien sûr?
Merci d'avance.

destroyedlolo
Raspinaute
Messages : 1215
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Re: [TUTO] Application web dynamique

Message par destroyedlolo » lun. 8 oct. 2018 09:54

Salut,

Attention, c'est du JavaScript, pas du java.
Tu auras des tuto de ce genre si tu cherches coté WiringPI.
Ceci dit, l'excellent lien que tu as envoyé dans un sujet précédent contient de bonnes bases de départ si tu veux le faire en C(++ ou pas).

Ceci dit, NodeJS est aussi une bonne solution, même si elle impose d'installer NodeJS et donc plus lourd qu'un programme C(++).

A+
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

adelantejm
Messages : 28
Enregistré le : ven. 5 oct. 2018 09:11

Re: [TUTO] Application web dynamique

Message par adelantejm » lun. 8 oct. 2018 14:48

Merci pour ta réponse.
J'ai avancé :
Tout fonctionne, je ne sais pas pourquoi ça ne marchait pas avant !?!?!
Si ça intéresse quelqu'un je suis à sa disposition.
Au fait, ce qui fonctionne, c'est l'échange de moins de 64 caractères entre un PI serveur (langage C++, développement sous NetBeans)
et un ESP32 client (langage C++, développement sous IDE Arduino)

JM

Répondre

Retourner vers « Tutoriels »