This commit is contained in:
Adam Rabjerg
2023-09-26 11:40:25 +02:00
commit 7d5c6353ed
4 changed files with 111 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
.venv
.vscode

4
config.yaml Normal file
View File

@@ -0,0 +1,4 @@
---
base_url: 192.168.178.155
https: false
bedtime: "00:30:00"

103
main.py Normal file
View File

@@ -0,0 +1,103 @@
#!/usr/bin/env python3
import yaml
import json
import requests
import time
from datetime import datetime, timedelta
from pprint import pprint
config_path = "./config.yaml"
headers = {"Content-Type":"application/json"}
def init():
global conf # Configuration as dict, comfortable and easy.
conf = load_config(config_path)
if conf["https"] == True:
conf["post_url"] = f"https://{conf['base_url']}/json"
else:
conf["post_url"] = f"http://{conf['base_url']}/json"
def load_config(config_name) -> dict:
# Loads config file as yaml and returns a dict.
with open(config_name) as f:
data = yaml.load(f, Loader=yaml.BaseLoader)
return data
def parse_bedtime():
bedtime = conf["bedtime"]
hh,mm,ss = bedtime.split(":")
print(hh,mm,ss)
bedtime = datetime.now()
def get_status():
response = requests.get(conf["post_url"])
response_json = json.loads(response.text)
return response_json
def set_powerstate(target_state):
if target_state:
send_state = "false"
else:
send_state = "true"
response = requests.post(conf["post_url"], json={"on": send_state}, headers=headers)
def set_preset_id(preset_id=0):
send_data = {"ps": preset_id}
response = requests.post(conf["post_url"], json=send_data, headers=headers)
response_json = json.loads(response.text)
return response_json
class night_light:
def __init__(self):
get_status()
def get_status(self):
response = requests.get(f"{conf['post_url']}/state", headers=headers)
response_json = json.loads(response.text)
self.duration = response_json["nl"]["dur"]
self.mode = response_json["nl"]["mode"]
self.enabled = response_json["nl"]["on"]
self.target_brightness = response_json["nl"]["tbri"]
self.remaining_runtime = response_json["nl"]["rem"]
pprint(f"Remaining duration: {int(response_json['nl']['rem'])/60} min")
return response_json["nl"]
def set_status(self, force=False):
get_status()
send_data = {"nl":{
"on": self.enabled,
"dur": self.duration,
"mode": self.mode,
"tbri": self.target_brightness,
"rem": self.remaining_runtime
}
}
if self.remaining_runtime == -1 or force:
response = requests.post(conf["post_url"], json=send_data, headers=headers)
response_json = json.loads(response.text)
return response_json
else:
return {'success': False}
init()
parse_bedtime()
# set_powerstate(1)
# set_preset_id(1)
# nl = night_light()
# pprint(nl.get_status())
# nl.enabled = True
# nl.mode = 1
# nl.duration = 90
# nl.target_brightness = 0
# pprint(nl.set_status())
# pprint(nl.get_status())

2
requirements.txt Normal file
View File

@@ -0,0 +1,2 @@
pyyaml
requests