Support M191 G-Code Command (Wait for Chamber Temperature)

The X1C doesn’t have an actively heated chamber so it makes sense that this M-code would be disabled.

4 Likes

Correct. It seems that trying to use that code as a way of waiting for the ambient air in the chamber to be heated by the bed does not work either.
There is a chamber temperature sensor in the X1C, but you can’t interact with it at all at this point in time.

Not at all, the bed is very capable of heating the chamber to 60c alone, makes no sense to go out of their way to disable the M-code and the thread your writing in proves it. There is a reason we want it.

The bed might heat the chamber to 60c when running on 220v but it struggles to make 50c on 110v or at least mine does.

3 Likes

Still sounds like it capable of heating the chamber 20c above room temperature and would be a lot better with an M191 instead of 5x sleeps.

I have found that I need to pre-heat the chamber to print ABS and ASA on my X1 Carbon
I use a Home Assistant Automation as a workaround, I use the Bambu Labs integration available on the Home assistant Community Store.
I trigger on current_stage changing to printing and then check the active_Tray Type and if it contains “ABS” or “ASA” and the chamber_temperature is bellow a number that I set as a minimum then the automation will pause the print and wait for the chamber_temperature to reach the desired temperature. Once the desired temperature is reached the automation will resume the print.
Other filament types that need chamber pre-heating could easily be added to the automation, I just don’t have any yet.
By using the automation, I just send my ABS or ASA print to the printer just like any other print and the chamber pre-heat will be taken care of for me.

1 Like

Hello, would you be kind enough to share one of your automations? I’m currently exploring the Home Assistant interface and facing some difficulties creating an automation for the automatic activation of my bentobox when, like you, I’m printing with ASA or ABS (specially around triggers).
Your assistance would save me valuable time :wink:

Here is the YAML for the automation to Pause and wait for the temp to reach a set temperature, I use a numeric helper called minimum_chamber_temp where I can set the desired minimum temperature using a dashboard card. This could easily just be set as a specific number in the YAML code.
I trigger on current_stage changing to printing and then use a Condition to check the active_Tray Type using a value template and if it contains “ABS” or “ASA” another condition is used to check the chamber_temperature and if it is below the number saved in the helper called minimum_chamber_temp then the
Action is to press the Pause button and wait for a trigger that the Temperature has reached the desired value (it times out after 30 minutes but could be set to any desired timeout value. Then the resume button is pressed.
YAML will not post properly here, it turns the dashes into bullets. Your entity ID’s will all be different. Hopefully this will be helpful.

alias: Bambu ABS or ASA Pause if chamber temp to low
description: “”
trigger:

  • platform: state
    entity_id:
    • sensor.x1c_00m09a351801070_current_stage
      to: printing
      condition:
  • condition: template
    value_template: >-
    {{ (‘ABS’ in state_attr(‘sensor.x1c_00m09a351801070_active_tray’, ‘type’))
    == true or (‘ASA’ in state_attr(‘sensor.x1c_00m09a351801070_active_tray’,
    ‘type’)) == true }}
  • condition: numeric_state
    entity_id: sensor.x1c_00m09a351801070_chamber_temperature
    below: input_number.minimum_chamber_temp
  • condition: numeric_state
    entity_id: sensor.x1c_00m09a351801070_current_layer
    below: 2
    action:
  • device_id: 1410b1f809015e11b8524d144965da0d
    domain: button
    entity_id: 2f1945e92beb3ed71f8d23f789542b41
    type: press
  • wait_for_trigger:
    • platform: template
      value_template: >-
      {{ int(states(‘sensor.x1c_00m09a351801070_chamber_temperature’)) >
      int(states(‘input_number.minimum_chamber_temp’)) -1 }}
      timeout:
      hours: 0
      minutes: 30
      seconds: 0
      milliseconds: 0
  • device_id: 1410b1f809015e11b8524d144965da0d
    domain: button
    entity_id: 86017eca567b8875f6735e4654b0ccad
    type: press
    mode: single

The following is the YAML code to keep the internal light off, I have a Riser light and a camera on the front door, I get a better picture on the camera with the internal light off.
alias: Bambu x1c keep internal Light off
description: “”
trigger:

  • platform: device
    type: turned_on
    device_id: 1410b1f809015e11b8524d144965da0d
    entity_id: 49c5b73154eec4a5486e3160bc31b565
    domain: light
    condition:
  • condition: state
    entity_id: input_boolean.x1c_internal_light_desired_state
    state: “off”
    action:
  • type: turn_off
    device_id: 1410b1f809015e11b8524d144965da0d
    entity_id: 49c5b73154eec4a5486e3160bc31b565
    domain: light
    mode: single

The following YAML is what I use to turn off the Bento fan, after the print is done or if the bed to cool bellow 50 (maybe the print was canceled) I have a condition that checks if the Bento fan is on which is powered by a controllable USB power source, I don’t recall if it’s Wifi or Zigbee. It then waits for 5 minutes to clear the fumes and turns off the USB power to the Bento fan.
alias: Bambu Turn off Bento Fan
description: “”
trigger:

  • platform: state
    entity_id:
    • sensor.x1c_00m09a351801070_print_progress
      to: “100”
  • platform: numeric_state
    entity_id:
    • sensor.x1c_00m09a351801070_bed_temperature
      below: 50
      condition:
  • condition: device
    type: is_on
    device_id: d38912488d4faa800b55e7f9013e0f32
    entity_id: bbba30ccad15a593be43b1f392f06c01
    domain: switch
    action:
  • delay:
    hours: 0
    minutes: 5
    seconds: 0
    milliseconds: 0
  • type: turn_off
    device_id: d38912488d4faa800b55e7f9013e0f32
    entity_id: bbba30ccad15a593be43b1f392f06c01
    domain: switch
    mode: single
4 Likes

Big thanks for your help by sharing your work, I will adapt that for my own case asap.

This is still badly needed, as printing with the chamber at room temp leads to frequent failures of ABS/ASA/PA prints, which are arguably the main reason to buy an enclosed printer in the first place.

At least give us a code to read the chamber temp so we can code our own in the custom machine start code.

2 Likes

In fact, here’s a block of machine-start Gcode to use while Bambu ignores this issue (presumably so we’ll shell out another $1200 to add a chamber heater and an Ethernet port):

{if activate_chamber_temp_control[initial_no_support_extruder]}
    M106 P3 S0              ;verify chamber fan off
    M106 P2 S255            ;turn aux fan on max
    G28 Z P0                ;home Z with low precision
    G90                     ;set absolute positioning
    G1 Z10 F1200            ;lower bed 10mm to place it in the path of aux fan flow
    M140 S120               ;set bed temp
    M190 S120               ;wait for bed temp
    M400 S300               ;wait 5 min for chamber heat
    M106 P2 S0              ;turn off aux fan
    ; restore bed temp for first layer
    M1002 gcode_claim_action : 2
    M140 S[bed_temperature_initial_layer_single] ;set bed temp
    M190 S[bed_temperature_initial_layer_single] ;wait for bed temp
{endif}
1 Like

Anyone know if there’s any update on this? I just got the Wham Bam Carbon Fiber plate for Bambu Lab printers, and you need to heat soak it for 5 minutes before printing, can’t find an easy way to enable this, maybe I missed it?

Nevermind! I found the solution for me on the Wham Bam SALES page (not their support or instructions grrrr)

Apologies, this is for BED temp, not chamber temp, mybad!

Wouldn’t the X1C be the only machine that could benefit from this? Forgive me if it’s been covered, but the A series obviously wouldn’t have one, nor does the P1S.

What am I missing? Clue me in please.

My post immediately above yours is the update. :wink:

is this actually waiting for a chamber temp set by the filament or only waiting for 5 minutes to preheat?

Is this still not implemented in the X1C?

I started printing a lot of ABS and ASA and it’s wonderfully reliable — I put XPS on both sides of the printer and on top, I home the machine, set the bed to 110°C and wait about 25 minutes. I then do my prints at 60°C (±3°C, depending on ambient). I get no warping at all, certainly less than with PLA :slight_smile: and fantastic layer adhesion.

I wish I could just have my printer wait until chamber is at >55°C and then start printing automatically, instead of having to baby-sit the printer.

I just watched the announcement for the new Prusa CoreXY printer, they specifically announced chamber temperature control, which is something Bambu Lab just neglected in the X1C. I hope competition will finally push Bambu to get those little changes in.

It takes 25 minutes for my X1C chamber to go from 18°C (ambient in the workshop at this time of year) to 60°C. I put XPS blocks on two sides and on the top.

No extra heater is necessary, the X1C is fully capable of heating the chamber.

I wrote a small python app that uses MQTT to heat the chamber to a pre-set temp. Set bed to 120, aux fan 100%…. Keep going til temp reached. I start a print then run the script… it pauses the print, heats the chamber, then resumes the print. Takes only the time necessary.

1 Like

This can be shortened to something like this:
– Replace the ;===== heatbed preheat ==================== section.

;===== HEAT SOAK ====================
M1002 gcode_claim_action : 2
{if (filament_type[initial_tool]=="ASA") || (filament_type[initial_tool]=="ABS") || (filament_type[initial_tool]=="PA-CF") }
  G0 X135 Y253 F20000  ; move to exposed steel surface edge
  G28 Z P0 T300; home z with low precision,permit 300deg temperature
  G1 Z5 ; Give us 5mm of clearance
  M400
  G1 X60 Y265 ; Move to the poop chute.
  M400  
  G1 Z0 ; Move the bed up so the cool air from the AUX fan blows across it.
  M106 P2 S255 ; turn ON aux fan at full speed
  M106 P3 S0 ; turn OFF chamber fan
  M140 S110 ; Set bed temperature
  ; Wait for bed to reach temperature.
  ; Since we're blowing cool air across it, it will take a long time
  ; and will allow for the chamber to heat up.
  M400 S600 ; Wait for at least 10 minutes ; This may not even be needed with the bed temperature high enough.
  M190 S110
  M106 P2 S0 ; turn OFF aux fan
{else}
;===== heatbed preheat ====================
  M140 S[bed_temperature_initial_layer_single] ;set bed temp
  M190 S[bed_temperature_initial_layer_single] ;wait for bed temp
{endif}
1 Like