Skip to content

Instantly share code, notes, and snippets.

@julienfastre
Created June 8, 2020 09:31
Show Gist options
  • Save julienfastre/517e527d687e5cf77d19acd44a82d619 to your computer and use it in GitHub Desktop.
Save julienfastre/517e527d687e5cf77d19acd44a82d619 to your computer and use it in GitHub Desktop.
calcul dimensionnement citerne eau de pluie
from datetime import date
import csv
def fromisoformat(date_string):
t = date_string.split('-')
return date(int(t[0]), int(t[1]), int(t[2]))
startdate = fromisoformat('2015-01-01')
startlevel = 0.0
roofsqmeters = 95.275
citerne_capacity = 3000.0
# voir https://www.cile.be/pages/Structure-du-prix-de-l-eau
prix_eau_l = ((2.8086 + 2.3650 + 0.272) * 1.06) / 1000.0
def dayconsume(date):
"""
renvoie la consommation du jour.
samedi et dimanche, renvoie la consommation du jour
+ machines)
en semaine, renvoie la consommation du jour = 110l
"""
daily = 110.0
if date.isoweekday() in [6]:
return daily + 120.0
elif date.isoweekday() in [7] and date.isocalendar()[1] % 2 == 0:
return daily + 60.0
elif date.month in [1,2,3,4,5,6,9,10,11]:
return 110.0
else:
return daily
def dayprocess(citerne_level, date, mm):
day_consommation = dayconsume(date)
ajout = 0.0
rejet = 0.0
# calcul de la pluie
pluie_l = mm * roofsqmeters
# on enlève la consommation et on ajoute la pluie
citerne_level = citerne_level - day_consommation + pluie_l
# doit-on ajouter de l'eau ?
if citerne_level < 0.0:
ajout = 0.0 - citerne_level
citerne_level = 0.0
elif citerne_level > citerne_capacity:
rejet = citerne_level - citerne_capacity
citerne_level = citerne_capacity
return (citerne_level, ajout, rejet, day_consommation, pluie_l)
with open('./pluie_alleur_daily_2005_2019.csv') as file:
i = -1
levels = (0.0,0.0,0.0)
rejet_cumul = 0.0
ajout_cumul = 0.0
jours_ajout = 0
prix_cumul = 0.0
meteoreader = csv.reader(file, delimiter=";")
for row in meteoreader:
i = i+1
if i == 0:
print("\n")
print("{}\t{}\t{}\t{}\t{}\t{}\t{}".format("date", "mm", "eau de pluie collectes (l)", "niveau citerne (l)", "ajout depuis le réseau (l)", "prix ajout depuis réseau (€)", "rejet d'eau de pluie (l)", "consommation du jour (l)"))
continue
if row[0].startswith('#'):
break
d = fromisoformat(row[0])
mm = float(row[2])
if d < startdate:
continue
# process of the day
levels = dayprocess(levels[0], d, mm)
ajout_cumul = ajout_cumul + levels[1]
rejet_cumul = rejet_cumul + levels[2]
prix = levels[1] * prix_eau_l
prix_cumul = prix_cumul + prix
if levels[1] > 0.0:
jours_ajout = jours_ajout +1
print("{}\t{:.1f}\t{:.0f}\t{:.0f}\t{:.0f}\t{:.3f}\t{:.0f}\t{:.0f}".format(d.isoformat(), mm, levels[4], levels[0], levels[1], prix, levels[2], levels[3]))
print("{}\t{:.0f}".format("Volume citerne:", citerne_capacity))
print("{}\t{:.0f}".format("Nb jour ajouts:", jours_ajout))
print("{}\t{:.0f}".format("ajouts cumulés:", ajout_cumul))
print("{}\t{:.2f}".format("prix ajouts cumulés:", prix_cumul))
print("{}\t{:.0f}".format("rejets cumulés:", rejet_cumul))
print("{}\t{:.3f}".format("prix eau par litre:", prix_eau_l))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment