Domoticz Offline

Domoticz offline : comment gérer les plantages du service ?

Yo !

Domoticz offline … rahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh ! et je ne suis pas là pour gérer le problème !!!! Bon … que fait-on ? 

En effet, je me suis rendu compte qu’il arrive que le service plante de façon assez aléatoire (rarement mais bon… il vaut mieux prévenir). Cela peut poser pas mal de problèmes si vous gérez des services critiques de votre logement (chauffage, ouverture des volets, simulation de présence pendant les vacances et bien plus encore !).

Je me suis alors creusé la tête pour trouver une solution à ce problème … et voilà c’est en place à l’aide d’un petit script bash.

Principe

Pour savoir si le service est lancé, j’utilise la commande :

Si le service est lancé, on voit alors dans la console :

sinon, on obtient :

Bon ben il ne reste plus qu’a automatiser cette vérification et … la réaction qui va avec :) c’est mieux si on a rien a faire en cas de problème quand même 😉

Mise en place

Afin d’automatiser la gestion du problème « Domoticz Offline », j’ai décidé de mettre en place cette première version de script bash « verif_domoticz.sh » :

C’est tout simple non ? Bon ok c’est perfectible mais bon … ça fait le job comme on dit 😉

Bon et maintenant ? Qu’est ce qu’on en fait vous allez me dire ?

Ben déjà, on rend le script éxécutable en utilisant la commande :

Vous pouvez désormais tester votre script simplement en tapant :

./verif_domoticz.sh

et vous devez obtenir (si le service domoticz est lancé) :

Bon ben tout à l’air de rouler :)

Il ne reste plus qu’à automatiser le lancement de la commande afin de ne plus rien avoir à faire :p pour celà j’ai décidé d’utiliser la crontab de mon utilisateur pi.

Voici les commandes à utiliser. Tout d’abord on édite :

crontab -e

Vous êtes maintenant en mode édition dans votre éditeur par défaut, il vous faut rajouter une ligne :

Avec cette ligne, n demande que la commande soit exécuté toutes les 5 minutes et que la sortie console soit écrite dans le fichier etat_domoticz.log

Afin d’augmenter la durée de vie de la carte SD de votre Raspberry, je vous conseille d’écrire ce log sur un autre périphérique (perso je me sert du disque dur de ma freebox :) ). Faites quand même attention à vérifier de temps que le fichier ne prend pas trop de place !

Voili voilou :) c’est fait, normalement vous ne devriez plus avoir ce fameux et tant redouté message : Domoticz Offline !

Si vous avez des questions, remarques, ou encore précisions à apporter, n’hésitez pas à laisser un commentaire !

 

43 réflexions au sujet de « Domoticz offline : comment gérer les plantages du service ? »

  1. Guillaume

    bonjour,
    J’ai essayé de faire fonctionner le script sur Synology mais sans succés!
    merci pour votre aide
    G

    #!/bin/bash
    # Script qui vérifie l’état de domoticz et qui relance si off
    now=$(date) #récupération de la date et heure pour les logs
    #Récupération du retour de la commande de status
    domoticz=$(/usr/syno/bin/synopkg status domoticz)
    if [ « $domoticz » == « domoticz package is stopped » ] # Si le service n’est pas lancé
    then
    relance=$(/usr/syno/bin/synopkg start domoticz) #On le lance
    echo « $now >> relance : $relance » #On log la lancement
    else
    echo « $now >> Domoticz lancé » #On log l’état normal
    fi
    exit

    Répondre
  2. julien

    bonjour,
    tuto très intéressant qui m’a encouragé à mettre en place le redémarrage automatique…
    sauf que comme des commentaires précédents, ça ne marche pas tout le temps.
    j’ai essayé
    sudo service domoticz.sh status | grep -q ‘running’
    systemctl is-active –quiet domoticz
    du coup je vous propose une alternative qui fonctionne
    datej=$(date)
    curl 192.168.x.x:8080 | grep ‘Failed’
    if [ $? == 1 ]; then
    sudo service domoticz.sh restart
    echo « $datej : relance effectuee » >> xx/xx/log/restart.log
    fi

    par contre faut vraiment que je creuse pourquoi domoticz ne tient pas une journée sans planter

    Répondre
  3. Michel13

    Bonjour,

    Merci pour ce script dont je me suis inspiré an départ.
    Cependant, après lecture du commentaire de Xavier à propos des GPIO je me suis orienté vers la solution pgrep proposée par js-martin dans le lien proposé par Xavier qui semblait plus correspondre à mon besoin car j’ai moi aussi des cartes relais.
    Mais le pgrep ne fonctionnait pas chez moi car il y avait toujours un process domoticz indépendant du process principal toujours actif. J’ai simplement remplacé pgrep par pidof, ce qui a fonctionné chez moi.
    Mon script :

    if pidof domoticz ; then
    echo « Domoticz is running »
    else
    echo « Redémarrage de Domoticz »
    sudo service domoticz.sh start
    fi
    exit 0

    Répondre
  4. Ping : Plus d’interruption de service de Domoticz | matdomotique

  5. Nono

    Bonjour à tous,

    Bon article, dont je me suis inspiré en faisant un peu plus simple en utilisant « systemctl » :


    #!/bin/bash
    # Script qui vérifie l'état de domoticz et qui relance si off

    #Récupération du retour de la commande de status
    systemctl is-active --quiet domoticz

    if [ "$?" -eq "0" ]
    then
    echo "Domoticz est actif"
    else
    echo "Redémarrage du service Domoticz"
    sudo systemctl restart domoticz
    fi
    exit 0

    Car la commande « service domoticz status » me renvoie qque chose dans ce genre :


    ● domoticz.service - LSB: Home Automation System
    Loaded: loaded (/etc/init.d/domoticz.sh)
    Active: active (running) since sam. 2016-04-23 16:05:48 CEST; 1 day 1h ago

    Ce qui est un peu plus embêtant pour interpréter son état.

    Répondre
  6. Antonio

    Salut,
    Pas mal pour l’idée du script mais il existe « monit » qui gère très bien cela et de façon bien plus simple.

    Pour le reste RAS, ton site est super. :)

    a++

    Répondre
  7. bleauge

    Bonjour
    Tres tres interssant, je cherche également à adresser le fichier log sur mon NAS,
    comme Denis CHEVRIER, y es-tu arrivé ? quelle est la synthaxe qui marche.
    Merci

    Répondre
  8. jimwest

    bonjour,

    ce script fonctionne parfaitement bien…bravo et merci

    pour ma part, j’ai également supprimé les logs, et dans crontab, j’ai mis le chemin complet
    */5 * * * * /home/pi/domoticz/scripts/verif_domoticz.sh

    Répondre
  9. Xavier

    Bonjour,
    Je cherchais pourquoi mes GPIO qui actionnent des relais repassais à l’état low au bout d’un moment.
    J’ai écris un script pour mesurer le temps au bout duquel l’état changeait.
    Résultat : ce n’est pas au bout d’un certain temps mais à heures fixes, à l’heure pile et à 30 minutes.
    J’ai cherché ce qui se passait à ces heures et j’ai trouvé dans crontab que j’avais ce script de vérification que je lançais à ces heures (j’avais choisi toutes les 30 minutes au lieu de 5)
    Je l’ai supprimé et mes GPIO sont devenus stables.
    J’ai trouvé la réponse sur ce forum ici : http://easydomoticz.com/forum/viewtopic.php?f=8&t=467
    Du coup j’utilise le script proposé dans le post cité à la place de celui ci-dessus.
    Tout ça pour dire : merci à tous

    Répondre
  10. JS MARTIN

    Bonjour,
    Je laisse juste un commentaire pour dire merci :-)
    Ce script marche parfaitement et j’ai arrêter le service :

    sudo service domoticz.sh stop

    et grace au script, il s’est parfaitement relancé dans les 5 minutes.

    J’ai supprimé les log (pour optimiser la durée de vie de la carte SD) ; je n’ai donc ajouter que

    */5 * * * * ./verif_domoticz.sh

    dans la crontable.

    Répondre
    1. Bast' Auteur de l’article

      Bonjour,

      Merci pour ce commentaire ! ça fait plaisir à lire !
      Pour ce qui est de l’optimisation de la durée de vie de la carte sd, n’hésites pas à aller jeter un petit coup d’œil à cet article qui pourrait peut être te donner des idées pour quand même garder une trace de l’exécution.

      A bientôt je l’espère !

      Bast’

      Répondre
  11. Pascal

    Slt Bast,
    Pourrais-tu s’il te plait me donner la syntaxe pour écrire le fichier de log sur le disque dur de la freebox?

    Merci d’avance pour ton aide.
    Pascal

    Répondre
    1. Bast' Auteur de l’article

      Salut Pascal !

      Désolé pour le temps de réponse… j’étais un peu sous l’eau ces derniers jours :( mais j’ai quand même réfléchis sur la façon de te répondre pour que tout le monde puisse en profiter :p
      Du coup je t’invite à revenir demain sur ce blog 😉 je t’ai préparé un petit article qui détaille tout normalement !

      Merci encore pour tes commentaires et n’hésites pas si tu as besoin d’aide !

      Bast’

      Répondre
  12. Pascal

    Slt Bast,
    En fait les espaces et le nombre d’étoiles étaient corrects, c’est le chemin qui merdait.
    Maintenant tout fonctionne correctement :-).
    Merci de ton aide.

    Pascal

    Répondre
  13. stef

    Bonjour,

    Et bien me voilà avec le même problème que Pascal.
    J’ai ajouté la ligne suivante dans ma crontab
    */5 * * * * ./verif_domoticz.sh >> /home/pi/domoticz/etat_domoticz.log

    Le fichier « etat_domoticz.log » est créé dans mon répertoire domoticz mais il reste vide.
    De plus l’heure du fichier ne change pas. Elle devrait changer toutes les 5 min il me semble ?

    D’avance merci !
    Stef

    Répondre
    1. Bast' Auteur de l’article

      Tu dois mettre le chemin vers le script, dans ton cas je pense que c’est ./domoticz/verif_domoticz.sh

      Dis moi si c’est bon :)

      Bastien

      Répondre
      1. stef

        Bonjour,

        Effectivement j’avais un problème de répertoire.
        Tout est maintenant en ordre.
        Je suis en train de tester une version modifiée du script afin de n’avoir une info. de log que lorsque Domoticz a été relancé suite à un offline.

        Merci Bastien car grâce à toi je vais avoir un système domotique stable ce qui n’était pas le cas jusqu’à présent.
        Maintenant je vais pouvoir développer mon installation (pilotage dynamique par zone de mon plancher chauffant, éclairage piloté pour la simulation de présence, surveillance centralisé de détecteurs de fumée…)

        Encore merci pour tes conseils.
        Stef

        Répondre
        1. Bast' Auteur de l’article

          Parfait !

          Je vois que tu as encore de belles heures « d’arrachage de cheveux » devant toi 😉
          N’hésites pas à repasser si tu as besoin d’aide ou encore pour partager tes avancés :)

          A bientôt j’espère et n’hésites pas à partager l’adresse de ce blog pour que tous puisse en profiter et que ce blog puisse avancer :)

          Bastien

          Répondre
  14. stef

    Bingo !!!

    Merci Bastien.
    Il me manquait effectivement le « module » dos2unix qui m’a ensuite permis de traduire le fichier verif_domoticz.sh écrit sous windows dans un format compatible avec le raspberry.
    Maintenant ça fonctionne… Pas facile lorsqu’on débute et qu’on n’y connait rien…

    Je viens d’éditer la crontab, dans un deuxième temps je modifierai l’emplacement du fichier log.

    A+
    Stef

    Répondre
  15. stef

    Bonjour Bastien,

    Je vais faire un récap. de mes manipulations.
    J’ai installé le script dans le répertoire domoticz.
    J’ai fait un « cd domoticz » pour me placer dans ce répertoire avec putty.
    Si je fais un « dir » je vois le fichier verif_domoticz.sh
    Si je lance la commande « chmod u+x verif_domoticz.sh » il n’y a aucun message donc je pense que c’est OK
    Si je lance la commande  » ./verif_domoticz.sh » depuis le répertoire « domoticz » j’ai le message d’erreur suivant : « -bash: ./verif_domoticz.sh: /bin/bash^M: bad interpreter: No such file or directory »

    Franchement je sèche, j’espère que tu pourras m’aider.
    A+
    Stef

    Répondre
    1. Bast' Auteur de l’article

      Je pense que tu as du créer ton fichier sous windows et que du coup des caractères spéciaux ce sont rajouté.
      Est-ce que tu pourrais lancer la commande suivante :
      dos2unix verif_domoticz.sh

      Voila :) en espérant que ça puisse aider !
      Tiens mois au courant !

      Bastien

      Répondre
      1. stef

        Bonjour,

        Merci d’essayer de me dépanner…

        J’ai effectivement créé le fichier sous windows.
        Concernant la commande dos2unix verif_domoticz.sh, je l’ai lancé depuis le répertoir domoticz (cd domoticz) et voici le message d’erreur : -bash: dos2unix: command not found

        A+
        Stef

        Répondre
  16. Pascal

    Slt Bast,
    C’est effectivement ce que je pense, en revanche lorsque je tape « crontab -e », je vois bien bien
    */5 *** ./verif_domoticz.sh >> /home/pi/domoticz/domoticz.log.
    Lorsque je vais sous /home/pi/domoticz/domoticz.log, le fichier log est bien créé, donc la crontab semble fonctionnée!!
    D’autres pistes?

    Merci d’avance

    Répondre
    1. Bast' Auteur de l’article

      Salut Pascal,

      D’après ton copier/coller de la crontab, il y a des erreurs (il manque des espaces entre les * et une étoile). Je te conseille de copier//coller de la ligne de l’article en adaptant juste le chemin vers le fichier de log :)

      Tiens moi au courant si ça tombe en marche 😉

      Bastien

      Répondre
    2. Bast' Auteur de l’article

      Salut Pascal,
      Suite aux commentaires de stef, je t’invite aussi à vérifier le chemin d’exécution du script :)

      En espérant que cela te débloque :)

      Bastien

      Répondre
  17. stef

    Bonjour,
    Je débute avec le Raspberry et Domoticz donc merci d’être indulgent…
    Dans quel répertoire faut-il installer le fichier verif_domoticz.sh ?
    Je l’ai mi dans le répertoire pi/domoticz et j’ai appliqué un chmod 777 au fichier.
    Malheureusement la commande ./verif_domoticz.sh ne fonctionne pas.
    Le « pi » répond -bash: ./verif_domoticz.sh: /bin/bash^M: bad interpreter: No such file or directory

    Qu’est-ce que j’ai loupé ???

    D’avance merci
    Stef

    Répondre
    1. Bast' Auteur de l’article

      Salut stef,

      Lorsque tu lances la commande tu es bien dans le répertoire qui contient le script?
      D’après ton commentaire, tu dois d’abord te placer dans le répertoire domoticz (cd domoticz) pour lancer le script (./verif_domoticz.sh) etant donné que tu as placé le script dans ce répertoire.

      A bientôt j’espère !

      Bastien

      Répondre
    1. Bast' Auteur de l’article

      Salut Pascal !

      D’après ce que je comprend de tes 2 commentaires tu as, je pense, un soucis avec la crontab…
      Tu peux aller vérifier de ce coté ?

      A très bientôt !

      Bastien

      Répondre
  18. Pascal

    Merci, le script est top, sauf que moi rien ne s’inscrit dans le log, j’ai pourtant tout ce qui est décrit dans les différents échanges. En revanche tout se passe bien lorsque je lance le script à la mano.
    Merci
    Pascal

    Répondre
  19. Patrick

    Bonjour,
    il faut aussi supprimer le cache du navigateur, c’est souvent là que je rencontre le problème du offline.

    Répondre
  20. alex

    Bonjour
    pour ma part domoticz est actuellement planté, impossible d’y accéder. En ssh, je lance la commande « sudo service domoticz.sh status » et il me répond « domoticz is running »….. Je ne pense que le plantage se limite au serveur web de l’application. Une idée pour savoir comment automatiser la vérification?

    Répondre
    1. Bast' Auteur de l’article

      Salut alex !

      Est-ce que tu sais quel est le code retour de l’appel de la page d’accueil de ton domoticz ?

      A bientôt !

      Bastien

      Répondre
  21. serge

    j’ai le même problème, ( rien dans le fichier log) . mais le sylog rapporte l’erreur suivante :
    Jan 21 16:20:01 domoticzpi /USR/SBIN/CRON[7841]: (CRON) info (No MTA installed, discarding output)

    Répondre
  22. Denis CHEVRIER

    Je pense que je n’accède pas au NAS pour une histoire réseau, en effet je n’arrive pas à me loguer depuis la console ssh du raspberry (j’ai pourtant créé un compte pi avec les droits ad hoc !)

    Répondre
  23. Denis CHEVRIER

    non c’est bon pour le fichier log en local, toutes les exécutions sont bien consignées dans le fichier (désolé je m’étais trompé de localisation…)

    Répondre
  24. Denis CHEVRIER

    Je constate que dans le fichier log il n’y a qu’une ligne correspondant à la première commande que j’ai lancée, on dirai que les autres exécutions de commande (./verif_domoticz.sh >> /home/pi/domoticz.log) n’enrichissent pas les log !

    Répondre
  25. Denis CHEVRIER

    Bonsoir et merci pour le script, j’ai suivi ton tuto et tout semble correctement fonctionner sauf que rien ne s’inscrit dans le fichier log ! Comprends pas pourquoi ? Etant novice, j’ai créé le fichier log en local (répertoire domoticz) mais rien n’y change. Peux tu m’indiquer la syntaxe dans la crontab pour adresser le fichier sur ma baie NAS (est-ce du type : /@IP/volume/chemin ?)
    Merci pour ton aide
    Bonne soirée
    Denis

    Répondre
    1. Bast' Auteur de l’article

      Salut Denis !

      – Première chose, qu’est ce qu’il se passe quand tu lances le script à la main avec la commande ./verif_domoticz.sh
      – Ensuite, est-ce que tu peux essayer avec un fichier log dans ton répertoire home? Dans ce cas, tu peux essayer avec le chemin /home/pi/domoticz.log (si pi est ton utilisateur biensûr)
      La commande serait donc : ./verif_domoticz.sh >> /home/pi/domoticz.log
      Si c’est ok, c’est que dans ton cas c’est juste un problème de chemin. Sinon tu peux aussi vérifier que tu as les droits d’écriture dans le répertoire où tu veux écrire. Tu pourra ensuite essayer de mettre la commande dans la crontab en suivant le tuto noramlement.
      – Pour finir, afin que ton fichier puisse être écrit sur ton NAS, tu dois alors pouvoir accéder à ton NAS par un chemin absolue (commencant par /) depuis ton raspberry pi, est-ce bien le cas chez toi ? Sinon … il faut que tu puisse y accéder en SSH depuis ton raspberry vi, dans ce cas … essaie avec la syntaxe :
      ./verif_domoticz.sh >> $result && ssh login:password@ip 'echo $result >> /chemin_du-repertoire_sur_ton_nas/fichier_de_log.log'
      Par contre je n’ai pas pu tester cette commande étant donné que je n’ai pas accès à plusieurs machine actuellement donc n’hésites pas à me donner le retour de la commande. Si c’est ok, tu peux mettre la commande dans la crontab comme indiqué dans le tuto :)

      Voilà ! A bientôt !

      Répondre
      1. Denis CHEVRIER

        Merci bcp pour ta réponse très rapide…
        Je viens d’essayer avec, comme tu le proposes, le fichier log directement sous /home/pi cela marche nickel (avant je l’avais positionner dans le répertoire domoticz !). Je n’avais pourtant pas fait d’erreur de syntaxe et j’ai bien les droits d’écriture puisque j’ai créé le fichier vide dans ce répertoire… pas grave je vais faire avec.
        Pour ce qui est du NAS, j’ai le message d’erreur : « -bash: $result : redirection ambiguë », je regarde si je n’ai pas fait une erreur de syntaxe.
        Merci A+

        Répondre

Répondre à alex Annuler la réponse.

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

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">