2019-02-27 18:24:29 +11:00
|
|
|
\documentclass[a4paper,11pt]{article}
|
2018-12-09 00:35:45 +11:00
|
|
|
|
2018-12-11 06:51:23 +11:00
|
|
|
% \listfiles % pour le debug
|
2018-12-09 00:35:45 +11:00
|
|
|
|
2018-12-11 06:51:23 +11:00
|
|
|
\usepackage[french]{babel}
|
2018-12-09 00:35:45 +11:00
|
|
|
\usepackage[utf8]{inputenc}
|
|
|
|
\usepackage[T1]{fontenc}
|
|
|
|
% XXX \usepackage{lipsum}
|
|
|
|
\usepackage{makeidx}
|
2018-12-21 03:53:18 +11:00
|
|
|
\usepackage{listings}
|
2018-12-09 00:35:45 +11:00
|
|
|
% \usepackage{color}
|
|
|
|
% \usepackage{url}
|
|
|
|
\usepackage{xspace}
|
|
|
|
\usepackage[verbose]{layout}
|
|
|
|
|
|
|
|
\makeindex
|
2019-02-23 01:42:24 +11:00
|
|
|
% \setlength{\parskip}{0.16cm plus 0.16cm}
|
2018-12-10 08:11:20 +11:00
|
|
|
|
2018-12-09 00:35:45 +11:00
|
|
|
% -------------------------------------------------------------------
|
|
|
|
\title{DD2 Monitoring}
|
|
|
|
\author{tTh}
|
|
|
|
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
|
|
|
2018-12-10 08:11:20 +11:00
|
|
|
\pagebreak
|
2018-12-09 00:35:45 +11:00
|
|
|
|
2019-02-26 21:18:46 +11:00
|
|
|
% \setlength{\parskip}{0.01cm plus 0.01cm}
|
|
|
|
\tableofcontents
|
|
|
|
% \setlength{\parskip}{0.16cm plus 0.16cm}
|
|
|
|
|
|
|
|
\pagebreak
|
|
|
|
|
2018-12-09 00:35:45 +11:00
|
|
|
% -------------------------------------------------------------------
|
|
|
|
|
|
|
|
\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
|
2018-12-11 10:33:15 +11:00
|
|
|
et l'humidité de l'air ambiant ou de l'enceinte thermostatée.
|
2018-12-09 00:35:45 +11:00
|
|
|
|
2018-12-14 05:19:24 +11:00
|
|
|
Et comme nous sommes au Tetalab, nous allons essayer d'en faire le plus
|
2018-12-09 00:35:45 +11:00
|
|
|
possible nous même, tant pour l'aspect didactique que pour la possible
|
2018-12-11 06:51:23 +11:00
|
|
|
ré-utilisation de la chose dans un contexte artistique comme nous
|
|
|
|
arrivons parfois à le faire.
|
2018-12-09 00:35:45 +11:00
|
|
|
|
|
|
|
La première étape sera donc la mise au point d'un \textsl{cadriciel}
|
2018-12-11 06:51:23 +11:00
|
|
|
permettant d'essayer diverses options en se basant sur une conception
|
2019-02-26 21:18:46 +11:00
|
|
|
modulaire de l'ensemble. Une grosse partie sera écrite en C\index{C},
|
|
|
|
avec d'éventuels modules en langages de script :
|
|
|
|
Perl\index{Perl}, Awk\index{Awk}, Bash\index{Bash}\dots
|
2018-12-11 06:51:23 +11:00
|
|
|
|
|
|
|
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
|
2018-12-09 00:35:45 +11:00
|
|
|
|
2019-01-28 23:25:13 +11:00
|
|
|
|
2019-02-23 01:42:24 +11:00
|
|
|
\vspace{4cm}
|
2019-01-28 23:25:13 +11:00
|
|
|
|
|
|
|
Bonne lecture.
|
|
|
|
|
2018-12-09 00:35:45 +11:00
|
|
|
% -------------------------------------------------------------------
|
2019-02-21 02:12:15 +11:00
|
|
|
% ===================================================================
|
2018-12-09 00:35:45 +11:00
|
|
|
|
2019-01-28 23:25:13 +11:00
|
|
|
\pagebreak
|
2018-12-10 08:11:20 +11:00
|
|
|
\section{Présentation générale}
|
2018-12-09 00:35:45 +11:00
|
|
|
|
2018-12-10 08:11:20 +11:00
|
|
|
\subsection{Capteurs} \index{capteurs}
|
2018-12-09 00:35:45 +11:00
|
|
|
|
2019-01-28 00:42:44 +11:00
|
|
|
Actuellement nous disposons d'un capteur température et
|
|
|
|
humidité, le
|
|
|
|
\texttt{RDing} \texttt{TEMPERHUM1V1.2}{} qui
|
2018-12-11 06:51:23 +11:00
|
|
|
semble un peu étrange à interpeller, et qui sera destiné à mesurer
|
2019-01-28 00:42:44 +11:00
|
|
|
l'ambiance météo du Double Dragon\footnote{Pas de mauvais esprit, merci...},
|
|
|
|
l'influence humaine n'étant pas à négliger en cas d'afflux du public..
|
2018-12-10 08:11:20 +11:00
|
|
|
|
2019-01-13 04:05:28 +11:00
|
|
|
Par la suite, nous pourrons récupérer
|
|
|
|
(par liaison série, cf page \pageref{serial})
|
2019-01-28 00:42:44 +11:00
|
|
|
des données diverses en provenance de l'automate de contrôle de l'enceinte.
|
2019-02-23 01:42:24 +11:00
|
|
|
Cet automate\index{automate} est décrit page \pageref{automate}.
|
2019-01-28 00:42:44 +11:00
|
|
|
|
|
|
|
Le premier capteur de température sélectionné est le \textsc{LM35}\index{LM35}
|
|
|
|
qui fournit en sortie une tension linéairement proportionnle à
|
|
|
|
la température. Ils seront connectés sur l'automate qui s'en
|
|
|
|
servira pour la régulation thermostatique.
|
|
|
|
|
|
|
|
Il nous reste à choisir d'autres capteurs pour d'autres métriques :
|
2019-02-07 09:01:48 +11:00
|
|
|
humidité, lumière, vibrations, perturbations psychiques\dots
|
2019-01-28 00:42:44 +11:00
|
|
|
|
2019-01-13 04:05:28 +11:00
|
|
|
Notre dd2monitor
|
2018-12-11 06:51:23 +11:00
|
|
|
devrait donc aussi être capable d'envoyer des alertes en cas de souci,
|
2019-02-07 09:01:48 +11:00
|
|
|
par exemple si des algues\footnote{Ou des pleurotes, ou des morilles...}
|
|
|
|
tentent de s'échapper.
|
2018-12-11 06:51:23 +11:00
|
|
|
|
2018-12-09 00:35:45 +11:00
|
|
|
|
|
|
|
\subsection{Stockage}
|
|
|
|
|
|
|
|
Pour entreposer toutes ces valeurs numériques, il existe plusieurs
|
2019-02-26 21:18:46 +11:00
|
|
|
choix, et nous allons en évaluer quelques uns~:
|
2019-01-05 10:19:12 +11:00
|
|
|
|
2019-02-21 02:12:15 +11:00
|
|
|
\texttt{flatfile}\index{flatfile} (page \pageref{flatfile}),
|
2019-01-04 03:05:55 +11:00
|
|
|
\texttt{rrdb}\index{rrdb} (page \pageref{rrdb}),
|
2019-01-05 10:19:12 +11:00
|
|
|
\texttt{influxdb}\index{Influxdb} (page \pageref{influxdb}),
|
|
|
|
\texttt{gnocchi}\index{Gnocchi} (page \pageref{gnocchi})
|
2019-01-28 23:25:13 +11:00
|
|
|
\texttt{Sqlite}\index{sqlite} (page \pageref{sqlite})
|
2019-01-14 07:54:57 +11:00
|
|
|
|
2019-01-17 19:07:47 +11:00
|
|
|
La représentation interne des valeurs reste à définir pour
|
|
|
|
la plupart d'entre elles.
|
2018-12-11 06:51:23 +11:00
|
|
|
|
|
|
|
\subsection{Affichage}
|
|
|
|
|
|
|
|
Nous allons laisser un petit bac-à-sable pour Fred Fermion\index{nodejs},
|
2019-01-14 07:54:57 +11:00
|
|
|
qui nous tartine les oreilles depuis bien trop longtemps avec son machin.js.
|
2018-12-09 00:35:45 +11:00
|
|
|
|
2018-12-12 00:33:16 +11:00
|
|
|
Mais sachez déja que l'automate sera équipé d'un minitel, pourquoi ne
|
2019-01-28 00:42:44 +11:00
|
|
|
pas en mettre un second sur le monitoring ? Après tout, un peu
|
|
|
|
d'eyecandy\index{eyecandy} ne peut pas faire de mal.
|
|
|
|
C'est expliqué à la page \pageref{eyecandy}\index{curses}.
|
2018-12-12 00:33:16 +11:00
|
|
|
|
2018-12-09 00:35:45 +11:00
|
|
|
% -------------------------------------------------------------------
|
2019-02-21 02:12:15 +11:00
|
|
|
% ===================================================================
|
2019-02-26 21:18:46 +11:00
|
|
|
% nouveau 2019-02-22
|
2019-02-23 01:42:24 +11:00
|
|
|
|
2019-02-26 21:18:46 +11:00
|
|
|
\input{automate}
|
2019-02-23 01:42:24 +11:00
|
|
|
|
|
|
|
% ===================================================================
|
|
|
|
|
2018-12-10 08:11:20 +11:00
|
|
|
\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 ?
|
|
|
|
|
2018-12-11 06:51:23 +11:00
|
|
|
C'est pour ça qu'il y a déja un générateur de \textit{fake-values} qui
|
|
|
|
ne demande qu'à grandir.
|
|
|
|
|
2018-12-30 03:45:31 +11:00
|
|
|
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é.
|
|
|
|
|
2019-02-21 02:12:15 +11:00
|
|
|
% -------------------------------------------------------------------
|
2018-12-11 06:51:23 +11:00
|
|
|
|
2018-12-14 05:48:45 +11:00
|
|
|
\subsection{Exemples}
|
|
|
|
|
2019-01-14 07:54:57 +11:00
|
|
|
\textsf{Promis, on va en mettre ! Dès que ça marche\dots}
|
2018-12-14 05:48:45 +11:00
|
|
|
|
2019-01-14 07:54:57 +11:00
|
|
|
Un premier exemple avec rrdb en page \pageref{rrdb}.
|
2019-02-07 09:01:48 +11:00
|
|
|
Le second cause des premiers essais du LM35\index{LM35},
|
|
|
|
capteur de
|
|
|
|
température analogique branché sur un Arduino Mega et relié
|
2019-01-17 19:07:47 +11:00
|
|
|
par un port série (page \pageref{serialcode}).
|
2019-01-04 03:05:55 +11:00
|
|
|
|
2019-01-28 00:42:44 +11:00
|
|
|
Pour continuer dans une démarche disruptive, des outils
|
|
|
|
avancés de visualisation sont proposés dans la rubrique
|
|
|
|
\ref{eyecandy} qui parle de \texttt{vt100}\label{vt100}.
|
2019-02-26 21:18:46 +11:00
|
|
|
|
2019-02-21 02:12:15 +11:00
|
|
|
% -------------------------------------------------------------------
|
2019-01-28 00:42:44 +11:00
|
|
|
|
2018-12-11 06:51:23 +11:00
|
|
|
\subsection{Analyses}
|
|
|
|
|
2019-01-14 07:54:57 +11:00
|
|
|
\textsf{Bla bla bla\dots Corrélations, Gnuplot\index{gnuplot}, toussa\dots}
|
2018-12-14 05:48:45 +11:00
|
|
|
|
|
|
|
Peut-être demander à Schmod777 des références de
|
2019-01-14 07:54:57 +11:00
|
|
|
documents bourbakistes ? J'ai entendu parler dans \textsc{irc}
|
|
|
|
de choses étranges, comme ça :
|
|
|
|
|
|
|
|
\textsl{<schmod777> s/booz/booze pour la courbe qui majore les autres en moyenne serait
|
|
|
|
d'une criante justesse scientifique ;)}
|
|
|
|
|
2019-01-28 00:42:44 +11:00
|
|
|
Ce qui donne quand même à réfléchir. À se demander quel savoir
|
2019-01-17 19:07:47 +11:00
|
|
|
allons-nous pouvoir déduire de ces\footnote{non, c'est pas du bigdata.}
|
2019-01-14 07:54:57 +11:00
|
|
|
chiffres improbables.
|
2019-01-17 19:07:47 +11:00
|
|
|
(Re-)Découvrir les lois de l'inertie thermique ?
|
2019-01-17 20:57:12 +11:00
|
|
|
Générer des formes d'ondes spatialisables ?
|
|
|
|
Déplacer des petites \textit{bubulles} colorées ?
|
|
|
|
Une histoire pour la section \pageref{detournements} ?
|
2019-01-14 07:54:57 +11:00
|
|
|
|
2019-02-21 02:12:15 +11:00
|
|
|
% -------------------------------------------------------------------
|
2019-01-14 07:54:57 +11:00
|
|
|
|
|
|
|
\subsection{Archivage} \index{archivage} \label{archivage}
|
|
|
|
|
2019-02-07 09:01:48 +11:00
|
|
|
\textsf{Conserver la mémoire de nos échecs.}
|
2019-01-28 23:25:13 +11:00
|
|
|
|
2019-01-14 07:54:57 +11:00
|
|
|
La création de cet outil de surveillance est un long parcours
|
|
|
|
pavé d'essais et d'erreurs. Tout cela peut générer beaucoup
|
|
|
|
de données. À titre d'exemple, la capture de température des
|
|
|
|
premier essais sort environ 800 Ko par jour.
|
|
|
|
99.99\% de ces chiffres sont inutiles, mais il peut arriver
|
|
|
|
qu'on désire conserver l'historique d'une
|
|
|
|
expérience réussie\footnote{En fait, c'est comme ça que la science existe}
|
|
|
|
ou d'un
|
|
|
|
\textit{epicfail\footnote{En fait, c'est comme ça que la science avance}}.
|
|
|
|
|
|
|
|
Nous devons donc rencontrer quelqu'un qui maitrise cette partie
|
2019-01-28 00:42:44 +11:00
|
|
|
de la mouvance détournementale de l'espionnage.
|
|
|
|
Je pense que Yaya\index{Yaya} pourra nous éclairer de ses lumières,
|
|
|
|
si on lui demande gentiment.
|
2019-01-14 07:54:57 +11:00
|
|
|
|
|
|
|
% -------------------------------------------------------------------
|
|
|
|
|
2019-02-21 02:12:15 +11:00
|
|
|
\subsection{Affichage}\index{affichage}
|
|
|
|
|
2019-02-23 01:42:24 +11:00
|
|
|
Pour commencer presque simple, un exemple d'affichage avec
|
|
|
|
Gnuplot\index{gnuplot} d'un fichier plat
|
2019-02-21 02:12:15 +11:00
|
|
|
de température (décrit page \pageref{foo.dat}) :
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
DATAFILE="foo.dat"
|
|
|
|
IMAGE="graphe.png"
|
|
|
|
|
|
|
|
gnuplot << __EOC__
|
|
|
|
set term png size 4200,640
|
|
|
|
set output "${IMAGE}"
|
|
|
|
set grid
|
|
|
|
set title "Temperature dans le Double Dragon 2"
|
|
|
|
set xdata time
|
|
|
|
set timefmt "%s"
|
|
|
|
set format x "%d, %H:%M:%S"
|
|
|
|
set yrange [ 0.0 : 30.0]
|
|
|
|
plot "${DATAFILE}" using 1:2 title " foo" with lines, \
|
|
|
|
"${DATAFILE}" using 1:3 title " bar" with lines, \
|
|
|
|
"${DATAFILE}" using 1:4 title "quux" with lines, \
|
|
|
|
"${DATAFILE}" using 1:5 title "booz" with lines
|
|
|
|
__EOC__
|
|
|
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
2019-02-23 01:42:24 +11:00
|
|
|
Prochainement, dès que le premier prototype matériel fournira des
|
|
|
|
données, une tentative de visualisation animée sera faite avec
|
|
|
|
POVray\index{POV}.
|
2019-02-21 02:12:15 +11:00
|
|
|
|
|
|
|
|
|
|
|
% ===================================================================
|
|
|
|
|
2019-01-17 19:07:47 +11:00
|
|
|
\section{Configuration} \index{configuration} \label{configuration}
|
2019-01-14 07:54:57 +11:00
|
|
|
|
2019-01-17 19:07:47 +11:00
|
|
|
Pour adapter cet outil de surveillance aux variations du monde réel,
|
|
|
|
nous devons nous-même lui décrire ce monde. Une description qui se
|
|
|
|
fera avec des lignes de la forme '\texttt{input\_device s /dev/ttyACM0}'
|
|
|
|
qui représentent des tuples
|
|
|
|
\textit{clef-type-valeur}\footnote{Laissons les canards tranquilles.}
|
2019-01-28 23:25:13 +11:00
|
|
|
de choses diverses.
|
2019-01-14 07:54:57 +11:00
|
|
|
|
2019-01-28 23:25:13 +11:00
|
|
|
La syntaxe n'est pas encore vraiment fixée, mais un fichier exemple est
|
2019-01-17 19:07:47 +11:00
|
|
|
disponible pour des explication plus récentes, donc plus en
|
2019-01-28 00:42:44 +11:00
|
|
|
rapport avec la réalité du code. En voici un extrait :
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
# serial input from the control cpu
|
|
|
|
input_device s /dev/ttyACM0
|
|
|
|
input_speed i 9600
|
|
|
|
# --------------------------------------------------
|
|
|
|
# some values for the eyecandy displays
|
|
|
|
eyecandy_banner s hacked by tTh
|
|
|
|
\end{verbatim}
|
2018-12-14 05:19:24 +11:00
|
|
|
|
2019-01-28 23:25:13 +11:00
|
|
|
Certains de ces paramètres pourront être surchargé par des options
|
|
|
|
de la ligne de commande\index{cli} ou des variables d'environnement.
|
2019-02-23 01:42:24 +11:00
|
|
|
|
2019-02-21 02:12:15 +11:00
|
|
|
% ===================================================================
|
|
|
|
|
|
|
|
\section{Flatfile} \label{flatfile}
|
|
|
|
|
|
|
|
Parfois, un fichier à plat est bien pratique, parce qu'il est facilement
|
|
|
|
machinable avec des outils comme Awk\index{Awk}.
|
|
|
|
Après tout, un \textsl{timestamp}\index{timestamp} et quelques valeurs
|
|
|
|
numériques peuvent suffire à beaucoup de \textsl{usecases} de la
|
|
|
|
vie courante.
|
|
|
|
|
2019-02-26 21:18:46 +11:00
|
|
|
Voici le premier exemple, un format\label{foo.dat} d'enregistrement de
|
|
|
|
température facilement exploitable avec Awk ou Gnuplot :
|
2019-02-21 02:12:15 +11:00
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
tth@phytotron:~/DD2-monitor/doc$ tail -3 ../serial/foo.dat
|
|
|
|
1550673785 20.215054 20.107527 20.107527 20.215054
|
|
|
|
1550673811 20.215054 20.215054 20.215054 20.215054
|
|
|
|
1550673836 20.215054 20.107527 20.215054 20.215054
|
|
|
|
\end{verbatim}
|
|
|
|
|
2019-01-28 23:25:13 +11:00
|
|
|
|
2019-01-04 02:41:02 +11:00
|
|
|
% -------------------------------------------------------------------
|
2019-02-26 21:18:46 +11:00
|
|
|
\input{storages}
|
2019-01-28 00:42:44 +11:00
|
|
|
|
2018-12-14 05:19:24 +11:00
|
|
|
% -------------------------------------------------------------------
|
|
|
|
|
2019-02-23 01:42:24 +11:00
|
|
|
\input{serial}
|
2019-02-26 21:18:46 +11:00
|
|
|
\input{detournements}
|
2018-12-10 08:11:20 +11:00
|
|
|
% -------------------------------------------------------------------
|
|
|
|
|
2019-01-14 07:54:57 +11:00
|
|
|
\section{Conclusion} \label{conclusion} \index{conclusion}
|
2018-12-10 08:11:20 +11:00
|
|
|
|
2018-12-11 06:51:23 +11:00
|
|
|
En fait, tout reste à faire. Mais ça peut être un beau projet
|
2019-02-07 09:01:48 +11:00
|
|
|
aux implications et usages multiples. À condition de bien
|
|
|
|
faire les choses.
|
2019-01-14 07:54:57 +11:00
|
|
|
|
|
|
|
Un couteau suisse de la capture du monde réel, un point pivot
|
2019-01-23 03:23:11 +11:00
|
|
|
de nos diverses interprétations de
|
|
|
|
l'univers\footnote{non, la terre n'est pas plate} et des interactions
|
2019-01-14 07:54:57 +11:00
|
|
|
étranges entre des paramètres sans relation clairement definie.
|
2018-12-10 08:11:20 +11:00
|
|
|
|
|
|
|
% -------------------------------------------------------------------
|
|
|
|
\setlength{\parskip}{0.05cm plus 0.05cm}
|
|
|
|
|
2019-02-07 09:01:48 +11:00
|
|
|
% \pagebreak \tableofcontents
|
2018-12-09 00:35:45 +11:00
|
|
|
|
2018-12-11 06:51:23 +11:00
|
|
|
\printindex
|
|
|
|
|
2018-12-09 00:35:45 +11:00
|
|
|
\end{document}
|
|
|
|
|
|
|
|
|