Affichage des résultats 1 à 6 sur 6

Discussion: Arreter à distant son serveur domotique depuis asterisk

  1. #1
    Membre
    Date d'inscription
    avril 2012
    Localisation
    83170 Tourves (Var)
    Messages
    46
    Merci
    0
    Remercié 0 Fois en 0 Posts

    Downloads
    0
    Uploads
    0

    Arreter à distant son serveur domotique depuis asterisk

    Bonjour
    Je posséde un Rapberry PI 3 avec asterisk d'installé.
    Hier soir, il y avez de l'orage, et je n'est pas pu arrêter mon serveur à distance avec asterisk.
    J'ai donc réaliser un script agi pour l'arrêter à distance quand il y a de la foudre et que je suis pas chez moi mais au resto.

    Fichier : arret-serveur.agi
    Code:
    #!/bin/bash
    #Emplacement fichier : /var/lib/asterisk/agi-bin/reboot-serveur.agi
    #Arrêt du Serveur
    
    a=$1
    b="1234" # Mot de passe a comparer avec la variable  $1 des touches clavier de asterisk 
    
    if [ "$a" = "$b" ]
    then
      echo "Le mot de passe est correct."
      sleep 30 # Marque un temps d’arrêt 30 secondes pour que asterisk est le temps de raccrocher.
      sudo poweroff
    else
      echo "Le mot de passe $a est faux."
    fi
    
    echo
    exit 0

    Fichier : extensions.conf
    Code:
    ;# arrêter le serveur
    ; Fichier : /var/lib/asterisk/agi-bin/arret-serveur.agi
    exten => 563,1,Answer()
    exten => 563,n,Playtones(ring)
    exten => 563,n,wait(10)
    exten => 563,n,Playback(/var/lib/asterisk/sounds/custom/bonjour)
    exten => 563,n,Playback(/var/lib/asterisk/sounds/custom/message-bienvenue-arret-serveur)
    exten => 563,n,Playback(/var/lib/asterisk/sounds/custom/message-mdp-4x-chiffres)
    exten => 563,n,Playback(/var/lib/asterisk/sounds/custom/message_c-est-a-vous)
    exten => 563,n,Read(MDP,,4)  
    exten => 563,n,SayNumber(${MDP}
    exten => 563,n,Playback(/var/lib/asterisk/sounds/custom/message-arret-serveur-poweroff)
    exten => 563,n,agi(/var/lib/asterisk/agi-bin/arret-serveur.agi,${MDP})
    exten => 563,n,Playback(/var/lib/asterisk/sounds/custom/aurevoir)
    exten => 563,n,HangUp() ; racroche
    Le console de asterisk CLI me dit :
    Code:
    serveur@raspberrypi:~ $ sudo asterisk -rvvv
    Asterisk 13.14.1~dfsg-2+deb9u3, Copyright (C) 1999 - 2014, Digium, Inc. and others.
    Created by Mark Spencer <markster@digium.com>
    Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
    This is free software, with components licensed under the GNU General Public
    License version 2 and other licenses; you are welcome to redistribute it under
    certain conditions. Type 'core show license' for details.
    =========================================================================
    Connected to Asterisk 13.14.1~dfsg-2+deb9u3 currently running on raspberrypi (pid = 26486)
      == Using SIP RTP CoS mark 5
        -- Executing [563@maison:1] Answer("SIP/11-00000001", "") in new stack
        -- Executing [563@maison:2] PlayTones("SIP/11-00000001", "ring") in new stack
        -- Executing [563@maison:3] Wait("SIP/11-00000001", "10") in new stack
        -- Executing [563@maison:4] Playback("SIP/11-00000001", "/var/lib/asterisk/sounds/custom/bonjour") in new stack
        -- <SIP/11-00000001> Playing '/var/lib/asterisk/sounds/custom/bonjour.slin' (language 'fr')
        -- Executing [563@maison:5] Playback("SIP/11-00000001", "/var/lib/asterisk/sounds/custom/message-bienvenue-arret-serveur") in new stack
        -- <SIP/11-00000001> Playing '/var/lib/asterisk/sounds/custom/message-bienvenue-arret-serveur.slin' (language 'fr')
        -- Executing [563@maison:6] Playback("SIP/11-00000001", "/var/lib/asterisk/sounds/custom/message-mdp-4x-chiffres") in new stack
        -- <SIP/11-00000001> Playing '/var/lib/asterisk/sounds/custom/message-mdp-4x-chiffres.slin' (language 'fr')
        -- Executing [563@maison:7] Playback("SIP/11-00000001", "/var/lib/asterisk/sounds/custom/message_c-est-a-vous") in new stack
        -- <SIP/11-00000001> Playing '/var/lib/asterisk/sounds/custom/message_c-est-a-vous.slin' (language 'fr')
        -- Executing [563@maison:8] Read("SIP/11-00000001", "MDP,,4") in new stack
        -- Accepting a maximum of 4 digits.
        -- User entered '1234'
        -- Executing [563@maison:9] SayNumber("SIP/11-00000001", "1234") in new stack
        -- <SIP/11-00000001> Playing 'digits/thousand.slin' (language 'fr')
        -- <SIP/11-00000001> Playing 'digits/2.slin' (language 'fr')
        -- <SIP/11-00000001> Playing 'digits/hundred.slin' (language 'fr')
        -- <SIP/11-00000001> Playing 'digits/30.slin' (language 'fr')
        -- <SIP/11-00000001> Playing 'digits/4.slin' (language 'fr')
        -- Executing [563@maison:10] Playback("SIP/11-00000001", "/var/lib/asterisk/sounds/custom/message-arret-serveur-poweroff") in new stack
       -- <SIP/11-00000001> Playing '/var/lib/asterisk/sounds/custom/message-arret-serveur-poweroff.slin' (language 'fr')
       -- Executing [563@maison:11] AGI("SIP/11-00000001", "/var/lib/asterisk/agi-bin/arret-serveur.agi,1234") in new stack
        -- Launched AGI Script /var/lib/asterisk/agi-bin/arret-serveur.agi
        -- <SIP/11-00000001>AGI Script /var/lib/asterisk/agi-bin/arret-serveur.agi completed, returning 0
        -- Executing [563@maison:12] Playback("SIP/11-00000001", "/var/lib/asterisk/sounds/custom/aurevoir") in new stack
        -- <SIP/11-00000001> Playing '/var/lib/asterisk/sounds/custom/aurevoir.slin' (language 'fr')
        -- Executing [563@maison:13] Hangup("SIP/11-00000001", "") in new stack
      == Spawn extension (maison, 563, 13) exited non-zero on 'SIP/11-00000001'
    [Jul 23 18:59:03] NOTICE[26551]: chan_sip.c:29976 sip_poke_noanswer: Peer '11' is now UNREACHABLE!  Last qualify: 68
    [Jul 23 18:59:55] NOTICE[26551]: chan_sip.c:24457 handle_response_peerpoke: Peer '11' is now Reachable. (545ms / 2000ms)
    [Jul 23 19:00:59] NOTICE[26551]: chan_sip.c:29976 sip_poke_noanswer: Peer '11' is now UNREACHABLE!  Last qualify: 545
    [Jul 23 19:02:20] NOTICE[26551]: chan_sip.c:29976 sip_poke_noanswer: Peer '11' is now UNREACHABLE!  Last qualify: 3174
    [Jul 23 19:02:30] NOTICE[26551]: chan_sip.c:24457 handle_response_peerpoke: Peer '11' is now Reachable. (6ms / 2000ms)
    [Jul 23 19:04:34] NOTICE[26551]: chan_sip.c:29976 sip_poke_noanswer: Peer '11' is now UNREACHABLE!  Last qualify: 7
    [Jul 23 19:04:45] NOTICE[26551]: chan_sip.c:24457 handle_response_peerpoke: Peer '11' is now Reachable. (1764ms / 2000ms)
    [Jul 23 19:07:50] NOTICE[26551]: chan_sip.c:29976 sip_poke_noanswer: Peer '11' is now UNREACHABLE!  Last qualify: 165
    [Jul 23 19:08:01] NOTICE[26551]: chan_sip.c:24457 handle_response_peerpoke: Peer '11' is now Reachable. (663ms / 2000ms)
    [Jul 23 19:09:05] NOTICE[26551]: chan_sip.c:29976 sip_poke_noanswer: Peer '11' is now UNREACHABLE!  Last qualify: 663
    [Jul 23 19:09:16] NOTICE[26551]: chan_sip.c:24457 handle_response_peerpoke: Peer '11' is now Reachable. (1558ms / 2000ms)
    [Jul 23 19:10:20] NOTICE[26551]: chan_sip.c:29976 sip_poke_noanswer: Peer '11' is now UNREACHABLE!  Last qualify: 1558
    [Jul 23 19:10:30] NOTICE[26551]: chan_sip.c:24457 handle_response_peerpoke: Peer '11' is now Reachable. (289ms / 2000ms)
    [Jul 23 19:11:34] NOTICE[26551]: chan_sip.c:29976 sip_poke_noanswer: Peer '11' is now UNREACHABLE!  Last qualify: 289
    [Jul 23 19:11:54] NOTICE[26551]: chan_sip.c:24457 handle_response_peerpoke: Peer '11' is now Reachable. (15ms / 2000ms)
    Donne les drois au fichier
    Code:
    $ sudo chown asterisk:asterisk /var/lib/asterisk/agi-bin/arret-serveur.agi
    Code:
    sudo chmod +x /var/lib/asterisk/agi-bin/arret-serveur.agi
    Droit du fichier
    Code:
    serveur@raspberrypi:~ $ ls -alh  /var/lib/asterisk/agi-bin/arret-serveur.agi
    -rwxr-xr-x 1 asterisk asterisk 674 juil. 23 19:37 /var/lib/asterisk/agi-bin/arret-serveur.agi
    serveur@raspberrypi:~ $
    Le problème est que le script ne s'execute pas depuis Asterisk ou la variable de asterisk des touches clavier n'est pas transmis au script agi via $1 ?
    Pouvez-vous m'aider ?
    Merci.

  2. #2
    Membre Senior
    Date d'inscription
    janvier 2011
    Localisation
    Villejuif 94
    Messages
    321
    Merci
    1
    Remercié 22 Fois en 22 Posts

    Downloads
    0
    Uploads
    0

  3. #3
    Membre Senior
    Date d'inscription
    septembre 2010
    Localisation
    Where the sun shines
    Messages
    1 416
    Merci
    7
    Remercié 54 Fois en 54 Posts

    Downloads
    0
    Uploads
    0
    - le user unix asterisk (qui execute le process asterisk) peut il faire un sudo sans mdp ? cf sudoers

  4. #4
    Membre
    Date d'inscription
    avril 2012
    Localisation
    83170 Tourves (Var)
    Messages
    46
    Merci
    0
    Remercié 0 Fois en 0 Posts

    Downloads
    0
    Uploads
    0
    Bonjour

    Pour vérifier si asterisk passe la variable vers le fichier agi et si le fichier est bien executer par asterisk, j'ai créer un fichier test.agi.
    Que le code soit faux ou vrai un fichier test.txt doit être créé dans /home/serveur afin de vérifier que le fichier agi est bien exécuté par Asterisk.

    /var/lib/asterisk/agi-bin/test.agi
    Code:
    #!/bin/bash
    #Emplacement fichier : /var/lib/asterisk/agi-bin/test.agi
    #Permet de verifierr si asterisk passe la variable vers fichier agi et si le fichier est executer par asterisk
    
    MDP_ASTERISK=$1
    MDP_IDENTIQUE="1234" # Mot de passe a comparer
    #MDP_IDENTIQUE="1234"
    
    if [ "$MDP_ASTERISK" = "$MDP_IDENTIQUE" ]
    then
      echo "Le mot de passe est correct."
      echo "MDP_ASTERISK : $MDP_ASTERISK"
      touch /home/serveur/test.txt
      echo "Le mot de passe saissi au clavier est : $MDP_ASTERISK" > /home/serveur/test.txt
      echo "Le code est vrai ---> fichier : /var/lib/asterisk/agi-bin/test.agi" >> /home/serveur/test.txt
     
      sudo touch /home/serveur/test.txt
      sudo bash -c 'echo "(sudo) Le mot de passe saissi sur le clavier de asterisk est : $MDP_ASTERISK" >> /home/serveur/test.txt'
      sudo bash -c 'echo "(sudo) Le code est vrai ---> fichier : /var/lib/asterisk/agi-bin/test.agi" >> /home/serveur/test.txt'
    else
      echo "Le mot de passe est faux."
      echo "MDP_ASTERISK : $MDP_ASTERISK"
      touch /home/serveur/test.txt
      echo "Le mot de passe saissi au  clavier de asterisk est : $MDP_ASTERISK" > /home/serveur/test.txt
      echo "Le code est faux --->  fichier : /var/lib/asterisk/agi-bin/test.agi" >> /home/serveur/test.txt
     
      sudo touch /home/serveur/test.txt
      sudo bash -c 'echo "(sudo) Le mot de passe saissi au  clavier de asterisk est : $MDP_ASTERISK" >> /home/serveur/test.txt'
      sudo bash -c 'echo "(sudo) Le code est faux ---> fichier : /var/lib/asterisk/agi-bin/test.agi" >> /home/serveur/test.txt'
    fi
    
    echo
    exit 0
    /etc/asterisk/extensions.conf
    Code:
    ; Pour effectuer des tests
    exten => 551,1,Answer()
    exten => 551,n,Playtones(ring)
    exten => 551,n,wait(10)
    exten => 551,n,Playback(/var/lib/asterisk/sounds/custom/bonjour)
    exten => 551,n,Playback(/var/lib/asterisk/sounds/custom/message_c-est-a-vous)
    exten => 551,n,Read(TOUCHE,,4)
    exten => 551,n,SayNumber(${TOUCHE})
    exten => 551,n,AGI(/var/lib/asterisk/agi-bin/test.agi,${TOUCHE})
    exten => 551,n,wait(1)
    exten => 551,n,HangUp()
    Donne les droits au fichier
    Code:
    sudo chown asterisk:asterisk /var/lib/asterisk/agi-bin/test.agi
    Code:
    sudo chmod +x /var/lib/asterisk/agi-bin/arret-serveur.agi
    Droit du fichier
    Code:
    serveur@raspberrypi:~ $ ls -alh /var/lib/asterisk/agi-bin/test.agi
    -rwxr-xr-x 1 asterisk asterisk 1,5K juil. 24 20:01 /var/lib/asterisk/agi-bin/test.agi
    serveur@raspberrypi:~ $
    Puis je compose le 551 et je vérifie si le fichier test.txt est créé. Rien .
    Code:
    serveur@raspberrypi:~ $ ls
    Bureau  Documents  Images  Langages  Modèles  Musique  Public  Téléchargements  Vidéos
    serveur@raspberrypi:~ $
    La console CLI de Asterisk
    Code:
    serveur@raspberrypi:~ $ sudo asterisk -rvvv
    Asterisk 13.14.1~dfsg-2+deb9u3, Copyright (C) 1999 - 2014, Digium, Inc. and others.
    Created by Mark Spencer <markster@digium.com>
    Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
    This is free software, with components licensed under the GNU General Public
    License version 2 and other licenses; you are welcome to redistribute it under
    certain conditions. Type 'core show license' for details.
    =========================================================================
    Connected to Asterisk 13.14.1~dfsg-2+deb9u3 currently running on raspberrypi (pid = 30309)
      == Using SIP RTP CoS mark 5
        -- Executing [551@maison:1] Answer("SIP/11-00000000", "") in new stack
        -- Executing [551@maison:2] PlayTones("SIP/11-00000000", "ring") in new stack
        -- Executing [551@maison:3] Wait("SIP/11-00000000", "10") in new stack
        -- Executing [551@maison:4] Playback("SIP/11-00000000", "/var/lib/asterisk/sounds/custom/bonjour") in new stack
        -- <SIP/11-00000000> Playing '/var/lib/asterisk/sounds/custom/bonjour.slin' (language 'fr')
        -- Executing [551@maison:5] Playback("SIP/11-00000000", "/var/lib/asterisk/sounds/custom/message_c-est-a-vous") in new stack
        -- <SIP/11-00000000> Playing '/var/lib/asterisk/sounds/custom/message_c-est-a-vous.slin' (language 'fr')
        -- Executing [551@maison:6] Read("SIP/11-00000000", "TOUCHE,,4") in new stack
        -- Accepting a maximum of 4 digits.
        -- User entered '1234'
        -- Executing [551@maison:7] SayNumber("SIP/11-00000000", "1234") in new stack
        -- <SIP/11-00000000> Playing 'digits/thousand.slin' (language 'fr')
        -- <SIP/11-00000000> Playing 'digits/2.slin' (language 'fr')
        -- <SIP/11-00000000> Playing 'digits/hundred.slin' (language 'fr')
        -- <SIP/11-00000000> Playing 'digits/30.slin' (language 'fr')
        -- <SIP/11-00000000> Playing 'digits/4.slin' (language 'fr')
        -- Executing [551@maison:8] AGI("SIP/11-00000000", "/var/lib/asterisk/agi-bin/test.agi,1234") in new stack
        -- Launched AGI Script /var/lib/asterisk/agi-bin/test.agi
        -- <SIP/11-00000000>AGI Script /var/lib/asterisk/agi-bin/test.agi completed, returning 0
        -- Executing [551@maison:9] Wait("SIP/11-00000000", "1") in new stack
        -- Executing [551@maison:10] Hangup("SIP/11-00000000", "") in new stack
      == Spawn extension (maison, 551, 10) exited non-zero on 'SIP/11-00000000'
    raspberrypi*CLI>
    Quand j’exécute le fichier en console ça marche, le fichier est créé.
    Code:
    serveur@raspberrypi:~ $ bash /var/lib/asterisk/agi-bin/test.agi
    Le mot de passe est faux.
    MDP_ASTERISK : 
    
    serveur@raspberrypi:~ $
    Liste des fichiers
    Code:
    serveur@raspberrypi:~ $ ls
    Bureau  Documents  Images  Langages  Modèles  Musique  Public  Téléchargements  test.txt  Vidéos
    serveur@raspberrypi:~ $
    Contenue du fichier /home/serveur/test.txt
    Code:
    serveur@raspberrypi:~ $ cat test.txt
    Le mot de passe saissi sur sur le clavier de asterisk est : 
    Le code est faux --->  fichier : /var/lib/asterisk/agi-bin/test.agi
    (sudo) Le mot de passe saissi sur sur le clavier de asterisk est : 
    (sudo) Le code est faux ---> fichier : /var/lib/asterisk/agi-bin/test.agi
    serveur@raspberrypi:~ $
    Quand j'exexute le fichier comme ceci
    Code:
    serveur@raspberrypi:~ $ sudo bash /var/lib/asterisk/agi-bin/test.agi 1234
    Le mot de passe est correct.
    MDP_ASTERISK : 1234
    serveur@raspberrypi:~ $

    Le fichier est créé
    Code:
    serveur@raspberrypi:~ $ ls -alh  test.txt
    -rw-r--r-- 1 root root 254 juil. 25 14:28 test.txt
    serveur@raspberrypi:~ $
    le fichier contient bien le contenue du test, sauf qu'avec la partie sudo la variable ne se marque pas.
    Code:
    serveur@raspberrypi:~ $ cat test.txt
    Le mot de passe saissi sur lr clavier est : 1234
    Le code est vrai ---> fichier : /var/lib/asterisk/agi-bin/test.agi
    (sudo) Le mot de passe saissi sur le clavier de asterisk est : 
    (sudo) Le code est vrai ---> fichier : /var/lib/asterisk/agi-bin/test.agi
    serveur@raspberrypi:~ $

    Lors de l'installation de asterisk j'ai juste fait ceci :
    Code:
    sudo apt-get install asterisk-core-sounds-fr
    sudo apt install asterisk-mp3
    sudo apt install asterisk-espeak
    Puis j'ai configurer le fichier extensions.conf et sip.conf.
    Et j'ai redémarré Asterisk
    Code:
    sudo /etc/init.d/asterisk restart

    Y a t'il un problème de droit au fichier agi ?
    Y a t'il autre chose à installer pour Asterisk ?
    Y a t'il autre chose à configurer pour Asterisk ?
    Pouvez vous m'aider a résoudre le problème ?

    Merci.
    Dernière modification par xunil2003 ; 25/07/2018 à 15h48.

  5. #5
    Membre Senior
    Date d'inscription
    septembre 2010
    Localisation
    Where the sun shines
    Messages
    1 416
    Merci
    7
    Remercié 54 Fois en 54 Posts

    Downloads
    0
    Uploads
    0
    tu ne peux pas faire de echo sur stdin/out dans les agi, sinon c'est interprété comme des commandes vers asterisk (ou leur résultat)

  6. #6
    Asterisk Fan Avatar de fastm3
    Date d'inscription
    août 2010
    Localisation
    Corbeil Essonnes (91)
    Messages
    1 288
    Merci
    2
    Remercié 43 Fois en 40 Posts

    Downloads
    1
    Uploads
    1
    Si tu veux faire du bash. Un petit coup de system sera plus adapté. Ici , l'agi ne te sert a rien puisque tu n'interagis pas avec asterisk.
    Code:
    exten => _.,n,System(${ASTVARLIBDIR}/bin/myscript.sh ${CALLERID(num) } ${mavariable})
    Telisk & Lumicadre
    ↙ Un petit merci ? Suivez la flèche...

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •