Skip to content

Instantly share code, notes, and snippets.

@XciD
Last active October 31, 2022 08:27
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save XciD/cdb02ed7725a3a64cca126ffdd04d0ed to your computer and use it in GitHub Desktop.
Save XciD/cdb02ed7725a3a64cca126ffdd04d0ed to your computer and use it in GitHub Desktop.
Retrieve Atome Direct Energie Information
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")
@Sigri44
Copy link

Sigri44 commented Dec 5, 2019

Ne fonctionne plus, encore un changement d'API.. !

@XciD
Copy link
Author

XciD commented Apr 29, 2020

Fonctionne bien chez moi

@iclems
Copy link

iclems commented Dec 2, 2020

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 ?

@XciD
Copy link
Author

XciD commented Dec 2, 2020

Tu as changé le UUID ?
Je n’ai pas le soucis.

@piec
Copy link

piec commented Jan 26, 2022

@XciD est-ce que ça marche toujours pour vous ? j'ai un 401 au login à chaque fois

@XciD
Copy link
Author

XciD commented Jan 27, 2022

Désolé je n'ai plus la clé.

@piec
Copy link

piec commented Jan 27, 2022

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