Refactoring continues
This commit is contained in:
320
src/pytevolve.py
320
src/pytevolve.py
@@ -12,38 +12,52 @@ headers = {'content-type': 'application/x-www-form-urlencoded',
|
||||
dev_id = "082e858131ff012c51"
|
||||
|
||||
|
||||
|
||||
API_URL = "https://api-tevolve.termoweb.net/api/v2"
|
||||
DEV_URL = "/grouped_devs"
|
||||
|
||||
|
||||
class Tevolve:
|
||||
|
||||
token = ""
|
||||
def __init__(self):
|
||||
self.api_url = "https://api-tevolve.termoweb.net/api/v2"
|
||||
self.dev_url = "/grouped_devs"
|
||||
|
||||
self.need_token = True
|
||||
self.dev_id = ""
|
||||
self.token_primary = ""
|
||||
self.token_primary = None
|
||||
self.token_refresh = ""
|
||||
self.sid = ""
|
||||
self.devices = []
|
||||
self.latest_message = ""
|
||||
self.time_token_start = 0
|
||||
|
||||
setmode = ""
|
||||
setTemperature = ""
|
||||
|
||||
token = None
|
||||
sid = ""
|
||||
websocket_url = ""
|
||||
mode = ""
|
||||
set_point = ""
|
||||
websocket_message = ""
|
||||
|
||||
hallway_mode = ""
|
||||
hallway_current_temp = ""
|
||||
hallway_set_temp = ""
|
||||
hallway_active = ""
|
||||
|
||||
livingroom_mode = ""
|
||||
livingroom_current_temp = ""
|
||||
livingroom_set_temp = ""
|
||||
livingroom_active = ""
|
||||
|
||||
def token_manager(self, event):
|
||||
|
||||
while 1:
|
||||
|
||||
current_time = time.time()
|
||||
time_since_refresh = current_time - self.time_token_start
|
||||
|
||||
if self.need_token or time_since_refresh > 3600:
|
||||
|
||||
x = requests.post(url, headers=headers, data=data)
|
||||
|
||||
if x.status_code == 200:
|
||||
self.token_primary = x.json()["access_token"]
|
||||
self.time_token_start = time.time()
|
||||
event.set()
|
||||
else:
|
||||
time.sleep(5)
|
||||
else: time.sleep(60)
|
||||
|
||||
|
||||
def get_dev(self):
|
||||
@@ -54,7 +68,7 @@ class Tevolve:
|
||||
'Authorization': "Bearer " + self.token_primary}
|
||||
|
||||
|
||||
dev_request = requests.get(str(self.api_url+self.dev_url), headers=headers).json()
|
||||
dev_request = requests.get(str(API_URL+DEV_URL), headers=headers).json()
|
||||
self.dev_id = dev_request[0]["devs"][0]["dev_id"]
|
||||
|
||||
|
||||
@@ -78,25 +92,6 @@ class Tevolve:
|
||||
self.token_refresh = ""
|
||||
print("Could not get token")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@staticmethod
|
||||
def token_manager():
|
||||
|
||||
while Tevolve.token is None:
|
||||
|
||||
x = requests.post(url, headers=headers, data=data)
|
||||
|
||||
if x.status_code == 200:
|
||||
Tevolve.token = x.json()["access_token"]
|
||||
else:
|
||||
time.sleep(30)
|
||||
|
||||
|
||||
def get_sid(self):
|
||||
|
||||
url = "https://api-tevolve.termoweb.net/socket.io/?token=" + self.token_primary + "&dev_id=" + str(self.dev_id) + "&EIO" \
|
||||
@@ -117,8 +112,8 @@ class Tevolve:
|
||||
header = {'content-type': 'application/json',
|
||||
"Authorization": "Bearer " + self.token_primary}
|
||||
|
||||
url = str(self.api_url + endpoint)
|
||||
devices_request = requests.get(str(self.api_url + endpoint), headers=header).json()
|
||||
url = str(API_URL + endpoint)
|
||||
devices_request = requests.get(str(API_URL + endpoint), headers=header).json()
|
||||
|
||||
self.devices = devices_request
|
||||
|
||||
@@ -126,10 +121,6 @@ class Tevolve:
|
||||
raise
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def post_websocket(self):
|
||||
|
||||
# Tevolve.token_manager()
|
||||
@@ -152,15 +143,124 @@ class Tevolve:
|
||||
requests.request("POST", url, headers=headers, data=payload)
|
||||
|
||||
|
||||
def create_websocket(self):
|
||||
def set_mode(self, heater_id, mode):
|
||||
|
||||
heater_id = heater_id
|
||||
# mode = Tevolve.setmode
|
||||
headers = {
|
||||
'host': 'api-tevolve.termoweb.net',
|
||||
'origin': 'https://tevolve.termoweb.net',
|
||||
'content-type': 'application/json',
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) '
|
||||
'Version/15.4 Safari/605.1.15',
|
||||
'authorization': 'Bearer ' + self.token_primary,
|
||||
'referer': 'https://tevolve.termoweb.net/'
|
||||
|
||||
}
|
||||
url = "https://api-tevolve.termoweb.net/api/v2/devs/082e858131ff012c51/htr/" + str(heater_id) + "/status"
|
||||
|
||||
if mode == "heat":
|
||||
mode = "manual"
|
||||
|
||||
payload = json.dumps({
|
||||
"mode": mode
|
||||
})
|
||||
|
||||
response = requests.post(url, headers=headers, data=payload)
|
||||
if response.status_code == 201 or response.status_code == 200:
|
||||
pass
|
||||
# def get_mode(self):
|
||||
# headers = {
|
||||
# 'host': 'api-tevolve.termoweb.net',
|
||||
# 'origin': 'https://tevolve.termoweb.net',
|
||||
# 'content-type': 'application/json',
|
||||
# 'accept': 'application/json, text/plain, */*',
|
||||
# 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) '
|
||||
# 'Version/15.4 Safari/605.1.15',
|
||||
# 'authorization': 'Bearer ' + self.token_primary,
|
||||
# 'referer': 'https://tevolve.termoweb.net/',
|
||||
#
|
||||
# }
|
||||
# url = "https://api-tevolve.termoweb.net/api/v2/devs/082e858131ff012c51/htr/" + self.heater_id + "/status"
|
||||
#
|
||||
# response = requests.get(url, headers=headers)
|
||||
# if response.status_code == 201 or response.status_code == 200:
|
||||
# mode = response.json()["mode"]
|
||||
# if mode == "manual":
|
||||
# return "heat"
|
||||
|
||||
|
||||
websocket_url = "wss://api-tevolve.termoweb.net/socket.io/?token=" + self.token_primary + "&dev_id=" +str(self.dev_id)+ "&EIO=3&transport=websocket&sid=" + self.sid + ""
|
||||
def get_status(self):
|
||||
result = {}
|
||||
try:
|
||||
for index ,i in enumerate(self.devices["nodes"]):
|
||||
headers = {
|
||||
'host': 'api-tevolve.termoweb.net',
|
||||
'origin': 'https://tevolve.termoweb.net',
|
||||
'content-type': 'application/json',
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) '
|
||||
'Version/15.4 Safari/605.1.15',
|
||||
'authorization': 'Bearer ' + self.token_primary,
|
||||
'referer': 'https://tevolve.termoweb.net/',
|
||||
|
||||
}
|
||||
url = "https://api-tevolve.termoweb.net/api/v2/devs/"+self.dev_id+"/htr/"+str(i["addr"])+"/status"
|
||||
|
||||
response = requests.get(url, headers=headers)
|
||||
if response.status_code == 201 or response.status_code == 200:
|
||||
result.update({i["name"]: response.json()})
|
||||
except Exception as e:
|
||||
raise e
|
||||
return result
|
||||
|
||||
|
||||
def set_temperature(self, heater_id, set_temperature):
|
||||
|
||||
headers = {
|
||||
'host': 'api-tevolve.termoweb.net',
|
||||
'origin': 'https://tevolve.termoweb.net',
|
||||
'content-type': 'application/json',
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) '
|
||||
'Version/15.4 Safari/605.1.15',
|
||||
'authorization': 'Bearer ' + self.token_primary,
|
||||
'referer': 'https://tevolve.termoweb.net/'
|
||||
|
||||
}
|
||||
|
||||
url = "https://api-tevolve.termoweb.net/api/v2/devs/082e858131ff012c51/htr/" + str(heater_id) + "/status"
|
||||
|
||||
payload = json.dumps({
|
||||
"stemp": str(float(set_temperature)),
|
||||
"units": "C",
|
||||
"mode": "manual"
|
||||
})
|
||||
|
||||
response = requests.post(url, headers=headers, data=payload)
|
||||
if response.status_code == 201 or response.status_code == 200:
|
||||
pass
|
||||
|
||||
|
||||
def create_websocket(self, mqtt_connection):
|
||||
|
||||
|
||||
websocket_url = "wss://api-tevolve.termoweb.net/socket.io/?token=" + self.token_primary + \
|
||||
"&dev_id=" +str(self.dev_id)+ "&EIO=3&transport=websocket&sid=" + self.sid + ""
|
||||
|
||||
def on_message(ws, message):
|
||||
self.websocket_message = message
|
||||
print(message)
|
||||
|
||||
if len(message) > 20:
|
||||
|
||||
a = json.loads(message[20:])
|
||||
if a[0] == "update":
|
||||
self.last_update = a[1]
|
||||
mqtt_connection.update_homeassistant_entity(self.last_update)
|
||||
|
||||
|
||||
def on_open(ws):
|
||||
|
||||
def run():
|
||||
@@ -181,14 +281,15 @@ class Tevolve:
|
||||
|
||||
def on_close(ws, close_status_code, close_msg):
|
||||
print("WEB SOCKET ClOSED")
|
||||
|
||||
mqtt_connection.publish_heater()
|
||||
time.sleep(2)
|
||||
self.post_websocket()
|
||||
self.create_websocket()
|
||||
|
||||
|
||||
self.create_websocket(mqtt_connection)
|
||||
def on_error(ws, err):
|
||||
print("WEB SOCKET ERROR")
|
||||
self.post_websocket()
|
||||
self.create_websocket()
|
||||
# self.post_websocket()
|
||||
# self.create_websocket(mqtt_connection)
|
||||
|
||||
ws = websocket.WebSocketApp(websocket_url)
|
||||
websocket.enableTrace(False)
|
||||
@@ -199,128 +300,3 @@ class Tevolve:
|
||||
|
||||
ws.run_forever(ping_interval=10, ping_payload='42/api/v2/socket_io,["message","ping"]')
|
||||
|
||||
@staticmethod
|
||||
def set_mode(heater_id):
|
||||
|
||||
heater_id = heater_id
|
||||
mode = Tevolve.setmode
|
||||
headers = {
|
||||
'host': 'api-tevolve.termoweb.net',
|
||||
'origin': 'https://tevolve.termoweb.net',
|
||||
'content-type': 'application/json',
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) '
|
||||
'Version/15.4 Safari/605.1.15',
|
||||
'authorization': 'Bearer ' + Tevolve.token,
|
||||
'referer': 'https://tevolve.termoweb.net/'
|
||||
|
||||
}
|
||||
url = "https://api-tevolve.termoweb.net/api/v2/devs/082e858131ff012c51/htr/" + heater_id + "/status"
|
||||
|
||||
if mode == "heat":
|
||||
mode = "manual"
|
||||
|
||||
payload = json.dumps({
|
||||
"mode": mode
|
||||
})
|
||||
|
||||
response = requests.post(url, headers=headers, data=payload)
|
||||
if response.status_code == 201 or response.status_code == 200:
|
||||
pass
|
||||
|
||||
|
||||
def get_mode(self):
|
||||
headers = {
|
||||
'host': 'api-tevolve.termoweb.net',
|
||||
'origin': 'https://tevolve.termoweb.net',
|
||||
'content-type': 'application/json',
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) '
|
||||
'Version/15.4 Safari/605.1.15',
|
||||
'authorization': 'Bearer ' + self.token_primary,
|
||||
'referer': 'https://tevolve.termoweb.net/',
|
||||
|
||||
}
|
||||
url = "https://api-tevolve.termoweb.net/api/v2/devs/082e858131ff012c51/htr/" + self.heater_id + "/status"
|
||||
|
||||
response = requests.get(url, headers=headers)
|
||||
if response.status_code == 201 or response.status_code == 200:
|
||||
mode = response.json()["mode"]
|
||||
if mode == "manual":
|
||||
return "heat"
|
||||
|
||||
|
||||
def get_status(self):
|
||||
result = []
|
||||
try:
|
||||
for index ,i in enumerate(self.devices["nodes"]):
|
||||
headers = {
|
||||
'host': 'api-tevolve.termoweb.net',
|
||||
'origin': 'https://tevolve.termoweb.net',
|
||||
'content-type': 'application/json',
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) '
|
||||
'Version/15.4 Safari/605.1.15',
|
||||
'authorization': 'Bearer ' + self.token_primary,
|
||||
'referer': 'https://tevolve.termoweb.net/',
|
||||
|
||||
}
|
||||
url = "https://api-tevolve.termoweb.net/api/v2/devs/"+self.dev_id+"/htr/"+str(i["addr"])+"/status"
|
||||
|
||||
response = requests.get(url, headers=headers)
|
||||
if response.status_code == 201 or response.status_code == 200:
|
||||
result.append({i["name"]: response.json()})
|
||||
except Exception as e:
|
||||
raise e
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def set_temperature(heater_id, set_temperature):
|
||||
|
||||
headers = {
|
||||
'host': 'api-tevolve.termoweb.net',
|
||||
'origin': 'https://tevolve.termoweb.net',
|
||||
'content-type': 'application/json',
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) '
|
||||
'Version/15.4 Safari/605.1.15',
|
||||
'authorization': 'Bearer ' + Tevolve.token,
|
||||
'referer': 'https://tevolve.termoweb.net/'
|
||||
|
||||
}
|
||||
|
||||
url = "https://api-tevolve.termoweb.net/api/v2/devs/082e858131ff012c51/htr/" + heater_id + "/status"
|
||||
|
||||
payload = json.dumps({
|
||||
"stemp": str(float(set_temperature)),
|
||||
"units": "C",
|
||||
"mode": "manual"
|
||||
})
|
||||
|
||||
response = requests.post(url, headers=headers, data=payload)
|
||||
if response.status_code == 201 or response.status_code == 200:
|
||||
pass
|
||||
|
||||
if __name__ == '__main__':
|
||||
test = Tevolve()
|
||||
test.get_token()
|
||||
test.get_dev()
|
||||
|
||||
test.get_devices()
|
||||
|
||||
|
||||
for device in test.devices["nodes"]:
|
||||
if device["name"] == "Hallway":
|
||||
test.get_status(device["addr"])
|
||||
|
||||
test.get_sid()
|
||||
|
||||
|
||||
test.post_websocket()
|
||||
test.create_websocket()
|
||||
|
||||
|
||||
while 1:
|
||||
if test.websocket_message != "":
|
||||
print(test.websocket_message)
|
||||
test.websocket_message = ""
|
||||
Reference in New Issue
Block a user