95 lines
3.4 KiB
Python
95 lines
3.4 KiB
Python
import requests
|
|
import time
|
|
import json
|
|
from datetime import datetime, timedelta
|
|
from adaxconnector import AdaxConnector
|
|
from adax_content import AdaxDevice, AdaxRoom
|
|
|
|
|
|
class AdaxController:
|
|
def __init__(self,id:str="331582", secret:str="7ShZ7YWWruXD7WZA"):
|
|
self._conn = AdaxConnector(id=id, secret=secret)
|
|
self._rooms = []
|
|
self._devices = []
|
|
self.__get_adax_content()
|
|
|
|
def __get_adax_content(self):
|
|
data = self._conn.get_content()
|
|
for room in data['rooms']:
|
|
self._rooms.append(AdaxRoom(room))
|
|
|
|
for device in data['devices']:
|
|
self._devices.append(AdaxDevice(device))
|
|
|
|
def print_room_names(self):
|
|
for i, room in enumerate(self._rooms):
|
|
print(f"{i}. {room.name} [{room.id}]")
|
|
|
|
def get_room_by_name(self, room_name: str) -> AdaxRoom|None:
|
|
"""
|
|
Finds an AdaxRoom object in a list of AdaxRoom objects by its name.
|
|
|
|
Args:
|
|
rooms: A list of AdaxRoom objects.
|
|
room_name: The name of the room to find.
|
|
|
|
Returns:
|
|
The AdaxRoom object with the matching name, or None if not found.
|
|
"""
|
|
# found_rooms = [room for room in rooms if room.name == room_name]
|
|
|
|
for room in self._rooms:
|
|
if room.name == room_name:
|
|
return room
|
|
return None
|
|
|
|
def get_devices_from_room(self, room_name:str)-> list[AdaxDevice]:
|
|
room = self.get_room_by_name(room_name)
|
|
return [device for device in self._devices if device.room_id == room.id]
|
|
|
|
def disable_heating_in_room(self, room_name):
|
|
room = self.get_room_by_name(room_name)
|
|
room.heating_enabled = False
|
|
payload = {'rooms': [room.to_payload()]}
|
|
result = self._conn.send_request('control', data=payload)
|
|
print(result)
|
|
|
|
def enable_heating_in_room(self, room_name):
|
|
room = self.get_room_by_name(room_name)
|
|
room.heating_enabled = True
|
|
payload = {'rooms': [room.to_payload()]}
|
|
result = self._conn.send_request('control', data=payload)
|
|
print(result)
|
|
|
|
def print_room_info(self, room_name):
|
|
self.__get_adax_content()
|
|
room = self.get_room_by_name(room_name)
|
|
print(f"[{room.name}] Kamertemperatuur actueel: {room.temperature / 100}\u00B0C, gewenst: {room.target_temperature / 100}\u00B0C, heater staat {'aan' if room.heating_enabled else 'uit'}.")
|
|
|
|
#Todo: adapt until request
|
|
def set_current_room_temperature(self, room_name:str, new_temperature:int):
|
|
room = self.get_room_by_name(room_name)
|
|
if new_temperature < 100:
|
|
t = new_temperature * 100
|
|
else:
|
|
t = new_temperature
|
|
result = self._conn._set_room_temperature(room_id=room.id, target_temp=t)
|
|
print(result)
|
|
|
|
def get_energy_info(self, room_name):
|
|
room = self.get_room_by_name(room_name)
|
|
energy_log = self._conn._get_energy_info(room_id=room.id)
|
|
return energy_log
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
CLIENT_ID = "331582"
|
|
CLIENT_SECRET = "7ShZ7YWWruXD7WZA"
|
|
ac = AdaxController(CLIENT_ID, CLIENT_SECRET)
|
|
ac.print_room_info('Studio')
|
|
ac.get_energy_info('Studio')
|
|
ac.print_room_info('Ouderslaapkamer')
|
|
ac.print_room_info('Kledingkamer')
|
|
input() |