Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/01/2018, à 11:41

pem1664

[Script] Bus 1 wire + DS2438 et sonde YL-69 + Domoticz

Bonjour à tous,
j'essaie de faire fonctionner une sonde d'hygrométrie du sol en utilisant ce capteur capteur
et en connectant la sortie analogique du capteur à l'entrée VAD d'un DS2438.
Le tout est connecté au bus 1 wire d'un raspberry pi et j'utilise Domoticz pour la visualisation et l'enregistrement.
En m'inspirant du script pour faire fonctionner le DHT22 j'arrive à utiliser le DS2438 :

#!/bin/bash

# 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="3"
DS2438VOLT="5"
#DS2438 SERVER
DS2438IDXSERVEUR="54"

#ID DS2438 sur le bus w1

CAPTEUR1="26-0000017750b5"
TMPFILE="/var/tmp/temper.txt"

#cpt=0
#while [ $cpt -lt 6 ]
#do
VAD=""
VDD=""
sleep 5
sudo cat /sys/bus/w1/devices/$CAPTEUR1/vad > $TMPFILE
#sleep 5
#sudo cat /sys/bus/w1/devices/$CAPTEUR1/vad > $TMPFILE
VAD=$(cat $TMPFILE)
sleep 5
sudo rm $TMPFILE
#sudo cat /sys/bus/w1/devices/$CAPTEUR1/vdd > $TMPFILE
#sleep 5
sudo cat /sys/bus/w1/devices/$CAPTEUR1/vdd > $TMPFILE
VDD=$(cat $TMPFILE)
sudo rm $TMPFILE
echo "VDD:$VDD"
echo "VAD:$VAD"
HUM=$((($VAD-150)*100/($VDD-150)))
#VOLT=`echo "$VDD/100"|bc -l`

#echo $VOLT
#echo "l'hygrométrie est de $HUM%"
# Send data
curl -s -i -H "Accept: application/json" "http://$SERVER/json.htm?type=command&param=udevice&idx=$DS2438HUM&nvalue=$HUM&svalue="
#curl -s -i -H "Accept: application/json" "http://$SERVER/json.htm?type=command&param=udevice&idx=$DS2438VOLT&nvalue=0&svalue=$VOLT"
exit 0

Ensuite en créant un dummy device comme pour le DHT22 et une nouvelle ligne dans cron l'hygrométrie du sol s'actualise bien en %
Par ailleurs il y a bien un soil moisure dans les dummy devices mais je ne comprend pas à quoi correspond l'unité (cp)
Il y a encore des soucis :
          1. l'interrogation du DS2438 donne régulièrement VDD=VDA ou bien l'inverse et cela je ne sais pas pourquoi

pi@Cuisine:~ $ sudo bash domoticz/scripts/DS2438.sh 
VDD:243
VAD:243
HTTP/1.1 200 OK
Content-Length: 53
Content-Type: application/json;charset=UTF-8
Cache-Control: no-cache
Pragma: no-cache
Access-Control-Allow-Origin: *

{
   "status" : "OK",
   "title" : "Update Device"
}
pi@Cuisine:~ $ sudo cat /sys/bus/w1/devices/26-0000017750b5/vad
242
pi@Cuisine:~ $ sudo cat /sys/bus/w1/devices/26-0000017750b5/vdd
329
pi@Cuisine:~ $ 

La seule facon que j'ai trouvé pour remédier à cela c'est d'interroger plusieurs fois de suite le DS2438 sur les valeurs vad et vdd avec un sleep de 2s entre chaque mesure:

pi@Cuisine:~ $ sudo bash domoticz/scripts/DS2438.sh 
VAD-1:242
VAD-2:243
VDD-1:242
VDD-2:329
HTTP/1.1 200 OK
Content-Length: 53
Content-Type: application/json;charset=UTF-8
Cache-Control: no-cache
Pragma: no-cache
Access-Control-Allow-Origin: *

{
   "status" : "OK",
   "title" : "Update Device"
}
pi@Cuisine:~ $ sudo bash domoticz/scripts/DS2438.sh 
VAD-1:329
VAD-2:243
VDD-1:329
VDD-2:329
HTTP/1.1 200 OK
Content-Length: 53
Content-Type: application/json;charset=UTF-8
Cache-Control: no-cache
Pragma: no-cache
Access-Control-Allow-Origin: *

{
   "status" : "OK",
   "title" : "Update Device"
}

Et la on voit bien que les valeurs de VAD ou VDD sont mélangées aléatoirement..  (donc ces valeurs ne sont pas utilisables). Donc il faudrait arriver a avoir des valeurs fiables pour VDD et VAD mais je ne vois pas comment faire les tests..
           2. Ensuite j'ai une erreur que je n'arrive pas tout le temps à reproduire ce matin mais qui était redondante hier :

pi@Cuisine:~ $ sudo bash domoticz/scripts/DS2438.sh 
cat : /sys/bus/w1/devices/26-0000017750b5/vad : Erreur d'entrée/sortie
VDD=329
VAD=
HTTP/1.1 200 OK
Content-Length: 53
Content-Type: application/json;charset=UTF-8
Cache-Control: no-cache
Pragma: no-cache
Access-Control-Allow-Origin: *

{
   "status" : "OK",
   "title" : "Update Device"
}

Si quelqu'un pouvais m'aider sur ces points... ca serait sympa !

Dernière modification par pem1664 (Le 31/01/2018, à 02:15)


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne

#2 Le 30/01/2018, à 14:44

pem1664

Re : [Script] Bus 1 wire + DS2438 et sonde YL-69 + Domoticz

Salut à tous j'ai toujours des soucis mais j'avance sur mon script : j'ai ajouté des fonctions pour détecter tous les capteurs du bus et faire une moyenne de chaque mesure pour lisser le résultat mais j'ai toujours des soucis.. si une ame charitable voulait bien m'aider ...
le voici :

#!/bin/bash

# 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
DS2438HUM2="6"
DS2438HUM3="7"
DS2438HUM="3"
DS2438VOLT="5"
DS2438VOLT2="8"
DS2438VOLT3="9"
#DS2438 SERVER
DS2438IDXSERVEUR="54"

#variables
TMPFILE="/var/tmp/temper.txt"
sudo rm $TMPFILE
VAD=""
VDD=""
cpt=0
nb=0
moy=0
nbmesure=5
#ID DS2438 sur le bus w1
#interrogation nombre capteurs

capteur="/var/tmp/ds2438.txt"
sudo rm $capteur
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"


#boucle sur tous les capteurs pour donner les valeurs VAD VDD et TEMPERATURE
for ligne in $(<$capteur)
do
	sudo rm $TMPFILE
	CAPTEUR=`echo $ligne`
	
	#MOYENNE VALEUR VAD
		while [ $cpt -lt $nbmesure ]
		do
		sleep 1
		sudo echo `cat /sys/bus/w1/devices/$CAPTEUR/vad` >> $TMPFILE
		cpt=$(($cpt+1))
		done
	nb=`sed -n '$=' $TMPFILE`
	vad=`awk -v first_row="1" -v last_row="$nb" 'NR>=first_row && NR<=last_row {S+=$1} END{print S}' < $TMPFILE`
	moy=`echo "$vad/$nb"|bc -l`
	VAD=$moy
	echo "################Résultats VAD CAPTEUR $CAPTEUR##################"
	echo "Total vad: $vad"
	echo "nb ligne: $nb"
	echo "Moyenne vad:$moy"
	echo "################################################################"
	sudo rm $TMPFILE
	cpt=0
	moy=0
	nb=0


	#MOYENNE VALEUR VDD
		while [ $cpt -lt $nbmesure ]
		do
		sleep 1
		sudo echo `cat /sys/bus/w1/devices/$CAPTEUR/vdd` >> $TMPFILE
		cpt=$(($cpt+1))
		done
	nb=`sed -n '$=' $TMPFILE`
	vdd=`awk -v first_row="1" -v last_row="$nb" 'NR>=first_row && NR<=last_row {S+=$1} END{print S}' < $TMPFILE`
	moy=`echo "$vdd/$nb"|bc -l`
	VDD=$moy
	echo "################Résultats VDD CAPTEUR $CAPTEUR##################"
	echo "Total vdd: $vdd"
	echo "nb ligne: $nb"
	echo "Moyenne vdd:$moy"
	HUM=`echo "-100/($VDD-130)*$VAD-$VDD*(-100/($VDD-130))"|bc -l`
	VOLT=`echo "$VDD/100"|bc -l`
	echo "################################################################"
	sudo rm $TMPFILE
	cpt=0
	moy=0
	nb=0

	#MOYENNE VALEUR TEMPERATURE
		while [ $cpt -lt $nbmesure ]
		do
		sleep 1
		sudo echo `cat /sys/bus/w1/devices/$CAPTEUR/temperature` >> $TMPFILE
		cpt=$(($cpt+1))
		done
	nb=`sed -n '$=' $TMPFILE`
	temp=`awk -v first_row="1" -v last_row="$nb" 'NR>=first_row && NR<=last_row {S+=$1} END{print S}' < $TMPFILE`
	moy=`echo "$temp/$nb"|bc -l`
	TEMP=$(cat $TMPFILE)
	echo "################Résultats TEMP CAPTEUR $CAPTEUR##################"
	echo "Total temp: $temp"
	echo "nb ligne: $nb"
	echo "Moyenne temp:$moy"
	sudo rm $TMPFILE
	TEMP=`echo "$moy / 256"|bc -l`
	echo "#################################################################"
	cpt=0
	moy=0
	nb=0
	echo "################Résultats COMPLET CAPTEUR $CAPTEUR##################"
	echo "Hum:$HUM %"
	echo "Volts:$VOLT V"
	echo "température= $TEMP °C"
	echo "####################################################################"
done


# Send data
#curl -s -i -H "Accept: application/json" "http://$SERVER/json.htm?type=command&param=udevice&idx=$DS2438HUM&nvalue=$HUM&svalue=" > /var/null
#curl -s -i -H "Accept: application/json" "http://$SERVER/json.htm?type=command&param=udevice&idx=$DS2438VOLT&nvalue=0&svalue=$VOLT"> /var/null


exit 0

le résultat :

pi@Cuisine:~/domoticz/scripts $ sudo ./DS2438.sh
nombre de capteurs: 3 
26-00000166f95d
26-0000017750b5
26-000001e426ae
rm: impossible de supprimer '/var/tmp/temper.txt': Aucun fichier ou dossier de ce type
################Résultats VAD CAPTEUR 26-00000166f95d##################
Total vad: 2285
nb ligne: 10
Moyenne vad:228.50000000000000000000
################################################################
################Résultats VDD CAPTEUR 26-00000166f95d##################
Total vdd: 985
nb ligne: 3
Moyenne vdd:328.33333333333333333333
################################################################
################Résultats TEMP CAPTEUR 26-00000166f95d##################
Total temp: 26133
nb ligne: 10
Moyenne temp:2613.30000000000000000000
#################################################################
################Résultats COMPLET CAPTEUR 26-00000166f95d##################
Hum:50.33613445378151260473 %
Volts:3.28333333333333333333 V
température= 10.20820312500000000000 °C
####################################################################
################Résultats VAD CAPTEUR 26-0000017750b5##################
Total vad: 4774
nb ligne: 3
Moyenne vad:1591.33333333333333333333
################################################################
cat: /sys/bus/w1/devices/26-0000017750b5/vdd: Erreur d'entrée/sortie
################Résultats VDD CAPTEUR 26-0000017750b5##################
Total vdd: 21948
nb ligne: 10
Moyenne vdd:2194.80000000000000000000
################################################################
################Résultats TEMP CAPTEUR 26-0000017750b5##################
Total temp: 12968
nb ligne: 5
Moyenne temp:2593.60000000000000000000
#################################################################
################Résultats COMPLET CAPTEUR 26-0000017750b5##################
Hum:29.22639803693658788142 %
Volts:21.94800000000000000000 V
température= 10.13125000000000000000 °C
####################################################################
rm: impossible de supprimer '/var/tmp/temper.txt': Aucun fichier ou dossier de ce type
################Résultats VAD CAPTEUR 26-000001e426ae##################
Total vad: 2801
nb ligne: 10
Moyenne vad:280.10000000000000000000
################################################################
################Résultats VDD CAPTEUR 26-000001e426ae##################
Total vdd: 1644
nb ligne: 5
Moyenne vdd:328.80000000000000000000
################################################################
################Résultats TEMP CAPTEUR 26-000001e426ae##################
Total temp: 25301
nb ligne: 10
Moyenne temp:2530.10000000000000000000
#################################################################
################Résultats COMPLET CAPTEUR 26-000001e426ae##################
Hum:24.49698189134808853104 %
Volts:3.28800000000000000000 V
température= 9.88320312500000000000 °C
####################################################################
pi@Cuisine:~/domoticz/scripts $ 

Dernière modification par pem1664 (Le 30/01/2018, à 14:45)


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne

#3 Le 30/01/2018, à 20:58

pem1664

Re : [Script] Bus 1 wire + DS2438 et sonde YL-69 + Domoticz

amélioration du script  pour interroger chaque capteur et avoir plus de lisibilité tant dans les résultats que dans le code :

#!/bin/bash

# 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
DS2438HUM2="6"
DS2438HUM3="7"
DS2438HUM="3"
DS2438VOLT="5"
DS2438VOLT2="8"
DS2438VOLT3="9"
#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 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"



#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 tmpvad.XXX)
	tmpvdd=$(mktemp tmpvdd.XXX)
	tmptemp=$(mktemp tmptemp.XXX)
	cpt=0
	#MOYENNE VALEUR VAD
		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
	HUM=`echo "-100/($VDD-130)*$VAD-$VDD*(-100/($VDD-130))"|bc -l`
	VOLT=`echo "$VDD/100"|bc -l`


	#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`
	#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 "##############################################################################"

	#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


# Send data
#curl -s -i -H "Accept: application/json" "http://$SERVER/json.htm?type=command&param=udevice&idx=$DS2438HUM&nvalue=$HUM&svalue=" > /var/null
#curl -s -i -H "Accept: application/json" "http://$SERVER/json.htm?type=command&param=udevice&idx=$DS2438VOLT&nvalue=0&svalue=$VOLT"> /var/null


exit 0

ce qui donne :

pi@Cuisine:~/domoticz/scripts $ sudo ./DS2438.sh 
nombre de capteurs: 3 
26-00000166f95d
26-0000017750b5
26-000001e426ae
nombre de mesures : 5 mesures
latence entre chaque mesure  : 2 s
latence entre l'intérrogation de chaque capteur  : 2 s
################Résultats VAD CAPTEUR 26-00000166f95d######################
329
146
329
146
145
Total vad: 1095
nb ligne: 5
Moyenne vad:219.00000000000000000000
##########################################################################
################Résultats VDD CAPTEUR 26-00000166f95d######################
146
146
329
145
147
Total vdd: 913
nb ligne: 5
Moyenne vdd:182.60000000000000000000
##########################################################################
################Résultats TEMP CAPTEUR 26-00000166f95d######################
4992
4960
4968
4992
4992
Total temp: 24904
nb ligne: 5
Moyenne temp:4980.80000000000000000000 -> temp moyenne : 19.45625000000000000000
###########################################################################
################Résultats COMPLET CAPTEUR 26-00000166f95d####################
Hum:-69.20152091254752851702 %
Volts:1.82600000000000000000 V
température= 19.45625000000000000000 °C
##############################################################################
################Résultats VAD CAPTEUR 26-0000017750b5######################
182
182
329
329
329
Total vad: 1351
nb ligne: 5
Moyenne vad:270.20000000000000000000
##########################################################################
################Résultats VDD CAPTEUR 26-0000017750b5######################
329
329
329
329
329
Total vdd: 1645
nb ligne: 5
Moyenne vdd:329.00000000000000000000
##########################################################################
################Résultats TEMP CAPTEUR 26-0000017750b5######################
4648
4640
4640
4640
4632
Total temp: 23200
nb ligne: 5
Moyenne temp:4640.00000000000000000000 -> temp moyenne : 18.12500000000000000000
###########################################################################
################Résultats COMPLET CAPTEUR 26-0000017750b5####################
Hum:29.54773869346733668290 %
Volts:3.29000000000000000000 V
température= 18.12500000000000000000 °C
##############################################################################
################Résultats VAD CAPTEUR 26-000001e426ae######################
279
329
278
279
278
Total vad: 1443
nb ligne: 5
Moyenne vad:288.60000000000000000000
##########################################################################
################Résultats VDD CAPTEUR 26-000001e426ae######################
329
329
279
329
329
Total vdd: 1595
nb ligne: 5
Moyenne vdd:319.00000000000000000000
##########################################################################
################Résultats TEMP CAPTEUR 26-000001e426ae######################
4680
4688
4696
4664
4680
Total temp: 23408
nb ligne: 5
Moyenne temp:4681.60000000000000000000 -> temp moyenne : 18.28750000000000000000
###########################################################################
################Résultats COMPLET CAPTEUR 26-000001e426ae####################
Hum:16.08465608465608465581 %
Volts:3.19000000000000000000 V
température= 18.28750000000000000000 °C
##############################################################################
pi@Cuisine:~/domoticz/scripts $ 

Donc j'ai des résultats relativements cohérents  sauf que je ne sais pas comment éliminer les valeurs de vad et vdd que je retrouve dans mes tableaux de mesure comme :

################Résultats VAD CAPTEUR 26-00000166f95d######################
329
146
329
146
145
Total vad: 1095
nb ligne: 5
Moyenne vad:219.00000000000000000000

ou bien

################Résultats VDD CAPTEUR 26-00000166f95d######################
146
146
329
145
147
Total vdd: 913
nb ligne: 5
Moyenne vdd:182.60000000000000000000

quelqu'un pourrait m'aider supprimer ces valeurs résilientes  qui viennent sûrement d'un mauvais reset du bus 1-wire (d'après ce que j'ai compris de la doc mais je ne sais pas comment  le faire manuellement)


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne

#4 Le 31/01/2018, à 00:40

pem1664

Re : [Script] Bus 1 wire + DS2438 et sonde YL-69 + Domoticz

Pour tous ceux qui veulent utiliser un ou plusieurs capteurs d'hygrométrie du sol avec le bus 1wire voici un script à améliorer mais qui fonctionne.
[*]Fonction : [/*]ce script scan le bus w1 du pi et vient chercher les valeurs VAD VDD et TEMPERATURE de x capteurs DS2438 présents sur le bus il permet d'afficher en console les valeurs présentent sur chaque capteur et étant donné que les valeurs reçues ne sont pas toujours fiables il moyenne sur un nombre de valeurs reçues qui peut être paramétrable. Il envoie à Domoticz les valeurs sur les capteurs créés en dummy devices (humidité, volt,temp temp+hum)

[*]À améliorer[/*]plein de trucs sûrement, je ne suis pas un cador en shell mais au moins le calcul de l'hygrométrie du sol (qui me semble être une droite genre y=-ax+b mais je n'ai pas trouvé d'autre moyen qu'empirique pour déterminer le b et c'est plus ou moins fiable, faudrait que je me fasse un banc de test pour définir vraiment les propriétés du capteur... Par ailleurs il faudrait améliorer le moyennage aussi parceque le bus 1W confond souvent le VAD et le VDD voir la température quand on l'interroge, j'ai cru comprendre que c'était une question du reset du DS2438 mais je ne vois pas du tout comment on envoie un reset au DS2438, j'ai beau chercher jtrouve pas...

#!/bin/bash

# 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')
#DS2438HUM3="7"
#DS2438HUM1="3"
#DS2438VOLT1="5"
#DS2438VOLT2="8"
#DS2438VOLT3="9"
#DS2438 SERVER
DS2438IDXSERVEUR="54"

#variables

VAD=0
VDD=0
cpt=0
nb=0
moy=0

nbmesure=3 #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 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 tmpvad.XXX)
	tmpvdd=$(mktemp tmpvdd.XXX)
	tmptemp=$(mktemp 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 %.2f`
	

	#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&param=udevice&idx=$dshum&nvalue=$HUM&svalue="> /var/null
	curl -s -i -H "Accept: application/json" "http://$SERVER/json.htm?type=command&param=udevice&idx=$dsvolt&nvalue=0&svalue=$VOLT"> /var/null
	curl -s -i -H "Accept: application/json" "http://$SERVER/json.htm?type=command&param=udevice&idx=$dstemphum&nvalue=&svalue=$TEMP;$HUM;2"> /var/null
	curl -s -i -H "Accept: application/json" "http://$SERVER/json.htm?type=command&param=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



exit 0

Je suis parti du script pour le DHT22/11 qui fonctionne bien par ailleurs mais qui pourrait être amélioré si on en utilise plusieurs  smile
Je suis preneur pour toute aide concernant l'amélioration et la fiabilité des mesures !!

EDIT2 voila un ex avec 10 mesures et du problème que j'ai :

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 $ 

on voit bien que pour les 10 mesures sur 1 capteur vdd et vad se mélangent  :

329
196
329
329
329
329
329
329
196
196
Total vdd: 2891

ici c'est vdd et ca ne devrait être qu'a 329
et la :

197
196
196
329
196
197
196
329
196
329
Total vad: 2361

idem ce qui fausse toute les mesures et ca je ne vois pas du tout comment y parer... :'(

Dernière modification par pem1664 (Le 31/01/2018, à 02:53)


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne