MiGenieHASS/app/lib/migenie.py

90 lines
3.0 KiB
Python
Raw Permalink Normal View History

2022-12-15 12:13:09 +00:00
import requests
from requests_cache import CachedSession
2022-12-15 12:13:09 +00:00
from dotenv import load_dotenv
import os
2022-12-15 14:51:58 +00:00
from lib.utils import convert_to_real_temp, is_valid_time
2022-12-15 12:13:09 +00:00
load_dotenv()
2022-12-15 12:13:09 +00:00
username = os.getenv("username")
password = os.getenv("password")
2022-12-16 13:27:48 +00:00
session = CachedSession('poll_cache', backend='sqlite',expire_after=30)
2022-12-15 14:51:58 +00:00
root_url = "https://public.wcs.schneider-electric.ws/rpc/public_genie/"
2022-12-15 12:13:09 +00:00
def poll_genie():
2022-12-15 14:51:58 +00:00
url = root_url+"poll"
2022-12-15 12:13:09 +00:00
payload = "{}"
headers = {
'User-Agent-Wiser': 'iPhoneTestTool;iOS6;WiserApp2.0.0',
'Content-Type': 'application/javascript',
}
response = requests.request("POST", url, headers=headers, data=payload, auth=(username, password))
return response.json()
def poll_genie_proxy():
url = 'http://127.0.0.1:5000/poll_genie'
response = session.get(url)
print("MiGenie Session Token = " + str(response.json()['sessionToken']))
return response.json()
2022-12-15 12:13:09 +00:00
def get_heating_data():
data = poll_genie_proxy()
2022-12-15 12:13:09 +00:00
return data['updateData']['zones'][0]
def get_water_data():
data = poll_genie_proxy()
2022-12-15 14:51:58 +00:00
return data['updateData']['zones'][1]
def boost_water(time:int):
if is_valid_time(time):
url = root_url+"apply_timer"
payload = '{"zoneId": [1],"setPoint": 255,"durationMinutes": ' + str(time) + '}'
headers = {
'User-Agent-Wiser': 'iPhoneTestTool;iOS6;WiserApp2.0.0',
'Content-Type': 'application/javascript'
}
response = requests.request("POST", url, headers=headers, data=payload, auth=(username, password))
2022-12-16 13:27:48 +00:00
session.cache.clear()
2022-12-15 14:51:58 +00:00
return response.json()
else:
return {"Error":"Time must be multiples of 30"}
def turn_off_water():
url = root_url+"cancel_timer"
payload = '{"zoneId": [1]}'
headers = {
'User-Agent-Wiser': 'iPhoneTestTool;iOS6;WiserApp2.0.0',
'Content-Type': 'application/javascript'
}
response = requests.request("POST", url, headers=headers, data=payload, auth=(username, password))
2022-12-16 13:27:48 +00:00
session.cache.clear()
2022-12-15 14:51:58 +00:00
return response.json()
def turn_on_heating(temp:int, time):
temp = str(convert_to_real_temp(temp, True))
if is_valid_time(time):
url = root_url+"adjust_setpoint"
payload = '{"zoneId": [0],"setpoint": ' +temp+',"durationMinutes": '+ str(time) + '}'
headers = {
'User-Agent-Wiser': 'iPhoneTestTool;iOS6;WiserApp2.0.0',
'Content-Type': 'application/javascript'
}
response = requests.request("POST", url, headers=headers, data=payload, auth=(username, password))
2022-12-16 13:27:48 +00:00
session.cache.clear()
2022-12-15 14:51:58 +00:00
return response.json()
else:
return {"Error":"Time must be multiples of 30"}
def turn_off_heating():
url = root_url+"adjust_setpoint"
payload = '{"zoneId": [0],"setpoint": 0}'
headers = {
'User-Agent-Wiser': 'iPhoneTestTool;iOS6;WiserApp2.0.0',
'Content-Type': 'application/javascript'
}
response = requests.request("POST", url, headers=headers, data=payload, auth=(username, password))
2022-12-16 13:27:48 +00:00
session.cache.clear()
2022-12-15 14:51:58 +00:00
return response.json()