Skip to content

Instantly share code, notes, and snippets.

@XciD
Last active October 31, 2022 08:27
Show Gist options
  • 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")
@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