un peu plus de doc...

This commit is contained in:
Tonton Th 2019-02-26 11:18:46 +01:00
parent 6bf18548b5
commit 8a5d00f289
4 changed files with 202 additions and 147 deletions

View File

@ -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.
% -------------------------------------------------------------------

View File

@ -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}),
@ -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,7 +269,7 @@ 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
Voici le premier exemple, un format\label{foo.dat} d'enregistrement de
température facilement exploitable avec Awk ou Gnuplot :
\begin{verbatim}
@ -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}

29
doc/detournements.tex Normal file
View File

@ -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.

111
doc/storages.tex Normal file
View File

@ -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 ?