TUTO: Raspberry - Teleinfo - 1wire

OneWire, TéléInfo, logs et enregistrements
Répondre
galen
Nouveau
Nouveau
Messages : 4
Enregistré le : mer. oct. 02, 2013 3:49 pm

Message par galen »

nightfever a écrit :peut-être que ceci répondra à tes attentes ici

ou plutot ici ou encore là

Enfin, à part le 1er lien qui était dans mes favoris, les autres ont été trouvés en 10s via google :D
@nightfever
BONSOIR !

Je te présente toutes mes excuses de n'avoir pas pris 10 secondes afin de faire une recherche sur google, et merci a toi d'avoir pris de ton temps précieux pour me répondre
J'aurai du effacer le @nightfever de ma citation et la chose aurait été beaucoup plus claire !
je ne cherche justement pas a passer par le RFXTRX mais par la solution de moi641 qui visiblement passe par un raspberry et un récepteur 433MHZ connecté sur GPIO

Je n'ai pas les compétences dans le domaine mais je pense pouvoir reproduire un tuto dans le cas ou moi641 aurait la gentillesse de le publier d'ou ma demande

j'ai fouillé sur le net fait des tests avec mon raspberry et mon récepteur 433Mhz mais sans succès, je ne trouve que des débuts de solution et je n'arrive pas à adapter la chose a mon contexte.

Merci d'avance
nightfever
Actif
Actif
Messages : 23
Enregistré le : mer. sept. 11, 2013 2:44 pm

Message par nightfever »

salut,

ce n'est pas sur un ton agressif que je t'ai dis ça, sinon je n'aurais pas pris le temps d'essayer de t'aider. ;)
sur ce coup, difficile de t'aider pour moi
déjà avec quelques notions de prog je galère à finir le tuto de ce topic alors j'imagine que tu dois lutter aussi ^^
je suis en train de ramer et de chercher pour remplir ma BDD puis l'afficher. Il doit manquer une étape évidente pour certains mais pas pour moi. J'ai malheureusement cru que les fichiers étaient "clé en main" :shock:
bon courrage à toi ;)
galen
Nouveau
Nouveau
Messages : 4
Enregistré le : mer. oct. 02, 2013 3:49 pm

Message par galen »

:D

Aucun problème, je crois que sur ce genre de forum nous faisons partie de la majorité de suiveur de quelques sachants qui nous distille avec grande gentillesse un peu de leur savoir :d

bref bienvenue au club lol

Plus qu'a espérer que moi641 passe par la

Quand a ton souci je ne sais pas explique ou cela bloque j'aurai peut être une idée :)
sait on jamais
nightfever
Actif
Actif
Messages : 23
Enregistré le : mer. sept. 11, 2013 2:44 pm

Message par nightfever »

les infos que je récupère sont moins nombreuses que celles annoncées par les autres :

Code : Tout sélectionner

ADCO 0207XXXXXXX 
OPTARIF HC.. < 
ISOUSC 30 9 
HCHC 006868722 - 
HCHP 020247319 / 
PTEC HP.. 
IINST 002 Y 
IMAX 036 H 
PAPP 00450 * 
HHPHC A , 
A part que je n'ai pas "MOTDETAT 000000 B
PPOT 00 # " (je ne sais pas à quoi ça sert), ce n'est pas forcément un pb. Mon souci en clair est que je n'arrive pas à alimenter ma BDD. Je trouve tellement de versions différentes de ce tuto, que je ne sais pas quelle structure mettre à la tale de la BDD. Si elle n'est pas la bonne, je suis on à ramer pour adapter les fichiers tout faits en php+java. Ensuite c'est l'utilisation du fichier *.c qui n'est pas trop clair pour moi. Exemples de varantes différentes :
pour le lien indiqué dans le tuto
pour ce que tu essaies de faire
exemple pour une verabox
la même chose à partir d'une vera aussi. Ce dernier a l'air clair mais je ne vois pas l'interet de passer par la vera et la surcharger alors que le RP peut tout faire tout seul.
Sinon pour la suite, j'ai ben récupéré le fichier teleinfov3.zip qui permet d'afficher les graphes mais faut d'abord réussir à remplir la BDD :shock:
galen
Nouveau
Nouveau
Messages : 4
Enregistré le : mer. oct. 02, 2013 3:49 pm

Message par galen »

moi641 a écrit :Voici un tuto bien fait pour démarrer le PI et avoir les valeurs de teleinfo et de température sur 1 wire dans une bdd SQL via des script python.

http://www.domotique-info.fr/2013/06/ra ... hon-mysql/

La carte à une interface (PIC) entre les opto et la liaison RS232.
Dans le script python il y a donc l'envoi d'une info à ce PIC pour savoir qu'elle voie est interroger. Cela n'est pas nécessaire avec les montages plus simple présentés plus haut dans ce post et surtout si vous n'achetez pas cette carte !!

Il y a donc quelques modif dans le code python à faire mais le plus gros du boulot est fait.

Enjoy...
:D
J'aurais tendance à penser que la solution est de ce côté
Le script python ou en c permettant de se connecter à la base de données et insérer les données provenant de la teleinfo

Edit:

il y a le programme en c
http://penhard.anthony.free.fr/wp-conte ... al_mysql.c

par contre il faut adapter car il est possible que ton abonnement ne soit pas identique

quand a la structure de la base si tu part sur ce code en c il faut s'y tenir effectivement afin de ne pas avoir tout a modifier
le plus simple etant dans le script en c d'activer le mode debug qui va du coup creer les log en csv et te permettre de voir ce que fait le script en c et creer la structure de la base en consequence
moi641
Très assidu
Très assidu
Messages : 116
Enregistré le : mer. févr. 22, 2012 3:24 pm
Localisation : pau

Message par moi641 »

Un peude courage les gars. il va vous en falloir car l'hiver approche :D

Pour les sondes Oregon, je vais essayer de faire un tuto dès que j'ai un peu de temps et un peu de courage car les protocoles Oregon sont vraiment tordu et pas facile à expliquer...
Sinon il y vous reste les MP pour avoir plus de renseignements.

@nightfever
C'est normal que tu n'ai pas la meme trame que moi car j'ai un compteur TRI et tu dois avoir un compteur MONO.
Il faut donc créer ta table SQL en fonction des champs que tu veux enregistrer et ensuite modifier le code C ou python pour modifier l'accés à la BDD.
Au fait tu utilises quoi comme prog C ou python.
Dans certain tuto, il sauvegarde toute la trame dans la BDD. Moi aussi jai fait comme ca. Mais il y a beaucoup de donnée inutile à mes yeux comme par exemple le numero du compteur et le tarif soucrit etc.
Ca utilise de l'espace memoire pour rien et tout ca répété toute les minutes ca donne 7Mo/mois.
Quand j'aurais un peu de temsp je supprimerai tout ces enregistrements inutiles.
Pour moi il faut sauvegarder uniquement:
le compteur HC
le compteur HP
PTEC pour savoir si on est en HC ou HP
Le courant instantané et le courant max
La puissance.

Pour accéder à ta BDD, tu peux utiliser phpmyadmin. C'est peut etre plus facile que la ligne de commande.

Bonne continuation
A+
Pac Ajtech/Zuran100 TRI phase 2 sur Plancher Chauffant+Radiateurs HC/HP.
nightfever
Actif
Actif
Messages : 23
Enregistré le : mer. sept. 11, 2013 2:44 pm

Message par nightfever »

salut

Merci pour tes encourragements. Je me tatais encore mais pour le moment je pense essayer d'adapter le C (teleinfoserial_mysql.c ) car connais pas le python. Bon mes cours de C datent d'il y a 10 ans donc pas évident non plus ^^.
La je suis embetté avec ma connexion internet alors je vais essayer de m'y remettre ce we.
Tu as l'air bien plus calé que moi là-dessus. Dommage que je reste sur ma faim car le tuto était nikel jusque là... :D
Avatar du membre
juju
Modérateur
Modérateur
Messages : 1713
Enregistré le : sam. mars 18, 2006 7:38 pm
Localisation : Vaucluse 84

Message par juju »

JUJU et Alain
nightfever
Actif
Actif
Messages : 23
Enregistré le : mer. sept. 11, 2013 2:44 pm

Message par nightfever »

ou la la la... y'en a pour des heures avec ces tutos ^^
sinon petite question : à quoi sert le "MOTDETAT" ? est-ce nécessaire ? car je ne l'ai pas dans ce que je récupère.
sinon, j'ai beau chercher, je ne comprend la méthode de calcul du checksum dans le fichier teleinfoserial_mysql.c
moi641
Très assidu
Très assidu
Messages : 116
Enregistré le : mer. févr. 22, 2012 3:24 pm
Localisation : pau

Message par moi641 »

Je ne pense pas que ce soit nécessaire.
regarde la doc du compteur si vraiment tu veux savoir.
Perso je ne me souviens plus :roll:
Pour le crc, il est à la fin de chaque ligne.
Le code recherche donc les étiquettes définies au début et segmente chaque ligne en 3 (sscanf).
Étiquette
valeur
crc (somme des octets des 2 valeurs précédentes.)
A+
Pac Ajtech/Zuran100 TRI phase 2 sur Plancher Chauffant+Radiateurs HC/HP.
nightfever
Actif
Actif
Messages : 23
Enregistré le : mer. sept. 11, 2013 2:44 pm

Message par nightfever »

Les infos que je récupère via putty sont :

Code : Tout sélectionner

ADCO 0207XXXXXXX 
OPTARIF HC.. < 
ISOUSC 30 9 
HCHC 006868722 - 
HCHP 020247319 / 
PTEC HP.. 
IINST 002 Y 
IMAX 036 H 
PAPP 00450 * 
HHPHC A ,

Du coup j’ai créé la BDD avec le code ci-dessous

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS `teleinfo` (
  `timestamp` bigint(10) NOT NULL default '0',
  `rec_date` date NOT NULL default '0000-00-00',
  `rec_time` time NOT NULL default '00:00:00',
  `adco` varchar(12) character set latin1 collate latin1_general_ci NOT NULL,
  `optarif` varchar(4) character set latin1 collate latin1_general_ci NOT NULL,
  `isousc` tinyint(2) NOT NULL default '0',
  `hchp` bigint(9) NOT NULL default '0',
  `hchc` bigint(9) NOT NULL default '0',
  `ptec` varchar(2) character set latin1 collate latin1_general_ci NOT NULL,
  `iinst` tinyint(3) NOT NULL default '0',
  `imax` tinyint(3) NOT NULL default '0',
  `papp` int(5) NOT NULL default '0',
  `hhphc` varchar(1) character set latin1 collate latin1_general_ci NOT NULL,
  UNIQUE KEY `timestamp` (`timestamp`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Je coince pour la declaration des variables dans le code C de teleinfoserial_mysql.c
Dans le code initial ci-dessous, j’ai juste changé les étiquettes et remplacé #define NB_VALEURS 20 par #define NB_VALEURS 10
Les autres valeurs, je ne vois pas à quoi elles correspondent donc je ne sais pas comment les modifier.

Code : Tout sélectionner

// Déclaration pour le port série.
int             fdserial ;
struct termios  termiosteleinfo ;
 
// Déclaration pour les données.
char ch[2] ;
char car_prec ;
char message[512] ;
char* match;
int id ;
char datateleinfo[512] ;
 
/// Constantes/Variables à changées suivant abonnement, Nombre de valeurs, voir tableau "etiquettes", 20 pour abonnement tri heures creuse.
#define NB_VALEURS 20
char etiquettes[NB_VALEURS][16] = {"ADCO", "OPTARIF", "ISOUSC", "HCHP", "HCHC", "PTEC", "IINST1", "IINST2", "IINST3", "IMAX1", "IMAX2", "IMAX3", "PMAX", "PAPP", "HHPHC", "MOTDETAT", "PPOT", "ADIR1", "ADIR2" ,"ADIR3"} ;
// Fin Constantes/variables à changées suivant abonnement.
 
char 	valeurs[NB_VALEURS][18] ;
char 	checksum[255] ;
int 	res ;
int	no_essais = 1 ;
int	nb_essais = 3 ;
int	erreur_checksum = 0 ;
 
// Déclaration pour la date.
time_t 		td;
struct 	tm 	*dc;
char		sdate[12];
char		sheure[10];
char		timestamp[11];
Ensuite, ce qu’il va peut etre falloir modifier est le « checksum » et la partie « Test si dépassement intensité ». Dans cette dernière c’est écrit de remplacer par ADPS pour du monophasé mais je n’ai même pas cette étiquette.

Merci pour votre aide
moi641
Très assidu
Très assidu
Messages : 116
Enregistré le : mer. févr. 22, 2012 3:24 pm
Localisation : pau

Message par moi641 »

De souvenir la partie, 'Test si dépassement intensité ' n'est pas utilisé pour le stockage en base mais uniquement dans le log.
Tu peux donc enlever la fonction.
Pour le CRC, il est calculé pour chaque étiquettes.
Tu n'a rien à modifier si je me souviens bien.

Par contre il faut que tu modifies la construction de la chaine de caractère d'écriture en BDD.

Ca doit donner un truc comme ca si tu n'as que 10 éléments.

Code : Tout sélectionner

sprintf(datateleinfo,"'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s'", timestamp, sdate, sheure, valeurs[0], valeurs[1], valeurs[2], valeurs[3], valeurs[4], valeurs[5], valeurs[6], valeurs[7], valeurs[8]) ;
A+
Pac Ajtech/Zuran100 TRI phase 2 sur Plancher Chauffant+Radiateurs HC/HP.
ulrich090
Nouveau
Nouveau
Messages : 1
Enregistré le : lun. oct. 07, 2013 5:18 pm

Message par ulrich090 »

Merci pour ce tuto , il ma beaucoup aidé

Image

Donc une petite interface web en php , sur un ecran 7 pouce en HDMI

Pour ceux qui cherche un pack complet pour le teleinfo pas cher

http://www.domot-mx.com/shop/materiel/4 ... einfo.html

Je suis pas l'auteur du site mais j'ai commandé 2 kit et c'est impeccable

Je mais l'adresse dropbox de mon backup sql pour ceux qui on du mal

( il faudra peut etre edité la base avant car j'ai encore un forfait EJP ... )

J'utilise aussi Sqlyog pour geré ma table sql , je trouve cela plus pratique sachant que le raspberry a déja du mal a tourné je trouve ... ( j'ai pas mal de requête sql .. )

https://www.dropbox.com/sh/9xoncx1bs6ppq41/ScpKdMpdsz

Pour sqlyog si cela ne marche pas c'est normal il faut accepter les connexion extérieur de mysql sur le raspberry , sinon faire un tunel avec putty ( image sur le dropbox )

Par contre y a t'il moyen de faire 2 relever compteur en meme temps ?
nightfever
Actif
Actif
Messages : 23
Enregistré le : mer. sept. 11, 2013 2:44 pm

Message par nightfever »

@ moi641 : j'ai fais comme tu as dis (en ajoutant 1 valeur sinon ça ne faisait pas 10 ^^)
J'ai mis en commentaire la partie "Test si dépassement intensité"
Mais apparemment ça ne suffit pas car je n'arrive pas à compiler le C.
Ce "dépasse capacité" réapparait plus bas et je ne vois pas comment le modifier.

Code : Tout sélectionner

pi@raspberrypi /var/www/teleinfo $ gcc -Wall teleinfo_mysql.c -o teleinfo_mysql -lmysqlclient
teleinfo_mysql.c: In function ‘main’:
teleinfo_mysql.c:366:3: warning: implicit declaration of function ‘DepasseCapacite’ [-Wimplicit-function-declaration]
/tmp/ccZyeXoi.o: In function `main':
teleinfo_mysql.c:(.text+0xa44): undefined reference to `DepasseCapacite'
collect2: ld returned 1 exit status
nightfever
Actif
Actif
Messages : 23
Enregistré le : mer. sept. 11, 2013 2:44 pm

Message par nightfever »

laisse tomber, j'ai mis la ligne en commentaire et ça fonctionne. La base se remplit
Merci. Je vais me pencher sur le graph maintenant ;)
Répondre

Retourner vers « Monitoring des consos et des performances »