Last active
October 31, 2022 08:27
-
-
Save XciD/cdb02ed7725a3a64cca126ffdd04d0ed to your computer and use it in GitHub Desktop.
Retrieve Atome Direct Energie Information
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import json | |
import requests | |
from flask import Flask, Response | |
EMAIL = "" | |
PASSWORD = "" | |
MOBILE_ID = "247DA355-FB45-4258-86A2-FE964DF2B1F6" # SOME UUID | |
HEADERS = { | |
"User-Agent": "Atome/1.5.3 (com.directenergie.atome; build:0.0.1; iOS 12.4.0) Alamofire/4.8.2", | |
"Content-Type": "application/json", | |
'Accept-Language': 'fr-FR;q=1.0, en-US;q=0.9', | |
'Accept': '*/*' | |
} | |
BASE_URL = "https://esoftlink.esoftthings.com/api" | |
CONNECTED = False | |
ID = None | |
REFERENCE = None | |
s = requests.session() | |
app = Flask(__name__) | |
@app.route('/live') | |
def live(): | |
result, status = get_live() | |
return Response(json.dumps(result), mimetype='application/json', status=status) | |
@app.route('/consumption') | |
def consumption(): | |
result, status = get_consumption() | |
return Response(json.dumps(result), mimetype='application/json', status=status) | |
def call_server(url): | |
global CONNECTED | |
if not CONNECTED and not login(): | |
return 'Error', 500 | |
request = s.get(url) | |
if request.status_code == 401 or request.status_code == 403: | |
CONNECTED = False | |
return call_server(url) # Reconnect | |
if request.status_code != 200: | |
return 'Error', requests.status_code | |
return json.loads(request.content), 200 | |
def get_live(): | |
return call_server(f"{BASE_URL}/subscription/{ID}/{REFERENCE}/measure/live.json?mobileId={MOBILE_ID}") | |
def get_consumption(): | |
return call_server(f"{BASE_URL}/subscription/{ID}/{REFERENCE}/consumption.json?period=sod") | |
def login(): | |
body = { | |
"email": EMAIL, | |
"plainPassword": PASSWORD, | |
"mobileInformation": json.dumps({ | |
"version": "1.5.3", | |
"phoneOS": "iOs", | |
"phoneOSVersion": "12.4", | |
"phoneBrand": "Android", | |
"phoneModel": "iPhone 7", | |
"mobileId": MOBILE_ID, | |
}) # Can be empty..., maybe good to keep all intact | |
} | |
request = s.post(f"{BASE_URL}/user/login.json", json=body, headers=HEADERS) | |
if request.status_code != 200: | |
return False | |
result = json.loads(request.content) | |
global ID, REFERENCE, CONNECTED | |
CONNECTED = True | |
ID = result["id"] | |
REFERENCE = result["subscriptions"][0]["reference"] | |
return True | |
if __name__ == '__main__': | |
login() | |
app.run(host="0.0.0.0") |
Fonctionne bien chez moi
J'ai implémenté de manière semblable mais dès que je login, l'app Direct Energie elle stoppe de fonctionner jusqu'à ce que je logout / login dans l'app. Y a-t-il un moyen d'avoir 2 sessions qui fonctionnent en parallèle ?
Tu as changé le UUID ?
Je n’ai pas le soucis.
@XciD est-ce que ça marche toujours pour vous ? j'ai un 401 au login à chaque fois
Désolé je n'ai plus la clé.
Merci de la réponse, j'ai finalement pu le faire marcher, un souci de mot de passe
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Ne fonctionne plus, encore un changement d'API.. !