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;