Ma Kobra S1 enfin dans Home Assistant ! (via Docker)

Si vous avez une Anycubic Kobra S1, vous savez que c’est une super bécane, mais alors niveau ouverture logicielle, c’est pas trop ça… Pour l’intégrer proprement dans Home Assistant, c’est souvent la croix et la bannière.

Après avoir pas mal bidouillé, j’ai réussi à compiler une image Docker qui fait le pont (le fameux « bridge ») entre l’imprimante et HA. Du coup, je vous partage ça pour que vous puissiez vous aussi avoir un dashboard aux petits oignons.

1. C’est quoi l’idée ?

Le but, c’est d’avoir toutes les infos en temps réel sur Home Assistant : les températures, la progression, et même les états de vos slots de filaments (pratique pour pas lancer un print à vide !).

Pour la caméra, on la récupère en direct via le fichier configuration.yaml. Une fois fini, ça donne un truc bien propre comme sur ma capture d’écran.

2. On installe le bousin (Docker & Portainer)

Pour faire tourner ce bridge, j’ai compilé une image que j’ai sauvegardée proprement. Comme c’est un export direct (docker save), la procédure est un peu spéciale mais très simple.

Le fichier à récupérer : J’ai compressé l’image en .tar.gz. Pour soutenir le blog et les heures de tests, c’est derrière un petit lien sponso. Merci à ceux qui jouent le jeu !

📦 Téléchargement de l’image Docker

Format : anycubic-s1-bridge.tar.gz
Le lien inclut une courte pub pour soutenir le site. Merci !

TÉLÉCHARGER MAINTENANT

Étape A : Charger l’image dans le système

Deux méthodes selon votre situation :

Méthode 1 — Via l’interface Portainer (recommandée)

  1. Connectez-vous à votre Portainer.
  2. Allez dans le menu Images sur la gauche.
  3. Cliquez sur le bouton Import.
  4. Sélectionnez le fichier anycubic-s1-bridge.tar.gz que vous venez de télécharger.
  5. Cliquez sur Upload. Patientez un instant… Une fois fini, vous devriez voir apparaître l’image anycubic-s1-bridge avec le tag latest dans votre liste.

Méthode 2 — Via SSH (si l’import Portainer échoue)

Si vous avez déjà Docker sur votre machine ou que l’import Portainer ne fonctionne pas, connectez-vous en SSH sur votre NAS et tapez :

docker load < /volume1/docker/anycubic-s1-bridge.tar.gz

Adaptez le chemin selon l’endroit où vous avez déposé le fichier. Une fois la commande terminée, retournez dans Portainer → Images et actualisez — l’image anycubic-s1-bridge:latest devrait apparaître dans la liste.

Dans les deux cas, une fois l’image visible, on passe à l’étape suivante !

Étape B : Créer le conteneur

Maintenant qu’on a l’image, on va créer le moteur :

  1. Allez dans le menu Containers, puis cliquez sur + Add container.
  2. Name : Donnez-lui un nom clair, par exemple anycubic-s1-bridge.
  3. Image : Tapez exactement le nom de l’image qu’on vient d’importer : anycubic-s1-bridge:latest.
  4. Network : Si votre broker MQTT tourne sur la même machine que Portainer, vous pouvez laisser en bridge. Sinon, assurez-vous que le container peut bien joindre l’IP de votre Home Assistant sur le port 1883.

Étape C : Configurer les variables (.env)

C’est ici qu’on fait la magie. Ne cherchez pas un fichier sur votre disque, on va entrer les infos directement dans l’onglet de configuration de Portainer :

  1. Descendez tout en bas de la page dans la section Advanced container settings.
  2. Cliquez sur l’onglet Env (pour Environnement).
  3. Cliquez sur + Add environment variable pour chaque ligne ci-dessous :
Nom de la variableValeur (à adapter)
ANYCUBIC_S1_IP192.168.x.x (L’IP de votre imprimante)
HA_BROKER192.168.x.x (L’IP de votre serveur MQTT)
HA_PORT1883
HA_USERvotre_user
HA_PASSvotre_password
SNAPSHOT_INTERVAL_IDLE30
SNAPSHOT_INTERVAL_BUSY10
INFO_UPDATE_INTERVAL10

Étape D : Politique de redémarrage

Avant de déployer, une dernière chose importante : descendez jusqu’à la section Restart policy et sélectionnez Unless stopped. Cela garantit que le bridge redémarre automatiquement si votre NAS redémarre, sans intervention de votre part.

Étape E : Déployer !

Remontez en haut de la page et cliquez sur Deploy the container. Portainer va créer et lancer le container en quelques secondes.

Pour vérifier que tout tourne bien, cliquez sur votre container puis sur Logs. Vous devriez voir défiler des lignes du type :

Connected to Anycubic MQTT broker
Subscribed to Anycubic printer topics
Published printer state data to Home Assistant

Si vous voyez ça, c’est gagné ! Votre imprimante est maintenant connectée à Home Assistant.

3. On s’occupe de la caméra

Pas besoin de passer par le bridge pour l’image ! La Kobra S1 diffuse déjà un flux que Home Assistant sait lire. Par contre, il faut l’aider un peu avec quelques arguments pour que ce soit fluide et sans lag.

Ouvrez votre configuration.yaml et balancez ce bloc :

camera:
  - platform: ffmpeg
    name: "Anycubic S1 Printer Camera"
    input: "http://192.168.x.x:18088/flv" # Remplacez par l'IP de votre S1
    extra_arguments: "-analyzeduration 1000000 -probesize 1000000 -fflags nobuffer -flags low_delay -strict experimental -fflags +genpts+discardcorrupt"
Note : Les "extra_arguments", c'est ce qui permet d'avoir le flux direct sans avoir 30 secondes de retard.

Étape E : Récupérer les infos dans Home Assistant

Une fois l’intégration terminée, il est temps de créer une interface pour piloter votre Kobra S1. Voici le rendu visuel que nous allons obtenir (sobre, efficace et compatible avec tous les thèmes) :

Prérequis (via HACS)

Pour que ce dashboard fonctionne, vous devez avoir installé ces trois modules complémentaires via HACS :

  1. Button Card (custom:button-card) : Pour les boutons intelligents et les couleurs dynamiques.
  2. Mushroom Cards (custom:mushroom-template-card) : Pour l’affichage élégant des filaments de l’ACE Pro.
  3. Card Mod (card-mod) : Pour ajuster la mise en page.

Liste des entités disponibles

Selon votre configuration, voici les principales entités que vous pourrez exploiter dans vos propres cartes :

FonctionNom de l’entité (exemple)
État Imprimantesensor.anycubic_kobra_s1_printer_state
Connectivitésensor.anycubic_printer_printer_connectivity
Température Busesensor.anycubic_kobra_s1_nozzle_temperature
Température Plateausensor.anycubic_kobra_s1_hotbed_temperature
Progressionsensor.anycubic_kobra_s1_print_progress
Fichier en courssensor.anycubic_kobra_s1_print_filename
Caméra (Snapshot)image.anycubic_kobra_s1_anycubic_snapshot
Slots ACE Pro (1 à 4)sensor.anycubic_kobra_s1_filament_0_type (à 3)

Le Code YAML (Version Standard)

Voici le code complet à copier dans une carte de type Manuel (ou via l’éditeur YAML de votre vue). Ce code utilise le mode « Sections » de Home Assistant pour un rendu propre sur mobile et tablette :

type: sections
max_columns: 3
title: Anycubic S1
sections:
  - type: grid
    title: Contrôles & État
    cards:
      - type: custom:button-card
        entity: sensor.anycubic_printer_printer_connectivity
        name: CONNECTIVITÉ
        show_state: true
        styles:
          card:
            - border-radius: 8px
          state:
            - color: "[[[ return entity.state === 'online' ? '#4caf50' : '#f44336'; ]]]"
          icon:
            - color: "[[[ return entity.state === 'online' ? '#4caf50' : '#f44336'; ]]]"

      - type: custom:button-card
        entity: light.anycubic_kobra_s1_printer_light
        name: LUMIÈRE
        icon: mdi:lightbulb
        show_state: true
        tap_action:
          action: toggle
        styles:
          card:
            - border-radius: 8px
          icon:
            - color: "[[[ return entity.state === 'on' ? '#FFD700' : '#808080'; ]]]"

      - type: horizontal-stack
        cards:
          - type: custom:button-card
            entity: button.anycubic_printer_pause_print
            name: PAUSE
            icon: mdi:pause
            styles:
              card: [border: "1px solid #FF9800", background: "rgba(255,152,0,0.1)"]
          - type: custom:button-card
            entity: button.anycubic_printer_resume_print
            name: REPRENDRE
            icon: mdi:play
            styles:
              card: [border: "1px solid #4caf50", background: "rgba(76,175,80,0.1)"]
          - type: custom:button-card
            entity: button.anycubic_printer_cancel_print
            name: ANNULER
            icon: mdi:stop
            styles:
              card: [border: "1px solid #f44336", background: "rgba(244,67,54,0.1)"]

  - type: grid
    title: Impression & Caméra
    cards:
      - type: picture
        image_entity: image.anycubic_kobra_s1_anycubic_snapshot
      
      - type: conditional
        conditions:
          - condition: state
            entity: sensor.anycubic_kobra_s1_printer_state
            state_not: free
        card:
          type: picture
          image_entity: image.anycubic_kobra_s1_print_preview
          aspect_ratio: "4:3"

      - type: markdown
        content: >-
          <p style="text-align:center;">🖨️ **Fichier :** {{ states('sensor.anycubic_kobra_s1_print_filename') }}</p>

  - type: grid
    title: ACE Pro & Températures
    cards:
      - type: horizontal-stack
        cards:
          - type: custom:button-card
            entity: sensor.anycubic_kobra_s1_nozzle_temperature
            name: BUSE
            show_state: true
          - type: custom:button-card
            entity: sensor.anycubic_kobra_s1_hotbed_temperature
            name: PLATEAU
            show_state: true

      - type: horizontal-stack
        cards:
          - type: custom:mushroom-template-card
            primary: S1
            secondary: "{{states('sensor.anycubic_kobra_s1_filament_0_type')}}"
            icon: mdi:circle
            icon_color: "{{states('sensor.anycubic_kobra_s1_filament_0_color')}}"
            layout: vertical
          - type: custom:mushroom-template-card
            primary: S2
            secondary: "{{states('sensor.anycubic_kobra_s1_filament_1_type')}}"
            icon: mdi:circle
            icon_color: "{{states('sensor.anycubic_kobra_s1_filament_1_color')}}"
            layout: vertical
          - type: custom:mushroom-template-card
            primary: S3
            secondary: "{{states('sensor.anycubic_kobra_s1_filament_2_type')}}"
            icon: mdi:circle
            icon_color: "{{states('sensor.anycubic_kobra_s1_filament_2_color')}}"
            layout: vertical
          - type: custom:mushroom-template-card
            primary: S4
            secondary: "{{states('sensor.anycubic_kobra_s1_filament_3_type')}}"
            icon: mdi:circle
            icon_color: "{{states('sensor.anycubic_kobra_s1_filament_3_color')}}"
            layout: vertical

Personnalisation : De l’utilitaire au « Cyber-Cockpit »

Une fois que vous maîtrisez les entités de base, la force de Home Assistant est de vous permettre de transformer une interface classique en un véritable tableau de bord immersif.

Voici un comparatif entre la configuration standard (vue précédemment) et ma version personnalisée pour la Kobra S1.

FonctionnalitéVersion StandardMa Version Personnalisée
Design visuelMinimaliste / Flat DesignStyle Cyberpunk / Orbitron avec néons bleus
Effets dynamiquesCouleurs d’icônes simplesGlow-shadows et dégradés (gradients) dynamiques
Monitoring ACE ProType & CouleurBadge de statut indiquant quel slot est actif
Alertes thermiquesTexte simpleBordures changeant de couleur selon la température
Arrière-planCouleur unieImage immersive avec opacité contrôlée

Le petit plus : L’automatisation « Auto-Coupure »

Dans ma version personnalisée, vous aurez remarqué un interrupteur nommé « Auto Coupure ». C’est une fonctionnalité que j’ai ajoutée via un input_boolean (un interrupteur virtuel) dans Home Assistant.

Le concept : Plutôt que de laisser l’imprimante allumée toute la nuit après une impression, Home Assistant gère l’extinction totale de la prise connectée, mais uniquement quand toutes les conditions de sécurité sont réunies.

Comment ça fonctionne ?

Pour que l’imprimante se coupe toute seule, j’ai créé une automatisation qui surveille trois conditions critiques :

  1. L’interrupteur « Auto Coupure » doit être activé sur le dashboard (pour garder le contrôle si on veut enchaîner les prints).
  2. Le statut de l’impression doit être sur finish (terminé).
  3. La température de la buse doit être descendue en dessous de 40°C. C’est l’étape cruciale pour protéger votre tête d’impression et éviter que la chaleur ne remonte et ne bouche le « heatbreak » faute de ventilation.

C’est là que la domotique prend tout son sens : coupler les données précises de la machine (température, état) avec une prise connectée externe pour une gestion intelligente que le fabricant ne propose pas nativement.

Ce qu’il vous faut pour cette fonction :

  • Une prise connectée (Zigbee, Matter ou WiFi) supportée par Home Assistant.
  • Un Interrupteur virtuel (Entrée / Input Boolean) créé dans vos paramètres Home Assistant.
  • Une petite automatisation calquée sur ces trois conditions.