Compare commits
12 Commits
7505e759e1
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
053f1d3ec4
|
|||
|
d4b9f62de0
|
|||
|
51dba8e896
|
|||
|
1b23c58eb6
|
|||
|
20ecc1e8bd
|
|||
|
fe735c310b
|
|||
|
4cc40c913c
|
|||
|
cd18337e12
|
|||
|
8d4a08e36d
|
|||
|
bc4ee8690a
|
|||
|
99c1d038f9
|
|||
|
f0bb8714a3
|
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
# continuum-schemas has no runtime — it only emits generated types/structs.
|
# continuum-schemas has no runtime - it only emits generated types/structs.
|
||||||
# This file is kept for consistency with the other Continuum repos.
|
# This file is kept for consistency with the other Continuum repos.
|
||||||
|
|
||||||
# Optional: private registry token, only needed if packages/* are ever
|
# Optional: private registry token, only needed if packages/* are ever
|
||||||
|
|||||||
@@ -3,11 +3,11 @@
|
|||||||
Single source of truth for the Continuum data model. Protobuf definitions in
|
Single source of truth for the Continuum data model. Protobuf definitions in
|
||||||
`proto/` are compiled into two consumer packages:
|
`proto/` are compiled into two consumer packages:
|
||||||
|
|
||||||
- `packages/ts-types` — TypeScript types generated via `ts-proto`, plus
|
- `packages/ts-types` - TypeScript types generated via `ts-proto`, plus
|
||||||
hand-written [TypeBox](https://github.com/sinclairzx81/typebox) schemas
|
hand-written [TypeBox](https://github.com/sinclairzx81/typebox) schemas
|
||||||
under `src/schemas/` used for runtime validation in `continuum-backend`'s
|
under `src/schemas/` used for runtime validation in `continuum-backend`'s
|
||||||
ElysiaJS routes.
|
ElysiaJS routes.
|
||||||
- `packages/rust-types` — a Rust crate (`continuum-rust-types`) that compiles
|
- `packages/rust-types` - a Rust crate (`continuum-rust-types`) that compiles
|
||||||
the same `.proto` files with `prost-build` (via `build.rs`), producing
|
the same `.proto` files with `prost-build` (via `build.rs`), producing
|
||||||
`serde`-derived structs for `continuum-proxy` and `continuum-ai-worker`.
|
`serde`-derived structs for `continuum-proxy` and `continuum-ai-worker`.
|
||||||
|
|
||||||
|
|||||||
@@ -13,3 +13,6 @@ serde = { version = "1", features = ["derive"] }
|
|||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
prost-build = "0.13"
|
prost-build = "0.13"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
serde_json = "1"
|
||||||
|
|||||||
@@ -11,11 +11,6 @@ fn main() {
|
|||||||
proto_root.join("continuum/v1/print_params.proto"),
|
proto_root.join("continuum/v1/print_params.proto"),
|
||||||
proto_root.join("continuum/v1/template.proto"),
|
proto_root.join("continuum/v1/template.proto"),
|
||||||
proto_root.join("continuum/v1/print_job.proto"),
|
proto_root.join("continuum/v1/print_job.proto"),
|
||||||
proto_root.join("bambulab/common.proto"),
|
|
||||||
proto_root.join("bambulab/v1/request.proto"),
|
|
||||||
proto_root.join("bambulab/v1/report.proto"),
|
|
||||||
proto_root.join("bambulab/v2/request.proto"),
|
|
||||||
proto_root.join("bambulab/v2/report.proto"),
|
|
||||||
];
|
];
|
||||||
|
|
||||||
for file in &proto_files {
|
for file in &proto_files {
|
||||||
@@ -23,41 +18,19 @@ fn main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let mut config = prost_build::Config::new();
|
let mut config = prost_build::Config::new();
|
||||||
|
config.type_attribute(".", "#[derive(serde::Serialize, serde::Deserialize)]");
|
||||||
|
config.type_attribute(".", "#[serde(rename_all = \"camelCase\")]");
|
||||||
|
|
||||||
// continuum.v1 — Continuum's own cross-service API. camelCase to match
|
// prost stores proto3 enums as plain `i32` fields (not the generated
|
||||||
// the TS side's existing convention (this is a schema we designed
|
// enum type), so the blanket type_attribute above never actually runs
|
||||||
// ourselves, so we get to pick the convention).
|
// for `status` - it'd serialize as a bare number, disagreeing with
|
||||||
config.type_attribute(".continuum", "#[derive(serde::Serialize, serde::Deserialize)]");
|
// TypeBox's full-name string literals in ts-types. Route the field
|
||||||
config.type_attribute(".continuum", "#[serde(rename_all = \"camelCase\")]");
|
// through PrintJobStatus's own as_str_name()/from_str_name() instead,
|
||||||
|
// matching protobuf's own canonical JSON enum representation.
|
||||||
// bambulab.* — mirrors Bambu's actual MQTT wire JSON exactly
|
config.field_attribute(
|
||||||
// (snake_case), because this isn't a schema we get to design: it's
|
".continuum.v1.PrintJob.status",
|
||||||
// edge-only traffic (continuum-proxy only, never crosses into TS) that
|
"#[serde(with = \"crate::print_job_status_serde\")]",
|
||||||
// has to match whatever the printer actually sends, byte for byte.
|
);
|
||||||
//
|
|
||||||
// IMPORTANT: these two type_attribute calls are scoped to ".bambulab"
|
|
||||||
// specifically, not "." (global) — type_attribute calls are cumulative,
|
|
||||||
// so a "." blanket rule here would stack a second, conflicting
|
|
||||||
// #[serde(rename_all = ...)] onto every bambulab type alongside this
|
|
||||||
// one and fail to compile. Verified: see commit history for this file.
|
|
||||||
config.type_attribute(".bambulab", "#[derive(serde::Serialize, serde::Deserialize)]");
|
|
||||||
config.type_attribute(".bambulab", "#[serde(rename_all = \"snake_case\")]");
|
|
||||||
|
|
||||||
// Some Bambu response fields aren't always present (e.g. `result`/
|
|
||||||
// `reason` on some info responses) — serde requires every struct field
|
|
||||||
// present in the JSON unless told otherwise. Add one line per such
|
|
||||||
// field as you find them, e.g.:
|
|
||||||
// config.field_attribute(".bambulab.v1.InfoResponse.result", "#[serde(default)]");
|
|
||||||
//
|
|
||||||
// Do NOT try to model the top-level {"info": {...}} / {"pushing": {...}}
|
|
||||||
// envelope as a proto `oneof` here — prost-build's field/variant
|
|
||||||
// attribute matching can't distinguish "the oneof field" from "the
|
|
||||||
// variants inside it" (both match the same path prefix), so
|
|
||||||
// `#[serde(flatten)]` lands in the wrong place and won't compile. Write
|
|
||||||
// the envelope as a plain Rust enum instead, in continuum-proxy —
|
|
||||||
// serde's default enum representation already produces exactly
|
|
||||||
// {"info": {...}} with no configuration at all. See
|
|
||||||
// continuum-proxy/src/printer/bambu_protocol.rs.
|
|
||||||
|
|
||||||
config
|
config
|
||||||
.compile_protos(&proto_files, &[proto_root])
|
.compile_protos(&proto_files, &[proto_root])
|
||||||
|
|||||||
@@ -7,3 +7,40 @@ pub mod continuum {
|
|||||||
pub use continuum::v1::{
|
pub use continuum::v1::{
|
||||||
MaterialProfile, PrintJob, PrintJobStatus, PrintParameters, Template,
|
MaterialProfile, PrintJob, PrintJobStatus, PrintParameters, Template,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// PrintJob.status is generated as a plain i32 (see build.rs's comment) -
|
||||||
|
// (de)serialize it via PrintJobStatus's full proto name strings
|
||||||
|
// (e.g. "PRINT_JOB_STATUS_QUEUED") so Rust's JSON matches ts-types'
|
||||||
|
// TypeBox schema and protobuf's own canonical JSON enum mapping.
|
||||||
|
mod print_job_status_serde {
|
||||||
|
use super::PrintJobStatus;
|
||||||
|
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||||
|
|
||||||
|
pub fn serialize<S: Serializer>(value: &i32, serializer: S) -> Result<S::Ok, S::Error> {
|
||||||
|
let status = PrintJobStatus::try_from(*value).unwrap_or(PrintJobStatus::Unspecified);
|
||||||
|
status.as_str_name().serialize(serializer)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result<i32, D::Error> {
|
||||||
|
let name = String::deserialize(deserializer)?;
|
||||||
|
PrintJobStatus::from_str_name(&name)
|
||||||
|
.map(|status| status as i32)
|
||||||
|
.ok_or_else(|| serde::de::Error::custom(format!("unknown PrintJobStatus: {name}")))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bambu's raw MQTT command/report structs are NOT modeled here - they're
|
||||||
|
// plain hand-written Rust + serde in continuum-proxy's
|
||||||
|
// src/printer/bambu_commands/, not proto. That data is JSON-over-MQTT
|
||||||
|
// (not binary protobuf), and only continuum-proxy ever needs to parse it
|
||||||
|
// - none of protobuf's actual value (cross-language codegen, binary wire
|
||||||
|
// efficiency) applies, and forcing it through prost-build's codegen model
|
||||||
|
// anyway produced real, avoidable friction (see this crate's git history
|
||||||
|
// for the specifics: a field/variant attribute-matching collision on
|
||||||
|
// `oneof`, needing package-scoped `type_attribute` calls, explicit
|
||||||
|
// `field_attribute(..., "#[serde(default)]")` for fields that aren't
|
||||||
|
// always present - every one of these disappears with a hand-written
|
||||||
|
// struct, where `Option<T>` and `#[serde(flatten)]` just work with zero
|
||||||
|
// configuration). Proto stays for continuum.v1 above, which - unlike
|
||||||
|
// this - is a schema we designed ourselves and that both TS and Rust
|
||||||
|
// genuinely need.
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
use continuum_types::{PrintJob, PrintJobStatus};
|
||||||
|
|
||||||
|
fn sample(status: PrintJobStatus) -> PrintJob {
|
||||||
|
PrintJob {
|
||||||
|
id: "job-1".into(),
|
||||||
|
farm_id: "farm-1".into(),
|
||||||
|
printer_id: "printer-1".into(),
|
||||||
|
template_id: "template-1".into(),
|
||||||
|
status: status as i32,
|
||||||
|
progress_percent: 50.0,
|
||||||
|
started_at_unix: 0,
|
||||||
|
completed_at_unix: 0,
|
||||||
|
gcode_file_key: "key".into(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Regression test: PrintJob.status must serialize as the full proto enum
|
||||||
|
// name (matching ts-types' TypeBox schema), not the raw i32 prost stores
|
||||||
|
// it as internally.
|
||||||
|
#[test]
|
||||||
|
fn status_serializes_as_full_proto_enum_name() {
|
||||||
|
let json = serde_json::to_value(sample(PrintJobStatus::Printing)).unwrap();
|
||||||
|
assert_eq!(json["status"], "PRINT_JOB_STATUS_PRINTING");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn status_round_trips_through_json() {
|
||||||
|
let original = sample(PrintJobStatus::Completed);
|
||||||
|
let json = serde_json::to_string(&original).unwrap();
|
||||||
|
let restored: PrintJob = serde_json::from_str(&json).unwrap();
|
||||||
|
assert_eq!(restored.status, PrintJobStatus::Completed as i32);
|
||||||
|
}
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package bambulab;
|
|
||||||
|
|
||||||
// Fields/messages genuinely shared between v1 and v2 (unversioned, since
|
|
||||||
// they don't change across generations) go here — composition, embedded as
|
|
||||||
// a field in v1/v2 messages via `import "bambulab/common.proto";`, not
|
|
||||||
// inheritance. e.g. every Bambu command/response shares sequence_id +
|
|
||||||
// command; that's a good candidate for a message here.
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package bambulab.v1;
|
|
||||||
|
|
||||||
// import "bambulab/common.proto"; once common.proto has a shared message
|
|
||||||
// worth embedding (composition, not inheritance — see that file).
|
|
||||||
|
|
||||||
// Your report/response messages go here, e.g.:
|
|
||||||
//
|
|
||||||
// message InfoResponse {
|
|
||||||
// string sequence_id = 1;
|
|
||||||
// string command = 2;
|
|
||||||
// string result = 3; // not always present — see build.rs field_attribute
|
|
||||||
// string reason = 4; // not always present — see build.rs field_attribute
|
|
||||||
// }
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package bambulab.v1;
|
|
||||||
|
|
||||||
// import "bambulab/common.proto"; once common.proto has a shared message
|
|
||||||
// worth embedding (composition, not inheritance — see that file).
|
|
||||||
|
|
||||||
// Your command messages go here, e.g.:
|
|
||||||
//
|
|
||||||
// message InfoCommand {
|
|
||||||
// string sequence_id = 1;
|
|
||||||
// string command = 2;
|
|
||||||
// }
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package bambulab.v2;
|
|
||||||
|
|
||||||
// import "bambulab/common.proto"; once common.proto has a shared message
|
|
||||||
// worth embedding (composition, not inheritance — see that file).
|
|
||||||
|
|
||||||
// V2-generation (X1/H2 series) report/response messages go here — e.g.
|
|
||||||
// whatever AMS/report-schema fields V2 has that V1 doesn't.
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package bambulab.v2;
|
|
||||||
|
|
||||||
// import "bambulab/common.proto"; once common.proto has a shared message
|
|
||||||
// worth embedding (composition, not inheritance — see that file).
|
|
||||||
|
|
||||||
// V2-generation (X1/H2 series) command messages go here.
|
|
||||||
@@ -0,0 +1,158 @@
|
|||||||
|
# bambulab/ JSON Schemas
|
||||||
|
|
||||||
|
Documentation/validation schemas for Bambu's raw MQTT wire format, mirroring
|
||||||
|
continuum-proxy's `src/printer/bambu_commands/` - not used for codegen (the
|
||||||
|
Rust structs there are hand-written; see that module's doc comment for why),
|
||||||
|
but genuinely useful on their own: language-agnostic documentation of the
|
||||||
|
wire format, and usable to validate a captured MQTT payload without writing
|
||||||
|
any Rust to do it.
|
||||||
|
|
||||||
|
## Layout
|
||||||
|
|
||||||
|
```
|
||||||
|
bambulab/
|
||||||
|
common/
|
||||||
|
envelope.schema.json the base - sequence_id + command, shared by
|
||||||
|
every command in every generation, so it lives
|
||||||
|
here unversioned, not duplicated under v1/v2
|
||||||
|
v1/
|
||||||
|
request.schema.json BambuRequest dispatcher - one key per category
|
||||||
|
("info", "pushing", ...), each a oneOf (a
|
||||||
|
category can have more than one request shape)
|
||||||
|
report.schema.json BambuReport dispatcher, same idea
|
||||||
|
common/ shapes shared across v1's request/ and report/
|
||||||
|
ams/
|
||||||
|
ams.schema.json
|
||||||
|
ams_unit.schema.json
|
||||||
|
ams_tray.schema.json
|
||||||
|
vt_tray.schema.json shared base for AmsTray + the virtual/
|
||||||
|
external spool slot, via allOf + $ref
|
||||||
|
module_info.schema.json
|
||||||
|
hms.schema.json, net.schema.json, online.schema.json,
|
||||||
|
upload.schema.json, upgrade_state.schema.json, xcam.schema.json,
|
||||||
|
ipcam.schema.json, lights_report.schema.json, nozzle_type.schema.json,
|
||||||
|
nozzle_diameter.schema.json
|
||||||
|
request/
|
||||||
|
info/
|
||||||
|
get_version.schema.json
|
||||||
|
pushing/
|
||||||
|
pushall.schema.json
|
||||||
|
report/
|
||||||
|
info/
|
||||||
|
get_version.schema.json
|
||||||
|
print/
|
||||||
|
print.schema.json the ongoing print-state push
|
||||||
|
v2/ same split as v1, once the wire format actually
|
||||||
|
diverges per field - built out below as that's
|
||||||
|
been confirmed, not copy-pasted speculatively
|
||||||
|
request.schema.json dispatcher, same shape as v1's
|
||||||
|
report.schema.json dispatcher, same shape as v1's
|
||||||
|
common/ v2 grew a much larger shared shape set than v1
|
||||||
|
(device/, job/, care, info, ...) because more
|
||||||
|
of the wire format has been captured/confirmed
|
||||||
|
ams/, device/, job/, and the same flat common/*.schema.json files
|
||||||
|
as v1 (hms, net, online, upload, upgrade_state, xcam, ipcam,
|
||||||
|
lights_report, nozzle_type, nozzle_diameter, vt_tray)
|
||||||
|
request/
|
||||||
|
info/
|
||||||
|
get_version.schema.json
|
||||||
|
report/
|
||||||
|
info/
|
||||||
|
get_version.schema.json
|
||||||
|
_module_info.schema.json
|
||||||
|
print/
|
||||||
|
print.schema.json the ongoing print-state push (command
|
||||||
|
"push_status")
|
||||||
|
_2d_report.schema.json, _3d_report.schema.json,
|
||||||
|
_nozzle_type.schema.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Add a category to a dispatcher (`v1|v2/request.schema.json` or
|
||||||
|
`report.schema.json`) whenever a new `request/<category>/` or
|
||||||
|
`report/<category>/` schema is added on disk - an unwired leaf schema is
|
||||||
|
unreachable from validation even though it parses fine on its own.
|
||||||
|
|
||||||
|
**One real correction baked into this layout**: the report category for
|
||||||
|
whatever a `pushall` request triggers is `report/print/`, not
|
||||||
|
`report/pushing/`. Sending `pushall` (which *does* go to the `pushing` key
|
||||||
|
on the request side) makes the printer start/refresh an ongoing state-push
|
||||||
|
stream, and that stream arrives under the `print` key - a different root
|
||||||
|
key from the request that triggered it. A category folder here means
|
||||||
|
"what root key does this arrive under", not "what request caused it" - the
|
||||||
|
first version of this schema got that wrong (see git history) before a
|
||||||
|
closer read of the real capture caught it.
|
||||||
|
|
||||||
|
## The "inheritance" pattern
|
||||||
|
|
||||||
|
Every command/response schema *extends* `envelope.schema.json` with
|
||||||
|
`allOf` + `$ref`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{ "type": "object", "properties": { "command": { "const": "get_version" } } }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This is genuinely closer to real inheritance than anything else in this
|
||||||
|
project's schema stack (proto, Rust): the instance must satisfy the base
|
||||||
|
schema *and* the extension schema simultaneously, and - verified with
|
||||||
|
negative test cases, not just asserted - `envelope.schema.json`'s
|
||||||
|
`required: ["sequence_id", "command"]` is actually enforced on every
|
||||||
|
schema that extends it, not just copy-pasted as documentation.
|
||||||
|
|
||||||
|
`v1/report/print/_ams_tray.schema.json` is the other JSON-Schema-specific
|
||||||
|
tool worth knowing: `oneOf`, for "this is exactly one of several
|
||||||
|
genuinely different shapes" (an AMS tray slot is either empty - just
|
||||||
|
`id` - or loaded - the full field set - never something in between).
|
||||||
|
`oneOf` requires exactly one branch to match; watch out for a base-style
|
||||||
|
branch (like `EmptyTray`) accidentally also matching a more specific
|
||||||
|
branch's instance if the specific branch doesn't require enough fields -
|
||||||
|
verified and fixed once already here, see that file's description.
|
||||||
|
|
||||||
|
**One gotcha if you add a new base-style schema**: don't set
|
||||||
|
`"additionalProperties": false` on something meant to be `allOf`-extended.
|
||||||
|
`allOf` validates every sub-schema against the *whole* instance
|
||||||
|
independently - it doesn't merge object schemas - so a closed base schema
|
||||||
|
would reject every field the extending schema adds. Leave
|
||||||
|
`additionalProperties` unset (defaults to allowed) on anything used as a
|
||||||
|
base; enforce closedness only on the top-level dispatcher schemas
|
||||||
|
(`v1/request.schema.json`/`v1/report.schema.json` do this correctly -
|
||||||
|
check their `additionalProperties: false`).
|
||||||
|
|
||||||
|
## `$id` convention
|
||||||
|
|
||||||
|
Every schema's `$id` is its real Gitea raw-file URL:
|
||||||
|
`https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/...`
|
||||||
|
- a genuinely dereferenceable URI (verified: `raw/branch/main/<path>` is
|
||||||
|
the correct Gitea pattern, not `raw/<path>` or `raw/<branch>/<path>`),
|
||||||
|
rather than a made-up placeholder domain. `$ref`s between files stay
|
||||||
|
relative paths; `$id` is what a validator uses as the base URI to resolve
|
||||||
|
those relative refs, and it's also what lets a schema be fetched
|
||||||
|
standalone by anything that wants to dereference it directly.
|
||||||
|
|
||||||
|
## Validating something
|
||||||
|
|
||||||
|
`$ref` resolution here relies on each schema's `$id` as the base URI for
|
||||||
|
its own relative refs (standard JSON Schema behavior) - register schemas
|
||||||
|
by `$id`, not by filename, or you'll hit collisions (`get_version.schema.json`
|
||||||
|
exists under both `request/info/` and `report/info/`):
|
||||||
|
|
||||||
|
```python
|
||||||
|
from referencing import Registry, Resource
|
||||||
|
from jsonschema import Draft202012Validator
|
||||||
|
import json, glob
|
||||||
|
|
||||||
|
resources = [
|
||||||
|
(json.load(open(p))["$id"], Resource.from_contents(json.load(open(p))))
|
||||||
|
for p in glob.glob("**/*.schema.json", recursive=True)
|
||||||
|
]
|
||||||
|
registry = Registry().with_resources(resources)
|
||||||
|
|
||||||
|
schema = json.load(open("v1/request.schema.json"))
|
||||||
|
Draft202012Validator(schema, registry=registry).validate(
|
||||||
|
{"info": {"sequence_id": "0", "command": "get_version"}}
|
||||||
|
)
|
||||||
|
```
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/common/envelope.schema.json",
|
||||||
|
"title": "CommandEnvelope",
|
||||||
|
"description": "Fields every Bambu MQTT command/response shares, across both protocol generations - unversioned, at the bambulab/ root, not duplicated under v1/ or v2/. This is the 'base class' - other schemas extend it via allOf + $ref. JSON Schema doesn't have inheritance either, strictly speaking (no 'extends' keyword) - allOf is composition: it says the instance must satisfy THIS schema AND whatever else is listed alongside it. It's the closest thing to real inheritance ergonomics of anything used across this project's schema stack (proto, Rust), because $ref + allOf lets you name and reuse a shape without re-declaring its fields, which proto/Rust composition can't quite do (there you still write `common: PrinterReportCommon` by hand on every struct). Additionally, any field not defined by the schema will be returned by the printer int the original form - useful when making telemetrics.",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"sequence_id": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Sequence ID matching the original request"
|
||||||
|
},
|
||||||
|
"command": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Command being reported on"
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["success", "fail", "SUCCESS", "FAIL"],
|
||||||
|
"description": "Result status (case-insensitive)"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Optional reason or error message"
|
||||||
|
},
|
||||||
|
"is_from_mqtt": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Used by BambuMQTT v2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["sequence_id", "command"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/ams/ams.schema.json",
|
||||||
|
"title": "AmsState",
|
||||||
|
"description": "Bambu's own naming has the outer container and the inner array both called `ams` - print.ams.ams, not a typo here, just what the printer actually sends.",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"ams": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "$ref": "./ams_unit.schema.json" }
|
||||||
|
},
|
||||||
|
"ams_exists_bits": { "type": "string" },
|
||||||
|
"tray_exist_bits": { "type": "string" },
|
||||||
|
"tray_is_bbl_bits": { "type": "string" },
|
||||||
|
"tray_tar": { "type": "string" },
|
||||||
|
"tray_now": { "type": "string" },
|
||||||
|
"tray_pre": { "type": "string" },
|
||||||
|
"tray_read_done_bits": { "type": "string" },
|
||||||
|
"tray_reading_bits": { "type": "string" },
|
||||||
|
"version": { "type": "integer" },
|
||||||
|
"insert_flag": { "type": "boolean" },
|
||||||
|
"power_on_flag": { "type": "boolean" }
|
||||||
|
},
|
||||||
|
"required": ["ams"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/ams/ams_tray.schema.json",
|
||||||
|
"title": "AmsTray",
|
||||||
|
"description": "A tray slot is either empty (just `id`) or loaded (the full field set) - two genuinely different shapes for the same slot, not one shape with optional fields. oneOf says the instance must match EXACTLY one of these. Note LoadedTray requires every field it lists, not just `id` - with only `id` required, a bare {\"id\":\"0\"} would validate against BOTH branches at once (it trivially satisfies Loaded's single requirement too) and oneOf would fail, since oneOf demands exactly one match. Verified this the hard way - see git history. The Rust equivalent is an untagged enum with #[serde(deny_unknown_fields)] on the Empty variant, for the same reason in reverse: without it, a loaded tray's extra fields wouldn't be rejected by Empty, and untagged enums try variants in order - see bambu_commands/print.rs. `drying_time` and `drying_temp` fields are only available for AMS 2 and AMS HT - AMS 1 doesn't have the drying option.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"title": "EmptyTray",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["id"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../vt_tray.schema.json" },
|
||||||
|
{
|
||||||
|
"title": "LoadedTray",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"state": { "type": "integer" },
|
||||||
|
"total_len": { "type": "number", "minimum": 0 },
|
||||||
|
"ctype": { "type": "integer" },
|
||||||
|
"cols": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"drying_time": { "type": "string" },
|
||||||
|
"drying_temp": { "type": "string" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"state", "total_len", "ctype", "cols"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/ams/ams_unit.schema.json",
|
||||||
|
"title": "AmsUnit",
|
||||||
|
"description": "One physical AMS unit (Bambu's numbering starts at 0 via `id`).",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"tray": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "$ref": "./ams_tray.schema.json" }
|
||||||
|
},
|
||||||
|
"chip_id": { "type": "string" },
|
||||||
|
"ams_id": { "type": "string" },
|
||||||
|
"check": { "type": "integer" },
|
||||||
|
"id": { "type": "string" },
|
||||||
|
"humidity": { "type": "string" },
|
||||||
|
"humidity_raw": { "type": "string" },
|
||||||
|
"temp": { "type": "string" },
|
||||||
|
"dry_time": { "type": "integer" },
|
||||||
|
"info": { "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["humidity", "id", "temp", "tray"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/hms.schema.json",
|
||||||
|
"title": "HMS",
|
||||||
|
"description": "HMS Error Report",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"attr": { "type": "integer" },
|
||||||
|
"code": { "type": "integer" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/ipcam.schema.json",
|
||||||
|
"title": "Ipcam",
|
||||||
|
"description": "Report about the in-built IP camera",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"ipcam_dev": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ipcam_record": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"enable",
|
||||||
|
"disable",
|
||||||
|
"ENABLE",
|
||||||
|
"DISABLE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"timelapse": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"enable",
|
||||||
|
"disable",
|
||||||
|
"ENABLE",
|
||||||
|
"DISABLE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"resolution": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tutk_server": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"enable",
|
||||||
|
"disable",
|
||||||
|
"ENABLE",
|
||||||
|
"DISABLE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"mode_bits": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/lights_report.schema.json",
|
||||||
|
"title": "LightsReport",
|
||||||
|
"description": "Report status of printer lights",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"mode": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"on",
|
||||||
|
"off",
|
||||||
|
"ON",
|
||||||
|
"OFF"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"chamber_light",
|
||||||
|
"work_light",
|
||||||
|
"chamber_light2"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/module_info.schema.json",
|
||||||
|
"title": "ModuleInfo",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": { "type": "string" },
|
||||||
|
"sw_ver": { "type": "string" },
|
||||||
|
"hw_ver": { "type": "string" },
|
||||||
|
"loader_ver": { "type": "string" },
|
||||||
|
"product_name": { "type": "string" },
|
||||||
|
"sn": { "type": "string" },
|
||||||
|
"visible": { "type": "boolean" },
|
||||||
|
"flag": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"sw_ver",
|
||||||
|
"hw_ver",
|
||||||
|
"loader_ver",
|
||||||
|
"sn",
|
||||||
|
"product_name",
|
||||||
|
"visible",
|
||||||
|
"flag"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/net.schema.json",
|
||||||
|
"title": "Net",
|
||||||
|
"description": "Network status",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"conf": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"info": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"ip": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"mask": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ip",
|
||||||
|
"mask"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/nozzle_diameter.schema.json",
|
||||||
|
"title": "NozzleDiameter",
|
||||||
|
"description": "Common schema for nozzle diameter",
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"0.2",
|
||||||
|
"0.4",
|
||||||
|
"0.6",
|
||||||
|
"0.8"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/nozzle_type.schema.json",
|
||||||
|
"title": "NozzleType",
|
||||||
|
"description": "Common schema for nozzle type",
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"stainless_steel",
|
||||||
|
"hardened_steel"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/online.schema.json",
|
||||||
|
"title": "Online",
|
||||||
|
"description": "Printer online/offline status",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"ahb": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"rfid": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/upgrade_state.schema.json",
|
||||||
|
"title": "UpgradeState",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"sequence": { "type": "string" },
|
||||||
|
"progress": { "type": "string" },
|
||||||
|
"status": { "type": "string", "enum": ["idle", "IDLE"]},
|
||||||
|
"consistency_request": { "type": "boolean" },
|
||||||
|
"dis_state": { "type": "integer" },
|
||||||
|
"err_code": { "type": "integer" },
|
||||||
|
"force_upgrade": { "type": "boolean" },
|
||||||
|
"message": { "type": "string" },
|
||||||
|
"module": { "type": "string" },
|
||||||
|
"new_version_state": { "type": "integer" },
|
||||||
|
"cur_state_code": { "type": "integer" },
|
||||||
|
"idx2": { "type": "integer" },
|
||||||
|
"new_ver_list": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/upload.schema.json",
|
||||||
|
"title": "Upload",
|
||||||
|
"description": "File upload progress",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"idle",
|
||||||
|
"IDLE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"progress": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"file_size": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"finish_size": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"oss_url": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"progress": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"speed": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"idle",
|
||||||
|
"IDLE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"task_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"time_remaining": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"trouble_id": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/vt_tray.schema.json",
|
||||||
|
"title": "VtTray",
|
||||||
|
"description": "This schema is used as Virtual Tray (external spool) or as a base for AmsTray. When empty, all values are zeroed and `tray_color` field is set to \"FFFFFF00\".",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "string" },
|
||||||
|
"tag_uid": { "type": "string" },
|
||||||
|
"tray_id_name": { "type": "string" },
|
||||||
|
"tray_info_idx": { "type": "string" },
|
||||||
|
"tray_type": { "type": "string" },
|
||||||
|
"tray_sub_brands": { "type": "string" },
|
||||||
|
"tray_color": { "type": "string" },
|
||||||
|
"tray_weight": { "type": "string" },
|
||||||
|
"tray_diameter": { "type": "string" },
|
||||||
|
"tray_temp": { "type": "string" },
|
||||||
|
"tray_time": { "type": "string" },
|
||||||
|
"bed_temp_type": { "type": "string" },
|
||||||
|
"bed_temp": { "type": "string" },
|
||||||
|
"nozzle_temp_min": { "type": "string" },
|
||||||
|
"nozzle_temp_max": { "type": "string" },
|
||||||
|
"xcam_info": { "type": "string" },
|
||||||
|
"tray_uuid": { "type": "string" },
|
||||||
|
"remain": { "type": "integer", "minimum": 0 },
|
||||||
|
"k": { "type": "number" },
|
||||||
|
"n": { "type": "number" },
|
||||||
|
"cali_idx": { "type": "number" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"id", "remain", "bed_temp", "bed_temp_type",
|
||||||
|
"nozzle_temp_max", "nozzle_temp_min", "tag_uid", "tray_color",
|
||||||
|
"tray_diameter", "tray_id_name", "tray_info_idx", "tray_sub_brands",
|
||||||
|
"tray_type", "tray_uuid", "tray_weight", "xcam_info", "k", "n"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/common/xcam.schema.json",
|
||||||
|
"title": "XcamSettings",
|
||||||
|
"description": "Camera-based AI print monitoring settings (spaghetti detection, first-layer inspection, etc.).",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"allow_skip_parts": { "type": "boolean" },
|
||||||
|
"buildplate_marker_detector": { "type": "boolean" },
|
||||||
|
"first_layer_inspector": { "type": "boolean" },
|
||||||
|
"halt_print_sensitivity": { "type": "string" },
|
||||||
|
"print_halt": { "type": "boolean" },
|
||||||
|
"printing_monitor": { "type": "boolean" },
|
||||||
|
"spaghetti_detector": { "type": "boolean" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"allow_skip_parts", "buildplate_marker_detector", "first_layer_inspector",
|
||||||
|
"halt_print_sensitivity", "print_halt", "printing_monitor", "spaghetti_detector"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/report.schema.json",
|
||||||
|
"title": "BambuReport",
|
||||||
|
"description": "Matches continuum-proxy's src/printer/bambu_commands::BambuReport. Note the category here is \"print\", not \"pushing\" - sending a pushall request (which does go to \"pushing\", see request.schema.json) makes the printer start/refresh the ongoing state-push stream, which itself arrives under \"print\". They're different root keys because a report category means 'what key does this arrive under', not 'what request caused it'. Each category's value is a oneOf for the same reason as request.schema.json: room for more than one shape per category without a rewrite later.",
|
||||||
|
"type": "object",
|
||||||
|
"minProperties": 1,
|
||||||
|
"maxProperties": 1,
|
||||||
|
"properties": {
|
||||||
|
"info": {
|
||||||
|
"oneOf": [
|
||||||
|
{ "$ref": "report/info/get_version.schema.json" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"print": {
|
||||||
|
"oneOf": [
|
||||||
|
{ "$ref": "report/print/print.schema.json" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/report/info/get_version.schema.json",
|
||||||
|
"title": "GetVersionReport",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "get_version" },
|
||||||
|
"module": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "$ref": "../../common/module_info.schema.json" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["module"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/report/print/gcode_file.schema.json",
|
||||||
|
"title": "GcodeFileRequest",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "gcode_file" },
|
||||||
|
"param": { "description": "Full path to GCODE file in printer's FS", "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/report/print/gcode_line.schema.json",
|
||||||
|
"title": "GcodeLineReport",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "gcode_line" },
|
||||||
|
"param": { "description": "use \n for multiple lines", "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/report/print/print.schema.json",
|
||||||
|
"title": "PrintReport",
|
||||||
|
"description": "The ongoing print-state push (root key \"print\") - NOT a direct reply to the pushall request (that goes to \"pushing\", see request/pushing/pushall.schema.json). Sending pushall makes the printer start/refresh this stream; it isn't itself request/response, which is also why this is its own category folder rather than sitting under pushing/ - a category here is 'what root key does this arrive under', not 'what triggered it'.",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "push_status" },
|
||||||
|
|
||||||
|
"upgrade_state": { "$ref": "../../common/upgrade_state.schema.json" },
|
||||||
|
"ipcam": { "$ref": "../../common/ipcam.schema.json" },
|
||||||
|
"upload": { "$ref": "../../common/upload.schema.json" },
|
||||||
|
"net": { "$ref": "../../common/net.schema.json" },
|
||||||
|
"hms": { "$ref": "../../common/hms.schema.json" },
|
||||||
|
"online": { "$ref": "../../common/online.schema.json" },
|
||||||
|
"ams": { "$ref": "../../common/ams/ams.schema.json" },
|
||||||
|
"vt_tray": { "$ref": "../../common/vt_tray.schema.json" },
|
||||||
|
"lights_report": { "$ref": "../../common/lights_report.schema.json" },
|
||||||
|
"xcam": { "$ref": "../../common/xcam.schema.json" },
|
||||||
|
|
||||||
|
"nozzle_diameter": { "$ref": "../../common/nozzle_diameter.schema.json" },
|
||||||
|
"nozzle_type": { "$ref": "../../common/nozzle_type.schema.json" },
|
||||||
|
"nozzle_temper": { "type": "number" },
|
||||||
|
"nozzle_target_temper": { "type": "number" },
|
||||||
|
"bed_temper": { "type": "number" },
|
||||||
|
"bed_target_temper": { "type": "number" },
|
||||||
|
"chamber_temper": { "type": "number" },
|
||||||
|
"chamber_target_temper": { "type": "number" },
|
||||||
|
"fan_gear": { "type": "integer" },
|
||||||
|
"heatbreak_fan_speed": { "type": "string" },
|
||||||
|
"cooling_fan_speed": { "type": "string" },
|
||||||
|
"big_fan1_speed": { "type": "string" },
|
||||||
|
"big_fan2_speed": { "type": "string" },
|
||||||
|
|
||||||
|
"s_obj": { "type": "array", "items": {} },
|
||||||
|
"filam_bak": { "type": "array", "items": {} },
|
||||||
|
"stg": { "type": "array", "items": { "type": "number" } },
|
||||||
|
|
||||||
|
"mc_print_stage": { "type": "string" },
|
||||||
|
"mc_percent": { "type": "integer" },
|
||||||
|
"mc_remaining_time": { "type": "integer" },
|
||||||
|
|
||||||
|
"ams_status": { "type": "integer" },
|
||||||
|
"ams_rfid_status": { "type": "integer" },
|
||||||
|
"hw_switch_state": { "type": "integer" },
|
||||||
|
"spd_mag": { "type": "integer", "minimum": 0, "maximum": 100 },
|
||||||
|
"spd_lvl": { "type": "integer", "minimum": 1, "maximum": 4 },
|
||||||
|
"print_error": { "type": "integer" },
|
||||||
|
"lifecycle": { "type": "string", "enum": ["product"] },
|
||||||
|
"wifi_signal": { "type": "string", "pattern": "^-([0-9]{1,2}|100)dBm$" },
|
||||||
|
"gcode_state": { "type": "string", "enum": [ "idle", "IDLE", "finish", "FINISH", "running", "RUNNING" ] },
|
||||||
|
"gcode_file_prepare_percent": { "type": "string" },
|
||||||
|
"queue_number": { "type": "integer" },
|
||||||
|
"queue_total": { "type": "integer" },
|
||||||
|
"queue_est": { "type": "integer" },
|
||||||
|
"queue_sts": { "type": "integer" },
|
||||||
|
"project_id": { "type": "string" },
|
||||||
|
"profile_id": { "type": "string" },
|
||||||
|
"task_id": { "type": "string" },
|
||||||
|
"subtask_id": { "type": "string" },
|
||||||
|
"subtask_name": { "type": "string" },
|
||||||
|
"gcode_file": { "type": "string" },
|
||||||
|
"stg_cur": { "type": "integer" },
|
||||||
|
"print_type": { "type": "string", "enum": [ "", "idle", "IDLE" ] },
|
||||||
|
"home_flag": { "type": "integer" },
|
||||||
|
"mc_print_line_number": { "type": "string" },
|
||||||
|
"mc_print_sub_stage": { "type": "integer" },
|
||||||
|
"sdcard": { "type": "boolean" },
|
||||||
|
"force_upgrade": { "type": "boolean" },
|
||||||
|
"mess_production_state": { "type": "string", "enum": [ "active", "inactive", "ACTIVE", "INACTIVE" ] },
|
||||||
|
"layer_num": { "type": "integer" },
|
||||||
|
"total_layer_num": { "type": "integer" },
|
||||||
|
"cali_version": { "type": "integer" },
|
||||||
|
"k": { "type": "string" },
|
||||||
|
"flag3": { "type": "integer" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/report/print/print_speed.schema.json",
|
||||||
|
"title": "PrintSpeedReport",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "print_speed" },
|
||||||
|
"param": {
|
||||||
|
"description": "1 - silent (50%), 2 - standard (100%), 3 - sport (124%), 4 - ludicrous (166%)",
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["1", "2", "3", "4"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/report/print/unload_filament.schema.json",
|
||||||
|
"title": "UnloadFilamentReport",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "unload_filament" }
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/request.schema.json",
|
||||||
|
"title": "BambuRequest",
|
||||||
|
"description": "Matches continuum-proxy's src/printer/bambu_commands::BambuRequest - one JSON key naming the category ('info', 'pushing', ...). Each category's value is a oneOf, not a single $ref: a category can have more than one possible request shape (e.g. 'info' might grow a second command besides get_version) - oneOf leaves room for that from the start instead of needing a rewrite the day it happens.",
|
||||||
|
"type": "object",
|
||||||
|
"minProperties": 1,
|
||||||
|
"maxProperties": 1,
|
||||||
|
"properties": {
|
||||||
|
"info": {
|
||||||
|
"oneOf": [
|
||||||
|
{ "$ref": "request/info/get_version.schema.json" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pushing": {
|
||||||
|
"oneOf": [
|
||||||
|
{ "$ref": "request/pushing/pushall.schema.json" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/request/info/get_version.schema.json",
|
||||||
|
"title": "GetVersionRequest",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "get_version" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/request/print/calibration.schema.json",
|
||||||
|
"title": "CalibrationRequest",
|
||||||
|
"description": "Printer responds with `push_status` instead of `calibration` with following fields set: `{ \"mc_print_stage\": 2, \"gcode_state\": \"RUNNING\", \"gcode_file_prepare_percent\": 100, \"subtask_name\": \"auto_cali_for_user_param.gcode\", \"gcode_file\": \"auto_cali_for_user_param.gcode\", \"print_type\": \"system\" }`",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "calibration" },
|
||||||
|
"option": {
|
||||||
|
"description": "Following bitmask is required for the `option` field: `if (lidarCalibration) bitmask |= 1; if (bedLevelling) bitmask |= 1 << 1; if (vibrationCompensation) bitmask |= 1 << 2; if (motorCancellation) bitmask |= 1 << 3;`",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 15
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["option"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/request/print/gcode_file.schema.json",
|
||||||
|
"title": "GcodeFileRequest",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "gcode_file" },
|
||||||
|
"param": { "description": "Full path to GCODE file in printer's FS", "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/request/print/gcode_line.schema.json",
|
||||||
|
"title": "GcodeLineRequest",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "gcode_line" },
|
||||||
|
"param": { "description": "use \n for multiple lines", "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/request/print/print_speed.schema.json",
|
||||||
|
"title": "PrintSpeedRequest",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "print_speed" },
|
||||||
|
"param": {
|
||||||
|
"description": "1 - silent (50%), 2 - standard (100%), 3 - sport (124%), 4 - ludicrous (166%)",
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["1", "2", "3", "4"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/request/print/unload_filament.schema.json",
|
||||||
|
"title": "UnloadFilamentRequest",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "unload_filament" }
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v1/request/pushing/pushall.schema.json",
|
||||||
|
"title": "PushallRequest",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "pushall" },
|
||||||
|
"version": { "type": "integer", "minimum": 1, "maximum": 1 },
|
||||||
|
"push_target": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["version", "push_target"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/ams/ams.schema.json",
|
||||||
|
"title": "AmsState",
|
||||||
|
"description": "Bambu's own naming has the outer container and the inner array both called `ams` - print.ams.ams, not a typo here, just what the printer actually sends.",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"ams": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "$ref": "./ams_unit.schema.json" }
|
||||||
|
},
|
||||||
|
"ams_exists_bits": { "type": "string" },
|
||||||
|
"ams_exist_bits_raw": { "type": "string" },
|
||||||
|
"cali_id": { "type": "integer" },
|
||||||
|
"cali_stat": { "type": "integer" },
|
||||||
|
"insert_flag": { "type": "boolean" },
|
||||||
|
"power_on_flag": { "type": "boolean" },
|
||||||
|
"tray_exist_bits": { "type": "string" },
|
||||||
|
"tray_is_bbl_bits": { "type": "string" },
|
||||||
|
"tray_now": { "type": "string" },
|
||||||
|
"tray_pre": { "type": "string" },
|
||||||
|
"tray_read_done_bits": { "type": "string" },
|
||||||
|
"tray_reading_bits": { "type": "string" },
|
||||||
|
"tray_tar": { "type": "string" },
|
||||||
|
"unbind_ams_stat": { "type": "integer" },
|
||||||
|
"version": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ams", "ams_exists_bits", "ams_exist_bits_raw", "cali_id",
|
||||||
|
"cali_stat", "insert_flag", "power_on_flag", "tray_exist_bits",
|
||||||
|
"tray_is_bbl_bits", "tray_now", "tray_pre", "tray_read_done_bits",
|
||||||
|
"tray_reading_bits", "tray_tar", "unbind_ams_stat", "version"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/ams/ams_tray.schema.json",
|
||||||
|
"title": "AmsTray",
|
||||||
|
"description": "A tray slot is either empty (just `id`) or loaded (the full field set) - two genuinely different shapes for the same slot, not one shape with optional fields. oneOf says the instance must match EXACTLY one of these. Note LoadedTray requires every field it lists, not just `id` - with only `id` required, a bare {\"id\":\"0\"} would validate against BOTH branches at once (it trivially satisfies Loaded's single requirement too) and oneOf would fail, since oneOf demands exactly one match. Verified this the hard way - see git history. The Rust equivalent is an untagged enum with #[serde(deny_unknown_fields)] on the Empty variant, for the same reason in reverse: without it, a loaded tray's extra fields wouldn't be rejected by Empty, and untagged enums try variants in order - see bambu_commands/print.rs. `drying_time` and `drying_temp` fields are only available for AMS 2 and AMS HT - AMS 1 doesn't have the drying option.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"title": "EmptyTray",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "string" },
|
||||||
|
"state": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["id", "state"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../vt_tray.schema.json" },
|
||||||
|
{
|
||||||
|
"title": "LoadedTray",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"state": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"state"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/ams/ams_unit.schema.json",
|
||||||
|
"title": "AmsUnit",
|
||||||
|
"description": "One physical AMS unit (Bambu's numbering starts at 0 via `id`).",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"tray": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "$ref": "./ams_tray.schema.json" }
|
||||||
|
},
|
||||||
|
"dry_time": { "type": "integer" },
|
||||||
|
"humidity": { "type": "string" },
|
||||||
|
"humidity_raw": { "type": "string" },
|
||||||
|
"id": { "type": "string" },
|
||||||
|
"info": { "type": "string" },
|
||||||
|
"temp": { "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["humidity", "humidity_raw", "id", "info", "temp", "tray"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/care.schema.json",
|
||||||
|
"title": "Care",
|
||||||
|
"description": "Printer online/offline status",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "string", "pattern": "^[lhLH][sdrSDR]$" },
|
||||||
|
"info": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/airduct.schema.json",
|
||||||
|
"title": "DeviceAirduct",
|
||||||
|
"description": "Schema for details about the Airduct",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"modeList": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "./airduct_mode.schema.json"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"parts": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "./airduct_part.schema.json"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"modeCur": { "type": "integer" },
|
||||||
|
"modeFunc": { "type": "integer" },
|
||||||
|
"modeVisable": { "type": "integer" },
|
||||||
|
"subFunc": { "type": "integer" },
|
||||||
|
"subMode": { "type": "integer" },
|
||||||
|
"subVisable": { "type": "integer" },
|
||||||
|
"version": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"modeCur", "modeFunc", "modeVisable",
|
||||||
|
"subFunc", "subMode", "subVisable",
|
||||||
|
"version", "modeList", "parts"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/airduct_mode.schema.json",
|
||||||
|
"title": "DeviceAirductMode",
|
||||||
|
"description": "Schema for available airduct modes",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"ctrl": { "type": "array", "items": { "type": "integer", "multipleOf": 16 } },
|
||||||
|
"off": { "type": "array", "items": { "type": "integer", "multipleOf": 16 } },
|
||||||
|
"modeId": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["ctrl", "off", "modeId"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/airduct_part.schema.json",
|
||||||
|
"title": "DeviceAirductPart",
|
||||||
|
"description": "Schema for available airduct parts",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"func": { "type": "integer" },
|
||||||
|
"id": { "type": "integer" },
|
||||||
|
"range": { "type": "integer" },
|
||||||
|
"state": { "type": "integer" },
|
||||||
|
"tar_state": { "type": "integer" }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/bed.schema.json",
|
||||||
|
"title": "DeviceBed",
|
||||||
|
"description": "Detailed info about Bed",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"info": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"temp": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["temp"]
|
||||||
|
},
|
||||||
|
"state": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["info", "state"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/cam.schema.json",
|
||||||
|
"title": "DeviceCamera",
|
||||||
|
"description": "Detailed info about Camera",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"laser": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"cond": { "type": "integer" },
|
||||||
|
"state": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["cond", "state"]
|
||||||
|
},
|
||||||
|
"timelapse_path": { "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["laser", "timelapse_path"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/ctc.schema.json",
|
||||||
|
"title": "DeviceCTC",
|
||||||
|
"description": "Detailed info about CTC",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"info": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"temp": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["temp"]
|
||||||
|
},
|
||||||
|
"state": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["info", "state"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/device.schema.json",
|
||||||
|
"title": "DeviceBed",
|
||||||
|
"description": "Detailed info about all available devices",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"airduct": { "$ref": "./airduct.schema.json" },
|
||||||
|
"bed": { "$ref": "./bed.schema.json" },
|
||||||
|
"cam": { "$ref": "./cam.schema.json" },
|
||||||
|
"ctc": { "$ref": "./ctc.schema.json" },
|
||||||
|
"ext_tool": { "$ref": "./ext_tool.schema.json" },
|
||||||
|
"extruder": { "$ref": "./extruder.schema.json" },
|
||||||
|
"fire_ext": { "$ref": "./fire_ext.schema.json" },
|
||||||
|
"holder": { "$ref": "./holder.schema.json" },
|
||||||
|
"laser": { "$ref": "./laser.schema.json" },
|
||||||
|
"nozzle": { "$ref": "./nozzle.schema.json" },
|
||||||
|
"plate": { "$ref": "./plate.schema.json" },
|
||||||
|
"bed_temp": { "type": "integer" },
|
||||||
|
"fan": { "type": "integer" },
|
||||||
|
"type": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"airduct", "bed", "cam", "ctc",
|
||||||
|
"ext_tool", "extruder", "fire_ext", "holder",
|
||||||
|
"laser", "nozzle", "plate", "bed_temp",
|
||||||
|
"fan", "type"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/ext_tool.schema.json",
|
||||||
|
"title": "DeviceExternalTool",
|
||||||
|
"description": "Detailed info about External Tool",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"calib": { "type": "integer" },
|
||||||
|
"low_prec": { "type": "boolean" },
|
||||||
|
"mount": { "type": "integer" },
|
||||||
|
"mount_3d": { "type": "integer" },
|
||||||
|
"th_temp": { "type": "integer" },
|
||||||
|
"type": { "type": "string" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"calib", "low_prec", "mount",
|
||||||
|
"mount_3d", "th_temp", "type"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/extruder.schema.json",
|
||||||
|
"title": "DeviceExtruder",
|
||||||
|
"description": "Detailed info about Extruders",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"info": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "./extruder_item.schema.json"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"state": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["info", "state"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/extruder_item.schema.json",
|
||||||
|
"title": "DeviceExtruderItem",
|
||||||
|
"description": "Detailed info about specific Extruder",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"filam_bak": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"hnow": { "type": "integer" },
|
||||||
|
"hpre": { "type": "integer" },
|
||||||
|
"htar": { "type": "integer" },
|
||||||
|
"id": { "type": "integer" },
|
||||||
|
"info": { "type": "integer" },
|
||||||
|
"snow": { "type": "integer" },
|
||||||
|
"spre": { "type": "integer" },
|
||||||
|
"star": { "type": "integer" },
|
||||||
|
"stat": { "type": "integer" },
|
||||||
|
"temp": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"filam_bak", "hnow", "hpre",
|
||||||
|
"htar", "id", "info",
|
||||||
|
"snow", "spre", "star",
|
||||||
|
"stat", "temp"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/fire_ext.schema.json",
|
||||||
|
"title": "DeviceFireExtinguisher",
|
||||||
|
"description": "Detailed info about Fire Extinguisher",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"history": {
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"bot_err": { "type": "integer" },
|
||||||
|
"cd": { "type": "integer" },
|
||||||
|
"cd_init": { "type": "integer" },
|
||||||
|
"connect_flag": { "type": "integer" },
|
||||||
|
"drill_flag": { "type": "integer" },
|
||||||
|
"remain_time": { "type": "integer" },
|
||||||
|
"rm_init": { "type": "integer" },
|
||||||
|
"state": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"history", "bot_err", "cd",
|
||||||
|
"cd_init", "connect_flag", "drill_flag",
|
||||||
|
"remain_time", "rm_init", "state"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/holder.schema.json",
|
||||||
|
"title": "DeviceHolder",
|
||||||
|
"description": "Detailed info about Holder",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"step": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"info": { "type": "integer" },
|
||||||
|
"job": { "type": "integer" },
|
||||||
|
"pos": { "type": "integer" },
|
||||||
|
"stat": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["step", "info", "job", "pos", "stat"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/laser.schema.json",
|
||||||
|
"title": "DeviceLaser",
|
||||||
|
"description": "Detailed info about Laser",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"power": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["power"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/nozzle.schema.json",
|
||||||
|
"title": "DeviceNozzle",
|
||||||
|
"description": "Detailed info about available Nozzles",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"info": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "$ref": "./nozzle_item.schema.json" }
|
||||||
|
},
|
||||||
|
"exist": { "type": "integer" },
|
||||||
|
"src_id": { "type": "integer" },
|
||||||
|
"state": { "type": "integer" },
|
||||||
|
"tar_id": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": [ "info", "exist", "src_id", "state", "tar_id" ]
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/nozzle_item.schema.json",
|
||||||
|
"title": "DeviceNozzleItem",
|
||||||
|
"description": "Detailed info about specific Nozzle",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"color_m": { "type": "string" },
|
||||||
|
"diameter": { "$ref": "../nozzle_diameter.schema.json" },
|
||||||
|
"fila_id": { "type": "integer" },
|
||||||
|
"id": { "type": "integer" },
|
||||||
|
"sn": { "type": "string" },
|
||||||
|
"stat": { "type": "integer" },
|
||||||
|
"tm": { "type": "integer" },
|
||||||
|
"type": { "$ref": "../nozzle_type.schema.json" },
|
||||||
|
"wear": { "type": "number" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"color_m", "diameter", "fila_id",
|
||||||
|
"id", "sn", "stat",
|
||||||
|
"tm", "type", "wear"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/plate.schema.json",
|
||||||
|
"title": "DevicePlate",
|
||||||
|
"description": "Detailed info about Plate",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"base": {
|
||||||
|
"description": "NOTE: Just my guess, but for Textured PEI it was 6, for Engineering Plate it was 12",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"cali2d_id": { "type": "string" },
|
||||||
|
"cur_id": {
|
||||||
|
"description": "NOTE: Another guess - P0102 for Textured PEI, P0502 for Engineering Plate",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"mat": { "type": "integer" },
|
||||||
|
"tar_id": { "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["base", "cali2d_id", "cur_id", "mat", "tar_id"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/hms.schema.json",
|
||||||
|
"title": "HMS",
|
||||||
|
"description": "HMS Error Report",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"attr": { "type": "integer" },
|
||||||
|
"code": { "type": "integer" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/info.schema.json",
|
||||||
|
"title": "Info",
|
||||||
|
"description": "General info",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"temp": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["temp"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/ipcam.schema.json",
|
||||||
|
"title": "Ipcam",
|
||||||
|
"description": "Report about the in-built IP camera",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"agora_service": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"enable",
|
||||||
|
"disable",
|
||||||
|
"ENABLE",
|
||||||
|
"DISABLE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"brtc_service": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"enable",
|
||||||
|
"disable",
|
||||||
|
"ENABLE",
|
||||||
|
"DISABLE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"bs_state": { "type": "integer" },
|
||||||
|
"cap_pic_enable": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"enable",
|
||||||
|
"disable",
|
||||||
|
"invalid",
|
||||||
|
"ENABLE",
|
||||||
|
"DISABLE",
|
||||||
|
"INVALID"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ipcam_dev": { "type": "string" },
|
||||||
|
"ipcam_record": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"enable",
|
||||||
|
"disable",
|
||||||
|
"ENABLE",
|
||||||
|
"DISABLE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"laser_preview_res": { "type": "integer" },
|
||||||
|
"mode_bits": { "type": "integer", "minimum": 0 },
|
||||||
|
"resolution": { "type": "string" },
|
||||||
|
"rtsp_url": { "type": "string" },
|
||||||
|
"timelapse": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"enable",
|
||||||
|
"disable",
|
||||||
|
"ENABLE",
|
||||||
|
"DISABLE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"tl_store_hpd_type": { "type": "integer" },
|
||||||
|
"tl_store_path_type": { "type": "integer" },
|
||||||
|
"tutk_server": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"enable",
|
||||||
|
"disable",
|
||||||
|
"ENABLE",
|
||||||
|
"DISABLE"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/job/job.schema.json",
|
||||||
|
"title": "Job",
|
||||||
|
"description": "Print job details",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"cur_stage": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"idx": { "type": "number" },
|
||||||
|
"state": { "type": "number" }
|
||||||
|
},
|
||||||
|
"required": ["idx", "state"]
|
||||||
|
},
|
||||||
|
"stage": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "./stage.schema.json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["cur_stage", "stage"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/job/stage.schema.json",
|
||||||
|
"title": "Job",
|
||||||
|
"description": "Print job stage details",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"clock_in": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"color": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"diameter": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "number" }
|
||||||
|
},
|
||||||
|
"est_time": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"heigh": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"idx": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"platform": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"print_then": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"proc_list": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"tool": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"description": "In case of 3D printing - look at `nozzle_type.schema.json`",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"clock_in", "color", "diameter", "est_time",
|
||||||
|
"heigh", "idx", "platform", "print_then",
|
||||||
|
"proc_list", "tool", "type"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/lights_report.schema.json",
|
||||||
|
"title": "LightsReport",
|
||||||
|
"description": "Report status of printer lights",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"mode": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"on",
|
||||||
|
"off",
|
||||||
|
"ON",
|
||||||
|
"OFF"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"chamber_light",
|
||||||
|
"work_light",
|
||||||
|
"chamber_light2"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/net.schema.json",
|
||||||
|
"title": "Net",
|
||||||
|
"description": "Network status",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"conf": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"info": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"ip": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"mask": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ip",
|
||||||
|
"mask"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/nozzle_diameter.schema.json",
|
||||||
|
"title": "NozzleDiameter",
|
||||||
|
"description": "Common schema for nozzle diameter",
|
||||||
|
"type": "number",
|
||||||
|
"enum": [
|
||||||
|
0.2,
|
||||||
|
0.4,
|
||||||
|
0.6,
|
||||||
|
0.8
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/nozzle_type.schema.json",
|
||||||
|
"title": "NozzleType",
|
||||||
|
"description": "Common schema for nozzle type. HS00 - stainless steel, HS01 - hardened steel, HS05 - tungsten carbide, HH01 - high-flow hardened steel, HH05 - high-flow tungsten carbide. NOTE: format is possibly as follows: [H,X][H,S]0[0,1,5] - first character for printer series (H - H-series, possibly A-series too; X - X-series, namely X1C. Or maybe H is for hot-swap?); second character is for flow rate (S - standard; H - high-flow); third character is left as 0; fourth character is for nozzle material (0 - stainless steel; 1 - hardened steel; 5 - tungsten carbide)",
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"HS00",
|
||||||
|
"HS01",
|
||||||
|
"HS05",
|
||||||
|
"HH01",
|
||||||
|
"HH05"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/online.schema.json",
|
||||||
|
"title": "Online",
|
||||||
|
"description": "Printer online/offline status",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"ahb": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"rfid": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/upgrade_state.schema.json",
|
||||||
|
"title": "UpgradeState",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"ahb_new_version_number": { "type": "string" },
|
||||||
|
"ams_new_version_number": { "type": "string" },
|
||||||
|
"consistency_request": { "type": "boolean" },
|
||||||
|
"dis_state": { "type": "integer" },
|
||||||
|
"err_code": { "type": "integer" },
|
||||||
|
"ext_new_version_number": { "type": "string" },
|
||||||
|
"force_upgrade": { "type": "boolean" },
|
||||||
|
"idx": { "type": "integer" },
|
||||||
|
"idx2": { "type": "integer" },
|
||||||
|
"lower_limit": { "type": "string", "pattern": "..\\...\\...\\..." },
|
||||||
|
"message": { "type": "string" },
|
||||||
|
"module": { "type": "string" },
|
||||||
|
"new_version_state": { "type": "integer" },
|
||||||
|
"ota_new_version_number": { "type": "string" },
|
||||||
|
"progress": { "type": "string" },
|
||||||
|
"sequence_id": { "type": "integer" },
|
||||||
|
"sn": { "type": "string" },
|
||||||
|
"status": { "type": "string", "enum": ["idle", "IDLE"]},
|
||||||
|
"upgrade_fail_list": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"upgrade_type": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/upload.schema.json",
|
||||||
|
"title": "Upload",
|
||||||
|
"description": "File upload progress",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"file_size": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"finish_size": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"oss_url": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"progress": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"speed": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"idle",
|
||||||
|
"IDLE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"task_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"time_remaining": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"trouble_id": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/vt_tray.schema.json",
|
||||||
|
"title": "VtTray",
|
||||||
|
"description": "This schema is used as Virtual Tray (external spool) or as a base for AmsTray. When empty, all values are zeroed and `tray_color` field is set to \"FFFFFF00\".",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"bed_temp": { "type": "string" },
|
||||||
|
"bed_temp_type": { "type": "string" },
|
||||||
|
"cali_idx": { "type": "number" },
|
||||||
|
"cols": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"ctype": { "type": "integer" },
|
||||||
|
"drying_temp": { "type": "string" },
|
||||||
|
"drying_time": { "type": "string" },
|
||||||
|
"id": { "type": "string" },
|
||||||
|
"nozzle_temp_min": { "type": "string" },
|
||||||
|
"nozzle_temp_max": { "type": "string" },
|
||||||
|
"remain": { "type": "integer", "minimum": 0 },
|
||||||
|
"tag_uid": { "type": "string" },
|
||||||
|
"total_len": { "type": "integer" },
|
||||||
|
"tray_color": { "type": "string" },
|
||||||
|
"tray_diameter": { "type": "string" },
|
||||||
|
"tray_id_name": { "type": "string" },
|
||||||
|
"tray_info_idx": { "type": "string" },
|
||||||
|
"tray_sub_brands": { "type": "string" },
|
||||||
|
"tray_type": { "type": "string" },
|
||||||
|
"tray_uuid": { "type": "string" },
|
||||||
|
"tray_weight": { "type": "string" },
|
||||||
|
"xcam_info": { "type": "string" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"bed_temp", "bed_temp_type", "cali_idx", "cols",
|
||||||
|
"ctype", "drying_temp", "drying_time", "id",
|
||||||
|
"nozzle_temp_max", "nozzle_temp_min", "remain", "tag_uid",
|
||||||
|
"total_len", "tray_color", "tray_diameter", "tray_id_name",
|
||||||
|
"tray_info_idx", "tray_sub_brands", "tray_type", "tray_uuid",
|
||||||
|
"tray_weight", "xcam_info"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/xcam.schema.json",
|
||||||
|
"title": "XcamSettings",
|
||||||
|
"description": "Camera-based AI print monitoring settings (spaghetti detection, first-layer inspection, etc.).",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"allow_skip_parts": { "type": "boolean" },
|
||||||
|
"buildplate_marker_detector": { "type": "boolean" },
|
||||||
|
"cfg": { "type": "integer" },
|
||||||
|
"first_layer_inspector": { "type": "boolean" },
|
||||||
|
"halt_print_sensitivity": { "type": "string" },
|
||||||
|
"print_halt": { "type": "boolean" },
|
||||||
|
"printing_monitor": { "type": "boolean" },
|
||||||
|
"spaghetti_detector": { "type": "boolean" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"allow_skip_parts", "buildplate_marker_detector", "first_layer_inspector", "cfg",
|
||||||
|
"halt_print_sensitivity", "print_halt", "printing_monitor", "spaghetti_detector"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/report.schema.json",
|
||||||
|
"title": "BambuReportV2",
|
||||||
|
"description": "V2 equivalent of v1/report.schema.json - same 'what root key does this arrive under' convention (see v1/report.schema.json for the print-vs-pushing rationale). Only wires categories that actually have a v2 schema on disk; add a property here when a new v2/report/<category>/ schema is added.",
|
||||||
|
"type": "object",
|
||||||
|
"minProperties": 1,
|
||||||
|
"maxProperties": 1,
|
||||||
|
"properties": {
|
||||||
|
"info": {
|
||||||
|
"oneOf": [
|
||||||
|
{ "$ref": "report/info/get_version.schema.json" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"print": {
|
||||||
|
"oneOf": [
|
||||||
|
{ "$ref": "report/print/print.schema.json" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/report/info/_module_info.schema.json",
|
||||||
|
"title": "ModuleInfo",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": { "type": "string" },
|
||||||
|
"sw_ver": { "type": "string" },
|
||||||
|
"hw_ver": { "type": "string" },
|
||||||
|
"loader_ver": { "type": "string" },
|
||||||
|
"product_name": { "type": "string" },
|
||||||
|
"sn": { "type": "string" },
|
||||||
|
"visible": { "type": "boolean" },
|
||||||
|
"flag": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"sw_ver",
|
||||||
|
"hw_ver",
|
||||||
|
"loader_ver",
|
||||||
|
"sn",
|
||||||
|
"product_name",
|
||||||
|
"visible",
|
||||||
|
"flag"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/report/info/get_version.schema.json",
|
||||||
|
"title": "GetVersionReport",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "get_version" },
|
||||||
|
"module": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "$ref": "_module_info.schema.json" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["module"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/report/print/_2d_report.schema.json",
|
||||||
|
"title": "2DReport",
|
||||||
|
"description": "Details about current 2D job",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"bs": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"bi": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"clock_in": { "type": "boolean" },
|
||||||
|
"est_time": { "type": "integer" },
|
||||||
|
"idx": { "type": "integer" },
|
||||||
|
"print_then": { "type": "boolean" },
|
||||||
|
"proc_list": { "type": "array", "items": { "type": "object" } },
|
||||||
|
"step_type": { "type": "integer" },
|
||||||
|
"tool_info": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"color": { "type": "string" },
|
||||||
|
"diameter": { "type": "number", "minimum": 0 },
|
||||||
|
"id": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["color", "diameter", "id"]
|
||||||
|
},
|
||||||
|
"type": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"clock_in", "est_time", "idx", "print_then",
|
||||||
|
"proc_list", "step_type", "tool_info", "type"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"total_time": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["bi", "total_time"]
|
||||||
|
},
|
||||||
|
"cond": { "type": "integer" },
|
||||||
|
"cur_stage": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"clock_in_time": { "type": "integer" },
|
||||||
|
"idx": { "type": "integer" },
|
||||||
|
"left_time": { "type": "integer" },
|
||||||
|
"process": { "type": "integer" },
|
||||||
|
"state": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": ["clock_in_time", "idx", "left_time", "process", "state"]
|
||||||
|
},
|
||||||
|
"first_confirm": { "type": "boolean" },
|
||||||
|
"makeable": { "type": "boolean" },
|
||||||
|
"material": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"cur_id_list": { "type": "array", "items": { "type": "object" } },
|
||||||
|
"state": { "type": "integer" },
|
||||||
|
"tar_id": { "type": "string" },
|
||||||
|
"tar_name": { "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["cur_id_list", "state", "tar_id", "tar_name"]
|
||||||
|
},
|
||||||
|
"pm": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"layer_num", "print_cali_option", "total_layer_num"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/report/print/_3d_report.schema.json",
|
||||||
|
"title": "3DReport",
|
||||||
|
"description": "Details about current print status",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"layer_num": { "type": "integer" },
|
||||||
|
"print_cali_option": { "type": "integer" },
|
||||||
|
"total_layer_num": { "type": "integer" }
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"layer_num", "print_cali_option", "total_layer_num"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/report/print/_nozzle_type.schema.json",
|
||||||
|
"title": "PrintReportNozzleType",
|
||||||
|
"description": "Schema for nozzle type, used only by PrintReport schema. HS00 - stainless steel, HS01 - hardened steel, HS05 - tungsten carbide, HH01 - high-flow hardened steel, HH05 - high-flow tungsten carbide. NOTE: format is possibly as follows: [H,X][H,S]0[0,1,5] - first character for printer series (H - H-series, possibly A-series too; X - X-series, namely X1C. Or maybe H is for hot-swap?); second character is for flow rate (S - standard; H - high-flow); third character is left as 0; fourth character is for nozzle material (0 - stainless steel; 1 - hardened steel; 5 - tungsten carbide)",
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^([HX][HS]0[015])-(0\\.[2468])$"
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/report/print/calibration.schema.json",
|
||||||
|
"title": "CalibrationReport",
|
||||||
|
"description": "In contrast to Bambu MQTT v1, printer responds with `calibration` command, however it will still send `push_status` with following fields set: `{\"subtask_name\":\"auto_cali_for_user_param.gcode\",\"file\":\"/usr/etc/print/O1C2/auto_cali_for_user_param.gcode\",\"gcode_file\":\"/usr/etc/print/O1C2/auto_cali_for_user_param.gcode\",\"gcode_file_prepare_percent\":\"100\",\"gcode_state\":\"FAILED\",\"mc_print_stage\":\"1\"}`",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "calibration" },
|
||||||
|
"option": {
|
||||||
|
"description": "Following bitmask is required for the `option` field: `if (lidarCalibration) bitmask |= 1; if (bedLevelling) bitmask |= 1 << 1; if (vibrationCompensation) bitmask |= 1 << 2; if (motorCancellation) bitmask |= 1 << 3;`",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 15
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["option"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/report/print/gcode_file.schema.json",
|
||||||
|
"title": "GcodeFileRequest",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "gcode_file" },
|
||||||
|
"param": { "description": "Full path to GCODE file in printer's FS", "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/report/print/gcode_line.schema.json",
|
||||||
|
"title": "GcodeLineReport",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "gcode_line" },
|
||||||
|
"param": { "description": "use \n for multiple lines", "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/report/print/print.schema.json",
|
||||||
|
"title": "PrintReport",
|
||||||
|
"description": "The ongoing print-state push (root key \"print\") - NOT a direct reply to the pushall request (that goes to \"pushing\", see request/pushing/pushall.schema.json). Sending pushall makes the printer start/refresh this stream; it isn't itself request/response, which is also why this is its own category folder rather than sitting under pushing/ - a category here is 'what root key does this arrive under', not 'what triggered it'.",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "push_status" },
|
||||||
|
|
||||||
|
"2D": { "$ref": "./_2d_report.schema.json" },
|
||||||
|
"3D": { "$ref": "./_3d_report.schema.json" },
|
||||||
|
"ams": { "$ref": "../../common/ams/ams.schema.json" },
|
||||||
|
"hms": { "$ref": "../../common/hms.schema.json" },
|
||||||
|
"lights_report": { "$ref": "../../common/lights_report.schema.json" },
|
||||||
|
"upgrade_state": { "$ref": "../../common/upgrade_state.schema.json" },
|
||||||
|
"info": { "$ref": "../../common/info.schema.json" },
|
||||||
|
"ipcam": { "$ref": "../../common/ipcam.schema.json" },
|
||||||
|
"online": { "$ref": "../../common/online.schema.json" },
|
||||||
|
"net": { "$ref": "../../common/net.schema.json" },
|
||||||
|
"xcam": { "$ref": "../../common/xcam.schema.json" },
|
||||||
|
"care": { "$ref": "../../common/care.schema.json" },
|
||||||
|
"upload": { "$ref": "../../common/upload.schema.json" },
|
||||||
|
"job": { "$ref": "../../common/job/job.schema.json" },
|
||||||
|
"device": { "$ref": "../../common/device/device.schema.json" },
|
||||||
|
"vir_slot": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "../../common/vt_tray.schema.json"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"ams_status": { "type": "integer" },
|
||||||
|
"ams_rfid_status": { "type": "integer" },
|
||||||
|
"ap_err": { "type": "integer" },
|
||||||
|
"aux": { "type": "string" },
|
||||||
|
"aux_part_fan": { "type": "boolean" },
|
||||||
|
"batch_id": { "type": "integer" },
|
||||||
|
|
||||||
|
"cali_version": { "type": "integer" },
|
||||||
|
"canvas_id": { "type": "integer" },
|
||||||
|
"cfg": { "type": "string" },
|
||||||
|
"design_id": { "type": "string" },
|
||||||
|
|
||||||
|
"nozzle_diameter": { "$ref": "../../common/nozzle_diameter.schema.json" },
|
||||||
|
"nozzle_type": { "$ref": "./_nozzle_type.schema.json" },
|
||||||
|
"nozzle_temper": { "type": "number" },
|
||||||
|
"nozzle_target_temper": { "type": "number" },
|
||||||
|
"bed_temper": { "type": "number" },
|
||||||
|
"bed_target_temper": { "type": "number" },
|
||||||
|
"fan_gear": { "type": "integer" },
|
||||||
|
"heatbreak_fan_speed": { "type": "string" },
|
||||||
|
"cooling_fan_speed": { "type": "string" },
|
||||||
|
"big_fan1_speed": { "type": "string" },
|
||||||
|
"big_fan2_speed": { "type": "string" },
|
||||||
|
|
||||||
|
"err": { "type": "string" },
|
||||||
|
"fail_reason": { "type": "string" },
|
||||||
|
"file": { "type": "string" },
|
||||||
|
"gcode_file": { "type": "string" },
|
||||||
|
"gcode_state": { "type": "string", "enum": [ "idle", "IDLE", "finish", "FINISH", "running", "RUNNING" ] },
|
||||||
|
"gcode_file_prepare_percent": { "type": "string" },
|
||||||
|
"force_upgrade": { "type": "boolean" },
|
||||||
|
|
||||||
|
"fun": { "type": "string" },
|
||||||
|
"fun2": { "type": "string" },
|
||||||
|
|
||||||
|
"home_flag": { "type": "integer" },
|
||||||
|
"hw_switch_state": { "type": "integer" },
|
||||||
|
|
||||||
|
"job_attr": { "type": "integer" },
|
||||||
|
"job_id": { "type": "string" },
|
||||||
|
"lan_task_id": { "type": "string" },
|
||||||
|
"layer_num": { "type": "integer" },
|
||||||
|
|
||||||
|
"mc_action": { "type": "integer" },
|
||||||
|
"mc_err": { "type": "integer" },
|
||||||
|
"mc_percent": { "type": "integer" },
|
||||||
|
"mc_print_error_code": { "type": "string" },
|
||||||
|
"mc_print_stage": { "type": "string" },
|
||||||
|
"mc_print_sub_stage": { "type": "integer" },
|
||||||
|
"mc_remaining_time": { "type": "integer" },
|
||||||
|
"mc_stage": { "type": "integer" },
|
||||||
|
|
||||||
|
"model_id": { "type": "string" },
|
||||||
|
"msg": { "type": "integer" },
|
||||||
|
|
||||||
|
"percent": { "type": "integer" },
|
||||||
|
"plate_cnt": { "type": "integer" },
|
||||||
|
"plate_id": { "type": "integer" },
|
||||||
|
"plate_idx": { "type": "integer" },
|
||||||
|
"prepare_per": { "type": "integer" },
|
||||||
|
|
||||||
|
"print_error": { "type": "integer" },
|
||||||
|
"print_gcode_action": { "type": "integer" },
|
||||||
|
"print_real_action": { "type": "integer" },
|
||||||
|
"print_type": { "type": "string", "enum": [ "", "idle", "IDLE" ] },
|
||||||
|
"profile_id": { "type": "string" },
|
||||||
|
"project_id": { "type": "string" },
|
||||||
|
|
||||||
|
"queue": { "type": "integer" },
|
||||||
|
"queue_est": { "type": "integer" },
|
||||||
|
"queue_number": { "type": "integer" },
|
||||||
|
"queue_sts": { "type": "integer" },
|
||||||
|
"queue_total": { "type": "integer" },
|
||||||
|
|
||||||
|
"remain_time": { "type": "integer" },
|
||||||
|
"s_obj": { "type": "array", "items": {} },
|
||||||
|
"sdcard": { "type": "boolean" },
|
||||||
|
"sequence_id": { "type": "string" },
|
||||||
|
|
||||||
|
"spd_lvl": { "type": "integer", "minimum": 1, "maximum": 4 },
|
||||||
|
"spd_mag": { "type": "integer", "minimum": 0, "maximum": 100 },
|
||||||
|
"stat": { "type": "string" },
|
||||||
|
"state": { "type": "integer" },
|
||||||
|
|
||||||
|
"stg": { "type": "array", "items": { "type": "number" } },
|
||||||
|
"stg_cur": { "type": "integer" },
|
||||||
|
"subtask_id": { "type": "string" },
|
||||||
|
"subtask_name": { "type": "string" },
|
||||||
|
"task_id": { "type": "string" },
|
||||||
|
"total_layer_num": { "type": "integer", "minimum": 0 },
|
||||||
|
|
||||||
|
"ver": { "type": "string" },
|
||||||
|
"wifi_signal": { "type": "string", "pattern": "^-([0-9]{1,2}|100)dBm$" },
|
||||||
|
"xcam_status": { "type": "string" },
|
||||||
|
|
||||||
|
"mapping": { "type": "array", "items": { "type": "number", "minimum": 0 } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/report/print/print_speed.schema.json",
|
||||||
|
"title": "PrintSpeedReport",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "print_speed" },
|
||||||
|
"param": {
|
||||||
|
"description": "1 - silent (50%), 2 - standard (100%), 3 - sport (124%), 4 - ludicrous (166%)",
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["1", "2", "3", "4"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/report/print/unload_filament.schema.json",
|
||||||
|
"title": "UnloadFilamentReport",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "unload_filament" }
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/request.schema.json",
|
||||||
|
"title": "BambuRequestV2",
|
||||||
|
"description": "V2 equivalent of v1/request.schema.json - one JSON key naming the category, each a oneOf to leave room for more than one request shape per category. Only wires categories that actually have a v2 schema on disk; add a property here when a new v2/request/<category>/ schema is added.",
|
||||||
|
"type": "object",
|
||||||
|
"minProperties": 1,
|
||||||
|
"maxProperties": 1,
|
||||||
|
"properties": {
|
||||||
|
"info": {
|
||||||
|
"oneOf": [
|
||||||
|
{ "$ref": "request/info/get_version.schema.json" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/request/info/get_version.schema.json",
|
||||||
|
"title": "GetVersionRequest",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "get_version" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/request/print/calibration.schema.json",
|
||||||
|
"title": "CalibrationRequest",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "calibration" },
|
||||||
|
"option": {
|
||||||
|
"description": "Following bitmask is required for the `option` field: `if (lidarCalibration) bitmask |= 1; if (bedLevelling) bitmask |= 1 << 1; if (vibrationCompensation) bitmask |= 1 << 2; if (motorCancellation) bitmask |= 1 << 3;`",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 15
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["option"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/request/print/gcode_file.schema.json",
|
||||||
|
"title": "GcodeFileRequest",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "gcode_file" },
|
||||||
|
"param": { "description": "Full path to GCODE file in printer's FS", "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/request/print/gcode_line.schema.json",
|
||||||
|
"title": "GcodeLineRequest",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "gcode_line" },
|
||||||
|
"param": { "description": "use \n for multiple lines", "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/request/print/print_speed.schema.json",
|
||||||
|
"title": "PrintSpeedRequest",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "print_speed" },
|
||||||
|
"param": {
|
||||||
|
"description": "1 - silent (50%), 2 - standard (100%), 3 - sport (124%), 4 - ludicrous (166%)",
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["1", "2", "3", "4"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/request/print/unload_filament.schema.json",
|
||||||
|
"title": "UnloadFilamentRequest",
|
||||||
|
"allOf": [
|
||||||
|
{ "$ref": "../../../common/envelope.schema.json" },
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"command": { "const": "unload_filament" }
|
||||||
|
},
|
||||||
|
"required": ["param"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user