Démarrage de la chauffe de la buse et du plateau sous Moonraker

Bonsoir,

J’ai récemment intégré Moonraker à mon système Home Assistant afin de contrôler mon imprimante 3D à distance. j’ai créé deux scripts :

Un script principal qui génère des cartes d’interface utilisateur personnalisées dans Home Assistant.

views:
  - title: Tableau de bord principal
    cards:
      - type: entities
        entities:
          - entity: sensor.ender_3_s1_pro_extruder_temperature
            name: Température de la buse
          - entity: sensor.ender_3_s1_pro_bed_temperature
            name: Température du lit
          - entity: sensor.ender_3_s1_pro_current_print_state
            name: État de l'impression
        title: Ender 3 S1 Pro
        min: 0
        max: 300
        severity:
          green: 0
          yellow: 200
          red: 250
      - type: picture-entity
        entity: camera.ender_3_s1_pro_camera_s1
        name: Caméra de l'imprimante
      - type: gauge
        entity: sensor.ender_3_s1_pro_extruder_temperature
        name: Température de la buse
        min: 0
        max: 300
        severity:
          green: 0
          yellow: 200
          red: 250
      - type: gauge
        entity: sensor.ender_3_s1_pro_bed_temperature
        name: Température du lit
        min: 0
        max: 100
        severity:
          green: 0
          yellow: 60
          red: 80
      - type: horizontal-stack
        cards:
          - type: button
            tap_action:
              action: call-service
              service: script.set_extruder_temperature
            name: Chauffer la buse
          - type: button
            tap_action:
              action: call-service
              service: script.set_bed_temperature
            name: Chauffer le lit
          - type: button
            tap_action:
              action: call-service
              service: script.preheat_pla
            name: Préchauffer PLA
          - type: button
            tap_action:
              action: call-service
              service: script.cooldown
            name: Refroidir

Un script secondaire que j’ai placé dans le fichier ‹ scripts.yaml › de Home Assistant.

set_extruder_temperature:
  alias: "Démarrer la chauffe de la buse"
  sequence:
    - service: mqtt.publish
      data:
        topic: "moonraker/ender_3_s1_pro/command"
        payload: '{"jsonrpc": "2.0", "method": "printer.gcode.script", "params": {"script": "M109 S200"}}'

set_bed_temperature:
  alias: "Démarrer la chauffe du lit"
  sequence:
    - service: mqtt.publish
      data:
        topic: "moonraker/ender_3_s1_pro/command"
        payload: '{"jsonrpc": "2.0", "method": "printer.gcode.script", "params": {"script": "M109 S60"}}'


preheat_pla:
  alias: "Préchauffer pour PLA"
  sequence:
    - service: climate.set_temperature
      target:
        entity_id: climate.ender_3_s1_pro
      data:
        target_temp_high: 200
        target_temp_low: 60

cooldown:
  alias: "Refroidir l'imprimante"
  sequence:
    - service: climate.set_temperature
      target:
        entity_id: climate.ender_3_s1_pro
      data:
        target_temp_high: 0
        target_temp_low: 0

Les boutons que j’ai créés dans l’interface pour contrôler mon imprimante 3D ne fonctionnent pas comme prévu.

  • Le bouton pour démarrer le chauffage de la buse ne produit aucun effet
  • Le bouton pour chauffer le plateau d’impression reste également inactif

Je n’arrive pas à trouver les commandes correctes à intégrer dans mes scripts pour activer ces fonctions de chauffage.
je suis preneur de toute aide ou conseil concernant les commandes à utiliser dans mes scripts pour faire fonctionner ces boutons de chauffage.

Merci

Bonjour,
Ce n’est plus la bonne syntaxe.

action: call-service
              service:

Voir la doc et le type action… call-service est devenu perform-action et service perform_action. Attention au type de tiret
https://www.home-assistant.io/dashboards/button/

Où as tu trouvé ces exemples ? Il me semblait quand j’avais rapidement regardé le sujet qu’il fallait lancer des macro pre enregistré sur klipper.

Pour voir ce qui ne va pas tu dois avoir des erreur dans les log.

Bonjour,

@Jeffodilo J’ai mis à jour le script principal pour générer les cartes d’interface en utilisant les nouvelles syntaxes.

views:
  - title: Tableau de bord principal
    cards:
      - type: entities
        entities:
          - entity: sensor.ender_3_s1_pro_extruder_temperature
            name: Température de la buse
          - entity: sensor.ender_3_s1_pro_bed_temperature
            name: Température du lit
          - entity: sensor.ender_3_s1_pro_current_print_state
            name: État de l'impression
        title: Ender 3 S1 Pro
        min: 0
        max: 300
        severity:
          green: 0
          yellow: 200
          red: 250
      - type: picture-entity
        entity: camera.ender_3_s1_pro_camera_s1
        name: Caméra de l'imprimante
        camera_image: camera.ender_3_s1_pro_camera_s1
      - type: gauge
        entity: sensor.ender_3_s1_pro_extruder_temperature
        name: Température de la buse
        min: 0
        max: 300
        severity:
          green: 0
          yellow: 200
          red: 250
      - type: gauge
        entity: sensor.ender_3_s1_pro_bed_temperature
        name: Température du lit
        min: 0
        max: 100
        severity:
          green: 0
          yellow: 60
          red: 80
      - type: horizontal-stack
        cards:
          - type: button
            tap_action:
              action: perform-action
              perform_action: script.set_extruder_temperature
            name: Chauffer la buse
          - type: button
            tap_action:
              action: perform-action
              perform_action: script.set_bed_temperature
            name: Chauffer le lit
          - type: button
            tap_action:
              action: perform-action
              perform_action: script.preheat_pla
            name: Préchauffer PLA
          - type: button
            tap_action:
              action: perform-action
              perform_action: script.cooldown
            name: Refroidir

Script secondaire que j’ai placé dans le fichier ‹ scripts.yaml › de Home Assistant.

set_extruder_temperature:
  alias: "Démarrer la chauffe de la buse"
  sequence:
    - service: mqtt.publish
      data:
        topic: "moonraker/ender_3_s1_pro/command"
        payload: '{"jsonrpc": "2.0", "method": "printer.gcode.script", "params": {"script": "M109 S200"}}'

set_bed_temperature:
  alias: "Démarrer la chauffe du lit"
  sequence:
    - service: mqtt.publish
      data:
        topic: "moonraker/ender_3_s1_pro/command"
        payload: '{"jsonrpc": "2.0", "method": "printer.gcode.script", "params": {"script": "M109 S60"}}'

preheat_pla:
  alias: "Préchauffer pour PLA"
  sequence:
    - service: climate.set_temperature
      target:
        entity_id: climate.ender_3_s1_pro
      data:
        target_temp_high: 200
        target_temp_low: 60

cooldown:
  alias: "Refroidir l'imprimante"
  sequence:
    - service: climate.set_temperature
      target:
        entity_id: climate.ender_3_s1_pro
      data:
        target_temp_high: 0
        target_temp_low: 0

Cependant, lorsque je clique sur les boutons de chauffe de la buse et du plateau, rien ne se passe. j’admets que je suis un peu perdu cette fois-ci.

Voici une capture d’écran des cartes :

Merci pour votre aide

@Idaho947 J’ai rassemblé ces exemples à partir de différents sites et les ai adaptés à mes besoins. :
https://www.reddit.com/r/klippers/comments/121tkvl/home_assistant_integration/?tl=fr&rdt=42541

https://www.reddit.com/r/homeassistant/comments/upogw0/moonraker_dashboard_in_home_assistant/

En ce qui concerne les erreurs, voici ce que j’ai trouvé :


C’est pareil pour tes scripts, ils utilisent « service ».
Passe par l’interface Paramètres => Automatisation et scènes => Scripts


Fait les 3 points et regarde les options. Tu as « exécuter les actions » pour tester
Voir en yaml et après tu peux voir l’historique exécution pour voir si ton bouton active le script…

action: mqtt.publish
metadata: {}
data:
  evaluate_payload: false
  qos: 0
  retain: false
  topic: moonraker/ender_3_s1_pro/command
  payload: >-
    {"jsonrpc": "2.0", "method": "printer.gcode.script", "params": {"script":
    "M109 S60"}}

Moi je n’utilse pas cela donc fait ton propre script comme il faut, l’exemple est pour t’aider.

Visiblement il trouve pas ton climate. Ce qui est logique, j’en vois pas de créé par l’intégration.

Tu utilise quelle méthode ?

Aucune, j’aidais simplement sur l’appel du script par le button :grinning:

1 « J'aime »

@Idaho947, comment faut-il procéder pour créer des entités climate ? Je ne les trouve pas parmi les intégrations de mon imprimante sous Moonraker.

Oui c’est ce que je disais y en a pas, ça ne fonctionne pas comme ça. D’après ce que j’avais vu il faut passer par des macro crées dans klipper qui sont appelées par ha mais j’ai pas plus creusé.

Bonsoir,

J’ai réussi à créer un tableau de bord avec des boutons pour lancer le chauffage de la buse et du plateau, que ce soit individuellement ou simultanément. J’ai également ajouté d’autres fonctionnalités, des graphiques, un détecteur de filament et une caméra. Vous pouvez voir tout cela sur la capture d’écran ci-jointe.

Si ça peut intéresser quelqu’un, je vous partage les scripts :
Script du Lovelace:

views:
  - title: Imprimante 3D
    path: imprimante
    cards:
      - type: gauge
        entity: sensor.ender_3_s1_pro_extruder_temperature
        name: Température de la buse
        min: 0
        max: 300
        severity:
          green: 0
          yellow: 200
          red: 250
        view_layout:
          position: 1
        style: |-
          ha-card {
            width: 60px !important;
            height: 40px !important;
          }
          .gauge {
            font-size: 8px !important;
          }
      - type: gauge
        entity: sensor.ender_3_s1_pro_bed_temperature
        name: Température du lit
        min: 0
        max: 100
        severity:
          green: 0
          yellow: 60
          red: 80
        view_layout:
          position: 2
        style: |-
          ha-card {
            width: 60px !important;
            height: 40px !important;
          }
          .gauge {
            font-size: 8px !important;
          }
      - type: picture-entity
        entity: camera.ender_3_s1_pro_camera_s1
        name: Caméra de l'imprimante
        show_name: true
        show_state: false
        view_layout:
          position: 3
        style: |-
          ha-card {
            width: 160px !important;
            height: 80px !important;
          }
          .picture-entity img {
            height: 40px !important;
          }
      - type: button
        name: Chauffer buse à 200°C
        tap_action:
          action: call-service
          service: script.chauffer_la_buse_a_200c
        icon: mdi:printer-3d-nozzle
        view_layout:
          position: 4
        style: |-
          ha-card {
            width: 60px !important;
            height: 40px !important;
          }
          ha-icon-button {
            --mdc-icon-size: 16px !important;
          }
          .card-content {
            padding: 1px !important;
          }
      - type: button
        name: Chauffer lit à 60°C
        tap_action:
          action: call-service
          service: script.chauffer_le_lit_a_60c
        icon: mdi:radiator
        view_layout:
          position: 5
        style: |-
          ha-card {
            width: 60px !important;
            height: 40px !important;
          }
          ha-icon-button {
            --mdc-icon-size: 16px !important;
          }
          .card-content {
            padding: 1px !important;
          }
      - type: button
        name: Chauffer buse et lit
        tap_action:
          action: call-service
          service: script.chauffer_buse_et_lit
        icon: mdi:printer-3d
        view_layout:
          position: 6
        style: |-
          ha-card {
            width: 60px !important;
            height: 40px !important;
          }
          ha-icon-button {
            --mdc-icon-size: 16px !important;
          }
          .card-content {
            padding: 1px !important;
          }
      - type: button
        name: Refroidir buse et lit
        tap_action:
          action: call-service
          service: script.refroidir_buse_et_lit
        icon: mdi:snowflake
        view_layout:
          position: 9
        style: |-
          ha-card {
            width: 60px !important;
            height: 40px !important;
          }
          ha-icon-button {
            --mdc-icon-size: 16px !important;
          }
          .card-content {
            padding: 1px !important;
          }
      - type: history-graph
        entities:
          - entity: sensor.ender_3_s1_pro_extruder_temperature
            name: Température de la buse
          - entity: sensor.ender_3_s1_pro_bed_temperature
            name: Température du lit
        hours_to_show: 24
        refresh_interval: 10
        view_layout:
          position: 10
        style: |-
          ha-card {
            width: 160px !important;
            height: 60px !important;
          }
          .history-graph {
            font-size: 6px !important;
          }
      - type: entity
        entity: binary_sensor.ender_3_s1_pro_filament_sensor
        name: État du Filament
        icon: mdi:printer-3d-nozzle
        view_layout:
          position: 11
        style: |-
          ha-card {
            width: 60px !important;
            height: 40px !important;
          }saisissez ou collez du code ici

Script du fichier configuration.yaml :

script:
  # Script pour chauffer la buse à 200°C
  chauffer_la_buse_a_200c:
    alias: "Chauffer la buse à 200°C"
    sequence:
      - service: rest_command.send_gcode
        data:
          command: "M104 S200"
    mode: single

  # Script pour chauffer le lit à 60°C
  chauffer_le_lit_a_60c:
    alias: "Chauffer le lit à 60°C"
    sequence:
      - service: rest_command.send_gcode
        data:
          command: "M140 S60"
    mode: single

  # Script combiné pour chauffer la buse et le lit
  chauffer_buse_et_lit:
    alias: "Chauffer buse à 200°C et lit à 60°C"
    sequence:
      - service: rest_command.send_gcode
        data:
          command: "M104 S200"  # Chauffe la buse à 200°C
      - service: rest_command.send_gcode
        data:
          command: "M140 S60"   # Chauffe le lit à 60°C
    mode: single

  # Script pour refroidir la buse
  refroidir_la_buse:
    alias: "Refroidir la buse"
    sequence:
      - service: rest_command.send_gcode
        data:
          command: "M104 S0"  # Arrête le chauffage de la buse
    mode: single

  # Script pour refroidir le lit
  refroidir_le_lit:
    alias: "Refroidir le lit"
    sequence:
      - service: rest_command.send_gcode
        data:
          command: "M140 S0"  # Arrête le chauffage du lit
    mode: single

  # Script combiné pour refroidir la buse et le lit
  refroidir_buse_et_lit:
    alias: "Refroidir buse et lit"
    sequence:
      - service: rest_command.send_gcode
        data:
          command: "M104 S0"  # Arrête le chauffage de la buse
      - service: rest_command.send_gcode
        data:
          command: "M140 S0"  # Arrête le chauffage du lit
    mode: single

  # Script pour notifier lorsque le filament est absent
  filament_absent:
    alias: "Filament Absent"
    sequence:
      - service: notify.your_notification_service  # Remplacez par votre service de notification
        data:
          title: "Filament Absent"
          message: "Attention : Le filament est absent !"
      - service: light.turn_on  # Exemple : Allumer une lumière pour alerter
        target:
          entity_id: light.votre_lumiere  # Remplacez par l'ID de votre lumière
        data:
          color_name: red
          brightness: 255
    mode: single

  # Script pour notifier lorsque le filament est présent
  filament_present:
    alias: "Filament Présent"
    sequence:
      - service: notify.your_notification_service  # Remplacez par votre service de notification
        data:
          title: "Filament Présent"
          message: "Le filament est de nouveau présent."
      - service: light.turn_on  # Exemple : Allumer une lumière en vert pour indiquer que tout est OK
        target:
          entity_id: light.votre_lumiere  # Remplacez par l'ID de votre lumière
        data:
          color_name: green
          brightness: 255
    mode: single

  # Script pour arrêter l'imprimante si le filament est absent
  arreter_imprimante_filament_absent:
    alias: "Arrêter l'imprimante (filament absent)"
    sequence:
      - service: rest_command.send_gcode  # Envoyer une commande G-code pour arrêter l'imprimante
        data:
          command: "M112"  # Commande d'arrêt d'urgence
      - service: script.filament_absent  # Notifier que le filament est absent
    mode: single

automation:
  # Automatisation pour détecter lorsque le filament est absent
  - alias: "Détection de filament absent"
    trigger:
      - platform: state
        entity_id: binary_sensor.ender_3_s1_pro_filament_sensor
        to: "off"
    action:
      - service: script.filament_absent  # Notifier que le filament est absent
      - service: script.arreter_imprimante_filament_absent  # Arrêter l'imprimante (optionnel)

  # Automatisation pour détecter lorsque le filament est présent
  - alias: "Détection de filament présent"
    trigger:
      - platform: state
        entity_id: binary_sensor.ender_3_s1_pro_filament_sensor
        to: "on"
    action:
      - service: script.filament_present  # Notifier que le filament est présent

rest_command:
  send_gcode:
    url: "http://XXX.XXX.X.XX:7125/printer/gcode/script"
    method: POST
    headers:
      Content-Type: application/json
    payload: '{"script": "{{ command }}"}'
    timeout: 10

Cependant, je n’arrive pas à réduire la taille des icônes et des cartes. Si quelqu’un a une suggestion, je suis preneur.

1 « J'aime »

Merci beaucoup pour ces commandes !

Pour l’icône as tu essayé card mod :

card_mod:
  style: |
    ha-icon {
      width: 16px;
      height: 16px;
    }

Bonsoir,

J’ai ajouté de nouvelles cartes et je vous partage une nouvelle capture d’écran.

J’ai essayé card mod @Idaho947, et fait bien d’autres essais, mais sans succès. Je n’arrive toujours pas à réduire la taille des cartes et des icônes.

Pour faire ce Lovelace, je me suis inspiré du travail de jybi89 :

Cependant, je n’arrive pas à afficher la carte des différentes couleurs de filaments à la verticale, comme la fait jybi89 dans son tutoriel.

voici le script du Lovelace :

views:
  - title: Imprimante 3D
    path: imprimante
    cards:
      - type: vertical-stack
        cards:
          - type: custom:bar-card
            entities:
              - color: black
                entity: input_number.filament_noir_restant
                icon: mdi:printer-3d-nozzle
                name: Noir
                severity:
                  - from: '1'
                    to: '50'
                    icon: mdi:alert
                    color: black
                  - from: '50'
                    to: '330'
                    color: black
                    icon: mdi:printer-3d-nozzle
                max: '330'
                min: '0'
                tap_action:
                  action: call-service
                  service: script.mise_a_jour_bobine_noir
              - color: orange
                entity: input_number.filament_orange_restant
                icon: mdi:printer-3d-nozzle
                name: Orange
                severity:
                  - from: '1'
                    to: '50'
                    icon: mdi:alert
                    color: orange
                  - from: '50'
                    to: '166'
                    color: orange
                    icon: mdi:printer-3d-nozzle
                max: '166'
                min: '0'
                tap_action:
                  action: call-service
                  service: script.mise_a_jour_bobine_orange
              - color: white
                entity: input_number.filament_blanc_restant
                icon: mdi:printer-3d-nozzle
                name: Blanc
                severity:
                  - from: '1'
                    to: '50'
                    icon: mdi:alert
                    color: white
                  - from: '50'
                    to: '200'
                    color: white
                    icon: mdi:printer-3d-nozzle
                max: '200'
                min: '0'
                tap_action:
                  action: call-service
                  service: script.mise_a_jour_bobine_blanc
              - color: blue
                entity: input_number.filament_bleu_restant
                icon: mdi:printer-3d-nozzle
                name: Bleu
                severity:
                  - from: '1'
                    to: '50'
                    icon: mdi:alert
                    color: blue
                  - from: '50'
                    to: '150'
                    color: blue
                    icon: mdi:printer-3d-nozzle
                max: '150'
                min: '0'
                tap_action:
                  action: call-service
                  service: script.mise_a_jour_bobine_bleu
            height: 120px
            width: 150px
            decimal: 0
            max: 100
            min: 0
            padding: 2px
            positions:
              icon: inside
              title: outside
              indicator: 'off'
            stack: vertical
            style: |-
              bar-card-title {
                text-shadow: none;
                font-size: 10px;  # Taille de police réduite
              }
              ha-icon {
                color: white;
              } 
              bar-card-card:nth-child(1) ha-icon, ha-icon {
                color: white;
              } 
              bar-card-value {
                text-shadow: none;
                color: white;
                font-size: 10px;  # Taille de police réduite
              } 
              bar-card-currentbar {
                border-radius: 5px;  # Bordures arrondies
              } 
              bar-card-backgroundbar {
                border-radius: 5px;  # Bordures arrondies
              } 
              bar-card-card:nth-child(2) bar-card-value {
                text-shadow: none;
                color: black;
              } 
              /* Forcer l'affichage vertical */
              bar-card-card {
                display: flex;
                flex-direction: column;
                align-items: center;
              }
              bar-card-currentbar, bar-card-backgroundbar {
                width: 20px;  # Largeur des barres réduite
                height: 100%; # Hauteur des barres à 100%
              }
            unit_of_measurement: m
          - type: vertical-stack
            cards:
              - type: entities
                entities:
                  - entity: input_boolean.reset_filament
                    icon: hacf:filament
              - type: conditional
                conditions:
                  - entity: input_boolean.reset_filament
                    state: 'on'
                card:
                  type: entities
                  entities:
                    - entity: input_number.filament_noir_restant
                    - entity: input_number.filament_orange_restant
                    - entity: input_number.filament_blanc_restant
                    - entity: input_number.filament_bleu_restant
                  state_color: true
      - type: gauge
        entity: sensor.ender_3_s1_pro_extruder_temperature
        name: Température de la buse
        min: 0
        max: 300
        severity:
          green: 0
          yellow: 200
          red: 250
        view_layout:
          position: 1
        style: |-
          ha-card {
            width: 160px !important;
            height: 80px !important;
          }
          .gauge {
            font-size: 8px !important;
          }
      - type: gauge
        entity: sensor.ender_3_s1_pro_bed_temperature
        name: Température du lit
        min: 0
        max: 100
        severity:
          green: 0
          yellow: 60
          red: 80
        view_layout:
          position: 2
        style: |-
          ha-card {
            width: 60px !important;
            height: 40px !important;
          }
          .gauge {
            font-size: 8px !important;
          }
      - type: picture-entity
        entity: camera.ender_3_s1_pro_camera_s1
        name: Caméra de l'imprimante
        show_name: true
        show_state: false
        view_layout:
          position: 3
        style: |-
          ha-card {
            width: 160px !important;
            height: 80px !important;
          }
          .picture-entity img {
            height: 40px !important;
          }
      - type: button
        name: Chauffer buse à 200°C
        tap_action:
          action: call-service
          service: script.chauffer_la_buse_a_200c
        icon: mdi:printer-3d-nozzle
        view_layout:
          position: 4
        style: |-
          ha-card {
            width: 60px !important;
            height: 40px !important;
          }
          ha-icon-button {
            --mdc-icon-size: 16px !important;
          }
          .card-content {
            padding: 1px !important;
          }
      - type: button
        name: Chauffer lit à 60°C
        tap_action:
          action: call-service
          service: script.chauffer_le_lit_a_60c
        icon: mdi:radiator
        view_layout:
          position: 5
        style: |-
          ha-card {
            width: 60px !important;
            height: 40px !important;
          }
          ha-icon-button {
            --mdc-icon-size: 16px !important;
          }
          .card-content {
            padding: 1px !important;
          }
      - type: button
        name: Chauffer buse et lit
        tap_action:
          action: call-service
          service: script.chauffer_buse_et_lit
        icon: mdi:printer-3d
        view_layout:
          position: 6
        style: |-
          ha-card {
            width: 60px !important;
            height: 40px !important;
          }
          ha-icon-button {
            --mdc-icon-size: 16px !important;
          }
          .card-content {
            padding: 1px !important;
          }
      - type: button
        name: Refroidir buse et lit
        tap_action:
          action: call-service
          service: script.refroidir_buse_et_lit
        icon: mdi:snowflake
        view_layout:
          position: 9
        style: |-
          ha-card {
            width: 60px !important;
            height: 40px !important;
          }
          ha-icon-button {
            --mdc-icon-size: 16px !important;
          }
          .card-content {
            padding: 1px !important;
          }
      - type: history-graph
        entities:
          - entity: sensor.ender_3_s1_pro_extruder_temperature
            name: Température de la buse
          - entity: sensor.ender_3_s1_pro_bed_temperature
            name: Température du lit
        hours_to_show: 24
        refresh_interval: 60
        view_layout:
          position: 10
        style: |-
          ha-card {
            width: 160px !important;
            height: 60px !important;
          }
          .history-graph {
            font-size: 6px !important;
          }
      - type: entity
        entity: binary_sensor.ender_3_s1_pro_filament_sensor
        name: État du Filament
        icon: mdi:printer-3d-nozzle
        view_layout:
          position: 11
        style: |-
          ha-card {
            width: 60px !important;
            height: 40px !important;
          }

Je vous partagerai le reste des scripts lorsque le projet sera plus avancé.
Si quelqu’un a une suggestion, je suis toujours preneur.
Merci