import json import socket from datetime import datetime import subprocess import time import requests DEFAULT_SHUTDOWN = "21:00" LAST_VALUE = 0 machine_name = socket.gethostname() url = "http://192.168.50.27:5000/lookup" payload = { "name": machine_name, } def get_data(): try: response = requests.post(url, json=payload, timeout=10) response.raise_for_status() json_data = response.json() print(json_data) return json_data except requests.RequestException: return None def to_seconds(t): return t.hour * 3600 + t.minute * 60 + t.second def set_shutdown(time, now): global LAST_VALUE if (time - now) < 0 or time == LAST_VALUE: return LAST_VALUE = time print("[BS Shutdown] shutting down in " + str(time - now) + " seconds") subprocess.run(["shutdown", "-s", "-t", str(time - now)]) def remove_shutdown(): print("[BS Shutdown] Removed shutdown") subprocess.run(["shutdown", "-a"]) def update(): global LAST_VALUE data = get_data() if data is not None and data["noshutdown"] == 1: if (LAST_VALUE != 0): remove_shutdown() # In case LAST_VALUE = 0 return if data is None: time = to_seconds(datetime.strptime(DEFAULT_SHUTDOWN, "%H:%M").time()) else: time = to_seconds(datetime.strptime(data["time"], "%H:%M").time()) now = to_seconds(datetime.now().time()) if (time - now) < 0: return if (time == LAST_VALUE): return if (LAST_VALUE != 0): remove_shutdown() print("[BS Shutdown] New value") set_shutdown(time, now) if __name__ == '__main__': while True: update() time.sleep(30)