Le Blog de C-quad

Récupérer la téléinformation avec un Arduino

Depuis longtemps j’avais envie de pouvoir suivre ma consommation électrique, sans jamais avoir vraiment franchi le pas. Il existe bien des solutions toutes faites qui permettent de suivre cette consommation via par exemple une pince ampèremétrique, mais j’avais envie de le faire moi même. Cela pour plusieurs raison :

  1. Envie de monter en compétence sur ce formidable Arduino
  2. Que cela ne me coute pas trop cher (moins d’un euro l’opto-coupleur + l’arduino qui va servir à autre chose)
  3. On est tellement fier quand on a réussi quelque chose fait maison 😉

Pour ceux qui ne connaissent pas encore l’Arduino, je vous conseille d’aller faire un petit tour sur le site du projet

Il s’agit d’un petit circuit imprimé complètement open-source disposant d’un microcontrôleur facilement programmable.

La téléinformation

Les compteurs EDF de type électronique possèdent deux bornes (I1 et I2) qui émettent un signal modulé sur 50Hz. Il existe de nombreux schema de circuit imprimé disponible sur internet afin de démoduler ce signal et obtenir par exemple votre consommation en temps réel.

Pour ceux qui désirent avoir un peu plus de détail, je vous conseille de lire l’article plutôt complet sur le sujet  rédigé par Planète-domotique.

Et pour ceux qui aiment aller directement à la source, voici la documentation officielle d’ERDF.fournie par bernard lefrancois.

Le schéma et l’arduino

Une recherche sur internet, m’a amené sur un schéma simple sur chaleurterre  : http://www.chaleurterre.com/forum/viewtopic.php?p=51607#51607

Par contre, il est prévu pour une connexion RS232 (port Série) d’un ordinateur. Cela ne correspondait pas tout à fait à mon besoin, j’ai pour objectif de collecter la téléinformation via le microcontrôleur arduino (qui va faire plus de chose par la suite), mon pc étant très éloigné du compteur.

Heureusement je suis tombé sur quelqu’un qui avait fait le même type de montage pour une interface série TTL. Voici donc le schéma utilisé :

Et avec ce petit bout de code :

#include <SoftwareSerial.h>

SoftwareSerial cptSerial(2, 3);

void setup() {
        Serial.begin(1200);     // opens serial port, sets data rate to 1200 bps
        cptSerial.begin(1200);
}

void loop() {

  if (cptSerial.available())
    Serial.write(cptSerial.read() & 0x7F);
}

J’ai effectivement la chance d’avoir en sortie des données qui ressemblent bien à celles de la téléinformation :

ADCO 02092xxxxxx @
OPTARIF HC.. <
ISOUSC 45 ?
HCHC 010956910 %
HCHP 016779643 >
PTEC HP..
IINST 021 Z
IMAX 047 J
PAPP 04860 3
HHPHC A ,
MOTDETAT 000000 B

Maintenant que j’ai validé que le montage est ok, il me reste à investir dans un shield ethernet afin de pouvoir me passer de la connexion usb.

L’objectif c’est de connecter ce module à domogik via xpl, mais ce sera l’objet d’un autre article.

Logiciels utilisés :

  • Fritzing pour le schéma
  • Arduino pour le développement
  • cutecom pour la liaison série

PS : Partout sur internet on parle de l’opto-coupleur SFH6206, j’ai fait l’erreur de l’acheter, il s’agit d’un opto-coupleur qui n’est pas au format DIP et qui n’est donc pas utilisable sur une plaque d’essai. Je vous conseille donc de prendre plutot le SFH620A qui lui est au format DIP (C’est le même).

Josm 4667 disponible dans les dépôts Fedora

Désolé de ne l’avoir fait plus tôt, j’ai enfin mis à jour le paquet josm sur Fedora.  la dernière version distribuée était la revision 4279.

Voila donc disponible pour l’instant dans updates-testing JOSM 4667.

Pour le tester :

$ yum install josm --enablerepo=updates-testing

N’hésitez pas à faire un retour sur le bon fonctionnement (ou non) du paquet sur fedoraproject

Pour ceux ne connaissant pas josm

JOSM est un éditeur pour  OpenStreetMap (OSM) écrit en Java. Actuellement, il est capable de charger des traces GPX indépendantes et des traces GPX de la base de données d’OSM. Il permet aussi de charger et éditer les nœuds, chemins, attributs de méta-données et relations de la base de données d’OSM.

Cet éditeur permet donc de contribuer à la cartographie libre OpenStreetMap. Il est aussi possible d’y contribuer sans pour autant avoir de GPS ou de traces GPS, grâce au cadastre (via le plugin cadastre) ainsi qu’a l’imagerie satellite de Bing.

Gitso disponible dans les dépots Fedora et Entreprise Linux 6

Plusieurs articles sur gitso ont été rédigés sur planet-libre. Trouvant ce outil plutôt utile, j’ai réalisé le paquet pour Fedora et Entreprise Linux 6 (via le dépot EPEL).

Gitso est donc désormais disponible sur les dépots updates-testing pour l’instant : situation du paquet dans fedora

Pour le tester il suffit donc de faire appel à yum :

$ yum install gitso --enablerepo=updates-testing

Et pour ceux qui sont passé à coté des articles sur ce logiciel, voici les liens pour les (re)lire :

N’hésitez pas à faire des retours en cas de dysfonctionnement constatés sur le paquet, et si tout va bien de le faire savoir aussi. C’est toujours mieux de savoir que d’autres ont testés avant de le passer en stable 😉

 

BI – Déployer un rapport sur JasperReports Server

Nous avons vu précédemment comment installer JasperReports Server sur une Centos, je vais vous montrer maintenant comment déployer un rapport sur le portail.

Pré-requis

Avoir une installation fonctionnelle de JasperReports Server et une base de données sur laquelle effectuer les rapports.

Il est nécessaire dans un premier temps de créer son rapport avec l’outil iReport. Une fois que le rapport correspond au résultat attendu, le sauvegarder au format jrxml.

Nous allons ensuite pouvoir passer à la configuration de JasperReports

Définition d’une connexion sous JasperReport

A l’aide de votre navigateur web se rendre sur l’interface de jasperreport : http://votre_serveur:8080/jasperserver

La connexion se fera avec l’utilisateur d’administration, à savoir par défaut jasperadmin/jasperadmin.

Nous créons un dossier qui va héberger la connexion vers la base de données qui sera consultée au sein du rapport :

 Nous créons donc un dossier connexions :

Nous ajoutons ensuite une source de données dans le dossier connexions que nous venons de créer.


Il reste à configurer la connexion. Il faut dans un premier temps choisir un type de connexion.
Il y a plusieurs possibilités :

  • soit une connexion JNDI qui va imposer que la définition de la connexion soit faite dans les fichiers de configuration du serveur d’application (ici tomcat)
  • soit une connexion JDBC

Bien évidement que ce soit dans le cas de la connexion JNDI ou JDBC, il est nécessaire que les drivers de connexion à la base de données cible soit bien présent pour le serveur d’application (pour tomcat : /usr/share/tomcat6/lib)

Prenons l’exemple d’une connexion JDBC :

Nous choisissons un nom, par exemple jdbc-foodmart : ce nom n’a pas vraiment d’importance, c’est le nom qui sera affiché dans JasperReport

Nous renseignons le pilote à utiliser : pour mysql ce sera com.mysql.jdbc.Driver

L’url de connexion sera du type  « jdbc:mysql://le_serveur:3306/la_bdd » ou l’on remplacera « le_serveur » par le nom du serveur qui héberge la base de données et « la_bdd » par le nom de la base de données à laquelle on veut accéder.

Il nous reste ensuite à définir l’utilisateur et le mot de passe associé à la base de données.

Déployer le rapport vers JasperServer

Nous allons maintenant déployer le rapport qui a été créé sous iReport :

Il nous faut ensuite choisir un nom pour le rapport et sélectionner le fichier de type jrxml (créé auparavant avec iReport)  à envoyer.

Nous sélectionnons ensuite la source de données précédemment créée (ici jdbc-foodmart) :

Il ne reste ensuite plus qu’a soumettre.
Et nous avons ensuite une jolie exécution du rapport possible par via le portail.

Il est alors possible de choisir d’exporter le résultat du rapport sous divers formats …

Une autre fonctionnalité intéressante est de pouvoir planifier l’exécution d’un rapport.

Planifier une exécution de rapport

 Il vous reste ensuite à cliquer sur planifier une tache et de suivre les divers écrans.

Voila donc un rapide survol de la publication de rapports avec la version libre de jasperreports. Une autre fonctionnalité important de cette version libre consiste à publier un cube OLAP de type Mondrian.

Cela pourra faire l’objet d’un autre article si cela vous intéresse…

BI – Installation de JasperReports sur CentOS 6

Je vous avais présenté (j’ai surtout survolé) précédemment la solution open source SpagoBI. Le monde de l’aide à la décision est massivement constitué d’outils propriétaires, mais il existe d’autres alternatives opensource. C’est le cas de la solution JasperReports qui fourni un portail web qui permettra d’héberger et de mettre à la disposition des utilisateurs de très beau rapports.

La force pour moi de JasperReports, c’est que la création des rapports y est assez simple et permet de faire le rendu que l’on désire au pixel près. Les créatifs pourront donc faire de très joli rendus.

JasperReports est produit pas une société : JasperSoft, qui propose un produit « entrée de gamme » open source qui est libre et une version plus évoluée qui elle n’est pas fournie sous licence open source.

Les versions payantes en fonction de l’option choisie permettent en autre de réaliser des requêtes ad-hoc, de gérer les accès aux rapports, de créer des dashboards, etc …

Je vous détaille ici la mise en place de la version open source disponible sur jasperforge.

Pré-requis

Tout d’abord, nous allons commencer par télécharger l’archive JasperReports-server.

J’ai choisi de prendre le war pour la simple et bonne raison, que les autres versions embarquent un serveur d’appplication ainsi que la base de données. Et je préfère utiliser les fonctionnalités de mon système d’exploitation, l’intégration n’en sera que plus propre.

Afin de pouvoir installer jasperreports, il est nécessaire d’avoir un serveur d’application ainsi qu’une base de données pour le moteur.

Nous utiliserons tomcat pour le serveur d’application et postgresql pour la base de données (tel que recommandé par jaspersoft)

 Installation et configuration de PostgreSQL

Remarque : Pour plus de détail sur l’installation de PostgreSQL, vous pouvez jeter un œil à la documentation fedora-fr sur le sujet.

Nous commençons par installer la base de données et le connecteur jdbc associé:

# yum install postgresql-server postgresql-jdbc

Une fois postgresql installé, il est nécessaire d’initialiser une base de données :

# service postgresql initdb

Si tout se passe bien vous avez pour réponse :

# Initialisation de la base de données : [ ok ]

Ensuite il est nécessaire de démarrer le service :

# service postgresql start

Si vous souhaitez que son lancement soit automatique lors du démarrage de la machine :

# chkconfig postgresql on

Nous définissions ensuite le mot de passe de l’utilisateur postgres :

# su - postgres
$ psql
postgres=# ALTER USER postgres WITH PASSWORD 'mon_password';

Et afin d’être propre nous allons créer un utilisateur spécifique pour JasperReports :

$ psql
# CREATE USER jruser;
# ALTER ROLE jruser WITH CREATEDB;
# ALTER USER jruser WITH ENCRYPTED PASSWORD 'jrpassword';

Afin de permettre la connexion à un utilisateur qui n’est pas défini sous unix, nous allons modifier la configuration de postgres en éditant le fichier /var/lib/pgsql/data/pg_hba.conf :

Modifier le fichier en remplaçant ident par md5 afin d’obtenir les lignes suivantes :

# "local" is for Unix domain socket connections only
local   all         all                               md5
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5

Pour que les modifications prennent effet il faut redémarrer le serveur :

# service postgresql restart

Installation et configuration de Tomcat

L’installation est toujours aussi simple, il nous suffira de faire appel à yum :

# yum install tomcat6*

Il est ensuite nécessaire de définir un utilisateur qui pourra administrer tomcat, pour se faire éditer le fichier /etc/tomcat6/tomcat-users.xml et ajouter les lignes suivantes dans la section tomcat-users :

<role rolename="manager"/>
<user username="tomcat" password="tomcat" roles="manager"/>

Il est nécessaire d’ajouter le driver de connexion dans les libraires de tomcat :

# ln -s /usr/share/java/postgresql-jdbc.jar /usr/share/tomcat6/lib/

A noter : cette action sera aussi nécessaire en fonction des bases de données qui devront être accédées par vos rapports.

Nous pouvons ensuite démarrer le service tomcat6 et se connecter à l’interface d’administration. Attention pour que tomcat fonctionne il est nécessaire d’avoir un service apache fonctionnel :

# service httpd start
# service tomcat6 start
# chkconfig httpd on
# chkconfig tomcat6 on

Installation de JasperReports

Il est nécessaire dans un premier temps de décompresser l’archive téléchargée précédemment.
Puis nous allons créer un fichier default_master.properties dans le répertoire buildomatic qui contiendra :

# application server type (default is tomcat6)
appServerType = tomcat6

# Tomcat app server root dir
appServerDir = /var/lib/tomcat6

# database type
dbType=postgresql

# database location and connection settings
dbHost=localhost
dbUsername=jruser
dbPassword=jrpassword

# additional database parameters
# (uncomment these if you want non-default settings)
# dbPort=5432
# JasperServer db name, sample db names
# js.dbName=jasperserver
# sugarcrm.dbName=sugarcrm
# foodmart.dbName=foodmart

Une fois le fichier de configuration mis à jour nous pouvons tester si tout est ok pour l’installation :

# cd buildomatic
# ./js-install-ce.sh test

Si tout va bien, nous pouvons procéder à l’installation :

# ./js-install-ce.sh minimal
...
install-minimal-ce:
     [echo] Installation successfully completed!

BUILD SUCCESSFUL
Total time: 2 minutes 4 seconds
Checking Ant return code: OK

Note : Si on ne passe pas l’argument minimal, les databases de test foodmart et sugarcrm seront installées.

Afin que jaspersoft puisse fonctionner correctement, il est nécessaire qu’il puisse écrire (ses logs par exemple) dans la webapps. Nous allons spécifier que tomcat est le propriétaire de jasperserver :

# cd /usr/share/tomcat6/webapps
# chown -R tomcat:tomcat jasperserver

Bien vérifier que la connexion définie dans /usr/share/tomcat6/conf/Catalina/localhost/jasperserver.xml est correcte

Par défaut l’application est configurée avec deux comptes utilisateurs :

  • Un compte administrateur : jasperadmin avec le mot de passe jasperadmin
  • Un compte utilisateur : joeuser avec le mot de passe joeuser

Voici un aperçu de l’interface de l’administrateur :

Nous voila avec un portail JasperReports fonctionnel, il est maintenant nécessaire de créer les rapports avec le Studio de développement iReport.