From 8a5d00f2895d5cb28a79278e1ced6d0a66aff9b0 Mon Sep 17 00:00:00 2001 From: tth Date: Tue, 26 Feb 2019 11:18:46 +0100 Subject: [PATCH] un peu plus de doc... --- doc/automate.tex | 46 +++++++++++- doc/dd2-monitoring.tex | 163 +++++------------------------------------ doc/detournements.tex | 29 ++++++++ doc/storages.tex | 111 ++++++++++++++++++++++++++++ 4 files changed, 202 insertions(+), 147 deletions(-) create mode 100644 doc/detournements.tex create mode 100644 doc/storages.tex diff --git a/doc/automate.tex b/doc/automate.tex index 38850e4..b7882c8 100644 --- a/doc/automate.tex +++ b/doc/automate.tex @@ -2,7 +2,7 @@ L'automate qui contrôle les fonctions vitales des petites \textit{Pyrocystis Fusiformis} est basé sur un Arduino Mega\index{mega}, -qui a été choisi pour sa profusion d'entrées sorties\index{io}. +qui a été choisi pour sa profusion d'entrées sorties\index{i/o}. Il va remplir plusieurs fonctions mises au point les unes et les autres. Dans un premier temps, le logiciel sera développé avec l'\textsl{IDE} @@ -10,25 +10,67 @@ standard de l'Arduiono, malgré ses limitations. Il existe des solutions alternatives à base de \texttt{makefile}, que nous découvrirons un jour, si le besoin s'en fait sentir. +Ce lo + % ------------------------------------------------------------------- \subsection{Dialogue} +Le but étant d'avoir un système +\textsl{standalone}\footnote{lowcost and easytouse ?}, le dialogue +avec les humains extérieur sera plus que limité en fonctionnement +courant. + +Pour la configuration, nous allons créer une \textsc{CLI}\index{cli} +rudimentaire qui sera accessible par le port USB et un émulateur +de terminal\footnote{Minicom, Putty...}. + % ------------------------------------------------------------------- \subsection{Température} \index{temperature} +Les capteurs utilisés sont des LM35\index{LM35}, à sortie analogique +entre 0 et 5v pour une gamme de température de 0 à ??? degrés Celsius. + +Le convertisseur \small{A/D} a une résolution de 10 bits, qu'il +est possible d'augmenter en changeant son Vref, soit pour une +référence externe, soit pour une référence interne à 1.1 V. + % ------------------------------------------------------------------- \subsection{Voyants} Il faut \textbf{toujours} intégrer dans un projet une gestion avancée -des \textsc{LED}\index{LED} qui clignotent avec entrain. +des \textsc{led}\index{LED} qui clignotent avec entrain pour raconter +la vie interne de la machinerie. + +Une paire Rouge/Bleue indiquera les sorties de l'intervalle +de température pré-programmé. +Une \textsc{led} orange clignotante indiquera une erreur +en s'exprimant en code Morse. + +Quand à la \textsc{led} verte, elle sera là pour ne rien dire de précis, +mais avec brio. % ------------------------------------------------------------------- \subsection{Chauffage} \index{chauffage} +En première approche, un choix simple a été fait~: nous allons +utiliser un chauffage intégré d'aquarium en de basant d'abord +sur son thermostat intégré. + +Si ce n'est pas satisfaisant, pour diverses raisons (matériel +chinois à 3 balles, par exemple), +nous serons obligés de commander nous-même ce chauffage. + +C'est à ce moment que les choses deviennent sérieuses, il va +falloir commuter du 230v, tension assez mortelle dans les faits. +Une solution à base d'opto-coupleur semble s'imposer. % ------------------------------------------------------------------- \subsection{Refroidissement}. +Puisque l'enceinte choisi est un frigorifique de +récupération\footnote{Merci DomDom :)}, nous pourrons utiliser son +groupe froid. Comme pour le chauffage, nous sommes sur du 230v. + % ------------------------------------------------------------------- diff --git a/doc/dd2-monitoring.tex b/doc/dd2-monitoring.tex index 9957913..a30a71e 100644 --- a/doc/dd2-monitoring.tex +++ b/doc/dd2-monitoring.tex @@ -1,4 +1,4 @@ -\documentclass[a4paper,11pt]{article} +\documentclass[a4paper,10pt]{article} % \listfiles % pour le debug @@ -25,6 +25,12 @@ \pagebreak +% \setlength{\parskip}{0.01cm plus 0.01cm} +\tableofcontents +% \setlength{\parskip}{0.16cm plus 0.16cm} + +\pagebreak + % ------------------------------------------------------------------- \section{Introduction} @@ -41,15 +47,14 @@ 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. +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 -% \setlength{\parskip}{0.01cm plus 0.01cm} -\tableofcontents -% \setlength{\parskip}{0.16cm plus 0.16cm} \vspace{4cm} @@ -92,7 +97,7 @@ tentent de s'échapper. \subsection{Stockage} Pour entreposer toutes ces valeurs numériques, il existe plusieurs -choix, et nous allons en évaluer quelques uns : +choix, et nous allons en évaluer quelques uns~: \texttt{flatfile}\index{flatfile} (page \pageref{flatfile}), \texttt{rrdb}\index{rrdb} (page \pageref{rrdb}), @@ -115,9 +120,9 @@ C'est expliqué à la page \pageref{eyecandy}\index{curses}. % ------------------------------------------------------------------- % =================================================================== -% nouveau 2019-02-22 +% nouveau 2019-02-22 -\input{automate} + \input{automate} % =================================================================== @@ -150,6 +155,7 @@ 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} @@ -263,8 +269,8 @@ Après tout, un \textsl{timestamp}\index{timestamp} et quelques valeurs numériques peuvent suffire à beaucoup de \textsl{usecases} de la vie courante. -Voici un exemple, un format\label{foo.dat} d'enregistrement de -température facilement exploitable avec Awk ou Gnuplot : +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 @@ -275,145 +281,12 @@ tth@phytotron:~/DD2-monitor/doc$ tail -3 ../serial/foo.dat % ------------------------------------------------------------------- -\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, donc j'en arrive à la conclusion que -quelque chose m'échappe. - -On va laisser ça en suspens pour le moment. - -% ------------------------------------------------------------------- - -\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} semble -trop fatiguante à compiler pour ce soir, ni même pour ce week-end. - -% ------------------------------------------------------------------- - -\section{Gnocchi} \label{gnocchi} \index{Gnocchi} - -\texttt{pip install gnocchi[postgresql,ceph,keystone]}, finalement, -çe ne me donne pas trop envie. C'est du genre \textit{usinagaz}. - -% ------------------------------------------------------------------- -\section{Sqlite} \index{sqlite} \label{sqlite} - -\textsf{À regarder de près} - -Est-il possible de traiter des \textit{time series} en SQL\index{SQL} ? -Peut-on utiliser Sqlite depuis un programme en Perl\index{Perl} ? -Faut-il commencer à trouver un \textit{usecase} crédible ? -NodeJs\index{nodejs} peut-il lire du Sqlite ? - + \input{storages} % ------------------------------------------------------------------- \input{serial} - -% ------------------------------------------------------------------- - -\section{Détournements} \label{detournements} - -Dans le contexte myryssien\index{Myrys}, il est évident que l'aspect -artistique\index{Art} -doit être dès le départ pris en compte. -Les possibilités ne seront limitées que par votre manque d'imagination. - -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 -les pulses lumineux envoie du \texttt{cv/gate} en temps réel. - -\subsection{Variante sonore} - -Un peu de \texttt{awk} pipé dans du \texttt{sox} ? -Voire même l'occasion (ou un bon prétexte) de résoudre ce problème -de saut de phase qui me tracasse depuis des mois ? - -\subsection{Eye candy}\index{eyecandy}\label{eyecandy} - -Pour maximiser l'impact visuel, il sera convenant de sortir du -cadre pseudo-moderne des omniprésents écrans de ces -smartphones\footnote{Quand les téléphones étaient attachés par -un fil, les humains étaient libres.} qui nous lavent le cerveau. -Sortons donc du contexte pixeliste et revenons aux fondamentaux : -le caractère\index{ncurses}, -avec toute la simplicité de son concept sémantique. - + \input{detournements} % ------------------------------------------------------------------- \section{Conclusion} \label{conclusion} \index{conclusion} diff --git a/doc/detournements.tex b/doc/detournements.tex new file mode 100644 index 0000000..d68bd45 --- /dev/null +++ b/doc/detournements.tex @@ -0,0 +1,29 @@ +% ------------------------------------------------------------------- + +\section{Détournements} \label{detournements} + +Dans le contexte myryssien\index{Myrys}, il est évident que l'aspect +artistique\index{Art} +doit être dès le départ pris en compte. +Les possibilités ne seront limitées que par votre manque d'imagination. + +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 +les pulses lumineux envoie du \texttt{cv/gate} en temps réel. + +\subsection{Variante sonore} + +Un peu de \texttt{awk} pipé dans du \texttt{sox} ? +Voire même l'occasion (ou un bon prétexte) de résoudre ce problème +de saut de phase qui me tracasse depuis des mois ? + +\subsection{Eye candy}\index{eyecandy}\label{eyecandy} + +Pour maximiser l'impact visuel, il sera convenant de sortir du +cadre pseudo-moderne des omniprésents écrans de ces +smartphones\footnote{Quand les téléphones étaient attachés par +un fil, les humains étaient libres.} qui nous lavent le cerveau. +Sortons donc du contexte pixeliste et revenons aux fondamentaux : +le caractère\index{ncurses} blanc sur fond noir, +avec toute la simplicité de son concept sémantique. + diff --git a/doc/storages.tex b/doc/storages.tex new file mode 100644 index 0000000..9be6d84 --- /dev/null +++ b/doc/storages.tex @@ -0,0 +1,111 @@ +% ============================================ +% +% Various storages systems +% +% ============================================ + +\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, donc j'en arrive à la conclusion que +quelque chose m'échappe. + +On va laisser ça en suspens pour le moment. + +% ------------------------------------------------------------------- + +\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} semble +trop fatiguante à compiler pour ce soir, ni même pour ce week-end. + +% ------------------------------------------------------------------- + +\section{Gnocchi} \label{gnocchi} \index{Gnocchi} + +\texttt{pip install gnocchi[postgresql,ceph,keystone]}, finalement, +çe ne me donne pas trop envie. C'est du genre \textit{usinagaz}. + +% ------------------------------------------------------------------- +\section{Sqlite} \index{sqlite} \label{sqlite} + +\textsf{À regarder de près} + +Est-il possible de traiter des \textit{time series} en SQL\index{SQL} ? +Peut-on utiliser Sqlite depuis un programme en Perl\index{Perl} ? +Faut-il commencer à trouver un \textit{usecase} crédible ? +NodeJs\index{nodejs} peut-il lire du Sqlite ? +