first commit
BIN
Dev_PocSag/Festival.mp3
Normal file
23
Dev_PocSag/data.json
Normal file
|
@ -0,0 +1,23 @@
|
|||
[
|
||||
{
|
||||
"Designation": "Motarola Noir",
|
||||
"Freq": "466050000",
|
||||
"ARP": 4101663222,
|
||||
"CapCode": "0166322",
|
||||
"NumSerial": "234IVWC812"
|
||||
},
|
||||
{
|
||||
"Designation": "Motorola Bleu",
|
||||
"Freq": "466175000",
|
||||
"ARP": 7101411852,
|
||||
"CapCode": "0141185",
|
||||
"NumSerial": "9802040601391"
|
||||
},
|
||||
{
|
||||
"Designation": "Motorola Vert",
|
||||
"Freq": "466206250",
|
||||
"ARP": 3107158462,
|
||||
"CapCode": "0715846",
|
||||
"NumSerial": "723IXU66VL"
|
||||
}
|
||||
]
|
46
Dev_PocSag/gohttp.py
Executable file
|
@ -0,0 +1,46 @@
|
|||
#!/usr/bin/env python3
|
||||
from flask import Flask, request, render_template
|
||||
import requests
|
||||
import json
|
||||
import os
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# Charger le fichier JSON
|
||||
with open('data.json', 'r') as json_file:
|
||||
data = json.load(json_file)
|
||||
|
||||
@app.route('/', methods=['GET', 'POST'])
|
||||
def index():
|
||||
if request.method == 'POST':
|
||||
# Récupérer les données du formulaire
|
||||
capcode = request.form['capcode']
|
||||
message = request.form['message']
|
||||
# Trouver la fréquence correspondant au CapCode
|
||||
frequency = get_frequency_by_capcode(capcode)
|
||||
if frequency:
|
||||
# Envoyer le message POCSAG à l'application
|
||||
send_pocsag_message(frequency, capcode, message)
|
||||
return "Message envoyé avec succès à la fréquence {}".format(frequency)
|
||||
else:
|
||||
return "CapCode non trouvé !"
|
||||
else:
|
||||
return render_template('index.html', data=data)
|
||||
|
||||
def get_frequency_by_capcode(capcode):
|
||||
for item in data:
|
||||
if item["CapCode"] == capcode:
|
||||
return item["Freq"]
|
||||
return None
|
||||
|
||||
def send_pocsag_message(frequency,capcode,message):
|
||||
# Formatage de la commande shell avec les variables
|
||||
command = f'sudo pocsag -f "{frequency}" -t 1 -r 1200 -b 3 -' # -n pour digital number
|
||||
message_command = f'printf "{capcode}:{message}" | {command}'
|
||||
print("le cmd=",message_command)
|
||||
# Exécution de la commande
|
||||
os.system(message_command)
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(host='0.0.0.0', port=8080, debug=True)
|
||||
|
14
Dev_PocSag/read.me
Normal file
|
@ -0,0 +1,14 @@
|
|||
Dans cet exemple :
|
||||
|
||||
Nous importons Flask pour gérer les requêtes Web.
|
||||
La fonction index gère à la fois les méthodes GET et POST. En cas de méthode POST, elle récupère le message à partir du formulaire et appelle la fonction send_pocsag_message. En cas de méthode GET, elle affiche le formulaire.
|
||||
La fonction send_pocsag_message est l'endroit où vous enverrez réellement le message POCSAG à votre application. Vous devrez remplacer le contenu de cette fonction par la logique réelle pour envoyer le message à votre application POCSAG.
|
||||
Le serveur Flask est démarré en mode debug pour faciliter le développement.
|
||||
|
||||
Assurez-vous de personnaliser ce script en fonction de la manière dont vous voulez envoyer les messages POCSAG à votre application. Vous devrez remplacer send_pocsag_message par le code réel qui envoie les messages POCSAG. De plus, vous devrez créer un modèle HTML pour votre formulaire (index.html).
|
||||
|
||||
Dans ce fichier HTML :
|
||||
|
||||
Nous avons un formulaire simple avec un champ de texte pour le message POCSAG et un bouton d'envoi.
|
||||
L'action du formulaire est définie sur la racine de votre site (/), ce qui signifie qu'il enverra les données du formulaire à la même route où votre application Flask attend les demandes POST.
|
||||
Le champ de texte est défini comme un <textarea> pour permettre aux utilisateurs de saisir des messages de plusieurs lignes.
|
22
Dev_PocSag/templates/index.html
Normal file
|
@ -0,0 +1,22 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Envoyer un message POCSAG</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Envoyer un message POCSAG</h1>
|
||||
<form action="/" method="post">
|
||||
<label for="capcode">CapCode:</label>
|
||||
<select id="capcode" name="capcode" required>
|
||||
{% for item in data %}
|
||||
<option value="{{ item.CapCode }}">{{ item.CapCode }}</option>
|
||||
{% endfor %}
|
||||
</select><br><br>
|
||||
<label for="message">Message:</label><br>
|
||||
<textarea id="message" name="message" rows="4" cols="50" required></textarea><br><br>
|
||||
<input type="submit" value="Envoyer le message">
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
128
README.md
Normal file
|
@ -0,0 +1,128 @@
|
|||
RpiTx modified F4IYT
|
||||
============================
|
||||
|
||||
![RpiTX](img/rpi.png)
|
||||
Source de F5OEO<br>
|
||||
https://github.com/F5OEO/rpitx
|
||||
<br>
|
||||
|
||||
## RPITX Version en production 2.0
|
||||
Avec un raspberry pi 3<br>
|
||||
J'ai modifié le système
|
||||
et crer un proto hardware<br>
|
||||
![PocSaG](img/1717951887961.jpg)
|
||||
La sortie ce fait sur le GPIO 4<br>
|
||||
Mes padgers<br>
|
||||
![PocSaG](img/1717951887952.jpg)
|
||||
|
||||
Les 2 du bas sont des numériques<br>
|
||||
et les 2 du haut des alphanumérique<br>
|
||||
|
||||
|
||||
|
||||
le fichier .img zipper sur une carte de 16Go<br>
|
||||
|
||||
|
||||
# Les infos
|
||||
|
||||
En France, les fréquences attribuées au POCSAG sont sur la bande du 466 MHz interdi à tout transmission !
|
||||
|
||||
466.025 MHz<br>
|
||||
466.050 MHz<br>
|
||||
466.075 MHz<br>
|
||||
466.175 MHz<br>
|
||||
466.20625 MHz<br>
|
||||
466.23125 MHz<br>
|
||||
|
||||
Il faut avoir un numéro nommé ARP qui est un CAP Code numéo unique d'identifiant du PAGGER<br>
|
||||
sans ce numéo il est impossible de pourvoir communiquer avec<br>
|
||||
|
||||
ex:<br>
|
||||
![PocSaG](img/1717951887955.jpg)
|
||||
ici ARP: 31 0715846 2<br>
|
||||
Pour avoir un CapCode, il suffit de supprimer les 2 premiers et le dernier chiffre ARP<br>
|
||||
Donc CAP Code=0715846<br>
|
||||
et la fréquence ici 466.20625Mhz<br>
|
||||
|
||||
# les protocols
|
||||
|
||||
TamTam, c'est Cegetel/SFR arrété en in 1999, il utilisait le protocol ERMES.<br>
|
||||
|
||||
KOBBY, c'est Bouygue Telecom, arrété en 2005, il utilisait le protocol ERMES/FLEX.<br>
|
||||
|
||||
TATOO, c'est FT/Orange, qui utilise le POCSAG, il fonctionne depuis 2000.<br>
|
||||
|
||||
pour emettre sur 438.2160 il faudrai un quartz de 49.152 Mhz<br>
|
||||
|
||||
|
||||
# Calcul du quartz
|
||||
Pour connaitre la fréquence du quartz:<br>
|
||||
|
||||
(F - IF ) /8 = Quartz<br>
|
||||
|
||||
exemple 466.050Mhz pour F<br>
|
||||
IF toujours 45Mhz<br>
|
||||
|
||||
(466.05 -45)/8 = 52.631Mhz<br>
|
||||
|
||||
|
||||
Autre methode trouver la fréquence avec un quartz:<br>
|
||||
|
||||
(Q+IF/8)*8=F<br>
|
||||
Soit un Q=48Mhz<br>
|
||||
(48+45/8)*8=429Mhz<br>
|
||||
|
||||
#Utilisation du Os RpiTx
|
||||
Attention a avoir une bonne alementation 5V 3A<br>
|
||||
connection en SSH<br>
|
||||
```cd rpitx```
|
||||
```./easytest.sh```
|
||||
![OsRpi](img/ssh.png)
|
||||
![OsRpi](img/433.png)
|
||||
![OsRpi](img/menu.png)
|
||||
![OsRpi](img/MenuSuite.png)
|
||||
![OsRpi](img/spectrum2.png)
|
||||
ici complet
|
||||
![OsRpi](img/spectrum.png)
|
||||
si incomplet Pb Alim
|
||||
![OsRpi](img/FmRDS.png)
|
||||
|
||||
# Bonnus
|
||||
SSTV en modem color 24 si non remplacer 24 par 16
|
||||
```sudo ./gosstv.sh 433.0 /home/pi/rpitx/src/resources/TestPattern.jpg F4IYT 24```
|
||||
|
||||
Stream RadioFM<br>
|
||||
```./streamradiofm.sh``
|
||||
|
||||
Cq CQ CW
|
||||
```sudo ./morse 434000000 25 "Cq Cq F4IYT"```
|
||||
|
||||
Spectrum
|
||||
```./testspectrum.sh 433000000 src/resources/TestPattern.jpg```
|
||||
|
||||
FT8
|
||||
|
||||
```sudo ./pift8 -m "CQ F4IYT JN33" -f 433.1e6```
|
||||
|
||||
# Formulaire
|
||||
allez dans le répertoire
|
||||
PocSag
|
||||
cd PocSag
|
||||
puis ./gohttp.py
|
||||
ouvrir une page Web sur IP du RPI3 avec le port 8080
|
||||
exempel ici
|
||||
http://192.168.0.70:8080/
|
||||
![OsRpi](img/FormPocsag.png)
|
||||
puis choisir dans la liste le CapCode du Pagger
|
||||
saisir un message et envoyer
|
||||
le message sera reçu si le pagger est allumé et à porter.
|
||||
pour changer la liste editer le fichier data.json
|
||||
|
||||
|
||||
|
||||
|
||||
<br>
|
||||
73<br>
|
||||
Xavier
|
||||
|
||||
|
BIN
RpiTX.v2.zip
Normal file
BIN
img/1717951887946.jpg
Normal file
After Width: | Height: | Size: 3.7 MiB |
BIN
img/1717951887949.jpg
Normal file
After Width: | Height: | Size: 4.9 MiB |
BIN
img/1717951887952.jpg
Normal file
After Width: | Height: | Size: 4.0 MiB |
BIN
img/1717951887955.jpg
Normal file
After Width: | Height: | Size: 5.6 MiB |
BIN
img/1717951887958.jpg
Normal file
After Width: | Height: | Size: 4.5 MiB |
BIN
img/1717951887961.jpg
Normal file
After Width: | Height: | Size: 4.3 MiB |
BIN
img/1717951887963.jpg
Normal file
After Width: | Height: | Size: 4.2 MiB |
BIN
img/433.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
img/FmRDS.png
Normal file
After Width: | Height: | Size: 787 KiB |
BIN
img/FormPocsag.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
img/MenuSuite.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
img/bipeur-tatoo-motorola.jpg
Normal file
After Width: | Height: | Size: 717 KiB |
BIN
img/menu.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
img/rpi.png
Normal file
After Width: | Height: | Size: 183 KiB |
BIN
img/septrum2.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
img/spectrum.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
img/ssh.png
Normal file
After Width: | Height: | Size: 64 KiB |