Created
March 10, 2022 23:34
-
-
Save m-roberts/6a8e4b37b318a337b29c3cdeaf1b57cd to your computer and use it in GitHub Desktop.
Get information similar to what is displayed on Ender 3 v2 Display from Octoprint REST API
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import emoji | |
import time | |
import json | |
import os | |
from octorest import OctoRest | |
def make_client(url, apikey): | |
try: | |
client = OctoRest(url=url, apikey=apikey) | |
return client | |
except ConnectionError as e: | |
raise e | |
# e.g. | |
# | |
# { | |
# "url": "http://my-octopi.local", | |
# "apikey": "81C5BDFB0DEC0B397872F731F983C91A" | |
# } | |
with open(f"{os.path.expanduser('~')}/.octopi.cfg") as json_data_file: | |
data = json.load(json_data_file) | |
client = make_client(url=data["url"], apikey=data["apikey"]) | |
job_info = client.job_info() | |
job_error = None | |
try: | |
job_error = job_info["error"] | |
except KeyError: | |
# Leave as None | |
pass | |
job_state_text = job_info["state"] | |
job_progress_info = job_info["progress"] | |
job_percentage_completed = job_progress_info["completion"] | |
job_print_time = job_progress_info["printTime"] | |
job_print_time_left = job_progress_info["printTimeLeft"] | |
display_job_name = job_info["job"]["file"]["display"] | |
# Default flow rate | |
# client.flowrate(1) | |
printer_info = None | |
try: | |
printer_info = client.printer() | |
except RuntimeError: | |
# Leave as None | |
pass | |
if printer_info: | |
printer_state_err_text = printer_info["state"]["error"] | |
printer_state_text = printer_info["state"]["text"] | |
# printer_state_flags = printer_info["state"]["flags"] | |
# 'flags': { 'cancelling': False, | |
# 'closedOrError': False, | |
# 'error': False, | |
# 'finishing': False, | |
# 'operational': True, | |
# 'paused': False, | |
# 'pausing': False, | |
# 'printing': True, | |
# 'ready': False, | |
# 'resuming': False, | |
# 'sdReady': True}, | |
printer_temp_info = printer_info["temperature"] | |
bed_temp_info = None | |
bed_temp_actual = None | |
bed_temp_offset = None | |
bed_temp_target = None | |
try: | |
bed_temp_info = printer_temp_info["bed"] | |
bed_temp_actual = bed_temp_info["actual"] | |
bed_temp_offset = bed_temp_info["offset"] | |
bed_temp_target = bed_temp_info["target"] | |
except KeyError: | |
pass | |
extruder_temp_info = None | |
extruder_temp_actual = None | |
extruder_temp_offset = None | |
extruder_temp_target = None | |
try: | |
extruder_temp_info = printer_temp_info["tool0"] | |
extruder_temp_actual = extruder_temp_info["actual"] | |
extruder_temp_offset = extruder_temp_info["offset"] | |
extruder_temp_target = extruder_temp_info["target"] | |
except KeyError: | |
pass | |
if job_error: | |
print(f"{emoji.emojize(':no_entry:')} Error: {job_error}") | |
else: | |
print(f"{emoji.emojize(':receipt:')} State: {job_state_text}") | |
if display_job_name: | |
print(f"{emoji.emojize(':name_badge:')} Job Name: {display_job_name}") | |
if job_percentage_completed: | |
print(f"{job_percentage_completed:.0f}%") | |
def time_print(seconds): | |
if seconds is None: | |
return None | |
return time.strftime('%H:%M:%S', time.gmtime(seconds)) | |
if printer_info: | |
print(f"{emoji.emojize(':bed: :thermometer:')} : {bed_temp_actual:.0f}° / {bed_temp_target:.0f}°") | |
print(f"{emoji.emojize(':droplet::thermometer:')} : {extruder_temp_actual:.0f}° / {extruder_temp_target:.0f}°") | |
if job_print_time: | |
print(f"{emoji.emojize(':stopwatch:')} : Elapsed: {time_print(job_print_time)}") | |
print(f"{emoji.emojize(':stopwatch:')} : Remaining: {time_print(job_print_time_left)}") | |
print(f"{emoji.emojize(':stopwatch:')} : Total: {time_print(job_print_time + job_print_time_left)}") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment