Initial repository
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[submodule "dirs/klipper"]
|
||||||
|
path = dirs/klipper
|
||||||
|
url = https://github.com/Klipper3d/klipper
|
202
LICENSE
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
13
README.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# HacDC Klipper Config Tool and Templates
|
||||||
|
|
||||||
|
Huge WIP FYI
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
* Install prerequisites
|
||||||
|
* Select Klipper config and copy to ./dirs/klipper
|
||||||
|
* Compile Klipper in ./dirs/klipper
|
||||||
|
* Install Klipper onto USB device (TUI picker, save device path for later)
|
||||||
|
* Edit config files accordingly
|
||||||
|
* Recursive Copy dirs into `~/<printername>/`
|
||||||
|
* Install System services
|
1
dirs/klipper
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 6ce6fbbce07605010c0d4fa8eaa0ebcde01e53db
|
1
dirs/mainsail-config
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit e57810d51b5c634aadaca4db923bfcba269ae4b3
|
1
dirs/mainsail/.version
Normal file
@ -0,0 +1 @@
|
|||||||
|
v2.9.1
|
1
dirs/mainsail/assets/Codemirror-d2702935.js
Normal file
1
dirs/mainsail/assets/Heightmap-0ea0fb44.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
.rename-profile[data-v-37c48ba8]{text-transform:none}.currentMeshName[data-v-37c48ba8]{cursor:pointer;color:var(--v-primary-base)}.currentMeshName .v-icon[data-v-37c48ba8]{opacity:0}.currentMeshName:hover .v-icon[data-v-37c48ba8]{opacity:1}.rowProfile .colActions[data-v-37c48ba8]{display:flex;flex-direction:row;align-items:center;justify-content:flex-end}.rowProfile .colName[data-v-37c48ba8],.rowProfile .colVariance[data-v-37c48ba8]{line-height:48px}.rowProfile .colName span.current[data-v-37c48ba8]{font-weight:700;color:var(--v-primary-base)}.rowProfile .colActions .v-btn[data-v-37c48ba8]{height:48px;width:48px}
|
1
dirs/mainsail/assets/Heightmap-7418030f.js
Normal file
1
dirs/mainsail/assets/Hlsstreamer-886899b4.js
Normal file
1
dirs/mainsail/assets/Hlsstreamer-f9f189cf.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
.webcamImage[data-v-16b345da]{width:100%}
|
1
dirs/mainsail/assets/Ipstreamer-dd27a9e8.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
import{m as p,B as _,G as u,P as m,j as v,n as f}from"./index-97b4652c.js";import"./vuetify-52f40ce5.js";import"./overlayscrollbars-44d87bcf.js";import"./echarts-9bc570b0.js";var b=Object.defineProperty,h=Object.getOwnPropertyDescriptor,o=(t,e,r,s)=>{for(var i=s>1?void 0:s?h(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(i=(s?l(e,r,i):l(i))||i);return s&&i&&b(e,r,i),i};let a=class extends p(_,u){constructor(){super(...arguments),this.isVisible=!0}get url(){var e;return this.convertUrl((e=this.camSettings)==null?void 0:e.stream_url,this.printerUrl)}get webcamStyle(){var e,r,s;return{transform:this.generateTransform((e=this.camSettings.flip_horizontal)!=null?e:!1,(r=this.camSettings.flip_vertical)!=null?r:!1,(s=this.camSettings.rotation)!=null?s:0)}}visibilityChanged(e){this.isVisible=e}};o([m({required:!0})],a.prototype,"camSettings",2);o([m({default:null})],a.prototype,"printerUrl",2);a=o([v],a);var g=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("video",{directives:[{name:"observe-visibility",rawName:"v-observe-visibility",value:t.visibilityChanged,expression:"visibilityChanged"}],staticClass:"webcamImage",style:t.webcamStyle,attrs:{src:t.url,autoplay:""}})},y=[];const c={};var d=f(a,g,y,!1,x,"bd59f4b0",null,null);function x(t){for(let e in c)this[e]=c[e]}const j=function(){return d.exports}();export{j as default};
|
1
dirs/mainsail/assets/Ipstreamer-f951d43b.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
.webcamImage[data-v-bd59f4b0]{width:100%}
|
1
dirs/mainsail/assets/JMuxerStream-7e36ed89.js
Normal file
1
dirs/mainsail/assets/JMuxerStream-baf633f9.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
.webcamImage[data-v-03ec43aa]{width:100%}._webcam_jmuxer_output[data-v-03ec43aa]{aspect-ratio:1.5}
|
8
dirs/mainsail/assets/JanusStreamer-1b43ec62.js
Normal file
1
dirs/mainsail/assets/JanusStreamer-3206d816.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
.webcamStream[data-v-5fed87a3]{width:100%}._webcam_webrtc_output[data-v-5fed87a3]{aspect-ratio:1.5}video[data-v-5fed87a3]{width:100%}
|
1
dirs/mainsail/assets/Mjpegstreamer-60c9a3d3.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
import{m as y,B as w,G as C,P as d,W as R,j as P,n as x}from"./index-97b4652c.js";import"./vuetify-52f40ce5.js";import"./overlayscrollbars-44d87bcf.js";import"./echarts-9bc570b0.js";var F=Object.defineProperty,V=Object.getOwnPropertyDescriptor,m=(s,t,e,a)=>{for(var i=a>1?void 0:a?V(t,e):t,r=s.length-1,n;r>=0;r--)(n=s[r])&&(i=(a?n(t,e,i):n(i))||i);return a&&i&&F(t,e,i),i};const j="content-length",L="image/jpeg";let h=class extends y(w,C){constructor(){super(...arguments),this.currentFPS=0,this.streamState=!1,this.aspectRatio=null,this.timerFPS=null,this.timerRestart=null,this.stream=null,this.controller=null,this.isVisibleViewport=!1,this.isVisibleDocument=!0}get url(){var t;return this.convertUrl((t=this.camSettings)==null?void 0:t.stream_url,this.printerUrl)}get webcamStyle(){var e,a,i;const t={transform:this.generateTransform((e=this.camSettings.flip_horizontal)!=null?e:!1,(a=this.camSettings.flip_vertical)!=null?a:!1,(i=this.camSettings.rotation)!=null?i:0),aspectRatio:1.7777777777777777,maxHeight:window.innerHeight-155+"px",maxWidth:"auto"};return this.aspectRatio&&(t.aspectRatio=this.aspectRatio,t.maxWidth=(window.innerHeight-155)*this.aspectRatio+"px"),t}get fpsOutput(){return this.currentFPS<10?"0"+this.currentFPS.toString():this.currentFPS}get showFpsCounter(){var t,e;return this.showFps?!((e=(t=this.camSettings.extra_data)==null?void 0:t.hideFps)!=null&&e):!1}startStream(){if(this.streamState)return;this.streamState=!0;const t=new Uint8Array(2);t[0]=255,t[1]=216;function e(i){let r=-1;return i.split("\n").forEach(n=>{const o=n.split(":");o[0].toLowerCase()===j&&(r=o[1])}),r}this.controller=new AbortController;const{signal:a}=this.controller;fetch(this.url,{signal:a,mode:"cors"}).then(i=>i.body).then(i=>{const r=i==null?void 0:i.getReader();let n="",o=-1,p=null,f=0;const u=this.$refs.image;let g=0;this.timerFPS=setInterval(()=>{this.currentFPS=g,g=0},1e3),this.timerRestart=setInterval(()=>{this.restartStream()},6e4),this.stream=new ReadableStream({start(S){const b=()=>r==null?void 0:r.read().then(({done:_,value:l})=>{if(_){S.close();return}if(S.enqueue(l),l)for(let c=0;c<l.length;c++)l[c]===t[0]&&l[c+1]===t[1]&&(o=e(n),p=new Uint8Array(new ArrayBuffer(o))),o<=0?n+=String.fromCharCode(l[c]):f<o?p[f++]=l[c]:(u&&(u.src=URL.createObjectURL(new Blob([p],{type:L})),u.onload=()=>URL.revokeObjectURL(u.src)),g++,o=0,f=0,n="");return b()});return b()}})})}mounted(){document.addEventListener("visibilitychange",this.documentVisibilityChanged),this.startStream()}beforeDestroy(){document.removeEventListener("visibilitychange",this.documentVisibilityChanged),this.stopStream()}stopStream(){var t,e;this.streamState=!1,URL.revokeObjectURL(this.url),this.timerFPS&&clearTimeout(this.timerFPS),this.timerRestart&&clearTimeout(this.timerRestart),(t=this.controller)==null||t.abort(),(e=this.stream)==null||e.cancel()}async restartStream(){this.stopStream(),this.startStream()}camSettingsChanged(){this.aspectRatio=null,this.restartStream()}documentVisibilityChanged(){const t=document.visibilityState;this.isVisibleDocument=t==="visible",this.isVisibleDocument||this.stopStream(),this.visibilityChanged()}viewportVisibilityChanged(t){this.isVisibleViewport=t,this.visibilityChanged()}visibilityChanged(){if(this.isVisibleViewport&&this.isVisibleDocument){this.startStream();return}this.stopStream()}onload(){this.aspectRatio!==null||!this.$refs.image||(this.aspectRatio=this.$refs.image.naturalWidth/this.$refs.image.naturalHeight)}};m([d({required:!0})],h.prototype,"camSettings",2);m([d({default:null})],h.prototype,"printerUrl",2);m([d({default:!0})],h.prototype,"showFps",2);m([R("camSettings",{immediate:!0,deep:!0})],h.prototype,"camSettingsChanged",1);h=m([P],h);var O=function(){var s=this,t=s.$createElement,e=s._self._c||t;return e("div",{staticClass:"d-flex justify-center",staticStyle:{position:"relative"}},[e("img",{directives:[{name:"observe-visibility",rawName:"v-observe-visibility",value:s.viewportVisibilityChanged,expression:"viewportVisibilityChanged"}],ref:"image",staticClass:"webcamImage",style:s.webcamStyle,on:{load:s.onload}}),s.showFpsCounter?e("span",{staticClass:"webcamFpsOutput"},[s._v(s._s(s.$t("Panels.WebcamPanel.FPS"))+": "+s._s(s.fpsOutput))]):s._e()])},U=[];const v={};var E=x(h,O,U,!1,D,"d03b4202",null,null);function D(s){for(let t in v)this[t]=v[t]}const H=function(){return E.exports}();export{H as default};
|
1
dirs/mainsail/assets/Mjpegstreamer-c7e864b6.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
.webcamImage[data-v-d03b4202]{width:100%;background:lightgray}.webcamFpsOutput[data-v-d03b4202]{display:inline-block;position:absolute;bottom:0;right:0;background:rgba(0,0,0,.8);padding:3px 10px;border-top-left-radius:5px}
|
1
dirs/mainsail/assets/MjpegstreamerAdaptive-2e7c6467.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
import{m as u,B as p,G as d,P as m,j as _,n as g}from"./index-97b4652c.js";import{p as f}from"./vuetify-52f40ce5.js";import"./overlayscrollbars-44d87bcf.js";import"./echarts-9bc570b0.js";var v=Object.defineProperty,w=Object.getOwnPropertyDescriptor,h=(r,t,e,i)=>{for(var s=i>1?void 0:i?w(t,e):t,a=r.length-1,n;a>=0;a--)(n=r[a])&&(s=(i?n(t,e,s):n(s))||s);return i&&s&&v(t,e,s),s};let o=class extends u(p,d){constructor(){super(...arguments),this.refresh=Math.ceil(Math.random()*Math.pow(10,12)),this.isVisible=!0,this.isVisibleDocument=!0,this.isVisibleViewport=!1,this.isLoaded=!0,this.timer=void 0,this.request_start_time=performance.now(),this.start_time=performance.now(),this.time=0,this.request_time=0,this.time_smoothing=.6,this.request_time_smoothing=.1,this.currentFPS=0,this.aspectRatio=null}get webcamStyle(){var e,i,s;const t={transform:this.generateTransform((e=this.camSettings.flip_horizontal)!=null?e:!1,(i=this.camSettings.flip_vertical)!=null?i:!1,(s=this.camSettings.rotation)!=null?s:0),aspectRatio:1.7777777777777777,maxHeight:window.innerHeight-155+"px",maxWidth:"auto"};return this.aspectRatio&&(t.aspectRatio=this.aspectRatio,t.maxWidth=(window.innerHeight-155)*this.aspectRatio+"px"),t}get fpsOutput(){return this.currentFPS<10?"0"+this.currentFPS.toString():this.currentFPS}get showFpsCounter(){var t,e;return this.showFps?!((e=(t=this.camSettings.extra_data)==null?void 0:t.hideFps)!=null&&e):!1}get rotate(){var t;return[90,270].includes((t=this.camSettings.rotation)!=null?t:0)}get url(){var t;return this.convertUrl((t=this.camSettings)==null?void 0:t.snapshot_url,this.printerUrl)}refreshFrame(){this.isVisible&&(this.refresh=new Date().getTime(),this.setFrame())}async setFrame(){let t=new URL(this.url);t.searchParams.append("bypassCache",this.refresh.toString()),this.request_start_time=performance.now(),this.currentFPS=this.time>0?Math.round(1e3/this.time):0;let e=this.$refs.image;if(e){const i=e.getContext("2d"),s=await this.loadImage(t.toString());if(this.aspectRatio=s.naturalWidth/s.naturalHeight,this.rotate&&(this.aspectRatio=1/this.aspectRatio),e.width=e.clientWidth,e.height=e.clientWidth/this.aspectRatio,this.rotate){const a=e.height/s.width,n=e.width/2,c=e.height/2;i.translate(n,c),i.rotate(this.camSettings.rotation*Math.PI/180),await(i==null?void 0:i.drawImage(s,-s.width/2*a,-s.height/2*a,s.width*a,s.height*a)),i.rotate(-(this.camSettings.rotation*Math.PI/180)),i.translate(-n,-c)}else await(i==null?void 0:i.drawImage(s,0,0,s.width,s.height,0,0,e.width,e.height));this.isLoaded=!0}this.$nextTick(()=>{this.onLoad()})}onLoad(){this.isLoaded=!0;const t=this.camSettings.target_fps||10,e=performance.now(),i=e-this.start_time;this.time=this.time*this.time_smoothing+i*(1-this.time_smoothing),this.start_time=e;const s=1e3/t,a=performance.now()-this.request_start_time;this.request_time=this.request_time*this.request_time_smoothing+a*(1-this.request_time_smoothing);const n=Math.max(0,s-this.request_time);this.$nextTick(()=>{this.timer=setTimeout(this.refreshFrame,n)})}loadImage(t){return new Promise(e=>{let i=new Image;i.onload=()=>e(i),i.onerror=()=>setTimeout(this.refreshFrame,1e3),i.src=t})}mounted(){document.addEventListener("visibilitychange",this.documentVisibilityChanged),this.refreshFrame()}beforeDestroy(){document.removeEventListener("visibilitychange",this.documentVisibilityChanged)}documentVisibilityChanged(){const t=document.visibilityState;this.isVisibleDocument=t==="visible",this.isVisibleDocument||this.stopStream(),this.visibilityChanged()}viewportVisibilityChanged(t){this.isVisibleViewport=t,this.visibilityChanged()}visibilityChanged(){if(this.isVisibleViewport&&this.isVisibleDocument){this.startStream();return}this.stopStream()}startStream(){this.isVisible||(this.isVisible=!0,this.refreshFrame())}stopStream(){this.isVisible=!1,clearTimeout(this.timer),this.timer=void 0}};h([m({required:!0})],o.prototype,"camSettings",2);h([m({default:null})],o.prototype,"printerUrl",2);h([m({default:!0})],o.prototype,"showFps",2);o=h([_],o);var b=function(){var r=this,t=r.$createElement,e=r._self._c||t;return e("div",{staticClass:"d-flex justify-center",staticStyle:{position:"relative"}},[r.isLoaded?r._e():e("div",{staticClass:"text-center py-5"},[e(f,{attrs:{indeterminate:"",color:"primary"}})],1),e("canvas",{directives:[{name:"observe-visibility",rawName:"v-observe-visibility",value:r.viewportVisibilityChanged,expression:"viewportVisibilityChanged"}],ref:"image",class:"webcamImage "+(r.isLoaded?"":"hiddenWebcam"),style:r.webcamStyle,attrs:{width:"600",height:"400"}}),r.isLoaded&&r.showFpsCounter?e("span",{staticClass:"webcamFpsOutput"},[r._v(" "+r._s(r.$t("Panels.WebcamPanel.FPS"))+": "+r._s(r.fpsOutput)+" ")]):r._e()])},y=[];const l={};var S=g(o,b,y,!1,F,"72cc9e9c",null,null);function F(r){for(let t in l)this[t]=l[t]}const q=function(){return S.exports}();export{q as default};
|
1
dirs/mainsail/assets/MjpegstreamerAdaptive-33a0e59f.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
.webcamImage[data-v-72cc9e9c]{width:100%}.webcamFpsOutput[data-v-72cc9e9c]{display:inline-block;position:absolute;bottom:0;right:0;background:rgba(0,0,0,.8);padding:3px 10px;border-top-left-radius:5px}
|
1
dirs/mainsail/assets/Uv4lMjpeg-486d8a68.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
.webcamImage[data-v-3177fd01]{width:100%;background:lightgray}
|
1
dirs/mainsail/assets/Uv4lMjpeg-d2ae09fd.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
import{m as h,B as p,G as u,P as m,W as v,j as g,n as b}from"./index-97b4652c.js";import"./vuetify-52f40ce5.js";import"./overlayscrollbars-44d87bcf.js";import"./echarts-9bc570b0.js";var f=Object.defineProperty,d=Object.getOwnPropertyDescriptor,n=(e,t,s,a)=>{for(var i=a>1?void 0:a?d(t,s):t,l=e.length-1,o;l>=0;l--)(o=e[l])&&(i=(a?o(t,s,i):o(i))||i);return a&&i&&f(t,s,i),i};let r=class extends h(p,u){constructor(){super(...arguments),this.aspectRatio=null,this.isVisible=!1,this.isVisibleViewport=!1,this.isVisibleDocument=!0}get url(){var t;return this.convertUrl((t=this.camSettings)==null?void 0:t.stream_url,this.printerUrl)}get webcamStyle(){var s,a,i;const t={transform:this.generateTransform((s=this.camSettings.flip_horizontal)!=null?s:!1,(a=this.camSettings.flip_vertical)!=null?a:!1,(i=this.camSettings.rotation)!=null?i:0),aspectRatio:1.7777777777777777,maxHeight:window.innerHeight-155+"px",maxWidth:"auto"};return this.aspectRatio&&(t.aspectRatio=this.aspectRatio,t.maxWidth=(window.innerHeight-155)*this.aspectRatio+"px"),t}mounted(){document.addEventListener("visibilitychange",this.documentVisibilityChanged)}beforeDestroy(){document.removeEventListener("visibilitychange",this.documentVisibilityChanged),this.stopStream()}startStream(){this.isVisible||this.$refs.webcamUv4lMjpegImage&&this.$refs.webcamUv4lMjpegImage.setAttribute("src",this.url)}stopStream(){this.$refs.webcamUv4lMjpegImage&&(this.$refs.webcamUv4lMjpegImage.removeAttribute("src"),URL.revokeObjectURL(this.url))}documentVisibilityChanged(){const t=document.visibilityState;this.isVisibleDocument=t==="visible",this.isVisibleDocument||this.stopStream(),this.visibilityChanged()}viewportVisibilityChanged(t){this.isVisibleViewport=t,this.visibilityChanged()}visibilityChanged(){if(this.isVisibleViewport&&this.isVisibleDocument){this.startStream();return}this.stopStream()}onload(){this.aspectRatio===null&&this.$refs.webcamUv4lMjpegImage&&(this.aspectRatio=this.$refs.webcamUv4lMjpegImage.naturalWidth/this.$refs.webcamUv4lMjpegImage.naturalHeight)}async urlChanged(){await this.stopStream(),await this.startStream()}};n([m({required:!0})],r.prototype,"camSettings",2);n([m({default:null})],r.prototype,"printerUrl",2);n([v("url")],r.prototype,"urlChanged",1);r=n([g],r);var _=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"d-flex justify-center"},[s("img",{directives:[{name:"observe-visibility",rawName:"v-observe-visibility",value:e.viewportVisibilityChanged,expression:"viewportVisibilityChanged"}],ref:"webcamUv4lMjpegImage",staticClass:"webcamImage",style:e.webcamStyle,on:{load:e.onload}})])},y=[];const c={};var w=b(r,_,y,!1,j,"3177fd01",null,null);function j(e){for(let t in c)this[t]=c[t]}const M=function(){return w.exports}();export{M as default};
|
1
dirs/mainsail/assets/Viewer-3e5b07dd.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
[data-v-7831183a] .cm-activeLine{background-color:#333!important}.codeview[data-v-7831183a]{height:100%;overflow:auto}.viewer{width:100%;height:calc(var(--app-height) - 240px);border:1px solid #3f3f3f}.withScrubber .viewer{height:calc(var(--app-height) - 300px)}@media (min-width: 600px) and (max-width: 959px){.viewer{height:calc(var(--app-height) - 295px)}.withScrubber .viewer{height:calc(var(--app-height) - 360px)}}@media (max-width: 599px){.viewer,.withScrubber .viewer{height:calc(var(--app-height) - 340px)}}.scrubber[data-v-0de79293]{position:relative;left:0;right:0;bottom:5px}
|
1
dirs/mainsail/assets/Viewer-8db94310.js
Normal file
1
dirs/mainsail/assets/WebrtcCameraStreamer-1fb7b328.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
import{m as u,B as h,G as d,P as p,W as _,R as f,j as v,n as S}from"./index-97b4652c.js";import{l as y,m as g,p as w}from"./vuetify-52f40ce5.js";import"./overlayscrollbars-44d87bcf.js";import"./echarts-9bc570b0.js";var T=Object.defineProperty,b=Object.getOwnPropertyDescriptor,c=(r,e,i,t)=>{for(var s=t>1?void 0:t?b(e,i):e,o=r.length-1,n;o>=0;o--)(n=r[o])&&(s=(t?n(e,i,s):n(s))||s);return t&&s&&T(e,i,s),s};let a=class extends u(h,d){constructor(){super(...arguments),this.pc=null,this.useStun=!1,this.remote_pc_id=null,this.aspectRatio=null,this.status="connecting",this.restartTimer=null}get url(){var e;return this.convertUrl((e=this.camSettings)==null?void 0:e.stream_url,this.printerUrl)}get webcamStyle(){var i,t,s;const e={transform:this.generateTransform((i=this.camSettings.flip_horizontal)!=null?i:!1,(t=this.camSettings.flip_vertical)!=null?t:!1,(s=this.camSettings.rotation)!=null?s:0),aspectRatio:1.7777777777777777};return this.aspectRatio&&(e.aspectRatio=this.aspectRatio),e}startStream(){const e=navigator.userAgent.toLowerCase().indexOf("firefox")>-1,i=this.useStun?[{urls:["stun:stun.l.google.com:19302"]}]:null;fetch(this.url,{body:JSON.stringify({type:"request",iceServers:i}),headers:{"Content-Type":"application/json"},method:"POST"}).then(t=>t.json()).then(t=>{var o;let s={sdpSemantics:"unified-plan"};return t.iceServers&&(s.iceServers=t.iceServers),this.pc=new RTCPeerConnection(s),this.pc.addTransceiver("video",{direction:"recvonly"}),this.pc.addEventListener("track",n=>{n.track.kind=="video"&&this.$refs.stream&&(this.$refs.stream.srcObject=n.streams[0])},!1),this.pc.addEventListener("connectionstatechange",()=>{var n,l;this.status=((l=(n=this.pc)==null?void 0:n.connectionState)!=null?l:"").toString(),this.restartTimer&&window.clearTimeout(this.restartTimer),["failed","disconnected"].includes(this.status)&&(this.restartTimer=window.setTimeout(()=>{this.restartStream()},5e3))}),this.pc.addEventListener("icecandidate",n=>{if(n.candidate)return fetch(this.url,{body:JSON.stringify({type:"remote_candidate",id:this.remote_pc_id,candidates:[n.candidate]}),headers:{"Content-Type":"application/json"},method:"POST"}).catch(function(l){window.console.error(l)})}),this.remote_pc_id=t.id,(o=this.pc)==null?void 0:o.setRemoteDescription(t)}).then(()=>{var t;return(t=this.pc)==null?void 0:t.createAnswer()}).then(t=>{var s;return(s=this.pc)==null?void 0:s.setLocalDescription(t)}).then(()=>{var s;const t=(s=this.pc)==null?void 0:s.localDescription;return fetch(this.url,{body:JSON.stringify({type:t==null?void 0:t.type,id:this.remote_pc_id,sdp:t==null?void 0:t.sdp}),headers:{"Content-Type":"application/json"},method:"POST"})}).then(t=>(e&&(this.status="connected"),t.json())).catch(t=>{window.console.error(t),this.restartTimer&&window.clearTimeout(this.restartTimer),this.restartTimer=window.setTimeout(()=>{this.restartStream()},5e3)})}mounted(){this.startStream()}beforeDestroy(){var e;(e=this.pc)==null||e.close(),this.restartTimer&&window.clearTimeout(this.restartTimer)}restartStream(){var e;(e=this.pc)==null||e.close(),setTimeout(async()=>{this.startStream()},500)}async changedUrl(){this.restartStream()}};c([p({required:!0})],a.prototype,"camSettings",2);c([p({default:null})],a.prototype,"printerUrl",2);c([f()],a.prototype,"stream",2);c([_("url")],a.prototype,"changedUrl",1);a=c([v],a);var C=function(){var r=this,e=r.$createElement,i=r._self._c||e;return i("div",[i("video",{directives:[{name:"show",rawName:"v-show",value:r.status==="connected",expression:"status === 'connected'"}],ref:"stream",staticClass:"webcamStream",style:r.webcamStyle,attrs:{autoplay:"",muted:"",playsinline:""},domProps:{muted:!0}}),r.status!=="connected"?i(y,[i(g,{staticClass:"_webcam_webrtc_output text-center d-flex flex-column justify-center align-center"},[r.status==="connecting"?i(w,{staticClass:"mb-3",attrs:{indeterminate:"",color:"primary"}}):r._e(),i("span",{staticClass:"mt-3"},[r._v(r._s(r.status))])],1)],1):r._e()],1)},x=[];const m={};var O=S(a,C,x,!1,j,"a89db62a",null,null);function j(r){for(let e in m)this[e]=m[e]}const U=function(){return O.exports}();export{U as default};
|
1
dirs/mainsail/assets/WebrtcCameraStreamer-7e0e004c.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
.webcamStream[data-v-a89db62a]{width:100%}._webcam_webrtc_output[data-v-a89db62a]{aspect-ratio:1.5}video[data-v-a89db62a]{width:100%}
|
1
dirs/mainsail/assets/WebrtcGo2rtc-4ca7d296.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
.webcamImage[data-v-9a120824]{width:100%}._webcam_webrtc_output[data-v-9a120824]{aspect-ratio:1.5}video[data-v-9a120824]{width:100%}
|
1
dirs/mainsail/assets/WebrtcGo2rtc-ddbe76a4.js
Normal file
1
dirs/mainsail/assets/WebrtcMediaMTX-089db774.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
.webcamImage[data-v-781d4888]{width:100%}._webcam_webrtc_output[data-v-781d4888]{aspect-ratio:1.5}video[data-v-781d4888]{width:100%}
|
1
dirs/mainsail/assets/WebrtcMediaMTX-d62a8a77.js
Normal file
1
dirs/mainsail/assets/codemirror-0a1db0c7.js
Normal file
1
dirs/mainsail/assets/cz-285b76fb.js
Normal file
1
dirs/mainsail/assets/da-6721996d.js
Normal file
1
dirs/mainsail/assets/de-1c7e5778.js
Normal file
22
dirs/mainsail/assets/echarts-9bc570b0.js
Normal file
1
dirs/mainsail/assets/es-8a2d24bf.js
Normal file
1
dirs/mainsail/assets/fr-ab90ab77.js
Normal file
1
dirs/mainsail/assets/hu-a56cb065.js
Normal file
1
dirs/mainsail/assets/index-57af1108.css
Normal file
50
dirs/mainsail/assets/index-97b4652c.js
Normal file
1
dirs/mainsail/assets/it-85215c0c.js
Normal file
1
dirs/mainsail/assets/ja-a20a0276.js
Normal file
1
dirs/mainsail/assets/ko-0b8d811b.js
Normal file
1
dirs/mainsail/assets/nl-d64c7e44.js
Normal file
12
dirs/mainsail/assets/overlayscrollbars-44d87bcf.js
Normal file
12
dirs/mainsail/assets/overlayscrollbars-a16bc3d3.css
Normal file
1
dirs/mainsail/assets/pl-d65989d8.js
Normal file
1
dirs/mainsail/assets/pt-880f8881.js
Normal file
1
dirs/mainsail/assets/ru-5f4aea5d.js
Normal file
1
dirs/mainsail/assets/se-23883ae1.js
Normal file
1
dirs/mainsail/assets/tr-9777749c.js
Normal file
1
dirs/mainsail/assets/uk-644a4aa7.js
Normal file
1
dirs/mainsail/assets/virtual_pwa-register-990ff180.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
import{F as m}from"./index-97b4652c.js";import"./vuetify-52f40ce5.js";import"./overlayscrollbars-44d87bcf.js";import"./echarts-9bc570b0.js";function g(c={}){const{immediate:d=!1,onNeedRefresh:w,onOfflineReady:i,onRegistered:r,onRegisteredSW:a,onRegisterError:s}=c;let t,o;const l=async(n=!0)=>{await o};async function p(){if("serviceWorker"in navigator){const{Workbox:n}=await m(()=>import("./workbox-window.prod.es5-ed7f7eb3.js"),[]);t=new n("/sw.js",{scope:"/",type:"classic"}),t.addEventListener("activated",e=>{(e.isUpdate||e.isExternal)&&window.location.reload()}),t.addEventListener("installed",e=>{e.isUpdate||i==null||i()}),t.register({immediate:d}).then(e=>{a?a("/sw.js",e):r==null||r(e)}).catch(e=>{s==null||s(e)})}}return o=p(),l}export{g as registerSW};
|
5
dirs/mainsail/assets/vuetify-52f40ce5.js
Normal file
5
dirs/mainsail/assets/vuetify-950d1cb0.css
Normal file
1
dirs/mainsail/assets/workbox-window.prod.es5-ed7f7eb3.js
Normal file
1
dirs/mainsail/assets/zh-fcce6e53.js
Normal file
1
dirs/mainsail/assets/zh_TW-7176daef.js
Normal file
8
dirs/mainsail/config.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"defaultLocale": "en",
|
||||||
|
"defaultTheme": "dark",
|
||||||
|
"hostname": null,
|
||||||
|
"port": null,
|
||||||
|
"instancesDB": "moonraker-taz",
|
||||||
|
"instances": []
|
||||||
|
}
|
BIN
dirs/mainsail/fonts/roboto-black.woff2
Normal file
BIN
dirs/mainsail/fonts/roboto-bold.woff2
Normal file
BIN
dirs/mainsail/fonts/roboto-light.woff2
Normal file
BIN
dirs/mainsail/fonts/roboto-medium.woff2
Normal file
BIN
dirs/mainsail/fonts/roboto-regular.woff2
Normal file
BIN
dirs/mainsail/fonts/roboto-thin.woff2
Normal file
BIN
dirs/mainsail/fonts/robotoMono-regular.woff
Normal file
BIN
dirs/mainsail/img/icons/apple-touch-icon-180x180.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
dirs/mainsail/img/icons/favicon-16x16.png
Normal file
After Width: | Height: | Size: 332 B |
BIN
dirs/mainsail/img/icons/favicon-32x32.png
Normal file
After Width: | Height: | Size: 618 B |
BIN
dirs/mainsail/img/icons/icon-192-maskable.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
BIN
dirs/mainsail/img/icons/icon-512-maskable.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
dirs/mainsail/img/icons/mstile-150x150.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
1
dirs/mainsail/img/icons/safari-pinned-tab.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg height="599pt" preserveAspectRatio="xMidYMid meet" viewBox="0 0 599 599" width="599pt" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(.1 0 0 -.1 0 599)"><path d="m3359 5488c-41-62-76-117-79-123-14-28-145-220-152-223-4-2-8-8-8-12 0-7-399-618-470-720-6-8-57-87-115-175-57-88-108-164-112-170-20-25-63-96-63-104 0-5-7-12-16-15-8-3-13-10-10-15 4-5 2-11-2-13-5-1-38-48-74-103-35-55-131-201-213-325-81-124-179-272-217-330-82-124-54-82-243-368-85-129-188-286-229-350-42-65-80-122-85-128-5-7-30-43-54-80-24-38-136-208-248-379-113-170-250-380-306-465s-105-159-110-165c-5-5-20-28-33-50s-27-42-30-45c-4-3-9-9-11-15-2-5-40-64-83-130-139-211-382-580-388-590-5-8 197-11 658-12h664l22 36c12 20 25 38 28 41s30 43 60 90c29 47 127 197 217 333s163 252 163 256c0 5 4 11 8 13 8 3 56 76 289 433 39 60 77 116 83 123 6 6 8 12 5 12s2 8 11 18c14 16 247 369 324 492 19 30 37 57 40 60 13 12 100 151 100 159 0 5 3 11 8 13 4 2 55 75 112 163 58 88 108 162 113 163 4 2 7 8 7 13s50 84 110 175c61 91 110 170 110 175s5 9 10 9c6 0 10 5 10 10 0 6 5 16 11 23s62 91 125 187c62 96 118 182 124 190s31 47 55 85c50 78 44 68 124 187 33 48 61 91 63 95 1 4 38 61 81 126l78 118-25 67c-84 219-216 665-261 882-2 8-8 35-14 60-15 69-22 102-27 135-2 16-7 39-11 50-3 11-8 31-10 45-10 67-14 88-22 128-5 23-11 45-13 48-3 2-38-46-79-108z"/><path d="m4020 3309c-58-88-112-170-120-183s-31-47-51-77-52-79-72-109-54-81-77-114c-22-32-40-60-40-62 0-8-45-69-52-72-5-2-8-9-8-16s-9-21-20-31-20-21-20-25-61-98-135-210-135-205-135-206c0-2-29-45-65-96s-65-98-65-104c0-7-7-15-16-18-9-4-14-9-11-12 3-4 1-11-4-18-6-6-55-78-110-161-54-82-103-157-109-165s-50-76-99-150c-50-74-95-140-100-147-6-7-16-24-23-38-6-14-15-25-20-25-4 0-8-4-8-9 0-6-90-145-200-310s-200-305-200-310-4-11-8-13c-8-3-162-234-162-243 0-3 299-5 665-5 625 0 666 1 672 17 4 10 84 135 178 278s211 322 260 398c50 76 96 145 103 152 6 8 12 16 12 19 0 6 294 456 309 473 6 7 11 14 11 17 0 8 63 100 73 107 5 3 8 8 6 10-1 2 38 65 87 139s91 140 94 145c3 6 49 77 103 158l98 148-20 32c-11 18-28 41-38 52s-66 92-124 180c-114 173-119 181-206 328-60 102-76 130-132 232-18 33-38 66-43 73-6 6-7 12-3 12 5 0 1 8-7 18-8 9-22 34-32 54-9 20-20 39-24 42-4 2-54-67-112-155z"/><path d="m5119 1822c-35-53-67-101-71-107-5-5-27-39-51-75-23-36-45-66-49-68-5-2-8-8-8-13 0-8-106-175-120-189s-160-241-160-249c0-5-4-11-9-13-5-1-27-32-50-68-22-36-44-70-48-75-5-6-64-96-133-200-69-105-128-191-132-193-5-2-8-10-8-18s-4-14-10-14c-5 0-10-4-10-10 0-5-20-39-45-76-25-36-45-67-45-69 0-3 299-5 665-5h665l12 25c6 14 14 25 18 25s12 11 18 25c7 14 17 31 22 38 17 19 210 317 210 322 0 3 5 11 11 18 21 24 179 269 179 278 0 5 5 9 10 9 22 0 7 18-67 80-193 162-512 474-690 673l-41 47z"/></g></svg>
|
After Width: | Height: | Size: 2.6 KiB |
1
dirs/mainsail/img/klipper.svg
Normal file
After Width: | Height: | Size: 5.1 KiB |
1
dirs/mainsail/img/logo.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg enable-background="new 0 0 599.38 523.11" viewBox="0 0 599.38 523.11" xmlns="http://www.w3.org/2000/svg"><g fill="#d41216"><path d="m382.29 142.98-249.31 379.84-132.98-.14 344.3-522.68c7.88 49.06 20.9 97.68 37.99 142.98"/><path d="m413.28 213.54-204.78 309.38 132.94.19 135.03-206.33c-23.78-32.49-44.94-67.01-63.19-103.24z"/><path d="m599.38 447.69-49.25 75.42-133.13-.29 101.6-153.67c24.88 28.2 51.89 54.46 80.78 78.54z"/></g></svg>
|
After Width: | Height: | Size: 438 B |
206
dirs/mainsail/img/sidebar-background-light.svg
Normal file
@ -0,0 +1,206 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
enable-background="new 0 0 421.2 842.2"
|
||||||
|
version="1.1"
|
||||||
|
viewBox="0 0 421.2 842.2"
|
||||||
|
id="svg77"
|
||||||
|
sodipodi:docname="sidebar-background-light.svg"
|
||||||
|
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs81" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview79"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="0.92139633"
|
||||||
|
inkscape:cx="20.078222"
|
||||||
|
inkscape:cy="421.10001"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="974"
|
||||||
|
inkscape:window-x="-11"
|
||||||
|
inkscape:window-y="-11"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg77" />
|
||||||
|
<linearGradient
|
||||||
|
id="a"
|
||||||
|
x1="-87.028"
|
||||||
|
x2="-86.028"
|
||||||
|
y1="841.97"
|
||||||
|
y2="841.97"
|
||||||
|
gradientTransform="matrix(-343.95 -596.42 -596.42 343.95 472648 -340719)"
|
||||||
|
gradientUnits="userSpaceOnUse">
|
||||||
|
<stop
|
||||||
|
stop-color="#080808"
|
||||||
|
offset="0"
|
||||||
|
id="stop2" />
|
||||||
|
<stop
|
||||||
|
stop-color="#242424"
|
||||||
|
offset="1"
|
||||||
|
id="stop4" />
|
||||||
|
</linearGradient>
|
||||||
|
<rect
|
||||||
|
x=".1"
|
||||||
|
y=".1"
|
||||||
|
width="421.1"
|
||||||
|
height="842.1"
|
||||||
|
fill="#e1e1e1"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
stroke-width="7.5591"
|
||||||
|
style="mix-blend-mode:luminosity;fill:#ffffff;fill-opacity:1"
|
||||||
|
id="rect7" />
|
||||||
|
<g
|
||||||
|
clip-rule="evenodd"
|
||||||
|
fill-rule="evenodd"
|
||||||
|
style="mix-blend-mode:exclusion"
|
||||||
|
id="g75">
|
||||||
|
<path
|
||||||
|
d="m0.1 0.1h420.9v841.9h-420.9z"
|
||||||
|
fill="url(#a)"
|
||||||
|
stroke="#000"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
stroke-miterlimit="3.1571"
|
||||||
|
stroke-width=".2736"
|
||||||
|
id="path9" />
|
||||||
|
<path
|
||||||
|
d="m147 152.1-146.9-152h130z"
|
||||||
|
fill="#242424"
|
||||||
|
id="path11" />
|
||||||
|
<path
|
||||||
|
d="m147 152.1-146.9-152v106.7z"
|
||||||
|
fill="#252525"
|
||||||
|
id="path13" />
|
||||||
|
<path
|
||||||
|
d="m147 152.1v62.7l-146.9-80.5v-27.5z"
|
||||||
|
fill="#222"
|
||||||
|
id="path15" />
|
||||||
|
<path
|
||||||
|
d="m0.1 268.5 146.9-53.7-146.9-80.5z"
|
||||||
|
fill="#242424"
|
||||||
|
id="path17" />
|
||||||
|
<path
|
||||||
|
d="m0.1 268.5 146.9-53.7-47.9 206.3z"
|
||||||
|
fill="#1f1f1f"
|
||||||
|
id="path19" />
|
||||||
|
<path
|
||||||
|
d="m0.1 268.5v201l8.4 2.1 90.5-50.5z"
|
||||||
|
fill="#1f1f1f"
|
||||||
|
id="path21" />
|
||||||
|
<path
|
||||||
|
d="m33.8 528.4-25.2-56.8 90.5-50.5z"
|
||||||
|
fill="#1a1a1a"
|
||||||
|
id="path23" />
|
||||||
|
<path
|
||||||
|
d="m33.8 528.4 204.2 19-138.9-126.3z"
|
||||||
|
fill="#181818"
|
||||||
|
id="path25" />
|
||||||
|
<path
|
||||||
|
d="m33.8 528.4 204.2 19-124.2 84.2z"
|
||||||
|
fill="#161616"
|
||||||
|
id="path27" />
|
||||||
|
<path
|
||||||
|
d="m33.8 528.4h-33.7v189.4l113.7-86.3z"
|
||||||
|
fill="#191919"
|
||||||
|
id="path29" />
|
||||||
|
<path
|
||||||
|
d="m135.9 732.6-102.1 109.4h-33.7v-124.2l113.7-86.3z"
|
||||||
|
fill="#161616"
|
||||||
|
id="path31" />
|
||||||
|
<path
|
||||||
|
d="m135.9 732.6 137.9-14.7-35.8-170.5-124.2 84.2z"
|
||||||
|
fill="#111"
|
||||||
|
id="path33" />
|
||||||
|
<path
|
||||||
|
d="m135.9 732.6 137.9-14.7-16.9 124.1h-121z"
|
||||||
|
fill="#0e0e0e"
|
||||||
|
id="path35" />
|
||||||
|
<path
|
||||||
|
d="m421.1 799.9-147.3-82.1-16.9 124.2h164.2z"
|
||||||
|
fill="#080808"
|
||||||
|
id="path37" />
|
||||||
|
<path
|
||||||
|
d="m421.1 799.9-147.3-82.1 147.3-128.4z"
|
||||||
|
fill="#070707"
|
||||||
|
id="path39" />
|
||||||
|
<path
|
||||||
|
d="m135.9 732.6-102.1 109.4h102.1z"
|
||||||
|
fill="#121212"
|
||||||
|
id="path41" />
|
||||||
|
<path
|
||||||
|
d="m286.4 395.8-48.4 151.6-138.9-126.3z"
|
||||||
|
fill="#151515"
|
||||||
|
id="path43" />
|
||||||
|
<path
|
||||||
|
d="m286.4 395.8-48.4 151.6 160-126.3z"
|
||||||
|
fill="#111"
|
||||||
|
id="path45" />
|
||||||
|
<path
|
||||||
|
d="m273.8 717.8-35.8-170.4 160-126.3 23.2 37.9v130.5z"
|
||||||
|
fill="#0d0d0d"
|
||||||
|
id="path47" />
|
||||||
|
<path
|
||||||
|
d="m33.8 528.4-25.2-56.8-8.4-2.1v58.9z"
|
||||||
|
fill="#1d1d1d"
|
||||||
|
id="path49" />
|
||||||
|
<path
|
||||||
|
d="m147 152.1 133.5-17.8-99.3-134.2h-51z"
|
||||||
|
fill="#1e1e1e"
|
||||||
|
id="path51" />
|
||||||
|
<path
|
||||||
|
d="m147 152.1 133.5-17.8-133.5 80.5z"
|
||||||
|
fill="#1b1b1b"
|
||||||
|
id="path53" />
|
||||||
|
<path
|
||||||
|
d="m290.6 303.2-10.1-168.9-133.5 80.5z"
|
||||||
|
fill="#181818"
|
||||||
|
id="path55" />
|
||||||
|
<path
|
||||||
|
d="m290.6 303.2-191.5 117.9 47.9-206.3z"
|
||||||
|
fill="#191919"
|
||||||
|
id="path57" />
|
||||||
|
<path
|
||||||
|
d="m290.6 303.2-191.5 117.9 187.3-25.3z"
|
||||||
|
fill="#161616"
|
||||||
|
id="path59" />
|
||||||
|
<path
|
||||||
|
d="m290.6 303.2 107.3 117.9-111.6-25.3z"
|
||||||
|
fill="#111"
|
||||||
|
id="path61" />
|
||||||
|
<path
|
||||||
|
d="m290.6 303.2 107.3 117.9 23.2-40.5v-65.8z"
|
||||||
|
fill="#101010"
|
||||||
|
id="path63" />
|
||||||
|
<path
|
||||||
|
d="m421.1 459-23.2-37.9 23.2-40.5z"
|
||||||
|
fill="#0c0c0c"
|
||||||
|
fill-opacity=".95"
|
||||||
|
id="path65" />
|
||||||
|
<path
|
||||||
|
d="m325.9 0.1-45.4 134.2-99.3-134.2z"
|
||||||
|
fill="#1c1c1c"
|
||||||
|
id="path67" />
|
||||||
|
<path
|
||||||
|
d="m325.9 0.1-45.4 134.2 140.6-24v-110.2z"
|
||||||
|
fill="#151515"
|
||||||
|
id="path69" />
|
||||||
|
<path
|
||||||
|
d="m421.1 284.8-140.6-150.5 140.6-24z"
|
||||||
|
fill="#111"
|
||||||
|
id="path71" />
|
||||||
|
<path
|
||||||
|
d="m421.1 284.8-140.6-150.5 10.1 168.9 130.5 11.6z"
|
||||||
|
fill="#131313"
|
||||||
|
id="path73" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.2 KiB |
1
dirs/mainsail/img/sidebar-background.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg enable-background="new 0 0 421.2 842.2" viewBox="0 0 421.2 842.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(-343.9457 -596.4179 -596.4179 343.9457 472647.7812 -340718.9688)" gradientUnits="userSpaceOnUse" x1="-87.0285" x2="-86.0285" y1="841.9678" y2="841.9678"><stop offset="0" stop-color="#080808"/><stop offset="1" stop-color="#242424"/></linearGradient><g clip-rule="evenodd" fill-rule="evenodd"><path d="m.1.1h420.9v841.9h-420.9z" style="stroke:#000;stroke-width:.2736;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3.1571;fill:url(#a)"/><path d="m147 152.1-146.9-152h130z" fill="#242424"/><path d="m147 152.1-146.9-152v106.7z" fill="#252525"/><path d="m147 152.1v62.7l-146.9-80.5v-27.5z" fill="#222"/><path d="m.1 268.5 146.9-53.7-146.9-80.5z" fill="#242424"/><path d="m.1 268.5 146.9-53.7-47.9 206.3z" fill="#1f1f1f"/><path d="m.1 268.5v201l8.4 2.1 90.5-50.5z" fill="#1f1f1f"/><path d="m33.8 528.4-25.2-56.8 90.5-50.5z" fill="#1a1a1a"/><path d="m33.8 528.4 204.2 19-138.9-126.3z" fill="#181818"/><path d="m33.8 528.4 204.2 19-124.2 84.2z" fill="#161616"/><path d="m33.8 528.4h-33.7v189.4l113.7-86.3z" fill="#191919"/><path d="m135.9 732.6-102.1 109.4h-33.7v-124.2l113.7-86.3z" fill="#161616"/><path d="m135.9 732.6 137.9-14.7-35.8-170.5-124.2 84.2z" fill="#111"/><path d="m135.9 732.6 137.9-14.7-16.9 124.1h-121z" fill="#0e0e0e"/><path d="m421.1 799.9-147.3-82.1-16.9 124.2h164.2z" fill="#080808"/><path d="m421.1 799.9-147.3-82.1 147.3-128.4z" fill="#070707"/><path d="m135.9 732.6-102.1 109.4h102.1z" fill="#121212"/><path d="m286.4 395.8-48.4 151.6-138.9-126.3z" fill="#151515"/><path d="m286.4 395.8-48.4 151.6 160-126.3z" fill="#111"/><path d="m273.8 717.8-35.8-170.4 160-126.3 23.2 37.9v130.5z" fill="#0d0d0d"/><path d="m33.8 528.4-25.2-56.8-8.4-2.1v58.9z" fill="#1d1d1d"/><path d="m147 152.1 133.5-17.8-99.3-134.2h-51z" fill="#1e1e1e"/><path d="m147 152.1 133.5-17.8-133.5 80.5z" fill="#1b1b1b"/><path d="m290.6 303.2-10.1-168.9-133.5 80.5z" fill="#181818"/><path d="m290.6 303.2-191.5 117.9 47.9-206.3z" fill="#191919"/><path d="m290.6 303.2-191.5 117.9 187.3-25.3z" fill="#161616"/><path d="m290.6 303.2 107.3 117.9-111.6-25.3z" fill="#111"/><path d="m290.6 303.2 107.3 117.9 23.2-40.5v-65.8z" fill="#101010"/><path d="m421.1 459-23.2-37.9 23.2-40.5z" fill="#0c0c0c" fill-opacity=".95"/><path d="m325.9.1-45.4 134.2-99.3-134.2z" fill="#1c1c1c"/><path d="m325.9.1-45.4 134.2 140.6-24v-110.2z" fill="#151515"/><path d="m421.1 284.8-140.6-150.5 140.6-24z" fill="#111"/><path d="m421.1 284.8-140.6-150.5 10.1 168.9 130.5 11.6z" fill="#131313"/></g></svg>
|
After Width: | Height: | Size: 2.6 KiB |
39
dirs/mainsail/index.html
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
||||||
|
<title>Mainsail</title>
|
||||||
|
<meta name="description" content="Mainsail is the popular web interface for Klipper." />
|
||||||
|
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="/img/icons/favicon-32x32.png" />
|
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="/img/icons/favicon-16x16.png" />
|
||||||
|
<meta name="theme-color" content="#121212" />
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
|
||||||
|
<meta name="apple-mobile-web-app-title" content="Mainsail" />
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="/img/icons/apple-touch-icon-180x180.png" />
|
||||||
|
<link rel="mask-icon" href="img/icons/safari-pinned-tab.svg" color="#d51f26" />
|
||||||
|
<meta name="msapplication-TileImage" content="/img/icons/mstile-150x150.png" />
|
||||||
|
<meta name="msapplication-TileColor" content="#d51f26" />
|
||||||
|
|
||||||
|
|
||||||
|
<script type="module" crossorigin src="/assets/index-97b4652c.js"></script>
|
||||||
|
<link rel="modulepreload" crossorigin href="/assets/vuetify-52f40ce5.js">
|
||||||
|
<link rel="modulepreload" crossorigin href="/assets/overlayscrollbars-44d87bcf.js">
|
||||||
|
<link rel="modulepreload" crossorigin href="/assets/echarts-9bc570b0.js">
|
||||||
|
<link rel="stylesheet" href="/assets/vuetify-950d1cb0.css">
|
||||||
|
<link rel="stylesheet" href="/assets/overlayscrollbars-a16bc3d3.css">
|
||||||
|
<link rel="stylesheet" href="/assets/index-57af1108.css">
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest"></head>
|
||||||
|
<body style="background-color: #121212">
|
||||||
|
<noscript>
|
||||||
|
<strong>
|
||||||
|
We're sorry but Mainsail doesn't work properly without JavaScript enabled. Please enable it to continue.
|
||||||
|
</strong>
|
||||||
|
</noscript>
|
||||||
|
<div id="app"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
1
dirs/mainsail/manifest.webmanifest
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"name":"Mainsail","short_name":"Mainsail","start_url":"/","display":"standalone","background_color":"#121212","lang":"en","scope":"/","theme_color":"#D51F26","icons":[{"src":"/img/icons/icon-192-maskable.png","sizes":"192x192","type":"image/png"},{"src":"/img/icons/icon-512-maskable.png","sizes":"512x512","type":"image/png"},{"src":"/img/icons/icon-512-maskable.png","sizes":"512x512","type":"image/png","purpose":"any maskable"}]}
|
1
dirs/mainsail/release_info.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"project_name":"mainsail","project_owner":"mainsail-crew","version":"v2.9.1"}
|
1
dirs/mainsail/sw.js
Normal file
1
dirs/mainsail/workbox-78627b31.js
Normal file
1
dirs/moonraker
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 67c98f6a7610ff4196954a665e5599bea9ccf5ac
|
1
dirs/printer_data/.moonraker.uuid
Normal file
@ -0,0 +1 @@
|
|||||||
|
bc16b7b6eb614f20b555dde96de3080f
|
@ -0,0 +1,90 @@
|
|||||||
|
[server]
|
||||||
|
host: 0.0.0.0
|
||||||
|
port: 7125
|
||||||
|
# The maximum size allowed for a file upload (in MiB). Default 1024 MiB
|
||||||
|
max_upload_size: 1024
|
||||||
|
# Path to klippy Unix Domain Socket
|
||||||
|
klippy_uds_address: ~/printer_data/comms/klippy.sock
|
||||||
|
|
||||||
|
[file_manager]
|
||||||
|
# post processing for object cancel. Not recommended for low resource SBCs such as a Pi Zero. Default False
|
||||||
|
enable_object_processing: False
|
||||||
|
|
||||||
|
[authorization]
|
||||||
|
cors_domains:
|
||||||
|
https://my.mainsail.xyz
|
||||||
|
http://my.mainsail.xyz
|
||||||
|
http://*.local
|
||||||
|
http://*.lan
|
||||||
|
trusted_clients:
|
||||||
|
10.0.0.0/8
|
||||||
|
127.0.0.0/8
|
||||||
|
169.254.0.0/16
|
||||||
|
172.16.0.0/12
|
||||||
|
192.168.0.0/16
|
||||||
|
FE80::/10
|
||||||
|
::1/128
|
||||||
|
|
||||||
|
# enables partial support of Octoprint API
|
||||||
|
[octoprint_compat]
|
||||||
|
|
||||||
|
# enables moonraker to track and store print history.
|
||||||
|
[history]
|
||||||
|
|
||||||
|
# this enables moonraker announcements for mainsail
|
||||||
|
[announcements]
|
||||||
|
subscriptions:
|
||||||
|
mainsail
|
||||||
|
|
||||||
|
# this enables moonraker's update manager
|
||||||
|
[update_manager]
|
||||||
|
refresh_interval: 168
|
||||||
|
enable_auto_refresh: True
|
||||||
|
|
||||||
|
[update_manager mainsail]
|
||||||
|
type: web
|
||||||
|
channel: stable
|
||||||
|
repo: mainsail-crew/mainsail
|
||||||
|
path: ~/mainsail
|
||||||
|
|
||||||
|
[update_manager mainsail-config]
|
||||||
|
type: git_repo
|
||||||
|
primary_branch: master
|
||||||
|
path: ~/mainsail-config
|
||||||
|
origin: https://github.com/mainsail-crew/mainsail-config.git
|
||||||
|
managed_services: klipper
|
||||||
|
|
||||||
|
### moonraker-timelapse
|
||||||
|
### Don't forget to include timelapse.cfg to your printer.cfg
|
||||||
|
### Uncomment to enable moonraker-timelapse
|
||||||
|
|
||||||
|
|
||||||
|
#[update_manager timelapse]
|
||||||
|
#type: git_repo
|
||||||
|
#primary_branch: main
|
||||||
|
#path: ~/moonraker-timelapse
|
||||||
|
#origin: https://github.com/mainsail-crew/moonraker-timelapse.git
|
||||||
|
#managed_services: klipper moonraker
|
||||||
|
|
||||||
|
#[timelapse]
|
||||||
|
### Directory where the generated video will be saved
|
||||||
|
#output_path: ~/timelapse/
|
||||||
|
### Directory where ffmpeg is installed
|
||||||
|
#ffmpeg_binary_path: /usr/bin/ffmpeg
|
||||||
|
|
||||||
|
# Crowsnest update_manager entry
|
||||||
|
[update_manager crowsnest]
|
||||||
|
type: git_repo
|
||||||
|
path: ~/crowsnest
|
||||||
|
origin: https://github.com/mainsail-crew/crowsnest.git
|
||||||
|
managed_services: crowsnest
|
||||||
|
install_script: tools/pkglist.sh
|
||||||
|
|
||||||
|
# Sonar update_manager entry
|
||||||
|
[update_manager sonar]
|
||||||
|
type: git_repo
|
||||||
|
path: ~/sonar
|
||||||
|
origin: https://github.com/mainsail-crew/sonar.git
|
||||||
|
primary_branch: main
|
||||||
|
managed_services: sonar
|
||||||
|
install_script: tools/install.sh
|
1
dirs/printer_data/comms/klippy.serial
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
/dev/pts/0
|
64
dirs/printer_data/config/.moonraker.conf.bkp
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
[server]
|
||||||
|
host = 0.0.0.0
|
||||||
|
port = 7126
|
||||||
|
max_upload_size = 1024
|
||||||
|
klippy_uds_address = ~/taz/printer_data_taz/comms/klippy.sock
|
||||||
|
|
||||||
|
[file_manager]
|
||||||
|
enable_object_processing = False
|
||||||
|
|
||||||
|
[authorization]
|
||||||
|
cors_domains =
|
||||||
|
https://my.mainsail.xyz
|
||||||
|
http://my.mainsail.xyz
|
||||||
|
http://*.local
|
||||||
|
http://*.lan
|
||||||
|
trusted_clients =
|
||||||
|
10.0.0.0/8
|
||||||
|
127.0.0.0/8
|
||||||
|
169.254.0.0/16
|
||||||
|
172.16.0.0/12
|
||||||
|
192.168.0.0/16
|
||||||
|
FE80::/10
|
||||||
|
::1/128
|
||||||
|
|
||||||
|
[octoprint_compat]
|
||||||
|
|
||||||
|
[history]
|
||||||
|
|
||||||
|
[announcements]
|
||||||
|
subscriptions =
|
||||||
|
mainsail
|
||||||
|
|
||||||
|
[update_manager]
|
||||||
|
refresh_interval = 168
|
||||||
|
enable_auto_refresh = True
|
||||||
|
|
||||||
|
[update_manager mainsail]
|
||||||
|
type = web
|
||||||
|
channel = stable
|
||||||
|
repo = mainsail-crew/mainsail
|
||||||
|
path = ~/mainsail
|
||||||
|
|
||||||
|
[update_manager mainsail-config]
|
||||||
|
type = git_repo
|
||||||
|
primary_branch = master
|
||||||
|
path = ~/taz/mainsail-config
|
||||||
|
origin = https://github.com/mainsail-crew/mainsail-config.git
|
||||||
|
managed_services = klipper
|
||||||
|
|
||||||
|
[update_manager crowsnest]
|
||||||
|
type = git_repo
|
||||||
|
path = ~/crowsnest
|
||||||
|
origin = https://github.com/mainsail-crew/crowsnest.git
|
||||||
|
managed_services = crowsnest
|
||||||
|
install_script = tools/pkglist.sh
|
||||||
|
|
||||||
|
[update_manager sonar]
|
||||||
|
type = git_repo
|
||||||
|
path = ~/sonar
|
||||||
|
origin = https://github.com/mainsail-crew/sonar.git
|
||||||
|
primary_branch = main
|
||||||
|
managed_services = sonar
|
||||||
|
install_script = tools/install.sh
|
||||||
|
|
1
dirs/printer_data/config/.theme
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit b0692e0f798d3e05aefaf501383113657e34942b
|
1
dirs/printer_data/config/.theme_old
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 0a1c82a144b2c68ecb37030cfd08493b9f2b1b23
|
47
dirs/printer_data/config/crowsnest.conf
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#### crowsnest.conf
|
||||||
|
#### This is a typical default config.
|
||||||
|
#### Also used as default in mainsail / MainsailOS
|
||||||
|
#### See:
|
||||||
|
#### https://github.com/mainsail-crew/crowsnest/blob/master/README.md
|
||||||
|
#### for details to configure to your needs.
|
||||||
|
|
||||||
|
|
||||||
|
#####################################################################
|
||||||
|
#### #####
|
||||||
|
#### Information about ports and according URL's #####
|
||||||
|
#### #####
|
||||||
|
#####################################################################
|
||||||
|
#### #####
|
||||||
|
#### Port 8080 equals /webcam/?action=[stream/snapshot] #####
|
||||||
|
#### Port 8081 equals /webcam2/?action=[stream/snapshot] #####
|
||||||
|
#### Port 8082 equals /webcam3/?action=[stream/snapshot] #####
|
||||||
|
#### Port 8083 equals /webcam4/?action=[stream/snapshot] #####
|
||||||
|
#### #####
|
||||||
|
#### Note: These ports are default for most Mainsail #####
|
||||||
|
#### installations. To use any other port would involve #####
|
||||||
|
#### changing the proxy configuration or using directly #####
|
||||||
|
#### http://<ip>:<port>/?action=[stream/snapshot] #####
|
||||||
|
#### #####
|
||||||
|
#####################################################################
|
||||||
|
#### RTSP Stream URL: ( if enabled and supported ) #####
|
||||||
|
#### rtsp://<ip>:<rtsp_port>/stream.h264 #####
|
||||||
|
#####################################################################
|
||||||
|
|
||||||
|
|
||||||
|
[crowsnest]
|
||||||
|
log_path: /home/pi/printer_data/logs/crowsnest.log
|
||||||
|
log_level: verbose # Valid Options are quiet/verbose/debug
|
||||||
|
delete_log: false # Deletes log on every restart, if set to true
|
||||||
|
no_proxy: false
|
||||||
|
|
||||||
|
[cam 1]
|
||||||
|
mode: camera-streamer # ustreamer - Provides mjpg and snapshots. (All devices)
|
||||||
|
# camera-streamer - Provides webrtc, mjpg and snapshots. (rpi + Raspi OS based only)
|
||||||
|
enable_rtsp: false # If camera-streamer is used, this enables also usage of an rtsp server
|
||||||
|
rtsp_port: 8554 # Set different ports for each device!
|
||||||
|
port: 8080 # HTTP/MJPG Stream/Snapshot Port
|
||||||
|
device: /dev/v4l/by-id/usb-Generic_USB2.0_PC_CAMERA-video-index0 # See Log for available ...
|
||||||
|
resolution: 640x480 # widthxheight format
|
||||||
|
max_fps: 30 # If Hardware Supports this it will be forced, otherwise ignored/coerced.
|
||||||
|
#custom_flags: # You can run the Stream Services with custom flags.
|
||||||
|
#v4l2ctl: # Add v4l2-ctl parameters to setup your camera, see Log what your cam is capable of.
|
294
dirs/printer_data/config/mainsail.cfg
Normal file
@ -0,0 +1,294 @@
|
|||||||
|
## Client klipper macro definitions
|
||||||
|
##
|
||||||
|
## Copyright (C) 2022 Alex Zellner <alexander.zellner@googlemail.com>
|
||||||
|
##
|
||||||
|
## This file may be distributed under the terms of the GNU GPLv3 license
|
||||||
|
##
|
||||||
|
## !!! This file is read-only. Maybe the used editor indicates that. !!!
|
||||||
|
##
|
||||||
|
## Customization:
|
||||||
|
## 1) copy the gcode_macro _CLIENT_VARIABLE (see below) to your printer.cfg
|
||||||
|
## 2) remove the comment mark (#) from all lines
|
||||||
|
## 3) change any value in there to your needs
|
||||||
|
##
|
||||||
|
## Use the PAUSE macro direct in your M600:
|
||||||
|
## e.g. with a different park position front left and a minimal height of 50
|
||||||
|
## [gcode_macro M600]
|
||||||
|
## description: Filament change
|
||||||
|
## gcode: PAUSE X=10 Y=10 Z_MIN=50
|
||||||
|
## Z_MIN will park the toolhead at a minimum of 50 mm above to bed to make it easier for you to swap filament.
|
||||||
|
##
|
||||||
|
## Client variable macro for your printer.cfg
|
||||||
|
#[gcode_macro _CLIENT_VARIABLE]
|
||||||
|
#variable_use_custom_pos : False ; use custom park coordinates for x,y [True/False]
|
||||||
|
#variable_custom_park_x : 0.0 ; custom x position; value must be within your defined min and max of X
|
||||||
|
#variable_custom_park_y : 0.0 ; custom y position; value must be within your defined min and max of Y
|
||||||
|
#variable_custom_park_dz : 2.0 ; custom dz value; the value in mm to lift the nozzle when move to park position
|
||||||
|
#variable_retract : 1.0 ; the value to retract while PAUSE
|
||||||
|
#variable_cancel_retract : 5.0 ; the value to retract while CANCEL_PRINT
|
||||||
|
#variable_speed_retract : 35.0 ; retract speed in mm/s
|
||||||
|
#variable_unretract : 1.0 ; the value to unretract while RESUME
|
||||||
|
#variable_speed_unretract : 35.0 ; unretract speed in mm/s
|
||||||
|
#variable_speed_hop : 15.0 ; z move speed in mm/s
|
||||||
|
#variable_speed_move : 100.0 ; move speed in mm/s
|
||||||
|
#variable_park_at_cancel : False ; allow to move the toolhead to park while execute CANCEL_PRINT [True/False]
|
||||||
|
#variable_park_at_cancel_x : None ; different park position during CANCEL_PRINT [None/Position as Float]; park_at_cancel must be True
|
||||||
|
#variable_park_at_cancel_y : None ; different park position during CANCEL_PRINT [None/Position as Float]; park_at_cancel must be True
|
||||||
|
## !!! Caution [firmware_retraction] must be defined in the printer.cfg if you set use_fw_retract: True !!!
|
||||||
|
#variable_use_fw_retract : False ; use fw_retraction instead of the manual version [True/False]
|
||||||
|
#variable_idle_timeout : 0 ; time in sec until idle_timeout kicks in. Value 0 means that no value will be set or restored
|
||||||
|
#variable_runout_sensor : "" ; If a sensor is defined, it will be used to cancel the execution of RESUME in case no filament is detected.
|
||||||
|
## Specify the config name of the runout sensor e.g "filament_switch_sensor runout". Hint use the same as in your printer.cfg
|
||||||
|
## !!! Custom macros, please use with care and review the section of the corresponding macro.
|
||||||
|
## These macros are for simple operations like setting a status LED. Please make sure your macro does not interfere with the basic macro functions.
|
||||||
|
## Only single line commands are supported, please create a macro if you need more than one command.
|
||||||
|
#variable_user_pause_macro : "" ; Everything inside the "" will be executed after the klipper base pause (PAUSE_BASE) function
|
||||||
|
#variable_user_resume_macro: "" ; Everything inside the "" will be executed before the klipper base resume (RESUME_BASE) function
|
||||||
|
#variable_user_cancel_macro: "" ; Everything inside the "" will be executed before the klipper base cancel (CANCEL_PRINT_BASE) function
|
||||||
|
#gcode:
|
||||||
|
|
||||||
|
[virtual_sdcard]
|
||||||
|
path: ~/taz/printer_data_taz/gcodes
|
||||||
|
on_error_gcode: CANCEL_PRINT
|
||||||
|
|
||||||
|
[pause_resume]
|
||||||
|
#recover_velocity: 50.
|
||||||
|
# When capture/restore is enabled, the speed at which to return to
|
||||||
|
# the captured position (in mm/s). Default is 50.0 mm/s.
|
||||||
|
|
||||||
|
[display_status]
|
||||||
|
|
||||||
|
[respond]
|
||||||
|
|
||||||
|
[gcode_macro CANCEL_PRINT]
|
||||||
|
description: Cancel the actual running print
|
||||||
|
rename_existing: CANCEL_PRINT_BASE
|
||||||
|
gcode:
|
||||||
|
##### get user parameters or use default #####
|
||||||
|
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
|
||||||
|
{% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %}
|
||||||
|
{% set retract = client.cancel_retract|default(5.0)|abs %}
|
||||||
|
##### define park position #####
|
||||||
|
{% set park_x = "" if (client.park_at_cancel_x|default(none) is none)
|
||||||
|
else "X=" ~ client.park_at_cancel_x %}
|
||||||
|
{% set park_y = "" if (client.park_at_cancel_y|default(none) is none)
|
||||||
|
else "Y=" ~ client.park_at_cancel_y %}
|
||||||
|
{% set custom_park = park_x|length > 0 or park_y|length > 0 %}
|
||||||
|
##### end of definitions #####
|
||||||
|
# restore idle_timeout time if needed
|
||||||
|
{% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %}
|
||||||
|
SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout}
|
||||||
|
{% endif %}
|
||||||
|
{% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %}
|
||||||
|
_CLIENT_RETRACT LENGTH={retract}
|
||||||
|
TURN_OFF_HEATERS
|
||||||
|
M106 S0
|
||||||
|
{client.user_cancel_macro|default("")}
|
||||||
|
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
|
||||||
|
# clear pause_next_layer and pause_at_layer as preparation for next print
|
||||||
|
SET_PAUSE_NEXT_LAYER ENABLE=0
|
||||||
|
SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0
|
||||||
|
CANCEL_PRINT_BASE
|
||||||
|
|
||||||
|
[gcode_macro PAUSE]
|
||||||
|
description: Pause the actual running print
|
||||||
|
rename_existing: PAUSE_BASE
|
||||||
|
gcode:
|
||||||
|
##### get user parameters or use default #####
|
||||||
|
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
|
||||||
|
{% set idle_timeout = client.idle_timeout|default(0) %}
|
||||||
|
{% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %}
|
||||||
|
{% set restore = False if printer.toolhead.extruder == ''
|
||||||
|
else True if params.RESTORE|default(1)|int == 1 else False %}
|
||||||
|
##### end of definitions #####
|
||||||
|
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}"
|
||||||
|
# set a new idle_timeout value
|
||||||
|
{% if idle_timeout > 0 %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout}
|
||||||
|
SET_IDLE_TIMEOUT TIMEOUT={idle_timeout}
|
||||||
|
{% endif %}
|
||||||
|
PAUSE_BASE
|
||||||
|
{client.user_pause_macro|default("")}
|
||||||
|
_TOOLHEAD_PARK_PAUSE_CANCEL {rawparams}
|
||||||
|
|
||||||
|
[gcode_macro RESUME]
|
||||||
|
description: Resume the actual running print
|
||||||
|
rename_existing: RESUME_BASE
|
||||||
|
variable_last_extruder_temp: {'restore': False, 'temp': 0}
|
||||||
|
variable_restore_idle_timeout: 0
|
||||||
|
variable_idle_state: False
|
||||||
|
gcode:
|
||||||
|
##### get user parameters or use default #####
|
||||||
|
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
|
||||||
|
{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
|
||||||
|
{% set sp_move = client.speed_move|default(velocity) %}
|
||||||
|
{% set runout_resume = True if client.runout_sensor|default("") == "" # no runout
|
||||||
|
else True if not printer[client.runout_sensor].enabled # sensor is disabled
|
||||||
|
else printer[client.runout_sensor].filament_detected %} # sensor status
|
||||||
|
{% set can_extrude = True if printer.toolhead.extruder == '' # no extruder defined in config
|
||||||
|
else printer[printer.toolhead.extruder].can_extrude %} # status of active extruder
|
||||||
|
{% set do_resume = False %}
|
||||||
|
{% set prompt_txt = [] %}
|
||||||
|
##### end of definitions #####
|
||||||
|
#### Printer comming from timeout idle state ####
|
||||||
|
{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False
|
||||||
|
{% if last_extruder_temp.restore %}
|
||||||
|
# we need to use the unicode (\u00B0) for the ° as py2 env's would throw an error otherwise
|
||||||
|
RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }'
|
||||||
|
M109 S{last_extruder_temp.temp}
|
||||||
|
{% set do_resume = True %}
|
||||||
|
{% elif can_extrude %}
|
||||||
|
{% set do_resume = True %}
|
||||||
|
{% else %}
|
||||||
|
RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
|
||||||
|
{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
|
||||||
|
{% endif %}
|
||||||
|
#### Printer comming out of regular PAUSE state ####
|
||||||
|
{% elif can_extrude %}
|
||||||
|
{% set do_resume = True %}
|
||||||
|
{% else %}
|
||||||
|
RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}'
|
||||||
|
{% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %}
|
||||||
|
{% endif %}
|
||||||
|
{% if runout_resume %}
|
||||||
|
{% if do_resume %}
|
||||||
|
{% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %} # restore idle_timeout time
|
||||||
|
{client.user_resume_macro|default("")}
|
||||||
|
_CLIENT_EXTRUDE
|
||||||
|
RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)}
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}'
|
||||||
|
{% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %}
|
||||||
|
{% endif %}
|
||||||
|
##### Generate User Information box in case of abort #####
|
||||||
|
{% if not (runout_resume and do_resume) %}
|
||||||
|
RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!"
|
||||||
|
{% for element in prompt_txt %}
|
||||||
|
RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}'
|
||||||
|
{% endfor %}
|
||||||
|
RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info"
|
||||||
|
RESPOND TYPE=command MSG="action:prompt_show"
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
# Usage: SET_PAUSE_NEXT_LAYER [ENABLE=[0|1]] [MACRO=<name>]
|
||||||
|
[gcode_macro SET_PAUSE_NEXT_LAYER]
|
||||||
|
description: Enable a pause if the next layer is reached
|
||||||
|
gcode:
|
||||||
|
{% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %}
|
||||||
|
{% set ENABLE = params.ENABLE|default(1)|int != 0 %}
|
||||||
|
{% set MACRO = params.MACRO|default(pause_next_layer.call, True) %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}"
|
||||||
|
|
||||||
|
# Usage: SET_PAUSE_AT_LAYER [ENABLE=[0|1]] [LAYER=<number>] [MACRO=<name>]
|
||||||
|
[gcode_macro SET_PAUSE_AT_LAYER]
|
||||||
|
description: Enable/disable a pause if a given layer number is reached
|
||||||
|
gcode:
|
||||||
|
{% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %}
|
||||||
|
{% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined
|
||||||
|
else params.LAYER is defined %}
|
||||||
|
{% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %}
|
||||||
|
{% set MACRO = params.MACRO|default(pause_at_layer.call, True) %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}"
|
||||||
|
|
||||||
|
# Usage: SET_PRINT_STATS_INFO [TOTAL_LAYER=<total_layer_count>] [CURRENT_LAYER= <current_layer>]
|
||||||
|
[gcode_macro SET_PRINT_STATS_INFO]
|
||||||
|
rename_existing: SET_PRINT_STATS_INFO_BASE
|
||||||
|
description: Overwrite, to get pause_next_layer and pause_at_layer feature
|
||||||
|
variable_pause_next_layer: { 'enable': False, 'call': "PAUSE" }
|
||||||
|
variable_pause_at_layer : { 'enable': False, 'layer': 0, 'call': "PAUSE" }
|
||||||
|
gcode:
|
||||||
|
{% if pause_next_layer.enable %}
|
||||||
|
RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}'
|
||||||
|
{pause_next_layer.call} ; execute the given gcode to pause, should be either M600 or PAUSE
|
||||||
|
SET_PAUSE_NEXT_LAYER ENABLE=0
|
||||||
|
{% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %}
|
||||||
|
RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}'
|
||||||
|
{pause_at_layer.call} ; execute the given gcode to pause, should be either M600 or PAUSE
|
||||||
|
SET_PAUSE_AT_LAYER ENABLE=0
|
||||||
|
{% endif %}
|
||||||
|
SET_PRINT_STATS_INFO_BASE {rawparams}
|
||||||
|
|
||||||
|
##### internal use #####
|
||||||
|
[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL]
|
||||||
|
description: Helper: park toolhead used in PAUSE and CANCEL_PRINT
|
||||||
|
gcode:
|
||||||
|
##### get user parameters or use default #####
|
||||||
|
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
|
||||||
|
{% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
|
||||||
|
{% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %}
|
||||||
|
{% set custom_park_x = client.custom_park_x|default(0.0) %}
|
||||||
|
{% set custom_park_y = client.custom_park_y|default(0.0) %}
|
||||||
|
{% set park_dz = client.custom_park_dz|default(2.0)|abs %}
|
||||||
|
{% set sp_hop = client.speed_hop|default(15) * 60 %}
|
||||||
|
{% set sp_move = client.speed_move|default(velocity) * 60 %}
|
||||||
|
##### get config and toolhead values #####
|
||||||
|
{% set origin = printer.gcode_move.homing_origin %}
|
||||||
|
{% set act = printer.gcode_move.gcode_position %}
|
||||||
|
{% set max = printer.toolhead.axis_maximum %}
|
||||||
|
{% set cone = printer.toolhead.cone_start_z|default(max.z) %} ; height as long the toolhead can reach max and min of an delta
|
||||||
|
{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
|
||||||
|
else False %}
|
||||||
|
##### define park position #####
|
||||||
|
{% set z_min = params.Z_MIN|default(0)|float %}
|
||||||
|
{% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %}
|
||||||
|
{% set x_park = params.X if params.X is defined
|
||||||
|
else custom_park_x if use_custom
|
||||||
|
else 0.0 if round_bed
|
||||||
|
else (max.x - 5.0) %}
|
||||||
|
{% set y_park = params.Y if params.Y is defined
|
||||||
|
else custom_park_y if use_custom
|
||||||
|
else (max.y - 5.0) if round_bed and z_park < cone
|
||||||
|
else 0.0 if round_bed
|
||||||
|
else (max.y - 5.0) %}
|
||||||
|
##### end of definitions #####
|
||||||
|
_CLIENT_RETRACT
|
||||||
|
{% if "xyz" in printer.toolhead.homed_axes %}
|
||||||
|
G90
|
||||||
|
G1 Z{z_park} F{sp_hop}
|
||||||
|
G1 X{x_park} Y{y_park} F{sp_move}
|
||||||
|
{% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %}
|
||||||
|
{% else %}
|
||||||
|
RESPOND TYPE=echo MSG='Printer not homed'
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
[gcode_macro _CLIENT_EXTRUDE]
|
||||||
|
description: Extrudes, if the extruder is hot enough
|
||||||
|
gcode:
|
||||||
|
##### get user parameters or use default #####
|
||||||
|
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
|
||||||
|
{% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %}
|
||||||
|
{% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %}
|
||||||
|
{% set speed = params.SPEED|default(client.speed_unretract)|default(35) %}
|
||||||
|
{% set absolute_extrude = printer.gcode_move.absolute_extrude %}
|
||||||
|
##### end of definitions #####
|
||||||
|
{% if printer.toolhead.extruder != '' %}
|
||||||
|
{% if printer[printer.toolhead.extruder].can_extrude %}
|
||||||
|
{% if use_fw_retract %}
|
||||||
|
{% if length < 0 %}
|
||||||
|
G10
|
||||||
|
{% else %}
|
||||||
|
G11
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
M83
|
||||||
|
G1 E{length} F{(speed|float|abs) * 60}
|
||||||
|
{% if absolute_extrude %}
|
||||||
|
M82
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}'
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
[gcode_macro _CLIENT_RETRACT]
|
||||||
|
description: Retracts, if the extruder is hot enough
|
||||||
|
gcode:
|
||||||
|
{% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %}
|
||||||
|
{% set length = params.LENGTH|default(client.retract)|default(1.0)|float %}
|
||||||
|
{% set speed = params.SPEED|default(client.speed_retract)|default(35) %}
|
||||||
|
|
||||||
|
_CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs}
|
||||||
|
|
90
dirs/printer_data/config/moonraker.conf
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
[server]
|
||||||
|
host: 0.0.0.0
|
||||||
|
port: 7126
|
||||||
|
# The maximum size allowed for a file upload (in MiB). Default 1024 MiB
|
||||||
|
max_upload_size: 1024
|
||||||
|
# Path to klippy Unix Domain Socket
|
||||||
|
klippy_uds_address: ~/taz/printer_data_taz/comms/klippy.sock
|
||||||
|
|
||||||
|
[file_manager]
|
||||||
|
# post processing for object cancel. Not recommended for low resource SBCs such as a Pi Zero. Default False
|
||||||
|
enable_object_processing: False
|
||||||
|
|
||||||
|
[authorization]
|
||||||
|
cors_domains:
|
||||||
|
https://my.mainsail.xyz
|
||||||
|
http://my.mainsail.xyz
|
||||||
|
http://*.local
|
||||||
|
http://*.lan
|
||||||
|
trusted_clients:
|
||||||
|
10.0.0.0/8
|
||||||
|
127.0.0.0/8
|
||||||
|
169.254.0.0/16
|
||||||
|
172.16.0.0/12
|
||||||
|
192.168.0.0/16
|
||||||
|
FE80::/10
|
||||||
|
::1/128
|
||||||
|
|
||||||
|
# enables partial support of Octoprint API
|
||||||
|
[octoprint_compat]
|
||||||
|
|
||||||
|
# enables moonraker to track and store print history.
|
||||||
|
[history]
|
||||||
|
|
||||||
|
# this enables moonraker announcements for mainsail
|
||||||
|
[announcements]
|
||||||
|
subscriptions:
|
||||||
|
mainsail
|
||||||
|
|
||||||
|
# this enables moonraker's update manager
|
||||||
|
[update_manager]
|
||||||
|
refresh_interval: 168
|
||||||
|
enable_auto_refresh: True
|
||||||
|
|
||||||
|
[update_manager mainsail]
|
||||||
|
type: web
|
||||||
|
channel: stable
|
||||||
|
repo: mainsail-crew/mainsail
|
||||||
|
path: ~/mainsail
|
||||||
|
|
||||||
|
[update_manager mainsail-config]
|
||||||
|
type: git_repo
|
||||||
|
primary_branch: master
|
||||||
|
path: ~/taz/mainsail-config
|
||||||
|
origin: https://github.com/mainsail-crew/mainsail-config.git
|
||||||
|
managed_services: klipper
|
||||||
|
|
||||||
|
### moonraker-timelapse
|
||||||
|
### Don't forget to include timelapse.cfg to your printer.cfg
|
||||||
|
### Uncomment to enable moonraker-timelapse
|
||||||
|
|
||||||
|
|
||||||
|
#[update_manager timelapse]
|
||||||
|
#type: git_repo
|
||||||
|
#primary_branch: main
|
||||||
|
#path: ~/moonraker-timelapse
|
||||||
|
#origin: https://github.com/mainsail-crew/moonraker-timelapse.git
|
||||||
|
#managed_services: klipper moonraker
|
||||||
|
|
||||||
|
#[timelapse]
|
||||||
|
### Directory where the generated video will be saved
|
||||||
|
#output_path: ~/timelapse/
|
||||||
|
### Directory where ffmpeg is installed
|
||||||
|
#ffmpeg_binary_path: /usr/bin/ffmpeg
|
||||||
|
|
||||||
|
# Crowsnest update_manager entry
|
||||||
|
[update_manager crowsnest]
|
||||||
|
type: git_repo
|
||||||
|
path: ~/crowsnest
|
||||||
|
origin: https://github.com/mainsail-crew/crowsnest.git
|
||||||
|
managed_services: crowsnest
|
||||||
|
install_script: tools/pkglist.sh
|
||||||
|
|
||||||
|
# Sonar update_manager entry
|
||||||
|
[update_manager sonar]
|
||||||
|
type: git_repo
|
||||||
|
path: ~/sonar
|
||||||
|
origin: https://github.com/mainsail-crew/sonar.git
|
||||||
|
primary_branch: main
|
||||||
|
managed_services: sonar
|
||||||
|
install_script: tools/install.sh
|
1
dirs/printer_data/config/old_mainsail.cfg
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
/home/pi/mainsail-config/mainsail.cfg
|
220
dirs/printer_data/config/printer-20240318_221945.cfg
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
# This file contains common pin mappings for RAMBo boards. To use this
|
||||||
|
# config, the firmware should be compiled for the AVR atmega2560.
|
||||||
|
|
||||||
|
# See docs/Config_Reference.md for a description of parameters.
|
||||||
|
[gcode_macro CALIBRATE_NOZZLE_OFFSET]
|
||||||
|
description: Move to center of bed and calibrate nozzle offset
|
||||||
|
gcode:
|
||||||
|
G90
|
||||||
|
G0 X100 Y155 F1500
|
||||||
|
PROBE_CALIBRATE
|
||||||
|
|
||||||
|
[gcode_macro LEVEL_BED]
|
||||||
|
description: "Level the bed manually."
|
||||||
|
gcode:
|
||||||
|
BED_SCREWS_ADJUST
|
||||||
|
|
||||||
|
[gcode_macro CHECK_DEVIATION]
|
||||||
|
description: "Check the deviation of the bed from the last loaded mesh."
|
||||||
|
gcode:
|
||||||
|
SCREWS_TILT_CALCULATE MAX_DEVIATION=0.05
|
||||||
|
|
||||||
|
[gcode_macro LIZ_IS_A_BAKA]
|
||||||
|
description: "Liz is a baka, so here's her start G-Code >.<"
|
||||||
|
gcode:
|
||||||
|
BED_MESH_CALIBRATE
|
||||||
|
BED_MESH_PROFILE SAVE=default
|
||||||
|
|
||||||
|
[gcode_macro _START_GCODE]
|
||||||
|
description: "The gcode that should be called from your slicer at the beginning of a print."
|
||||||
|
gcode:
|
||||||
|
# Ender 3 Custom Start G-code
|
||||||
|
G90
|
||||||
|
G1 X2 Y30 Z30 F1500
|
||||||
|
G1 Z0.28 F240
|
||||||
|
G92 E0
|
||||||
|
G1 Y220 E10 F1500 ; prime the nozzle
|
||||||
|
G1 X2.3 F5000
|
||||||
|
G92 E0
|
||||||
|
G1 Y30 E10 F1200 ; prime the nozzle
|
||||||
|
G92 E0
|
||||||
|
G1 Z5 F1500 ; don't scratch the build plate
|
||||||
|
|
||||||
|
[gcode_macro _END_GCODE]
|
||||||
|
description: "The gcode that should be called from your slicer at the end of a print."
|
||||||
|
gcode:
|
||||||
|
G91 # Relative positioning
|
||||||
|
G1 E-2 F2700 # Retract a bit
|
||||||
|
G1 E-2 Z0.2 F2400 # Retract and raise Z
|
||||||
|
G1 X5 Y5 F3000 # Wipe out
|
||||||
|
G1 Z10 # Raise Z more
|
||||||
|
G90 # Absolute positioning
|
||||||
|
|
||||||
|
G1 X0 Y220 # Present print
|
||||||
|
M106 S0 # Turn-off fan
|
||||||
|
M104 S0 # Turn-off hotend
|
||||||
|
M140 S0 # Turn-off bed
|
||||||
|
|
||||||
|
M84 X Y E # Disable all steppers but Z
|
||||||
|
|
||||||
|
[stepper_x]
|
||||||
|
step_pin: PC0
|
||||||
|
dir_pin: PL1
|
||||||
|
enable_pin: !PA7
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 40 # Default, seems 3mm short on a 10mm move
|
||||||
|
# rotation_distance: 28 # Test 1, seems to move 1-2mm too far
|
||||||
|
# rotation_distance: 30 # Test 2, seems to move 1mm too far
|
||||||
|
rotation_distance: 33
|
||||||
|
endstop_pin: ^!PB6
|
||||||
|
#endstop_pin: ^PA2
|
||||||
|
position_endstop: 0
|
||||||
|
position_max: 298
|
||||||
|
homing_speed: 50
|
||||||
|
|
||||||
|
[stepper_y]
|
||||||
|
step_pin: PC1
|
||||||
|
dir_pin: !PL0
|
||||||
|
enable_pin: !PA6
|
||||||
|
microsteps: 16
|
||||||
|
rotation_distance: 40 # Default, Seems ok
|
||||||
|
endstop_pin: ^!PB5
|
||||||
|
#endstop_pin: ^PA1
|
||||||
|
position_endstop: 0
|
||||||
|
position_max: 280
|
||||||
|
homing_speed: 50
|
||||||
|
|
||||||
|
[stepper_z]
|
||||||
|
step_pin: PC2
|
||||||
|
dir_pin: PL2
|
||||||
|
enable_pin: !PA5
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 8 # Default, seems 1mm too short
|
||||||
|
# rotation_distance: 7.2 # Test 1, seems 3mm overshot
|
||||||
|
# rotation_distance: 8.33 # Test 2, still seems 1mm under
|
||||||
|
rotation_distance: 8
|
||||||
|
endstop_pin: probe:z_virtual_endstop
|
||||||
|
#endstop_pin: !PB4
|
||||||
|
#endstop_pin: ^PC7
|
||||||
|
# position_endstop: 0.5
|
||||||
|
position_max: 250
|
||||||
|
|
||||||
|
[bltouch]
|
||||||
|
sensor_pin: ^PB4
|
||||||
|
control_pin: PL5
|
||||||
|
x_offset: -33.0
|
||||||
|
y_offset: 9.0
|
||||||
|
z_offset: 3.0
|
||||||
|
|
||||||
|
[bed_mesh]
|
||||||
|
speed: 120
|
||||||
|
horizontal_move_z: 7
|
||||||
|
mesh_min: 30, 40
|
||||||
|
mesh_max: 280, 270
|
||||||
|
probe_count: 5
|
||||||
|
mesh_pps: 3
|
||||||
|
algorithm: bicubic
|
||||||
|
|
||||||
|
[safe_z_home]
|
||||||
|
home_xy_position: 140, 140
|
||||||
|
speed: 50
|
||||||
|
z_hop: 10
|
||||||
|
z_hop_speed: 5
|
||||||
|
|
||||||
|
[extruder]
|
||||||
|
step_pin: PC3
|
||||||
|
dir_pin: !PL6
|
||||||
|
enable_pin: !PA4
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 33.500 # Original Setting, seems ??x too small
|
||||||
|
# rotation_distance: 16.75 # Initial test, seems to extrude 1/2 supposed
|
||||||
|
# rotation_distance: 8.375 # Test Two, still seems 1/2
|
||||||
|
rotation_distance: 4.25
|
||||||
|
nozzle_diameter: 0.400
|
||||||
|
heater_pin: PH6
|
||||||
|
filament_diameter: 2.850
|
||||||
|
#filament_diameter: 1.750
|
||||||
|
sensor_type: EPCOS 100K B57560G104F
|
||||||
|
sensor_pin: PF0
|
||||||
|
control: pid
|
||||||
|
pid_Kp: 22.2
|
||||||
|
pid_Ki: 1.08
|
||||||
|
pid_Kd: 114
|
||||||
|
min_temp: 0
|
||||||
|
max_temp: 250
|
||||||
|
|
||||||
|
#[extruder1]
|
||||||
|
#step_pin: PC4
|
||||||
|
#dir_pin: PL7
|
||||||
|
#enable_pin: !PA3
|
||||||
|
#heater_pin: PH4
|
||||||
|
#sensor_pin: PF1
|
||||||
|
#...
|
||||||
|
|
||||||
|
[heater_bed]
|
||||||
|
heater_pin: PE5
|
||||||
|
sensor_type: EPCOS 100K B57560G104F
|
||||||
|
sensor_pin: PF2
|
||||||
|
control: watermark
|
||||||
|
min_temp: 0
|
||||||
|
max_temp: 130
|
||||||
|
max_power: 1.0
|
||||||
|
|
||||||
|
[verify_heater heater_bed]
|
||||||
|
heating_gain: 1
|
||||||
|
check_gain_time: 60
|
||||||
|
|
||||||
|
[fan]
|
||||||
|
pin: PH5
|
||||||
|
|
||||||
|
#[heater_fan heatbreak_cooling_fan]
|
||||||
|
#pin: PH3
|
||||||
|
|
||||||
|
[mcu]
|
||||||
|
serial: /dev/serial/by-id/usb-UltiMachine__ultimachine.com__RAMBo_6403335373035101E171-if00
|
||||||
|
baud: 250000
|
||||||
|
|
||||||
|
[printer]
|
||||||
|
kinematics: cartesian
|
||||||
|
max_velocity: 300
|
||||||
|
max_accel: 3000
|
||||||
|
max_z_velocity: 5
|
||||||
|
max_z_accel: 100
|
||||||
|
|
||||||
|
[ad5206 stepper_digipot]
|
||||||
|
enable_pin: PD7
|
||||||
|
# Scale the config so that the channel value can be specified in amps.
|
||||||
|
# (For Rambo v1.0d boards, use 1.56 instead.)
|
||||||
|
scale: 2.08
|
||||||
|
# Channel 1 is E0, 2 is E1, 3 is unused, 4 is Z, 5 is X, 6 is Y
|
||||||
|
channel_1: 1.34
|
||||||
|
channel_2: 1.0
|
||||||
|
channel_4: 1.1
|
||||||
|
channel_5: 1.1
|
||||||
|
channel_6: 1.1
|
||||||
|
|
||||||
|
# Enable 16 micro-steps on steppers X, Y, Z, E0, E1
|
||||||
|
[static_digital_output stepper_config]
|
||||||
|
pins:
|
||||||
|
PG1, PG0,
|
||||||
|
PK7, PG2,
|
||||||
|
PK6, PK5,
|
||||||
|
PK3, PK4,
|
||||||
|
PK1, PK2
|
||||||
|
|
||||||
|
[static_digital_output yellow_led]
|
||||||
|
pins: !PB7
|
||||||
|
|
||||||
|
# Common EXP1 / EXP2 (display) pins
|
||||||
|
[board_pins]
|
||||||
|
aliases:
|
||||||
|
# Common EXP1/EXP2 headers found on RAMBo v1.4
|
||||||
|
EXP1_1=PE6, EXP1_3=PG3, EXP1_5=PJ2, EXP1_7=PJ7, EXP1_9=<GND>,
|
||||||
|
EXP1_2=PE2, EXP1_4=PG4, EXP1_6=PJ3, EXP1_8=PJ4, EXP1_10=<5V>,
|
||||||
|
# EXP2 header
|
||||||
|
EXP2_1=PB3, EXP2_3=PJ5, EXP2_5=PJ6, EXP2_7=PD4, EXP2_9=<GND>,
|
||||||
|
EXP2_2=PB1, EXP2_4=PB0, EXP2_6=PB2, EXP2_8=PE7, EXP2_10=PH2
|
||||||
|
# Pins EXP2_1, EXP2_6, EXP2_2 are also MISO, MOSI, SCK of bus "spi"
|
||||||
|
|
||||||
|
# See the sample-lcd.cfg file for definitions of common LCD displays.
|
||||||
|
[include mainsail.cfg]
|
228
dirs/printer_data/config/printer-20240321_112054.cfg
Normal file
@ -0,0 +1,228 @@
|
|||||||
|
# This file contains common pin mappings for RAMBo boards. To use this
|
||||||
|
# config, the firmware should be compiled for the AVR atmega2560.
|
||||||
|
|
||||||
|
# See docs/Config_Reference.md for a description of parameters.
|
||||||
|
[gcode_macro CALIBRATE_NOZZLE_OFFSET]
|
||||||
|
description: Move to center of bed and calibrate nozzle offset
|
||||||
|
gcode:
|
||||||
|
G90
|
||||||
|
G0 X100 Y155 F1500
|
||||||
|
PROBE_CALIBRATE
|
||||||
|
|
||||||
|
[gcode_macro LEVEL_BED]
|
||||||
|
description: "Level the bed manually."
|
||||||
|
gcode:
|
||||||
|
BED_SCREWS_ADJUST
|
||||||
|
|
||||||
|
[gcode_macro CHECK_DEVIATION]
|
||||||
|
description: "Check the deviation of the bed from the last loaded mesh."
|
||||||
|
gcode:
|
||||||
|
SCREWS_TILT_CALCULATE MAX_DEVIATION=0.05
|
||||||
|
|
||||||
|
[gcode_macro LIZ_IS_A_BAKA]
|
||||||
|
description: "Liz is a baka, so here's her start G-Code >.<"
|
||||||
|
gcode:
|
||||||
|
BED_MESH_CALIBRATE
|
||||||
|
BED_MESH_PROFILE SAVE=default
|
||||||
|
|
||||||
|
[gcode_macro _START_GCODE]
|
||||||
|
description: "The gcode that should be called from your slicer at the beginning of a print."
|
||||||
|
gcode:
|
||||||
|
# Ender 3 Custom Start G-code
|
||||||
|
G90
|
||||||
|
G1 X2 Y30 Z30 F1500
|
||||||
|
G1 Z0.28 F240
|
||||||
|
G92 E0
|
||||||
|
G1 Y220 E10 F1500 ; prime the nozzle
|
||||||
|
G1 X2.3 F5000
|
||||||
|
G92 E0
|
||||||
|
G1 Y30 E10 F1200 ; prime the nozzle
|
||||||
|
G92 E0
|
||||||
|
G1 Z5 F1500 ; don't scratch the build plate
|
||||||
|
|
||||||
|
[gcode_macro _END_GCODE]
|
||||||
|
description: "The gcode that should be called from your slicer at the end of a print."
|
||||||
|
gcode:
|
||||||
|
G91 # Relative positioning
|
||||||
|
G1 E-2 F2700 # Retract a bit
|
||||||
|
G1 E-2 Z0.2 F2400 # Retract and raise Z
|
||||||
|
G1 X5 Y5 F3000 # Wipe out
|
||||||
|
G1 Z10 # Raise Z more
|
||||||
|
G90 # Absolute positioning
|
||||||
|
|
||||||
|
G1 X0 Y220 # Present print
|
||||||
|
M106 S0 # Turn-off fan
|
||||||
|
M104 S0 # Turn-off hotend
|
||||||
|
M140 S0 # Turn-off bed
|
||||||
|
|
||||||
|
M84 X Y E # Disable all steppers but Z
|
||||||
|
|
||||||
|
[stepper_x]
|
||||||
|
step_pin: PC0
|
||||||
|
dir_pin: PL1
|
||||||
|
enable_pin: !PA7
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 40 # Default, seems 3mm short on a 10mm move
|
||||||
|
# rotation_distance: 28 # Test 1, seems to move 1-2mm too far
|
||||||
|
# rotation_distance: 30 # Test 2, seems to move 1mm too far
|
||||||
|
rotation_distance: 33
|
||||||
|
endstop_pin: ^!PB6
|
||||||
|
#endstop_pin: ^PA2
|
||||||
|
position_endstop: 0
|
||||||
|
position_max: 298
|
||||||
|
homing_speed: 50
|
||||||
|
|
||||||
|
[stepper_y]
|
||||||
|
step_pin: PC1
|
||||||
|
dir_pin: !PL0
|
||||||
|
enable_pin: !PA6
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 40 # Default, Seems 4mm overshot
|
||||||
|
# rotation_distance: 42 # Test 1, Still seems 3-4mm overshot
|
||||||
|
rotation_distance: 46
|
||||||
|
endstop_pin: ^!PB5
|
||||||
|
#endstop_pin: ^PA1
|
||||||
|
position_endstop: 0
|
||||||
|
position_max: 280
|
||||||
|
homing_speed: 50
|
||||||
|
|
||||||
|
[stepper_z]
|
||||||
|
step_pin: PC2
|
||||||
|
dir_pin: PL2
|
||||||
|
enable_pin: !PA5
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 8 # Default, seems 1mm too short
|
||||||
|
# rotation_distance: 7.2 # Test 1, seems 3mm overshot
|
||||||
|
# rotation_distance: 8.33 # Test 2, still seems 1mm under
|
||||||
|
rotation_distance: 8
|
||||||
|
endstop_pin: probe:z_virtual_endstop
|
||||||
|
#endstop_pin: !PB4
|
||||||
|
#endstop_pin: ^PC7
|
||||||
|
# position_endstop: 0.5
|
||||||
|
position_max: 250
|
||||||
|
|
||||||
|
[bltouch]
|
||||||
|
sensor_pin: ^PB4
|
||||||
|
control_pin: PL5
|
||||||
|
x_offset: -33.0
|
||||||
|
y_offset: 9.0
|
||||||
|
#z_offset: 3.0
|
||||||
|
|
||||||
|
[bed_mesh]
|
||||||
|
speed: 120
|
||||||
|
horizontal_move_z: 7
|
||||||
|
mesh_min: 30, 40
|
||||||
|
mesh_max: 250, 230
|
||||||
|
probe_count: 5
|
||||||
|
mesh_pps: 3
|
||||||
|
algorithm: bicubic
|
||||||
|
|
||||||
|
[safe_z_home]
|
||||||
|
home_xy_position: 140, 140
|
||||||
|
speed: 50
|
||||||
|
z_hop: 10
|
||||||
|
z_hop_speed: 5
|
||||||
|
|
||||||
|
[extruder]
|
||||||
|
step_pin: PC3
|
||||||
|
dir_pin: !PL6
|
||||||
|
enable_pin: !PA4
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 33.500 # Original Setting, seems ??x too small
|
||||||
|
# rotation_distance: 16.75 # Initial test, seems to extrude 1/2 supposed
|
||||||
|
# rotation_distance: 8.375 # Test Two, still seems 1/2
|
||||||
|
rotation_distance: 4.25
|
||||||
|
nozzle_diameter: 0.400
|
||||||
|
heater_pin: PH6
|
||||||
|
filament_diameter: 2.850
|
||||||
|
#filament_diameter: 1.750
|
||||||
|
sensor_type: EPCOS 100K B57560G104F
|
||||||
|
sensor_pin: PF0
|
||||||
|
control: pid
|
||||||
|
pid_Kp: 22.2
|
||||||
|
pid_Ki: 1.08
|
||||||
|
pid_Kd: 114
|
||||||
|
min_temp: 0
|
||||||
|
max_temp: 250
|
||||||
|
|
||||||
|
#[extruder1]
|
||||||
|
#step_pin: PC4
|
||||||
|
#dir_pin: PL7
|
||||||
|
#enable_pin: !PA3
|
||||||
|
#heater_pin: PH4
|
||||||
|
#sensor_pin: PF1
|
||||||
|
#...
|
||||||
|
|
||||||
|
[heater_bed]
|
||||||
|
heater_pin: PE5
|
||||||
|
sensor_type: EPCOS 100K B57560G104F
|
||||||
|
sensor_pin: PF2
|
||||||
|
control: watermark
|
||||||
|
min_temp: 0
|
||||||
|
max_temp: 130
|
||||||
|
max_power: 1.0
|
||||||
|
|
||||||
|
[verify_heater heater_bed]
|
||||||
|
heating_gain: 1
|
||||||
|
check_gain_time: 60
|
||||||
|
|
||||||
|
[fan]
|
||||||
|
pin: PH5
|
||||||
|
|
||||||
|
#[heater_fan heatbreak_cooling_fan]
|
||||||
|
#pin: PH3
|
||||||
|
|
||||||
|
[mcu]
|
||||||
|
serial: /dev/serial/by-id/usb-UltiMachine__ultimachine.com__RAMBo_6403335373035101E171-if00
|
||||||
|
baud: 250000
|
||||||
|
|
||||||
|
[printer]
|
||||||
|
kinematics: cartesian
|
||||||
|
max_velocity: 300
|
||||||
|
max_accel: 3000
|
||||||
|
max_z_velocity: 5
|
||||||
|
max_z_accel: 100
|
||||||
|
|
||||||
|
[ad5206 stepper_digipot]
|
||||||
|
enable_pin: PD7
|
||||||
|
# Scale the config so that the channel value can be specified in amps.
|
||||||
|
# (For Rambo v1.0d boards, use 1.56 instead.)
|
||||||
|
scale: 2.08
|
||||||
|
# Channel 1 is E0, 2 is E1, 3 is unused, 4 is Z, 5 is X, 6 is Y
|
||||||
|
channel_1: 1.34
|
||||||
|
channel_2: 1.0
|
||||||
|
channel_4: 1.1
|
||||||
|
channel_5: 1.1
|
||||||
|
channel_6: 1.1
|
||||||
|
|
||||||
|
# Enable 16 micro-steps on steppers X, Y, Z, E0, E1
|
||||||
|
[static_digital_output stepper_config]
|
||||||
|
pins:
|
||||||
|
PG1, PG0,
|
||||||
|
PK7, PG2,
|
||||||
|
PK6, PK5,
|
||||||
|
PK3, PK4,
|
||||||
|
PK1, PK2
|
||||||
|
|
||||||
|
[static_digital_output yellow_led]
|
||||||
|
pins: !PB7
|
||||||
|
|
||||||
|
# Common EXP1 / EXP2 (display) pins
|
||||||
|
[board_pins]
|
||||||
|
aliases:
|
||||||
|
# Common EXP1/EXP2 headers found on RAMBo v1.4
|
||||||
|
EXP1_1=PE6, EXP1_3=PG3, EXP1_5=PJ2, EXP1_7=PJ7, EXP1_9=<GND>,
|
||||||
|
EXP1_2=PE2, EXP1_4=PG4, EXP1_6=PJ3, EXP1_8=PJ4, EXP1_10=<5V>,
|
||||||
|
# EXP2 header
|
||||||
|
EXP2_1=PB3, EXP2_3=PJ5, EXP2_5=PJ6, EXP2_7=PD4, EXP2_9=<GND>,
|
||||||
|
EXP2_2=PB1, EXP2_4=PB0, EXP2_6=PB2, EXP2_8=PE7, EXP2_10=PH2
|
||||||
|
# Pins EXP2_1, EXP2_6, EXP2_2 are also MISO, MOSI, SCK of bus "spi"
|
||||||
|
|
||||||
|
# See the sample-lcd.cfg file for definitions of common LCD displays.
|
||||||
|
[include mainsail.cfg]
|
||||||
|
|
||||||
|
#*# <---------------------- SAVE_CONFIG ---------------------->
|
||||||
|
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
|
||||||
|
#*#
|
||||||
|
#*# [bltouch]
|
||||||
|
#*# z_offset = 2.288
|
249
dirs/printer_data/config/printer-20240329_223756.cfg
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
# This file contains common pin mappings for RAMBo boards. To use this
|
||||||
|
# config, the firmware should be compiled for the AVR atmega2560.
|
||||||
|
|
||||||
|
# See docs/Config_Reference.md for a description of parameters.
|
||||||
|
[gcode_macro CALIBRATE_NOZZLE_OFFSET]
|
||||||
|
description: Move to center of bed and calibrate nozzle offset
|
||||||
|
gcode:
|
||||||
|
G90
|
||||||
|
G0 X100 Y155 F1500
|
||||||
|
PROBE_CALIBRATE
|
||||||
|
|
||||||
|
[gcode_macro LEVEL_BED]
|
||||||
|
description: "Level the bed manually."
|
||||||
|
gcode:
|
||||||
|
BED_SCREWS_ADJUST
|
||||||
|
|
||||||
|
[gcode_macro CHECK_DEVIATION]
|
||||||
|
description: "Check the deviation of the bed from the last loaded mesh."
|
||||||
|
gcode:
|
||||||
|
SCREWS_TILT_CALCULATE MAX_DEVIATION=0.05
|
||||||
|
|
||||||
|
[gcode_macro LIZ_IS_A_BAKA]
|
||||||
|
description: "Liz is a baka, so here's her start G-Code >.<"
|
||||||
|
gcode:
|
||||||
|
BED_MESH_CALIBRATE
|
||||||
|
BED_MESH_PROFILE SAVE=default
|
||||||
|
|
||||||
|
[gcode_macro _START_GCODE]
|
||||||
|
description: "The gcode that should be called from your slicer at the beginning of a print."
|
||||||
|
gcode:
|
||||||
|
# Ender 3 Custom Start G-code
|
||||||
|
G90
|
||||||
|
G1 X2 Y30 Z30 F1500
|
||||||
|
G1 Z0.28 F240
|
||||||
|
G92 E0
|
||||||
|
G1 Y220 E10 F1500 ; prime the nozzle
|
||||||
|
G1 X2.3 F5000
|
||||||
|
G92 E0
|
||||||
|
G1 Y30 E10 F1200 ; prime the nozzle
|
||||||
|
G92 E0
|
||||||
|
G1 Z5 F1500 ; don't scratch the build plate
|
||||||
|
|
||||||
|
[gcode_macro _END_GCODE]
|
||||||
|
description: "The gcode that should be called from your slicer at the end of a print."
|
||||||
|
gcode:
|
||||||
|
G91 # Relative positioning
|
||||||
|
G1 E-2 F2700 # Retract a bit
|
||||||
|
G1 E-2 Z0.2 F2400 # Retract and raise Z
|
||||||
|
G1 X5 Y5 F3000 # Wipe out
|
||||||
|
G1 Z10 # Raise Z more
|
||||||
|
G90 # Absolute positioning
|
||||||
|
|
||||||
|
G1 X0 Y220 # Present print
|
||||||
|
M106 S0 # Turn-off fan
|
||||||
|
M104 S0 # Turn-off hotend
|
||||||
|
M140 S0 # Turn-off bed
|
||||||
|
|
||||||
|
M84 X Y E # Disable all steppers but Z
|
||||||
|
|
||||||
|
[stepper_x]
|
||||||
|
step_pin: PC0
|
||||||
|
dir_pin: PL1
|
||||||
|
enable_pin: !PA7
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 40 # Default, seems 3mm short on a 10mm move
|
||||||
|
# rotation_distance: 28 # Test 1, seems to move 1-2mm too far
|
||||||
|
# rotation_distance: 30 # Test 2, seems to move 1mm too far
|
||||||
|
rotation_distance: 33
|
||||||
|
endstop_pin: ^!PB6
|
||||||
|
#endstop_pin: ^PA2
|
||||||
|
position_endstop: 0
|
||||||
|
position_max: 298
|
||||||
|
homing_speed: 50
|
||||||
|
|
||||||
|
[stepper_y]
|
||||||
|
step_pin: PC1
|
||||||
|
dir_pin: !PL0
|
||||||
|
enable_pin: !PA6
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 40 # Default, Seems 4mm overshot
|
||||||
|
# rotation_distance: 42 # Test 1, Still seems 3-4mm overshot
|
||||||
|
rotation_distance: 46
|
||||||
|
endstop_pin: ^!PB5
|
||||||
|
#endstop_pin: ^PA1
|
||||||
|
position_endstop: 0
|
||||||
|
position_max: 280
|
||||||
|
homing_speed: 50
|
||||||
|
|
||||||
|
[stepper_z]
|
||||||
|
step_pin: PC2
|
||||||
|
dir_pin: PL2
|
||||||
|
enable_pin: !PA5
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 8 # Default, seems 1mm too short
|
||||||
|
# rotation_distance: 7.2 # Test 1, seems 3mm overshot
|
||||||
|
# rotation_distance: 8.33 # Test 2, still seems 1mm under
|
||||||
|
rotation_distance: 8
|
||||||
|
endstop_pin: probe:z_virtual_endstop
|
||||||
|
#endstop_pin: !PB4
|
||||||
|
#endstop_pin: ^PC7
|
||||||
|
# position_endstop: 0.5
|
||||||
|
position_max: 250
|
||||||
|
|
||||||
|
[bltouch]
|
||||||
|
sensor_pin: ^PB4
|
||||||
|
control_pin: PL5
|
||||||
|
x_offset: -33.0
|
||||||
|
y_offset: 9.0
|
||||||
|
#z_offset: 3.0
|
||||||
|
|
||||||
|
[bed_mesh]
|
||||||
|
speed: 120
|
||||||
|
horizontal_move_z: 7
|
||||||
|
mesh_min: 30, 40
|
||||||
|
mesh_max: 250, 230
|
||||||
|
probe_count: 5
|
||||||
|
mesh_pps: 3
|
||||||
|
algorithm: bicubic
|
||||||
|
|
||||||
|
[safe_z_home]
|
||||||
|
home_xy_position: 140, 140
|
||||||
|
speed: 50
|
||||||
|
z_hop: 10
|
||||||
|
z_hop_speed: 5
|
||||||
|
|
||||||
|
[extruder]
|
||||||
|
step_pin: PC3
|
||||||
|
dir_pin: !PL6
|
||||||
|
enable_pin: !PA4
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 33.500 # Original Setting, seems ??x too small
|
||||||
|
# rotation_distance: 16.75 # Initial test, seems to extrude 1/2 supposed
|
||||||
|
# rotation_distance: 8.375 # Test Two, still seems 1/2
|
||||||
|
# rotation_distance: 4.25 # Old Extruder Setup
|
||||||
|
rotation_distance: 7.9797 # Copied from Replimat
|
||||||
|
nozzle_diameter: 0.400
|
||||||
|
heater_pin: PH6
|
||||||
|
# filament_diameter: 2.850
|
||||||
|
filament_diameter: 1.750
|
||||||
|
# sensor_type: EPCOS 100K B57560G104F # Either it's not connecting right, or this is the wronf sensor
|
||||||
|
sensor_type: NTC 100K MGB18-104F39050L32 # Probably just disconnected
|
||||||
|
sensor_pin: PF0
|
||||||
|
control: pid
|
||||||
|
pid_Kp: 22.2
|
||||||
|
pid_Ki: 1.08
|
||||||
|
pid_Kd: 114
|
||||||
|
min_temp: 0
|
||||||
|
max_temp: 990
|
||||||
|
|
||||||
|
#[extruder1]
|
||||||
|
#step_pin: PC4
|
||||||
|
#dir_pin: PL7
|
||||||
|
#enable_pin: !PA3
|
||||||
|
#heater_pin: PH4
|
||||||
|
#sensor_pin: PF1
|
||||||
|
#...
|
||||||
|
|
||||||
|
[heater_bed]
|
||||||
|
heater_pin: PE5
|
||||||
|
sensor_type: EPCOS 100K B57560G104F
|
||||||
|
sensor_pin: PF2
|
||||||
|
control: watermark
|
||||||
|
min_temp: 0
|
||||||
|
max_temp: 130
|
||||||
|
max_power: 1.0
|
||||||
|
|
||||||
|
[verify_heater heater_bed]
|
||||||
|
heating_gain: 1
|
||||||
|
check_gain_time: 60
|
||||||
|
|
||||||
|
[fan]
|
||||||
|
pin: PH3
|
||||||
|
|
||||||
|
[heater_fan heatbreak_cooling_fan]
|
||||||
|
pin: PH5
|
||||||
|
|
||||||
|
[mcu]
|
||||||
|
serial: /dev/serial/by-id/usb-UltiMachine__ultimachine.com__RAMBo_6403335373035101E171-if00
|
||||||
|
baud: 250000
|
||||||
|
|
||||||
|
[printer]
|
||||||
|
kinematics: cartesian
|
||||||
|
max_velocity: 300
|
||||||
|
max_accel: 3000
|
||||||
|
max_z_velocity: 5
|
||||||
|
max_z_accel: 100
|
||||||
|
|
||||||
|
[ad5206 stepper_digipot]
|
||||||
|
enable_pin: PD7
|
||||||
|
# Scale the config so that the channel value can be specified in amps.
|
||||||
|
# (For Rambo v1.0d boards, use 1.56 instead.)
|
||||||
|
scale: 2.08
|
||||||
|
# Channel 1 is E0, 2 is E1, 3 is unused, 4 is Z, 5 is X, 6 is Y
|
||||||
|
channel_1: 1.34
|
||||||
|
channel_2: 1.0
|
||||||
|
channel_4: 1.1
|
||||||
|
channel_5: 1.1
|
||||||
|
channel_6: 1.1
|
||||||
|
|
||||||
|
# Enable 16 micro-steps on steppers X, Y, Z, E0, E1
|
||||||
|
[static_digital_output stepper_config]
|
||||||
|
pins:
|
||||||
|
PG1, PG0,
|
||||||
|
PK7, PG2,
|
||||||
|
PK6, PK5,
|
||||||
|
PK3, PK4,
|
||||||
|
PK1, PK2
|
||||||
|
|
||||||
|
[static_digital_output yellow_led]
|
||||||
|
pins: !PB7
|
||||||
|
|
||||||
|
# Common EXP1 / EXP2 (display) pins
|
||||||
|
[board_pins]
|
||||||
|
aliases:
|
||||||
|
# Common EXP1/EXP2 headers found on RAMBo v1.4
|
||||||
|
EXP1_1=PE6, EXP1_3=PG3, EXP1_5=PJ2, EXP1_7=PJ7, EXP1_9=<GND>,
|
||||||
|
EXP1_2=PE2, EXP1_4=PG4, EXP1_6=PJ3, EXP1_8=PJ4, EXP1_10=<5V>,
|
||||||
|
# EXP2 header
|
||||||
|
EXP2_1=PB3, EXP2_3=PJ5, EXP2_5=PJ6, EXP2_7=PD4, EXP2_9=<GND>,
|
||||||
|
EXP2_2=PB1, EXP2_4=PB0, EXP2_6=PB2, EXP2_8=PE7, EXP2_10=PH2
|
||||||
|
# Pins EXP2_1, EXP2_6, EXP2_2 are also MISO, MOSI, SCK of bus "spi"
|
||||||
|
|
||||||
|
# See the sample-lcd.cfg file for definitions of common LCD displays.
|
||||||
|
[include mainsail.cfg]
|
||||||
|
|
||||||
|
#*# <---------------------- SAVE_CONFIG ---------------------->
|
||||||
|
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
|
||||||
|
#*#
|
||||||
|
#*# [bltouch]
|
||||||
|
#*# z_offset = 2.288
|
||||||
|
#*#
|
||||||
|
#*# [bed_mesh default]
|
||||||
|
#*# version = 1
|
||||||
|
#*# points =
|
||||||
|
#*# -1.065000, -0.857500, -0.817500, -0.865000, -0.927500
|
||||||
|
#*# -0.592500, -0.502500, -0.442500, -0.482500, -0.522500
|
||||||
|
#*# -0.172500, -0.070000, -0.027500, -0.040000, -0.057500
|
||||||
|
#*# 0.182500, 0.265000, 0.312500, 0.302500, 0.332500
|
||||||
|
#*# 0.480000, 0.610000, 0.670000, 0.715000, 0.735000
|
||||||
|
#*# x_count = 5
|
||||||
|
#*# y_count = 5
|
||||||
|
#*# mesh_x_pps = 3
|
||||||
|
#*# mesh_y_pps = 3
|
||||||
|
#*# algo = bicubic
|
||||||
|
#*# tension = 0.2
|
||||||
|
#*# min_x = 30.0
|
||||||
|
#*# max_x = 250.0
|
||||||
|
#*# min_y = 39.989999999999995
|
||||||
|
#*# max_y = 230.0
|
255
dirs/printer_data/config/printer-20240330_002211.cfg
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
# This file contains common pin mappings for RAMBo boards. To use this
|
||||||
|
# config, the firmware should be compiled for the AVR atmega2560.
|
||||||
|
|
||||||
|
# See docs/Config_Reference.md for a description of parameters.
|
||||||
|
[gcode_macro CALIBRATE_NOZZLE_OFFSET]
|
||||||
|
description: Move to center of bed and calibrate nozzle offset
|
||||||
|
gcode:
|
||||||
|
G90
|
||||||
|
G0 X100 Y155 F1500
|
||||||
|
PROBE_CALIBRATE
|
||||||
|
|
||||||
|
[gcode_macro LEVEL_BED]
|
||||||
|
description: "Level the bed manually."
|
||||||
|
gcode:
|
||||||
|
BED_SCREWS_ADJUST
|
||||||
|
|
||||||
|
[gcode_macro CHECK_DEVIATION]
|
||||||
|
description: "Check the deviation of the bed from the last loaded mesh."
|
||||||
|
gcode:
|
||||||
|
SCREWS_TILT_CALCULATE MAX_DEVIATION=0.05
|
||||||
|
|
||||||
|
[gcode_macro LIZ_IS_A_BAKA]
|
||||||
|
description: "Liz is a baka, so here's her start G-Code >.<"
|
||||||
|
gcode:
|
||||||
|
BED_MESH_CALIBRATE
|
||||||
|
BED_MESH_PROFILE SAVE=default
|
||||||
|
|
||||||
|
[gcode_macro _START_GCODE]
|
||||||
|
description: "The gcode that should be called from your slicer at the beginning of a print."
|
||||||
|
gcode:
|
||||||
|
# Ender 3 Custom Start G-code
|
||||||
|
G90
|
||||||
|
G1 X2 Y30 Z30 F1500
|
||||||
|
G1 Z0.28 F240
|
||||||
|
G92 E0
|
||||||
|
G1 Y220 E10 F1500 ; prime the nozzle
|
||||||
|
G1 X2.3 F5000
|
||||||
|
G92 E0
|
||||||
|
G1 Y30 E10 F1200 ; prime the nozzle
|
||||||
|
G92 E0
|
||||||
|
G1 Z5 F1500 ; don't scratch the build plate
|
||||||
|
|
||||||
|
[gcode_macro _END_GCODE]
|
||||||
|
description: "The gcode that should be called from your slicer at the end of a print."
|
||||||
|
gcode:
|
||||||
|
G91 # Relative positioning
|
||||||
|
G1 E-2 F2700 # Retract a bit
|
||||||
|
G1 E-2 Z0.2 F2400 # Retract and raise Z
|
||||||
|
G1 X5 Y5 F3000 # Wipe out
|
||||||
|
G1 Z10 # Raise Z more
|
||||||
|
G90 # Absolute positioning
|
||||||
|
|
||||||
|
G1 X0 Y220 # Present print
|
||||||
|
M106 S0 # Turn-off fan
|
||||||
|
M104 S0 # Turn-off hotend
|
||||||
|
M140 S0 # Turn-off bed
|
||||||
|
|
||||||
|
M84 X Y E # Disable all steppers but Z
|
||||||
|
|
||||||
|
[stepper_x]
|
||||||
|
step_pin: PC0
|
||||||
|
dir_pin: PL1
|
||||||
|
enable_pin: !PA7
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 40 # Default, seems 3mm short on a 10mm move
|
||||||
|
# rotation_distance: 28 # Test 1, seems to move 1-2mm too far
|
||||||
|
# rotation_distance: 30 # Test 2, seems to move 1mm too far
|
||||||
|
rotation_distance: 33
|
||||||
|
endstop_pin: ^!PB6
|
||||||
|
#endstop_pin: ^PA2
|
||||||
|
position_endstop: 0
|
||||||
|
position_max: 298
|
||||||
|
homing_speed: 50
|
||||||
|
|
||||||
|
[stepper_y]
|
||||||
|
step_pin: PC1
|
||||||
|
dir_pin: !PL0
|
||||||
|
enable_pin: !PA6
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 40 # Default, Seems 4mm overshot
|
||||||
|
# rotation_distance: 42 # Test 1, Still seems 3-4mm overshot
|
||||||
|
rotation_distance: 46
|
||||||
|
endstop_pin: ^!PB5
|
||||||
|
#endstop_pin: ^PA1
|
||||||
|
position_endstop: 0
|
||||||
|
position_max: 280
|
||||||
|
homing_speed: 50
|
||||||
|
|
||||||
|
[stepper_z]
|
||||||
|
step_pin: PC2
|
||||||
|
dir_pin: PL2
|
||||||
|
enable_pin: !PA5
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 8 # Default, seems 1mm too short
|
||||||
|
# rotation_distance: 7.2 # Test 1, seems 3mm overshot
|
||||||
|
# rotation_distance: 8.33 # Test 2, still seems 1mm under
|
||||||
|
rotation_distance: 8
|
||||||
|
endstop_pin: probe:z_virtual_endstop
|
||||||
|
#endstop_pin: !PB4
|
||||||
|
#endstop_pin: ^PC7
|
||||||
|
# position_endstop: 0.5
|
||||||
|
position_max: 250
|
||||||
|
|
||||||
|
[bltouch]
|
||||||
|
sensor_pin: ^PB4
|
||||||
|
control_pin: PL5
|
||||||
|
x_offset: -44
|
||||||
|
y_offset: 8
|
||||||
|
z_offset: 3.0
|
||||||
|
|
||||||
|
[bed_mesh]
|
||||||
|
speed: 120
|
||||||
|
horizontal_move_z: 7
|
||||||
|
mesh_min: 30, 40
|
||||||
|
mesh_max: 250, 230
|
||||||
|
probe_count: 5
|
||||||
|
mesh_pps: 3
|
||||||
|
algorithm: bicubic
|
||||||
|
|
||||||
|
[safe_z_home]
|
||||||
|
home_xy_position: 140, 140
|
||||||
|
speed: 50
|
||||||
|
z_hop: 10
|
||||||
|
z_hop_speed: 5
|
||||||
|
|
||||||
|
[extruder]
|
||||||
|
step_pin: PC3
|
||||||
|
dir_pin: !PL6
|
||||||
|
enable_pin: !PA4
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 33.500 # Original Setting, seems ??x too small
|
||||||
|
# rotation_distance: 16.75 # Initial test, seems to extrude 1/2 supposed
|
||||||
|
# rotation_distance: 8.375 # Test Two, still seems 1/2
|
||||||
|
# rotation_distance: 4.25 # Old Extruder Setup
|
||||||
|
rotation_distance: 7.9797 # Copied from Replimat
|
||||||
|
nozzle_diameter: 0.400
|
||||||
|
heater_pin: PH6
|
||||||
|
# filament_diameter: 2.850
|
||||||
|
filament_diameter: 1.750
|
||||||
|
# sensor_type: EPCOS 100K B57560G104F # Either it's not connecting right, or this is the wronf sensor
|
||||||
|
sensor_type: NTC 100K MGB18-104F39050L32 # Probably just disconnected
|
||||||
|
sensor_pin: PF0
|
||||||
|
#control: pid
|
||||||
|
#pid_Kp: 22.2
|
||||||
|
#pid_Ki: 1.08
|
||||||
|
#pid_Kd: 114
|
||||||
|
min_temp: 0
|
||||||
|
max_temp: 990
|
||||||
|
|
||||||
|
#[extruder1]
|
||||||
|
#step_pin: PC4
|
||||||
|
#dir_pin: PL7
|
||||||
|
#enable_pin: !PA3
|
||||||
|
#heater_pin: PH4
|
||||||
|
#sensor_pin: PF1
|
||||||
|
#...
|
||||||
|
|
||||||
|
[heater_bed]
|
||||||
|
heater_pin: PE5
|
||||||
|
sensor_type: EPCOS 100K B57560G104F
|
||||||
|
sensor_pin: PF2
|
||||||
|
control: watermark
|
||||||
|
min_temp: 0
|
||||||
|
max_temp: 130
|
||||||
|
max_power: 1.0
|
||||||
|
|
||||||
|
[verify_heater heater_bed]
|
||||||
|
heating_gain: 1
|
||||||
|
check_gain_time: 60
|
||||||
|
|
||||||
|
[fan]
|
||||||
|
pin: PH3
|
||||||
|
|
||||||
|
[heater_fan heatbreak_cooling_fan]
|
||||||
|
pin: PH5
|
||||||
|
|
||||||
|
[mcu]
|
||||||
|
serial: /dev/serial/by-id/usb-UltiMachine__ultimachine.com__RAMBo_6403335373035101E171-if00
|
||||||
|
baud: 250000
|
||||||
|
|
||||||
|
[printer]
|
||||||
|
kinematics: cartesian
|
||||||
|
max_velocity: 300
|
||||||
|
max_accel: 3000
|
||||||
|
max_z_velocity: 5
|
||||||
|
max_z_accel: 100
|
||||||
|
|
||||||
|
[ad5206 stepper_digipot]
|
||||||
|
enable_pin: PD7
|
||||||
|
# Scale the config so that the channel value can be specified in amps.
|
||||||
|
# (For Rambo v1.0d boards, use 1.56 instead.)
|
||||||
|
scale: 2.08
|
||||||
|
# Channel 1 is E0, 2 is E1, 3 is unused, 4 is Z, 5 is X, 6 is Y
|
||||||
|
channel_1: 1.34
|
||||||
|
channel_2: 1.0
|
||||||
|
channel_4: 1.1
|
||||||
|
channel_5: 1.1
|
||||||
|
channel_6: 1.1
|
||||||
|
|
||||||
|
# Enable 16 micro-steps on steppers X, Y, Z, E0, E1
|
||||||
|
[static_digital_output stepper_config]
|
||||||
|
pins:
|
||||||
|
PG1, PG0,
|
||||||
|
PK7, PG2,
|
||||||
|
PK6, PK5,
|
||||||
|
PK3, PK4,
|
||||||
|
PK1, PK2
|
||||||
|
|
||||||
|
[static_digital_output yellow_led]
|
||||||
|
pins: !PB7
|
||||||
|
|
||||||
|
# Common EXP1 / EXP2 (display) pins
|
||||||
|
[board_pins]
|
||||||
|
aliases:
|
||||||
|
# Common EXP1/EXP2 headers found on RAMBo v1.4
|
||||||
|
EXP1_1=PE6, EXP1_3=PG3, EXP1_5=PJ2, EXP1_7=PJ7, EXP1_9=<GND>,
|
||||||
|
EXP1_2=PE2, EXP1_4=PG4, EXP1_6=PJ3, EXP1_8=PJ4, EXP1_10=<5V>,
|
||||||
|
# EXP2 header
|
||||||
|
EXP2_1=PB3, EXP2_3=PJ5, EXP2_5=PJ6, EXP2_7=PD4, EXP2_9=<GND>,
|
||||||
|
EXP2_2=PB1, EXP2_4=PB0, EXP2_6=PB2, EXP2_8=PE7, EXP2_10=PH2
|
||||||
|
# Pins EXP2_1, EXP2_6, EXP2_2 are also MISO, MOSI, SCK of bus "spi"
|
||||||
|
|
||||||
|
# See the sample-lcd.cfg file for definitions of common LCD displays.
|
||||||
|
[include mainsail.cfg]
|
||||||
|
|
||||||
|
#*# <---------------------- SAVE_CONFIG ---------------------->
|
||||||
|
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
|
||||||
|
#*#
|
||||||
|
#*# [bltouch]
|
||||||
|
#*# z_offset = 2.288
|
||||||
|
#*#
|
||||||
|
#*# [bed_mesh default]
|
||||||
|
#*# version = 1
|
||||||
|
#*# points =
|
||||||
|
#*# -1.065000, -0.857500, -0.817500, -0.865000, -0.927500
|
||||||
|
#*# -0.592500, -0.502500, -0.442500, -0.482500, -0.522500
|
||||||
|
#*# -0.172500, -0.070000, -0.027500, -0.040000, -0.057500
|
||||||
|
#*# 0.182500, 0.265000, 0.312500, 0.302500, 0.332500
|
||||||
|
#*# 0.480000, 0.610000, 0.670000, 0.715000, 0.735000
|
||||||
|
#*# x_count = 5
|
||||||
|
#*# y_count = 5
|
||||||
|
#*# mesh_x_pps = 3
|
||||||
|
#*# mesh_y_pps = 3
|
||||||
|
#*# algo = bicubic
|
||||||
|
#*# tension = 0.2
|
||||||
|
#*# min_x = 30.0
|
||||||
|
#*# max_x = 250.0
|
||||||
|
#*# min_y = 39.989999999999995
|
||||||
|
#*# max_y = 230.0
|
||||||
|
#*#
|
||||||
|
#*# [extruder]
|
||||||
|
#*# control = pid
|
||||||
|
#*# pid_kp = 23.769
|
||||||
|
#*# pid_ki = 1.248
|
||||||
|
#*# pid_kd = 113.201
|
278
dirs/printer_data/config/printer.cfg
Normal file
@ -0,0 +1,278 @@
|
|||||||
|
# This file contains common pin mappings for RAMBo boards. To use this
|
||||||
|
# config, the firmware should be compiled for the AVR atmega2560.
|
||||||
|
|
||||||
|
# See docs/Config_Reference.md for a description of parameters.
|
||||||
|
[gcode_macro CALIBRATE_NOZZLE_OFFSET]
|
||||||
|
description: Move to center of bed and calibrate nozzle offset
|
||||||
|
gcode:
|
||||||
|
G90
|
||||||
|
G0 X100 Y155 F1500
|
||||||
|
PROBE_CALIBRATE
|
||||||
|
|
||||||
|
[gcode_macro LEVEL_BED]
|
||||||
|
description: "Level the bed manually."
|
||||||
|
gcode:
|
||||||
|
BED_SCREWS_ADJUST
|
||||||
|
|
||||||
|
[gcode_macro CHECK_DEVIATION]
|
||||||
|
description: "Check the deviation of the bed from the last loaded mesh."
|
||||||
|
gcode:
|
||||||
|
SCREWS_TILT_CALCULATE MAX_DEVIATION=0.05
|
||||||
|
|
||||||
|
[gcode_macro LIZ_IS_A_BAKA]
|
||||||
|
description: "Liz is a baka, so here's her start G-Code >.<"
|
||||||
|
gcode:
|
||||||
|
BED_MESH_CALIBRATE
|
||||||
|
BED_MESH_PROFILE SAVE=default
|
||||||
|
|
||||||
|
[gcode_macro _START_GCODE]
|
||||||
|
description: "The gcode that should be called from your slicer at the beginning of a print."
|
||||||
|
gcode:
|
||||||
|
# Ender 3 Custom Start G-code
|
||||||
|
G90
|
||||||
|
G1 X2 Y30 Z30 F1500
|
||||||
|
G1 Z0.28 F240
|
||||||
|
G92 E0
|
||||||
|
G1 Y220 E10 F1500 ; prime the nozzle
|
||||||
|
G1 X2.3 F5000
|
||||||
|
G92 E0
|
||||||
|
G1 Y30 E10 F1200 ; prime the nozzle
|
||||||
|
G92 E0
|
||||||
|
G1 Z5 F1500 ; don't scratch the build plate
|
||||||
|
|
||||||
|
[gcode_macro _END_GCODE]
|
||||||
|
description: "The gcode that should be called from your slicer at the end of a print."
|
||||||
|
gcode:
|
||||||
|
G91 # Relative positioning
|
||||||
|
G1 E-2 F2700 # Retract a bit
|
||||||
|
G1 E-2 Z0.2 F2400 # Retract and raise Z
|
||||||
|
G1 X5 Y5 F3000 # Wipe out
|
||||||
|
G1 Z10 # Raise Z more
|
||||||
|
G90 # Absolute positioning
|
||||||
|
|
||||||
|
G1 X0 Y220 # Present print
|
||||||
|
M106 S0 # Turn-off fan
|
||||||
|
M104 S0 # Turn-off hotend
|
||||||
|
M140 S0 # Turn-off bed
|
||||||
|
|
||||||
|
M84 X Y E # Disable all steppers but Z
|
||||||
|
|
||||||
|
[stepper_x]
|
||||||
|
step_pin: PC0
|
||||||
|
dir_pin: PL1
|
||||||
|
enable_pin: !PA7
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 40 # Default, seems 3mm short on a 10mm move
|
||||||
|
# rotation_distance: 28 # Test 1, seems to move 1-2mm too far
|
||||||
|
# rotation_distance: 30 # Test 2, seems to move 1mm too far
|
||||||
|
rotation_distance: 33
|
||||||
|
endstop_pin: ^!PB6
|
||||||
|
#endstop_pin: ^PA2
|
||||||
|
position_endstop: 0
|
||||||
|
position_max: 298
|
||||||
|
homing_speed: 50
|
||||||
|
|
||||||
|
[stepper_y]
|
||||||
|
step_pin: PC1
|
||||||
|
dir_pin: !PL0
|
||||||
|
enable_pin: !PA6
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 40 # Default, Seems 4mm overshot
|
||||||
|
# rotation_distance: 42 # Test 1, Still seems 3-4mm overshot
|
||||||
|
rotation_distance: 46
|
||||||
|
endstop_pin: ^!PB5
|
||||||
|
#endstop_pin: ^PA1
|
||||||
|
position_endstop: 0
|
||||||
|
position_max: 280
|
||||||
|
homing_speed: 50
|
||||||
|
|
||||||
|
[stepper_z]
|
||||||
|
step_pin: PC2
|
||||||
|
dir_pin: PL2
|
||||||
|
enable_pin: !PA5
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 8 # Default, seems 1mm too short
|
||||||
|
# rotation_distance: 7.2 # Test 1, seems 3mm overshot
|
||||||
|
# rotation_distance: 8.33 # Test 2, still seems 1mm under
|
||||||
|
rotation_distance: 8
|
||||||
|
endstop_pin: probe:z_virtual_endstop
|
||||||
|
#endstop_pin: !PB4
|
||||||
|
#endstop_pin: ^PC7
|
||||||
|
# position_endstop: 0.5
|
||||||
|
position_max: 250
|
||||||
|
|
||||||
|
[bltouch]
|
||||||
|
sensor_pin: ^PB4
|
||||||
|
control_pin: PL5
|
||||||
|
x_offset: -44
|
||||||
|
y_offset: 8
|
||||||
|
#z_offset: 3.0
|
||||||
|
|
||||||
|
[bed_mesh]
|
||||||
|
speed: 120
|
||||||
|
horizontal_move_z: 7
|
||||||
|
mesh_min: 30, 40
|
||||||
|
mesh_max: 250, 230
|
||||||
|
probe_count: 5
|
||||||
|
mesh_pps: 3
|
||||||
|
algorithm: bicubic
|
||||||
|
|
||||||
|
[safe_z_home]
|
||||||
|
home_xy_position: 140, 140
|
||||||
|
speed: 50
|
||||||
|
z_hop: 10
|
||||||
|
z_hop_speed: 5
|
||||||
|
|
||||||
|
[extruder]
|
||||||
|
step_pin: PC3
|
||||||
|
dir_pin: PL6
|
||||||
|
enable_pin: !PA4
|
||||||
|
microsteps: 16
|
||||||
|
# rotation_distance: 33.500 # Original Setting, seems ??x too small
|
||||||
|
# rotation_distance: 16.75 # Initial test, seems to extrude 1/2 supposed
|
||||||
|
# rotation_distance: 8.375 # Test Two, still seems 1/2
|
||||||
|
# rotation_distance: 4.25 # Old Extruder Setup
|
||||||
|
rotation_distance: 7.9797 # Copied from Replimat
|
||||||
|
nozzle_diameter: 0.400
|
||||||
|
heater_pin: PH6
|
||||||
|
# filament_diameter: 2.850
|
||||||
|
filament_diameter: 1.750
|
||||||
|
# sensor_type: EPCOS 100K B57560G104F # Either it's not connecting right, or this is the wronf sensor
|
||||||
|
sensor_type: NTC 100K MGB18-104F39050L32 # Probably just disconnected
|
||||||
|
sensor_pin: PF0
|
||||||
|
#control: pid
|
||||||
|
#pid_Kp: 22.2
|
||||||
|
#pid_Ki: 1.08
|
||||||
|
#pid_Kd: 114
|
||||||
|
min_temp: 0
|
||||||
|
max_temp: 990
|
||||||
|
|
||||||
|
#[extruder1]
|
||||||
|
#step_pin: PC4
|
||||||
|
#dir_pin: PL7
|
||||||
|
#enable_pin: !PA3
|
||||||
|
#heater_pin: PH4
|
||||||
|
#sensor_pin: PF1
|
||||||
|
#...
|
||||||
|
|
||||||
|
[heater_bed]
|
||||||
|
heater_pin: PE5
|
||||||
|
sensor_type: EPCOS 100K B57560G104F
|
||||||
|
sensor_pin: PF2
|
||||||
|
control: watermark
|
||||||
|
min_temp: 0
|
||||||
|
max_temp: 130
|
||||||
|
max_power: 1.0
|
||||||
|
|
||||||
|
[verify_heater heater_bed]
|
||||||
|
heating_gain: 1
|
||||||
|
check_gain_time: 60
|
||||||
|
|
||||||
|
[fan]
|
||||||
|
pin: PH3
|
||||||
|
|
||||||
|
[heater_fan heatbreak_cooling_fan]
|
||||||
|
pin: PH5
|
||||||
|
fan_speed: 1.0
|
||||||
|
# The fan speed (expressed as a value from 0.0 to 1.0) that the fan
|
||||||
|
# will be set to when its associated heater is enabled. The default
|
||||||
|
# is 1.0
|
||||||
|
#max_power:
|
||||||
|
#shutdown_speed:
|
||||||
|
#cycle_time:
|
||||||
|
#hardware_pwm:
|
||||||
|
#kick_start_time:
|
||||||
|
#off_below:
|
||||||
|
#tachometer_pin:
|
||||||
|
#tachometer_ppr:
|
||||||
|
#tachometer_poll_interval:
|
||||||
|
#enable_pin:
|
||||||
|
# See the "fan" section for a description of the above parameters.
|
||||||
|
heater: extruder
|
||||||
|
# Name of the config section defining the heater that this fan is
|
||||||
|
# associated with. If a comma separated list of heater names is
|
||||||
|
# provided here, then the fan will be enabled when any of the given
|
||||||
|
# heaters are enabled. The default is "extruder".
|
||||||
|
heater_temp: 50.0
|
||||||
|
# A temperature (in Celsius) that the heater must drop below before
|
||||||
|
# the fan is disabled. The default is 50 Celsius.
|
||||||
|
|
||||||
|
[mcu]
|
||||||
|
serial: /dev/serial/by-id/usb-UltiMachine__ultimachine.com__RAMBo_6403335373035101E171-if00
|
||||||
|
baud: 250000
|
||||||
|
|
||||||
|
[printer]
|
||||||
|
kinematics: cartesian
|
||||||
|
max_velocity: 300
|
||||||
|
max_accel: 3000
|
||||||
|
max_z_velocity: 5
|
||||||
|
max_z_accel: 100
|
||||||
|
|
||||||
|
[ad5206 stepper_digipot]
|
||||||
|
enable_pin: PD7
|
||||||
|
# Scale the config so that the channel value can be specified in amps.
|
||||||
|
# (For Rambo v1.0d boards, use 1.56 instead.)
|
||||||
|
scale: 2.08
|
||||||
|
# Channel 1 is E0, 2 is E1, 3 is unused, 4 is Z, 5 is X, 6 is Y
|
||||||
|
channel_1: 1.34
|
||||||
|
channel_2: 1.0
|
||||||
|
channel_4: 1.1
|
||||||
|
channel_5: 1.1
|
||||||
|
channel_6: 1.1
|
||||||
|
|
||||||
|
# Enable 16 micro-steps on steppers X, Y, Z, E0, E1
|
||||||
|
[static_digital_output stepper_config]
|
||||||
|
pins:
|
||||||
|
PG1, PG0,
|
||||||
|
PK7, PG2,
|
||||||
|
PK6, PK5,
|
||||||
|
PK3, PK4,
|
||||||
|
PK1, PK2
|
||||||
|
|
||||||
|
[static_digital_output yellow_led]
|
||||||
|
pins: !PB7
|
||||||
|
|
||||||
|
# Common EXP1 / EXP2 (display) pins
|
||||||
|
[board_pins]
|
||||||
|
aliases:
|
||||||
|
# Common EXP1/EXP2 headers found on RAMBo v1.4
|
||||||
|
EXP1_1=PE6, EXP1_3=PG3, EXP1_5=PJ2, EXP1_7=PJ7, EXP1_9=<GND>,
|
||||||
|
EXP1_2=PE2, EXP1_4=PG4, EXP1_6=PJ3, EXP1_8=PJ4, EXP1_10=<5V>,
|
||||||
|
# EXP2 header
|
||||||
|
EXP2_1=PB3, EXP2_3=PJ5, EXP2_5=PJ6, EXP2_7=PD4, EXP2_9=<GND>,
|
||||||
|
EXP2_2=PB1, EXP2_4=PB0, EXP2_6=PB2, EXP2_8=PE7, EXP2_10=PH2
|
||||||
|
# Pins EXP2_1, EXP2_6, EXP2_2 are also MISO, MOSI, SCK of bus "spi"
|
||||||
|
|
||||||
|
# See the sample-lcd.cfg file for definitions of common LCD displays.
|
||||||
|
[include mainsail.cfg]
|
||||||
|
|
||||||
|
#*# <---------------------- SAVE_CONFIG ---------------------->
|
||||||
|
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
|
||||||
|
#*#
|
||||||
|
#*# [bltouch]
|
||||||
|
#*# z_offset = 2.850
|
||||||
|
#*#
|
||||||
|
#*# [bed_mesh default]
|
||||||
|
#*# version = 1
|
||||||
|
#*# points =
|
||||||
|
#*# -1.065000, -0.857500, -0.817500, -0.865000, -0.927500
|
||||||
|
#*# -0.592500, -0.502500, -0.442500, -0.482500, -0.522500
|
||||||
|
#*# -0.172500, -0.070000, -0.027500, -0.040000, -0.057500
|
||||||
|
#*# 0.182500, 0.265000, 0.312500, 0.302500, 0.332500
|
||||||
|
#*# 0.480000, 0.610000, 0.670000, 0.715000, 0.735000
|
||||||
|
#*# x_count = 5
|
||||||
|
#*# y_count = 5
|
||||||
|
#*# mesh_x_pps = 3
|
||||||
|
#*# mesh_y_pps = 3
|
||||||
|
#*# algo = bicubic
|
||||||
|
#*# tension = 0.2
|
||||||
|
#*# min_x = 30.0
|
||||||
|
#*# max_x = 250.0
|
||||||
|
#*# min_y = 39.989999999999995
|
||||||
|
#*# max_y = 230.0
|
||||||
|
#*#
|
||||||
|
#*# [extruder]
|
||||||
|
#*# control = pid
|
||||||
|
#*# pid_kp = 23.769
|
||||||
|
#*# pid_ki = 1.248
|
||||||
|
#*# pid_kd = 113.201
|
17
dirs/printer_data/config/sonar.conf
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#### Sonar - A WiFi Keepalive daemon
|
||||||
|
####
|
||||||
|
#### Written by Stephan Wendel aka KwadFan <me@stephanwe.de>
|
||||||
|
#### Copyright 2022
|
||||||
|
#### https://github.com/mainsail-crew/sonar
|
||||||
|
####
|
||||||
|
#### This File is distributed under GPLv3
|
||||||
|
####
|
||||||
|
|
||||||
|
[sonar]
|
||||||
|
enable: false # false to disable till next reboot (will stop again if not set to true)
|
||||||
|
debug_log: false # if set to true, sonar will log ever ping with triptime and date/time
|
||||||
|
persistant_log: false # If true logs in /var/log/sonar.log, false logs to systemd
|
||||||
|
target: auto # IP Address, URL or auto as ping target
|
||||||
|
count: 3 # How often should be pinged?
|
||||||
|
interval: 60 # Ping again after X seconds
|
||||||
|
restart_treshold: 10 # If failed, restart WiFi after X seconds
|