Préserver la SD Card: Episode I, les faits et les logs

Notre Raspberry fonctionne 24h/24h, 7 jours sur 7 durant 365 jours de l’année sur une carte SD, subit des reboot, des coupures de courant…

Les carte SD équipant les Raspberry ont un nombre limité de cycles d’écritures (entre 10 000 et 100 000 pour un même emplacement (bloc) sur la carte) lien http://fr.wikipedia.org/wiki/M%C3%A9moire_flash#Dur.C3.A9e_de_vie

Et votre OS ne travaille QUE sur cette carte. Même si les constructeurs ont intégré des mécanismes de répartition d’écriture pour limiter les écritures répétées au même endroit nous voyons vite que un problème va se poser

Nous allons voir ici les moyens dont nous disposons pour allonger la durée de vie de notre carte SD.

Plusieurs techniques sont utilisables :

  1. Diminuer la quantité d’écritures sur la SD.
  2. Ne se servir de la carte SD que pour booter, un disque USB sera utilisé pour tout le reste
  3. Les options 1 et 2 peuvent être cumulées

Voyons ici le point 1, d’autres articles suivront concernant le point 2 et 3.

Lire la suite

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Raspian : Disk full

Lors de manipulations innommables , ./build , make, git clone ….

mon raspberry m’a gratifié d’un ‘Disk full’, en effet un petit df -h m’a informé que 100 % de la partition était occupée, ce ne se fait pas.

Et la, tout d’un coup j’ai compris 💡  l’intérêt d’une option de raspi-config qui jusque la était restée nébuleuse, le expand filesystem, choix 1

Et hop , un reboot plus loin je me retrouve avec 18% occupés dans /

Allez c’est reparti : apt-get install , make,..

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Domoticz et Gpio : Les exports

RaspberryPi_ConnectingToGPIO

Dans un article précédent nous avions parlé de la mise en place des GPIO dans Domoticz.

Un point un peu délicat est la configuration de ceux ci AVANT le lancement de Domoticz. De nombreuses discussions sur le forum en font état.

Voyons ici les pistes dont nous disposons afin de configurer proprement les GPIO.

Elles sont au nombre de 2 ,

  • dans le fichier /etc/init.d/domoticz.sh
  • dans le /etc/rc.local.

Ces deux solutions sont équivalentes bien que la méthode utilisant  le rc.local soit la plus propre.

D’autre part on verra ici que l’on peut utiliser soit la commande gpio, soit directement des écritures dans le bon périphérique pour affecter nos inputs,outputs,état haut/bas …

Le fichier domoticz.sh de init.d

Nous savons que nous devons faire tous nos exports gpio avant le lancement de Domoticz, la première idée est donc de modifier le fichier domoticz.sh de /etc/init.d pour y inclure les commandes nécessaires.

Attention toutefois, ceci est dangereux car une mise à jour de ce fichier peut supprimer votre configuration.

  • La méthode avec la commande gpio

Donc en tête de ce fichier  et après la définition des diverses variables

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
DESC="Domoticz Home Automation System"
NAME=domoticz
USERNAME=pi
DAEMON=/home/$USERNAME/domoticz/$NAME
#DAEMON_ARGS="-daemon -www 8080 -log /tmp/domoticz.txt"
#DAEMON_ARGS="-daemon -www 8080 -syslog"
DAEMON_ARGS="-daemon -www 8080"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

on ajoute autant de lignes que d’exports à faire

/usr/local/bin/gpio export 18 out
/usr/local/bin/gpio export 17 in
.......
/usr/local/bin/gpio exports

N.B. il faut y indiquer le chemin complet vers gpio (/usr/local/bin)

  • La méthode sans gpio

Les gpio étant dans  /sys/class/gpio/gpioXX on peut aussi configurer directement par un

# Pin GPIO14 (OUT)
echo “14″ >  /sys/class/gpio/export
chmod 777 -R /sys/class/gpio/gpio14
echo “out” > /sys/class/gpio/gpio14/direction
echo "1" > /sys/class/gpio/gpio14/active_low

# Pin GPIO8 (IN)
echo “8″  >  /sys/class/gpio/export
chmod 777 -R /sys/class/gpio/gpio8
echo “in” >  /sys/class/gpio/gpio8/direction

On accède ici aux propriétés direction, edge,active_low, et value (pratique en lecture)

La directive active_low permet de changer l’état du signal.

Si active_low est passée à 1 et  value=1 on est à LOW alors que en l’atat « normal » on serait à HIGH.

 

Le fichier /etc/rc.local

Toutes ces commandes peuvent être placées dans le /etc/rc.local pour assurer un démarrage lors du boot du Raspberry.

Il suffit juste d’éditer le fichier en question et d’y recopier vos instructions.

 ➡ Toutefois le fichier rc.local est lu et executé APRES le lancement du fichier domoticz.sh , ordre alphabétique oblige ( cf /etc/rc2.d pour vous en convaincre : S03Domoticz.sh et S04rc.local)

Donc on supprime domoticz.sh du lancement automatique et on le rajoute ici

sudo update-rc.d -f domoticz.sh remove

Puis il faut lancer domoticz.sh dans ce fichier rc.local

Donc par exemple, mon  rc.local que j’édite par un

sudo nano /etc/rc.local

Puis à la fin du fichier ET AVANT le  ‘exit 0’ on place ses commandes.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
 
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi
/usr/local/bin/gpio export 17 out
/home/pi/domoticz/domoticz.sh
exit 0

 

Un reboot devrait confirmer que tout est correct.

IMG_9852_raspberry_pi_8_cluster_1024

Attention : Edit du mois d’octobre 2016 : Pour les versions beta Version number / build hash: 3.5841 / 77cafc4

un problème existe , le thread http://www.domoticz.com/forum/viewtopic.php?f=6&t=13979&sid=70d0e353a49921ca1c9a975886925b78 du forum anglais donne la correction en imposera de recompiler Domoticz en attendant une solution native au soft.

 

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Un fichier log pour Domoticz

Du forum il est remonté (merci beaucoup à José) une manip pour activer un log texte de Domoticz.

Nous avions, jusque là, la trace, dans le menu « Configuration » et « Log » uniquement, pas pratique à lire.

Mais depuis les versions > 2025  il y à la possibilité d’avoir un log texte et de le configurer.

Configuration

Tout ce passe dans le fichier de lancement de Domoticz situé dans /etc/init.d

Si comme moi votre fichier /etc/init.d/domoticz.sh  ne ressemblait pas à celui ci-dessous, faites une copie du fichier d’origine quelque part, puis collez la version ci-dessous à la place ou le lien ici

Attention : Si vous avez introduit des particularités propres à vous (activation de GPIO, changement d’états de GPIO, et que sais-je encore) pensez à les recopier dans le nouveau domoticz.sh

Arrêtons Domoticz par un sudo /etc/init.d/domoticz.sh stop

Mettons à jour ce fichier domoticz.sh comme ceci

#! /bin/sh
### BEGIN INIT INFO
# Provides:          domoticz
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Home Automation System
# Description:       This daemon will start the Domoticz Home Automation System
### END INIT INFO

# Do NOT "set -e"

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
DESC="Domoticz Home Automation System"
NAME=domoticz
USERNAME=pi
DAEMON=/home/$USERNAME/domoticz/$NAME
#DAEMON_ARGS="-daemon -www 8080 -log /tmp/domoticz.txt"
#DAEMON_ARGS="-daemon -www 8080 -syslog"
DAEMON_ARGS="-daemon -www 8080"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --chuid $USERNAME --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
                $DAEMON_ARGS \
                || return 2
}

#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        # Wait for children to finish too if this is a daemon that forks
        # and if the daemon is only ever run from this initscript.
        # If the above conditions are not satisfied then add some other code
        # that waits for the process to drop all resources that could be
        # needed by services started subsequently.  A last resort is to
        # sleep for some time.
        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -f $PIDFILE
        return "$RETVAL"
}

case "$1" in
  start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  status)
        status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
        ;;
  restart)
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
        exit 3
        ;;
esac

:

En haut  du fichier on a 3 lignes intéressantes, celles avec DAEMON_ARGS =

DAEMON=/home/$USERNAME/domoticz/$NAME
#DAEMON_ARGS="-daemon -www 8080 -log /tmp/domoticz.txt"
#DAEMON_ARGS="-daemon -www 8080 -syslog"
DAEMON_ARGS="-daemon -www 8080"

Par défaut on utilise -www 8080, mais en commentant cette ligne par un # et en décommentant soit celle avec domoticz.txt soit celle avec syslog on écrira soit dans le fichier /tmp/domoticz.txt soit dans les logs linux (il ne s’agit pas de /var/log/messages ni de var/log/syslog, mais je n’ai pas trouvé ou cela écrit, si quelqu’un sait…).

l’option -log /tmp/domoticz.txt peut bien sur être modifiée pour utiliser le chemin à votre convenance.

On relance Domoticz par un /etc/init.d/domoticz.start

Et donc le log dans le fichier txt ressemble à cela :

cat /tmp/domoticz.txt

Tue Oct 21 16:06:02 2014 Domoticz V2.2066 (c)2012-2014 GizMoCuz
Tue Oct 21 16:06:02 2014 System: Raspberry Pi
Tue Oct 21 16:06:02 2014 Startup Path: /home/pi/domoticz/
Tue Oct 21 16:06:04 2014 1-Wire support available (By Kernel)...
Tue Oct 21 16:06:04 2014 1-Wire: Using Kernel...
Tue Oct 21 16:06:04 2014 1Wire: Added Device: 28-001411cb7aff
Tue Oct 21 16:06:04 2014 1Wire: Added Device: 28-001411e05dff
Tue Oct 21 16:06:04 2014 1Wire: Added Device: 28-0014145523ff
Tue Oct 21 16:06:04 2014 1Wire: Added Device: 28-001411d077ff
Tue Oct 21 16:06:04 2014 Webserver started on port: 8080
Tue Oct 21 16:06:04 2014 Camera: settings (re)loaded
Tue Oct 21 16:06:06 2014 Teleinfo: Using serial port: /dev/ttyUSB20

N’oubliez pas de repasser en mode « sans log » au risque de remplir votre SD card rapidement. 😥

 

Voila une astuce bien sympathique, qui nous dépannera et merci encore à José

 

 

 

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Android et Domoticz : Androdomoticz

Premier d’une série consacrée à Android et Domoticz, voici un article sur Androdomoticz

https://play.google.com/store/apps/details?id=andromoticz.mg&hl=fr_FRa

Une fois installé l’appli,  la configuration consiste à donner  ip:port du serveur Domoticz à contacter et l’ éventuel couple user/password utilisé dans Domoticz pour en protéger l’accès.

L’affichage est clair, sous forme de liste scrollable.

Androdomoticz

Androdomoticz

Cette liste affiche , interrupteurs,volets,lumières, température, temp et Humidité et reprend, par défaut, les icônes de Domoticz.

Lire la suite

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/