script python min/max de temperatures

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
lebphi
Messages : 28
Inscription : 16 déc. 2016, 19:14

script python min/max de temperatures

Message par lebphi »

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>
Répondre