DD2-monitor/doc/dd2-monitoring.tex
2019-05-20 18:54:50 +02:00

314 lines
10 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.16cm plus 0.16cm}
% -------------------------------------------------------------------
\title{DD2 Monitoring}
\author{tTh}
\begin{document}
\maketitle
\pagebreak
% \setlength{\parskip}{0.01cm plus 0.01cm}
\tableofcontents
% \setlength{\parskip}{0.16cm plus 0.16cm}
\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. 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
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
\vspace{4cm}
Bonne lecture.
% -------------------------------------------------------------------
% ===================================================================
\pagebreak
\section{Présentation générale}
\subsection{Capteurs} \index{capteurs}
Actuellement nous disposons d'un capteur température et
humidité, le
\texttt{RDing} \texttt{TEMPERHUM1V1.2}{} qui
semble un peu étrange à interpeller, et qui sera destiné à mesurer
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..
Par la suite, nous pourrons récupérer
(par liaison série, cf page \pageref{serial})
des données diverses en provenance de l'automate de contrôle de l'enceinte.
Cet automate\index{automate} est décrit page \pageref{automate}.
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 :
humidité, lumière\index{luminosité}, vibrations,
perturbations psychiques\dots
Notre dd2monitor
devrait donc aussi être capable d'envoyer des alertes en cas de souci,
par exemple si des algues\footnote{Ou des pleurotes, ou des morilles...}
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{flatfile}\index{flatfile} (page \pageref{flatfile}),
\texttt{rrdb}\index{rrdb} (page \pageref{rrdb}),
\texttt{influxdb}\index{Influxdb} (page \pageref{influxdb}),
\texttt{gnocchi}\index{Gnocchi} (page \pageref{gnocchi})
\texttt{Sqlite}\index{sqlite} (page \pageref{sqlite})
La représentation interne des valeurs reste à définir pour
la plupart d'entre elles.
\subsection{Affichage}
Nous allons laisser un petit bac-à-sable pour Fred Fermion\index{nodejs},
qui nous tartine les oreilles depuis bien trop longtemps avec son machin.js.
Mais sachez déja que l'automate sera équipé d'un minitel, pourquoi ne
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}.
% -------------------------------------------------------------------
% ===================================================================
% nouveau 2019-02-22
\input{automate}
% ===================================================================
\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}
\textsf{Promis, on va en mettre ! Dès que ça marche\dots}
Un premier exemple avec rrdb en page \pageref{rrdb}.
Le second cause des premiers essais du LM35\index{LM35},
capteur de
température analogique branché sur un Arduino Mega et relié
par un port série (page \pageref{serialcode}).
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}.
% -------------------------------------------------------------------
\subsection{Analyses}
\textsf{Bla bla bla\dots Corrélations, Gnuplot\index{gnuplot}, toussa\dots}
Peut-être demander à Schmod777 des références de
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 ;)}
Ce qui donne quand même à réfléchir. À se demander quel savoir
allons-nous pouvoir déduire de ces\footnote{non, c'est pas du bigdata.}
chiffres improbables.
(Re-)Découvrir les lois de l'inertie thermique ?
Générer des formes d'ondes spatialisables ?
Déplacer des petites \textit{bubulles} colorées ?
Une histoire pour la section \pageref{detournements} ?
% -------------------------------------------------------------------
\subsection{Archivage} \index{archivage} \label{archivage}
\textsf{Conserver la mémoire de nos échecs.}
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
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.
% -------------------------------------------------------------------
\subsection{Affichage}\index{affichage}
Pour commencer presque simple, un exemple d'affichage avec
Gnuplot\index{gnuplot} d'un fichier plat
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}
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}.
% ===================================================================
\section{Configuration} \index{configuration} \label{configuration}
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.}
de choses diverses.
La syntaxe n'est pas encore vraiment fixée, mais un fichier exemple est
disponible pour des explication plus récentes, donc plus en
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}
Certains de ces paramètres pourront être surchargé par des options
de la ligne de commande\index{cli} ou des variables d'environnement.
% ===================================================================
\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.
Voici le premier exemple, un format\label{foo.dat} d'enregistrement de
température facilement exploitable avec Awk ou Gnuplot :
\begin{verbatim}
tth@phytotron:~/DD2-monitor/doc$ tail -3 ../serial/foo.dat
1553769149 24.193548 16.774193 18.064516 78.924728
1553769155 24.086021 16.989246 17.849463 76.881721
1553769160 24.301075 17.096775 18.064516 77.526878
\end{verbatim}
% -------------------------------------------------------------------
\input{storages}
% -------------------------------------------------------------------
\input{serial}
\input{detournements}
% -------------------------------------------------------------------
\section{Conclusion} \label{conclusion} \index{conclusion}
En fait, tout reste à faire. Mais ça peut être un beau projet
aux implications et usages multiples. À condition de bien
faire les choses.
Un couteau suisse de la capture du monde réel, un point pivot
de nos diverses interprétations de
l'univers\footnote{non, la terre n'est pas plate} et des interactions
étranges entre des paramètres sans relation clairement definie.
% -------------------------------------------------------------------
\setlength{\parskip}{0.05cm plus 0.05cm}
% \pagebreak \tableofcontents
\printindex
\end{document}