1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
import pyodbc, datetime, pandas as pd
delta = datetime.timedelta(minutes=3)
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor().execute("SELECT [Name] FROM [ConnexityDBProd_WithNotifs_20182404].[dbo].[Devices]")
for row in cursor :
list_armoire.append(row[0])
for armoire in list_armoire :
"""on met les data en memoire dans df """
df = pd.read_sql("SELECT [DeviceCode],[SensorName],[CalculatedValue],[SentDateTime] FROM [ConnexityDBProd_WithNotifs_20182404].[dbo].[V_MeasuresIOSensors] WHERE [TypeUnit] = 'KiloWatt' and [DeviceName] = '"+ armoire +"' and [SensorName] = 'Phase 1'",cnxn)
"""on tri les data de df par ordre chronologique"""
df = df.sort_values(by='SentDateTime')
"""on peut maintenant voir si l armoire envoi assez souvent des donnees pour etre utilisee dans les futur algo"""
inisialisation = True
fin_boucle = False
Dict_Value_date = {}
List_test = []
compteur_taille = 0
for data in df.itertuples() :
id_armoire = data.DeviceCode
compteur_taille += 1
"""mise en forme de la date """
date_time = datetime.datetime.strptime(data.SentDateTime[:-11], '%Y-%m-%d %H:%M')
"""seul les points entre 00h et 03h nous interesse pour le moment si nuit complete necessite de modifier le code car on prend les heures du debut de la nuit le jours avant la fin de la nuit"""
if date_time.hour in [0,1,2,3] or compteur_taille == len(df):
"""inisialisation pour la première fois dans la condition"""
if inisialisation == True :
temps0 = datetime.datetime.strptime(str(date_time.date())+' 00:00', '%Y-%m-%d %H:%M')
temps1 = date_time
temps_fin = date_time
compteur_recu = 0
compteur_manquant = 0
Max_manquant = 0
inisialisation = False
Nuit_monopoint = False
"""verification qu on oubli pas le dernier point a remplissant la condition"""
elif compteur_taille == len(df) :
if temps1.date != temps_fin :
compteur_recu = 0
compteur_manquant = 0
Max_manquant = 0
deltatps = temps_fin - datetime.datetime.strptime(str(temps_fin.date())+' 00:00', '%Y-%m-%d %H:%M')
deltatps1 = datetime.datetime.strptime(str(temps_fin.date())+' 04:00', '%Y-%m-%d %H:%M') - temps_fin
compteur_recu += 1
else :
deltatps = temps_fin - temps1
deltatps1 = datetime.datetime.strptime(str(temps_fin.date())+' 04:00', '%Y-%m-%d %H:%M') - temps_fin
compteur_recu += 1
if deltatps > delta :
nbr_manquant = (deltatps//delta)-1
compteur_manquant += nbr_manquant
if nbr_manquant > Max_manquant :
Max_manquant = nbr_manquant
if deltatps1 > delta :
nbr_manquant = (deltatps1//delta)-1
compteur_manquant += nbr_manquant
if nbr_manquant > Max_manquant :
Max_manquant = nbr_manquant
Dict_Value_date[(data.DeviceCode,str(temps_fin.date()))]=[compteur_recu,compteur_manquant,Max_manquant ]
else :
if temps0.date() != temps1.date() :
compteur_recu = 0
compteur_manquant = 0
Max_manquant = 0
"""debut de nuit"""
if temps1.date() == date_time.date():
deltatps = temps1 - datetime.datetime.strptime(str(temps1.date())+' 00:00', '%Y-%m-%d %H:%M')
compteur_recu += 1
"""nuit a un point"""
if temps1.date() != date_time.date() :
deltatps = temps1 - datetime.datetime.strptime(str(temps1.date())+' 00:00', '%Y-%m-%d %H:%M')
deltatps1 = datetime.datetime.strptime(str(temps1.date())+' 04:00', '%Y-%m-%d %H:%M') - temps1
compteur_recu += 1
Nuit_monopoint = True
if temps0.date() == temps1.date() :
"""nuit a plusieurs points"""
if temps1.date() == date_time.date() and temps1.time() != temps0.time() :
deltatps = temps1 - temps0
compteur_recu += 1
"""fin de nuit"""
if temps1.date() != date_time.date() :
deltatps += datetime.datetime.strptime(str(temps1.date())+' 04:00', '%Y-%m-%d %H:%M') - temps1
compteur_recu += 1
"""on calcule les points manquants"""
if deltatps > delta :
nbr_manquant = (deltatps//delta)-1
compteur_manquant += nbr_manquant
if nbr_manquant > Max_manquant :
Max_manquant = nbr_manquant
if Nuit_monopoint == True and deltatps1 > delta :
Nuit_monopoint = False
nbr_manquant = (deltatps1//delta)-1
compteur_manquant += nbr_manquant
if nbr_manquant > Max_manquant :
Max_manquant = nbr_manquant
Dict_Value_date[(data.DeviceCode,str(temps1.date()))]=[compteur_recu,compteur_manquant,Max_manquant ]
List_test.append((str(temps0),str(temps1),str(date_time)))
temps0 = temps1
temps1 = date_time
temps_fin = date_tim |
Partager