un peu plus de doc...
This commit is contained in:
parent
6bf18548b5
commit
8a5d00f289
@ -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.
|
||||
|
||||
% -------------------------------------------------------------------
|
||||
|
||||
|
||||
|
@ -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}
|
||||
|
29
doc/detournements.tex
Normal file
29
doc/detournements.tex
Normal 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
111
doc/storages.tex
Normal 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 ?
|
||||
|
Loading…
Reference in New Issue
Block a user