Skip to content

Commit

Permalink
Merge pull request #204 from saniho/AddChoiceServiceEnedis
Browse files Browse the repository at this point in the history
Minor Correction - Prepare choice service enedis( EnedisGateway or MyElectricData
  • Loading branch information
saniho authored Dec 16, 2022
2 parents e59d955 + 649f47e commit 18b56a7
Show file tree
Hide file tree
Showing 16 changed files with 200 additions and 141 deletions.
6 changes: 4 additions & 2 deletions .idea/apiEnedis.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,16 @@ Cette partie n'est pas tenu à jour.
<details>
<summary><b>VERSION</b></summary>

**2.0.3.0** preparation pour myElectricData & corrections mineures

**ajout de la possibilité d'utiliser myElectricData d'ici peu**

Attention le service enedisGateway sera desactivé en mai 2023, mais myElectricData prendra la releve.

Pensez à vous enregistrer sur https://www.myelectricaldata.fr/

ps : le token myelectridata n'est pas compatible avec celui de enedsgateway ...

**1.2.0.0** refactoring du code

**suppression de la configuration possible par le fichier yaml, uniquement
Expand Down
9 changes: 7 additions & 2 deletions custom_components/apiEnedis/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ def __init__(self):
from .const import ( # isort:skip
CONF_TOKEN,
CONF_CODE,
CONF_SERVICE_ENEDIS,
DOMAIN,
HP_COST,
HC_COST,
Expand Down Expand Up @@ -232,6 +233,7 @@ async def async_set_options(self):
CONF_SCAN_INTERVAL: data.pop(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL),
CONF_TOKEN: data.pop(CONF_TOKEN, ""),
CONF_CODE: str(data.pop(CONF_CODE, "")),
CONF_SERVICE_ENEDIS: str(data.pop(CONF_SERVICE_ENEDIS, "")),
HP_COST: str(data.pop(HP_COST, "0.0")),
HC_COST: str(data.pop(HC_COST, "0.0")),
HEURESCREUSES_ON: bool(data.pop(HEURESCREUSES_ON, True)),
Expand All @@ -250,9 +252,10 @@ def update_OptionsMyEnedis(self):
_LOGGER.info("getInit()")
hccost = float(self.entry.options.get(HC_COST, "0.0"))
hpcost = float(self.entry.options.get(HP_COST, "0.0"))
serviceEnedis = self.entry.options.get(CONF_SERVICE_ENEDIS, "enedisGateway")
token, code = (
self.entry.options[CONF_TOKEN],
self.entry.options[CONF_CODE],
self.entry.options[CONF_CODE]
)
heurescreusesON = self.entry.options[HEURESCREUSES_ON]
heurescreusesch = self.entry.options.get(HEURES_CREUSES, "[]")
Expand All @@ -261,7 +264,8 @@ def update_OptionsMyEnedis(self):
heurescreuses = ast.literal_eval(heurescreusesch)
self._PDL_ID = code
_LOGGER.info(
"options - proc -- %s %s %s %s %s %s",
"options - proc -- %s %s %s %s %s %s %s",
serviceEnedis,
token,
code,
hccost,
Expand Down Expand Up @@ -311,6 +315,7 @@ def update_OptionsMyEnedis(self):
heuresPleinesCost=hpcost,
version=__VERSION__,
heuresCreusesON=heurescreusesON,
serviceEnedis=serviceEnedis,
)
self.clientEnedis.setPathArchive(path)
dataJson = self.clientEnedis.readDataJson()
Expand Down
20 changes: 19 additions & 1 deletion custom_components/apiEnedis/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
DOMAIN,
CONF_TOKEN,
CONF_CODE,
CONF_SERVICE_ENEDIS,
HC_COST,
HP_COST,
HEURESCREUSES_ON,
Expand Down Expand Up @@ -46,13 +47,19 @@ def _show_setup_form(self, user_input=None, errors=None):
user_input = {}
token = ""
code = ""
serviceEnedis = "enedisGateway"
val_hc_cost = "0.0"
val_hp_cost = "0.0"
val_heures_creuses = ""
val_heurescreuses_on = True

# all_repos = ["enedisGateway", "myElectricalData"]
all_repos = ["enedisGateway"]
data_schema = vol.Schema(
{
vol.Required(
CONF_SERVICE_ENEDIS,
default=user_input.get(CONF_SERVICE_ENEDIS, serviceEnedis),
): vol.In(all_repos),
vol.Required(
CONF_TOKEN, default=user_input.get(CONF_TOKEN, token)
): str,
Expand Down Expand Up @@ -86,6 +93,7 @@ async def async_step_user(self, user_input=None): # pylint: disable=unused-argu

token = user_input[CONF_TOKEN] # Might be a city name or a postal code
code = user_input.get(CONF_CODE)
serviceEnedis = user_input.get(CONF_SERVICE_ENEDIS)
hc_cost = user_input.get(HC_COST)
hp_cost = user_input.get(HP_COST)
heures_creuses_on = user_input.get(HEURESCREUSES_ON)
Expand All @@ -100,6 +108,7 @@ async def async_step_user(self, user_input=None): # pylint: disable=unused-argu
data={
CONF_TOKEN: token,
CONF_CODE: code,
CONF_SERVICE_ENEDIS: serviceEnedis,
HC_COST: hc_cost,
HP_COST: hp_cost,
HEURESCREUSES_ON: heures_creuses_on,
Expand All @@ -126,9 +135,18 @@ async def async_step_init(self, user_input=None):
return self.async_create_entry(title="", data=user_input)
token = "monToken"
code = "monCode"
serviceEnedis = "enedisGateway"
val_heures_creuses = ""
# all_repos = ["enedisGateway", "myElectricalData"]
all_repos = ["enedisGateway"]

data_schema = vol.Schema(
{
vol.Required(
CONF_SERVICE_ENEDIS,
default=self.config_entry.options.get(CONF_SERVICE_ENEDIS,
serviceEnedis),
): vol.In(all_repos),
vol.Required(
CONF_TOKEN,
default=self.config_entry.options.get(CONF_TOKEN, token),
Expand Down
2 changes: 2 additions & 0 deletions custom_components/apiEnedis/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ def __init__(self):
# Configuration
CONF_TOKEN = "token"
CONF_CODE = "code"
# defaut
CONF_SERVICE_ENEDIS = "enedisGateway"

# 60 secondes verifications du coordinator
CONF_SCAN_INTERVAL = "conf_scan_interval"
Expand Down
44 changes: 0 additions & 44 deletions custom_components/apiEnedis/gitinformation.py

This file was deleted.

2 changes: 1 addition & 1 deletion custom_components/apiEnedis/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"issue_tracker": "https://github.com/saniho/apiEnedis/issues",
"iot_class": "cloud_polling",
"config_flow": true,
"version": "1.5.1",
"version": "2.0.3",
"requirements": [
"packaging>=20.8"
],
Expand Down
83 changes: 66 additions & 17 deletions custom_components/apiEnedis/myCall.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ def __init__(self):
self._lastAnswer = None
self._contentType = "application/json"
self._contentHeaderMyEnedis = "home-assistant-myEnedis"
self._serverName = "https://enedisgateway.tech/api"
self._serviceEnedis = None
self._serverNameUrl = {'enedisGateway': "https://enedisgateway.tech/api",
'myElectricalData': "https://www.myelectricaldata.fr"}

@staticmethod
def sanitizeCounter() -> int:
Expand All @@ -68,8 +70,9 @@ def increaseCallCounter() -> int:
myCall._MyCallsSinceRestart += 1
return myCall._MyCallsSinceRestart

def setParam(self, PDL_ID: str, token: str, version: str):
self._PDL_ID, self._token, self._version = PDL_ID, token, version
def setParam(self, PDL_ID: str, token: str, version: str, serviceEnedis: str):
self._PDL_ID, self._token, self._version, self._serviceEnedis = \
PDL_ID, token, version, serviceEnedis

def getDefaultHeader(self) -> dict[str, str]:
return {
Expand All @@ -79,6 +82,15 @@ def getDefaultHeader(self) -> dict[str, str]:
"ha_sensor_myenedis_version": self._version,
}

def getServiceEnedis(self):
return self._serviceEnedis

def isMyElectricData(self, serviceEnedis):
return serviceEnedis == "myElectricalData"

def isEnedisGateway(self, serviceEnedis):
return serviceEnedis == "enedisGateway"

def setLastAnswer(self, lastanswer):
self._lastAnswer = lastanswer

Expand Down Expand Up @@ -124,7 +136,36 @@ def saveApiReturn(self, idx: int, data: str):
with open(fname, "w") as f:
f.write(data)

def post_and_get_json(self, url, params=None, data=None, headers=None):
def getUrl(self, serviceEnedis, data):
if self.isMyElectricData(serviceEnedis):
url = self._serverNameUrl[serviceEnedis]
if data["type"] == "contracts":
url = url + "/" + data["type"] + "/" + data["usage_point_id"] + "/"
elif data["type"] == "daily_consumption":
url = url + "/" + data["type"] + "/" + data["usage_point_id"] + "/" + \
"start" + "/" + data["start"] + "/" + \
"end" + "/" + data["end"] + "/"
elif data["type"] == "daily_consumption_max_power":
url = url + "/" + data["type"] + "/" + data["usage_point_id"] + "/" + \
"start" + "/" + data["start"] + "/" + \
"end" + "/" + data["end"] + "/"
elif data["type"] == "daily_production":
url = url + "/" + data["type"] + "/" + data["usage_point_id"] + "/" + \
"start" + "/" + data["start"] + "/" + \
"end" + "/" + data["end"] + "/"
elif data["type"] == "consumption_load_curve":
url = url + "/" + data["type"] + "/" + data["usage_point_id"] + "/" + \
"start" + "/" + data["start"] + "/" + \
"end" + "/" + data["end"] + "/"
return "get", url
elif self.isEnedisGateway(serviceEnedis):
url = self._serverNameUrl[serviceEnedis]
return "post", url
else:
return None

def post_and_get_json(self, serviceEnedis=None, params=None,
data=None, headers=None):
import json
import random
import time
Expand Down Expand Up @@ -168,14 +209,22 @@ def post_and_get_json(self, url, params=None, data=None, headers=None):
counter = myCall.increaseCallCounter()
logPrefix = f"====== Appel http #{counter} !!! "
_LOGGER.info(f"{logPrefix}=====")

response = session.post(
url,
params=params,
data=json.dumps(data),
headers=headers,
timeout=30,
)
method, url = self.getUrl(serviceEnedis, data)
if method == "post":
response = session.post(
url,
params=params,
data=json.dumps(data),
headers=headers,
timeout=30,
)
else:
response = session.get(
url,
params=params,
data=json.dumps(data),
headers=headers,
timeout=30,)
# Write API result to file (test generation, debug)
self.saveApiReturn(counter, response.text)

Expand Down Expand Up @@ -241,7 +290,7 @@ def getDataPeriod(self, deb: str, fin: str | None) -> tuple[str, bool]:
}
headers = self.getDefaultHeader()
dataAnswer = self.post_and_get_json(
self._serverName, data=payload, headers=headers
self.getServiceEnedis(), data=payload, headers=headers
)
callDone = True
else:
Expand All @@ -262,7 +311,7 @@ def getDataPeriodConsumptionMaxPower(self, deb, fin):
}
headers = self.getDefaultHeader()
dataAnswer = self.post_and_get_json(
self._serverName, data=payload, headers=headers
self.getServiceEnedis(), data=payload, headers=headers
)
callDone = True
else:
Expand All @@ -282,7 +331,7 @@ def getDataProductionPeriod(self, deb, fin):
}
headers = self.getDefaultHeader()
dataAnswer = self.post_and_get_json(
self._serverName, data=payload, headers=headers
self.getServiceEnedis(), data=payload, headers=headers
)
callDone = True
else:
Expand All @@ -302,7 +351,7 @@ def getDataPeriodCLC(self, deb, fin):
}
headers = self.getDefaultHeader()
dataAnswer = self.post_and_get_json(
self._serverName, data=payload, headers=headers
self.getServiceEnedis(), data=payload, headers=headers
)
callDone = True
else:
Expand All @@ -319,6 +368,6 @@ def getDataContract(self):
}
headers = self.getDefaultHeader()
dataAnswer = self.post_and_get_json(
self._serverName, data=payload, headers=headers
self.getServiceEnedis(), data=payload, headers=headers
)
return dataAnswer
Loading

0 comments on commit 18b56a7

Please sign in to comment.