- Fonction :
- À améliorer
Code : Tout sélectionner
#!/bin/bash
BEFORE=$SECONDS
export LC_NUMERIC=C
# Domoticz server
SERVER="127.0.0.1:8080"
SERVER1="192.168.70.1:8080"
# DS2438 IDX
# le numéro de l IDX dans la liste des peripheriques
DS2438HUM=('6' '3' '7')
DS2438VOLT=('5' '8' '9')
DS2438TEMP=('10' '12' '14')
DS2438TEMPHUM=('11' '13' '15')
#DS2438 SERVER
DS2438IDXSERVEUR="54"
#variables
VAD=0
VDD=0
cpt=0
nb=0
moy=0
nbmesure=5 #nombre de mesures pour faire la moyenne
latence1=2 #latence entre l'intérrogation des différentes mesures vad vcc et temp
latence2=2 #latence entre l'intérrogation des différents DS2438 sur le bus
#ID DS2438 sur le bus w1
#interrogation nombre capteurs
capteur=$(mktemp /tmp/ds2438.XXX)
sudo echo `ls /sys/bus/w1/devices/|grep 26 ` >> $capteur
CAPTEUR=`cat $capteur|sed 's+ +\n+g'`
sudo rm $capteur
echo "$CAPTEUR">>$capteur
nbc=`sed -n '$=' $capteur`
echo "nombre de capteurs: $nbc
$CAPTEUR"
echo "nombre de mesures : $nbmesure mesures"
echo "latence entre chaque mesure : $latence1 s"
echo "latence entre l'intérrogation de chaque capteur : $latence2 s"
idcapteur=0
#boucle sur tous les capteurs pour donner les valeurs VAD VDD et TEMPERATURE
for ligne in $(<$capteur)
do
sleep $latence2
CAPTEUR=`echo $ligne`
tmpvad=$(mktemp /tmp/tmpvad.XXX)
tmpvdd=$(mktemp /tmp/tmpvdd.XXX)
tmptemp=$(mktemp /tmp/tmptemp.XXX)
cpt=0
#Récupération valeurs VAD VDD et température
while [ $cpt -lt $nbmesure ]
do
sleep $latence1
sudo echo `cat /sys/bus/w1/devices/$CAPTEUR/vad` >> $tmpvad
sleep $latence1
sudo echo `cat /sys/bus/w1/devices/$CAPTEUR/vdd` >> $tmpvdd
sleep $latence1
sudo echo `cat /sys/bus/w1/devices/$CAPTEUR/temperature` >> $tmptemp
cpt=$(($cpt+1))
done
#traitement VAD
nbvad=`sed -n '$=' $tmpvad`
vad=`awk -v first_row="1" -v last_row="$nbvad" 'NR>=first_row && NR<=last_row {S+=$1} END{print S}' < $tmpvad`
moyvad=`echo "$vad/$nbvad"|bc -l`
VAD=$moyvad
#traitement VDD
nbvdd=`sed -n '$=' $tmpvdd`
vdd=`awk -v first_row="1" -v last_row="$nbvdd" 'NR>=first_row && NR<=last_row {S+=$1} END{print S}' < $tmpvdd`
moyvdd=`echo "$vdd/$nbvdd"|bc -l`
VDD=$moyvdd
#calcul hygrométrie sol et de la tension d'alimentation
HUM=`echo "-100/($VDD-130)*$VAD-$VDD*(-100/($VDD-130))"|bc -l| xargs printf %.2f` #a améliorer je crois...
VOLT=`echo "$VDD/100"|bc -l| xargs printf %.3f`
#traitement TEMP
nbtemp=`sed -n '$=' $tmptemp`
temp=`awk -v first_row="1" -v last_row="$nbtemp" 'NR>=first_row && NR<=last_row {S+=$1} END{print S}' < $tmptemp`
moytemp=`echo "$temp/$nbtemp"|bc -l`
TEMP=$(cat $tmptemp)
TEMP=`echo "$moytemp/256"|bc -l| xargs printf %.2f`
#sudo rm $tmptemp
#cpttemp=0
#moytemp=0
#nbtemp=0
#affichage
echo "################Résultats VAD CAPTEUR $CAPTEUR######################"
echo "`cat $tmpvad`"
echo "Total vad: $vad"
echo "nb ligne: $nbvad"
echo "Moyenne vad:$moyvad"
echo "##########################################################################"
echo "################Résultats VDD CAPTEUR $CAPTEUR######################"
echo "`cat $tmpvdd`"
echo "Total vdd: $vdd"
echo "nb ligne: $nbvdd"
echo "Moyenne vdd:$moyvdd"
echo "##########################################################################"
echo "################Résultats TEMP CAPTEUR $CAPTEUR######################"
echo "`cat $tmptemp`"
echo "Total temp: $temp"
echo "nb ligne: $nbtemp"
echo "Moyenne temp:$moytemp -> temp moyenne : $TEMP"
echo "###########################################################################"
echo "################Résultats COMPLET CAPTEUR $CAPTEUR####################"
echo "Hum:$HUM %"
echo "Volts:$VOLT V"
echo "température= $TEMP °C"
echo "##############################################################################"
echo $idcapteur
dshum=$(echo ${DS2438HUM[$idcapteur]})
dsvolt=$(echo ${DS2438VOLT[$idcapteur]})
dstemp=$(echo ${DS2438TEMP[$idcapteur]})
dstemphum=$(echo ${DS2438TEMPHUM[$idcapteur]})
#ENVOI DONNEES SUR DOMOTICZ
#capteur1
curl -s -i -H "Accept: application/json" "http://$SERVER/json.htm?type=command¶m=udevice&idx=$dshum&nvalue=$HUM&svalue="> /var/null
curl -s -i -H "Accept: application/json" "http://$SERVER/json.htm?type=command¶m=udevice&idx=$dsvolt&nvalue=0&svalue=$VOLT"> /var/null
curl -s -i -H "Accept: application/json" "http://$SERVER/json.htm?type=command¶m=udevice&idx=$dstemphum&nvalue=&svalue=$TEMP;$HUM;2"> /var/null
curl -s -i -H "Accept: application/json" "http://$SERVER/json.htm?type=command¶m=udevice&idx=$dstemp&nvalue=&svalue=$TEMP"> /var/null
idcapteur=$(($idcapteur+1))
#réinitialisation des variables
sudo rm $tmpvad
moyvad=0
nbvad=0
sudo rm $tmpvdd
moyvdd=0
nbvdd=0
sudo rm $tmptemp
moytemp=0
nbtemp=0
cpt=0
done
ELAPSED=$(($SECONDS-$BEFORE))
minutes=$(($ELAPSED/60|bc))
secondes=$(($ELAPSED-$minutes*60))
echo "le script aura duré $minutes minutes et $secondes secondes "
exit 0
Je suis preneur pour toute aide concernant l'amélioration et la fiabilité des mesures !!
EDIT : je viens de trouver une commande sympa pour le lancer :
Code : Tout sélectionner
/usr/bin/time --format='la commande a duré %e secondes' sudo bash /home/pi/domoticz/scripts/DS2438.sh
EDIT2 voila un ex avec 10 mesures et du problème que j'ai :
Code : Tout sélectionner
pi@Cuisine:~/domoticz/scripts $ /usr/bin/time --format='la commande a duré %e secondes' sudo bash /home/pi/domoticz/scripts/DS2438.sh
nombre de capteurs: 3
26-00000166f95d
26-0000017750b5
26-000001e426ae
nombre de mesures : 10 mesures
latence entre chaque mesure : 2 s
latence entre l'intérrogation de chaque capteur : 2 s
################Résultats VAD CAPTEUR 26-00000166f95d######################
135
134
329
133
135
133
134
135
135
329
Total vad: 1732
nb ligne: 10
Moyenne vad:173.20000000000000000000
##########################################################################
################Résultats VDD CAPTEUR 26-00000166f95d######################
133
329
329
329
133
329
329
329
329
329
Total vdd: 2898
nb ligne: 10
Moyenne vdd:289.80000000000000000000
##########################################################################
################Résultats TEMP CAPTEUR 26-00000166f95d######################
4312
4320
4320
4280
4280
4304
4304
4304
4312
4312
Total temp: 43048
nb ligne: 10
Moyenne temp:4304.80000000000000000000 -> temp moyenne : 16.82
###########################################################################
################Résultats COMPLET CAPTEUR 26-00000166f95d####################
Hum:72.97 %
Volts:2.898 V
température= 16.82 °C
##############################################################################
0
################Résultats VAD CAPTEUR 26-0000017750b5######################
329
196
197
196
197
195
195
196
196
195
Total vad: 2092
nb ligne: 10
Moyenne vad:209.20000000000000000000
##########################################################################
################Résultats VDD CAPTEUR 26-0000017750b5######################
329
197
329
329
329
329
329
196
195
195
Total vdd: 2757
nb ligne: 10
Moyenne vdd:275.70000000000000000000
##########################################################################
################Résultats TEMP CAPTEUR 26-0000017750b5######################
4288
4288
4312
4288
4312
4296
4296
4280
4296
4296
Total temp: 42952
nb ligne: 10
Moyenne temp:4295.20000000000000000000 -> temp moyenne : 16.78
###########################################################################
################Résultats COMPLET CAPTEUR 26-0000017750b5####################
Hum:45.64 %
Volts:2.757 V
température= 16.78 °C
##############################################################################
1
################Résultats VAD CAPTEUR 26-000001e426ae######################
197
196
196
329
196
197
196
329
196
329
Total vad: 2361
nb ligne: 10
Moyenne vad:236.10000000000000000000
##########################################################################
################Résultats VDD CAPTEUR 26-000001e426ae######################
329
196
329
329
329
329
329
329
196
196
Total vdd: 2891
nb ligne: 10
Moyenne vdd:289.10000000000000000000
##########################################################################
################Résultats TEMP CAPTEUR 26-000001e426ae######################
4256
4248
4248
4240
4256
4256
4240
4224
4264
4240
Total temp: 42472
nb ligne: 10
Moyenne temp:4247.20000000000000000000 -> temp moyenne : 16.59
###########################################################################
################Résultats COMPLET CAPTEUR 26-000001e426ae####################
Hum:33.31 %
Volts:2.891 V
température= 16.59 °C
##############################################################################
2
/home/pi/domoticz/scripts/DS2438.sh: ligne 159: 229/60: Aucun fichier ou dossier de ce type
le script aura duré minutes
la commande a duré 229.35 secondes
pi@Cuisine:~/domoticz/scripts $
Code : Tout sélectionner
329
196
329
329
329
329
329
329
196
196
Total vdd: 2891et la :
Code : Tout sélectionner
197
196
196
329
196
197
196
329
196
329
Total vad: 2361