script python min/max de temperatures
Publié : 15 juil. 2019, 19:32
Je partage ci dessous mon petit script python/php pour récuperer les min/max sur 24h des capteurs de temperatures / humidité / barometre via http.
le script travaille sur la base sql domoticz.db.
Le script php appelle le script python.
J'utilise ce script pour créer une synthese journaliere jeedom/domoticz et me l'envoyer par email.
import sys
import sqlite3
import time
nombase='/home/pi/domoticz/domoticz.db'
quilog='syntheseticz'
def log(qui,msg):
#logs.log(quilog + ' | ' + qui ,msg)
print quilog + ' | ' + qui + ' > ' + msg
def getallrowfromdb(sql):
global nombase
retour=None
try:
con = sqlite3.connect(nombase)
with con :
cur = con.cursor()
cur.execute(sql)
retour = cur.fetchall()
cur.close()
except Exception as err:
msg='exception ' + str(err)
log('getallrowfromdb', msg)
return retour
# dates pour requetes sql
sqlsur24h="datetime(date) > datetime('now', '-23 Hour')"
# ****** stats temperatures sur 24h
temperaturenom=['nom1', 'nom2','nom3','nom4']
temperatureid=['3','28','29','21']
temperatureid2 = ','.join(temperatureid)
temperatureid2='('+ temperatureid2 + ')'
print temperatureid2
sqltempsur24h='SELECT DeviceRowID, MIN( Temperature ),MAX( Temperature ), count(Temperature) as nbenr, MIN( Humidity ),MAX( Humidity ) , MIN( Barometer ),MAX( Barometer ) from Temperature where DeviceRowID in ' + temperatureid2 + ' and ' + sqlsur24h + ' group by DeviceRowID'
def getstatstemp24h():
tempbilan='???'
try:
stats=getallrowfromdb(sqltempsur24h)
#print stats
tempbilan=''
for row in stats :
#print row #
id=row[0]
tempmax=row[2]
tempmin=row[1]
nbenr=row[3]
hummax=row[5]
hummin=row[4]
baromax=row[7]
baromin=row[6]
# recherche si dans temperatures
pt=0
for item in temperatureid:
if str(item)==str(id):
# maj
nom=temperaturenom[pt]
tempbilan=tempbilan + '- ' + nom + ' > deg : ' + str(tempmin) + ' / ' + str(tempmax)
if hummin!=0 and hummax!=0:
tempbilan=tempbilan + ' - hum : ' + str(hummin) + ' / ' + str(hummax)
if baromin!=0 and baromax!=0:
tempbilan=tempbilan + ' - baro : ' + str(baromin) + ' / ' + str(baromax)
tempbilan = tempbilan + '<br>'
pt=pt+1
except Exception as err:
msg='exception - rc ' + str(err)
log('getstatstemp24h', msg)
return tempbilan
statstemp=getstatstemp24h()
print statstemp
l'appel au script python depuis un navigateur se fait via un script php :
<?php
$output = array();
$cmdepython='sudo python /home/pi/python/synthesetemp.py 2>&1';
exec($cmdepython, $output);
$nb=count($output);
for ($i=0;$i<$nb;$i++)
{
echo $output[$i];
}
?>
le resultat est pour 4 capteurs :
- nom1 > deg : 25.7 / 29.5 - hum : 39 / 53<br>
- nom4 > deg : 25.1 / 25.8 - hum : 54 / 64<br>
- nom2 > deg : 22.3 / 30.5 - hum : 33 / 63 - baro : 999 / 1004<br>
- nom3 > deg : 22.3 / 30.5 - hum : 33 / 63<br>
le script travaille sur la base sql domoticz.db.
Le script php appelle le script python.
J'utilise ce script pour créer une synthese journaliere jeedom/domoticz et me l'envoyer par email.
import sys
import sqlite3
import time
nombase='/home/pi/domoticz/domoticz.db'
quilog='syntheseticz'
def log(qui,msg):
#logs.log(quilog + ' | ' + qui ,msg)
print quilog + ' | ' + qui + ' > ' + msg
def getallrowfromdb(sql):
global nombase
retour=None
try:
con = sqlite3.connect(nombase)
with con :
cur = con.cursor()
cur.execute(sql)
retour = cur.fetchall()
cur.close()
except Exception as err:
msg='exception ' + str(err)
log('getallrowfromdb', msg)
return retour
# dates pour requetes sql
sqlsur24h="datetime(date) > datetime('now', '-23 Hour')"
# ****** stats temperatures sur 24h
temperaturenom=['nom1', 'nom2','nom3','nom4']
temperatureid=['3','28','29','21']
temperatureid2 = ','.join(temperatureid)
temperatureid2='('+ temperatureid2 + ')'
print temperatureid2
sqltempsur24h='SELECT DeviceRowID, MIN( Temperature ),MAX( Temperature ), count(Temperature) as nbenr, MIN( Humidity ),MAX( Humidity ) , MIN( Barometer ),MAX( Barometer ) from Temperature where DeviceRowID in ' + temperatureid2 + ' and ' + sqlsur24h + ' group by DeviceRowID'
def getstatstemp24h():
tempbilan='???'
try:
stats=getallrowfromdb(sqltempsur24h)
#print stats
tempbilan=''
for row in stats :
#print row #
id=row[0]
tempmax=row[2]
tempmin=row[1]
nbenr=row[3]
hummax=row[5]
hummin=row[4]
baromax=row[7]
baromin=row[6]
# recherche si dans temperatures
pt=0
for item in temperatureid:
if str(item)==str(id):
# maj
nom=temperaturenom[pt]
tempbilan=tempbilan + '- ' + nom + ' > deg : ' + str(tempmin) + ' / ' + str(tempmax)
if hummin!=0 and hummax!=0:
tempbilan=tempbilan + ' - hum : ' + str(hummin) + ' / ' + str(hummax)
if baromin!=0 and baromax!=0:
tempbilan=tempbilan + ' - baro : ' + str(baromin) + ' / ' + str(baromax)
tempbilan = tempbilan + '<br>'
pt=pt+1
except Exception as err:
msg='exception - rc ' + str(err)
log('getstatstemp24h', msg)
return tempbilan
statstemp=getstatstemp24h()
print statstemp
l'appel au script python depuis un navigateur se fait via un script php :
<?php
$output = array();
$cmdepython='sudo python /home/pi/python/synthesetemp.py 2>&1';
exec($cmdepython, $output);
$nb=count($output);
for ($i=0;$i<$nb;$i++)
{
echo $output[$i];
}
?>
le resultat est pour 4 capteurs :
- nom1 > deg : 25.7 / 29.5 - hum : 39 / 53<br>
- nom4 > deg : 25.1 / 25.8 - hum : 54 / 64<br>
- nom2 > deg : 22.3 / 30.5 - hum : 33 / 63 - baro : 999 / 1004<br>
- nom3 > deg : 22.3 / 30.5 - hum : 33 / 63<br>