Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
d0fd4a5434 | |||
3c218a548d | |||
03af51608d | |||
c00285b1b2 |
3
.github/FUNDING.yml
vendored
Normal file
3
.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
github: [jneilliii]
|
||||||
|
patreon: jneilliii
|
||||||
|
custom: ['https://www.paypal.me/jneilliii']
|
26
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
26
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Please make sure to check other issues, including closed ones, prior to submitting a bug report. Debug logs are required and any bug report submitted without them will be ignored and closed.
|
||||||
|
title: "[BUG]: "
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the Bug**
|
||||||
|
<!-- A clear and concise description of what the bug is. -->
|
||||||
|
|
||||||
|
**Expected Behavior**
|
||||||
|
<!-- A clear and concise description of what you expected to happen. -->
|
||||||
|
|
||||||
|
**Debug Logs**
|
||||||
|
<!-- If logs are not included in your bug report it will be closed. Enable debug logging for octoprint.plugins.bambu_printer in OctoPrint's logging section of settings and recreate the issue then attach octoprint.log and plugin_bambu_printer_serial.log to this bug report. -->
|
||||||
|
|
||||||
|
**Screenshots**
|
||||||
|
<!-- Please share any relevant screenshots related to the issue. -->
|
||||||
|
|
||||||
|
**Printer and Plugin Setting Details**
|
||||||
|
|
||||||
|
* Printer model?
|
||||||
|
* Is your printer connected to Bambu Cloud?
|
||||||
|
* Is the plugin configured for local access only?
|
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Create a feature request for an improvement or change you'd like implemented.
|
||||||
|
title: "[FR]: "
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Is your feature request related to a problem? Please describe.**
|
||||||
|
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
|
||||||
|
|
||||||
|
**Describe the solution you'd like**
|
||||||
|
<!-- A clear and concise description of what you want to happen. -->
|
||||||
|
|
||||||
|
**Describe alternatives you've considered**
|
||||||
|
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
<!-- Add any other context or screenshots about the feature request here. -->
|
16
.github/stale.yml
vendored
Normal file
16
.github/stale.yml
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# Number of days of inactivity before an issue becomes stale
|
||||||
|
daysUntilStale: 14
|
||||||
|
# Number of days of inactivity before a stale issue is closed
|
||||||
|
daysUntilClose: 7
|
||||||
|
# Issues with these labels will never be considered stale
|
||||||
|
exemptLabels:
|
||||||
|
- enhancement
|
||||||
|
- bug
|
||||||
|
# Label to use when marking an issue as stale
|
||||||
|
staleLabel: stale
|
||||||
|
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||||
|
markComment: >
|
||||||
|
This issue has been automatically marked as stale because it has not had
|
||||||
|
activity in 14 days. It will be closed if no further activity occurs in 7 days.
|
||||||
|
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||||
|
closeComment: false
|
27
.github/workflows/stale.yml
vendored
Normal file
27
.github/workflows/stale.yml
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
name: Mark Stale Issues
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 0 * * *"
|
||||||
|
permissions:
|
||||||
|
actions: write
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@v9
|
||||||
|
with:
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
stale-issue-message: 'This issue has been automatically marked as stale because it has not had activity in 14 days. It will be closed if no further activity occurs in 7 days'
|
||||||
|
days-before-stale: 14
|
||||||
|
days-before-close: 7
|
||||||
|
stale-issue-label: 'stale'
|
||||||
|
days-before-issue-stale: 14
|
||||||
|
days-before-pr-stale: -1
|
||||||
|
days-before-issue-close: 7
|
||||||
|
days-before-pr-close: -1
|
||||||
|
exempt-issue-labels: 'bug,enhancement'
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: gautamkrishnar/keepalive-workflow@v2
|
||||||
|
with:
|
||||||
|
use_api: true
|
@ -193,7 +193,7 @@ class BambuVirtualPrinter:
|
|||||||
or print_job_state == "FAILED"
|
or print_job_state == "FAILED"
|
||||||
):
|
):
|
||||||
self.change_state(self._state_idle)
|
self.change_state(self._state_idle)
|
||||||
elif print_job_state == "RUNNING":
|
elif print_job_state == "RUNNING" or print_job_state == "PREPARE":
|
||||||
self.change_state(self._state_printing)
|
self.change_state(self._state_printing)
|
||||||
elif print_job_state == "PAUSE":
|
elif print_job_state == "PAUSE":
|
||||||
self.change_state(self._state_paused)
|
self.change_state(self._state_paused)
|
||||||
@ -474,19 +474,51 @@ class BambuVirtualPrinter:
|
|||||||
gcode_command = commands.SEND_GCODE_TEMPLATE
|
gcode_command = commands.SEND_GCODE_TEMPLATE
|
||||||
percent = int(data.replace("M220 S", ""))
|
percent = int(data.replace("M220 S", ""))
|
||||||
|
|
||||||
if percent is None or percent < 1 or percent > 166:
|
def speed_fraction(speed_percent):
|
||||||
return True
|
return math.floor(10000 / speed_percent) / 100
|
||||||
|
|
||||||
speed_fraction = 100 / percent
|
def acceleration_magnitude(speed_percent):
|
||||||
acceleration = math.exp((speed_fraction - 1.0191) / -0.814)
|
return math.exp((speed_fraction(speed_percent) - 1.0191) / -0.8139)
|
||||||
feed_rate = (
|
|
||||||
2.1645 * (acceleration**3)
|
def feed_rate(speed_percent):
|
||||||
- 5.3247 * (acceleration**2)
|
return 6.426e-5 * speed_percent ** 2 - 2.484e-3 * speed_percent + 0.654
|
||||||
+ 4.342 * acceleration
|
|
||||||
- 0.181
|
def linear_interpolate(x, x_points, y_points):
|
||||||
)
|
if x <= x_points[0]: return y_points[0]
|
||||||
speed_level = 1.539 * (acceleration**2) - 0.7032 * acceleration + 4.0834
|
if x >= x_points[-1]: return y_points[-1]
|
||||||
speed_command = f"M204.2 K${acceleration:.2f} \nM220 K${feed_rate:.2f} \nM73.2 R${speed_fraction:.2f} \nM1002 set_gcode_claim_speed_level ${speed_level:.0f}\n"
|
for i in range(len(x_points) - 1):
|
||||||
|
if x_points[i] <= x < x_points[i + 1]:
|
||||||
|
t = (x - x_points[i]) / (x_points[i + 1] - x_points[i])
|
||||||
|
return y_points[i] * (1 - t) + y_points[i + 1] * t
|
||||||
|
|
||||||
|
def scale_to_data_points(func, data_points):
|
||||||
|
data_points.sort(key=lambda x: x[0])
|
||||||
|
speeds, values = zip(*data_points)
|
||||||
|
scaling_factors = [v / func(s) for s, v in zip(speeds, values)]
|
||||||
|
return lambda x: func(x) * linear_interpolate(x, speeds, scaling_factors)
|
||||||
|
|
||||||
|
def speed_adjust(speed_percentage):
|
||||||
|
if not 30 <= speed_percentage <= 180:
|
||||||
|
speed_percentage = 100
|
||||||
|
|
||||||
|
bambu_params = {
|
||||||
|
"speed": [50, 100, 124, 166],
|
||||||
|
"acceleration": [0.3, 1.0, 1.4, 1.6],
|
||||||
|
"feed_rate": [0.7, 1.0, 1.4, 2.0]
|
||||||
|
}
|
||||||
|
|
||||||
|
acc_mag_scaled = scale_to_data_points(acceleration_magnitude,
|
||||||
|
list(zip(bambu_params["speed"], bambu_params["acceleration"])))
|
||||||
|
feed_rate_scaled = scale_to_data_points(feed_rate,
|
||||||
|
list(zip(bambu_params["speed"], bambu_params["feed_rate"])))
|
||||||
|
|
||||||
|
speed_frac = speed_fraction(speed_percentage)
|
||||||
|
acc_mag = acc_mag_scaled(speed_percentage)
|
||||||
|
feed = feed_rate_scaled(speed_percentage)
|
||||||
|
# speed_level = 1.539 * (acc_mag**2) - 0.7032 * acc_mag + 4.0834
|
||||||
|
return f"M204.2 K{acc_mag:.2f}\nM220 K{feed:.2f}\nM73.2 R{speed_frac:.2f}\n" # M1002 set_gcode_claim_speed_level ${speed_level:.0f}\n
|
||||||
|
|
||||||
|
speed_command = speed_adjust(percent)
|
||||||
|
|
||||||
gcode_command["print"]["param"] = speed_command
|
gcode_command["print"]["param"] = speed_command
|
||||||
if self.bambu_client.publish(gcode_command):
|
if self.bambu_client.publish(gcode_command):
|
||||||
@ -548,8 +580,9 @@ class BambuVirtualPrinter:
|
|||||||
|
|
||||||
def report_print_job_status(self):
|
def report_print_job_status(self):
|
||||||
if self.current_print_job is not None:
|
if self.current_print_job is not None:
|
||||||
|
file_position = 1 if self.current_print_job.file_position == 0 else self.current_print_job.file_position
|
||||||
self.sendIO(
|
self.sendIO(
|
||||||
f"SD printing byte {self.current_print_job.file_position}"
|
f"SD printing byte {file_position}"
|
||||||
f"/{self.current_print_job.file_info.size}"
|
f"/{self.current_print_job.file_info.size}"
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
2
setup.py
2
setup.py
@ -14,7 +14,7 @@ plugin_package = "octoprint_bambu_printer"
|
|||||||
plugin_name = "OctoPrint-BambuPrinter"
|
plugin_name = "OctoPrint-BambuPrinter"
|
||||||
|
|
||||||
# The plugin's version. Can be overwritten within OctoPrint's internal data via __plugin_version__ in the plugin module
|
# The plugin's version. Can be overwritten within OctoPrint's internal data via __plugin_version__ in the plugin module
|
||||||
plugin_version = "0.1.4"
|
plugin_version = "0.1.7"
|
||||||
|
|
||||||
# The plugin's description. Can be overwritten within OctoPrint's internal data via __plugin_description__ in the plugin
|
# The plugin's description. Can be overwritten within OctoPrint's internal data via __plugin_description__ in the plugin
|
||||||
# module
|
# module
|
||||||
|
Reference in New Issue
Block a user