Luup debugging (Vera Lite)

debug

Introduction

L’un des gros avantage de la box domotique Vera Lite est de pouvoir développer ses propres fonctions en Lua. Les fonctions développées doivent être placées dans la fenêtre Edit Startup Lua (APPS → Develop Apps → Edit Startup Lua). Cependant debugguer du Luup sur la Vera n’est pas une chose facile car, avec l’interface UI5, l’éditeur de Luup est une toute petite fenêtre d’édition de texte simple. Cela implique plusieurs problèmes :

  • Comme la fenêtre est petite, une ligne de code se retrouve souvent sur plusieurs lignes se qui ne facilite pas la lecture
  • Pas de numérotation des lignes, aucune coloration syntaxique, encore moins d’auto-complétion…
  • Il faut sauver à chaque fois, en plusieurs cliques, puis attendre que la Vera redémarre le moteur Luup (plusieurs seconde)
  • Il faut déclencher l’exécution du code (parfois lié à un évènement par exemple)
  • Il faut scruter le fichier log ou les erreurs sont notifiées car la Vera ne signale pas d’erreur d’elle-même
  • Il faut bien déverminer les erreurs de syntaxe car elles ne sont pas toujours signalées dans le bon module

Offline debugging

Tout cela incite à debugger offline, c’est à dire en dehors de l’interface de la Vera. On peut ainsi profiter d’un bon éditeur avec numérotation des lignes, coloration syntaxique… et exécuter instantanément le code pour voir ce que cela donne. Cependant, le langage Luup est une extension propre à la Vera du langage Lua. Pour debugger offline, il faut donc se ramener à du Lua :

  • En commentant (--) toute les instructions spécifiquement Luup (ex. : luup…). Cette solution limite un peut l’intérêt du debuggage met permet au moins de vérifier la syntaxe et la logique du code Lua, ce qui est déjà pas mal.
  • En utilisant une librairie qui implémente ou simule les instructions spécifiquement Luup. Je n’en ai pas trouvé sur le net, il ne reste plus qu’à la faire…
    luup = {}
    luup.log = print
    ...

Pour debugger du code Lua offline, il est possible d’utiliser un éditeur léger comme gedit ou environnement complet comme celui de ZeroBrane Studio ou encore l’IDE LDT sous Eclipse. J’apprécie particulièrement ZeroBrane Studio qui est bien plus léger qu’Eclipse, très agréable à utiliser et qui comporte une capacité d’analyse syntaxique du code (Project → Analyze) très utile pour du debuggage offline. Geany est également vraiment très bien, assez proche de ZeroBrane Studio avec quelques fonctionnalités supplémentaires bien appréciables mais sans la capacité d’analyse syntaxique (à ne pas confondre avec la coloration syntaxique). Voir Lua Editor Support pour un tour d’horizon des éditeurs de code Lua.

Online debugging

Un bon conseil est de commencer à debugger la partie Lua du code offline. Ensuite, il faut bien tester le code sur la Vera. Les erreurs sont reportées dans le fichier log (le niveau 01 est celui des erreurs critiques) que l’on peut afficher dans un navigateur à l’adresse suivante :
http://IP_VERA/cgi-bin/cmh/log.sh?Device=LuaUPnP
Impossible de debugger sans la possibilité d’afficher des informations. Pour cela, il faut utiliser l’instruction luup.log("message") qui permet d’afficher un message de niveau 50 dans le fichier log.

La fenêtre Test Luup code (Lua) (APPS → Develop Apps → Test Luup code (Lua)) est également une aide précieuse. Elle permet de tester des bouts de code et d’appeler des fonctions implémentées dans Edit Startup Lua. Il faut penser à systématiquement terminer le code saisi dans Test Luup code (Lua) par l’instruction return true sous peine de risquer de voir s’afficher le message Code failed même si la séquence d’instructions s’est déroulée normalement.

SSH sur Vera Lite

Visualiser le fichier log dans une session ssh

Il est possible de se connecter sur la Vera Lite en ssh : $ ssh remote@IP_VERA
Pour trouver le mot de passe, il faut se rendre dans l’interface web de la Vera Lite dans l’onglet ACCOUNT → Tech support. Cette page affiche une ligne de la forme suivante :
Tech support full control enabled, access code XXXXXXXX-YYYYYY
Le mot de passe à utiliser pour la connexion ssh est YYYYYY.

Le fichier log se trouve ici : /var/log/cmh/LuaUPnP.log. Une fois connecté sur la Vera dans une session ssh, on peut afficher en continu les erreurs critiques ainsi que les messages de debuggage :
root@MiOS_XXXXXXXX:~# tail -f -n5000 /var/log/cmh/LuaUPnP.log | grep -E '^(01|50)'
Il est également possible d’afficher en continu ce fichier sans ouvrir une session ssh :
$ ssh -t remote@IP_VERA "tail -f -n5000 /var/log/cmh/LuaUPnP.log | grep -E '^(01|50)'"
Pour faire cela depuis une machine distante, il faut mettre en place une redirection de port au niveau du routeur et préciser ce port à la commande ssh :
$ ssh -p PORT -t remote@ADRESSE_VERA "tail -f -n5000 /var/log/cmh/LuaUPnP.log | grep -E '^(01|50)'"

Faire un ssh sur la Vera sans entrer le mot de passe

Pour se connecter en ssh sans entrer le mot de passe, il faut générer et utiliser une clef de chiffrement. En plus de faciliter la connexion ssh, cette méthode permet de pouvoir scripter des actions vers la Vera.

  1. Générer le jeu de clé/certificat sur le client : Client$ ssh-keygen -t dsa
  2. Copier la clé publique sur le serveur :
    Client$ cat ~/.ssh/id_dsa.pub | ssh remote@IP_VERA "cat - >> /etc/dropbear/authorized_keys"
    Client$ ssh remote@IP_VERA
    root@MiOS_XXXXXXXX:~# /etc/init.d/dropbear restart

Fichier Log

La Vera Lite a une fâcheuse tendance à redémarrer toute seule de temps à autre. Une fois connecté en ssh, pour savoir depuis combien de temps la Vera fonctionne, il faut taper la commande uptime. Plus embêtant encore, quand la Vera redémarre, le fichier log est perdu. Donc aucune chance de le consulter pour essayer de comprendre pourquoi elle a redémarré.

Il est cependant possible de stocker le fichier log sur clef usb (SETUP → Logs → Store logs on USB device). Ainsi les logs sont conservés lors d’un redémarrage, mais ils sont tout de même effacés régulièrement pour ne pas devenir encombrant (pas plus de quelques heures de logs). Il faut reconnaître que la Vera est assez volubile dans ses logs. En effet, sans cocher la case Verbose logging (dans l’onglet SETUP → Logs → Verbose logging) 24h de logs correspond environ à 50 000 lignes de logs occupant de l’ordre de 10 Mo.

glogg

Voici un petit script bash (CatchVeraLog.sh) à exécuter sur un PC sous Linux ou sur un NAS pour conserver les logs de la Vera indépendamment de ses redémarrages. Le script signale tout redémarrage de la Vera et reprend son travail d’archivage des logs dès que cette dernière redevient accessible. Il n’y aura pas de doublons dans les logs si le stockage sur clef usb n’est pas activé. Pour fonctionner, ce script a besoin de se connecter en ssh, il faut donc avoir configuré l’authentification par clef de chiffrement comme expliqué ci-dessus. Enfin, pour ouvrir le fichier log, le mieux est d’utiliser un outil dédié comme glogg.

#!/bin/bash
# $1 : le nom du fichier qui va recevoir le log
# Exemple : ./CatchVeraLog.sh veraLog.log
 
if [ $# -lt 1 ]
then
  echo "Préciser le fichier destination : ./CatchVeraLog.sh veraLog.log"
  exit
fi
 
while true
do
  echo "Démarrage logging ($(date +%c))"
  ssh -n -o ConnectTimeout=5 -o ServerAliveInterval=10 -o ServerAliveCountMax=1 'root@192.168.1.44' "tail -n5000 -f /var/log/cmh/LuaUPnP.log" >> $1
  echo "Interruption logging ($(date +%c))"
  echo -e "\n50	$(date +%D\ %T)________________________________________" >> $1
  while ! ping -c2 '192.168.1.44' &>/dev/null
  do
    echo -n "."
    sleep 5
  done
  echo "Ping Ok"
  sleep 10
done

Informations et sources

VeraLite
Cette entrée a été publiée dans Domotique, Tutoriels and taguée , . Placez un signet sur le permalien.

2 Responses to Luup debugging (Vera Lite)

  1. Paul K

    Hi Laurent, I’m glad you found ZeroBrane Studio useful in debugging Lua scripts on Vera devices. I recently release ZeroBrane Studio for Vera that allows debugging of Lua scripts running on the device itself, eliminates the need of commenting out luup calls and provides additional functions, like running luup code fragments from the console in the IDE, upload of files to the device, download of log files and many other Vera-specific functions. You can see list of features and get more details on the product page: http://studio.zerobrane.com/vera.html. Paul.

    Reply

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *