69 lines
1.7 KiB
Python
69 lines
1.7 KiB
Python
import json
|
|
|
|
from requests import api
|
|
from dataclasses import dataclass
|
|
|
|
|
|
@dataclass
|
|
class EntityState:
|
|
timestamp: str
|
|
name:str
|
|
room:str
|
|
temperature:float
|
|
humidity:int
|
|
battery_percent:int
|
|
battery_volt:float
|
|
rssi:int
|
|
mac:str
|
|
|
|
|
|
def test_api(gateway):
|
|
request = f'http://{gateway}:8000/api'
|
|
response = api.get(request)
|
|
if not response.ok: return False
|
|
response_json = json.loads(response.text)
|
|
version = response_json['version']['version']
|
|
return True
|
|
|
|
|
|
def get_state(gateway, entity_mac) -> EntityState | None:
|
|
request = f'http://{gateway}:8000/api/state/{entity_mac}'
|
|
response = api.get(request)
|
|
if not response.ok: return None
|
|
response_json = json.loads(response.text)
|
|
return EntityState(response_json['timestamp'],
|
|
response_json['name'],
|
|
response_json['room'],
|
|
response_json['temperature'],
|
|
response_json['humidity'],
|
|
response_json['battery_percent'],
|
|
response_json['battery_volt'],
|
|
response_json['rssi'],
|
|
entity_mac)
|
|
|
|
|
|
def get_deices(gateway) -> list | None:
|
|
request = f'http://{gateway}:8000/api'
|
|
response = api.get(request)
|
|
if not response.ok: return None
|
|
response_json = json.loads(response.text)
|
|
return response_json['info']['devices']
|
|
|
|
|
|
def get_device(gateway, entity_mac) -> str | None:
|
|
devices = get_deices(gateway)
|
|
if entity_mac in devices:
|
|
index = devices.index(entity_mac)
|
|
return devices[index]
|
|
return None
|
|
|
|
|
|
def get_entity_state(entity_mac, gateway):
|
|
device = get_device(gateway, entity_mac)
|
|
if device is None: return None
|
|
entity_state = get_state(gateway, device)
|
|
return entity_state
|
|
|
|
|
|
|