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()