Skip to content

Commit

Permalink
black + fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
dgomes committed Aug 28, 2021
1 parent 38fe7cb commit 4867cee
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 32 deletions.
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.0.5
0.0.4
4 changes: 4 additions & 0 deletions pyerse/comercializador.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ def __str__(self):
"""Representação textual do plano."""
return f"{self._potencia} kVA - {self._opcao_horaria} {self._ciclo() if self._ciclo else ''}"

@property
def potencia(self):
return self._potencia

@property
def tarifas(self):
"""Tarifas disponiveis para o plano."""
Expand Down
124 changes: 93 additions & 31 deletions pyerse/simulador.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
import requests
from datetime import date, datetime

from comercializador import POTENCIA
from pyerse.comercializador import POTENCIA


class Simulador:
def __init__(self, potencia, period_start, period_stop=None):
Expand All @@ -12,10 +13,10 @@ def __init__(self, potencia, period_start, period_stop=None):
except ValueError as err:
logging.error("Potencia não disponivel!")
raise err

def validate(date_str):
try:
datetime.strptime(date_str, '%Y-%m-%d')
datetime.strptime(date_str, "%Y-%m-%d")
except ValueError:
raise ValueError("Formato de data incorrecto, deve ser YYYY-MM-DD")
return date_str
Expand All @@ -26,59 +27,120 @@ def validate(date_str):
self._period_stop = validate(period_stop)
else:
self._period_stop = date.today().strftime("%Y-%m-%d")

def _simular(self, ponta, cheias='', vazio=''):

if vazio != '':
ciclo = '3' #Tri-horário
elif cheias != '':
ciclo = '2' #Bi-horário
def _simular(self, ponta, cheias=None, vazio=None):

if vazio != None:
ciclo = "3" # Tri-horário
elif cheias != None:
ciclo = "2" # Bi-horário
else:
ciclo = '1' #Simples
ciclo = "1" # Simples

headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Host': 'simulador.precos.erse.pt',
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Host": "simulador.precos.erse.pt",
}

data = {
'pageStartIndex': '0',
'pageStep': '1',
'caseType': '3', #Residencial
'electSupply': self._potencia,
'cycle': ciclo,
'electCalendar': '3', # "a definir"
'electCalendarPeriodStart': self._period_start,
'electCalendarPeriodEnd': self._period_stop,
'electPonta': ponta,
'electCheias': cheias,
'electVazio': vazio
"pageStartIndex": "0",
"pageStep": "1",
"caseType": "3", # Residencial
"electSupply": self._potencia,
"cycle": ciclo,
"electCalendar": "3", # "a definir"
"electCalendarPeriodStart": self._period_start,
"electCalendarPeriodEnd": self._period_stop,
"electPonta": ponta,
"electCheias": cheias if cheias else "",
"electVazio": vazio if vazio else "",
}

logging.debug("Simulation data: %s", data)

response = requests.post('https://simulador.precos.erse.pt/connectors/simular_eletricidade/', headers=headers, data=data)
response = requests.post(
"https://simulador.precos.erse.pt/connectors/simular_eletricidade/",
headers=headers,
data=data,
)

result = response.json()

logging.debug(result['Resultados'][0]['Oferta'][0])

return f"{result['Resultados'][0]['Oferta'][0]['Comercializador']} - {result['Resultados'][0]['Oferta'][0]['Nome']}"
logging.debug(result["Resultados"][0]["Oferta"][0])

preco_ponta = (
float(
result["Resultados"][0]["Oferta"][0]["PrecoTermoenergia"].replace(
",", "."
)
)
* ponta
if result["Resultados"][0]["Oferta"][0]["PrecoTermoenergia"].replace(
",", "."
)
!= ""
else 0
)
preco_cheias = (
float(
result["Resultados"][0]["Oferta"][0]["PrecoTermoenergia2"].replace(
",", "."
)
)
* cheias
if result["Resultados"][0]["Oferta"][0]["PrecoTermoenergia2"].replace(
",", "."
)
!= ""
else 0
)
preco_vazio = (
float(
result["Resultados"][0]["Oferta"][0]["PrecoTermoenergia3"].replace(
",", "."
)
)
* vazio
if result["Resultados"][0]["Oferta"][0]["PrecoTermoenergia3"].replace(
",", "."
)
!= ""
else 0
)
preco_fixo = float(
result["Resultados"][0]["Oferta"][0]["PrecoTermoFixo"].replace(",", ".")
)

periodo = datetime.strptime(self._period_stop, "%Y-%m-%d") - datetime.strptime(
self._period_start, "%Y-%m-%d"
)

estimativa = (
preco_ponta + preco_cheias + preco_vazio + preco_fixo * periodo.days
)

return (
f"{result['Resultados'][0]['Oferta'][0]['Comercializador']} - {result['Resultados'][0]['Oferta'][0]['Nome']}",
estimativa,
)

def melhor_tarifa_simples(self, energia):
return self._simular(ponta = energia)
return self._simular(ponta=energia)

def melhor_tarifa_bihorario(self, fora_de_vazio, vazio):
return self._simular(ponta=fora_de_vazio, cheias=vazio)

def melhor_tarifa_trihorario(self, ponta, cheias, vazio):
return self._simular(ponta, cheias, vazio)


if __name__ == "__main__":
logging.basicConfig(level = logging.DEBUG)
logging.basicConfig(level=logging.DEBUG)

s = Simulador(6.9, "2021-8-1")

print(s.melhor_tarifa_simples(200))
print(s.melhor_tarifa_simples(220))

print(s.melhor_tarifa_bihorario(120, 100))

print(s.melhor_tarifa_bihorario(120, 200))
print(s.melhor_tarifa_trihorario(20, 100, 100))

0 comments on commit 4867cee

Please sign in to comment.