Skip to content

Instantly share code, notes, and snippets.

@m-roberts
Created March 10, 2022 23:34
Show Gist options
  • Save m-roberts/6a8e4b37b318a337b29c3cdeaf1b57cd to your computer and use it in GitHub Desktop.
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
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