{ "_note": "The same capture from before the gateway was taught to omit empty fields, kept deliberately: it is what a serde-derived producer emits by default, and the validator must keep accepting it. Note p1p's \"job_name\": null - an idle printer with no job - which used to fail validation and take the whole telemetry batch down with it.", "frames": [ { "type": "hello", "gateway_id": "dev-gw", "farm_id": "dev-farm", "token": "dev-token" }, { "type": "heartbeat", "seq": 2 }, { "type": "telemetry", "printers": [ { "printer_id": "p1p", "name": "P1P", "state": "IDLE", "percent": 0, "layer": 0, "total_layers": 0, "remaining_minutes": 0, "job_name": null, "nozzle_temp": 23.40625, "nozzle_target": 0.0, "bed_temp": 22.4375, "bed_target": 0.0, "print_error": 0, "active_alerts": 0 }, { "printer_id": "h2c", "name": "H2C", "state": "RUNNING", "percent": 97, "layer": 50, "total_layers": 50, "remaining_minutes": 3, "job_name": "świeczka-24.stl", "nozzle_temp": 230.0, "nozzle_target": 230.0, "bed_temp": 35.0, "bed_target": 35.0, "print_error": 0, "active_alerts": 3 } ] }, { "type": "command_result", "command_id": "cap-1", "ok": true, "error": null } ] }