Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
VMC double flux et Zennio Quad
#26
Salut Suricat,

Tu avais parler d'une page wiki pour mettre ta recette miracle de ton install, où pourrais-je la trouver pour faire du copier coller sur la mienne.

Dclik
Répondre
#27
Pas de page wiki...

Attention : je ne pilote pas la VMC, je me suis contenté de mesurer la température dans les 4 conduits. Donc un Zennio Quad + 4 sondes.

Le quad est configuré pour envoyer la température toutes xx minutes ou à chaque changement :

Côté linknx.xml il y a plusieurs lignes intéressantes
- dans <services>
<persistence type="mysql" host="localhost" user="xxx" pass="yyy" db="linknx" table="persist" logtable="log" />
- dans <objects> mes 4 températures avec les 4 GAD utilisées par le Quad
<object type="9.xxx" id="TempVmcInsuflation" gad="3/0/6" init="request" log="true">Temperature VMC Insuflation</object>
<object type="9.xxx" id="TempVmcNeuf" gad="3/0/5" init="request" log="true">Temperature VMC Neuf</object>
<object type="9.xxx" id="TempVmcRejet" gad="3/0/8" init="request" log="true">Temperature VMC Rejet</object>
<object type="9.xxx" id="TempVmcVicie" gad="3/0/7" init="request" log="true">Temperature VMC Vicie</object>

Comme les données sont persistantes elles sont stockées dans une base mysql

La base est ultra simple :

Code :
mysql> show tables;
+------------------+
| Tables_in_linknx |
+------------------+
| log              |
| persist          |
+------------------+
2 rows in set (0.01 sec)

mysql> desc persist;
+--------+--------------+------+-----+-------------------+-----------------------------+
| Field  | Type         | Null | Key | Default           | Extra                       |
+--------+--------------+------+-----+-------------------+-----------------------------+
| object | varchar(256) | NO   | PRI | NULL              |                             |
| value  | varchar(256) | NO   |     | NULL              |                             |
| ts     | timestamp    | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+--------+--------------+------+-----+-------------------+-----------------------------+
3 rows in set (0.00 sec)

mysql> desc log;
+--------+--------------+------+-----+-------------------+-------+
| Field  | Type         | Null | Key | Default           | Extra |
+--------+--------------+------+-----+-------------------+-------+
| ts     | timestamp    | NO   |     | CURRENT_TIMESTAMP |       |
| object | varchar(256) | NO   | MUL | NULL              |       |
| value  | varchar(256) | NO   |     | NULL              |       |
+--------+--------------+------+-----+-------------------+-------+
3 rows in set (0.01 sec)

Donc tout arrive dans log, j'ai rien dans persist :
Code :
mysql> select count(*) from log;
+----------+
| count(*) |
+----------+
|  1273127 |
+----------+
1 row in set (0.02 sec)

Par exemple les 10 dernières entrèes (c'est du temps réel :-)

Code :
mysql> select * from log where object like 'TempVmc%' order by ts desc limit 10;
+---------------------+--------------------+-------+
| ts                  | object             | value |
+---------------------+--------------------+-------+
| 2014-02-16 23:25:18 | TempVmcInsuflation | 16.8  |
| 2014-02-16 23:25:18 | TempVmcNeuf        | 10.2  |
| 2014-02-16 23:24:18 | TempVmcInsuflation | 16.7  |
| 2014-02-16 23:24:18 | TempVmcRejet       | 9.2   |
| 2014-02-16 23:24:18 | TempVmcNeuf        | 10.1  |
| 2014-02-16 23:23:18 | TempVmcInsuflation | 16.9  |
| 2014-02-16 23:23:18 | TempVmcNeuf        | 10.2  |
| 2014-02-16 23:22:18 | TempVmcInsuflation | 17    |
| 2014-02-16 23:22:18 | TempVmcRejet       | 9.3   |
| 2014-02-16 23:21:18 | TempVmcInsuflation | 16.8  |
+---------------------+--------------------+-------+
10 rows in set (39.18 sec)

ça c'est pour le stockage des données.

Pour le graphique, rrdtool (cf Google). je suis pas très doué en rrd, donc ce n'est probablement pas optimisé

Création des 4 bases rrd pour les 4 températures

Code :
rrdtool create tempvmcneuf.rrd --step=300 --start=1348915602 "DS:temp:GAUGE:600:U:U" "RRA:LAST:0.5:1:288" "RRA:LAST:0.5:1:2016" "RRA:MAX:0.5:12:168" "RRA:MAX:0.5:288:365" "RRA:AVERAGE:0.5:12:168" "RRA:AVERAGE:0.5:288:3

rrdtool create tempvmcrejet.rrd --step=300 --start=1348915602 "DS:temp:GAUGE:600:U:U" "RRA:LAST:0.5:1:288" "RRA:LAST:0.5:1:2016" "RRA:MAX:0.5:12:168" "RRA:MAX:0.5:288:365" "RRA:AVERAGE:0.5:12:168" "RRA:AVERAGE:0.5:288:

rrdtool create tempvmcinsuflation.rrd --step=300 --start=1348915602 "DS:temp:GAUGE:600:U:U" "RRA:LAST:0.5:1:288" "RRA:LAST:0.5:1:2016" "RRA:MAX:0.5:12:168" "RRA:MAX:0.5:288:365" "RRA:AVERAGE:0.5:12:168" "RRA:AVERAGE:0.

rrdtool create tempvmcvicie.rrd --step=300 --start=1348915602 "DS:temp:GAUGE:600:U:U" "RRA:LAST:0.5:1:288" "RRA:LAST:0.5:1:2016" "RRA:MAX:0.5:12:168" "RRA:MAX:0.5:288:365" "RRA:AVERAGE:0.5:12:168" "RRA:AVERAGE:0.5:288:


Ensuite, je ne savais pas trop comment faire, alors j'ai fait un script qui toutes les 5 minutes pousse les valeurs depuis la base mysql vers rrdtool.

On doit probablement pouvoir faire ça directement depuis linknx !

L'appel du script en crontab :
*/5 * * * * /home/pi/rrd/rrd-push_value.sh tempvmcneuf

Le script
Code :
#!/bin/bash

RRDPATH=/home/pi/rrd

if [ "$1" == "" ]; then
  echo "Il faut donner le nom de l'objet dont il faut récupérer la valeur"
  exit -1
fi
OBJET=$1

if [ "$2" != "" ]; then
  RRDFILE=$2
else
  RRDFILE=$RRDPATH"/"$1.rrd
fi

if [ ! -f "$RRDFILE" ]; then
  echo "Il n'y a pas de fichier $RRDFILE"
  echo "Vous pouvez donner le nom de fichier en second paramètre ou changer le chemin par defaut dans le script ($RRDPATH qui sera compléter par le nom de l'objet) "
  exit -1
fi

data=`mysql --batch --disable-column-names -u xxxx-plinknx yyyy -e "select unix_timestamp(ts),value from log where object = '$OBJET' order by ts desc limit 1;"`

if [ "$data" == "" ]; then
  echo "Erreur dans la requête SQL pour l'objet $OBJET : pas de valeur"
  exit -1
fi

data_ts=`echo $data | cut -d ' ' -f1`
data_value=`echo $data| cut -d ' ' -f2`

rrdtool update $RRDFILE N:$data_value
if [ "$?" -eq "1" ]; then
  echo "Erreur d'exécution de rrdtool update pour l'objet $OBJET"
  exit -1
fi  

exit 0


Et ensuite je génère le graphe qui prend les 4 valeurs avec de la couleur etc...
Code :
rrdtool graph /var/www/rrd/tempvmc-day.png --right-axis 1:0 --vertical-label=VMC --start now-3d --end now --width 1728 --height 300 "DEF:neuf=/home/pi/rrd/tempvmcneuf.rrd:temp:LAST" "DEF:insuflation=/home/pi/rrd/tempvmcinsuflation.rrd:temp:LAST" "DEF:vicie=/home/pi/rrd/tempvmcvicie.rrd:temp:LAST" "DEF:rejet=/home/pi/rrd/tempvmcrejet.rrd:temp:LAST" "VDEF:vneuf=neuf,LAST" "VDEF:vinsuflation=insuflation,LAST" "VDEF:vvicie=vicie,LAST" "VDEF:vrejet=rejet,LAST" "CDEF:economie=insuflation,neuf,-" "AREA:neuf#ffe7e7" "AREA:insuflation#e4ffe4" "LINE2:neuf#FF0000:Neuf\\t" "GPRINT:vneuf:%2.1lf °C\\n"  "LINE1:insuflation#00c500:Insuflation\\t" "GPRINT:vinsuflation:%2.1lf °C\\n" "LINE1:vicie#0000FF:Vicie\\t" "GPRINT:vvicie:%2.1lf °C\\n" "LINE1:rejet#000000:Rejet\\t" "GPRINT:vrejet:%2.1lf °C\\n" "LINE:19#FF00FF" > /dev/null

et ça ressemble à ça
http://www.suricat.net/vmc.png

Tu n'as pas tout compris ? Normal, c'est du bricolage...

Relire, relire et relire :-)

Poses tes questions ensuite !
Viens voir !!! La lampe s'allume, la lampe s'allume !!!!
Répondre
#28
C'est très bien, ton truc ! J'avais la même approche pour des graphes téléinfo (qu'il faut que je remette en place, ainsi que pour les températures).

J'avais aussi un script qui pouvait re-créer la base rrdtool depuis toutes les données MySQL ; pratique si tu changes une donnée rrd.
Répondre
#29
Bonjour,

Merci pour vos retous, c'est juste que je n'avais pas estimé la tâche de ma novice attitude :-)

Dclik
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)