La température annoncée par le relais SVXLink

Le relais SVXLink diffuse deux types de balises, une balise courte (réglée dans mon cas sur une période de 10 minutes) et une balise longue (réglée à 60 minutes). J’ai trouvé intéressant de faire annoncer la température extérieure dans la balise longue.

Sur le Raspberry Pi, j’installe un capteur de température 1wire Dallas 18b20, en boitier TO92. Un tel composant vaut moins d’un euro (sur Aliexpress par exemple). On trouve également des capteurs de température encapsulés et étanches pour être directement installés en environnement extérieur (sondes étanches sur Aliexpress).

Sur le montage suivant, vous constatez que l’on peut aisément mettre en place plusieurs sondes, simplement monter en “parallèles” les unes des autres.1wire 18b20 Une fois le capteur raccordé, exécuter les deux commandes

sudo modprobe w1-gpio
sudo modprobe w1-therm

Ajouter dans /etc/modules

w1-gpio
w1-therm

Dans mon cas, cela donne

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

snd-bcm2835
spi-bcm2708
i2c-bcm2708
i2c-dev
w1-gpio
w1-therm

Vérifiez que votre sonde 1wire branchée est à présent reconnue. Le répertoire

sys/bus/w1/devices/

doit contenir un sous-répertoire portant une série de chiffres et lettres (référence unique de la sonde 18b20). Pour lire la température, lancer la commande (prenez soin de remplacer le numéro de série par le votre).

cat /sys/bus/w1/devices/28-000000fa65b3/w1_slave

Sur la deuxième ligne alors affichée, la température est indiquée “t=26400”, ce qui équivaut à 26,4°C.

Dans un répertoire ( /home/pi/temp_1wire/), créer ce code python qui assure la lecture et calcul de moyenne de 3 mesures de températures valides (sudo nano mesuretemp.py) et créer un fichier TCL pouvant être importer par SVXLINK.

import time

sensorids = ["28-000000fa65b3"]  #Indiquer ici le numéro de série de votre 18b20 : ls /sys/bus/w1/devices/
avgtemperatures = []
for sensor in range(len(sensorids)):
        temperatures = []
        for polltime in range(0,3):
                        text = '';
                        while text.split("\n")[0].find("YES") == -1:
                                        tfile = open("/sys/bus/w1/devices/"+ sensorids[sensor] +"/w1_slave")
                                        text = tfile.read()
                                        #print text
                                        tfile.close()
                                        time.sleep(1)

                        secondline = text.split("\n")[1]
                        temperaturedata = secondline.split(" ")[9]
                        temperature = float(temperaturedata[2:])
                        #print temperature
                        temperatures.append(temperature / 1000)

        avgtemperatures.append(sum(temperatures) / float(len(temperatures)))
        #print("%.1f" % avgtemperatures[0])

file = open("/home/pi/temp_1wire/temperatures.tcl", "w")

file.write( "set temp_ext %.1f ;" % avgtemperatures[0])

file.close()

Ce script va ainsi créer un fichier /home/pi/temp_1wire/temperatures.tcl dans lequel une variable est renseignée avec sa valeur, elle sera lue par le script TCL de SVXLink.

Dans /usr/share/svxlink/events.d/local/Logic.tcl ajouter la fonction “meteo”

#
# Lecture meteo
#

proc meteo {} {

 source "/home/pi/temp_1wire/temperatures.tcl"
 playMsg "Smeter" "temp_exter";
 playNumber $temp_ext;
 playMsg "Smeter" "degres";
}

Vous aurez également créer une bibliothèque de sons : un fichier “temp_exter.wav”, disant par exemple “La température extérieure est de”, et le fichier “degres”, disant “degrés Celsius.”

Comme indiqué en introduction, pour faire lire la température lors de la balise longue, j’ajoute l’appel à la fonction “meteo” dans le code existant de “send_long_ident”, à l’endroit souhaité, et entouré de pauses silencieuse.

 playSilence 300;
 meteo;
 playSilence 500;

Il faut bien-sûr assurer la mise à jour de la donnée de mesure dans le fichier de température. (Ici une période un peu exagérer de 1 minute, dans crontab)

sudo crontab -e

*/1 * * * *  /usr/bin/python /home/pi/temp_1wire/mesuretemp.py

Vous pouvez bien-sûr exploiter d’autres données que vous auriez de disponibles (celles du station météo par exemple) et les faire s’annoncer par les balises périodiques du relais.

3 réflexions au sujet de « La température annoncée par le relais SVXLink »

  1. Merci pour toutes ces infos et pour le montage pour le relais
    je suis radio amateur en Martinique depuis 1985 et passionné de montage électronique

    73 a bientôt jacques FM5DG

  2. Advertisements
  3. bonjour,
    vous trouverez a la fin de ma page qrz 2 images version raspbian7 et svxlink 13.99 ainsi que la dernière raspbian 8 ainsi que svxlink 15.11
    ainsi qu’une documentation au format PDF pour l’installation
    73″ de F5NLG

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *