Monitoring du Phytotron
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

dd2-monitoring.tex 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. \documentclass[a4paper,11pt]{article}
  2. % \listfiles % pour le debug
  3. \usepackage[french]{babel}
  4. \usepackage[utf8]{inputenc}
  5. \usepackage[T1]{fontenc}
  6. % XXX \usepackage{lipsum}
  7. \usepackage{makeidx}
  8. \usepackage{listings}
  9. % \usepackage{color}
  10. % \usepackage{url}
  11. \usepackage{xspace}
  12. \usepackage[verbose]{layout}
  13. \makeindex
  14. % \setlength{\parskip}{0.16cm plus 0.16cm}
  15. % -------------------------------------------------------------------
  16. \title{DD2 Monitoring}
  17. \author{tTh}
  18. \begin{document}
  19. \maketitle
  20. \pagebreak
  21. % \setlength{\parskip}{0.01cm plus 0.01cm}
  22. \tableofcontents
  23. % \setlength{\parskip}{0.16cm plus 0.16cm}
  24. \pagebreak
  25. % -------------------------------------------------------------------
  26. \section{Introduction}
  27. Dans le cadre du futur projet \textsl{phytotron}\index{phytotron},
  28. nous aurons besoin d'un
  29. système de surveillance de divers paramêtres, du genre la température
  30. et l'humidité de l'air ambiant ou de l'enceinte thermostatée.
  31. Et comme nous sommes au Tetalab, nous allons essayer d'en faire le plus
  32. possible nous même, tant pour l'aspect didactique que pour la possible
  33. ré-utilisation de la chose dans un contexte artistique comme nous
  34. arrivons parfois à le faire.
  35. La première étape sera donc la mise au point d'un \textsl{cadriciel}
  36. permettant d'essayer diverses options en se basant sur une conception
  37. modulaire de l'ensemble. Une grosse partie sera écrite en C\index{C},
  38. avec d'éventuels modules en langages de script :
  39. Perl\index{Perl}, Awk\index{Awk}, Bash\index{Bash}\dots
  40. Les valeurs à mesurer étant de diverses natures, nous aurons l'occasion
  41. de découvrir plein de capteurs différents : température, humidité,
  42. \texttt{pH}, transparence, lumière, vibrations\dots
  43. \vspace{4cm}
  44. Bonne lecture.
  45. % -------------------------------------------------------------------
  46. % ===================================================================
  47. \pagebreak
  48. \section{Présentation générale}
  49. \subsection{Capteurs} \index{capteurs}
  50. Actuellement nous disposons d'un capteur température et
  51. humidité, le
  52. \texttt{RDing} \texttt{TEMPERHUM1V1.2}{} qui
  53. semble un peu étrange à interpeller, et qui sera destiné à mesurer
  54. l'ambiance météo du Double Dragon\footnote{Pas de mauvais esprit, merci...},
  55. l'influence humaine n'étant pas à négliger en cas d'afflux du public..
  56. Par la suite, nous pourrons récupérer
  57. (par liaison série, cf page \pageref{serial})
  58. des données diverses en provenance de l'automate de contrôle de l'enceinte.
  59. Cet automate\index{automate} est décrit page \pageref{automate}.
  60. Le premier capteur de température sélectionné est le \textsc{LM35}\index{LM35}
  61. qui fournit en sortie une tension linéairement proportionnle à
  62. la température. Ils seront connectés sur l'automate qui s'en
  63. servira pour la régulation thermostatique.
  64. Il nous reste à choisir d'autres capteurs pour d'autres métriques :
  65. humidité, lumière, vibrations, perturbations psychiques\dots
  66. Notre dd2monitor
  67. devrait donc aussi être capable d'envoyer des alertes en cas de souci,
  68. par exemple si des algues\footnote{Ou des pleurotes, ou des morilles...}
  69. tentent de s'échapper.
  70. \subsection{Stockage}
  71. Pour entreposer toutes ces valeurs numériques, il existe plusieurs
  72. choix, et nous allons en évaluer quelques uns~:
  73. \texttt{flatfile}\index{flatfile} (page \pageref{flatfile}),
  74. \texttt{rrdb}\index{rrdb} (page \pageref{rrdb}),
  75. \texttt{influxdb}\index{Influxdb} (page \pageref{influxdb}),
  76. \texttt{gnocchi}\index{Gnocchi} (page \pageref{gnocchi})
  77. \texttt{Sqlite}\index{sqlite} (page \pageref{sqlite})
  78. La représentation interne des valeurs reste à définir pour
  79. la plupart d'entre elles.
  80. \subsection{Affichage}
  81. Nous allons laisser un petit bac-à-sable pour Fred Fermion\index{nodejs},
  82. qui nous tartine les oreilles depuis bien trop longtemps avec son machin.js.
  83. Mais sachez déja que l'automate sera équipé d'un minitel, pourquoi ne
  84. pas en mettre un second sur le monitoring ? Après tout, un peu
  85. d'eyecandy\index{eyecandy} ne peut pas faire de mal.
  86. C'est expliqué à la page \pageref{eyecandy}\index{curses}.
  87. % -------------------------------------------------------------------
  88. % ===================================================================
  89. % nouveau 2019-02-22
  90. \input{automate}
  91. % ===================================================================
  92. \section{Outils}
  93. \subsection{Simulations}
  94. Bien entendu, mettre au point un système de monitoring pour un futur
  95. phytotron pose un problème : d'où viennent les premières mesures ?
  96. C'est pour ça qu'il y a déja un générateur de \textit{fake-values} qui
  97. ne demande qu'à grandir.
  98. Nous avons également un générateur de nombres divers et incohérents
  99. qui envoie des quadruplets d'entiers 10 bits précédés d'un caractere
  100. de bonne efficacité.
  101. % -------------------------------------------------------------------
  102. \subsection{Exemples}
  103. \textsf{Promis, on va en mettre ! Dès que ça marche\dots}
  104. Un premier exemple avec rrdb en page \pageref{rrdb}.
  105. Le second cause des premiers essais du LM35\index{LM35},
  106. capteur de
  107. température analogique branché sur un Arduino Mega et relié
  108. par un port série (page \pageref{serialcode}).
  109. Pour continuer dans une démarche disruptive, des outils
  110. avancés de visualisation sont proposés dans la rubrique
  111. \ref{eyecandy} qui parle de \texttt{vt100}\label{vt100}.
  112. % -------------------------------------------------------------------
  113. \subsection{Analyses}
  114. \textsf{Bla bla bla\dots Corrélations, Gnuplot\index{gnuplot}, toussa\dots}
  115. Peut-être demander à Schmod777 des références de
  116. documents bourbakistes ? J'ai entendu parler dans \textsc{irc}
  117. de choses étranges, comme ça :
  118. \textsl{<schmod777> s/booz/booze pour la courbe qui majore les autres en moyenne serait
  119. d'une criante justesse scientifique ;)}
  120. Ce qui donne quand même à réfléchir. À se demander quel savoir
  121. allons-nous pouvoir déduire de ces\footnote{non, c'est pas du bigdata.}
  122. chiffres improbables.
  123. (Re-)Découvrir les lois de l'inertie thermique ?
  124. Générer des formes d'ondes spatialisables ?
  125. Déplacer des petites \textit{bubulles} colorées ?
  126. Une histoire pour la section \pageref{detournements} ?
  127. % -------------------------------------------------------------------
  128. \subsection{Archivage} \index{archivage} \label{archivage}
  129. \textsf{Conserver la mémoire de nos échecs.}
  130. La création de cet outil de surveillance est un long parcours
  131. pavé d'essais et d'erreurs. Tout cela peut générer beaucoup
  132. de données. À titre d'exemple, la capture de température des
  133. premier essais sort environ 800 Ko par jour.
  134. 99.99\% de ces chiffres sont inutiles, mais il peut arriver
  135. qu'on désire conserver l'historique d'une
  136. expérience réussie\footnote{En fait, c'est comme ça que la science existe}
  137. ou d'un
  138. \textit{epicfail\footnote{En fait, c'est comme ça que la science avance}}.
  139. Nous devons donc rencontrer quelqu'un qui maitrise cette partie
  140. de la mouvance détournementale de l'espionnage.
  141. Je pense que Yaya\index{Yaya} pourra nous éclairer de ses lumières,
  142. si on lui demande gentiment.
  143. % -------------------------------------------------------------------
  144. \subsection{Affichage}\index{affichage}
  145. Pour commencer presque simple, un exemple d'affichage avec
  146. Gnuplot\index{gnuplot} d'un fichier plat
  147. de température (décrit page \pageref{foo.dat}) :
  148. \begin{verbatim}
  149. DATAFILE="foo.dat"
  150. IMAGE="graphe.png"
  151. gnuplot << __EOC__
  152. set term png size 4200,640
  153. set output "${IMAGE}"
  154. set grid
  155. set title "Temperature dans le Double Dragon 2"
  156. set xdata time
  157. set timefmt "%s"
  158. set format x "%d, %H:%M:%S"
  159. set yrange [ 0.0 : 30.0]
  160. plot "${DATAFILE}" using 1:2 title " foo" with lines, \
  161. "${DATAFILE}" using 1:3 title " bar" with lines, \
  162. "${DATAFILE}" using 1:4 title "quux" with lines, \
  163. "${DATAFILE}" using 1:5 title "booz" with lines
  164. __EOC__
  165. \end{verbatim}
  166. Prochainement, dès que le premier prototype matériel fournira des
  167. données, une tentative de visualisation animée sera faite avec
  168. POVray\index{POV}.
  169. % ===================================================================
  170. \section{Configuration} \index{configuration} \label{configuration}
  171. Pour adapter cet outil de surveillance aux variations du monde réel,
  172. nous devons nous-même lui décrire ce monde. Une description qui se
  173. fera avec des lignes de la forme '\texttt{input\_device s /dev/ttyACM0}'
  174. qui représentent des tuples
  175. \textit{clef-type-valeur}\footnote{Laissons les canards tranquilles.}
  176. de choses diverses.
  177. La syntaxe n'est pas encore vraiment fixée, mais un fichier exemple est
  178. disponible pour des explication plus récentes, donc plus en
  179. rapport avec la réalité du code. En voici un extrait :
  180. \begin{verbatim}
  181. # serial input from the control cpu
  182. input_device s /dev/ttyACM0
  183. input_speed i 9600
  184. # --------------------------------------------------
  185. # some values for the eyecandy displays
  186. eyecandy_banner s hacked by tTh
  187. \end{verbatim}
  188. Certains de ces paramètres pourront être surchargé par des options
  189. de la ligne de commande\index{cli} ou des variables d'environnement.
  190. % ===================================================================
  191. \section{Flatfile} \label{flatfile}
  192. Parfois, un fichier à plat est bien pratique, parce qu'il est facilement
  193. machinable avec des outils comme Awk\index{Awk}.
  194. Après tout, un \textsl{timestamp}\index{timestamp} et quelques valeurs
  195. numériques peuvent suffire à beaucoup de \textsl{usecases} de la
  196. vie courante.
  197. Voici le premier exemple, un format\label{foo.dat} d'enregistrement de
  198. température facilement exploitable avec Awk ou Gnuplot :
  199. \begin{verbatim}
  200. tth@phytotron:~/DD2-monitor/doc$ tail -3 ../serial/foo.dat
  201. 1550673785 20.215054 20.107527 20.107527 20.215054
  202. 1550673811 20.215054 20.215054 20.215054 20.215054
  203. 1550673836 20.215054 20.107527 20.215054 20.215054
  204. \end{verbatim}
  205. % -------------------------------------------------------------------
  206. \input{storages}
  207. % -------------------------------------------------------------------
  208. \input{serial}
  209. \input{detournements}
  210. % -------------------------------------------------------------------
  211. \section{Conclusion} \label{conclusion} \index{conclusion}
  212. En fait, tout reste à faire. Mais ça peut être un beau projet
  213. aux implications et usages multiples. À condition de bien
  214. faire les choses.
  215. Un couteau suisse de la capture du monde réel, un point pivot
  216. de nos diverses interprétations de
  217. l'univers\footnote{non, la terre n'est pas plate} et des interactions
  218. étranges entre des paramètres sans relation clairement definie.
  219. % -------------------------------------------------------------------
  220. \setlength{\parskip}{0.05cm plus 0.05cm}
  221. % \pagebreak \tableofcontents
  222. \printindex
  223. \end{document}