Test de coupure de courant

Bonjour, Quelle n'est pas notre surprise en rentrant de vacances ou d'un WE de voir la maison dans le noir et le congel HS. Pour être prévenu d'une coupure de courant, il suffit de placer un script sur un raspi chez un ami. Le but est de faire un ping de temps en temps pour voir si notre box fonctionne toujours.

#!/bin/bash
#set -x
 

    CMD=xx.xx.xx.xx    #ip externe de la box
    FileMemory=FM.txt
    MYMAIL="xxxx@gmail.com"

#--------------------------------------------------------------------------------------
 
        if [ -z "$FileMemory" ] #vrai si la chaine est vide 
        then
                echo "Pas de memorisation: Fichier inexistant";
        else
                oldFM=$( cat "$FileMemory" );
        fi

    ping -c 1 -w 2 $CMD 1>2
    if [ "$?" = 0 ];then
      if[ "$oldFM" = "NOK" ];then
        echo "OK" > $FileMemory
        echo "Courant rétablit" | mail -s"De la maison" $MYMAIL
      fi
      echo "OK : $CMD" 
    else
      if[ "$oldFM" = "OK" ];then
        echo "NOK" > $FileMemory
        echo "Courant coupé" | mail -s"De la maison" $MYMAIL
      fi
      echo "NOK : $CMD"
    fi


Il y a une petite erreur mais je n'arrive pas à la débusquer:
pingtest: Syntax error: "then" unexpected (expecting "fi")

Pourtant il me semble avoir tout bien fait....


Chercheur en améliorations.

6 réponses

  1. Contributeur
    Bonsoir,

    L'ip externe de ta BOX, elle ne teste pas ta BOX mais la sortie du serveur de ton FAI et elle est toujours bonne, même si le courant est coupé chez toi et ta Box arrêté...
    Le mieux est d'avoir un onduleur sur ton installation locale qui alimente ton Raspi et ta BOX... ton Raspi t'envoie un email selon la présence du 220 ou non..
    Certains onduleurs fournissent même le signal qui donne la présence du secteur... ou un voyant que tu peux utiliser...

    et ton IP peut changer de temps en temps...

    En perfectionnant un peux, tu pourrais même savoir si c'est le disjoncteur qui est sauté (ou non)

    et tant qu'à faire, tu peux même placer une routine de wake on Lan sur ton Raspi te permettant de réveiller un PC à distance puis d'y prendre la main afin de visualiser ce qui se passe sur ton réseau ou autre sorte d'action.

    Voila mon aide sur le sujet
    0
    1. L'ip WAN ne test pas la box mais la sortie du serveur ? Depuis quand la "sortie du serveur" répond aux pings qui ne lui sont pas adressés ?
      0
    2. Contributeur
      le ping va sur la sortie du serveur chez le FAI ou au DSLAM... sur la ligne de l'IP du client

      Coupe le courant de ta BOX et va chez un copain, dans l'heure, pour pinguer ton IP externe, elle répond OK si tu as autorisé le ping. C'est mon cas...
      Ceci dit, je crois qu'il y a des nuances, il faudrait etre plus pointu; mais en tout cas, j'en ai déduit qu'on ne pouvait pas se fier à la réponse d'un ping pour en conclure que la BOX est éteinte ou qu'il n'y a plus de courant dans la maison...

      Par contre un onduleur est capable de détecter la coupure de courant avec certitude, de maintenir la Box en fonction pour pouvoir envoyer un email, grace au RASPI.
      0
    3. @jeannetsC'est simplement que ton IP a été assignée à une autre box. Un DSLAM n'a pas d'IP, il me semble même qu'il ne supporte pas le protocole IP, c'est un simple modem.
      Par contre je te rejoins sur le fait que ping la box n'assure rien. L'ip dynamique foire tout
      0
    4. Contributeur
      Il y a des DSLAM IP et des DSLAM ATM selon et sinon, C'est le BAS qui a une IP qui sert à la maintenance ou certains paramétrages distants ... Ceux qui n'ont pas d'IP sont traversant et n'apparaissent pas dans les "Tracert" et si tu regarde bien un Trace Route, il y a quand même beaucoup de points intermédiaires et/ou changement de route idfentifiés... évidement, les N° de ces IP restent confidentielles.
      0
    5. @jeannetsCe que tu vois dans les traceroutes sont des routeurs.
      0
  2. Contributeur
    Salut,

    Tiens, je viens de découvrir Shellcheck (via Korben).

    Voilà le résultat pour ton script :


    0
    1. Bizarre cette réflexion, car quand je ping ma box et que l'autorisation de ping est coupée, je n'ai pas de réponse. Lorsque je la rétablis, le ping se fait. J'en ai conclu que c'est ma box qui est pinguée et pas le serveur. Je suis avec une BBox, peut être que chez free c'est différent.
      0
      1. Contributeur
        Non, le ping autorisé va chez le FAI il n'est pas local et bien d'autre chose aussi
        0
    2. Si je débranche ma box, il faut que je sache si le serveur du FAI me renvoie le ping.... S'il ne me le renvoie pas, l'affaire est gagnée.
      0
      1. Contributeur
        Tu peux donner le dernier octet de ton IP histoire de tester dans un 1er temps le ping de ta box, s'teuplé ?
        0
      2. C'est le 34
        0
      3. Contributeur
        @thierryR51Le ping est interdit ???



        ;-(
        0
      4. Nan le ping est autorisé chez moi, mais je l'interdirai dés mon retour....
        0
      5. Contributeur
        @thierryR51Euh… tu postes depuis où là ?
        0
    3. Tout d'abord je voudrais remercier zipe31( encore une fois) pour ShellCheck. C'est un super outil. J'ai retrouvé mes erreurs.

      Une solution sur, serait de pinger le LAN à travers la box. Là ça se complique un peu, mais pas trop.
      Si je fais un
      ssh thierry@sauvegarde -pxxxxx 


      Une simple liaison SSH avec mon autre raspi à la maison me permettrait de savoir si la liaison se fait. Mais comment récupérer le résultat ? Ensuite il me faudrait une confirmation que ce ne soit pas une erreur SSH mais bien une coupure de courant.
      0
      1. J'ai changé de stratégie
         #!/bin/bash
        #set -x
        # script de suivi de présence tension à distance par ping d'un LAN par SSH.
        
            FileMemory="FM.txt"
            MYMAIL="toto@gmail.com"
        
        #--------------------------------------------------------------------------------------
        
                if [ ! -f "$FileMemory" ] # vrai si le fichier n'existe pas 
                then
                        echo "Pas de memorisation: Fichier inexistant";
                        echo "NOK" > $FileMemory
                fi 
            oldFM=$( cat "$FileMemory" );
               
        
            ssh thierry@sauvegarde -pxxxxxx "exit" 
            if [ "$?" = 0 ]
            then
              if [ "$oldFM" = "NOK" ]; then
                echo "OK" > $FileMemory
                echo "Courant rétablit" | mail -s"De la maison" $MYMAIL
              fi
            else
              if [ "$oldFM" = "OK" ]; then
                echo "NOK" > $FileMemory
                echo "Courant coupé" | mail -s"De la maison" $MYMAIL
              fi
            fi

        Ça! ça fonctionne depuis mon raspi. C'est juste une relation d'un raspi à un autre. Je pense que là je suis bon.

        0