donnėe teleinfo recu vers base sql

Forum dédié au Rfxcom et consorts utilisant les fréquences 433 et 866 MHz.
Pour les questions concernant les RFLINK, merci d'utiliser le forum spécifique en dessous.
Steph38
Messages : 44
Inscription : 12 août 2015, 18:13

donnėe teleinfo recu vers base sql

Message par Steph38 »

Bonjour,

Je m'arrache les cheveux depuis quelques jours. En effet je recupere des donnėes teleinfo via mon rfxcom. Cela fonctionne bien dans domoticz mais je veux allė plus loin car les graph de domoticz ne me convienne pas.
Je voudrai recuperer les infos recu par le rfx com et les sauvegarder dans une bdd . Comment faire?

Je suis sous Rasperry pi 2

Merci
heartblood
Messages : 189
Inscription : 13 août 2015, 09:50

Re: donnėe teleinfo recu vers base sql

Message par heartblood »

Dans une base de données local j'imagine ?!
Perso, pour les bdd, j'utilisais le langage php et pour l'accès j'utilisais phpmyadmin, ce qui veut dire que vous avez besoin d'un serveur.

Pour une installation sur raspberry pi, j'ai trouvé ce site : http://raspbian-france.fr/installer-ser ... raspberry/

N'hesitez pas à voir sur : https://openclassrooms.com/courses/conc ... p-et-mysql pour les bases en php et mysql.
Steph38
Messages : 44
Inscription : 12 août 2015, 18:13

Re: donnėe teleinfo recu vers base sql

Message par Steph38 »

Bonjour, merci pour ta reponse. Voici ce que j'ai fait:
Grace a un scripte lua j'enregistre mes donnés de teleinfo dans un fichier texte toutes les minute.
Grace a un scrip python j'ouvre le fichier texte et je sauvegarde dans une base Sql.
Cela fait 3 jours que cela fonctionne mais je trouve que c'est un peu lourd. Je ne suis pas arrivé a faire cela directement avec un seul scripte

Script lua :

Code : Tout sélectionner

vIINST1 = 0 
vIINST2 = 0 
vIINST3 = 0 
vMOTDETAT = 0
vOPTARIF = 0
vISOUSC = 0
vADCO = 0
vHCHC = 0
vHCHP = 0
vPAPP = 0
vIMAX1 = 0
vIMAX2 = 0
vIMAX3 = 0
vHHPHC = 0
vBASE = 0
vBBRHCJB = 0
vBBRHPJB = 0
vBBRHCJW = 0
vBBRHPJW = 0
vBBRHCJR = 0
vBBRHPJR = 0
vPEJP = 0
vPTEC = 0
vADPS = 0
vPPOT = 0

t1 = os.time()
print (t1)

--timestamp = date.timestamp()

--vDATE = t.strftime(" %Y-%m-%d ")
--vHEURE = t.strftime(" %H:%M:%S ")

vDATE = os.date('%Y-%m-%d', t1)
vHEURE = os.date('%H:%M:%S', t1)
-- 2013-12-25 22:09:51
print(vDATE)
print(vHEURE)

local consignehp = otherdevices_svalues['Heures pleine']
local consignehc = otherdevices_svalues['Heures creuses']
s = otherdevices_lastupdate['Heures pleine']
-- returns a date time like 2013-07-11 17:23:12


year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)

commandArray = {}

t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}

difference = (os.difftime (t1, t2))
print(difference)

if (difference < 60) then
	print ("Ok donc on sauv")
	typeh="hp"
	print (consignehp)
	commandArray['Heures pleines EDF']='On'
else
	print ("et bien on passe aux heures creuse")
	typeh="hc"
	commandArray['Heures pleines EDF']='Off'
end 


fichier = io.open("pleine.txt","w")
fichier:write(t1,";",vDATE,";",vHEURE,";",consignehp,";",consignehc,";",typeh)
fichier:close()


return commandArray

Scripte py :

Code : Tout sélectionner

#!/usr/bin/python
# -*- coding: utf-8 -*-

#=========================================================================
# Python Source File
# NAME: teleinfo.py
# AUTHOR: Sebastien Joly
# DATE  : 11/06/2013
# COMMENT: Collecteur de trames Teleinformation
#=========================================================================
# Dependances / Librairies
#=========================================================================


import domoticz

import time
import serial
import MySQLdb
import subprocess
from time import sleep
import datetime



#local consigne = otherdevices_svalues['Heures creuse']

#=========================================================================
# Fonction Tableau/Dictionnaire
#=========================================================================
def checksum (etiquette, valeur):
                sum = 32
                for c in etiquette: sum = sum + ord(c)
                for c in valeur:        sum = sum + ord(c)
                sum = (sum & 63) + 32
                return chr(sum)
#=========================================================================
# Fonction LireTeleinfo
#=========================================================================

# print('Lecture des trames Teleinformation avec la carte RPIDOM') 
#=========================================================================
# Connexion au port
#=========================================================================

#=========================================================================
# Definition variables de trame et chargement d'une valeur initiale
#=========================================================================
vIINST1 = 0 
vIINST2 = 0 
vIINST3 = 0 
vMOTDETAT = 0
vOPTARIF = "HC.."
vISOUSC = 20
vADCO = 020726055630
vHCHC = 0
vHCHP = 0
vPAPP = 0
vIMAX1 = 0
vIMAX2 = 0
vIMAX3 = 0
vHHPHC = 0
vBASE = 0
vBBRHCJB = 0
vBBRHPJB = 0
vBBRHCJW = 0
vBBRHPJW = 0
vBBRHCJR = 0
vBBRHPJR = 0
vPEJP = 0
vPTEC = 0
vADPS = 0
vPPOT = 0
#=========================================================================
# Traitement Premiere voie RPIDOM
#=========================================================================

#=========================================================================
# Definition des des variables temporelles
#=========================================================================
#vHEURE = datetime.datetime.now().strftime('%H:%M')
#vDATE = datetime.datetime.today().strftime('%Y-%m-%d')
t = datetime.datetime.now()
timestamp = time.mktime(t.timetuple())
timestamp = int(timestamp)
vDATE = t.strftime(" %Y-%m-%d ")
vHEURE = t.strftime(" %H:%M:%S ")
#========================================================================= ouvrir fichier

# Ouverture du fichier source
source = open("/home/pi/domoticz/pleine.txt", "r")
pleine = source.readline()
print (pleine)
# Fermerture du fichier source
source.close()

timestamp,vDATE,vHEURE,vPAPP1,vHCHP,vPAPP2,vHCHC,theure = pleine.split(";")
print theure

if theure == "hp":
	vPAPP=vPAPP1
	vPTEC=0
	exit
else:
	vPAPP=vPAPP2
	vPTEC="HC.."

#=========================================================================

if vHCHC == 0:
	print vHCHC
	
	
	exit
else:







	db = MySQLdb.connect("localhost","root","12345678","teleinfo")
	cursor = db.cursor()
	cursor.execute("""INSERT INTO teleinfo(timestamp,rec_date, rec_time, inst1, inst2, inst3, motdetat, optarif, isousc, adco, hchc, hchp, papp, imax1, imax2, imax3, hhphc, ptec, ppot)
         VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""" ,(timestamp, vDATE, vHEURE, vIINST1, vIINST2, vIINST3, vMOTDETAT, vOPTARIF, vISOUSC, vADCO, vHCHC, vHCHP, vPAPP, vIMAX1, vIMAX2, vIMAX3, vHHPHC, vPTEC, vPPOT))

#=.execute ('INSERT INTO teleinfo (timestamp, rec_date, rec_time, adco, optarif, isousc, hchp, hchc, ptec, inst1, inst2, inst3, imax1, imax2, imax3, pmax, papp, hhphc, motdetat, ppot, adir1, adir2, adir3) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)',(timestamp,rec_date,rec_time,vADCO,vOPTARIF,vISOUSC,vHCHP,vHCHC,vPTEC,vIINST,0,0,vIMAX,0,0,0,vPAPP,vHHPHC,'000000', '',0,0,0))


# Envoyer dans la base de donnees
	db.commit()
	db.rollback()
	db.close()
#=========================================================================

Voila il y a surement mieu a faire si vous avez des idees je suis preneur.

Steph
heartblood
Messages : 189
Inscription : 13 août 2015, 09:50

Re: donnėe teleinfo recu vers base sql

Message par heartblood »

Bonjour.
Je viens d'apprendre à coder en lua donc mon niveau n'est pas encore terrible, et, je ne connais pas encore le python. Je viens de me lancer sur domoticz. Ca fait longtemps aussi que je n'ai pas codé en php / sql.

Au niveau de tes scripts, je ne peux donc les optimiser. Mais ce que je peux te proposer c'est de faire ton code avec un seul script php.

Si tu regardes : http://easydomoticz.com/manipuler-les-d ... -en-shell/ tu peux donc manipuler les données avec curl.
Curl existe sous php : http://www.dinduks.com/tutoriel-recuper ... avec-curl/

Ce qui te permet, normalement, de récupérer les données de tes devices par ce biais (tu auras peut être besoin des fonctions de recherche pour trouver cette valeur. N'hésite pas à surfer sur openclassroom pour voir tout ce qui concerne ce langage)

Ensuite, regarde php et sql pour inscrire tes données directement sur ta bdd.

Pour l’exécution de ton script, je pensais à un cron : http://matthieu.developpez.com/execution_periodique/

Je pense que tu peux tout faire tenir dans un script.
fratton
Messages : 150
Inscription : 19 août 2015, 16:38

Re: donnėe teleinfo recu vers base sql

Message par fratton »

Sinon on peut directement requeter en SQL (ou depuis PHP) sur la base SQLite3 de domoticz, c'est le fichier domoticz.db

Code : Tout sélectionner

pi@raspberrypi ~/domoticz $ sqlite3 domoticz.db
SQLite version 3.7.13 2012-06-11 02:05:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
BackupLog             LightingLog           Scenes
Cameras               Meter                 SetpointTimers
CamerasActiveDevices  Meter_Calendar        SharedDevices
CustomImages          MultiMeter            Temperature
DeviceStatus          MultiMeter_Calendar   Temperature_Calendar
DeviceToPlansMap      MySensors             Timers
EnoceanSensors        MySensorsChilds       ToonDevices
EventActions          MySensorsVars         UV
EventMaster           Notifications         UV_Calendar
EventRules            Percentage            UserVariables
Fan                   Percentage_Calendar   Users
Fan_Calendar          Plans                 WOLNodes
FibaroLink            Preferences           Wind
Floorplans            Rain                  Wind_Calendar
Hardware              Rain_Calendar         ZWaveNodes
HttpLink              SceneDevices
LightSubDevices       SceneTimers
Raspberry Pi B+ / RF-Link 433MHz / divers device maison 433MHz et Wifi
Steph38
Messages : 44
Inscription : 12 août 2015, 18:13

Re: donnėe teleinfo recu vers base sql

Message par Steph38 »

Merci pour vos reponses. En php je ne suis pas tres douė mais je vais regardė tes liens et kes etudier.

Pour attaquer directement le bdd de domoticz c est a mon avis une bonne solution mais faut connaitre comment est organisė la base. Je regarde des 2 cotės voir ce que je suis capable de faire.

Merci
Répondre