Removing the old code
This commit is contained in:
parent
5c12390c73
commit
5699452ebf
161
main.py
161
main.py
@ -1,161 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import datetime
|
|
||||||
from genericpath import isfile
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import requests
|
|
||||||
import calendar
|
|
||||||
from flask import Flask
|
|
||||||
from flask import jsonify
|
|
||||||
|
|
||||||
url_energy = "https://www.ote-cr.cz/cs/kratkodobe-trhy/elektrina/denni-trh/@@chart-data?report_date={}"
|
|
||||||
url_currency = "https://data.kurzy.cz/json/meny/b[1].json"
|
|
||||||
url_currency2 = "https://www.cnb.cz/cs/financni-trhy/devizovy-trh/kurzy-devizoveho-trhu/kurzy-devizoveho-trhu/denni_kurz.txt?date={day}.{month}.{year}"
|
|
||||||
CACHE_PATH = "./cache.json"
|
|
||||||
ENERGY_CACHE_PATH = "./cache-energy.json"
|
|
||||||
NO_CACHE = False
|
|
||||||
SELL_FEE = 0.45
|
|
||||||
BUY_FEE = 0.45
|
|
||||||
VAT=1.21
|
|
||||||
|
|
||||||
class PriceException(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def get_distribution_price():
|
|
||||||
cez_57d_vt = 0.64862
|
|
||||||
cez_57d_nt = 0.43809
|
|
||||||
|
|
||||||
tax = 0.0283
|
|
||||||
services = 0.21282
|
|
||||||
ote = 0 # this is 4 crown per month
|
|
||||||
oze = 0.495
|
|
||||||
|
|
||||||
additional = tax+services+ote+oze
|
|
||||||
|
|
||||||
return {
|
|
||||||
"high": cez_57d_vt+additional,
|
|
||||||
"low": cez_57d_nt+additional,
|
|
||||||
}
|
|
||||||
|
|
||||||
def get_breaker_payment():
|
|
||||||
# https://www.tzb-info.cz/ceny-paliv-a-energii/14-ceny-elektriny#D57d
|
|
||||||
cez_32a = 500
|
|
||||||
|
|
||||||
currentDate = datetime.date.today()
|
|
||||||
daysInMonth = calendar.monthrange(currentDate.year, currentDate.month)[1]
|
|
||||||
return cez_32a/daysInMonth/24
|
|
||||||
|
|
||||||
def get_current_energy_price(date_str, selected_hour):
|
|
||||||
selected_hour = str(selected_hour)
|
|
||||||
data = {
|
|
||||||
"date": "",
|
|
||||||
"hours": {},
|
|
||||||
}
|
|
||||||
|
|
||||||
try:
|
|
||||||
if os.path.isfile(ENERGY_CACHE_PATH) and not NO_CACHE:
|
|
||||||
with open(ENERGY_CACHE_PATH, "r") as f:
|
|
||||||
data = json.load(f)
|
|
||||||
except json.decoder.JSONDecodeError:
|
|
||||||
cache = {}
|
|
||||||
|
|
||||||
if data["date"] == date_str:
|
|
||||||
return data["hours"][selected_hour]
|
|
||||||
|
|
||||||
r = requests.get(url_energy.format(date_str))
|
|
||||||
|
|
||||||
print(r.text)
|
|
||||||
for hour in r.json()["data"]["dataLine"][1]["point"]:
|
|
||||||
data["hours"][str(int(hour["x"])-1)] = hour["y"]
|
|
||||||
|
|
||||||
data["date"] = date_str
|
|
||||||
with open(ENERGY_CACHE_PATH, "w") as f:
|
|
||||||
json.dump(data, f)
|
|
||||||
|
|
||||||
return data["hours"][selected_hour]
|
|
||||||
|
|
||||||
#def get_currency_ratio(currency):
|
|
||||||
# r = requests.get(url_currency)
|
|
||||||
# return r.json()["kurzy"][currency]["dev_stred"]
|
|
||||||
|
|
||||||
def get_currency_ratio(currency):
|
|
||||||
now = datetime.date.today()
|
|
||||||
url = url_currency2.format(day=now.day,month=now.month,year=now.year)
|
|
||||||
r = requests.get(url)
|
|
||||||
for row in [x.split("|") for x in r.text.split("\n") if x and "|" in x]:
|
|
||||||
if row[3] == "EUR":
|
|
||||||
return float(row[4].replace(",", "."))
|
|
||||||
|
|
||||||
raise PriceException("EUR not found")
|
|
||||||
|
|
||||||
def hour_result():
|
|
||||||
current_hour = datetime.datetime.now().hour
|
|
||||||
today = datetime.date.today().strftime("%Y-%m-%d")
|
|
||||||
|
|
||||||
cache = {}
|
|
||||||
|
|
||||||
try:
|
|
||||||
if os.path.isfile(CACHE_PATH) and not NO_CACHE:
|
|
||||||
with open(CACHE_PATH, "r") as f:
|
|
||||||
cache = json.load(f)
|
|
||||||
except json.decoder.JSONDecodeError:
|
|
||||||
cache = {}
|
|
||||||
|
|
||||||
if cache.get("date") == today and cache.get("hour") == current_hour:
|
|
||||||
cache["cached"] = True
|
|
||||||
return cache
|
|
||||||
|
|
||||||
energy_price = get_current_energy_price(today, current_hour)
|
|
||||||
eur2czk = get_currency_ratio("EUR")
|
|
||||||
breaker = get_breaker_payment()
|
|
||||||
distribution = get_distribution_price()
|
|
||||||
|
|
||||||
data = {
|
|
||||||
"date": datetime.date.today().strftime("%Y-%m-%d"),
|
|
||||||
"hour": datetime.datetime.now().hour,
|
|
||||||
"breaker": "32A",
|
|
||||||
"tariff": "57d",
|
|
||||||
"price": {
|
|
||||||
"distribution": distribution,
|
|
||||||
"market": energy_price/1000*eur2czk,
|
|
||||||
"market_vat": energy_price/1000*eur2czk*VAT,
|
|
||||||
"marker_sell": energy_price/1000*eur2czk-SELL_FEE, # Typo
|
|
||||||
"market_sell": energy_price/1000*eur2czk-SELL_FEE,
|
|
||||||
"breaker": breaker,
|
|
||||||
"breaker_vat": breaker*VAT,
|
|
||||||
"sell_fee": SELL_FEE,
|
|
||||||
"buy_fee": BUY_FEE,
|
|
||||||
"total": {
|
|
||||||
"high": energy_price/1000*eur2czk+breaker+distribution["high"]+BUY_FEE,
|
|
||||||
"low": energy_price/1000*eur2czk+breaker+distribution["low"]+BUY_FEE,
|
|
||||||
},
|
|
||||||
"total_no_breaker": {
|
|
||||||
"high": energy_price/1000*eur2czk+distribution["high"]+BUY_FEE,
|
|
||||||
"low": energy_price/1000*eur2czk+distribution["low"]+BUY_FEE,
|
|
||||||
},
|
|
||||||
"total_vat": {
|
|
||||||
"high": (energy_price/1000*eur2czk+breaker+distribution["high"]+BUY_FEE)*VAT,
|
|
||||||
"low": (energy_price/1000*eur2czk+breaker+distribution["low"]+BUY_FEE)*VAT,
|
|
||||||
},
|
|
||||||
"total_no_breaker_vat": {
|
|
||||||
"high": (energy_price/1000*eur2czk+distribution["high"]+BUY_FEE)*VAT,
|
|
||||||
"low": (energy_price/1000*eur2czk+distribution["low"]+BUY_FEE)*VAT,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"cached": False,
|
|
||||||
}
|
|
||||||
|
|
||||||
with open(CACHE_PATH, "w") as f:
|
|
||||||
json.dump(data, f)
|
|
||||||
|
|
||||||
return data
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
|
||||||
|
|
||||||
@app.route("/")
|
|
||||||
def result():
|
|
||||||
return jsonify(hour_result())
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
app.run(debug=True)
|
|
Loading…
Reference in New Issue
Block a user