Anémomètre - vent rafale

Forum pour tous les autres objets : sondes météo, capteurs, actionneurs ...
Vous avez un besoin mais vous ne savez pas quel matériel choisir ? C'est ici.
spiwit
Messages : 95
Inscription : 24 août 2016, 18:06
Contact :

Anémomètre - vent rafale

Message par spiwit »

Bonjour à tous,

J'ai remarqué sur mon anémomètre qu'à chaque mise à jour du capteur (donc plusieurs fois par minutes) il affichait la dernière rafale connue.

J'ai un script qui tourne toutes les 5 minutes qui extrait les données de l'anémomètre (entre autres capteurs) de domoticz pour l'écrire dans un fichier CSV. Et là, problème ! En effet, la valeur de vent en rafale relevée était celle affichée au moment du passage du script, mais pas forcement la valeur représentative des 5 dernières minutes.

J'ai résolu ça par la création d'un anémomètre virtuel (via le dummy device) qui affiche la vitesse moyenne du vent sur les 5 dernières minutes et la plus forte rafale enregistrée pendant les 5 dernières minutes.

Si cela intéresse donc quelqu'un, voici le script qui fait ça (en bash, a mettre dans la crontab toutes les 5min).

Code : Tout sélectionner

#!/bin/bash
# PARAMÈTRES
HTTP="127.0.0.1:8080"
idx_WIND=130 # idx de l'anémomètre
idx_WINDV=134 # idx de l'anémomètre virtuel
nbr=58 # nombre de fois que le script tourne. Par défaut 59 = 4min55 
delais=5 # delais d'attente (en secondes). Par défaut toutes les 5 secondes

# VARIABLES
file_etat="/tmp/wind"
file_speed="/tmp/windspeed"
file_dir="/tmp/winddir"

# Reset Anémomètre virtuel
curl -s "http://$HTTP/json.htm?type=command&param=udevice&idx=$idx_WINDV&nvalue=0&svalue=0;0;0;0;0;0" > /dev/null

# Reset fichiers
rm $file_etat
rm $file_speed
rm $file_dir

for ((i=0; i<$nbr; i++));
do
# Récupération des données vent
WINDDIRDEG=`curl -s "http://$HTTP/json.htm?type=devices&rid=$idx_WIND" | grep 'Direction"' | awk -F " " '{print $3}' | awk -F "," '{print $1}'`
WINDDIR=`curl -s "http://$HTTP/json.htm?type=devices&rid=$idx_WIND" | grep DirectionStr | awk -F " " '{print $3}' | awk -F "," '{print $1}' | sed "s/\"//g"`
WINDSPEED=`curl -s "http://$HTTP/json.htm?type=devices&rid=$idx_WIND" | grep Speed | awk -F " " '{print $3}' | awk -F "," '{print $1}' | sed "s/\"//g"`
WINDGUST=`curl -s "http://$HTTP/json.htm?type=devices&rid=$idx_WIND" | grep Gust | awk -F " " '{print $3}' | awk -F "," '{print $1}' | sed "s/\"//g"`

DIRV=`curl -s "http://$HTTP/json.htm?type=devices&rid=$idx_WINDV" | grep Speed | awk -F " " '{print $3}' | awk -F "," '{print $1}' | sed "s/\"//g"`
GUSTV=`curl -s "http://$HTTP/json.htm?type=devices&rid=$idx_WINDV" | grep Gust | awk -F " " '{print $3}' | awk -F "," '{print $1}' | sed "s/\"//g"`

WINDSPEEDMS=`echo "($WINDSPEED/3.6)*10" | bc -l`
WINDGUSTMS=`echo "($WINDGUST/3.6)*10" | bc -l`
GUSTVMS=`echo "($GUSTV/3.6)*10" | bc -l`

echo $WINDSPEED >> $file_speed
echo $WINDDIR >> $file_$dir

# Calcul du vent moyen
vent_moy_nbr=`cat /tmp/windspeed | wc -l`
vent_moy=`cat /tmp/windspeed | awk '{S+=$1} END{print S}' | awk '{print $1/'$vent_moy_nbr'}' | awk '{printf("%.1f\n", $1);}'`
vent_moy_ms=`echo "($vent_moy/3.6)*10" | bc -l`

# Retour d'état

echo `date +%H:%M:%S` > $file_etat
echo "direction $WINDDIRDEG ( $WINDDIR )" >> $file_etat
echo "vitesse : $WINDSPEED km/h ($WINDSPEEDMS m/s)" >> $file_etat
echo "rafale : $WINDGUST km/h ($WINDGUSTMS m/s)" >> $file_etat
echo " " >> $file_etat
echo "rafale max (/5min) : $GUSTV km/h ($GUSTVMS m/s)" >> $file_etat
echo " " >> $file_etat
echo "vent moyen : $vent_moy km/h ( $vent_moy_ms m/s)" >> $file_etat

condition=$(echo "$GUSTV < $WINDGUST" | bc -q )
# return 1 if true ; O if not

if [ $condition = 1 ]
then
   #echo "Rafale supérieur"
   curl -s "http://$HTTP/json.htm?type=command&param=udevice&idx=$idx_WINDV&nvalue=0&svalue=$WINDDIRDEG;$WINDDIR;$vent_moy_ms;$WINDGUSTMS;0;0"
else
   #echo "Rafale inférieur"
   curl -s "http://$HTTP/json.htm?type=command&param=udevice&idx=$idx_WINDV&nvalue=0&svalue=$WINDDIRDEG;$WINDDIR;$vent_moy_ms;$GUSTVMS;0;0"

fi
sleep $delais

done

domcars0
Messages : 238
Inscription : 18 févr. 2017, 20:23

Re: Anémomètre - vent rafale

Message par domcars0 »

Bravo! Beaucoup de awk, grep et autre sed ;) ! Tu as regardé du côté de la commande jq ? Elle est d'origine sur la plupart des raspbian
me@here:~$ jq
jq - commandline JSON processor [version 1.5-1-a5b5cbe]
Usage: jq [options] <jq filter> [file...]

jq is a tool for processing JSON inputs, applying the
given filter to its JSON text inputs and producing the
filter's results as JSON on standard output.
The simplest filter is ., which is the identity filter,
copying jq's input to its output unmodified (except for
formatting).
For more advanced filters see the jq(1) manpage ("man jq")
and/or https://stedolan.github.io/jq
La liberté a un prix... celui de l'effort.
Répondre