79 lines
1.9 KiB
Python
79 lines
1.9 KiB
Python
import requests
|
|
import random
|
|
import string
|
|
import json
|
|
|
|
GOVEE_API_BASE_URL = "https://openapi.api.govee.com/router/api/v1/"
|
|
|
|
class GoveeApi:
|
|
key = ""
|
|
headers = {}
|
|
|
|
def __init__(self, key):
|
|
self.key = key
|
|
self.headers = {
|
|
'Govee-API-Key': key
|
|
}
|
|
|
|
def __get_random_string(self):
|
|
characters = string.ascii_letters + string.digits
|
|
result_str = ''.join(random.choices(characters, k=4))
|
|
return result_str
|
|
|
|
def get_diy_scenes(self, sku, device):
|
|
payload = {
|
|
"requestId": self.__get_random_string(),
|
|
"payload": {
|
|
"sku": sku,
|
|
"device": device
|
|
}
|
|
}
|
|
|
|
res = requests.post(GOVEE_API_BASE_URL + 'device/diy-scenes', json=payload, headers=self.headers)
|
|
res.raise_for_status()
|
|
|
|
print("[GOVEE] DIY scene fetch: " + json.dumps(res.json(), indent=4))
|
|
|
|
return res.ok
|
|
|
|
def set_diy_scene(self, sku, device):
|
|
payload = {
|
|
'requestId': self.get_random_string(),
|
|
'payload': {
|
|
'sku': sku,
|
|
'device': device,
|
|
'capability': {
|
|
'type': 'device.capabilities.dynamic_scene',
|
|
'instance': 'diyScene',
|
|
'value': 22757907
|
|
}
|
|
}
|
|
}
|
|
|
|
res = requests.post(GOVEE_API_BASE_URL + 'device/control', headers=self.headers, json=payload)
|
|
res.raise_for_status()
|
|
|
|
print("[GOVEE] Set DIY scene: " + json.dumps(res.json(), indent=4))
|
|
|
|
return res.ok
|
|
|
|
def set_to_original_color(self, sku, device):
|
|
payload = {
|
|
'requestId': self.get_random_string(),
|
|
'payload': {
|
|
'sku': sku,
|
|
'device': device,
|
|
'capability': {
|
|
'type': 'devices.capabilities.color_setting',
|
|
'instance': 'colorRgb',
|
|
'value': 16711680
|
|
}
|
|
}
|
|
}
|
|
|
|
res = requests.post(GOVEE_API_BASE_URL + 'device/control', json=payload, headers=self.headers)
|
|
res.raise_for_status()
|
|
|
|
print("[GOVEE] Set to original: " + json.dumps(res.json(), indent=4))
|
|
|
|
return res.ok |