# ConsoleMenu Modules -- Menu System: ConsoleMenu import consolemenu from consolemenu import ConsoleMenu from consolemenu.items import FunctionItem, SubmenuItem, CommandItem from consolemenu import * from consolemenu.items import * from consolemenu.format import * from consolemenu.menu_component import Dimension # Terminal UI system: Blessed # from blessed import Terminal # HTTP requests: Requests import requests # Import Timezone/Dateformatting/Timeformatting: Arrow import arrow # JSON parsing: JSON import json # Tado integration: PyTado from PyTado.interface import Tado # OS and System Integration (run ext commands): OS and SYS import os import sys # PyTado Setup tado = Tado('daniel@cph.industries', 'BarbasolArduino85') climate_living = tado.getClimate(zone=1) climate_dining = tado.getClimate(zone=2) climate_bed = tado.getClimate(zone=3) state_living = tado.getState(zone=1) state_dining = tado.getState(zone=2) state_bed = tado.getState(zone=3) # TimeZone today = arrow.now('Europe/Copenhagen') # Terminal Blessed Setup # term = Terminal() # Google Assistant Relay API: Assistant Relay server = "http://localhost:3000/assistant" user = "USERNAME GOES HERE" commands = "" response = "" # Weather API: OpenWeatherMap api_key = "API KEY GOES HERE" base_url = "http://api.openweathermap.org/data/2.5/weather?" city_name = "CITY, STATE/COUNTRY GOES HERE" complete_url = base_url + "appid=" + api_key + "&q=" + city_name # Call to Weather API weather_response = requests.get(complete_url) x = weather_response.json() y = x["main"] current_temperature = "{:.1f}".format(y["temp"] - 273.15) current_pressure = y["pressure"] current_humidity = y["humidity"] z = x["weather"] weather_description = z[0]["description"] # Function executive AssRel Commands def commit(commands): # print(term.blink("Sending...")) response = requests.post(server, json={"user": user, "command":commands}) today = arrow.now('Europe/Copenhagen') print("\a") return response # Close Application and Reopen to Refresh Menu def refresh(): os.execv(sys.executable, ['python3'] + ['menu.py']) # Strings for showing Temp, Humidity and Set Tep # Living Room LR = (" " + str("{:.1f}".format(climate_living["temperature"])) + " C @ " + str(climate_living["humidity"]) + "% -> " + str("{:.1f}".format(state_living["setting"]["temperature"]["celsius"])) + " C") # Dining Room DR = (" " + str("{:.1f}".format(climate_dining["temperature"])) + " C @ " + str(climate_dining["humidity"]) + "% -> " + str("{:.1f}".format(state_dining["setting"]["temperature"]["celsius"])) + " C") # Bedroom BR = (" " + str("{:.1f}".format(climate_bed["temperature"])) + " C @ " + str(climate_bed["humidity"]) + "% -> " + str("{:.1f}".format(state_bed["setting"]["temperature"]["celsius"])) + " C") # Create Map def map(): print('\x1a') print(" R28 MAIN OVERVIEW") print(" ") print(" |-------------------------------------------------------------------------|") print(" | Zone 1: Bedroom | Zone 2: Living Room |") print(" | " + str("{:.1f}".format(climate_bed["temperature"])) + " C -> " + str("{:.1f}".format(state_living["setting"]["temperature"]["celsius"])) + " C | " + str("{:.1f}".format(climate_living["temperature"])) + " C -> " + str("{:.1f}".format(state_living["setting"]["temperature"]["celsius"])) + " C |") print(" | | |") print(" | \ |") print(" | | |") print(" |------------------------- --| |") print(" | Zone 4: Bathroom | \ |") print(" | | Z |------------ -------------------------|") print(" |-------/---------------| o | \ / |") print(" | Zone 5: Kitchen | n | Zone 3: Dining Room |") print(" | | e \ " + str("{:.1f}".format(climate_dining["temperature"])) + " C -> " + str("{:.1f}".format(state_living["setting"]["temperature"]["celsius"])) + " C |") print(" | 6: | |") print(" |-----------------------| | |") print(" | H | |") print(" |----| a |--------------------------------------------|") print(" |7:WC / l\ ") print(" |----| l | [ WHERE BE DRAGONS ] ") print(" |----| ") print("") input(" Press Enter to Return to Main Console ") # Setup Main Menu main_menu_title = "R28 MAIN TERMINAL" subtitle = "" pro_text = "Conditions: " + str(current_temperature) + " C @ " + str(current_humidity) + "% and " + str(weather_description) epi_text = "USERNAME logged in at " + str(today.format('HH:mm') + " on " + str(today.format('DD-MM-YYYY'))) menu = ConsoleMenu(main_menu_title, subtitle = subtitle, prologue_text=(epi_text), show_exit_option = False) # Setup Aux Menu aux_menu_title = "R28 AUXILLIARY SYSTEMS CONSOLE" aux_menu = ConsoleMenu(aux_menu_title) # Setup Power Menu pow_menu_title = "R28 POWER CONSOLE" pow_menu = ConsoleMenu(aux_menu_title) # Setup Climate Menu clim_menu_title = "R28 CLIMATE CONSOLE" clim_menu = ConsoleMenu(clim_menu_title, prologue_text=(pro_text)) # Setup Climate Menu game_menu_title = "R28 OTHER REMOTE SERVICES" game_menu = ConsoleMenu(clim_menu_title) # AUX Menu Items Eng_Vacuum = FunctionItem("Engage Vacuum", commit, ["start the sucker"], menu="aux_menu") Dis_Vacuum = FunctionItem("Disengage Vacuum", commit, ["stop the sucker"], menu="aux_menu") Open_Blinds = FunctionItem("Open Bedroom Blinds", commit, ["open the bedroom blinds"], menu="aux_menu") Clos_Blinds = FunctionItem("Shut Bedroom Blinds", commit, ["close the bedroom blinds"], menu="aux_menu") Plant = FunctionItem("I/O Plant Light", commit, ["toggle plant light"], menu="aux_menu") ManOver = CommandItem("Manual Override", "python3 request.py", menu="aux_menu") # AUX Menu Construction aux_menu.append_item(Eng_Vacuum) aux_menu.append_item(Dis_Vacuum) aux_menu.append_item(Open_Blinds) aux_menu.append_item(Clos_Blinds) aux_menu.append_item(Plant) aux_menu.append_item(ManOver) # TRYING to set up a function to pass new temperature in verbose format temp = "" room = "" def br_temp(room,temp): cmd = "set " + room + " temperature to " + temp + "degrees" response = requests.post(server, json={"user": user, "command":cmd}) today = arrow.now('Europe/Copenhagen') print("\a") return response # CLIM Menu Items clim_bedroom_item = FunctionItem("Set Bedroom Temperature" + BR, input, ["Current Temperature is " + str(climate_bed["temperature"]) + " C. Enter New >> "], menu=clim_menu) clim_livroom_item = FunctionItem("Set Livingroom Temperature " + LR, input, ["Current Temperature is " + str(climate_living["temperature"]) + " C. Enter New >> "], menu=clim_menu) clim_dinroom_item = FunctionItem("Set Dining Room Temperature" + DR, input, ["Current Temperature is " + str(climate_dining["temperature"]) + "C. Enter New >> "], menu=clim_menu) # CLIM Menu Construction clim_menu.append_item(clim_bedroom_item) clim_menu.append_item(clim_livroom_item) clim_menu.append_item(clim_dinroom_item) # POWER Menu items Livingroom = FunctionItem("I/O Living Room Lights", commit, ["toggle living room lights"], menu="pow_menu") Diningroom = FunctionItem("I/O Dining Room Lights", commit, ["toggle dining room lights"], menu="pow_menu") Bedroom = FunctionItem("I/O Bedroom Lights", commit, ["toggle bedroom lights"], menu="pow_menu") Hallway = FunctionItem("I/O Hallway Lights", commit, ["toggle hallway lights"], menu="pow_menu") WC = FunctionItem("I/O WC Lights", commit, ["toggle toilet lights"], menu="pow_menu") Bathroom = FunctionItem("I/O Bathroom Lights", commit, ["toggle bathroom lights"], menu="pow_menu") Kitchen = FunctionItem("I/O Kitchen Lights", commit, ["toggle kitchen lights"], menu="pow_menu") # Power Menu Construction pow_menu.append_item(Livingroom) pow_menu.append_item(Diningroom) pow_menu.append_item(Bedroom) pow_menu.append_item(Hallway) pow_menu.append_item(WC) pow_menu.append_item(Bathroom) pow_menu.append_item(Kitchen) # Game Menu items Tetris = CommandItem("Terminis", "terminis", menu=game_menu) MoonBuggy = CommandItem("Moon Byggy", "moon-buggy", menu=game_menu) ATC = CommandItem("Air Traffic Control", "atc", menu=game_menu) #Game Menu Construction game_menu.append_item(Tetris) game_menu.append_item(MoonBuggy) game_menu.append_item(ATC) # Main Menu Items map_item = FunctionItem("Overview", map) pow_menu_item = SubmenuItem("Power Console", pow_menu, menu=menu) clim_menu_item = SubmenuItem("Climate Console", clim_menu, menu=menu) aux_menu_item = SubmenuItem("Auxilliary Systems Console", aux_menu, menu=menu) Scram = FunctionItem("Terminate Main Power Grid", commit, ["turn off all lights"]) game_menu_item = SubmenuItem("Other Services", game_menu, menu=menu) Ref = FunctionItem("Refresh Terminal", refresh) # Construct the Main Menu menu.append_item(map_item) menu.append_item(pow_menu_item) menu.append_item(clim_menu_item) menu.append_item(aux_menu_item) menu.append_item(ManOver) menu.append_item(Scram) # menu.append_item(game_menu_item) menu.append_item(Ref) menu_format = MenuFormatBuilder() menu_format.set_border_style_type(0) menu.formatter = menu_format game_menu.formatter = menu_format aux_menu.formatter = menu_format pow_menu.formatter = menu_format clim_menu.formatter = menu_format # Run Main Menu # print("\a") # print("\x1a") # print("^z") # menu.draw() def MainMenu(): print('\x1a') # menu.draw() menu.show() # menu.join() MainMenu()