Logging avec Dobot Lua : supervision centralisée des robots avec Leif

Le logging avec Dobot Lua est la base de l'assurance qualité, de l'analyse d'erreurs et de la documentation traçable des processus dans la production automatisée. Cet article couvre les deux voies : la journalisation locale rapide directement sur le robot, et la solution centralisée fondée sur Leif, le serveur de logs et d'équipements de needful-apps. Avec Leif, vous voyez les messages de chaque robot Dobot en direct dans le navigateur, sur le plan de votre atelier et, si vous le souhaitez, comme alerte directement dans Microsoft Teams. Et quand une cellule s'arrête, la chronologie rejoue tout l'incident : images caméra, signaux DI/DO en clair et la ligne de programme Lua qui s'exécutait à cet instant précis.

Logs en direct d'un Dobot MG400 dans le serveur de logs Leif, filtrés par niveau et robot
Logs en direct d'un Dobot MG400 dans Leif : chaque message apparaît en temps réel, filtrable par niveau et robot.

Pourquoi le logging est indispensable sur les robots Dobot

Dès qu'un Dobot tourne en production, vous voulez pouvoir répondre à trois questions à tout moment : qu'a fait le robot, et quand ? Pourquoi un cycle a-t-il échoué ? Et tout tourne-t-il correctement en ce moment, sans que personne ne se tienne à côté de la machine ? Sans logging structuré, vous répondez avec des suppositions ; avec logging, vous répondez avec des données. Cela paie directement : preuves qualité pour vos clients, traçabilité des pièces individuelles et dépannage rapide en travail posté.

Démarrage rapide : journalisation locale avec Dobot Lua

Pour un premier essai, la journalisation locale directement dans DobotStudio Pro suffit, sans infrastructure supplémentaire. Nous ajoutons à Global.lua une petite fonction qui écrit chaque message dans la console et le stocke aussi dans un fichier sur le robot :

-- Global.lua : journalisation locale simple
LOG_FILE = "/mnt/sdcard/logs/robot_log.txt"

function log_local(level, message)
    local line = "[" .. os.date("%Y-%m-%d %H:%M:%S") .. "] [" .. level .. "] " .. message
    print(line)  -- sortie dans le panneau de logs de DobotStudio
    local f = io.open(LOG_FILE, "a")
    if f then
        f:write(line .. "\n")
        f:close()
    end
end

Où les fichiers de logs locaux atteignent leurs limites

La journalisation locale fonctionne tant que vous exploitez un seul robot et que vous allez lire le fichier à la machine. En pratique, cela craque vite : chaque robot écrit son propre fichier dans son propre format. Quand quelque chose tourne mal, personne ne remarque à temps que la ligne est à l'arrêt trois postes plus loin. Et quand l'audit arrive, des heures partent à collecter des fichiers texte sur différents contrôleurs. Nous avons construit Leif exactement pour ce problème.

Leif : le serveur de logs central pour votre production

Leif est un serveur de logs et d'équipements auto-hébergé, développé pour les environnements robotiques et de production. Vos Dobot, automates et périphériques envoient leurs messages à Leif par TCP ou REST :

  • Vue en direct dans le navigateur : les nouveaux logs apparaissent en temps réel, avec recherche plein texte et filtres par robot, niveau et poste.
  • Chronologie : chaque incident comme une relecture avec images caméra, signaux DI/DO en clair et la ligne de programme Lua active.
  • Plan d'atelier en direct : téléversez votre plan, placez un marqueur par robot, voyez l'état d'un coup d'œil, aussi en wallboard TV.
  • Alertes dans Microsoft Teams : les messages critiques arrivent immédiatement dans le bon canal, avec déduplication et temporisation contre les avalanches d'alertes.
  • Traçabilité : les trace IDs permettent de suivre des séquences liées à travers plusieurs postes.
  • Compatible Grafana et Metabase : API compatible Loki, stockage PostgreSQL pour des analyses SQL approfondies.
  • Multilingue : l'interface existe en allemand, français et anglais.
  • 100 % auto-hébergé : Docker Compose, pas de cloud, aucune donnée transmise à des tiers.
Plan d'atelier en direct dans Leif avec un marqueur d'état par robot : vert, jaune et rouge Généré par IA
Le plan d'atelier en direct dans Leif : vert tourne, jaune avertit, rouge demande de l'attention. Idéal en wallboard dans l'atelier.

Connecter un Dobot à Leif

Dans le panneau d'administration de Leif, vous créez un client_id avec sa propre api_key par robot. Les clés compromises se révoquent alors centralement sans toucher aux autres robots. Le code de logging vit entièrement dans Global.lua, tolérant aux pannes et avec des timeouts courts pour que le robot n'attende jamais le logging :

-- Logging Leif pour Dobot (Global.lua)
LEIF_ENABLED   = true              -- mettre à false pour les tests hors ligne
LEIF_HOST      = "192.168.10.50"   -- IP ou nom d'hôte du serveur Leif
LEIF_PORT      = 49090             -- ingestion TCP des logs (défaut Leif)
CLIENT_ID      = "MG400_001"       -- créé dans le panneau d'administration Leif
API_KEY        = "your-api-key"    -- généré dans le panneau d'administration Leif
SOCKET_TIMEOUT = 0.2               -- secondes, le robot ne doit jamais attendre
Panneau d'administration Leif : création d'un client TCP avec identifiant client et clé API
Créer un client TCP dans Leif : attribuer un identifiant client, générer une clé API, terminé.

Des alertes directement dans Microsoft Teams

Les messages critiques ne doivent pas dormir dans le log jusqu'à ce que quelqu'un regarde : dans Leif, vous définissez motifs regex, niveaux de log et délais de grâce par canal Teams. Déduplication et temporisation empêchent les avalanches d'alertes, l'équipe voit donc immédiatement quand un poste a besoin d'attention.

Alertes Leif dans Microsoft Teams avec motifs regex et délai de grâce par canal
Les alertes dans Leif : pour chaque canal Teams, vous définissez motifs regex, niveaux de log et délais de grâce contre les avalanches d'alertes.

De l'entrée de log à la cause racine : la chronologie

Dès que vos logs arrivent avec un trace_id partagé par incident, les messages isolés deviennent une relecture complète. La chronologie de Leif place un curseur sur tout ce qui appartient à l'incident : la relecture caméra de la cellule, chaque signal DI et DO avec un nom en clair au lieu d'un numéro de broche et la ligne de programme Lua qui s'exécutait à cet instant précis. Vous déplacez le curseur et voyez par exemple : la pince se ferme, la pompe à vide tourne, mais « vide atteint » reste inactif, et le programme est arrêté sur if not vakuum_ok() à la ligne 6. Une analyse de cause racine qui coûtait des heures de fichiers de logs et de visionnage vidéo prend désormais quelques minutes.

Les noms de signaux se maintiennent une seule fois, centralement : DI 3 devient « vide atteint », DO 1 devient « fermer la pince ». Une comparaison avec un bon cycle superpose des traces de référence issues de cycles sans erreur et marque les écarts. Pour votre fournisseur ou la maintenance, vous exportez l'incident complet sous forme de dossier d'incident.

Chronologie Leif avec relecture caméra d'une cellule robotisée, signaux DI/DO en clair et ligne de programme Lua mise en évidence
La chronologie : image caméra, signaux en clair et la ligne de programme Lua active de l'incident sous un même curseur.

Questions fréquentes

Comment écrire un log dans un fichier en Dobot Lua ?

Avec io.open en mode append : une petite fonction dans Global.lua écrit chaque message horodaté dans la console via print et en plus dans un fichier, par exemple sous /mnt/sdcard/logs/. Pour la production, la rotation des logs et la protection contre les accès concurrents font aussi partie du tableau.

Comment superviser plusieurs robots Dobot de façon centralisée ?

Avec un serveur de logs central comme Leif : chaque robot envoie ses messages au serveur par TCP ou REST. Vous y trouvez une vue en direct dans le navigateur, un plan d'atelier, la recherche plein texte, des alertes Teams et une API compatible Loki pour Grafana.

Le logging bloque-t-il le robot ?

Non, pas s'il est bien implémenté : l'intégration Leif utilise des timeouts de socket courts (0,2 seconde) et tolère les pannes. Si l'envoi échoue, le programme du robot continue simplement sans délai.

Comment trouver rapidement la cause après un incident ?

Avec la chronologie de Leif : tous les logs d'un incident partagent un trace_id, rejoints par les fronts de signaux DI/DO, la relecture caméra de la cellule et la ligne de programme Lua active. Un curseur parcourt le tout de façon synchrone, et une comparaison avec un bon cycle marque les écarts par rapport aux cycles sans erreur.

Parlons-en.

Premier entretien gratuit : nous revenons vers vous au plus vite.