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
donnėe teleinfo recu vers base sql
-
heartblood
- Messages : 189
- Inscription : 13 août 2015, 09:50
Re: donnėe teleinfo recu vers base sql
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.
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.
Re: donnėe teleinfo recu vers base sql
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 :
Scripte py :
Voila il y a surement mieu a faire si vous avez des idees je suis preneur.
Steph
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 commandArrayScripte 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()
#=========================================================================
Steph
-
heartblood
- Messages : 189
- Inscription : 13 août 2015, 09:50
Re: donnėe teleinfo recu vers base sql
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.
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.
Re: donnėe teleinfo recu vers base sql
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
Re: donnėe teleinfo recu vers base sql
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
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