Certaines commandes DTMF sont réservées uniquement aux administrateurs du relais. Un code tournant, qui change toutes les minutes, sera reconnu par le relais. L'administrateur utilise un générateur de code, soit sur son navigateur internet, soit sur son smartphone Android. Les installations (relais et PC, smartphone) doivent être à la même heure. L'algorithme de création de code tournant se réfère à l'heure courante. ====== Le logiciel Code Sysop pour Android ====== Télécharger le fichier apk à installer sur votre mobile android. Il vous permet de connaitre votre code de sécurité. - Télécharger le fichier {{:documents:sysop_code_apk.zip|sysop_code_apk.zip}} - Dezipper {{:documents:sysop_code_apk.zip|sysop_code_apk.zip}} - [[http://www.androidpit.fr/comment-installer-apk-android | Autorisez l'installation d'applications externes]] - Installer {{:documents:sysop_code_apk.zip|}} {{:documents:qr_code_code_sysop_apk.png?direct|}} ====== Vidéo de démonstration ====== {{:documents:video_code_sysop.mp4|}} ====== Le logiciel Code Sysop pour navigateur internet ====== {{ :documents:code_sysop_anim.gif |Capture d'écran de générateur de code de sécurité tournant}} Télécharger le fichier zip, décompresser puis lancer le fichier index.html {{:documents:sysop_code.zip|}} ====== Code de génération de code tournant ====== """" " SVXLINK SYSOP ROLLING CODE " SVXLink Card on http://svxcard.f5uii.net " " This Python software generate a unique code, valid only for 3 minutes. It will secure your system operator DTMF remote commands. " Requires that your Raspberry Pi is clock synchronised. " 08.02.2016 (b)- Christian, F5UII " version 0.1 - Under Creative Commons licence [by-nc-sa] http://creativecommons.org/licenses/by-nc-sa/4.0/ " """ import time import math from datetime import datetime, timedelta a = time.localtime() COMPLEXITY_CODE = 452 #Give a private complexity code. Remember to change this code for have your generated password personnal. minute1 = datetime.now() + timedelta(minutes=1) minute_1 = datetime.now() + timedelta(minutes=-1) datejour = time.strftime('%d') datemois = time.strftime('%m') dateannee= time.strftime('%y') heure = time.strftime('%H') min = time.strftime('%M') min_1 = minute_1.strftime('%M') min1 = minute1.strftime('%M') def codage(datejour,datemois,dateannee,heure,min): a=int(datejour)+int(datemois)+int(dateannee)+int(COMPLEXITY_CODE) b = a ^ (int(heure)+ int(min[1])*10+ int(min[0])) resu_b = b res = b - (math.floor(b/100))*100 resu_b= '%02d' %res c= int(datejour)*int(datemois) ^ (int(heure)*int(min)); resu_c = c res = c - (math.floor(c/100))*100 resu_c= '%02d' %res resu= str(resu_b).zfill(2) + str(resu_c).zfill(2) return resu file = open("/tmp/codes.tcl", "w") file.write( "set code_A " + codage (datejour,datemois,dateannee,heure,min_1) + ";") file.write( "set code_B " + codage (datejour,datemois,dateannee,heure,min) + ";") file.write( "set code_C " + codage (datejour,datemois,dateannee,heure,min1) + ";") file.close() ====== Code à insérer dans /usr/share/svxlink/events.d/local/Logic.tcl ====== proc dtmf_cmd_received {cmd} { set runcmd [exec sudo python /usr/share/svxlink/modules.d/accesscode.py 2>&1]; source "/tmp/codes.tcl"; set sysopcode [string range $cmd 0 3] set sscmd [string range $cmd 4 [string length $cmd]] puts "extrait $sysopcode $sscmd" if {($sysopcode == $code_A) || ($sysopcode == $code_B) || ($sysopcode == $code_C)} { #Sysop commands - 3 minutes window if {$sscmd == 11} { # Sysop command to switch relay exec echo 1 > /sys/class/gpio/gpio20/value } if {$sscmd == 10} { # Sysop command to switch relay exec echo 0 > /sys/class/gpio/gpio20/value } playMsg "Core" "please_identify"; return 1 } } Exemple de contenu de ''codes.tcl'' set code_A 9277;set code_B 7070;set code_C 7223;