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
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
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 :
Disclaimer : c’est un tuto éducatif à ne pas réaliser sans réfléchir et sans savoir ce que vous faites, il s’agit de votre matériel et de votre responsabilité.
Objectifs
intégrer les données de votre imprimante 3D dans HA,
interagir sur votre imprimante à partir de Home Assistant (allumage, extraction total du filament pour prévoir un changement de filament, contrôle des états, les commandes d’arrêt d’urgences, contrôle de l’alimentation…),
gérer vos consommables (filaments) sur lovelace ave…
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