Voici un petit programme en Python qui peut compléter dstarrepeater de G4KLX. (il n’est pas compatible avec repeater)
Via la radio, vous pouvez envoyer des commandes au relais qui apportent quelques fonctionnalités complémentaires.
Elles doivent être placée dans le « Your » à la place du CQCQCQ
Voici la liste:
TIME pour vous afficher l’heure
WX vous informe de la température, la pression et le l’humidité dans votre région.
Les commandes suivantes sont réservées au Sysop du relais:
REBOOT pour redémarrer le Raspberry
HALT pour arrêter le Raspberry
(Attention le HALT arrêtera définitivement le relais, pour le redémarrer il faudra intervenir électriquement sur le raspberry)
IRCDDB pour redémarrer Ircddbgateway
TEMP RPI pour afficher la température du Raspberry
Pour l’installation du programme:
mkdir /home/pi/FxZxx (Remplacer FxZxx par l'indicatif de votre relais)
ensuite vous devez installer le programme CdeRelais.py dans le répertoire /home/pi/FxZxx/:
cd /home/pi/FxZxx/ wget http://www.f4gen.fr/G4KLX/CdeRelais.py
puis, il faut le rendre exécutable avec la commande:
sudo chmod +x CdeRelais.py
si vous souhaitez qu’il se lance au démarrage du Raspberry:
Editer le fichier rc.local:
sudo nano /etc/rc.local
Ajouter avant la commande Exit 0:
/home/pi/FxZxx/CdeRelais.py &
Pour la configuration du programme:
Dans les lignes suivantes vous devez renseigner:
– votre indicatif dans la variable sysop (attention de respecter les 8 caractères, espaces inclus
– l’indicatif de votre relais dans la variable relais (la lettre B ou C en 8eme position)
– APIwunderground doit contenir votre clef wunderground que vous pouvez obtenir gratuitement à cette adresse: http://www.wunderground.com/weather/api/d/pricing.html
– APIgps pour vos coordonnées (latitude,longitude)
sysop = "Fxxxx " relais = "FxZxx B" APIwunderground = "votre clef wunderground" APIgps = "48.65448,6.10721"
Si vous souhaitez vider le fichier log headers à chaque démarrage du raspberry, retirer les # en début des lignes suivantes:
#fichier = open(headers,"w") #fichier.close()
Si vous souhaitez modifier le nom des commandes, vous pouvez les modifier ici (en respectant les 8 caractères)
if your=="REBOOT ":
ou
if your=="HALT ":
pour la fonction HALT, vous devez retirer les # devant les lignes pour rendre cette fonction opérationnelle
Voici le Programme CdeRelais.py:
#!/usr/bin/python3 from time import sleep,strftime from datetime import date, time, datetime import time import os import subprocess import urllib.request import json # Fichiers de Config sysop = "Fxxxx " relais = "FxZxx B" APIwunderground = "" APIgps = "48.65448,6.10721" headers="/var/log/opendv/Headers.log" fmt = "%Y-%m-%d %H:%M:%S" wxurl = "http://api.wunderground.com/api/"+APIwunderground+"/conditions/lang:FR/q/"+APIgps+".json" GET_IP_CMD = "hostname --all-ip-addresses" GET_TEMP_CMD = "/usr/bin/vcgencmd measure_temp" def run_cmd(cmd): return subprocess.check_output(cmd, shell=True).decode('utf-8') def get_my_ip(): return run_cmd(GET_IP_CMD)[:-1] def get_my_temp(): return run_cmd(GET_TEMP_CMD)[5:9] #Effacement du contenu de Headers.log #fichier = open(headers,"w") #fichier.close() while True: #recherche indicatif du dernier appelant indicatif="" if os.path.getsize(headers): command="(grep -v \" /TIME\" "+headers+" |sort -r -k7,7|sort -u -k7,8|sort -r|head -1 > /tmp/lastlineheard.log) 2>&1 &" run_cmd(command) fichier = open("/tmp/lastlineheard.log","r") lignes = fichier.readlines() fichier.close() last_ligne = lignes[-1].rstrip("\n\r") #print (last_ligne) date = datetime.utcnow() last_date = date.isoformat()[:10]+' '+date.isoformat()[11:19] dateligne = last_ligne[0:19] d1 = datetime.strptime(dateligne, fmt) d2 = datetime.strptime(last_date, fmt) # convert to unix timestamp d1_ts = time.mktime(d1.timetuple()) d2_ts = time.mktime(d2.timetuple()) if int(d2_ts-d1_ts)<5: index = last_ligne.find("My: ")+4 indicatif=last_ligne[index:index+8] index = last_ligne.find("Your: ")+6 your=last_ligne[index:index+8] if indicatif==sysop: if your=="REBOOT ": fichier = open(headers,"w") fichier.close() run_cmd("reboot") raise SystemExit #if your=="HALT ": #os.system("sudo halt") #raise SystemExit if your=="TEMP RPI": sleep(2) temprpi="Temp Rpi: "+get_my_temp()+"C" command="texttransmit -text '"+temprpi+"' '"+relais+"'" run_cmd(command) if your=="IRCDDB ": sleep(2) command="sudo /etc/init.d/ircddbgateway restart" os.system(command) if your=="TIME ": heure="Il est "+strftime("%H:%M:%S") sleep(2) command="texttransmit -text '"+heure+"' '"+relais+"'" run_cmd(command) if your=="WX " and APIwunderground!="": f = urllib.request.urlopen(wxurl) json_string = f.read() parsed_json = json.loads(json_string.decode('UTF-8')) temp_c = parsed_json['current_observation']['temp_c'] pression = parsed_json['current_observation']['pressure_mb'] humidite = parsed_json['current_observation']['relative_humidity'] #print ("Current temperature is: %s" % ( temp_c) ) f.close() wxmessage = str(temp_c)+"C "+pression+"mb "+humidite sleep(1) command="texttransmit -text '"+wxmessage+"' '"+relais+"'" run_cmd(command) #Pause sleep(1)