Version Corrigée - 05/11/2025 (15h00)
Description
SystĂšme de surveillance automatique dâimprimante 3D utilisant lâIA Google Gemini pour dĂ©tecter les problĂšmes dâimpression en temps rĂ©el. Le script analyse des captures dâĂ©cran toutes les 5 minutes pendant lâimpression et vous alerte instantanĂ©ment en cas de dĂ©tection dâanomalies (spaghetti, warping, dĂ©tachement, sous/sur-extrusion, etc.).
Fonctionnalités principales
Analyse IA automatique toutes les 5 minutes pendant lâimpression
Détection des problÚmes courants (spaghetti, warping, détachement, extrusion)
Notifications mobiles avec image et actions rapides (pause/arrĂȘt)
Statistiques par impression (nombre dâanalyses, problĂšmes dĂ©tectĂ©s)
Notifications de dĂ©but, fin et pause dâimpression avec photos
Prérequis
-
Home Assistant avec intégration Bambu Lab
-
Extension Google Generative AI Conversation configurée avec Gemini
-
Application mobile Home Assistant
-
CamĂ©ra de lâimprimante accessible
Mode dâemploi et personnalisation
1 - Entités à personnaliser
Remplacez les entités suivantes par celles de votre imprimante :
| Entité à remplacer | Votre entité | Description |
|---|---|---|
sensor.3d_imprimante_bambu_p1s_etape_actuelle |
sensor.VOTRE_IMPRIMANTE_etape_actuelle |
Statut de lâimprimante |
camera.3d_imprimante_bambu_p1s_camera |
camera.VOTRE_IMPRIMANTE_camera |
CamĂ©ra de lâimprimante |
sensor.3d_imprimante_bambu_p1s_nom_de_la_tache |
sensor.VOTRE_IMPRIMANTE_nom_de_la_tache |
Nom du fichier en impression |
button.3d_imprimante_bambu_p1s_arreter_l_impression |
button.VOTRE_IMPRIMANTE_arreter |
Bouton dâarrĂȘt |
button.3d_imprimante_bambu_p1s_mettre_en_pause_l_impression |
button.VOTRE_IMPRIMANTE_pause |
Bouton de pause |
Exemple pour BambuLab A1 :
-
sensor.bambulaba1_etape_actuelle -
camera.bambulaba1_camera
2 - Service de notification
Remplacez notify.mobile_app_tel_mm par votre service de notification :
-
notify.mobile_app_VOTRE_TELEPHONE(iPhone/Android) -
Ou votre service de notification préféré
Comment trouver votre service :
-
Outils de dĂ©veloppement â Services
-
Cherchez
notify.mobile_app_ -
Notez le nom complet (ex:
notify.mobile_app_s25)
3 - Configuration de lâIA Gemini
SECTION CORRIGĂE
Il existe 2 mĂ©thodes pour configurer lâappel Ă Gemini. Choisissez celle qui fonctionne avec votre installation.
Méthode A : Utilisation de agent_id (recommandée)
-
Trouver votre agent_id :
-
Allez dans ParamĂštres â Appareils et services
-
Cherchez Google Generative AI Conversation
-
Cliquez dessus, notez lâidentifiant affichĂ© (ex:
conversation.gemini_1_5_flash)
-
-
Modifier le fichier YAML Ă la ligne de lâaction
ai_task.generate_data:
- action: ai_task.generate_data
data:
agent_id: conversation.gemini_1_5_flash # â Remplacez par VOTRE agent_id
prompt: "Tu es un expert en impression 3D..."
filenames:
- /config/www/p1s_ai_check.jpg
response_variable: gemini_response
- Format de la réponse : Utilisez
gemini_response.text
Méthode B : Utilisation de entity_id (alternative testée sur A1)
Si la méthode A ne fonctionne pas, utilisez cette syntaxe :
- action: ai_task.generate_data
data:
entity_id: ai_task.google_ai_task # â Entity ID de l'AI Task
task_name: Analyse de l'image 3D
instructions: "Tu es un expert en impression 3D. Analyse cette image..."
attachments:
media_content_id: media-source://camera/camera.VOTRE_IMPRIMANTE_camera
media_content_type: image/jpeg
response_variable: gemini_response
IMPORTANT : Avec la Méthode B, remplacez AUSSI :
Dans toutes les actions qui utilisent la réponse Gemini :
Remplacez :
value: "{{ gemini_response.text }}"
message: "{{ gemini_response.text }}"
par :
value: "{{ gemini_response.data }}"
message: "{{ gemini_response.data }}"
Et la condition :
value_template: "{{ 'OK' not in gemini_response.text }}"
Par :
value_template: "{{ 'OK' not in gemini_response.data }}"
4 - FrĂ©quence dâanalyse (optionnel)
Par dĂ©faut, lâanalyse se dĂ©clenche toutes les 5 minutes. Pour modifier :
trigger:
- trigger: time_pattern
minutes: "/5" # â Changez (ex: "/10" pour 10 min, "/3" pour 3 min)
5 - Personnalisation du prompt IA (optionnel)
Vous pouvez adapter le prompt pour ajuster la sensibilitĂ© ou ajouter des dĂ©tections spĂ©cifiques dans lâautomatisation principale.
Installation
-
Créez le fichier :
/config/packages/pkg_google_gemini_imp_3d.yaml -
Copiez le code complet (ci-dessous)
-
Personnalisez les entités selon votre configuration
-
Choisissez la MĂ©thode A ou B pour lâappel Gemini
-
Redémarrez Home Assistant
-
Testez avec une impression !
Entités créées
Le package crée automatiquement :
-
input_number.gemini_analyses_current_print- Compteur dâanalyses -
input_number.gemini_problemes_current_print- Compteur de problĂšmes -
input_text.gemini_last_response- DerniĂšre rĂ©ponse de lâIA -
input_text.gemini_current_print_name- Nom de lâimpression en cours -
input_datetime.gemini_last_check- Horodatage de la derniÚre vérification -
sensor.imprimante_3d_statut_lisible- Statut en français
Code complet - VERSION CORRIGĂE
# ========================================
# PACKAGE : Surveillance Imprimante 3D + Gemini
# FICHIER : /config/packages/pkg_google_gemini_imp_3d.yaml
# VERSION : 2.0 - CORRIGĂE
# ========================================
# ========================================
# INPUT HELPERS (stockage infos par impression)
# ========================================
input_number:
gemini_analyses_current_print:
name: "Gemini - Analyses (impression actuelle)"
min: 0
max: 1000
step: 1
icon: mdi:counter
gemini_problemes_current_print:
name: "Gemini - ProblÚmes détectés"
min: 0
max: 100
step: 1
icon: mdi:alert-circle
input_text:
gemini_last_response:
name: "Gemini - DerniÚre réponse"
max: 255
icon: mdi:message-text
gemini_current_print_name:
name: "Gemini - Nom impression"
max: 100
icon: mdi:printer-3d
input_datetime:
gemini_last_check:
name: "Gemini - DerniÚre vérification"
has_date: true
has_time: true
# ========================================
# AUTOMATISATIONS
# ========================================
automation:
# ========================================
# AUTOMATISATION PRINCIPALE - SURVEILLANCE IA
# â ïž CHOISISSEZ LA MĂTHODE A OU B CI-DESSOUS
# ========================================
- alias: "đ Surveillance Impression 3D - IA Gemini"
id: p1s_ai_monitoring_gemini
trigger:
- trigger: time_pattern
minutes: "/5"
condition:
- condition: state
entity_id: sensor.3d_imprimante_bambu_p1s_etape_actuelle # â PERSONNALISER
state: "printing"
action:
# Capture de l'image
- action: camera.snapshot
target:
entity_id: camera.3d_imprimante_bambu_p1s_camera # â PERSONNALISER
data:
filename: /config/www/p1s_ai_check.jpg
- delay: {seconds: 2}
# Incrémentation du compteur d'analyses
- action: input_number.set_value
target:
entity_id: input_number.gemini_analyses_current_print
data:
value: "{{ states('input_number.gemini_analyses_current_print') | float + 1 }}"
# ========================================
# MĂTHODE A : Utilisation de agent_id
# ========================================
- action: ai_task.generate_data
data:
agent_id: conversation.gemini_1_5_flash # â REMPLACER par votre agent_id
prompt: "Tu es un expert en impression 3D. Analyse cette image d'une imprimante 3D en cours d'impression. DĂ©tecte ces problĂšmes : spaghetti (impression dĂ©tachĂ©e), warping (coins dĂ©collĂ©s), dĂ©tachement du plateau, sous-extrusion (lignes fines), sur-extrusion (trop de plastique), problĂšme de premiĂšre couche. Si TOUT VA BIEN, rĂ©ponds UNIQUEMENT par le mot 'OK'. Si tu dĂ©tectes un problĂšme, rĂ©ponds 'PROBLĂME: [description courte en une phrase]'."
filenames:
- /config/www/p1s_ai_check.jpg
response_variable: gemini_response
# ========================================
# MĂTHODE B (Alternative) : Utilisation de entity_id
# â ïž Si vous utilisez la MĂ©thode B :
# 1. Commentez le bloc MĂTHODE A ci-dessus (ajoutez # devant chaque ligne)
# 2. Décommentez le bloc ci-dessous (enlevez le # devant chaque ligne)
# 3. Remplacez gemini_response.text par gemini_response.data PARTOUT
# ========================================
# - action: ai_task.generate_data
# data:
# entity_id: ai_task.google_ai_task
# task_name: Analyse de l'image 3D
# instructions: "Tu es un expert en impression 3D. Analyse cette image d'une imprimante 3D en cours d'impression. DĂ©tecte ces problĂšmes : spaghetti (impression dĂ©tachĂ©e), warping (coins dĂ©collĂ©s), dĂ©tachement du plateau, sous-extrusion (lignes fines), sur-extrusion (trop de plastique), problĂšme de premiĂšre couche. Si TOUT VA BIEN, rĂ©ponds UNIQUEMENT par le mot 'OK'. Si tu dĂ©tectes un problĂšme, rĂ©ponds 'PROBLĂME: [description courte en une phrase]'."
# attachments:
# media_content_id: media-source://camera/camera.3d_imprimante_bambu_p1s_camera # â PERSONNALISER
# media_content_type: image/jpeg
# response_variable: gemini_response
# Stockage de la réponse
# â ïž MĂTHODE A : utilisez .text
# â ïž MĂTHODE B : remplacez .text par .data
- action: input_text.set_value
target:
entity_id: input_text.gemini_last_response
data:
value: "{{ gemini_response.text }}" # â MĂTHODE B: changer en .data
# Horodatage
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.gemini_last_check
data:
datetime: "{{ now().isoformat() }}"
# Log systĂšme
- action: system_log.write
data:
message: "Gemini: {{ gemini_response.text }}" # â MĂTHODE B: changer en .data
level: info
# Vérification si problÚme détecté
# â ïž MĂTHODE B : remplacez .text par .data
- condition: template
value_template: "{{ 'OK' not in gemini_response.text }}" # â MĂTHODE B: changer en .data
# Incrémentation du compteur de problÚmes
- action: input_number.set_value
target:
entity_id: input_number.gemini_problemes_current_print
data:
value: "{{ states('input_number.gemini_problemes_current_print') | float + 1 }}"
# Notification de problĂšme
- action: notify.mobile_app_tel_mm # â PERSONNALISER
data:
title: "â ïž ProblĂšme Impression 3D !"
message: "{{ gemini_response.text }}" # â MĂTHODE B: changer en .data
data:
image: "/local/p1s_ai_check.jpg?t={{ now().timestamp() | int }}"
priority: high
ttl: 0
color: "#FF0000"
tag: "print_issue"
actions:
- action: "PAUSE_PRINT"
title: "âžïž Pause"
- action: "STOP_PRINT"
title: "đ ArrĂȘter"
# ========================================
# DĂBUT D'IMPRESSION
# ========================================
- alias: "đšïž DĂ©but Surveillance Impression 3D"
id: print_start_gemini_notification
trigger:
- trigger: state
entity_id: sensor.3d_imprimante_bambu_p1s_etape_actuelle # â PERSONNALISER
to: "printing"
action:
# Réinitialisation des compteurs
- action: input_number.set_value
target:
entity_id: input_number.gemini_analyses_current_print
data:
value: 0
- action: input_number.set_value
target:
entity_id: input_number.gemini_problemes_current_print
data:
value: 0
# Stockage du nom de l'impression
- action: input_text.set_value
target:
entity_id: input_text.gemini_current_print_name
data:
value: "{{ states('sensor.3d_imprimante_bambu_p1s_nom_de_la_tache') }}" # â PERSONNALISER
# Capture de démarrage
- action: camera.snapshot
target:
entity_id: camera.3d_imprimante_bambu_p1s_camera # â PERSONNALISER
data:
filename: /config/www/p1s_start.jpg
- delay: {seconds: 2}
# Notification de démarrage
- action: notify.mobile_app_tel_mm # â PERSONNALISER
data:
title: "đšïž Impression DĂ©marrĂ©e"
message: "{{ states('sensor.3d_imprimante_bambu_p1s_nom_de_la_tache') }} - Surveillance IA activĂ©e" # â PERSONNALISER
data:
image: "/local/p1s_start.jpg?t={{ now().timestamp() | int }}"
priority: normal
color: "#0000FF"
tag: "print_status"
# ========================================
# FIN D'IMPRESSION
# ========================================
- alias: "â
Fin Impression 3D Réussie"
id: print_completed_gemini_notification
trigger:
- trigger: state
entity_id: sensor.3d_imprimante_bambu_p1s_etape_actuelle # â PERSONNALISER
to: "idle"
from: "printing"
action:
# Capture finale
- action: camera.snapshot
target:
entity_id: camera.3d_imprimante_bambu_p1s_camera # â PERSONNALISER
data:
filename: /config/www/p1s_final.jpg
- delay: {seconds: 2}
# Notification de fin avec statistiques
- action: notify.mobile_app_tel_mm # â PERSONNALISER
data:
title: "â
Impression Terminée"
message: >
{{ states('input_text.gemini_current_print_name') }}
đ Analyses IA: {{ states('input_number.gemini_analyses_current_print') | int }}
â ïž ProblĂšmes: {{ states('input_number.gemini_problemes_current_print') | int }}
data:
image: "/local/p1s_final.jpg?t={{ now().timestamp() | int }}"
priority: high
ttl: 0
color: "#00FF00"
tag: "print_status"
# ========================================
# IMPRESSION EN PAUSE
# ========================================
- alias: "âžïž Alerte Impression en Pause"
id: print_paused_alert_gemini
trigger:
- trigger: state
entity_id: sensor.3d_imprimante_bambu_p1s_etape_actuelle # â PERSONNALISER
to:
- "paused_filament_runout"
- "paused_nozzle_clog"
- "paused_first_layer_error"
- "paused_user"
- "paused_nozzle_temperature_malfunction"
- "paused_heat_bed_temperature_malfunction"
- "paused_front_cover_falling"
action:
# Capture de pause
- action: camera.snapshot
target:
entity_id: camera.3d_imprimante_bambu_p1s_camera # â PERSONNALISER
data:
filename: /config/www/p1s_pause.jpg
- delay: {seconds: 2}
# Notification de pause
- action: notify.mobile_app_tel_mm # â PERSONNALISER
data:
title: "âžïž Impression en Pause"
message: "{{ trigger.to_state.state | replace('_', ' ') | title }}"
data:
image: "/local/p1s_pause.jpg?t={{ now().timestamp() | int }}"
priority: high
color: "#FFA500"
tag: "print_pause"
# ========================================
# ACTIONS DEPUIS NOTIFICATIONS
# ========================================
- alias: "đ ArrĂȘt Impression depuis Notification"
id: stop_print_from_notification_gemini
trigger:
- trigger: event
event_type: mobile_app_notification_action
event_data:
action: STOP_PRINT
action:
- action: button.press
target:
entity_id: button.3d_imprimante_bambu_p1s_arreter_l_impression # â PERSONNALISER
- alias: "âžïž Pause Impression depuis Notification"
id: pause_print_from_notification_gemini
trigger:
- trigger: event
event_type: mobile_app_notification_action
event_data:
action: PAUSE_PRINT
action:
- action: button.press
target:
entity_id: button.3d_imprimante_bambu_p1s_mettre_en_pause_l_impression # â PERSONNALISER
# ========================================
# TEMPLATE SENSOR
# ========================================
template:
- sensor:
- name: "Imprimante 3D - Statut Lisible"
unique_id: p1s_status_readable
state: >
{% set s = states('sensor.3d_imprimante_bambu_p1s_etape_actuelle') %}
{% if s == 'printing' %}En impression
{% elif s == 'idle' %}Inactive
{% elif 'paused' in s %}En pause
{% else %}{{ s | replace('_', ' ') | title }}{% endif %}
icon: mdi:printer-3d
Surveillance Imprimante 3D par IA Google Gemini - Version Corrigée
Description
SystĂšme de surveillance automatique dâimprimante 3D utilisant lâIA Google Gemini pour dĂ©tecter les problĂšmes dâimpression en temps rĂ©el. Le script analyse des captures dâĂ©cran toutes les 5 minutes pendant lâimpression et vous alerte instantanĂ©ment en cas de dĂ©tection dâanomalies (spaghetti, warping, dĂ©tachement, sous/sur-extrusion, etc.).
Fonctionnalités principales
Analyse IA automatique toutes les 5 minutes pendant lâimpression
Détection des problÚmes courants (spaghetti, warping, détachement, extrusion)
Notifications mobiles avec image et actions rapides (pause/arrĂȘt)
Statistiques par impression (nombre dâanalyses, problĂšmes dĂ©tectĂ©s)
Notifications de dĂ©but, fin et pause dâimpression avec photos
Prérequis
-
Home Assistant avec intégration Bambu Lab
-
Extension Google Generative AI Conversation configurée avec Gemini
-
Application mobile Home Assistant
-
CamĂ©ra de lâimprimante accessible
Mode dâemploi et personnalisation
Entités à personnaliser
Remplacez les entités suivantes par celles de votre imprimante :
| Entité à remplacer | Votre entité | Description |
|---|---|---|
sensor.3d_imprimante_bambu_p1s_etape_actuelle |
sensor.VOTRE_IMPRIMANTE_etape_actuelle |
Statut de lâimprimante |
camera.3d_imprimante_bambu_p1s_camera |
camera.VOTRE_IMPRIMANTE_camera |
CamĂ©ra de lâimprimante |
sensor.3d_imprimante_bambu_p1s_nom_de_la_tache |
sensor.VOTRE_IMPRIMANTE_nom_de_la_tache |
Nom du fichier en impression |
button.3d_imprimante_bambu_p1s_arreter_l_impression |
button.VOTRE_IMPRIMANTE_arreter |
Bouton dâarrĂȘt |
button.3d_imprimante_bambu_p1s_mettre_en_pause_l_impression |
button.VOTRE_IMPRIMANTE_pause |
Bouton de pause |
Exemple pour BambuLab A1 :
-
sensor.bambulaba1_etape_actuelle -
camera.bambulaba1_camera
Service de notification
Remplacez notify.mobile_app_tel_mm par votre service de notification :
-
notify.mobile_app_VOTRE_TELEPHONE(iPhone/Android) -
Ou votre service de notification préféré
Comment trouver votre service :
-
Outils de dĂ©veloppement â Services
-
Cherchez
notify.mobile_app_ -
Notez le nom complet (ex:
notify.mobile_app_s25)
Configuration de lâIA Gemini
SECTION CORRIGĂE
Il existe 2 mĂ©thodes pour configurer lâappel Ă Gemini. Choisissez celle qui fonctionne avec votre installation.
Méthode A : Utilisation de agent_id (recommandée)
-
Trouver votre agent_id :
-
Allez dans ParamĂštres â Appareils et services
-
Cherchez Google Generative AI Conversation
-
Cliquez dessus, notez lâidentifiant affichĂ© (ex:
conversation.gemini_1_5_flash)
-
-
Modifier le fichier YAML Ă la ligne de lâaction
ai_task.generate_data:
- action: ai_task.generate_data
data:
agent_id: conversation.gemini_1_5_flash # â Remplacez par VOTRE agent_id
prompt: "Tu es un expert en impression 3D..."
filenames:
- /config/www/p1s_ai_check.jpg
response_variable: gemini_response
- Format de la réponse : Utilisez
gemini_response.text
Méthode B : Utilisation de entity_id (alternative testée sur A1)
Si la méthode A ne fonctionne pas, utilisez cette syntaxe :
- action: ai_task.generate_data
data:
entity_id: ai_task.google_ai_task # â Entity ID de l'AI Task
task_name: Analyse de l'image 3D
instructions: "Tu es un expert en impression 3D. Analyse cette image..."
attachments:
media_content_id: media-source://camera/camera.VOTRE_IMPRIMANTE_camera
media_content_type: image/jpeg
response_variable: gemini_response
IMPORTANT : Avec la Méthode B, remplacez AUSSI :
Dans toutes les actions qui utilisent la réponse Gemini :
Remplacez :
value: "{{ gemini_response.text }}"
message: "{{ gemini_response.text }}"
Par :
value: "{{ gemini_response.data }}"
message: "{{ gemini_response.data }}"
Et la condition :
value_template: "{{ 'OK' not in gemini_response.text }}"
Par :
value_template: "{{ 'OK' not in gemini_response.data }}"
FrĂ©quence dâanalyse (optionnel)
Par dĂ©faut, lâanalyse se dĂ©clenche toutes les 5 minutes. Pour modifier :
trigger:
- trigger: time_pattern
minutes: "/5" # â Changez (ex: "/10" pour 10 min, "/3" pour 3 min)
Personnalisation du prompt IA (optionnel)
Vous pouvez adapter le prompt pour ajuster la sensibilitĂ© ou ajouter des dĂ©tections spĂ©cifiques dans lâautomatisation principale.
Installation
-
Créez le fichier :
/config/packages/pkg_google_gemini_imp_3d.yaml -
Copiez le code complet (ci-dessous)
-
Personnalisez les entités selon votre configuration
-
Choisissez la MĂ©thode A ou B pour lâappel Gemini
-
Redémarrez Home Assistant
-
Testez avec une impression !
Entités créées
Le package crée automatiquement :
-
input_number.gemini_analyses_current_print- Compteur dâanalyses -
input_number.gemini_problemes_current_print- Compteur de problĂšmes -
input_text.gemini_last_response- DerniĂšre rĂ©ponse de lâIA -
input_text.gemini_current_print_name- Nom de lâimpression en cours -
input_datetime.gemini_last_check- Horodatage de la derniÚre vérification -
sensor.imprimante_3d_statut_lisible- Statut en français
Code complet - VERSION CORRIGĂE
# ========================================
# PACKAGE : Surveillance Imprimante 3D + Gemini
# FICHIER : /config/packages/pkg_google_gemini_imp_3d.yaml
# VERSION : 2.0 - CORRIGĂE
# ========================================
# ========================================
# INPUT HELPERS (stockage infos par impression)
# ========================================
input_number:
gemini_analyses_current_print:
name: "Gemini - Analyses (impression actuelle)"
min: 0
max: 1000
step: 1
icon: mdi:counter
gemini_problemes_current_print:
name: "Gemini - ProblÚmes détectés"
min: 0
max: 100
step: 1
icon: mdi:alert-circle
input_text:
gemini_last_response:
name: "Gemini - DerniÚre réponse"
max: 255
icon: mdi:message-text
gemini_current_print_name:
name: "Gemini - Nom impression"
max: 100
icon: mdi:printer-3d
input_datetime:
gemini_last_check:
name: "Gemini - DerniÚre vérification"
has_date: true
has_time: true
# ========================================
# AUTOMATISATIONS
# ========================================
automation:
# ========================================
# AUTOMATISATION PRINCIPALE - SURVEILLANCE IA
# â ïž CHOISISSEZ LA MĂTHODE A OU B CI-DESSOUS
# ========================================
- alias: "đ Surveillance Impression 3D - IA Gemini"
id: p1s_ai_monitoring_gemini
trigger:
- trigger: time_pattern
minutes: "/5"
condition:
- condition: state
entity_id: sensor.3d_imprimante_bambu_p1s_etape_actuelle # â PERSONNALISER
state: "printing"
action:
# Capture de l'image
- action: camera.snapshot
target:
entity_id: camera.3d_imprimante_bambu_p1s_camera # â PERSONNALISER
data:
filename: /config/www/p1s_ai_check.jpg
- delay: {seconds: 2}
# Incrémentation du compteur d'analyses
- action: input_number.set_value
target:
entity_id: input_number.gemini_analyses_current_print
data:
value: "{{ states('input_number.gemini_analyses_current_print') | float + 1 }}"
# ========================================
# MĂTHODE A : Utilisation de agent_id
# ========================================
- action: ai_task.generate_data
data:
agent_id: conversation.gemini_1_5_flash # â REMPLACER par votre agent_id
prompt: "Tu es un expert en impression 3D. Analyse cette image d'une imprimante 3D en cours d'impression. DĂ©tecte ces problĂšmes : spaghetti (impression dĂ©tachĂ©e), warping (coins dĂ©collĂ©s), dĂ©tachement du plateau, sous-extrusion (lignes fines), sur-extrusion (trop de plastique), problĂšme de premiĂšre couche. Si TOUT VA BIEN, rĂ©ponds UNIQUEMENT par le mot 'OK'. Si tu dĂ©tectes un problĂšme, rĂ©ponds 'PROBLĂME: [description courte en une phrase]'."
filenames:
- /config/www/p1s_ai_check.jpg
response_variable: gemini_response
# ========================================
# MĂTHODE B (Alternative) : Utilisation de entity_id
# â ïž Si vous utilisez la MĂ©thode B :
# 1. Commentez le bloc MĂTHODE A ci-dessus (ajoutez # devant chaque ligne)
# 2. Décommentez le bloc ci-dessous (enlevez le # devant chaque ligne)
# 3. Remplacez gemini_response.text par gemini_response.data PARTOUT
# ========================================
# - action: ai_task.generate_data
# data:
# entity_id: ai_task.google_ai_task
# task_name: Analyse de l'image 3D
# instructions: "Tu es un expert en impression 3D. Analyse cette image d'une imprimante 3D en cours d'impression. DĂ©tecte ces problĂšmes : spaghetti (impression dĂ©tachĂ©e), warping (coins dĂ©collĂ©s), dĂ©tachement du plateau, sous-extrusion (lignes fines), sur-extrusion (trop de plastique), problĂšme de premiĂšre couche. Si TOUT VA BIEN, rĂ©ponds UNIQUEMENT par le mot 'OK'. Si tu dĂ©tectes un problĂšme, rĂ©ponds 'PROBLĂME: [description courte en une phrase]'."
# attachments:
# media_content_id: media-source://camera/camera.3d_imprimante_bambu_p1s_camera # â PERSONNALISER
# media_content_type: image/jpeg
# response_variable: gemini_response
# Stockage de la réponse
# â ïž MĂTHODE A : utilisez .text
# â ïž MĂTHODE B : remplacez .text par .data
- action: input_text.set_value
target:
entity_id: input_text.gemini_last_response
data:
value: "{{ gemini_response.text }}" # â MĂTHODE B: changer en .data
# Horodatage
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.gemini_last_check
data:
datetime: "{{ now().isoformat() }}"
# Log systĂšme
- action: system_log.write
data:
message: "Gemini: {{ gemini_response.text }}" # â MĂTHODE B: changer en .data
level: info
# Vérification si problÚme détecté
# â ïž MĂTHODE B : remplacez .text par .data
- condition: template
value_template: "{{ 'OK' not in gemini_response.text }}" # â MĂTHODE B: changer en .data
# Incrémentation du compteur de problÚmes
- action: input_number.set_value
target:
entity_id: input_number.gemini_problemes_current_print
data:
value: "{{ states('input_number.gemini_problemes_current_print') | float + 1 }}"
# Notification de problĂšme
- action: notify.mobile_app_tel_mm # â PERSONNALISER
data:
title: "â ïž ProblĂšme Impression 3D !"
message: "{{ gemini_response.text }}" # â MĂTHODE B: changer en .data
data:
image: "/local/p1s_ai_check.jpg?t={{ now().timestamp() | int }}"
priority: high
ttl: 0
color: "#FF0000"
tag: "print_issue"
actions:
- action: "PAUSE_PRINT"
title: "âžïž Pause"
- action: "STOP_PRINT"
title: "đ ArrĂȘter"
# ========================================
# DĂBUT D'IMPRESSION
# ========================================
- alias: "đšïž DĂ©but Surveillance Impression 3D"
id: print_start_gemini_notification
trigger:
- trigger: state
entity_id: sensor.3d_imprimante_bambu_p1s_etape_actuelle # â PERSONNALISER
to: "printing"
action:
# Réinitialisation des compteurs
- action: input_number.set_value
target:
entity_id: input_number.gemini_analyses_current_print
data:
value: 0
- action: input_number.set_value
target:
entity_id: input_number.gemini_problemes_current_print
data:
value: 0
# Stockage du nom de l'impression
- action: input_text.set_value
target:
entity_id: input_text.gemini_current_print_name
data:
value: "{{ states('sensor.3d_imprimante_bambu_p1s_nom_de_la_tache') }}" # â PERSONNALISER
# Capture de démarrage
- action: camera.snapshot
target:
entity_id: camera.3d_imprimante_bambu_p1s_camera # â PERSONNALISER
data:
filename: /config/www/p1s_start.jpg
- delay: {seconds: 2}
# Notification de démarrage
- action: notify.mobile_app_tel_mm # â PERSONNALISER
data:
title: "đšïž Impression DĂ©marrĂ©e"
message: "{{ states('sensor.3d_imprimante_bambu_p1s_nom_de_la_tache') }} - Surveillance IA activĂ©e" # â PERSONNALISER
data:
image: "/local/p1s_start.jpg?t={{ now().timestamp() | int }}"
priority: normal
color: "#0000FF"
tag: "print_status"
# ========================================
# FIN D'IMPRESSION
# ========================================
- alias: "â
Fin Impression 3D Réussie"
id: print_completed_gemini_notification
trigger:
- trigger: state
entity_id: sensor.3d_imprimante_bambu_p1s_etape_actuelle # â PERSONNALISER
to: "idle"
from: "printing"
action:
# Capture finale
- action: camera.snapshot
target:
entity_id: camera.3d_imprimante_bambu_p1s_camera # â PERSONNALISER
data:
filename: /config/www/p1s_final.jpg
- delay: {seconds: 2}
# Notification de fin avec statistiques
- action: notify.mobile_app_tel_mm # â PERSONNALISER
data:
title: "â
Impression Terminée"
message: >
{{ states('input_text.gemini_current_print_name') }}
đ Analyses IA: {{ states('input_number.gemini_analyses_current_print') | int }}
â ïž ProblĂšmes: {{ states('input_number.gemini_problemes_current_print') | int }}
data:
image: "/local/p1s_final.jpg?t={{ now().timestamp() | int }}"
priority: high
ttl: 0
color: "#00FF00"
tag: "print_status"
# ========================================
# IMPRESSION EN PAUSE
# ========================================
- alias: "âžïž Alerte Impression en Pause"
id: print_paused_alert_gemini
trigger:
- trigger: state
entity_id: sensor.3d_imprimante_bambu_p1s_etape_actuelle # â PERSONNALISER
to:
- "paused_filament_runout"
- "paused_nozzle_clog"
- "paused_first_layer_error"
- "paused_user"
- "paused_nozzle_temperature_malfunction"
- "paused_heat_bed_temperature_malfunction"
- "paused_front_cover_falling"
action:
# Capture de pause
- action: camera.snapshot
target:
entity_id: camera.3d_imprimante_bambu_p1s_camera # â PERSONNALISER
data:
filename: /config/www/p1s_pause.jpg
- delay: {seconds: 2}
# Notification de pause
- action: notify.mobile_app_tel_mm # â PERSONNALISER
data:
title: "âžïž Impression en Pause"
message: "{{ trigger.to_state.state | replace('_', ' ') | title }}"
data:
image: "/local/p1s_pause.jpg?t={{ now().timestamp() | int }}"
priority: high
color: "#FFA500"
tag: "print_pause"
# ========================================
# ACTIONS DEPUIS NOTIFICATIONS
# ========================================
- alias: "đ ArrĂȘt Impression depuis Notification"
id: stop_print_from_notification_gemini
trigger:
- trigger: event
event_type: mobile_app_notification_action
event_data:
action: STOP_PRINT
action:
- action: button.press
target:
entity_id: button.3d_imprimante_bambu_p1s_arreter_l_impression # â PERSONNALISER
- alias: "âžïž Pause Impression depuis Notification"
id: pause_print_from_notification_gemini
trigger:
- trigger: event
event_type: mobile_app_notification_action
event_data:
action: PAUSE_PRINT
action:
- action: button.press
target:
entity_id: button.3d_imprimante_bambu_p1s_mettre_en_pause_l_impression # â PERSONNALISER
# ========================================
# TEMPLATE SENSOR
# ========================================
template:
- sensor:
- name: "Imprimante 3D - Statut Lisible"
unique_id: p1s_status_readable
state: >
{% set s = states('sensor.3d_imprimante_bambu_p1s_etape_actuelle') %}
{% if s == 'printing' %}En impression
{% elif s == 'idle' %}Inactive
{% elif 'paused' in s %}En pause
{% else %}{{ s | replace('_', ' ') | title }}{% endif %}
icon: mdi:printer-3d
Checklist avant de tester
-
Toutes les entités
sensor.3d_imprimante_bambu_p1s_*remplacées -
Toutes les entités
camera.3d_imprimante_bambu_p1s_cameraremplacées -
Service de notification
notify.mobile_app_tel_mmremplacé -
Méthode A ou B choisie et correctement configurée
-
Si Méthode B : tous les
.textremplacés par.data -
Fichier sauvegardé dans
/config/packages/ -
Home Assistant redémarré
-
Test avec une impression courte
Dépannage
ProblĂšme : « agent_id not found » â Utilisez la MĂ©thode B avec entity_id
ProblĂšme : Pas de notification â VĂ©rifiez votre service de notification dans Outils de dĂ©veloppement
ProblĂšme : « gemini_response.text » vide â Si vous utilisez la MĂ©thode B, remplacez .text par .data
ProblĂšme : Lâautomatisation ne se dĂ©clenche pas â VĂ©rifiez que lâĂ©tat de votre imprimante est bien « printing » pendant lâimpression
Câest prĂȘt !
Lancez une impression de test et surveillez les notifications. Les premiĂšres analyses commenceront aprĂšs 5 minutes dâimpression.
Bon printing ! ![]()