272 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			272 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| 
 | |
| \documentclass[a4paper,11pt]{article}
 | |
| 
 | |
| % \listfiles              % pour le debug
 | |
| 
 | |
| \usepackage[french]{babel}
 | |
| \usepackage[utf8]{inputenc}
 | |
| \usepackage[T1]{fontenc}
 | |
| % XXX \usepackage{lipsum}
 | |
| \usepackage{makeidx}
 | |
| \usepackage{listings}
 | |
| % \usepackage{color}
 | |
| % \usepackage{url}
 | |
| \usepackage{xspace}
 | |
| \usepackage[verbose]{layout}
 | |
| 
 | |
| \makeindex
 | |
| \setlength{\parskip}{0.25cm plus 0.25cm}
 | |
| 
 | |
| % -------------------------------------------------------------------
 | |
| \title{DD2 Monitoring}
 | |
| \author{tTh}
 | |
| 
 | |
| \begin{document}
 | |
| \maketitle
 | |
| 
 | |
| \pagebreak
 | |
| 
 | |
| % -------------------------------------------------------------------
 | |
| 
 | |
| \section{Introduction}
 | |
| 
 | |
| Dans le cadre du futur projet \textsl{phytotron}\index{phytotron},
 | |
| nous aurons besoin d'un
 | |
| système de surveillance de divers paramêtres, du genre la température
 | |
| et l'humidité de l'air ambiant ou de l'enceinte thermostatée.
 | |
| 
 | |
| Et comme nous sommes au Tetalab, nous allons essayer d'en faire le plus
 | |
| possible nous même, tant pour l'aspect didactique que pour la possible
 | |
| ré-utilisation de la chose dans un contexte artistique comme nous
 | |
| arrivons parfois à le faire.
 | |
| 
 | |
| La première étape sera donc la mise au point d'un \textsl{cadriciel}
 | |
| permettant d'essayer diverses options en se basant sur une conception
 | |
| modulaire de l'ensemble.
 | |
| 
 | |
| Les valeurs à mesurer étant de diverses natures, nous aurons l'occasion
 | |
| de découvrir plein de capteurs différents : température, humidité,
 | |
| \texttt{pH}, transparence, lumière, vibrations\dots
 | |
| 
 | |
| % -------------------------------------------------------------------
 | |
| 
 | |
| \section{Présentation générale}
 | |
| 
 | |
| \subsection{Capteurs} \index{capteurs}
 | |
| 
 | |
| Actuellement nous disposons d'un \texttt{RDing TEMPERHUM1V1.2}{} qui
 | |
| semble un peu étrange à interpeller, et qui sera destiné à mesurer
 | |
| l'ambiance météo du DD2\footnote{Pas de mauvais esprit, merci...}.
 | |
| 
 | |
| Par la suite, nous pourrons récupérer (par liaison série, cf p. \pageref{serial})
 | |
| des données
 | |
| en provenance de l'automate de contrôle de l'enceinte. Notre dd2monitor
 | |
| devrait donc aussi être capable d'envoyer des alertes en cas de souci,
 | |
| par exemple si des algues\footnote{ou des pleurotes.} tentent de s'échapper.
 | |
| 
 | |
| 
 | |
| \subsection{Stockage}
 | |
| 
 | |
| Pour entreposer toutes ces valeurs numériques, il existe plusieurs
 | |
| choix, et nous allons en évaluer quelques uns :
 | |
| 
 | |
| \texttt{rrdb}\index{rrdb} (page \pageref{rrdb}),
 | |
| \texttt{influxdb}\index{Influxdb} (page \pageref{influxdb}),
 | |
| \texttt{gnocchi}\index{Gnocchi} (page \pageref{gnocchi})
 | |
| 
 | |
| \subsection{Affichage}
 | |
| 
 | |
| Nous allons laisser un petit bac-à-sable pour Fred Fermion\index{nodejs},
 | |
| qui nous tartine les oreilles depuis trop longtemps avec son machinjs.
 | |
| 
 | |
| Mais sachez déja que l'automate sera équipé d'un minitel, pourquoi ne
 | |
| pas en mettre un second sur le monitoring ?
 | |
| 
 | |
| % -------------------------------------------------------------------
 | |
| \section{Outils}
 | |
| 
 | |
| \subsection{Simulations}
 | |
| 
 | |
| Bien entendu, mettre au point un système de monitoring pour un futur
 | |
| phytotron pose un problème : d'où viennent les premières mesures ?
 | |
| 
 | |
| C'est pour ça qu'il y a déja un générateur de \textit{fake-values} qui
 | |
| ne demande qu'à grandir.
 | |
| 
 | |
| Nous avons également un générateur de nombres divers et incohérents
 | |
| qui envoie des quadruplets d'entiers 10 bits précédés d'un caractere
 | |
| de bonne efficacité.
 | |
| 
 | |
| 
 | |
| \subsection{Exemples}
 | |
| 
 | |
| Promis, on va en mettre ! Dès que ça marche\dots
 | |
| 
 | |
| Premier exemple avec rrdb en page \pageref{rrdb}.
 | |
| 
 | |
| \subsection{Analyses}
 | |
| 
 | |
| Bla bla bla\dots Corrélations, toussa\dots
 | |
| 
 | |
| Peut-être demander à Schmod777 des références de
 | |
| documents bourbakistes ?
 | |
| 
 | |
| % -------------------------------------------------------------------
 | |
| \section{RRDB} \label{rrdb}
 | |
| 
 | |
| Première tentative d'utilisation le lendemain du premier apéro 2019
 | |
| du Tetalab\footnote{Jean-Yves, je vous demande de vous calmer !}.
 | |
| 
 | |
| Je suis parti sur quelques scripts shell, pour créer, mettre à jour et
 | |
| analyser les enregistrements d'une valeur de type \textsc{gauge}.
 | |
| 
 | |
| \subsection{Create}
 | |
| 
 | |
| \begin{lstlisting}
 | |
| #!/bin/bash
 | |
| 
 | |
| source ./commun.sh
 | |
| starttime=$(date +'%s')
 | |
| echo creating $RRDB at ${starttime}s since epoch
 | |
| rrdtool	create $RRDB			\
 | |
| 	--start $starttime		\
 | |
| 	--step 60			\
 | |
| 	DS:value:GAUGE:150:0:10		\
 | |
| 	RRA:AVERAGE:0.5:1:60
 | |
| \end{lstlisting}
 | |
| 
 | |
| \subsection{Update} \index{rrdtool}
 | |
| 
 | |
| Une fois la base créée, il faut bien la remplir.
 | |
| Dans cet exemple, nous allons utiliser le \textit{load}
 | |
| de notre Linux.
 | |
| 
 | |
| \begin{lstlisting}
 | |
| #!/bin/bash
 | |
| 
 | |
| source ./commun.sh
 | |
| ctime=$(date +'%s')
 | |
| value=$(cut -d ' ' -f 1 /proc/loadavg)
 | |
| 
 | |
| # inject value in the rrdb file 
 | |
| rrdtool	update $RRDB ${ctime}:${value}
 | |
| \end{lstlisting}
 | |
| 
 | |
| \subsection{Analyze}
 | |
| 
 | |
| Nous allons essayer d'exploiter les données dûrement acquises
 | |
| pendant les heures qui précèdent\dots
 | |
| 
 | |
| \begin{lstlisting}
 | |
| #!/bin/bash
 | |
| 
 | |
| source ./commun.sh
 | |
| tmpf="somevalues.dat"
 | |
| rrdtool fetch $RRDB LAST			|
 | |
| tr -d ':'					|
 | |
| awk	'
 | |
| 	(!/nan/ && NF==2) { print $1, $2 }
 | |
| 	' 					\
 | |
| 			> ${tmpf}
 | |
| 
 | |
| # as an example, we are gnuploting our datas
 | |
| gnuplot << __EOC__
 | |
| set term png size 800,600
 | |
| set output "graphe.png"
 | |
| set grid
 | |
| plot "${tmpf}" with lines
 | |
| __EOC__
 | |
| 
 | |
| rm ${tmpf}
 | |
| \end{lstlisting}
 | |
| 
 | |
| Il semble bien que l'utilisation de \texttt{fetch} ne soit pas
 | |
| vraiment prévue pour ça...
 | |
| 
 | |
| % -------------------------------------------------------------------
 | |
| 
 | |
| \section{InfluxDB} \label{influxdb}
 | |
| 
 | |
| La communication avec la bédédé se fait \textit{over HTTP}, un peu
 | |
| comme tous ces trucs de d'jeunz d'aujourd'hui\dots
 | |
| 
 | |
| Au programme : écriture d'un injecteur en Perl\index{Perl}, en suivant
 | |
| plus ou moins l'exemple de rrdb..
 | |
| 
 | |
| Ceci dit, en Debian stable, on n'a que la version 1.0, qui ne 
 | |
| correspond plus trop à l'actualité. Et la \textit{current} est
 | |
| trop fatiguante à compiler pour ce soir.
 | |
| 
 | |
| % -------------------------------------------------------------------
 | |
| 
 | |
| \section{Gnocchi} \label{gnocchi} \index{Gnocchi}
 | |
| 
 | |
| \texttt{pip install gnocchi[postgresql,ceph,keystone]}, finalement,
 | |
| çe ne me donne pas trop envie.
 | |
| 
 | |
| % -------------------------------------------------------------------
 | |
| 
 | |
| \section{Serial coms} \index{serial} \label{serial}
 | |
| 
 | |
| Il va y avoir deux liaisons série entre l'automate et le monitoring.
 | |
| La première, que nous allons juste entrevoir, passera par le port
 | |
| USB de la carte Arduino. La seconde passera par un port série
 | |
| auxiliaire\footnote{Il y en a 4 sur le mega 2560} de celle-ci.
 | |
| 
 | |
| \begin{lstlisting}
 | |
| tcgetattr(uart0, &options);
 | |
| options.c_cflag = baudbits | CS8 | CLOCAL | CREAD;
 | |
| options.c_iflag = IGNPAR;
 | |
| options.c_oflag = 0;
 | |
| options.c_lflag = 0;
 | |
| tcflush(uart0, TCIFLUSH);
 | |
| tcsetattr(uart0, TCSANOW, &options);
 | |
| \end{lstlisting}
 | |
| 
 | |
| Et en fait, le \texttt{read} sur le \textsl{fd} du serial device
 | |
| n'est pas bloquant, \texttt{perror} annonce \emph{success}, mais
 | |
| rien ne marche. L'année 2019 va commencer sur du vaudou programming%
 | |
| \footnote {aka shotgun debugging.}.
 | |
| 
 | |
| \textit{29 décembre 2018} : le petit grain de magie\index{magie}
 | |
| est très simple à mettre en oeuvre, mais
 | |
| très difficle à spotter dans le gazillion d'options. Il semblerait
 | |
| que mettre \texttt{options.c\_cc[VMIN]} à 1 permet d'avancer vers
 | |
| l'étape suivante.
 | |
| 
 | |
| Laquelle étape est une tentative d'utilisation de \texttt{select(2)},
 | |
| dans l'objectif de pouvoir gérer nous-même le \textit{timeout},
 | |
| laquelle tentative n'est pas du tout concluante. 
 | |
| 
 | |
| % -------------------------------------------------------------------
 | |
| 
 | |
| \section{Détournements}
 | |
| 
 | |
| Dans le contexte myryssien, il est évident que l'aspect artistique
 | |
| doit être dès le départ pris en compte.
 | |
| Les possibilités ne seront limitées que par votre manque d'imagination.
 | |
| 
 | |
| Mais si vous voulez un petit exemple, imaginez des courbes de température
 | |
| qui pilotent un \texttt{uGen} de Chuck\index{chuck} ou des algues dont la lumière
 | |
| envoie du \texttt{cv/gate} en temps réel...
 | |
| 
 | |
| 
 | |
| 
 | |
| % -------------------------------------------------------------------
 | |
| 
 | |
| \section{Conclusion}\label{conclusion}\index{conclusion}
 | |
| 
 | |
| En fait, tout reste à faire. Mais ça peut être un beau projet
 | |
| aux implications et usages multiples.
 | |
| 
 | |
| % -------------------------------------------------------------------
 | |
| \setlength{\parskip}{0.05cm plus 0.05cm}
 | |
| 
 | |
| \pagebreak \tableofcontents
 | |
| 
 | |
| \printindex
 | |
| 
 | |
| \end{document}
 | |
| 
 | |
| 
 |