Étant près de la frontière, le réseau DAPNET est très développé en Allemagne.

Je trouvais bon, étant radioamateur, d’avoir mon POCSAG et d’avoir un retour d’information de mes différents instruments en fonctionnement (relais radioamateur, météo, suivi des Raspberry).

J’ai donc créé le relais Dapnet F6ZBP, puissance en émission de 11 W.

Il est composé :

D’un Motorola GM950

D’un Raspberry Pi 3

Logiciel Unipager

Motorola GM950 :

Rack :

le logiciel unipager :

Schéma pour passer en émission avec Motorola disponible sur le site Dapnet :

J’ai rajouter un petit capteur de température DHT 11 qui m’envoi les donner a certain heure via un fichier Cron le tout écrit en python :

import Adafruit_DHT
import requests
import datetime
import os

# --- CONFIG ---
DHT_SENSOR = Adafruit_DHT.DHT11
DHT_PIN = 4

DAPNET_USER = "F4JSG"
DAPNET_PASS = "MDP_DAPNET"
TARGET_CALLSIGN = "F4JSG"
TX_GROUPS = ["all"]   

ALERT_THRESHOLD = 20  # seuil d'alerte température
STATE_FILE = "/home/vivi/last_alert_state.txt"

# --- Lecture capteur ---
humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)

if humidity is None or temperature is None:
    print("Erreur lecture capteur")
    exit()

message_base = f"Surveillance temperature relais DAPNET F6ZBP {temperature}C {humidity}%"

def send_dapnet(msg):
    url = "http://hampager.de/api/calls"
    payload = {
        "text": msg[:80],
        "callSignNames": [TARGET_CALLSIGN],
        "transmitterGroupNames": TX_GROUPS,
        "emergency": False
    }
    r = requests.post(url, json=payload, auth=(DAPNET_USER, DAPNET_PASS), timeout=10)
    return r.status_code

# --- Gestion alerte ---
alert_sent = False

if os.path.exists(STATE_FILE):
    with open(STATE_FILE, "r") as f:
        alert_sent = f.read().strip() == "1"

if temperature > ALERT_THRESHOLD:
    if not alert_sent:
        msg = f"ALERTE Temperature relais F6ZBP {temperature}C"
        if send_dapnet(msg) == 200:
            print("Alerte envoyée")
            with open(STATE_FILE, "w") as f:
                f.write("1")
else:
    # Reset si la température redescend
    with open(STATE_FILE, "w") as f:
        f.write("0")

print("Script terminé")

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *