Uploads the local filesystem file to the printer and returns an updated dict of all files on the printer
-
Parameters
+
Parameters
- src : str - the full path filename on the host to be uploaded to the printer
- dest : str - the full path filename on the printer to upload to
diff --git a/search/search_index.json b/search/search_index.json
index 2c9795b..b303555 100644
--- a/search/search_index.json
+++ b/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":""},{"location":"#bambu-printer-manager","title":"bambu-printer-manager","text":"bambu-printer-manager
is an all in one pure python wrapper for interacting with and managing Bambu Lab printers.
"},{"location":"#project-composition","title":"Project Composition","text":"Text Only
bpm/ \n bambucommands.py # collection of constants mainly representing Bambu Lab `mqtt` request commands \n bambuconfig.py # contains the `BambuConfig` class used for storing configuration data\n bambulogger.py # internal class used for logging\n bambuprinterlogger.json # internal configuration file for configuration of logging\n bambuprinter.py # the main `bambu-printer-manager` class `BambuPrinter` lives here\n bambuspool.py # contains the `BambuSpool` class used for storing spool data\n bambutools.py # contains a collection of methods used as tools (mostly internal)\n\n ftpsclient/\n _client.py # internal class used for performing `FTPS` operations\n
"},{"location":"#dependencies","title":"Dependencies","text":"Text Only
Python 3.12.1+\n\n* mkdocstrings, webcolors and paho-mqtt install automatically as predefined dependencies\n
"},{"location":"#installation","title":"Installation","text":"Text Only
pip install bambu-printer-manager\n
"},{"location":"#imports","title":"Imports","text":"Python
from bpm.bambuconfig import BambuConfig\nfrom bpm.bambuprinter import BambuPrinter\nfrom bpm.bambutools import PrinterState\nfrom bpm.bambutools import parseStage\nfrom bpm.bambutools import parseFan\n
"},{"location":"#constructors","title":"Constructor(s)","text":"
Python
config = BambuConfig(hostname=\"{host name}\", access_code=\"{access code}\", serial_number=\"{serial #}\")\nprinter = BambuPrinter(config=config)\n
or variations such as: Python
config = BambuConfig()\nprinter = BambuPrinter()\n\nconfig.hostname = \"{host name}\"\nconfig.access_code = \"{access code}\"\nconfig.serial_number = \"{serial #}\"\n\nprinter.config = config\n
or Python
config = BambuConfig()\n\nconfig.hostname = \"{host name}\"\nconfig.access_code = \"{access code}\"\nconfig.serial_number = \"{serial #}\"\n\nprinter = BambuPrinter(config=config)\n
or even Python
printer = BambuPrinter(config=BambuConfig(hostname=\"{host name}\", access_code=\"{access code}\", serial_number=\"{serial #}\"))\n
"},{"location":"#usage-patterns","title":"Usage Patterns","text":"
You can either poll BambuPrinter
periodically for data updates or rely on a callback when new data becomes available. The preferred pattern should be callback based, however both of these approaches will work fine.
Please consider the examples provided here as mere starting points.
"},{"location":"#data-polling-example","title":"Data Polling Example","text":"Python
import time\nimport sys\nimport os\n\nfrom bpm.bambuconfig import BambuConfig\nfrom bpm.bambuprinter import BambuPrinter\nfrom bpm.bambutools import PrinterState\n\nhostname = os.getenv('BAMBU_HOSTNAME')\naccess_code = os.getenv('BAMBU_ACCESS_CODE')\nserial_number = os.getenv('BAMBU_SERIAL_NUMBER')\n\nif not hostname or not access_code or not serial_number:\n print()\n print(\"BAMBU_HOSTNAME, BAMBU_ACCESS_CODE, and BAMBU_SERIAL_NUMBER environment variables must be set\")\n print()\n sys.exit(1)\n\nconfig = BambuConfig(hostname=hostname, access_code=access_code, serial_number=serial_number)\nprinter = BambuPrinter(config=config)\n\nprinter.start_session()\n\nwhile printer.state != PrinterState.CONNECTED:\n print(\"waiting for bpm to connect to printer\", flush=True)\n if printer.internalException:\n print(f\"retrying connection - reason: {printer.internalException if not printer.internalException is None else \"no internal exception\"}\")\n printer.start_session()\n time.sleep(1)\n\nprint(\"\\r\\nrefreshing sdcard 3mf files\", flush=True)\nprinter.get_sdcard_3mf_files()\nprint(\"sdcard 3mf files refreshed\\r\\n\", flush=True)\n\nprint(\"bpm is ready for business\\r\\n\")\n\nwhile True:\n print(f\"tool=[{round(printer.tool_temp, 1)}/{round(printer.tool_temp_target, 1)}] \" +\n f\"bed=[{round(printer.bed_temp, 1)}/{round(printer.bed_temp_target, 1)}] \" + \n f\"fan=[{parseFan(printer.fan_speed)}] print=[{printer.gcode_state}] speed=[{printer.speed_level}] \" +\n f\"light=[{'on' if printer.light_state else 'off'}]\")\n\n print(f\"stg_cur=[{parseStage(printer.current_stage)}] file=[{printer.gcode_file}] \" +\n f\"layers=[{printer.layer_count}] layer=[{printer.current_layer}] \" +\n f\"%=[{printer.percent_complete}] eta=[{printer.time_remaining} min] \" +\n f\"spool=[{printer.active_spool} ({printer.spool_state})]\")\n\n time.sleep(1)\n\n@app.route('/api/printer')\ndef get_printer_info():\n global printer\n # checking both the spools tuple and recent_update \n # states ensure we have a healthy data stream\n if printer.recent_update and printer.spools:\n return printer.toJson()\n else:\n return {\"status\": \"warn\", \"reason\": \"no data to send\"}\n
"},{"location":"#callback-pattern","title":"Callback Pattern","text":"Python
import sys\nimport os\n\nfrom bpm.bambuconfig import BambuConfig\nfrom bpm.bambuprinter import BambuPrinter\n\nhostname = os.getenv('BAMBU_HOSTNAME')\naccess_code = os.getenv('BAMBU_ACCESS_CODE')\nserial_number = os.getenv('BAMBU_SERIAL_NUMBER')\n\nif not hostname or not access_code or not serial_number:\n print()\n print(\"BAMBU_HOSTNAME, BAMBU_ACCESS_CODE, and BAMBU_SERIAL_NUMBER environment variables must be set\")\n print()\n sys.exit(1)\n\nconfig = BambuConfig(hostname=hostname, access_code=access_code, serial_number=serial_number)\nprinter = BambuPrinter(config=config)\n\ndef on_update(printer):\n print(f\"tool=[{round(printer.tool_temp, 1)}/{round(printer.tool_temp_target, 1)}] \" +\n f\"bed=[{round(printer.bed_temp, 1)}/{round(printer.bed_temp_target, 1)}] \" + \n f\"fan=[{parseFan(printer.fan_speed)}] print=[{printer.gcode_state}] speed=[{printer.speed_level}] \" +\n f\"light=[{'on' if printer.light_state else 'off'}]\")\n\n print(f\"stg_cur=[{parseStage(printer.current_stage)}] file=[{printer.gcode_file}] \" +\n f\"layers=[{printer.layer_count}] layer=[{printer.current_layer}] \" +\n f\"%=[{printer.percent_complete}] eta=[{printer.time_remaining} min] \" +\n f\"spool=[{printer.active_spool} ({printer.spool_state})]\")\n\nprinter.on_update = on_update\nprinter.start_session()\n\n# go do other stuff\n
"},{"location":"#cli-w-callback","title":"CLI w/ Callback","text":"Python
import json\nimport traceback\nimport time\nimport sys\nimport os\n\nfrom console.utils import wait_key\n\nfrom bpm.bambuconfig import BambuConfig\nfrom bpm.bambuprinter import BambuPrinter\nfrom bpm.bambutools import PrinterState\nfrom bpm.bambutools import parseStage\nfrom bpm.bambutools import parseFan\n\ngcodeState = \"\"\nfirmware = \"N/A\"\nams_firmware = \"N/A\"\n\ndef on_update(printer):\n global firmware, ams_firmware, gcodeState\n\n if gcodeState != printer.gcode_state:\n gcodeState = printer.gcode_state\n\n if firmware != printer.config.firmware_version:\n firmware = printer.config.firmware_version\n print(f\"\\r\\nprinter firmware: [{firmware}] serial #: [{printer.config.serial_number}]\\r\")\n if ams_firmware != printer.config.ams_firmware_version: \n ams_firmware = printer.config.ams_firmware_version\n print(f\"ams firmware: [{ams_firmware}]\\r\")\n\n print(f\"\\r\\ntool=[{round(printer.tool_temp * 1.0, 1)}/{round(printer.tool_temp_target * 1.0, 1)}] \" +\n f\"bed=[{round(printer.bed_temp * 1.0, 1)}/{round(printer.bed_temp_target * 1.0, 1)}] \" + \n f\"fan=[{parseFan(printer.fan_speed)}] print=[{printer.gcode_state}] speed=[{printer.speed_level}] \" +\n f\"light=[{'on' if printer.light_state else 'off'}]\")\n\n print(f\"\\rstg_cur=[{parseStage(printer.current_stage)}] file=[{printer.gcode_file}] \" +\n f\"layers=[{printer.layer_count}] layer=[{printer.current_layer}] \" +\n f\"%=[{printer.percent_complete}] eta=[{printer.time_remaining} min] \" +\n f\"spool=[{printer.active_spool} ({printer.spool_state})]\\r\")\n\nprint(\"\\r\") \n\nhostname = os.getenv('BAMBU_HOSTNAME')\naccess_code = os.getenv('BAMBU_ACCESS_CODE')\nserial_number = os.getenv('BAMBU_SERIAL_NUMBER')\n\nif not hostname or not access_code or not serial_number:\n print()\n print(\"BAMBU_HOSTNAME, BAMBU_ACCESS_CODE, and BAMBU_SERIAL_NUMBER environment variables must be set\")\n print()\n sys.exit(1)\n\nconfig = BambuConfig(hostname=hostname, access_code=access_code, serial_number=serial_number)\nprinter = BambuPrinter(config=config)\n\nprinter.on_update = on_update\nprinter.start_session()\n\ndef confirm(request):\n printer.pause_session()\n resp = input(f\"Confirm [{request}] (y/n): \")\n printer.resume_session()\n return resp == \"y\" or resp == \"Y\"\n\nspecial = False\n\nwhile True: \n key = wait_key()\n if key == \"\\x1b\": \n special = True\n continue\n if special:\n if key == \"[\": continue\n if key == \"C\": # right arrow\n # client.publish(\"device/{}/request\".format(SERIAL), json.dumps(MOVE_RIGHT))\n print(\"\\rmove right\\r\")\n if key == \"D\": # left arrow\n # client.publish(\"device/{}/request\".format(SERIAL), json.dumps(MOVE_LEFT))\n print(\"\\rmove left\\r\")\n special = False\n continue\n\n if not special and key == \"\\r\":\n print(\"\\r\")\n\n if key == \"?\":\n print(\"\\r\\nCommands:\\r\\n\")\n print(\" ? = this list\\r\")\n print(\" b = bed target temperature\\r\")\n print(\" d = dump printer json object\\r\")\n print(\" g = send gcode command\\r\")\n print(\" f = fan speed (in percent)\\r\")\n print(\" l = toggle light\\r\")\n print(\" p = print 3MF file\\r\")\n print(\" q = quit\\r\")\n print(\" Q = restart without exiting\")\n print(\" r = request full data refresh\\r\")\n print(\" s = change filament / spool\\r\")\n print(\" S = change speed (1 to 4)\\r\")\n print(\" t = tool target temperature\\r\")\n print(\" u = unload filament / spool\\r\")\n print(\" v = toggle verbose reporting\\r\")\n print(\" w = wifi signal strength\\r\")\n print(\" ! = abort job\\r\")\n print(\" ~ = toggle subscription\\n\\r\")\n\n if key == \"d\":\n print(json.dumps(printer, default=printer.jsonSerializer, indent=4, sort_keys=True).replace(\"\\n\", \"\\r\\n\"))\n\n if key == \"w\":\n print(f\"\\r\\nwifi signal strength: [{printer.wifi_signal}]\")\n\n if key == \"v\":\n printer.config.verbose = not printer.config.verbose\n\n if key == \"q\": \n break\n\n if key == \"Q\":\n printer.quit()\n printer.start_session()\n\n if key == \"l\":\n printer.light_state = not printer.light_state\n\n if key == \"t\":\n printer.pause_session()\n temp = input(\"\\r\\nTool0 Target Temperature: \")\n printer.resume_session()\n if temp.isnumeric() and confirm(\"CHANGE_TOOL_TEMP\"):\n printer.tool_temp_target = temp\n\n if key == \"b\":\n printer.pause_session()\n temp = input(\"\\r\\nBed Target Temperature: \")\n printer.resume_session()\n if temp.isnumeric():\n printer.bed_temp_target = temp\n\n if key == \"f\":\n printer.pause_session()\n speed = input(\"\\r\\nFan Speed (%): \")\n printer.resume_session()\n if speed.isnumeric():\n printer.fan_speed = speed\n\n if key == \"r\":\n printer.refresh()\n\n if key == \"u\" and confirm(\"UNLOAD_FILAMENT\"):\n printer.unload_filament()\n\n if key == \"s\":\n printer.pause_session()\n slot = input(\"\\r\\nTarget Slot: \")\n printer.resume_session()\n if len(slot) > 0:\n printer.load_filament(slot)\n\n if key == \"g\":\n printer.pause_session()\n gcode = input(\"\\r\\nGcode: \")\n printer.resume_session()\n if len(gcode) > 0:\n printer.send_gcode(gcode)\n\n if key == \"p\":\n printer.pause_session()\n name = input(\"\\r\\n3MF filename to print: \")\n if len(name) > 0:\n bed = input(\"\\rBed type (1=High Temp Plate, 2=Textured PEI Plate): \")\n if len(bed) > 0 and bed.isnumeric():\n ams = \"[{}]\".format(input(\"\\rAMS mapping ([-1/0], [-1/1], [-1/2], [-1/3]): \"))\n if len(ams) > 0:\n printer.resume_session()\n printer.print_3mf_file(name, bed, ams)\n continue\n printer.resume_session()\n\n if key == \"S\":\n printer.pause_session()\n speed = input(\"\\r\\nNew speed (1=silent 2=standard 3=sport 4=ludicrous): \")\n printer.resume_session()\n if len(speed) > 0 and speed in (\"1\", \"2\", \"3\", \"4\"):\n printer.speed_level = speed\n\n if key == \"!\" and confirm(\"STOP\"):\n printer.stop_printing()\n\n if key == \"~\":\n if printer.state == PrinterState.PAUSED:\n printer.resume_session()\n print(\"\\rsession resumed\\r\")\n else:\n printer.pause_session()\n print(\"\\rsession paused\\r\")\n\nprinter.quit()\n
"},{"location":"license/","title":"License","text":"Text Only
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n Version 2, December 2004\n\n Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>\n\n Everyone is permitted to copy and distribute verbatim or modified\n copies of this license document, and changing it is allowed as long\n as the name is changed.\n\n DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n 0. You just DO WHAT THE FUCK YOU WANT TO.\n
"},{"location":"reference/SUMMARY/","title":"SUMMARY","text":"
- bpm
- bambucommands
- bambuconfig
- bambulogger
- bambuprinter
- bambuspool
- bambutools
- ftpsclient
"},{"location":"reference/bpm/bambucommands/","title":"bambucommands","text":"
bambucommands
contains all the internal command structures that are used by BambuPrinter
to interact with your printer. They are not documented but can be found here.
"},{"location":"reference/bpm/bambuconfig/","title":"bambuconfig","text":""},{"location":"reference/bpm/bambuconfig/#bpm.bambuconfig.BambuConfig","title":"
BambuConfig
","text":"
This is the main configuration class for BambuPrinter
and is how it knows where to connect to a printer, what access code, and serial # to use. BambuConfig
can also be used to change the log level of bambu-printer-manager
's logging engine.
"},{"location":"reference/bpm/bambuconfig/#bpm.bambuconfig.BambuConfig.__init__","title":"
__init__(hostname=None, access_code=None, serial_number=None, mqtt_port=8883, mqtt_client_id='studio_client_id:0c1f', mqtt_username='bblp', external_chamber=False, verbose=False)
","text":"
Sets up all internal storage attributes for BambuConfig
.
"},{"location":"reference/bpm/bambuconfig/#bpm.bambuconfig.BambuConfig.__init__--parameters","title":"Parameters","text":"
- hostname : Optional[str] = None
- access_code : Optional[str] = None
- serial_number : Optional[str] = None
- mqtt_port : Optional[int] = 8883
- mqtt_client_id : Optional[str] = \"studio_client_id:0c1f\"
- mqtt_username : Optional[str] = \"bblp\"
- external_chamber : Optional[bool] = False
- verbose : Optional[bool] = False
external_chamber
can be used to tell BambuPrinter
not to use any of the chamber temperature data received from the printer. This can be useful if you are using an external chamber temperature sensor / heater and want to inject the sensor value and target temperatures into BambuPrinter
directly.
verbose
triggers a global log level change (within the scope of bambu-printer-manager
) based on its value. True
will set a log level of DEBUG
and False
(the default) will set the log level to WARNING
.
"},{"location":"reference/bpm/bambuconfig/#bpm.bambuconfig.BambuConfig.__init__--attributes","title":"Attributes","text":"
- All parameters listed above
- _firmware_version : str - Reported printer firmware version
- _ams_firmware_version : str - Reported AMS firmware version
"},{"location":"reference/bpm/bambulogger/","title":"bambulogger","text":"
This is an internal file used for log file management. No documentation is provided but you can view its source here.
"},{"location":"reference/bpm/bambuprinter/","title":"bambuprinter","text":""},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter","title":"
BambuPrinter
","text":"
BambuPrinter
is the main class within bambu-printer-manager
for interacting with and managing your Bambu Lab 3d printer. It provides an object oriented abstraction layer between your project and the mqtt
and ftps
based mechanisms in place for communicating with your printer.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.__init__","title":"
__init__(config=BambuConfig())
","text":"
Sets up all internal storage attributes for BambuPrinter
and bootstraps the logging engine.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.__init__--parameters","title":"Parameters","text":"
- config : Optional[BambuConfig] = BambuConfig()
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.__init__--attributes","title":"Attributes","text":"
- _internalExcepton:
READ ONLY
Returns the underlying Exception
object if a failure occurred. - _lastMessageTime:
READ ONLY
Epoch timestamp (in seconds) for the last time an update was received from the printer. - _recent_update:
READ ONLY
Indicates that a message from the printer has been recently processed. - _config:
READ/WRITE
bambuconfig.BambuConfig
Configuration object associated with this instance. - _state:
READ/WRITE
bambutools.PrinterState
enum reports on health / status of the connection to the printer. - _client:
READ ONLY
Provides access to the underlying paho.mqtt.client
library. - _on_update:
READ/WRITE
Callback used for pushing updates. Includes a self reference to BambuPrinter
as an argument. - _bed_temp:
READ ONLY
The current printer bed temperature. - _bed_temp_target:
READ/WRITE
The target bed temperature for the printer. - _tool_temp:
READ ONLY
The current printer tool temperature. - _tool_temp_target:
READ/WRITE
The target tool temperature for the printer. - _chamber_temp
READ/WRITE
Not currently integrated but can be used as a stub for external chambers. - _chamber_temp_target
READ/WRITE
Not currently integrated but can be used as a stub for external chambers. - _fan_gear
READ ONLY
Combined fan(s) reporting value. Can be bit shifted for individual speeds. - _heat_break_fan_speed
READ_ONLY
The heatbreak (heater block) fan speed in percent. - _fan_speed
READ ONLY
The parts cooling fan speed in percent. - _fan_speed_target
READ/WRITE
The parts cooling fan target speed in percent. - _light_state
READ/WRITE
Boolean value indicating the state of the work light. - _wifi_signal
READ ONLY
The current Wi-Fi signal strength of the printer. - _speed_level
READ/WRITE
System Print Speed (1=Quiet, 2=Standard, 3=Sport, 4=Ludicrous). - _gcode_state
READ ONLY
State reported for job status (FAILED/RUNNING/PAUSE/IDLE/FINISH). - _gcode_file
READ ONLY
The name of the current or last printed gcode file. - _print_type
READ ONLY
Not entirely sure. Reports \"idle\" when no job is active. - _percent_complete
READ ONLY
Percentage complete for the current active job. - _time_remaining
READ ONLY
The number of estimated minutes remaining for the active job. - _start_time
READ ONLY
The start time of the last (or current) active job in epoch minutes. - _elapsed_time
READ ONLY
The number of elapsed minutes for the last (or current) active job. - _layer_count
READ ONLY
The total number of layers for the current active job. - _current_layer
READ ONLY
The current layer being printed for the current active job. - _current_stage
READ ONLY
Maps to bambutools.parseStage
. - _current_stage_text
READ ONLY
Parsed current_stage
value. - _spools
READ ONLY
A Tuple of all loaded spools. Can contain up to 5 BambuSpool
objects. - _target_spool
READ_ONLY
The spool # the printer is transitioning to (0-3
=AMS, 254
=External, 255
=None). - _active_spool
READ_ONLY
The spool # the printer is using right now (0-3
=AMS, 254
=External, 255
=None). - _spool_state
READ ONLY
Indicates whether the spool is Loaded, Loading, Unloaded, or Unloading. - _ams_status
READ ONLY
Bitwise encoded status of the AMS (not currently used). - _ams_exists
READ ONLY
Boolean value represents the detected presense of an AMS. - _sdcard_contents
READ ONLY
dict
(json) value of all files on the SDCard (requires get_sdcard_contents
be called first). - _sdcard_3mf_files
READ ONLY
dict
(json) value of all .gcode.3mf
files on the SDCard (requires get_sdcard_3mf_files
be called first).
The attributes (where appropriate) are included whenever the class is serialized using its toJson()
method.
When accessing the class level attributes, use their associated properties as the class level attributes are marked private.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.delete_sdcard_file","title":"
delete_sdcard_file(file)
","text":"
Delete the specified file on the printer's SDCard and removes it from the _sdcard_3mf_files
and _sdcard_contents
attributes.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.delete_sdcard_file--parameters","title":"Parameters","text":"
- file : str - the full path filename to be deleted
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.get_sdcard_3mf_files","title":"
get_sdcard_3mf_files()
","text":"
Returns a dict
(json document) of all .gcode.3mf
files on the printer's SD card. The private class level _sdcard_3mf_files
attribute is also populated.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.get_sdcard_3mf_files--usage","title":"Usage","text":"
The return value of this method is very useful for binding to things like a clientside TreeView
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.get_sdcard_contents","title":"
get_sdcard_contents()
","text":"
Returns a dict
(json document) of ALL files on the printer's SD card. The private class level _sdcard_contents
attribute is also populated.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.get_sdcard_contents--usage","title":"Usage","text":"
The return value of this method is very useful for binding to things like a clientside TreeView
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.jsonSerializer","title":"
jsonSerializer(obj)
","text":"
Helper method used by toJson()
to serialize this object.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.load_filament","title":"
load_filament(slot)
","text":"
Requests the printer to load filament into the extruder using the requested spool (slot #)
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.load_filament--parameters","title":"Parameters","text":"
slot : int
0
- AMS Spool #1 1
- AMS Spool #2 2
- AMS Spool #3 3
- AMS Spool #4 254
- External Spool
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.pause_printing","title":"
pause_printing()
","text":"
Pauses the current print job if one is running.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.pause_session","title":"
pause_session()
","text":"
Pauses the BambuPrinter
session is it is active. Under the covers this method unsubscribes from the /report
topic, essentially disabling all printer data refreshes.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.print_3mf_file","title":"
print_3mf_file(name, bed, ams, bedlevel=True, flow=True, timelapse=False)
","text":"
Submits a request to execute the name
.gcode.3mf file on the printer's SDCard.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.print_3mf_file--parameters","title":"Parameters","text":"
- name : str - path and filename to execute minus the
.gcode.3mf
extension - bed : PlateType - the bambutools.PlateType to use
- ams : str - an
AMS Mapping
that specifies which AMS spools to use (external spool is used if blank) - bedlevel : Optional[bool] = True - boolean value indicates whether or not the printer should auto-level the bed
- flow : Optional[bool] = True - boolean value indicates if the printer should perform an extrusion flow calibration
- timelapse : Optional[bool] = False - boolean value indicates if printer should take timelapse photos during the job
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.print_3mf_file--example","title":"Example","text":"
print_3mf_file(\"/jobs/my_project\", \"\")
- Print the my_project.gcode.3mf file in the SDCard /jobs directory using the external spool with bed leveling and extrusion flow calibration enabled and timelapse disabled print_3mf_file(\"/jobs/my_project\", \"[-1,-1,2,-1]\")
- Same as above but use AMS spool #3
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.print_3mf_file--ams-mapping","title":"AMS Mapping","text":"
[0,-1,-1,-1]
- use AMS spool #1 only [-1,1,-1,-1]
- use AMS spool #2 only [0,-1,-1,3]
- use AMS spools #1 and #4 [0,1,2,3]
- use all 4 AMS spools
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.quit","title":"
quit()
","text":"
Shuts down all threads. Your BambuPrinter
instance should probably be considered dead after making this call although you may be able to restart a session with start_session().
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.refresh","title":"
refresh()
","text":"
Triggers a full data refresh from the printer (if it is connected). You should use this method sparingly as resorting to it indicates something is not working properly.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.resume_printing","title":"
resume_printing()
","text":"
Resumes the current print job if one is paused.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.resume_session","title":"
resume_session()
","text":"
Resumes a previously paused session by re-subscribing to the /report topic.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.send_gcode","title":"
send_gcode(gcode)
","text":"
Submit one, or more, gcode commands to the printer. To submit multiple gcode commands, separate them with a newline (\\n) character.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.send_gcode--parameters","title":"Parameters","text":"
gcode : str
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.send_gcode--examples","title":"Examples","text":"
send_gcode(\"G91\\nG0 X0\\nG0 X50\")
- queues 3 gcode commands on the printer for processing send_gcode(\"G28\")
- queues 1 gcode command on the printer for processing
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.start_session","title":"
start_session()
","text":"
Initiates a connection to the Bambu Lab printer and provides a stateful session, with built-in recovery in the event BambuPrinter
becomes disconnected from the machine.
This method is required to be called before any commands or data collection / callbacks can take place with the machine.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.stop_printing","title":"
stop_printing()
","text":"
Requests the printer to stop printing if a job is currently running.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.toJson","title":"
toJson()
","text":"
Returns a dict
(json document) representing this object's private class level attributes that are serializable (most are).
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.unload_filament","title":"
unload_filament()
","text":"
Requests the printer to unload whatever filament / spool may be currently loaded.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.upload_file","title":"
upload_file(src, dest)
","text":"
Uploads the local filesystem file to the printer and returns an updated dict of all files on the printer
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.upload_file--parameters","title":"Parameters","text":"
- src : str - the full path filename on the host to be uploaded to the printer
- dest : str - the full path filename on the printer to upload to
"},{"location":"reference/bpm/bambuspool/","title":"bambuspool","text":""},{"location":"reference/bpm/bambuspool/#bpm.bambuspool.BambuSpool","title":"
BambuSpool
","text":"
This value object is used by BambuPrinter
to enumerate \"spools\" connected to the printer. It is used primarily within BambuPrinter
's _spools
attribute and is returned as part of a Tuple when there are spools active on machine.
"},{"location":"reference/bpm/bambuspool/#bpm.bambuspool.BambuSpool.__init__","title":"
__init__(id, name, type, sub_brands, color)
","text":"
Sets up all internal storage attributes for BambuSpool
.
"},{"location":"reference/bpm/bambuspool/#bpm.bambuspool.BambuSpool.__init__--parameters","title":"Parameters","text":"
- id : int - Spool id can be
0-3
for AMS spools or 254
for the External spool. - name : str - The name of the spool, typically only populated if a Bambu Lab RFID tag is recognized by the AMS.
- type : str - The type of filament in the spool. Will either be read by the RFID tag or set on the Printer display.
- sub_brands : str - For Bambu Lab filaments, specifies the specialization of the filament (Matte, Pro, Tough, etc).
- color : str - will either be a color hex code or a color name if
webcolors
is able to recognize the color code.
"},{"location":"reference/bpm/bambutools/","title":"bambutools","text":"
bambutools' hosts various classes and methods used internally and externally by
bambu-printer-manager`.
"},{"location":"reference/bpm/bambutools/#bpm.bambutools.PlateType","title":"
PlateType
","text":"
Bases: Enum
Used by BambuPrinter.print_3mf_file
to specify which plate should be used when starting a print job.
"},{"location":"reference/bpm/bambutools/#bpm.bambutools.PrinterState","title":"
PrinterState
","text":"
Bases: Enum
This enum is used by bambu-printer-manager
to track the underlying state of the mqtt
connection to the printer.
"},{"location":"reference/bpm/bambutools/#bpm.bambutools.PrinterState--states","title":"States","text":"
NO_STATE
- Startup / initial state indicates no active session. CONNECTED
- Primary state expected when polling BambuPrinter
. PAUSED
- bambu-printer
's session state is paused. QUIT
- When this state is triggered, all session based resources and threads are released.
"},{"location":"reference/bpm/bambutools/#bpm.bambutools.parseAMSStatus","title":"
parseAMSStatus(status)
","text":"
Can be used to parse ams_status
"},{"location":"reference/bpm/bambutools/#bpm.bambutools.parseFan","title":"
parseFan(fan)
","text":"
Mainly an internal method used for parsing Fan data
"},{"location":"reference/bpm/bambutools/#bpm.bambutools.parseStage","title":"
parseStage(stage)
","text":"
Mainly an internal method used for parsing stage data from the printer.
"},{"location":"reference/bpm/ftpsclient/__init__/","title":"ftpsclient","text":""},{"location":"reference/bpm/ftpsclient/ftpsclient/","title":"ftpsclient","text":"
Based on: https://github.com/dgonzo27/py-iot-utils
MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
wrapper for FTPS server interactions
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.ImplicitTLS","title":"
ImplicitTLS
","text":"
Bases: FTP_TLS
ftplib.FTP_TLS sub-class to support implicit SSL FTPS
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.ImplicitTLS.sock","title":"
sock
property
writable
","text":"
return socket
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient","title":"
IoTFTPSClient
","text":"
iot ftps ftpsclient
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.delete_file","title":"
delete_file(path)
","text":"
delete a file from under a path inside the FTPS server
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.disconnect","title":"
disconnect()
","text":"
disconnect the current session from the ftps server
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.download_file","title":"
download_file(source, dest)
","text":"
download a file to a path on the local filesystem
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.instantiate_ftps_session","title":"
instantiate_ftps_session()
","text":"
init ftps_session based on input params
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.list_files","title":"
list_files(path='/')
","text":"
list files under a path inside the FTPS server
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.list_files_ex","title":"
list_files_ex(path)
","text":"
list files under a path inside the FTPS server
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.move_file","title":"
move_file(source, dest)
","text":"
move a file inside the FTPS server to another path inside the FTPS server
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.upload_file","title":"
upload_file(source, dest, callback=None)
","text":"
upload a file to a path inside the FTPS server
"}]}
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":""},{"location":"#bambu-printer-manager","title":"bambu-printer-manager","text":"
bambu-printer-manager
is an all in one pure python wrapper for interacting with and managing Bambu Lab printers.
"},{"location":"#project-composition","title":"Project Composition","text":"Text Only
bpm/ \n bambucommands.py # collection of constants mainly representing Bambu Lab `mqtt` request commands \n bambuconfig.py # contains the `BambuConfig` class used for storing configuration data\n bambulogger.py # internal class used for logging\n bambuprinterlogger.json # internal configuration file for configuration of logging\n bambuprinter.py # the main `bambu-printer-manager` class `BambuPrinter` lives here\n bambuspool.py # contains the `BambuSpool` class used for storing spool data\n bambutools.py # contains a collection of methods used as tools (mostly internal)\n\n ftpsclient/\n _client.py # internal class used for performing `FTPS` operations\n
"},{"location":"#dependencies","title":"Dependencies","text":"Text Only
Python 3.12.1+\n\n* mkdocstrings, webcolors and paho-mqtt install automatically as predefined dependencies\n
"},{"location":"#installation","title":"Installation","text":"Text Only
pip install bambu-printer-manager\n
"},{"location":"#imports","title":"Imports","text":"Python
from bpm.bambuconfig import BambuConfig\nfrom bpm.bambuprinter import BambuPrinter\nfrom bpm.bambutools import PrinterState\nfrom bpm.bambutools import parseStage\nfrom bpm.bambutools import parseFan\n
"},{"location":"#constructors","title":"Constructor(s)","text":"
Python
config = BambuConfig(hostname=\"{host name}\", access_code=\"{access code}\", serial_number=\"{serial #}\")\nprinter = BambuPrinter(config=config)\n
or variations such as: Python
config = BambuConfig()\nprinter = BambuPrinter()\n\nconfig.hostname = \"{host name}\"\nconfig.access_code = \"{access code}\"\nconfig.serial_number = \"{serial #}\"\n\nprinter.config = config\n
or Python
config = BambuConfig()\n\nconfig.hostname = \"{host name}\"\nconfig.access_code = \"{access code}\"\nconfig.serial_number = \"{serial #}\"\n\nprinter = BambuPrinter(config=config)\n
or even Python
printer = BambuPrinter(config=BambuConfig(hostname=\"{host name}\", access_code=\"{access code}\", serial_number=\"{serial #}\"))\n
"},{"location":"#usage-patterns","title":"Usage Patterns","text":"
You can either poll BambuPrinter
periodically for data updates or rely on a callback when new data becomes available. The preferred pattern should be callback based, however both of these approaches will work fine.
Please consider the examples provided here as mere starting points.
"},{"location":"#data-polling-example","title":"Data Polling Example","text":"Python
import time\nimport sys\nimport os\n\nfrom bpm.bambuconfig import BambuConfig\nfrom bpm.bambuprinter import BambuPrinter\nfrom bpm.bambutools import PrinterState\n\nhostname = os.getenv('BAMBU_HOSTNAME')\naccess_code = os.getenv('BAMBU_ACCESS_CODE')\nserial_number = os.getenv('BAMBU_SERIAL_NUMBER')\n\nif not hostname or not access_code or not serial_number:\n print()\n print(\"BAMBU_HOSTNAME, BAMBU_ACCESS_CODE, and BAMBU_SERIAL_NUMBER environment variables must be set\")\n print()\n sys.exit(1)\n\nconfig = BambuConfig(hostname=hostname, access_code=access_code, serial_number=serial_number)\nprinter = BambuPrinter(config=config)\n\nprinter.start_session()\n\nwhile printer.state != PrinterState.CONNECTED:\n print(\"waiting for bpm to connect to printer\", flush=True)\n if printer.internalException:\n print(f\"retrying connection - reason: {printer.internalException if not printer.internalException is None else \"no internal exception\"}\")\n printer.start_session()\n time.sleep(1)\n\nprint(\"\\r\\nrefreshing sdcard 3mf files\", flush=True)\nprinter.get_sdcard_3mf_files()\nprint(\"sdcard 3mf files refreshed\\r\\n\", flush=True)\n\nprint(\"bpm is ready for business\\r\\n\")\n\nwhile True:\n print(f\"tool=[{round(printer.tool_temp, 1)}/{round(printer.tool_temp_target, 1)}] \" +\n f\"bed=[{round(printer.bed_temp, 1)}/{round(printer.bed_temp_target, 1)}] \" + \n f\"fan=[{parseFan(printer.fan_speed)}] print=[{printer.gcode_state}] speed=[{printer.speed_level}] \" +\n f\"light=[{'on' if printer.light_state else 'off'}]\")\n\n print(f\"stg_cur=[{parseStage(printer.current_stage)}] file=[{printer.gcode_file}] \" +\n f\"layers=[{printer.layer_count}] layer=[{printer.current_layer}] \" +\n f\"%=[{printer.percent_complete}] eta=[{printer.time_remaining} min] \" +\n f\"spool=[{printer.active_spool} ({printer.spool_state})]\")\n\n time.sleep(1)\n\n@app.route('/api/printer')\ndef get_printer_info():\n global printer\n # checking both the spools tuple and recent_update \n # states ensure we have a healthy data stream\n if printer.recent_update and printer.spools:\n return printer.toJson()\n else:\n return {\"status\": \"warn\", \"reason\": \"no data to send\"}\n
"},{"location":"#callback-pattern","title":"Callback Pattern","text":"Python
import sys\nimport os\n\nfrom bpm.bambuconfig import BambuConfig\nfrom bpm.bambuprinter import BambuPrinter\n\nhostname = os.getenv('BAMBU_HOSTNAME')\naccess_code = os.getenv('BAMBU_ACCESS_CODE')\nserial_number = os.getenv('BAMBU_SERIAL_NUMBER')\n\nif not hostname or not access_code or not serial_number:\n print()\n print(\"BAMBU_HOSTNAME, BAMBU_ACCESS_CODE, and BAMBU_SERIAL_NUMBER environment variables must be set\")\n print()\n sys.exit(1)\n\nconfig = BambuConfig(hostname=hostname, access_code=access_code, serial_number=serial_number)\nprinter = BambuPrinter(config=config)\n\ndef on_update(printer):\n print(f\"tool=[{round(printer.tool_temp, 1)}/{round(printer.tool_temp_target, 1)}] \" +\n f\"bed=[{round(printer.bed_temp, 1)}/{round(printer.bed_temp_target, 1)}] \" + \n f\"fan=[{parseFan(printer.fan_speed)}] print=[{printer.gcode_state}] speed=[{printer.speed_level}] \" +\n f\"light=[{'on' if printer.light_state else 'off'}]\")\n\n print(f\"stg_cur=[{parseStage(printer.current_stage)}] file=[{printer.gcode_file}] \" +\n f\"layers=[{printer.layer_count}] layer=[{printer.current_layer}] \" +\n f\"%=[{printer.percent_complete}] eta=[{printer.time_remaining} min] \" +\n f\"spool=[{printer.active_spool} ({printer.spool_state})]\")\n\nprinter.on_update = on_update\nprinter.start_session()\n\n# go do other stuff\n
"},{"location":"#cli-w-callback","title":"CLI w/ Callback","text":"Python
import json\nimport traceback\nimport time\nimport sys\nimport os\n\nfrom console.utils import wait_key\n\nfrom bpm.bambuconfig import BambuConfig\nfrom bpm.bambuprinter import BambuPrinter\nfrom bpm.bambutools import PrinterState\nfrom bpm.bambutools import parseStage\nfrom bpm.bambutools import parseFan\n\ngcodeState = \"\"\nfirmware = \"N/A\"\nams_firmware = \"N/A\"\n\ndef on_update(printer):\n global firmware, ams_firmware, gcodeState\n\n if gcodeState != printer.gcode_state:\n gcodeState = printer.gcode_state\n\n if firmware != printer.config.firmware_version:\n firmware = printer.config.firmware_version\n print(f\"\\r\\nprinter firmware: [{firmware}] serial #: [{printer.config.serial_number}]\\r\")\n if ams_firmware != printer.config.ams_firmware_version: \n ams_firmware = printer.config.ams_firmware_version\n print(f\"ams firmware: [{ams_firmware}]\\r\")\n\n print(f\"\\r\\ntool=[{round(printer.tool_temp * 1.0, 1)}/{round(printer.tool_temp_target * 1.0, 1)}] \" +\n f\"bed=[{round(printer.bed_temp * 1.0, 1)}/{round(printer.bed_temp_target * 1.0, 1)}] \" + \n f\"fan=[{parseFan(printer.fan_speed)}] print=[{printer.gcode_state}] speed=[{printer.speed_level}] \" +\n f\"light=[{'on' if printer.light_state else 'off'}]\")\n\n print(f\"\\rstg_cur=[{parseStage(printer.current_stage)}] file=[{printer.gcode_file}] \" +\n f\"layers=[{printer.layer_count}] layer=[{printer.current_layer}] \" +\n f\"%=[{printer.percent_complete}] eta=[{printer.time_remaining} min] \" +\n f\"spool=[{printer.active_spool} ({printer.spool_state})]\\r\")\n\nprint(\"\\r\") \n\nhostname = os.getenv('BAMBU_HOSTNAME')\naccess_code = os.getenv('BAMBU_ACCESS_CODE')\nserial_number = os.getenv('BAMBU_SERIAL_NUMBER')\n\nif not hostname or not access_code or not serial_number:\n print()\n print(\"BAMBU_HOSTNAME, BAMBU_ACCESS_CODE, and BAMBU_SERIAL_NUMBER environment variables must be set\")\n print()\n sys.exit(1)\n\nconfig = BambuConfig(hostname=hostname, access_code=access_code, serial_number=serial_number)\nprinter = BambuPrinter(config=config)\n\nprinter.on_update = on_update\nprinter.start_session()\n\ndef confirm(request):\n printer.pause_session()\n resp = input(f\"Confirm [{request}] (y/n): \")\n printer.resume_session()\n return resp == \"y\" or resp == \"Y\"\n\nspecial = False\n\nwhile True: \n key = wait_key()\n if key == \"\\x1b\": \n special = True\n continue\n if special:\n if key == \"[\": continue\n if key == \"C\": # right arrow\n # client.publish(\"device/{}/request\".format(SERIAL), json.dumps(MOVE_RIGHT))\n print(\"\\rmove right\\r\")\n if key == \"D\": # left arrow\n # client.publish(\"device/{}/request\".format(SERIAL), json.dumps(MOVE_LEFT))\n print(\"\\rmove left\\r\")\n special = False\n continue\n\n if not special and key == \"\\r\":\n print(\"\\r\")\n\n if key == \"?\":\n print(\"\\r\\nCommands:\\r\\n\")\n print(\" ? = this list\\r\")\n print(\" b = bed target temperature\\r\")\n print(\" d = dump printer json object\\r\")\n print(\" g = send gcode command\\r\")\n print(\" f = fan speed (in percent)\\r\")\n print(\" l = toggle light\\r\")\n print(\" p = print 3MF file\\r\")\n print(\" q = quit\\r\")\n print(\" Q = restart without exiting\")\n print(\" r = request full data refresh\\r\")\n print(\" s = change filament / spool\\r\")\n print(\" S = change speed (1 to 4)\\r\")\n print(\" t = tool target temperature\\r\")\n print(\" u = unload filament / spool\\r\")\n print(\" v = toggle verbose reporting\\r\")\n print(\" w = wifi signal strength\\r\")\n print(\" ! = abort job\\r\")\n print(\" ~ = toggle subscription\\n\\r\")\n\n if key == \"d\":\n print(json.dumps(printer, default=printer.jsonSerializer, indent=4, sort_keys=True).replace(\"\\n\", \"\\r\\n\"))\n\n if key == \"w\":\n print(f\"\\r\\nwifi signal strength: [{printer.wifi_signal}]\")\n\n if key == \"v\":\n printer.config.verbose = not printer.config.verbose\n\n if key == \"q\": \n break\n\n if key == \"Q\":\n printer.quit()\n printer.start_session()\n\n if key == \"l\":\n printer.light_state = not printer.light_state\n\n if key == \"t\":\n printer.pause_session()\n temp = input(\"\\r\\nTool0 Target Temperature: \")\n printer.resume_session()\n if temp.isnumeric() and confirm(\"CHANGE_TOOL_TEMP\"):\n printer.tool_temp_target = temp\n\n if key == \"b\":\n printer.pause_session()\n temp = input(\"\\r\\nBed Target Temperature: \")\n printer.resume_session()\n if temp.isnumeric():\n printer.bed_temp_target = temp\n\n if key == \"f\":\n printer.pause_session()\n speed = input(\"\\r\\nFan Speed (%): \")\n printer.resume_session()\n if speed.isnumeric():\n printer.fan_speed = speed\n\n if key == \"r\":\n printer.refresh()\n\n if key == \"u\" and confirm(\"UNLOAD_FILAMENT\"):\n printer.unload_filament()\n\n if key == \"s\":\n printer.pause_session()\n slot = input(\"\\r\\nTarget Slot: \")\n printer.resume_session()\n if len(slot) > 0:\n printer.load_filament(slot)\n\n if key == \"g\":\n printer.pause_session()\n gcode = input(\"\\r\\nGcode: \")\n printer.resume_session()\n if len(gcode) > 0:\n printer.send_gcode(gcode)\n\n if key == \"p\":\n printer.pause_session()\n name = input(\"\\r\\n3MF filename to print: \")\n if len(name) > 0:\n bed = input(\"\\rBed type (1=High Temp Plate, 2=Textured PEI Plate): \")\n if len(bed) > 0 and bed.isnumeric():\n ams = \"[{}]\".format(input(\"\\rAMS mapping ([-1/0], [-1/1], [-1/2], [-1/3]): \"))\n if len(ams) > 0:\n printer.resume_session()\n printer.print_3mf_file(name, bed, ams)\n continue\n printer.resume_session()\n\n if key == \"S\":\n printer.pause_session()\n speed = input(\"\\r\\nNew speed (1=silent 2=standard 3=sport 4=ludicrous): \")\n printer.resume_session()\n if len(speed) > 0 and speed in (\"1\", \"2\", \"3\", \"4\"):\n printer.speed_level = speed\n\n if key == \"!\" and confirm(\"STOP\"):\n printer.stop_printing()\n\n if key == \"~\":\n if printer.state == PrinterState.PAUSED:\n printer.resume_session()\n print(\"\\rsession resumed\\r\")\n else:\n printer.pause_session()\n print(\"\\rsession paused\\r\")\n\nprinter.quit()\n
"},{"location":"license/","title":"License","text":"Text Only
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n Version 2, December 2004\n\n Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>\n\n Everyone is permitted to copy and distribute verbatim or modified\n copies of this license document, and changing it is allowed as long\n as the name is changed.\n\n DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n 0. You just DO WHAT THE FUCK YOU WANT TO.\n
"},{"location":"reference/SUMMARY/","title":"SUMMARY","text":"
- bpm
- bambucommands
- bambuconfig
- bambulogger
- bambuprinter
- bambuspool
- bambutools
- ftpsclient
"},{"location":"reference/bpm/bambucommands/","title":"bambucommands","text":"
bambucommands
contains all the internal command structures that are used by BambuPrinter
to interact with your printer. They are not documented but can be found here.
"},{"location":"reference/bpm/bambuconfig/","title":"bambuconfig","text":""},{"location":"reference/bpm/bambuconfig/#bpm.bambuconfig.BambuConfig","title":"
BambuConfig
","text":"
This is the main configuration class for BambuPrinter
and is how it knows where to connect to a printer, what access code, and serial # to use. BambuConfig
can also be used to change the log level of bambu-printer-manager
's logging engine.
"},{"location":"reference/bpm/bambuconfig/#bpm.bambuconfig.BambuConfig.__init__","title":"
__init__(hostname=None, access_code=None, serial_number=None, mqtt_port=8883, mqtt_client_id='studio_client_id:0c1f', mqtt_username='bblp', external_chamber=False, verbose=False)
","text":"
Sets up all internal storage attributes for BambuConfig
.
"},{"location":"reference/bpm/bambuconfig/#bpm.bambuconfig.BambuConfig.__init__--parameters","title":"Parameters","text":"
- hostname : Optional[str] = None
- access_code : Optional[str] = None
- serial_number : Optional[str] = None
- mqtt_port : Optional[int] = 8883
- mqtt_client_id : Optional[str] = \"studio_client_id:0c1f\"
- mqtt_username : Optional[str] = \"bblp\"
- external_chamber : Optional[bool] = False
- verbose : Optional[bool] = False
external_chamber
can be used to tell BambuPrinter
not to use any of the chamber temperature data received from the printer. This can be useful if you are using an external chamber temperature sensor / heater and want to inject the sensor value and target temperatures into BambuPrinter
directly.
verbose
triggers a global log level change (within the scope of bambu-printer-manager
) based on its value. True
will set a log level of DEBUG
and False
(the default) will set the log level to WARNING
.
"},{"location":"reference/bpm/bambuconfig/#bpm.bambuconfig.BambuConfig.__init__--attributes","title":"Attributes","text":"
- All parameters listed above
- _firmware_version : str - Reported printer firmware version
- _ams_firmware_version : str - Reported AMS firmware version
"},{"location":"reference/bpm/bambulogger/","title":"bambulogger","text":"
This is an internal file used for log file management. No documentation is provided but you can view its source here.
"},{"location":"reference/bpm/bambuprinter/","title":"bambuprinter","text":""},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter","title":"
BambuPrinter
","text":"
BambuPrinter
is the main class within bambu-printer-manager
for interacting with and managing your Bambu Lab 3d printer. It provides an object oriented abstraction layer between your project and the mqtt
and ftps
based mechanisms in place for communicating with your printer.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.__init__","title":"
__init__(config=BambuConfig())
","text":"
Sets up all internal storage attributes for BambuPrinter
and bootstraps the logging engine.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.__init__--parameters","title":"Parameters","text":"
- config : Optional[BambuConfig] = BambuConfig()
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.__init__--attributes","title":"Attributes","text":"
- _internalExcepton:
READ ONLY
Returns the underlying Exception
object if a failure occurred. - _lastMessageTime:
READ ONLY
Epoch timestamp (in seconds) for the last time an update was received from the printer. - _recent_update:
READ ONLY
Indicates that a message from the printer has been recently processed. - _config:
READ/WRITE
bambuconfig.BambuConfig
Configuration object associated with this instance. - _state:
READ/WRITE
bambutools.PrinterState
enum reports on health / status of the connection to the printer. - _client:
READ ONLY
Provides access to the underlying paho.mqtt.client
library. - _on_update:
READ/WRITE
Callback used for pushing updates. Includes a self reference to BambuPrinter
as an argument. - _bed_temp:
READ ONLY
The current printer bed temperature. - _bed_temp_target:
READ/WRITE
The target bed temperature for the printer. - _tool_temp:
READ ONLY
The current printer tool temperature. - _tool_temp_target:
READ/WRITE
The target tool temperature for the printer. - _chamber_temp
READ/WRITE
Not currently integrated but can be used as a stub for external chambers. - _chamber_temp_target
READ/WRITE
Not currently integrated but can be used as a stub for external chambers. - _fan_gear
READ ONLY
Combined fan(s) reporting value. Can be bit shifted for individual speeds. - _heat_break_fan_speed
READ_ONLY
The heatbreak (heater block) fan speed in percent. - _fan_speed
READ ONLY
The parts cooling fan speed in percent. - _fan_speed_target
READ/WRITE
The parts cooling fan target speed in percent. - _light_state
READ/WRITE
Boolean value indicating the state of the work light. - _wifi_signal
READ ONLY
The current Wi-Fi signal strength of the printer. - _speed_level
READ/WRITE
System Print Speed (1=Quiet, 2=Standard, 3=Sport, 4=Ludicrous). - _gcode_state
READ ONLY
State reported for job status (FAILED/RUNNING/PAUSE/IDLE/FINISH). - _gcode_file
READ ONLY
The name of the current or last printed gcode file. - _print_type
READ ONLY
Not entirely sure. Reports \"idle\" when no job is active. - _percent_complete
READ ONLY
Percentage complete for the current active job. - _time_remaining
READ ONLY
The number of estimated minutes remaining for the active job. - _start_time
READ ONLY
The start time of the last (or current) active job in epoch minutes. - _elapsed_time
READ ONLY
The number of elapsed minutes for the last (or current) active job. - _layer_count
READ ONLY
The total number of layers for the current active job. - _current_layer
READ ONLY
The current layer being printed for the current active job. - _current_stage
READ ONLY
Maps to bambutools.parseStage
. - _current_stage_text
READ ONLY
Parsed current_stage
value. - _spools
READ ONLY
A Tuple of all loaded spools. Can contain up to 5 BambuSpool
objects. - _target_spool
READ_ONLY
The spool # the printer is transitioning to (0-3
=AMS, 254
=External, 255
=None). - _active_spool
READ_ONLY
The spool # the printer is using right now (0-3
=AMS, 254
=External, 255
=None). - _spool_state
READ ONLY
Indicates whether the spool is Loaded, Loading, Unloaded, or Unloading. - _ams_status
READ ONLY
Bitwise encoded status of the AMS (not currently used). - _ams_exists
READ ONLY
Boolean value represents the detected presense of an AMS. - _sdcard_contents
READ ONLY
dict
(json) value of all files on the SDCard (requires get_sdcard_contents
be called first). - _sdcard_3mf_files
READ ONLY
dict
(json) value of all .gcode.3mf
files on the SDCard (requires get_sdcard_3mf_files
be called first).
The attributes (where appropriate) are included whenever the class is serialized using its toJson()
method.
When accessing the class level attributes, use their associated properties as the class level attributes are marked private.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.delete_sdcard_file","title":"
delete_sdcard_file(file)
","text":"
Delete the specified file on the printer's SDCard and returns an updated dict of all files on the printer
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.delete_sdcard_file--parameters","title":"Parameters","text":"
- file : str - the full path filename to be deleted
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.download_sdcard_file","title":"
download_sdcard_file(src, dest)
","text":"
Downloads a file from the printer
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.download_sdcard_file--parameters","title":"Parameters","text":"
- src : str - the full path filename on the printer to be downloaded to the host
- dest : str - the full path filename on the host to store the downloaded file
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.get_sdcard_3mf_files","title":"
get_sdcard_3mf_files()
","text":"
Returns a dict
(json document) of all .gcode.3mf
files on the printer's SD card. The private class level _sdcard_3mf_files
attribute is also populated.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.get_sdcard_3mf_files--usage","title":"Usage","text":"
The return value of this method is very useful for binding to things like a clientside TreeView
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.get_sdcard_contents","title":"
get_sdcard_contents()
","text":"
Returns a dict
(json document) of ALL files on the printer's SD card. The private class level _sdcard_contents
attribute is also populated.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.get_sdcard_contents--usage","title":"Usage","text":"
The return value of this method is very useful for binding to things like a clientside TreeView
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.jsonSerializer","title":"
jsonSerializer(obj)
","text":"
Helper method used by toJson()
to serialize this object.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.load_filament","title":"
load_filament(slot)
","text":"
Requests the printer to load filament into the extruder using the requested spool (slot #)
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.load_filament--parameters","title":"Parameters","text":"
slot : int
0
- AMS Spool #1 1
- AMS Spool #2 2
- AMS Spool #3 3
- AMS Spool #4 254
- External Spool
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.make_sdcard_directory","title":"
make_sdcard_directory(dir)
","text":"
Creates the specified directory on the printer and returns an updated dict of all files on the printer
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.make_sdcard_directory--parameters","title":"Parameters","text":"
- dir : str - the full path directory name to be created
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.pause_printing","title":"
pause_printing()
","text":"
Pauses the current print job if one is running.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.pause_session","title":"
pause_session()
","text":"
Pauses the BambuPrinter
session is it is active. Under the covers this method unsubscribes from the /report
topic, essentially disabling all printer data refreshes.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.print_3mf_file","title":"
print_3mf_file(name, bed, ams, bedlevel=True, flow=True, timelapse=False)
","text":"
Submits a request to execute the name
.gcode.3mf file on the printer's SDCard.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.print_3mf_file--parameters","title":"Parameters","text":"
- name : str - path and filename to execute minus the
.gcode.3mf
extension - bed : PlateType - the bambutools.PlateType to use
- ams : str - an
AMS Mapping
that specifies which AMS spools to use (external spool is used if blank) - bedlevel : Optional[bool] = True - boolean value indicates whether or not the printer should auto-level the bed
- flow : Optional[bool] = True - boolean value indicates if the printer should perform an extrusion flow calibration
- timelapse : Optional[bool] = False - boolean value indicates if printer should take timelapse photos during the job
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.print_3mf_file--example","title":"Example","text":"
print_3mf_file(\"/jobs/my_project\", \"\")
- Print the my_project.gcode.3mf file in the SDCard /jobs directory using the external spool with bed leveling and extrusion flow calibration enabled and timelapse disabled print_3mf_file(\"/jobs/my_project\", \"[-1,-1,2,-1]\")
- Same as above but use AMS spool #3
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.print_3mf_file--ams-mapping","title":"AMS Mapping","text":"
[0,-1,-1,-1]
- use AMS spool #1 only [-1,1,-1,-1]
- use AMS spool #2 only [0,-1,-1,3]
- use AMS spools #1 and #4 [0,1,2,3]
- use all 4 AMS spools
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.quit","title":"
quit()
","text":"
Shuts down all threads. Your BambuPrinter
instance should probably be considered dead after making this call although you may be able to restart a session with start_session().
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.refresh","title":"
refresh()
","text":"
Triggers a full data refresh from the printer (if it is connected). You should use this method sparingly as resorting to it indicates something is not working properly.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.rename_sdcard_file","title":"
rename_sdcard_file(src, dest)
","text":"
Renames the specified file on the printer and returns an updated dict of all files on the printer
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.rename_sdcard_file--parameters","title":"Parameters","text":"
- src : str - the full path name to be renamed
- dest : str - the full path name to be renamed to
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.resume_printing","title":"
resume_printing()
","text":"
Resumes the current print job if one is paused.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.resume_session","title":"
resume_session()
","text":"
Resumes a previously paused session by re-subscribing to the /report topic.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.send_gcode","title":"
send_gcode(gcode)
","text":"
Submit one, or more, gcode commands to the printer. To submit multiple gcode commands, separate them with a newline (\\n) character.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.send_gcode--parameters","title":"Parameters","text":"
gcode : str
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.send_gcode--examples","title":"Examples","text":"
send_gcode(\"G91\\nG0 X0\\nG0 X50\")
- queues 3 gcode commands on the printer for processing send_gcode(\"G28\")
- queues 1 gcode command on the printer for processing
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.start_session","title":"
start_session()
","text":"
Initiates a connection to the Bambu Lab printer and provides a stateful session, with built-in recovery in the event BambuPrinter
becomes disconnected from the machine.
This method is required to be called before any commands or data collection / callbacks can take place with the machine.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.stop_printing","title":"
stop_printing()
","text":"
Requests the printer to stop printing if a job is currently running.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.toJson","title":"
toJson()
","text":"
Returns a dict
(json document) representing this object's private class level attributes that are serializable (most are).
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.unload_filament","title":"
unload_filament()
","text":"
Requests the printer to unload whatever filament / spool may be currently loaded.
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.upload_sdcard_file","title":"
upload_sdcard_file(src, dest)
","text":"
Uploads the local filesystem file to the printer and returns an updated dict of all files on the printer
"},{"location":"reference/bpm/bambuprinter/#bpm.bambuprinter.BambuPrinter.upload_sdcard_file--parameters","title":"Parameters","text":"
- src : str - the full path filename on the host to be uploaded to the printer
- dest : str - the full path filename on the printer to upload to
"},{"location":"reference/bpm/bambuspool/","title":"bambuspool","text":""},{"location":"reference/bpm/bambuspool/#bpm.bambuspool.BambuSpool","title":"
BambuSpool
","text":"
This value object is used by BambuPrinter
to enumerate \"spools\" connected to the printer. It is used primarily within BambuPrinter
's _spools
attribute and is returned as part of a Tuple when there are spools active on machine.
"},{"location":"reference/bpm/bambuspool/#bpm.bambuspool.BambuSpool.__init__","title":"
__init__(id, name, type, sub_brands, color)
","text":"
Sets up all internal storage attributes for BambuSpool
.
"},{"location":"reference/bpm/bambuspool/#bpm.bambuspool.BambuSpool.__init__--parameters","title":"Parameters","text":"
- id : int - Spool id can be
0-3
for AMS spools or 254
for the External spool. - name : str - The name of the spool, typically only populated if a Bambu Lab RFID tag is recognized by the AMS.
- type : str - The type of filament in the spool. Will either be read by the RFID tag or set on the Printer display.
- sub_brands : str - For Bambu Lab filaments, specifies the specialization of the filament (Matte, Pro, Tough, etc).
- color : str - will either be a color hex code or a color name if
webcolors
is able to recognize the color code.
"},{"location":"reference/bpm/bambutools/","title":"bambutools","text":"
bambutools' hosts various classes and methods used internally and externally by
bambu-printer-manager`.
"},{"location":"reference/bpm/bambutools/#bpm.bambutools.PlateType","title":"
PlateType
","text":"
Bases: Enum
Used by BambuPrinter.print_3mf_file
to specify which plate should be used when starting a print job.
"},{"location":"reference/bpm/bambutools/#bpm.bambutools.PrinterState","title":"
PrinterState
","text":"
Bases: Enum
This enum is used by bambu-printer-manager
to track the underlying state of the mqtt
connection to the printer.
"},{"location":"reference/bpm/bambutools/#bpm.bambutools.PrinterState--states","title":"States","text":"
NO_STATE
- Startup / initial state indicates no active session. CONNECTED
- Primary state expected when polling BambuPrinter
. PAUSED
- bambu-printer
's session state is paused. QUIT
- When this state is triggered, all session based resources and threads are released.
"},{"location":"reference/bpm/bambutools/#bpm.bambutools.parseAMSStatus","title":"
parseAMSStatus(status)
","text":"
Can be used to parse ams_status
"},{"location":"reference/bpm/bambutools/#bpm.bambutools.parseFan","title":"
parseFan(fan)
","text":"
Mainly an internal method used for parsing Fan data
"},{"location":"reference/bpm/bambutools/#bpm.bambutools.parseStage","title":"
parseStage(stage)
","text":"
Mainly an internal method used for parsing stage data from the printer.
"},{"location":"reference/bpm/ftpsclient/__init__/","title":"ftpsclient","text":""},{"location":"reference/bpm/ftpsclient/ftpsclient/","title":"ftpsclient","text":"
Based on: https://github.com/dgonzo27/py-iot-utils
MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
wrapper for FTPS server interactions
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.ImplicitTLS","title":"
ImplicitTLS
","text":"
Bases: FTP_TLS
ftplib.FTP_TLS sub-class to support implicit SSL FTPS
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.ImplicitTLS.sock","title":"
sock
property
writable
","text":"
return socket
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient","title":"
IoTFTPSClient
","text":"
iot ftps ftpsclient
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.delete_file","title":"
delete_file(path)
","text":"
delete a file from under a path inside the FTPS server
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.disconnect","title":"
disconnect()
","text":"
disconnect the current session from the ftps server
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.download_file","title":"
download_file(source, dest)
","text":"
download a file to a path on the local filesystem
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.instantiate_ftps_session","title":"
instantiate_ftps_session()
","text":"
init ftps_session based on input params
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.list_files","title":"
list_files(path='/')
","text":"
list files under a path inside the FTPS server
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.list_files_ex","title":"
list_files_ex(path)
","text":"
list files under a path inside the FTPS server
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.move_file","title":"
move_file(source, dest)
","text":"
move a file inside the FTPS server to another path inside the FTPS server
"},{"location":"reference/bpm/ftpsclient/ftpsclient/#bpm.ftpsclient.ftpsclient.IoTFTPSClient.upload_file","title":"
upload_file(source, dest, callback=None)
","text":"
upload a file to a path inside the FTPS server
"}]}
\ No newline at end of file
diff --git a/sitemap.xml b/sitemap.xml
index b372b1d..d1bf0ca 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -2,57 +2,57 @@
https://github.com/synman/bambu-printer-manager/
- 2024-02-08
+ 2024-02-09
daily
https://github.com/synman/bambu-printer-manager/license/
- 2024-02-08
+ 2024-02-09
daily
https://github.com/synman/bambu-printer-manager/reference/SUMMARY/
- 2024-02-08
+ 2024-02-09
daily
https://github.com/synman/bambu-printer-manager/reference/bpm/bambucommands/
- 2024-02-08
+ 2024-02-09
daily
https://github.com/synman/bambu-printer-manager/reference/bpm/bambuconfig/
- 2024-02-08
+ 2024-02-09
daily
https://github.com/synman/bambu-printer-manager/reference/bpm/bambulogger/
- 2024-02-08
+ 2024-02-09
daily
https://github.com/synman/bambu-printer-manager/reference/bpm/bambuprinter/
- 2024-02-08
+ 2024-02-09
daily
https://github.com/synman/bambu-printer-manager/reference/bpm/bambuspool/
- 2024-02-08
+ 2024-02-09
daily
https://github.com/synman/bambu-printer-manager/reference/bpm/bambutools/
- 2024-02-08
+ 2024-02-09
daily
https://github.com/synman/bambu-printer-manager/reference/bpm/ftpsclient/__init__/
- 2024-02-08
+ 2024-02-09
daily
https://github.com/synman/bambu-printer-manager/reference/bpm/ftpsclient/ftpsclient/
- 2024-02-08
+ 2024-02-09
daily
\ No newline at end of file
diff --git a/sitemap.xml.gz b/sitemap.xml.gz
index 960ceb4..c4f55a7 100644
Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ