mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-06-11 06:23:08 +00:00
1196 lines
70 KiB
HTML
1196 lines
70 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<!--
|
||
If you are serving your web app in a path other than the root, change the
|
||
href value below to reflect the base path you are serving from.
|
||
|
||
The path provided below has to start and end with a slash "/" in order for
|
||
it to work correctly.
|
||
|
||
For more details:
|
||
* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
|
||
|
||
This is a placeholder for base href that will be replaced by the value of
|
||
the `--base-href` argument provided to `flutter build`.
|
||
-->
|
||
<base href="/web/flutter_web/">
|
||
<!-- <base href="/web/flutter_web/"> --> <!-- --base-href=/knowledge.io/ -->
|
||
<!-- <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script> -->
|
||
|
||
<meta charset="UTF-8">
|
||
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
|
||
<meta name="description" content="Snapmaker Orca">
|
||
<!-- 添加权限策略 -->
|
||
<meta http-equiv="Permissions-Policy" content="local-files-write=*">
|
||
<meta http-equiv="Access-Control-Allow-Origin" content="*">
|
||
<meta http-equiv="Access-Control-Allow-Methods" content="GET, POST, PUT, DELETE, OPTIONS">
|
||
<meta http-equiv="Access-Control-Allow-Headers" content="Content-Type, Authorization, x-amz-checksum-sha256">
|
||
<!-- iOS meta tags & icons -->
|
||
<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="web">
|
||
<link rel="apple-touch-icon" href="icons/Icon-192.png">
|
||
|
||
<!-- Favicon -->
|
||
<link rel="icon" type="image/png" href="favicon.png"/>
|
||
|
||
<title>Snapmaker Orca</title>
|
||
<link rel="manifest" href="manifest.json">
|
||
|
||
<!-- 针对 macOS 的优化 -->
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||
<!-- 在head中添加 -->
|
||
<meta name="theme-color" content="#ffffff">
|
||
<link rel="apple-touch-startup-image" href="splash.png">
|
||
</head>
|
||
<body>
|
||
<script src="flutter_bootstrap.js" async></script>
|
||
<script>
|
||
if ('application/octet-stream' in MimeType) {
|
||
MimeType['image/webp'] = 'webp';
|
||
}
|
||
</script>
|
||
<script>
|
||
|
||
function open_browser() {
|
||
const message = JSON.stringify({
|
||
sequence_id: 1222222,
|
||
command: "homepage_test_browser",
|
||
params: {
|
||
url: "https://snapmaker.com",
|
||
title: "Snapmaker",
|
||
},
|
||
});
|
||
// 调用 window.postMessage 传递消息给 flutter
|
||
window.wx && window.wx.postMessage(message); // 调用 window.postMessage 传递消息给 原生系统
|
||
///模拟收到响应结果5000
|
||
if(!window.wx) {
|
||
// 我不能发现 window.wx
|
||
console.log('i dont find window.wx, so i simulate a return by postMessage, message: ', message)
|
||
}
|
||
}
|
||
|
||
async function test_sava_file(suggestedName, content) {
|
||
try {
|
||
const options = {
|
||
suggestedName: suggestedName,
|
||
types: [{
|
||
description: 'G-code 文件',
|
||
accept: {
|
||
'application/x-gcode': ['.gcode']
|
||
}
|
||
}],
|
||
};
|
||
// 必须直接在点击事件处理函数中调用
|
||
const handle = await window.showSaveFilePicker(options);
|
||
const writable = await handle.createWritable();
|
||
await writable.write(content);
|
||
await writable.close();
|
||
console.log('文件保存成功!');
|
||
} catch (err) {
|
||
if (err.name === 'AbortError') {
|
||
console.log('用户取消了保存操作');
|
||
} else {
|
||
console.error('保存文件时出错:', err);
|
||
// 现代浏览器的polyfill(可选
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
function test_mqtt_unsubscribe() {
|
||
body = {
|
||
header:{
|
||
sequenceId: 202519,
|
||
},
|
||
payload:{
|
||
cmd: "sw_StopMachineStateSubscription",
|
||
params: {},
|
||
}
|
||
};
|
||
|
||
window.wx.postMessage(JSON.stringify(body));
|
||
}
|
||
|
||
function test_call_flutter_add_device() {
|
||
body = {
|
||
header:{
|
||
sequenceId: 202519,
|
||
},
|
||
payload:{
|
||
method: "call_flutter",
|
||
cmd: "devicepage_add_device",
|
||
params: {
|
||
"event": "onResume",
|
||
"device_id": "1234567890",
|
||
},
|
||
}
|
||
};
|
||
window.postMessage(JSON.stringify(body), '*');
|
||
}
|
||
|
||
function test_mqtt_subscribe() {
|
||
body = {
|
||
header:{
|
||
sequenceId: 202503,
|
||
},
|
||
payload:{
|
||
cmd: "sw_SubscribeMachineState",
|
||
params: {},
|
||
event_id: "subscribe1",
|
||
}
|
||
};
|
||
|
||
window.wx.postMessage(JSON.stringify(body));
|
||
}
|
||
|
||
function test_mqtt_subscribe_filter(){
|
||
body = {
|
||
header:{
|
||
sequenceId: 202510,
|
||
},
|
||
payload:{
|
||
cmd: "sw_SetSubscribeFilter",
|
||
params: {
|
||
"targets":{
|
||
"gcode_move": null,
|
||
"toolhead": ["position", "status"]
|
||
}
|
||
}
|
||
}
|
||
};
|
||
window.wx.postMessage(JSON.stringify(body));
|
||
}
|
||
|
||
function test_mqtt_send_gcodes(){
|
||
body = {
|
||
header:{
|
||
sequenceId: 202592,
|
||
},
|
||
payload:{
|
||
cmd: "sw_SendGCodes",
|
||
params: {
|
||
"script":[
|
||
"T0",
|
||
"T1",
|
||
"T2",
|
||
"T3",
|
||
]
|
||
}
|
||
}
|
||
};
|
||
window.wx.postMessage(JSON.stringify(body));
|
||
}
|
||
|
||
function test_mqtt_machine_info(){
|
||
body = {
|
||
header:{
|
||
sequenceId: 202502,
|
||
},
|
||
payload:{
|
||
cmd: "sw_GetMachineState",
|
||
params: {
|
||
"targets":{
|
||
"gcode_move": null,
|
||
"toolhead": ["position", "status"]
|
||
}
|
||
}
|
||
}
|
||
};
|
||
window.wx.postMessage(JSON.stringify(body));
|
||
}
|
||
|
||
function test_mqtt_machine_objects(){
|
||
body = {
|
||
header:{
|
||
sequenceId: 202504,
|
||
},
|
||
payload:{
|
||
cmd: "sw_GetMachineObjects",
|
||
}
|
||
};
|
||
window.wx.postMessage(JSON.stringify(body));
|
||
}
|
||
|
||
function test_mqtt_disconnect() {
|
||
body = {
|
||
header:{
|
||
sequenceId: 202500,
|
||
},
|
||
payload:{
|
||
cmd: "sw_DisConnect",
|
||
}
|
||
}
|
||
window.wx.postMessage(JSON.stringify(body));
|
||
}
|
||
|
||
function test_mqtt_connect() {
|
||
body = {
|
||
header:{
|
||
sequenceId: 202501,
|
||
},
|
||
payload:{
|
||
cmd: "sw_Connect",
|
||
params: {
|
||
ip: "172.18.1.66",
|
||
port: 1883,
|
||
sn: "BE667E5F8A060BDF",
|
||
}
|
||
}
|
||
}
|
||
window.wx.postMessage(JSON.stringify(body));
|
||
}
|
||
|
||
var testtime = 1.0;
|
||
function test_mqtt_subscribe_response_message_timer() {
|
||
var timer = setInterval(function() {
|
||
testtime += 1.0;
|
||
test_mqtt_subscribe_response(testtime);
|
||
}, 2000);
|
||
// setTimeout(function() {
|
||
// clearInterval(timer);
|
||
// }, 10000);
|
||
}
|
||
|
||
function test_mqtt_subscribe_response(time) {
|
||
var body = {
|
||
"header": {
|
||
"event_id": "subscribeMachineState"
|
||
},
|
||
"payload": {
|
||
"code": 200,
|
||
"data": {
|
||
"data": [
|
||
{
|
||
"display_status": {
|
||
"message": null,
|
||
"progress": 0.45
|
||
},
|
||
"extruder": {
|
||
"can_extrude": true,
|
||
"power": 0.4824050874358382,
|
||
"pressure_advance": 0.015,
|
||
"smooth_time": 0.04,
|
||
"target": 230,
|
||
"temperature": time
|
||
},
|
||
"extruder1": {
|
||
"can_extrude": false,
|
||
"power": 0,
|
||
"pressure_advance": 0.015,
|
||
"smooth_time": 0.04,
|
||
"target": 0,
|
||
"temperature": 29.82
|
||
},
|
||
"extruder2": {
|
||
"can_extrude": false,
|
||
"power": 0,
|
||
"pressure_advance": 0.015,
|
||
"smooth_time": 0.04,
|
||
"target": 0,
|
||
"temperature": 29.96
|
||
},
|
||
"extruder3": {
|
||
"can_extrude": false,
|
||
"power": 0,
|
||
"pressure_advance": 0.015,
|
||
"smooth_time": 0.04,
|
||
"target": 0,
|
||
"temperature": 30.71
|
||
},
|
||
"fan": {
|
||
"rpm": null,
|
||
"speed": 1
|
||
},
|
||
"fan_generic cavity_fan": {
|
||
"rpm": 2293.8530734755464,
|
||
"speed": 0.7
|
||
},
|
||
"gcode_move": {
|
||
"absolute_coordinates": true,
|
||
"absolute_extrude": false,
|
||
"extrude_factor": 1,
|
||
"gcode_position": [
|
||
128.125,
|
||
144.559,
|
||
6.8,
|
||
4179.2542500048585
|
||
],
|
||
"homing_origin": [
|
||
0,
|
||
0,
|
||
0,
|
||
0
|
||
],
|
||
"position": [
|
||
128.125,
|
||
144.559,
|
||
6.8,
|
||
169664.43720992337
|
||
],
|
||
"speed": 11054.348,
|
||
"speed_factor": 1
|
||
},
|
||
"heater_bed": {
|
||
"can_extrude": null,
|
||
"power": 0.07280463005309298,
|
||
"pressure_advance": null,
|
||
"smooth_time": null,
|
||
"target": 55,
|
||
"temperature": 54.97
|
||
},
|
||
"led cavity_led": {
|
||
"color_data": [
|
||
[
|
||
0,
|
||
0,
|
||
0,
|
||
1
|
||
]
|
||
]
|
||
},
|
||
"print_stats": {
|
||
"filament_used": 4079.2542500048585,
|
||
"filename": "1/1指尖陀螺_PLA_1h17m.gcode",
|
||
"info": {
|
||
"current_layer": null,
|
||
"total_layer": null
|
||
},
|
||
"message": "",
|
||
"print_duration": 2296.5128470530035,
|
||
"state": "printing",
|
||
"total_duration": 2305.2522525569657
|
||
},
|
||
"print_task_config": {
|
||
"auto_bed_leveling": true,
|
||
"extruder_map_table": [
|
||
0,
|
||
1,
|
||
2,
|
||
3
|
||
],
|
||
"filament_color": [
|
||
16711680,
|
||
65280,
|
||
255,
|
||
16777215
|
||
],
|
||
"filament_type": [
|
||
"NONE",
|
||
"NONE",
|
||
"NONE",
|
||
"NONE"
|
||
],
|
||
"time_lapse_camera": false
|
||
},
|
||
"temperature_sensor cavity": {
|
||
"measured_max_temp": 0,
|
||
"measured_min_temp": -109.28,
|
||
"temperature": -40.4
|
||
},
|
||
"toolhead": {
|
||
"axis_maximum": [
|
||
270,
|
||
335,
|
||
280,
|
||
0
|
||
],
|
||
"axis_minimum": [
|
||
0,
|
||
0,
|
||
0,
|
||
0
|
||
],
|
||
"estimated_print_time": 189077.40531407812,
|
||
"extruder": "extruder",
|
||
"homed_axes": "xyz",
|
||
"max_accel": 10000,
|
||
"max_velocity": 500,
|
||
"minimum_cruise_ratio": 0.5,
|
||
"position": [
|
||
128.125,
|
||
144.559,
|
||
10.52774598675305,
|
||
169664.43720992337
|
||
],
|
||
"print_time": 189079.63617631845,
|
||
"square_corner_velocity": 5,
|
||
"stalls": 1
|
||
},
|
||
"virtual_sdcard": {
|
||
"file_path": "/userdata/printer_data/gcodes/1/1指尖陀螺_PLA_1h17m.gcode",
|
||
"file_position": 3584284,
|
||
"file_size": 8457526,
|
||
"is_active": true,
|
||
"progress": 0.4237981650898856
|
||
},
|
||
"webhooks": {
|
||
"state": "ready",
|
||
"state_message": "Printer is ready"
|
||
}
|
||
},
|
||
// 541096.928877337, //获取当前的时间 代码获取 new Date().getTime()
|
||
new Date().getTime(), //获取当前的时间 代码获取 541096.928877337,
|
||
],
|
||
"method": "html.test.subscribeMachineState",
|
||
},
|
||
"msg": "OK"
|
||
}
|
||
};
|
||
console.log("subscribeMachineState response message: " + JSON.stringify(body) );
|
||
!window.wx && window.postMessage(JSON.stringify(body), '*'); // 调用 window.postMessage 传递消息给 flutter
|
||
}
|
||
|
||
function getDeviceData() {
|
||
var devices = {
|
||
'90F3A2F30063C233': {
|
||
'ip': '172.18.1.34',
|
||
'port': 1883,
|
||
'name': 'lava-90F-233',
|
||
'device_name': '90F-233',
|
||
'sn': '90F3A2F30063C233',
|
||
'connected': false,
|
||
'userid': '',
|
||
'link_mode': 'lan'
|
||
},
|
||
'A4C0111397B11BBB': {
|
||
'ip': '172.18.1.31',
|
||
'port': 1883,
|
||
'name': 'lava-A4C-BBB',
|
||
'device_name': 'A4C-BBB',
|
||
'sn': 'A4C0111397B11BBB',
|
||
'connected': false,
|
||
'userid': 'all-pro',
|
||
'link_mode': 'wan'
|
||
|
||
},
|
||
'A4C0111397B11dddd': {
|
||
'ip': '172.18.0.98',
|
||
'port': 1883,
|
||
'name': 'lava-12C5C804F3DAB37B-12C',
|
||
'device_name': '12C-37B',
|
||
'sn': '12C5C804F3DAB37B',
|
||
'connected': true,
|
||
'userid': '',
|
||
'link_mode': 'lan'
|
||
}
|
||
};
|
||
return devices;
|
||
}
|
||
|
||
function getFileFilamentMapping() {
|
||
return {
|
||
"estimated_time": 333.11,
|
||
"filament_color": [16777088,'#808080',0,16711680,'#808080', '#FF0000', '#00FF00', '#808080'],
|
||
"filament_color_rgba": ['#ff223311','#808080','#ff000000','#ffffffff','#808080', '#FF0000', '#00FF00', '#808080'],
|
||
"filament_type": ["PLA","PLET","PAL","PLA","PLET","PLA","PLA","PLA"],
|
||
// "filament_used": [1.002, 1.150, 0, 1.2, 1.002, 1.002, 11.1, 11.05],
|
||
"filament_weight": [1.002, 1.150, 0, 1.2, 1.002, 1.002, 11.1, 11.05],
|
||
"file_cover": {
|
||
"url": null,
|
||
"base64": "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id3BFStGOX+VV91D32a7hSI9efvtldnYsaaDufbcc/NMC0W68+ij0+wO5t3kyVe2/frX9yZ1YYlUOsePt2UTJ15hdzDv4v1Yr712R1IXl0il853vLMjOO+9DQwvkX1vbjZ2/+93apC4wkUolFttbW8fuK5CGyy4bNPL73zfKksZMjK6uuOK8cQXSsW7djZ3WsqTREmtXRlcJMsqSRszzz88zukpVjLKcy5JGyS9/ucboKmUxytqzZ3725z87/S71n+3bZ2SXXPLPIwuka8mS67e89daKpC48kTPN668vzZYtG9lZIH07d87usgAv9ZpYaP/c58Y71V4vbr75spbvfneRqaHUZb7+9dmeGaw3d989psPUUOotL720OFu1ykJ73YlHdnbsmNl19Og9SV2QIqdK7Ao+9NAkj+DUq2uvvXBcnFPx2I6knnj8ZuvWqdmwYc5c1bXYNbSeJakn1q1aWuwKNoQ4ULpv37KkLlCRUjo7F1q3aiSxnvXEEzO73nzTIryklR/9aHnxCIMDog0mTsFHaf3853cndcFK4+add1qLi+zWrRpULMJ/85vzMs8bSt5T2hFUVg0uXqkcpXXkiOMOks+UymrWrI9sKUAcKlVakseUysqOIH0oLclbSmVlR5CTKpWWNS2pdXrKaqKyon933TWmY9eu2zK7h1KrxNEFZUXZFi++fsuuXXOyN99cnvnqe6lmXnzx9uzLX56YLVhwna+Yp3xjxgxujtKKC0hpSTUSz7lGWd1006VtBThT11xz4bjt22d0xaMQ77+/LqmLX9JJvIDvqadmFcvKF0hwTi69dNDIzZsnH3/uubnZoUMW46WyicX1KKrPfvaWLmVFRcSzh7EY//TTc4oLoqaIUonE19BFWcU33XinFRUXi/FRWt/73u3Zb3/rnVpydonvFyhNAZ1eZ0DFutbjj0/v2r37tuxnP7srqRtFap833lheLCrrVVRNrGutXDm6o6OjOXvhhUXZH/5gQV76T7whNHYBv/QlU0BqZNKkYW2PPTa969lne0Zb1rbkZIlRVRRV5NZbr2gvQK3EaOveez/eWRptWduSUt57797sySdnnRhVeekeuVEabUVxvfzyYtPEBk5M//bsWZB98Yu3FsvKQVByKUZbd945umPnztnZM8/MyX76U9PERssbb7QUiypyxx0jOq1VkXtRXBs3jjsU32wSj/f0FNf9Sd14cmbZt68le/TRacWiuu++jx+yA0hympoubemeEhyP4oqT8j/5yUrFVYdFtW3btOwLX+gZVY0ZM7ilACmbOHFY21e/OrUrDgsqrvorqojdP+pO90VdLK7YOfrGN5qzt95aobgSL6oJExQVdS6Ka+vWnuKKXcVXX12SHTt2X1I3biPlvff+O/v2t+dnn//8hGIUFQ0piuuBB/7z0I4dM7MnnphZ3Ap/+23Txbzkxz++s/gDpVRU69c3HW9qGuKIAo1tyJB/Gbl69Q2dW7ZM6Yri2rnTqKtW+cUvVmff+tb87MEHJ5woqnnzPtpx+eV2/aCPCy748NDuqUZb901yPIor8vzz/1V8pc1vfqO8BrKkXnllSbZ165RiUZUyYcLl7eed949DC0D/YtTV0jKyI0ZdX/vazCwSD8+Wysu08dxy+PDq4ii2exMk27Rp/InMnWs0BefkE58Y0rJq1Q2djzwS5TUji8TZrnh28cCBu5VXmYlvQorP7OGHJ/UZSc2de23HqFHOT0HFjRjxb83Llo3oeOSRyX3Ka8+e+cXR169+dY8C+2sOHGjNXnvtjuIRktjZK61JRWIkNXq0koKqufrqC8aNH39526c//clDpfIqFVhMH3/wg6XFEVgjrH/FFzm8805r8bXD8VbY0utcSuel2tvHdcVRhMGDvTEBciFGXzNmXN3eu8C2b+/JU0/NLp4lihLbv39l0utg8cUNcfzj9deXZs88c9uJN3iWEkW1ceMtXXH6vKnJmxIgCVFgpRFYTCFL5dU7MRqJIoubf//+O4tTyiiz3/9+Xc0KLUZLR46syQ4ebC0W7MsvL8mefXZusYBj/Sny0EMfJEpq/vzrOiZOvKL9uusuai4A6bvggg8NLZXY0qUjOnoX2eOPT/+7xEn8p59uznbvnpvt3bswe+mlxcUpVyQOVUbiTavvvrsqO3r0npMmvhqtlHhrRSQeSfrhD5cVd+liETyer4zs2DEr6/79nMjmzX0TRfWpT918fMGC4R2TJg1rHzv2kpYC0Fh6iuziYpFNn35Ve5RZdzEc2rx5UlcU12OPfZB4hcqpEs/YlRLHBXpn69YP8pWvTOmTLVs+SBTV/ff/x6FFi4Z3TJ48rD2Kafjwi5rPP997pYAzEKV2/fUXN99yy9C2yLRpV7X/baZO7Z0rT2TKlL752Mf+vSVy5ZXnj1NGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAbv0/PiKpXulmiAgAAAAASUVORK5CYII=",
|
||
},
|
||
"thumbnails": [
|
||
{
|
||
"width": 32,
|
||
"height": 32,
|
||
"url": ".thumbs/S200-5K_14m28s-32x32.png",
|
||
},
|
||
{
|
||
"width": 64,
|
||
"height": 64,
|
||
"url": "data:image/jpeg;base64,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",
|
||
},
|
||
{
|
||
"width": 200,
|
||
"height": 200,
|
||
"url": "data:image/png;base64,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id3BFStGOX+VV91D32a7hSI9efvtldnYsaaDufbcc/NMC0W68+ij0+wO5t3kyVe2/frX9yZ1YYlUOsePt2UTJ15hdzDv4v1Yr712R1IXl0il853vLMjOO+9DQwvkX1vbjZ2/+93apC4wkUolFttbW8fuK5CGyy4bNPL73zfKksZMjK6uuOK8cQXSsW7djZ3WsqTREmtXRlcJMsqSRszzz88zukpVjLKcy5JGyS9/ucboKmUxytqzZ3725z87/S71n+3bZ2SXXPLPIwuka8mS67e89daKpC48kTPN668vzZYtG9lZIH07d87usgAv9ZpYaP/c58Y71V4vbr75spbvfneRqaHUZb7+9dmeGaw3d989psPUUOotL720OFu1ykJ73YlHdnbsmNl19Og9SV2QIqdK7Ao+9NAkj+DUq2uvvXBcnFPx2I6knnj8ZuvWqdmwYc5c1bXYNbSeJakn1q1aWuwKNoQ4ULpv37KkLlCRUjo7F1q3aiSxnvXEEzO73nzTIryklR/9aHnxCIMDog0mTsFHaf3853cndcFK4+add1qLi+zWrRpULMJ/85vzMs8bSt5T2hFUVg0uXqkcpXXkiOMOks+UymrWrI9sKUAcKlVakseUysqOIH0oLclbSmVlR5CTKpWWNS2pdXrKaqKyon933TWmY9eu2zK7h1KrxNEFZUXZFi++fsuuXXOyN99cnvnqe6lmXnzx9uzLX56YLVhwna+Yp3xjxgxujtKKC0hpSTUSz7lGWd1006VtBThT11xz4bjt22d0xaMQ77+/LqmLX9JJvIDvqadmFcvKF0hwTi69dNDIzZsnH3/uubnZoUMW46WyicX1KKrPfvaWLmVFRcSzh7EY//TTc4oLoqaIUonE19BFWcU33XinFRUXi/FRWt/73u3Zb3/rnVpydonvFyhNAZ1eZ0DFutbjj0/v2r37tuxnP7srqRtFap833lheLCrrVVRNrGutXDm6o6OjOXvhhUXZH/5gQV76T7whNHYBv/QlU0BqZNKkYW2PPTa969lne0Zb1rbkZIlRVRRV5NZbr2gvQK3EaOveez/eWRptWduSUt57797sySdnnRhVeekeuVEabUVxvfzyYtPEBk5M//bsWZB98Yu3FsvKQVByKUZbd945umPnztnZM8/MyX76U9PERssbb7QUiypyxx0jOq1VkXtRXBs3jjsU32wSj/f0FNf9Sd14cmbZt68le/TRacWiuu++jx+yA0hympoubemeEhyP4oqT8j/5yUrFVYdFtW3btOwLX+gZVY0ZM7ilACmbOHFY21e/OrUrDgsqrvorqojdP+pO90VdLK7YOfrGN5qzt95aobgSL6oJExQVdS6Ka+vWnuKKXcVXX12SHTt2X1I3biPlvff+O/v2t+dnn//8hGIUFQ0piuuBB/7z0I4dM7MnnphZ3Ap/+23Txbzkxz++s/gDpVRU69c3HW9qGuKIAo1tyJB/Gbl69Q2dW7ZM6Yri2rnTqKtW+cUvVmff+tb87MEHJ5woqnnzPtpx+eV2/aCPCy748NDuqUZb901yPIor8vzz/1V8pc1vfqO8BrKkXnllSbZ165RiUZUyYcLl7eed949DC0D/YtTV0jKyI0ZdX/vazCwSD8+Wysu08dxy+PDq4ii2exMk27Rp/InMnWs0BefkE58Y0rJq1Q2djzwS5TUji8TZrnh28cCBu5VXmYlvQorP7OGHJ/UZSc2de23HqFHOT0HFjRjxb83Llo3oeOSRyX3Ka8+e+cXR169+dY8C+2sOHGjNXnvtjuIRktjZK61JRWIkNXq0koKqufrqC8aNH39526c//clDpfIqFVhMH3/wg6XFEVgjrH/FFzm8805r8bXD8VbY0utcSuel2tvHdcVRhMGDvTEBciFGXzNmXN3eu8C2b+/JU0/NLp4lihLbv39l0utg8cUNcfzj9deXZs88c9uJN3iWEkW1ceMtXXH6vKnJmxIgCVFgpRFYTCFL5dU7MRqJIoubf//+O4tTyiiz3/9+Xc0KLUZLR46syQ4ebC0W7MsvL8mefXZusYBj/Sny0EMfJEpq/vzrOiZOvKL9uusuai4A6bvggg8NLZXY0qUjOnoX2eOPT/+7xEn8p59uznbvnpvt3bswe+mlxcUpVyQOVUbiTavvvrsqO3r0npMmvhqtlHhrRSQeSfrhD5cVd+liETyer4zs2DEr6/79nMjmzX0TRfWpT918fMGC4R2TJg1rHzv2kpYC0Fh6iuziYpFNn35Ve5RZdzEc2rx5UlcU12OPfZB4hcqpEs/YlRLHBXpn69YP8pWvTOmTLVs+SBTV/ff/x6FFi4Z3TJ48rD2Kafjwi5rPP997pYAzEKV2/fUXN99yy9C2yLRpV7X/baZO7Z0rT2TKlL752Mf+vSVy5ZXnj1NGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAbv0/PiKpXulmiAgAAAAASUVORK5CYII=",
|
||
},
|
||
],
|
||
"filename": "test.gocde",
|
||
"filament_extruder_map":{
|
||
"0": "0",
|
||
"1": "2", // 设计稿中的2号耗材选择的是3号头
|
||
},
|
||
"preferences": {
|
||
"bed_level": 1,
|
||
"flow_calibrate":0,
|
||
"shaper_calibrate":0,
|
||
"time_lapse_camera":0,
|
||
}
|
||
}
|
||
}
|
||
//sw_GetMachineFilamentMapping
|
||
function getMachineFilamentMapping() {
|
||
return {
|
||
"filament_color": [16777088,8388672,'#FF808080','#FF0000',16777084,16777088,'#838867',16711680],
|
||
"filament_color_rgba": ["#ffdddddd","#22222222",'#FF808080','#FF0000',"#dddddd","#ff000000",'#838867',"#eeffcc"],
|
||
"filament_type": ["PLA","PLA","PLET","PLA","PLA","PLET","NONE","PLA"],
|
||
"extruder_map_table": [0, 1, 2, 3, 4, 5, 6, 7],
|
||
}
|
||
}
|
||
|
||
function sw_MachineFilesMetadata() {
|
||
return {
|
||
"chamber_temp": 0,
|
||
"estimated_time": 868.00,
|
||
"filament_colour": "#0000FF;#FF0000;#FFFFFF;#804000",
|
||
"filament_name": "彩色打印;\"My Generic PLA @MyToolChanger\";\"My Generic PLA @MyToolChanger\";\"My Generic PLA @MyToolChanger",
|
||
"filament_total": 4656.38,
|
||
"filament_type": "PLA;PLA;PLA;PLA",
|
||
"filament_weight": [
|
||
13.89,
|
||
0,
|
||
0,
|
||
0
|
||
],
|
||
"filename": "1.gcode",
|
||
"first_layer_bed_temp": 60,
|
||
"first_layer_extr_temp": 220,
|
||
"first_layer_height": 0.2,
|
||
"gcode_end_byte": 326713,
|
||
"gcode_start_byte": 5203,
|
||
"job_id": null,
|
||
"layer_count": 250,
|
||
"layer_height": 0.2,
|
||
"modified": 1736475230.27094,
|
||
"nozzle_diameter": 0.4,
|
||
"object_height": 50,
|
||
"print_start_time": null,
|
||
"size": 344795,
|
||
"slicer": "OrcaSlicer",
|
||
"slicer_version": "2.1.1",
|
||
"thumbnails": [
|
||
{
|
||
"height": 32,
|
||
"relative_path": ".thumbs/S200-5K_14m28s-32x32.png",
|
||
"size": 811,
|
||
"width": 32
|
||
},
|
||
{
|
||
"height": 48,
|
||
"relative_path": ".thumbs/S200-5K_14m28s-48x48.png",
|
||
"size": 385,
|
||
"width": 48
|
||
},
|
||
{
|
||
"height": 300,
|
||
"relative_path": ".thumbs/S200-5K_14m28s-300x300.png",
|
||
"size": 2792,
|
||
"width": 300
|
||
}
|
||
],
|
||
"uuid": "c255b47f-62b8-495b-ac94-1a68675d393f"
|
||
};
|
||
}
|
||
|
||
function sw_GetConnectedMachine() {
|
||
return {
|
||
"dev_id":"172.18.0.98",
|
||
"dev_name":"172.18.0.98",
|
||
"img":"http://localhost:13619/profiles/Snapmaker/Snapmaker A250 BKit_cover.png",
|
||
"ip":"172.18.0.98",
|
||
"model_name":"Snapmaker A250 BKit",
|
||
"nozzle_sizes":["0.4"],
|
||
"preset_name":"Snapmaker A250 BKit (0.4 nozzle)",
|
||
"sn":"12C5C804F3DAB37B",
|
||
"port": 1884,
|
||
"name": "Snapmaker 0.61",
|
||
"connected":true,
|
||
"id": "44",
|
||
"clientId": "172.18.0.98",
|
||
"ca": "------ca------",
|
||
"cert": "------cert------",
|
||
"key": "------key------",
|
||
"link_mode": "lan"
|
||
};
|
||
}
|
||
|
||
function sw_GetLocalDevices() {
|
||
return [
|
||
{
|
||
"api_key": "",
|
||
"ca": "-----BEGIN CERTIFICATE-----MIIDwTCCAqmgAwIBAgIUNA2s7R3LmI2DITpR4fjaO0VCVSUwDQYJKoZIhvcNAQELBQAwaDEUMBIGA1UEAwwLbXF0dC1icm9rZXIxFjAUBgNVBAoMDXNuYXBtYWtlci5jb20xETAPBgNVBAsMCHNvZnR3YXJlMSUwIwYJKoZIhvcNAQkBFhZzb2Z0d2FyZUBzbmFwbWFrZXIuY29tMB4XDTI1MDYxMzAwMDAwMFoXDTM1MDYxMTAwMDAwMFowaDEUMBIGA1UEAwwLbXF0dC1icm9rZXIxFjAUBgNVBAoMDXNuYXBtYWtlci5jb20xETAPBgNVBAsMCHNvZnR3YXJlMSUwIwYJKoZIhvcNAQkBFhZzb2Z0d2FyZUBzbmFwbWFrZXIuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqpeKQ5Khf1AgqMA56ZnVoroJ12s1QR498F9ddE9aQ7N3CihvFL5h+v9gtXMXMe/+MddCHmbkIxZTdeXQrR/splsVRB/u9nMNREZgd6yEysE3msiwqn1zpfIm+hsg/zOvhGMZEVVSA9zrgmbAhZKkoykfVBZ2HXpDWlysNfreZLMOvRjtciJ1Kwqp3jAKMXKH5xU2NS8FYKEgkdKlq2IK8478947ovicRSZk454QOlpbJpk4TIZQMU9fZbTM7t0wCfVdSlkGiB2oiAK4mSmx0WJhEjZmWQgID1U/2ECXOo8o92Qt2MvWZP1nqfaP3PFXifwW9mqqxO2/+Xt1YI4p7CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBxjAdBgNVHQ4EFgQUr/YO+2JshHKFbvvMVRBNcwBZyhwwHwYDVR0jBBgwFoAUr/YO+2JshHKFbvvMVRBNcwBZyhwwDQYJKoZIhvcNAQELBQADggEBACpZI31bGfnQmncZQXfUREuJMvSRGIBgBebgOCU9kSJ5pf2nZj4ycICWFz8lEd7+jWEcx0+CSZtsosP48GwYas/CvazU7RgzTYwDk3ZPb1Gc+JCXO7RWcKAd5x1sj6vXmnCpdntWfVgYW3fbg6cx4JiyA39rtGo+su3vBijizouRnrQV/hhiEnu60r4FWPehBcIaBHyPjl5EU6BpJKBkMx1CYABvcwhQ9xeK5l6S+wIZEsKl6c8GMlixQH0sCJM+jYruiqUOhbVy6sYz+SZcYOcfXe2tCWAY3Q6FtBLr2brxeI9Tbc6Sf45yxR5efAtdinxlgv0/257QJUPbk0thnZA=-----END CERTIFICATE-----",
|
||
"cert": "-----BEGIN CERTIFICATE-----MIIDuTCCAqGgAwIBAgIUda0rZOToskohrJJ1uviTzse9OkEwDQYJKoZIhvcNAQELBQAwaDEUMBIGA1UEAwwLbXF0dC1icm9rZXIxFjAUBgNVBAoMDXNuYXBtYWtlci5jb20xETAPBgNVBAsMCHNvZnR3YXJlMSUwIwYJKoZIhvcNAQkBFhZzb2Z0d2FyZUBzbmFwbWFrZXIuY29tMB4XDTI1MDYxMzAwMDAwMFoXDTM1MDYxMTAwMDAwMFowFDESMBAGA1UEAwwJbXF0dF9jbGkyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/xMcTp4BoEn9lj+qd4ldYGIO5VpM2CpG3oc8HM1nLrLlZcMw5xSeaXK0zG/i/X43znJKzIWSYIFZYZvU5MkX2dDvRVMQbmML01jG/n8FfLCTRQ76eAOCz11Ilhur5wvp7Er+QAg17bLIt6qX41IN2Lm5lELJq7CkreEfcQniZ1EfaRnsdv2xMkJ9vN/hFhc+Sm4DtNklctWuZVPTB3wDQnD2XlqBc1bG+10Nn1Pt/lNudOPMj1RxB3akDKb1bDFiidCB9S87rrZfJFjIChdzUvVdF+v4r2RiTsZ8DPHkrA48xoCXhEPQR+KyV4O4VeKFXYh3tGV3bNmGkuVhZGzFnQIDAQABo4GuMIGrMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgOoMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAdBgNVHQ4EFgQUrXar8N/Ek2lR49/mordIGaYaS6AwHwYDVR0jBBgwFoAUr/YO+2JshHKFbvvMVRBNcwBZyhwwLAYDVR0RBCUwI4IJbG9jYWxob3N0hwR/AAABhxAAAAAAAAAAAAAAAAAAAAABMA0GCSqGSIb3DQEBCwUAA4IBAQAWHBiJipmVhHwmkfatBdUqVfNo7GGPvZQXMPrU1fxKnXHb2NdsKxE4+Q4P9nFlYtq5SkB4yu8fYE2Add2dknXj4D2S5Zo1MhNHMPh0rUDDu8P8abV3t8FhUh71QxwTv1HDiTy7uCGPZXnRhIIL9hlzQoUF4OjpwXN2vLSiTCaYj/BlJMM8a3u2zeaHHQ8fPhHSem97aTW4cLsotmGfVrbliL9uuKb7/0eEb6sYMpKU00+7HIke0BeejAkUgsqDqXZS3ZTmWxa0kmmkhVUwUR/I0siiXFhkLkB70Ics9fGI72Jg9TvYUdllCvF3USuJFWjJMrrQgpIy/aONrNTwb92f-----END CERTIFICATE-----",
|
||
"clientId": "172.18.0.119",
|
||
"connected": false,
|
||
"dev_id": "BE003F28DE84E00E",
|
||
"name": "name:BE003F28DE84E00E",
|
||
"dev_name": "BE003F28DE84E00E",
|
||
"img": "http://localhost:13619/profiles/Snapmaker/Snapmaker test_cover.png",
|
||
"ip": "172.18.1.19",
|
||
"key": "-----BEGIN RSA PRIVATE KEY-----MIIEpAIBAAKCAQEA/xMcTp4BoEn9lj+qd4ldYGIO5VpM2CpG3oc8HM1nLrLlZcMw5xSeaXK0zG/i/X43znJKzIWSYIFZYZvU5MkX2dDvRVMQbmML01jG/n8FfLCTRQ76eAOCz11Ilhur5wvp7Er+QAg17bLIt6qX41IN2Lm5lELJq7CkreEfcQniZ1EfaRnsdv2xMkJ9vN/hFhc+Sm4DtNklctWuZVPTB3wDQnD2XlqBc1bG+10Nn1Pt/lNudOPMj1RxB3akDKb1bDFiidCB9S87rrZfJFjIChdzUvVdF+v4r2RiTsZ8DPHkrA48xoCXhEPQR+KyV4O4VeKFXYh3tGV3bNmGkuVhZGzFnQIDAQABAoIBACiUZ385Y3xW8R1HZS0NwTl9eC20Sz/jn/E0lhNl+Smkg9rH7h6BOP+BJHLWxQe7nhC9vZkikepBAdGFy12XgXAhbYN7psRNBRtbRxNDbYHMDK3ip2XS9ytaxZq97b/89Prm5mKU+9FkTUrs/KuJSRMm3vePlYp3OIfCJjCjWC3D2JrhBV8AuIzRFALeQ7OW1ZBv+h616HMjvnZnaCjqdXU3GV/Ddz5M2P4/2QY+vvKVa5t5I2HqdWSAuNOy5gG/D30zCvBkT64by3Eu80A2gkGqilXZ9W8xFDRVWXW8VEdhZGVrm+fpTe2SjIUQlnTpsyfy4ntU96hIwxpwhx8oZHECgYEA/+XBtzX0fM7SYAH1baqrcMd/FS82zEuwrEKsg3WWlBBeOJe6K8q24QcrZFBKUlBkOkRkdDydKZnTWLDpDRe6n96k+NXh+0qahsYJPPeipRedxQAlf4q7moJ5UMYoU4rAksDcSaM9POF1NpQGtrNGOrzu93UGI8VEiAWAbbhPNY0CgYEA/y1E/SSNPtXBZ4hqOzImPs52+YFLLgFYkWgyusr5Tqua5Nf+4ivcP924IKX36BG8JxMLtUfvS9MEHmi+U3cWtTT80cJOQzkJXIJeuyyi2A+ng/MPixT4JuOxgWhk1hCVngUgRcN7lskNmzOUAAh3bEF3Z3Sfsy+N/LMhNR1pJFECgYEAvy6ler65yWEvtYDhHyzqZxj07hvXIezOsvQhNRnuBPLxofBhrAQIe7jCh3ChBjx/lTSxpFIAzSraxqFtjFWVHYnW0P3ilr7XEif0kPMmNZeeTKdeXJqGrNobzugtCrVYSIwESJPH1atPyhXvqiHoL0wmcQSiMKlaGRGbMN4Jd6UCgYBWniE65Htlht19rVqR+XXt/9t22iKQ3TgZM4t0yI1T3QBZCdClKUo8C6ECxBOgnNSHVvm0cVSTIm/VeqyQXG5C2FexRAmY2/WHh2Fsm7wzJy0vpwPxrA6H9OY+DRedake/OfI4fCCpkFmkAyAL2tPe1WIYpgfHpS7HRm7RPsh/4QKBgQD5rtZ3hIbXz+AsdvZEsA2fZTxxfKtR8Ept5IAuc43RrH4yRPhnaGDa16CPQuhq6zeD4hsQNRQ822hVQrJT5Kx3tw6qaExJ+1dEUAEbBbkc0vAuagbWwI6H7SZQQ+EYQ/hOqkszrP1JVYCErk64pKC1wQU3Xxe2rTfuHCaOxJ3cVA==-----END RSA PRIVATE KEY-----",
|
||
"link_mode": "lan",
|
||
"model_name": "Snapmaker test",
|
||
"nozzle_sizes": [
|
||
0.4,
|
||
0.4,
|
||
0.4,
|
||
0.4
|
||
],
|
||
"password": "cuzw3WaCiBgt5WQ4",
|
||
"port": 8883,
|
||
"preset_name": "Snapmaker test (0.4 nozzle)",
|
||
"protocol": 0,
|
||
"sn": "BE003F28DE84E00E",
|
||
"user": "cli2",
|
||
"userid": ""
|
||
}
|
||
]
|
||
}
|
||
|
||
function simulateResponse(jsonMessage) {
|
||
try {
|
||
// 反序列化 header 和 payload
|
||
const data = JSON.parse(jsonMessage);
|
||
var header = data.header;
|
||
var payload = data.payload;
|
||
|
||
// 反序列化 header 和 payload
|
||
header['event_id'] = payload['event_id'];
|
||
header['cmd'] = payload['cmd']
|
||
|
||
// 开始机器发现
|
||
var result;
|
||
if (header['cmd'] == 'sw_SaveFile'){
|
||
//saveFile();
|
||
// 检查点击事件绑定
|
||
return;
|
||
}
|
||
if(header['cmd'] =='sw_GetPincode'){
|
||
var mokeData={
|
||
"header": header,
|
||
"payload": {
|
||
'code': 200,
|
||
'method': 'html.test.sw_GetPincode',
|
||
'data': {
|
||
"pin_code": "12345678",
|
||
"state": "success"
|
||
},
|
||
'message': 'ok',
|
||
}
|
||
};
|
||
window.postMessage(JSON.stringify(mokeData), '*'); // 调用 window.postMessage 传递消息给 flutter
|
||
return;
|
||
} else if(header['cmd'] =='sw_StartMachineFind'){
|
||
if(header['event_id'] != null) {
|
||
header['cmd'] = null;
|
||
}
|
||
result = getDeviceData();
|
||
var mokeData={
|
||
"header": header,
|
||
"payload": {
|
||
'code': 200,
|
||
'method': 'html.test',
|
||
'data': result,
|
||
'message': 'ok',
|
||
}
|
||
};
|
||
window.postMessage(JSON.stringify(mokeData), '*'); // 调用 window.postMessage 传递消息给 flutter
|
||
return;
|
||
} else if(header['cmd'] =='sw_GetMachineState'){
|
||
result = {
|
||
"eventtime": 578243.57824499,
|
||
"status": {
|
||
"gcode_move": {
|
||
"absolute_coordinates": true,
|
||
"absolute_extrude": true,
|
||
"extrude_factor": 1,
|
||
"gcode_position": [0, 0, 0, 0],
|
||
"homing_origin": [0, 0, 0, 0],
|
||
"position": [0, 0, 0, 0],
|
||
"speed": 1500,
|
||
"speed_factor": 1
|
||
},
|
||
"toolhead": {
|
||
"position": [0, 0, 0, 0],
|
||
"status": "Ready"
|
||
},
|
||
"print_stats": {
|
||
"filename": "1.gocde"
|
||
},
|
||
"print_task_config": getMachineFilamentMapping(),
|
||
}
|
||
};
|
||
} else if(header['cmd'] =='sw_GetConnectedMachine'){
|
||
result = sw_GetConnectedMachine();
|
||
var mokeData={
|
||
"header": header,
|
||
"payload": {
|
||
'code': 200,
|
||
'method': 'html.test.sw_GetConnectedMachine',
|
||
'data': result,
|
||
'message': 'ok',
|
||
}
|
||
};
|
||
window.postMessage(JSON.stringify(mokeData), '*'); // 调用 window.postMessage 传递消息给 flutter
|
||
return;
|
||
} else if (header['cmd'] =='sw_MachineFilesMetadata') {
|
||
result = sw_MachineFilesMetadata();
|
||
} else if (header['cmd'] == 'sw_GetPrinterInfo') {
|
||
result = {
|
||
"state": "ready",
|
||
"state_message": "Printer is ready",
|
||
"hostname": "lava, klipper_path: /oem/klipper",
|
||
"python_path": "/oem/klippy-env/bin/python",
|
||
"process_id": 826,
|
||
"user_id": 1000,
|
||
"group_id": 1000,
|
||
"log_file": "/userdata/printer_data/logs/klippy.log",
|
||
"config_file": "/userdata/printer_data/config/printer.cfg",
|
||
"software_version": "e60ce92d-dirty",
|
||
"cpu_info": "4 core ?"
|
||
};
|
||
} else if(header['cmd'] == 'sw_GetMachineObjects') {
|
||
result = {
|
||
"objects": [
|
||
"gcode",
|
||
"webhooks",
|
||
"configfile",
|
||
"mcu",
|
||
"mcu linux",
|
||
"heaters",
|
||
"bme280 chamber",
|
||
"temperature_sensor chamber",
|
||
"filament_switch_sensor extruder_sensor",
|
||
"output_pin sensor_toggle",
|
||
"gcode_move",
|
||
"bed_mesh",
|
||
"exclude_object",
|
||
"temperature_host RPi",
|
||
"temperature_sensor RPi",
|
||
"gcode_macro TURN_OFF_MOTORS",
|
||
"gcode_macro SET_HOMING_CURRENT",
|
||
"temperature_sensor ambient",
|
||
"gcode_macro query_bme280",
|
||
"pause_resume",
|
||
"print_stats",
|
||
"virtual_sdcard",
|
||
"probe",
|
||
"stepper_enable",
|
||
"tmc2130 stepper_x",
|
||
"tmc2130 stepper_y",
|
||
"tmc2130 stepper_z",
|
||
"tmc2130 extruder",
|
||
"heater_bed",
|
||
"heater_fan nozzle_cooling_fan",
|
||
"fan",
|
||
"menu",
|
||
"display_status",
|
||
"output_pin BEEPER_pin",
|
||
"idle_timeout",
|
||
"motion_report",
|
||
"query_endstops",
|
||
"system_stats",
|
||
"manual_probe",
|
||
"toolhead",
|
||
"extruder"
|
||
]
|
||
};
|
||
} else if (header['cmd'] == 'sw_GetMachineSystemInfo') {
|
||
result = {
|
||
"system_info": {
|
||
"provider": "systemd_dbus",
|
||
"cpu_info": {
|
||
"cpu_count": 4,
|
||
"bits": "32bit",
|
||
"processor": "armv7l",
|
||
"cpu_desc": "ARMv7 Processor rev 4 (v7l)",
|
||
"serial_number": "b898bdb4",
|
||
"hardware_desc": "BCM2835",
|
||
"model": "Raspberry Pi 3 Model B Rev 1.2",
|
||
"total_memory": 945364,
|
||
"memory_units": "kB"
|
||
},
|
||
"sd_info": {
|
||
"manufacturer_id": "03",
|
||
"manufacturer": "Sandisk",
|
||
"oem_id": "5344",
|
||
"product_name": "SU32G",
|
||
"product_revision": "8.0",
|
||
"serial_number": "46ba46",
|
||
"manufacturer_date": "4/2018",
|
||
"capacity": "29.7 GiB",
|
||
"total_bytes": 31914983424
|
||
},
|
||
"distribution": {
|
||
"name": "Raspbian GNU/Linux 10 (buster)",
|
||
"id": "raspbian",
|
||
"version": "10",
|
||
"version_parts": {
|
||
"major": "10",
|
||
"minor": "",
|
||
"build_number": ""
|
||
},
|
||
"like": "debian",
|
||
"codename": "buster"
|
||
},
|
||
"available_services": [
|
||
"klipper",
|
||
"klipper_mcu",
|
||
"moonraker"
|
||
],
|
||
"instance_ids": {
|
||
"moonraker": "moonraker",
|
||
"klipper": "klipper"
|
||
},
|
||
"service_state": {
|
||
"klipper": {
|
||
"active_state": "active",
|
||
"sub_state": "running"
|
||
},
|
||
"klipper_mcu": {
|
||
"active_state": "active",
|
||
"sub_state": "running"
|
||
},
|
||
"moonraker": {
|
||
"active_state": "active",
|
||
"sub_state": "running"
|
||
}
|
||
},
|
||
"virtualization": {
|
||
"virt_type": "none",
|
||
"virt_identifier": "none"
|
||
},
|
||
"python": {
|
||
"version": [
|
||
3,
|
||
9,
|
||
2,
|
||
"final",
|
||
0
|
||
],
|
||
"version_string": "3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]"
|
||
},
|
||
"network": {
|
||
"wlan0": {
|
||
"mac_address": "<redacted_mac>",
|
||
"ip_addresses": [
|
||
{
|
||
"family": "ipv4",
|
||
"address": "192.168.1.127",
|
||
"is_link_local": false
|
||
},
|
||
{
|
||
"family": "ipv6",
|
||
"address": "<redacted_ipv6>",
|
||
"is_link_local": false
|
||
},
|
||
{
|
||
"family": "ipv6",
|
||
"address": "fe80::<redacted>",
|
||
"is_link_local": true
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"canbus": {
|
||
"can0": {
|
||
"tx_queue_len": 128,
|
||
"bitrate": 500000,
|
||
"driver": "mcp251x"
|
||
},
|
||
"can1": {
|
||
"tx_queue_len": 128,
|
||
"bitrate": 500000,
|
||
"driver": "gs_usb"
|
||
}
|
||
}
|
||
}
|
||
};
|
||
} else if (header['cmd'] == 'camera.start_monitor') {
|
||
result = {
|
||
'code': -1,
|
||
'data': null,
|
||
'message': 'failure to start monitor'
|
||
};
|
||
var mokeData={
|
||
"header": {
|
||
"seqid": header['seqid']
|
||
},
|
||
"payload": result
|
||
};
|
||
// console.log("simulateResponse message: " + JSON.stringify(mokeData) );
|
||
window.postMessage(JSON.stringify(mokeData), '*'); // 调用 window.postMessage 传递消息给 flutter
|
||
return;
|
||
} else if (header['cmd'] == 'camera.stop_monitor') {
|
||
result = {
|
||
'code': -1,
|
||
'data': null,
|
||
'message': 'failure to stop monitor'
|
||
};
|
||
var mokeData={
|
||
"header": {
|
||
"seqid": header['seqid']
|
||
},
|
||
"payload": result
|
||
};
|
||
// console.log("simulateResponse message: " + JSON.stringify(mokeData) );
|
||
window.postMessage(JSON.stringify(mokeData), '*'); // 调用 window.postMessage 传递消息给 flutter
|
||
return;
|
||
} else if (header['cmd'].startsWith('server.')) {
|
||
result = {
|
||
'code': -1,
|
||
'data': null,
|
||
'message': 'failure to ' + header['cmd']
|
||
};
|
||
var mokeData={
|
||
"header": {
|
||
"seqid": header['seqid']
|
||
},
|
||
"payload": result
|
||
};
|
||
// console.log("simulateResponse message: " + JSON.stringify(mokeData) );
|
||
window.postMessage(JSON.stringify(mokeData), '*'); // 调用 window.postMessage 传递消息给 flutter
|
||
return;
|
||
} else if (header['cmd'] == 'sw_GetFileFilamentMapping') {
|
||
result = getFileFilamentMapping();
|
||
var mokeData={
|
||
"header": {
|
||
"seqid": header['seqid']
|
||
},
|
||
"payload": {
|
||
'code': 200,
|
||
'data': result,
|
||
'message': 'ok',
|
||
}
|
||
};
|
||
window.postMessage(JSON.stringify(mokeData), '*');
|
||
return;
|
||
} else if (header['cmd'] == 'sw_SetFilamentMappingComplete') {
|
||
result = null;
|
||
} else if (header['cmd'] == 'sw_GetMachineFilamentMapping') {
|
||
result = getMachineFilamentMapping();
|
||
} else if (header['cmd'] == 'sw_GetLocalDevices') {
|
||
result = sw_GetLocalDevices();
|
||
var mokeData={
|
||
"header": {
|
||
"seqid": header['seqid']
|
||
},
|
||
"payload": {
|
||
'code': 200,
|
||
'data': result,
|
||
'message': 'ok',
|
||
}
|
||
};
|
||
window.postMessage(JSON.stringify(mokeData), '*');
|
||
return;
|
||
}
|
||
|
||
var mokeData={
|
||
"header": {
|
||
"seqid": header['seqid']
|
||
},
|
||
"payload": {
|
||
'code': 200,
|
||
'data': {
|
||
'data': result,
|
||
'method': 'html.test.' + header['cmd'],
|
||
},
|
||
'message': 'ok',
|
||
}
|
||
};
|
||
window.postMessage(JSON.stringify(mokeData), '*'); // 调用 window.postMessage 传递消息给 flutter
|
||
} catch (error) {
|
||
console.error("Error parsing JSON:", error);
|
||
}
|
||
}
|
||
|
||
function ackResponse(jsonMessage) {
|
||
try {
|
||
// 反序列化 header 和 payload
|
||
const data = JSON.parse(jsonMessage);
|
||
var header = data.header;
|
||
var payload = data.payload;
|
||
// 反序列化 header 和 payload
|
||
// header['event_id'] = payload['event_id'];
|
||
|
||
if(payload['event_id'] != null) {
|
||
// alert(jsonMessage);
|
||
// header['event_id'] = payload['event_id'];
|
||
header['event_id'] = null;
|
||
header['cmd'] = null;
|
||
var mokeData={
|
||
"header": header,
|
||
"payload": {
|
||
'code': 200,
|
||
'data': null,
|
||
'message': 'ok',
|
||
}
|
||
};
|
||
window.postMessage(JSON.stringify(mokeData), '*'); // 调用 window.postMessage 传递消息给 flutter
|
||
}
|
||
|
||
} catch (error) {
|
||
console.error("Error parsing JSON:", error);
|
||
}
|
||
}
|
||
|
||
window.sendMessage = function (message) {
|
||
// console.log("I am proxy in html to send message to container: " + message);
|
||
|
||
// 调用 window.postMessage 传递消息给 flutter
|
||
window.wx && window.wx.postMessage(message); // 调用 window.postMessage 传递消息给 原生系统
|
||
///模拟收到响应结果5000
|
||
if(!window.wx) {
|
||
// 我不能发现 window.wx
|
||
console.log('i dont find window.wx, so i simulate a return by postMessage, debug 模式可以使用 debug_server.js 打开orca')
|
||
//收到请求后,模拟收到响应结果
|
||
// ackResponse(message);
|
||
// setTimeout(simulateResponse(message), 5000)
|
||
}
|
||
}
|
||
|
||
</script>
|
||
<!-- <img src="http://127.0.0.1:13619/profiles/Snapmaker/Snapmaker Artisan_cover.png" alt="Snapmaker Orca" style="width: 100px; height: 100px;"> -->
|
||
|
||
<!-- 测试 -->
|
||
<script>
|
||
function Get_WCP_Body(seqid, cmd, params, eventid){
|
||
let wcp_body = {
|
||
header: {
|
||
seqId: seqid,
|
||
},
|
||
payload: {
|
||
cmd: cmd,
|
||
params: params,
|
||
event_id: eventid,
|
||
}
|
||
}
|
||
// return JSON.stringify(wcp_body);
|
||
return wcp_body;
|
||
}
|
||
|
||
function Send_to_WCP(wcp_body){
|
||
window.wx.postMessage(JSON.stringify(wcp_body));
|
||
}
|
||
|
||
window.addEventListener("message", function(event){
|
||
console.log(event.data);
|
||
});
|
||
|
||
document.getElementById("btn_newproject").addEventListener("click", function() {
|
||
let wcp_body = Get_WCP_Body(1, "sw_NewProject", {}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_openproject").addEventListener("click", function() {
|
||
let wcp_body = Get_WCP_Body(2, "sw_OpenProject", {}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_getrecentprojects").addEventListener("click", function() {
|
||
let wcp_body = Get_WCP_Body(3, "sw_GetRecentProjects", {}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_openrecentfile").addEventListener("click", function() {
|
||
let path = "C:\\Users\\Administrator\\Downloads\\matte耗材参数包.3mf";
|
||
let wcp_body = Get_WCP_Body(4, "sw_OpenRecentFile", {path: path}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_deleterecentfiles").addEventListener("click", function() {
|
||
let paths = ["C:\\Users\\Administrator\\Downloads\\111.3mf"];
|
||
let wcp_body = Get_WCP_Body(5, "sw_DeleteRecentFiles", {paths: paths}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_subscriberecentfiles").addEventListener("click", function() {
|
||
let event_id = "2025";
|
||
let wcp_body = Get_WCP_Body(6, "sw_SubscribeRecentFiles", {}, event_id);
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_setcache").addEventListener("click", function() {
|
||
// 弹出输入框,输入key和value
|
||
let key = prompt("请输入key");
|
||
let value = prompt("请输入value");
|
||
let objects = [
|
||
{
|
||
key: key,
|
||
value: value,
|
||
},
|
||
]
|
||
let wcp_body = Get_WCP_Body(7, "sw_SetCache", {objects: objects}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_getcache").addEventListener("click", function() {
|
||
// 弹出输入框 输入key
|
||
let key = prompt("请输入key");
|
||
let keys = [key];
|
||
let wcp_body = Get_WCP_Body(8, "sw_GetCache", {keys: keys}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_deletecache").addEventListener("click", function() {
|
||
// 弹出输入框 输入key
|
||
let key = prompt("请输入key");
|
||
let keys = [key];
|
||
let wcp_body = Get_WCP_Body(9, "sw_RemoveCache", {keys: keys}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_login").addEventListener("click", function() {
|
||
let wcp_body = Get_WCP_Body(10, "sw_UserLogin", {}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_logout").addEventListener("click", function() {
|
||
let wcp_body = Get_WCP_Body(11, "sw_UserLogout", {}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_getloginstate").addEventListener("click", function() {
|
||
let wcp_body = Get_WCP_Body(12, "sw_GetUserLoginState", {}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_subscribeloginstate").addEventListener("click", function() {
|
||
let event_id = "2026";
|
||
let wcp_body = Get_WCP_Body(13, "sw_SubscribeUserLoginState", {}, event_id);
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_getlocaldevices").addEventListener("click", function() {
|
||
let wcp_body = Get_WCP_Body(14, "sw_GetLocalDevices", {}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_addDevice").addEventListener("click", function() {
|
||
let wcp_body = Get_WCP_Body(15, "sw_AddDevice", {}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_subscribelocaldevices").addEventListener("click", function() {
|
||
let event_id = "2027";
|
||
let wcp_body = Get_WCP_Body(16, "sw_SubscribeLocalDevices", {}, event_id);
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_renamedevice").addEventListener("click", function() {
|
||
let dev_id = "58317961E7DBEF34";
|
||
let wcp_body = Get_WCP_Body(17, "sw_RenameDevice", {dev_id: dev_id, dev_name: "test"}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_switchmodel").addEventListener("click", function() {
|
||
let dev_id = "58317961E7DBEF34";
|
||
let wcp_body = Get_WCP_Body(18, "sw_SwitchModel", {dev_id: dev_id}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
|
||
document.getElementById("btn_deletedevices").addEventListener("click", function() {
|
||
let dev_ids = ["58317961E7DBEF34"];
|
||
let wcp_body = Get_WCP_Body(19, "sw_DeleteDevices", {dev_ids: dev_ids}, "");
|
||
Send_to_WCP(wcp_body);
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
</html>
|